diff --git a/.dir-locals.el b/.dir-locals.el index b88ec7a795..92979fc5ed 100644 --- a/.dir-locals.el +++ b/.dir-locals.el @@ -99,6 +99,7 @@ (eval . (put 'eventually 'scheme-indent-function 1)) (eval . (put 'call-with-progress-reporter 'scheme-indent-function 1)) + (eval . (put 'with-repository 'scheme-indent-function 2)) (eval . (put 'with-temporary-git-repository 'scheme-indent-function 2)) (eval . (put 'with-environment-variables 'scheme-indent-function 1)) (eval . (put 'with-fresh-gnupg-setup 'scheme-indent-function 1)) diff --git a/.guix-channel b/.guix-channel index 3e618d79f8..b852180cf2 100644 --- a/.guix-channel +++ b/.guix-channel @@ -2,4 +2,6 @@ (channel (version 0) - (news-file "etc/news.scm")) + (news-file "etc/news.scm") + (keyring-reference "keyring") + (url "https://git.savannah.gnu.org/git/guix.git")) ;the primary URL diff --git a/Makefile.am b/Makefile.am index 9cf9318e8a..8988cdfa12 100644 --- a/Makefile.am +++ b/Makefile.am @@ -477,6 +477,7 @@ SH_TESTS = \ tests/guix-environment-container.sh \ tests/guix-graph.sh \ tests/guix-describe.sh \ + tests/guix-repl.sh \ tests/guix-lint.sh TESTS = $(SCM_TESTS) $(SH_TESTS) diff --git a/build-aux/git-authenticate.scm b/build-aux/git-authenticate.scm index 5e1fdaaa24..e670264f28 100644 --- a/build-aux/git-authenticate.scm +++ b/build-aux/git-authenticate.scm @@ -218,6 +218,17 @@ (define %historical-authorized-signing-keys (string-downcase (string-filter char-set:graphic fingerprint))))) %historical-committers)) +(define %use-historical-authorizations? + ;; Whether to allow authentication of past commits using + ;; %HISTORICAL-AUTHORIZED-SIGNING-KEYS for when '.guix-authorizations' was + ;; missing. + (getenv "GUIX_USE_HISTORICAL_AUTHORIZATIONS")) + +(define %introductory-commit + ;; This is the commit that appears in the official 'guix' channel + ;; introduction. XXX: Keep in sync with (guix channels)! + "9edb3f66fd807b096b48283debdcddccfea34bad") + (define %commits-with-bad-signature ;; Commits with a known-bad signature. '("6a34f4ccc8a5d4a48e25ad3c9c512f8634928b91")) ;2016-12-29 @@ -242,7 +253,10 @@ (define repository (match args ((_ start end) (define start-commit - (commit-lookup repository (string->oid start))) + (commit-lookup repository + (string->oid (if %use-historical-authorizations? + start + %introductory-commit)))) (define end-commit (commit-lookup repository (string->oid end))) @@ -252,7 +266,7 @@ (define authenticated-commits (filter-map (lambda (id) (false-if-exception (commit-lookup repository (string->oid id)))) - (previously-authenticated-commits))) + (previously-authenticated-commits "channels/guix"))) (define commits ;; Commits to authenticate, excluding the closure of @@ -263,6 +277,14 @@ (define commits (define reporter (progress-reporter/bar (length commits))) + (define historical-authorizations + ;; List of authorizations in effect before '.guix-authorizations' was + ;; introduced. By default, assume there were no authorizations; this + ;; is what 'guix pull' does. + (if %use-historical-authorizations? + %historical-authorized-signing-keys + '())) + (format #t (G_ "Authenticating ~a to ~a (~a commits)...~%") (commit-short-id start-commit) (commit-short-id end-commit) @@ -272,9 +294,10 @@ (define reporter (lambda (report) (authenticate-commits repository commits #:default-authorizations - %historical-authorized-signing-keys + historical-authorizations #:report-progress report))))) - (cache-authenticated-commit (oid->string (commit-id end-commit))) + (cache-authenticated-commit "channels/guix" + (oid->string (commit-id end-commit))) (unless (null? stats) (format #t (G_ "Signing statistics:~%")) diff --git a/configure.ac b/configure.ac index cbf92dad30..7675eef7c4 100644 --- a/configure.ac +++ b/configure.ac @@ -301,6 +301,7 @@ AC_CONFIG_FILES([Makefile etc/guix-daemon.cil guix/config.scm]) +AC_CONFIG_FILES([etc/committer.scm], [chmod +x etc/committer.scm]) AC_CONFIG_FILES([test-env:build-aux/test-env.in], [chmod +x test-env]) AC_CONFIG_FILES([pre-inst-env:build-aux/pre-inst-env.in], [chmod +x pre-inst-env]) diff --git a/doc/contributing.texi b/doc/contributing.texi index 88128e5498..2a73d2c47a 100644 --- a/doc/contributing.texi +++ b/doc/contributing.texi @@ -67,21 +67,6 @@ gpg: using RSA key 3CE464558A84FDC69DB40CFB090B11993D9AEBB5 @code{3CE464558A84FDC69DB40CFB090B11993D9AEBB5} (you may need to fetch this key from a key server, if you have not done it yet). -From there on, you can authenticate all the commits included in your -checkout by running: - -@example -make authenticate -@end example - -The first run takes a couple of minutes, but subsequent runs are faster. - -@quotation Note -You are advised to run @command{make authenticate} after every -@command{git pull} invocation. This ensures you keep receiving valid -changes to the repository -@end quotation - The easiest way to set up a development environment for Guix is, of course, by using Guix! The following command starts a new shell where all the dependencies and appropriate environment variables are set up to @@ -146,6 +131,21 @@ Finally, you have to invoke @code{make check} to run tests fails, take a look at installation instructions (@pxref{Installation}) or send a message to the @email{guix-devel@@gnu.org, mailing list}. +From there on, you can authenticate all the commits included in your +checkout by running: + +@example +make authenticate +@end example + +The first run takes a couple of minutes, but subsequent runs are faster. + +@quotation Note +You are advised to run @command{make authenticate} after every +@command{git pull} invocation. This ensures you keep receiving valid +changes to the repository. +@end quotation + @node Running Guix Before It Is Installed @section Running Guix Before It Is Installed @@ -991,16 +991,16 @@ rebuilding induced, commits go to different branches, along these lines: @item 300 dependent packages or less @code{master} branch (non-disruptive changes). -@item between 300 and 1,200 dependent packages +@item between 300 and 1,800 dependent packages @code{staging} branch (non-disruptive changes). This branch is intended -to be merged in @code{master} every 3 weeks or so. Topical changes +to be merged in @code{master} every 6 weeks or so. Topical changes (e.g., an update of the GNOME stack) can instead go to a specific branch (say, @code{gnome-updates}). -@item more than 1,200 dependent packages +@item more than 1,800 dependent packages @code{core-updates} branch (may include major and potentially disruptive changes). This branch is intended to be merged in @code{master} every -2.5 months or so. +6 months or so. @end table All these branches are @uref{@value{SUBSTITUTE-SERVER}, @@ -1128,18 +1128,20 @@ browse issues: @itemize @item +@url{https://issues.guix.gnu.org} provides a pleasant +interface@footnote{The web interface at +@url{https://issues.guix.gnu.org} is powered by Mumi, a nice piece of +software written in Guile, and you can help! See +@url{https://git.elephly.net/gitweb.cgi?p=software/mumi.git}.} to browse +bug reports and patches, and to participate in discussions; +@item @url{https://bugs.gnu.org/guix} lists bug reports; @item @url{https://bugs.gnu.org/guix-patches} lists patch submissions. @end itemize -You can also access both of these @i{via} the (nicer) -@url{https://issues.guix.gnu.org} interface@footnote{The web interface -at @url{https://issues.guix.gnu.org} is powered by Mumi, a nice piece of -software written in Guile, and you can help! See -@url{https://git.elephly.net/gitweb.cgi?p=software/mumi.git}.}. To view -discussions related to issue number @var{n}, go to -@indicateurl{https://issues.guix.gnu.org/issue/@var{n}} or +To view discussions related to issue number @var{n}, go to +@indicateurl{https://issues.guix.gnu.org/@var{n}} or @indicateurl{https://bugs.gnu.org/@var{n}}. If you use Emacs, you may find it more convenient to interact with diff --git a/doc/guix.texi b/doc/guix.texi index 333dd703de..5b854ccbd4 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -239,7 +239,7 @@ Programming Interface * Derivations:: Low-level interface to package derivations. * The Store Monad:: Purely functional interface to the store. * G-Expressions:: Manipulating build expressions. -* Invoking guix repl:: Fiddling with Guix interactively. +* Invoking guix repl:: Programming Guix in Guile Defining Packages @@ -3721,13 +3721,17 @@ this option is primarily useful when the daemon was running with @cindex updating Guix @cindex @command{guix pull} @cindex pull +@cindex security, @command{guix pull} +@cindex authenticity, of code obtained with @command{guix pull} Packages are installed or upgraded to the latest version available in the distribution currently available on your local machine. To update that distribution, along with the Guix tools, you must run @command{guix pull}: the command downloads the latest Guix source code and package descriptions, and deploys it. Source code is downloaded from a @uref{https://git-scm.com, Git} repository, by default the official -GNU@tie{}Guix repository, though this can be customized. +GNU@tie{}Guix repository, though this can be customized. @command{guix +pull} ensures that the code it downloads is @emph{authentic} by +verifying that commits are signed by Guix developers. Specifically, @command{guix pull} downloads code from the @dfn{channels} (@pxref{Channels}) specified by one of the followings, in this order: @@ -3925,14 +3929,25 @@ Make sure you understand its security implications before using @option{--allow-downgrades}. @end quotation +@item --disable-authentication +Allow pulling channel code without authenticating it. + +@cindex authentication, of channel code +By default, @command{guix pull} authenticates code downloaded from +channels by verifying that its commits are signed by authorized +developers, and raises an error if this is not the case. This option +instructs it to not perform any such verification. + +@quotation Note +Make sure you understand its security implications before using +@option{--disable-authentication}. +@end quotation + @item --system=@var{system} @itemx -s @var{system} Attempt to build for @var{system}---e.g., @code{i686-linux}---instead of the system type of the build host. -@item --verbose -Produce verbose output, writing build logs to the standard error output. - @item --bootstrap Use the bootstrap Guile to build the latest Guix. This option is only useful to Guix developers. @@ -4135,6 +4150,28 @@ add a meta-data file @file{.guix-channel} that contains: (directory "guix")) @end lisp +@cindex primary URL, channels +@subsection Primary URL + +Channel authors can indicate the primary URL of their channel's Git +repository in the @file{.guix-channel} file, like so: + +@lisp +(channel + (version 0) + (url "https://example.org/guix.git")) +@end lisp + +This allows @command{guix pull} to determine whether it is pulling code +from a mirror of the channel; when that is the case, it warns the user +that the mirror might be stale and displays the primary URL. That way, +users cannot be tricked into fetching code from a stale mirror that does +not receive security updates. + +This feature only makes sense for authenticated repositories, such as +the official @code{guix} channel, for which @command{guix pull} ensures +the code it fetches is authentic. + @cindex news, for channels @subsection Writing Channel News @@ -5345,7 +5382,8 @@ configuration triplets,, autoconf, Autoconf}). @item --compression=@var{tool} @itemx -C @var{tool} Compress the resulting tarball using @var{tool}---one of @code{gzip}, -@code{bzip2}, @code{xz}, @code{lzip}, or @code{none} for no compression. +@code{zstd}, @code{bzip2}, @code{xz}, @code{lzip}, or @code{none} for no +compression. @item --symlink=@var{spec} @itemx -S @var{spec} @@ -5474,7 +5512,7 @@ package definitions. * Derivations:: Low-level interface to package derivations. * The Store Monad:: Purely functional interface to the store. * G-Expressions:: Manipulating build expressions. -* Invoking guix repl:: Fiddling with Guix interactively. +* Invoking guix repl:: Programming Guix in Guile @end menu @node Package Modules @@ -8248,12 +8286,47 @@ has an associated gexp compiler, such as a @code{}. @node Invoking guix repl @section Invoking @command{guix repl} -@cindex REPL, read-eval-print loop -The @command{guix repl} command spawns a Guile @dfn{read-eval-print loop} -(REPL) for interactive programming (@pxref{Using Guile Interactively,,, guile, -GNU Guile Reference Manual}). Compared to just launching the @command{guile} +@cindex REPL, read-eval-print loop, script +The @command{guix repl} command makes it easier to program Guix in Guile +by launching a Guile @dfn{read-eval-print loop} (REPL) for interactive +programming (@pxref{Using Guile Interactively,,, guile, +GNU Guile Reference Manual}), or by running Guile scripts +(@pxref{Running Guile Scripts,,, guile, +GNU Guile Reference Manual}). +Compared to just launching the @command{guile} command, @command{guix repl} guarantees that all the Guix modules and all its -dependencies are available in the search path. You can use it this way: +dependencies are available in the search path. + +The general syntax is: + +@example +guix repl @var{options} [@var{file} @var{args}] +@end example + +When a @var{file} argument is provided, @var{file} is +executed as a Guile scripts: + +@example +guix repl my-script.scm +@end example + +To pass arguments to the script, use @code{--} to prevent them from +being interpreted as arguments to @command{guix repl} itself: + +@example +guix repl -- my-script.scm --input=foo.txt +@end example + +To make a script executable directly from the shell, using the guix +executable that is on the user's search path, add the following two +lines at the top of the script: + +@example +@code{#!/usr/bin/env -S guix repl --} +@code{!#} +@end example + +Without a file name argument, a Guile REPL is started: @example $ guix repl @@ -8302,7 +8375,7 @@ Add @var{directory} to the front of the package module search path (@pxref{Package Modules}). This allows users to define their own packages and make them visible to -the command-line tool. +the script or REPL. @item -q Inhibit loading of the @file{~/.guile} file. By default, that @@ -24594,6 +24667,107 @@ Return true if @var{obj} is a platform object. Return the name of @var{platform}---a string such as @code{"arm"}. @end deffn + +@subsubheading The Hurd in a Virtual Machine + +@cindex @code{hurd} +@cindex the Hurd + +Service @code{hurd-vm} provides support for running GNU/Hurd in a +virtual machine (VM), a so-called ``Childhurd''. The virtual machine is +a Shepherd service that can be referred to by the names @code{hurd-vm} +and @code{childhurd} and be controlled with commands such as: + +@example +herd start hurd-vm +herd stop childhurd +@end example + +The given GNU/Hurd operating system configuration is cross-compiled. + +@defvr {Scheme Variable} hurd-vm-service-type +This is the type of the Hurd in a Virtual Machine service. Its value +must be a @code{hurd-vm-configuration} object, which specifies the +operating system (@pxref{operating-system Reference}) and the disk size +for the Hurd Virtual Machine, the QEMU package to use as well as the +options for running it. + +For example: + +@lisp +(service hurd-vm-service-type + (hurd-vm-configuration + (disk-size (* 5000 (expt 2 20))) ;5G + (memory-size 1024))) ;1024MiB +@end lisp + +would create a disk image big enough to build GNU@tie{}Hello, with some +extra memory. +@end defvr + +@deftp {Data Type} hurd-vm-configuration +The data type representing the configuration for +@code{hurd-vm-service-type}. + +@table @asis +@item @code{os} (default: @var{%hurd-vm-operating-system}) +The operating system to instantiate. This default is bare-bones with a +permissive OpenSSH secure shell daemon listening on port 2222 +(@pxref{Networking Services, @code{openssh-service-type}}). + +@item @code{qemu} (default: @code{qemu-minimal}) +The QEMU package to use. + +@item @code{image} (default: @var{hurd-vm-disk-image}) +The procedure used to build the disk-image built from this +configuration. + +@item @code{disk-size} (default: @code{'guess}) +The size of the disk image. + +@item @code{memory-size} (default: @code{512}) +The memory size of the Virtual Machine in mebibytes. + +@item @code{options} (default: @code{'("--snapshot")}) +The extra options for running QEMU. + +@item @code{id} (default: @code{#f}) +If set, a non-zero positive integer used to parameterize Childhurd +instances. It is appended to the service's name, +e.g. @code{childhurd1}. + +@item @code{net-options} (default: @var{hurd-vm-net-options}) +The procedure used to produce the list of QEMU networking options. + +By default, it produces + +@lisp +'("--device" "rtl8139,netdev=net0" + "--netdev" "user,id=net0\ + ,hostfwd=tcp:127.0.0.1:-:2222\ + ,hostfwd=tcp:127.0.0.1:-:5900") +@end lisp +with forwarded ports +@example +: @code{(+ 10022 (* 1000 @var{ID}))} +: @code{(+ 15900 (* 1000 @var{ID}))} +@end example + +@end table +@end deftp + +Note that by default the VM image is volatile, i.e., once stopped the +contents are lost. If you want a stateful image instead, override the +configuration's @code{image} and @code{options} without +the @code{--snapshot} flag using something along these lines: + +@lisp +(service hurd-vm-service-type + (hurd-vm-configuration + (image (const "/out/of/store/writable/hurd.img")) + (options '("--hda")))) +@end lisp + @node Version Control Services @subsection Version Control Services diff --git a/etc/committer.scm.in b/etc/committer.scm.in new file mode 100755 index 0000000000..2f247835f3 --- /dev/null +++ b/etc/committer.scm.in @@ -0,0 +1,250 @@ +#!@GUILE@ \ +--no-auto-compile -s +!# + +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2020 Ricardo Wurmus +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see . + +;;; Commentary: + +;; This script stages and commits changes to package definitions. + +;;; Code: + +(import (sxml xpath) + (srfi srfi-1) + (srfi srfi-9) + (ice-9 format) + (ice-9 popen) + (ice-9 match) + (ice-9 rdelim) + (ice-9 textual-ports)) + +(define (read-excursion port) + "Read an expression from PORT and reset the port position before returning +the expression." + (let ((start (ftell port)) + (result (read port))) + (seek port start SEEK_SET) + result)) + +(define (surrounding-sexp port line-no) + "Return the top-level S-expression surrounding the change at line number +LINE-NO in PORT." + (let loop ((i (1- line-no)) + (last-top-level-sexp #f)) + (if (zero? i) + last-top-level-sexp + (match (peek-char port) + (#\( + (let ((sexp (read-excursion port))) + (read-line port) + (loop (1- i) sexp))) + (_ + (read-line port) + (loop (1- i) last-top-level-sexp)))))) + +(define-record-type + (make-hunk file-name + old-line-number + new-line-number + diff) + hunk? + (file-name hunk-file-name) + ;; Line number before the change + (old-line-number hunk-old-line-number) + ;; Line number after the change + (new-line-number hunk-new-line-number) + ;; The full diff to be used with "git apply --cached" + (diff hunk-diff)) + +(define* (hunk->patch hunk #:optional (port (current-output-port))) + (let ((file-name (hunk-file-name hunk))) + (format port + "diff --git a/~a b/~a~%--- a/~a~%+++ b/~a~%~a" + file-name file-name file-name file-name + (hunk-diff hunk)))) + +(define (diff-info) + "Read the diff and return a list of values." + (let ((port (open-pipe* OPEN_READ + "git" "diff" + "--no-prefix" + ;; Do not include any context lines. This makes it + ;; easier to find the S-expression surrounding the + ;; change. + "--unified=0"))) + (define (extract-line-number line-tag) + (abs (string->number + (car (string-split line-tag #\,))))) + (define (read-hunk) + (reverse + (let loop ((lines '())) + (let ((line (read-line port 'concat))) + (cond + ((eof-object? line) lines) + ((or (string-prefix? "@@ " line) + (string-prefix? "diff --git" line)) + (unget-string port line) + lines) + (else (loop (cons line lines)))))))) + (define info + (let loop ((acc '()) + (file-name #f)) + (let ((line (read-line port))) + (cond + ((eof-object? line) acc) + ((string-prefix? "--- " line) + (match (string-split line #\space) + ((_ file-name) + (loop acc file-name)))) + ((string-prefix? "@@ " line) + (match (string-split line #\space) + ((_ old-start new-start . _) + (loop (cons (make-hunk file-name + (extract-line-number old-start) + (extract-line-number new-start) + (string-join (cons* line "\n" + (read-hunk)) "")) + acc) + file-name)))) + (else (loop acc file-name)))))) + (close-pipe port) + info)) + +(define (old-sexp hunk) + "Using the diff information in HUNK return the unmodified S-expression +corresponding to the top-level definition containing the staged changes." + ;; TODO: We can't seek with a pipe port... + (let* ((port (open-pipe* OPEN_READ + "git" "show" (string-append "HEAD:" + (hunk-file-name hunk)))) + (contents (get-string-all port))) + (close-pipe port) + (call-with-input-string contents + (lambda (port) + (surrounding-sexp port (hunk-old-line-number hunk)))))) + +(define (new-sexp hunk) + "Using the diff information in HUNK return the modified S-expression +corresponding to the top-level definition containing the staged changes." + (call-with-input-file (hunk-file-name hunk) + (lambda (port) + (surrounding-sexp port + (hunk-new-line-number hunk))))) + +(define* (commit-message file-name old new #:optional (port (current-output-port))) + "Print ChangeLog commit message for changes between OLD and NEW." + (define (get-values expr field) + (match ((sxpath `(// ,field quasiquote *)) expr) + (() '()) + ((first . rest) + (map cadadr first)))) + (define (listify items) + (match items + ((one) one) + ((one two) + (string-append one " and " two)) + ((one two . more) + (string-append (string-join (drop-right items 1) ", ") + ", and " (first (take-right items 1)))))) + (define variable-name + (second old)) + (define version + (and=> ((sxpath '(// version *any*)) new) + first)) + (format port + "gnu: ~a: Update to ~a.~%~%* ~a (~a): Update to ~a.~%" + variable-name version file-name variable-name version) + (for-each (lambda (field) + (let ((old-values (get-values old field)) + (new-values (get-values new field))) + (or (equal? old-values new-values) + (let ((removed (lset-difference eq? old-values new-values)) + (added (lset-difference eq? new-values old-values))) + (format port + "[~a]: ~a~%" field + (match (list (map symbol->string removed) + (map symbol->string added)) + ((() added) + (format #f "Add ~a." + (listify added))) + ((removed ()) + (format #f "Remove ~a." + (listify removed))) + ((removed added) + (format #f "Remove ~a; add ~a." + (listify removed) + (listify added))))))))) + '(inputs propagated-inputs native-inputs))) + +(define (group-hunks-by-sexp hunks) + "Return a list of pairs associating all hunks with the S-expression they are +modifying." + (fold (lambda (sexp hunk acc) + (match acc + (((previous-sexp . hunks) . rest) + (if (equal? sexp previous-sexp) + (cons (cons previous-sexp + (cons hunk hunks)) + rest) + (cons (cons sexp (list hunk)) + acc))) + (_ + (cons (cons sexp (list hunk)) + acc)))) + '() + (map new-sexp hunks) + hunks)) + +(define (new+old+hunks hunks) + (map (match-lambda + ((new . hunks) + (cons* new (old-sexp (first hunks)) hunks))) + (group-hunks-by-sexp hunks))) + +(define (main . args) + (match (diff-info) + (() + (display "Nothing to be done." (current-error-port))) + (hunks + (for-each (match-lambda + ((new old . hunks) + (for-each (lambda (hunk) + (let ((port (open-pipe* OPEN_WRITE + "git" "apply" + "--cached" + "--unidiff-zero"))) + (hunk->patch hunk port) + (unless (eqv? 0 (status:exit-val (close-pipe port))) + (error "Cannot apply"))) + (sleep 1)) + hunks) + (commit-message (hunk-file-name (first hunks)) + old new + (current-output-port)) + (let ((port (open-pipe* OPEN_WRITE "git" "commit" "-F" "-"))) + (commit-message (hunk-file-name (first hunks)) + old new + port) + (sleep 1) + (unless (eqv? 0 (status:exit-val (close-pipe port))) + (error "Cannot commit"))))) + (new+old+hunks hunks))))) + +(main) diff --git a/etc/news.scm b/etc/news.scm index 6bf88ccb44..62ec68bab2 100644 --- a/etc/news.scm +++ b/etc/news.scm @@ -13,6 +13,80 @@ (channel-news (version 0) + (entry (commit "43badf261f4688c8a7a7a9004a4bff8acb205835") + (title (en "@command{guix pull} authenticates channels") + (de "@command{guix pull} authentifiziert Kanäle") + (fr "@command{guix pull} authentifie les canaux")) + (body + (en "The @command{guix pull} and @command{guix time-machine} commands +now authenticate the source code that they pull, unless the new +@option{--disable-authentication} option is passed. What this means is that +Guix ensures that each commit received is cryptographically signed by an +authorized developer. This protects you from attempts to tamper with the Guix +repository and from attempts to ship malicious code to users. + +This feature is currently limited to the @code{guix} channel but will soon be +available to third-party channel authors.") + (de "Die Befehle @command{guix pull} und @command{guix time-machine} +prüfen nun die Authentizität des heruntergeladenen Quellcodes, außer wenn die +neue Befehlszeilenoption @option{--disable-authentication} angegeben +wurde. Das bedeutet, Guix stellt sicher, dass jeder empfangene Commit durch +einen autorisierten Entwickler kryptografisch signiert wurde. Das schützt Sie +vor Versuchen, das Guix-Repository zu manipulieren oder bösartigen Code an die +Nutzer auszuliefern. + +Diese Funktionalität ist auf den @code{guix}-Kanal beschränkt, sie wird jedoch +bald auch Autoren dritter Kanäle zur Verfügung stehen.") + (fr "Les commandes @command{guix pull} et @command{guix time-machine} +authentifient dorénavant le code source qu'elles obtiennent, à moins que la +nouvelle option @option{--disable-authentication} soit utilisée. Cela +signifie que Guix s'assure que chaque soumission (@i{commit}) récupéré dispose +d'une signature cryptographique par un·e développeur·euse autorisé·e. Cela te +protège de tentatives de modifications du dépôt Guix et de tentatives de +livrer du code malintentionné. + +Cette fonctionnalité n'est actuellement disponible que pour le canal +@code{guix} mais le sera bientôt pour les canaux tiers."))) + + (entry (commit "c924e541390f9595d819edc33c19d979917c15ec") + (title (en "@command{guix repl} adds support for running Guile scripts") + (de "@command{guix repl} kann Guile-Skripte ausführen") + (fr "@command{guix repl} permet d'exécuter des scripts en langage Guile")) + (body + (en "The @command{guix repl} command can now be used to run +Guile scripts. Compared to just launching the @command{guile} command, +@command{guix repl} guarantees that all the Guix modules and all its +dependencies are available in the search path. Scripts are run like this: + +@example +guix repl -- my-script,scm --option1 --option2=option-arg arg1 arg2 +@end example + +Run @command{info \"(guix) Invoking guix repl\"} for more information.") + (de "Der Befehl @command{guix repl} kann jetzt zur Ausführung von +Guile-Skripten verwendet werden. Im Vergleich zum Befehl +@command{guile} garantiert @command{guix repl}, dass alle Guix-Module und +alle seine Abhängigkeiten im Suchpfad verfügbar sind. Skripte werden wie +folgt ausgeführt: + +@example +guix repl -- my-script,scm --option1 --option2 --option2=option-arg arg1 arg2 +@end example + +Weitere Informationen erhalten Sie mit +@command{info \"(guix.de) Aufruf von guix repl\"}.") + (fr "La commande @command{guix repl} peut maintenant être utilisée +pour exécuter des scripts en langage Guile. Par rapport au simple lancement +de la commande @command{guile}, @command{guix repl} garantit que tous les +modules Guix et toutes ses dépendances sont disponibles dans le chemin +de recherche. Les scripts sont exécutés comme ceci : + +@example +guix repl -- my-script,scm --option1 --option2=option-arg arg1 arg2 +@end example + +Exécutez @command{info \"(guix.fr) Invoquer guix repl\"} pour plus d'informations."))) + (entry (commit "b460ba7992a0b4af2ddb5927dcf062784539ef7b") (title (en "Add support to boot from a Btrfs subvolume") (de "Unterstützung für Systemstart von einem diff --git a/gnu/build/hurd-boot.scm b/gnu/build/hurd-boot.scm index 09326233d2..aea2ac3307 100644 --- a/gnu/build/hurd-boot.scm +++ b/gnu/build/hurd-boot.scm @@ -80,16 +80,8 @@ (define (scope dir) (string-append root (if (string-suffix? "/" root) "" "/") dir)) (mkdir (scope "dev")) - (for-each (lambda (file) - (call-with-output-file (scope file) - (lambda (port) - (display file port) ;avoid hard-linking - (chmod port #o666)))) - '("dev/null" - "dev/zero" - "dev/full" - "dev/random" - "dev/urandom")) + ;; Don't create /dev/null etc just yet; the store + ;; messes-up the permission bits. ;; Don't create /dev/console, /dev/vcs, etc.: they are created by ;; console-run on first boot. @@ -115,6 +107,143 @@ (define (scope dir) ;; settings? ) +(define (passive-translator-xattr? file-name) + "Return true if FILE-NAME has an extended @code{gnu.translator} attribute +set." + (catch 'system-error + (lambda _ (not (string-null? (getxattr file-name "gnu.translator")))) + (lambda args + (if (= ENODATA (system-error-errno args)) + #f + (apply throw args))))) + +(define (passive-translator-installed? file-name) + "Return true if @file{showtrans} finds a translator installed on FILE-NAME." + (with-output-to-port (%make-void-port "w") + (lambda _ + (with-error-to-port (%make-void-port "w") + (lambda _ + (zero? (system* "showtrans" "--silent" file-name))))))) + +(define (translated? file-name) + "Return true if a translator is installed on FILE-NAME." + (if (string-contains %host-type "linux-gnu") + (passive-translator-xattr? file-name) + (passive-translator-installed? file-name))) + +(define* (set-translator file-name command #:optional (mode #o600)) + "Setup translator COMMAND on FILE-NAME." + (unless (translated? file-name) + (let ((dir (dirname file-name))) + (unless (directory-exists? dir) + (mkdir-p dir)) + (unless (file-exists? file-name) + (call-with-output-file file-name + (lambda (port) + (display file-name port) ;avoid hard-linking + (chmod port mode))))) + (catch 'system-error + (lambda _ + (setxattr file-name "gnu.translator" (string-join command "\0" 'suffix))) + (lambda (key . args) + (let ((errno (system-error-errno (cons key args)))) + (format (current-error-port) "~a: ~a\n" + (strerror errno) file-name) + (format (current-error-port) "Ignoring...Good Luck!\n")))))) + +(define-syntax-rule (false-if-EEXIST exp) + "Evaluate EXP but return #f if it raises to 'system-error with EEXIST." + (catch 'system-error + (lambda () exp) + (lambda args + (if (= EEXIST (system-error-errno args)) + #f + (apply throw args))))) + +(define* (set-hurd-device-translators #:optional (root "/")) + "Make some of the device nodes needed on GNU/Hurd." + + (define (scope dir) + (string-append root (if (string-suffix? "/" root) "" "/") dir)) + + (define scope-set-translator + (match-lambda + ((file-name command) + (scope-set-translator (list file-name command #o600))) + ((file-name command mode) + (let ((mount-point (scope file-name))) + (set-translator mount-point command mode))))) + + (define (mkdir* dir) + (let ((dir (scope dir))) + (unless (file-exists? dir) + (mkdir-p dir)))) + + (define servers + '(("servers/crash-dump-core" ("/hurd/crash" "--dump-core")) + ("servers/crash-kill" ("/hurd/crash" "--kill")) + ("servers/crash-suspend" ("/hurd/crash" "--suspend")) + ("servers/password" ("/hurd/password")) + ("servers/socket/1" ("/hurd/pflocal")) + ("servers/socket/2" ("/hurd/pfinet" + "--interface" "eth0" + "--address" + "10.0.2.15" ;the default QEMU guest IP + "--netmask" "255.255.255.0" + "--gateway" "10.0.2.2" + "--ipv6" "/servers/socket/16")))) + + (define devices + '(("dev/full" ("/hurd/null" "--full") #o666) + ("dev/null" ("/hurd/null") #o666) + ("dev/random" ("/hurd/random" "--seed-file" "/var/lib/random-seed") + #o644) + ("dev/zero" ("/hurd/storeio" "--store-type=zero") #o666) + + ("dev/console" ("/hurd/term" "/dev/console" "device" "console")) + + ("dev/klog" ("/hurd/streamio" "kmsg")) + ("dev/mem" ("/hurd/storeio" "--no-cache" "mem") #o660) + ("dev/shm" ("/hurd/tmpfs" "--mode=1777" "50%") #o644) + ("dev/time" ("/hurd/storeio" "--no-cache" "time") #o644) + + ("dev/vcs" ("/hurd/console")) + ("dev/tty" ("/hurd/magic" "tty") #o666) + + ("dev/tty1" ("/hurd/term" "/dev/tty1" "hurdio" "/dev/vcs/1/console") + #o666) + ("dev/tty2" ("/hurd/term" "/dev/tty2" "hurdio" "/dev/vcs/2/console") + #o666) + ("dev/tty3" ("/hurd/term" "/dev/tty3" "hurdio" "/dev/vcs/3/console") + #o666) + + ("dev/ptyp0" ("/hurd/term" "/dev/ptyp0" "pty-master" "/dev/ttyp0") + #o666) + ("dev/ptyp1" ("/hurd/term" "/dev/ptyp1" "pty-master" "/dev/ttyp1") + #o666) + ("dev/ptyp2" ("/hurd/term" "/dev/ptyp2" "pty-master" "/dev/ttyp2") + #o666) + + ("dev/ttyp0" ("/hurd/term" "/dev/ttyp0" "pty-slave" "/dev/ptyp0") + #o666) + ("dev/ttyp1" ("/hurd/term" "/dev/ttyp1" "pty-slave" "/dev/ptyp1") + #o666) + ("dev/ttyp2" ("/hurd/term" "/dev/ttyp2" "pty-slave" "/dev/ptyp2") + #o666))) + + (for-each scope-set-translator servers) + (mkdir* (scope "dev/vcs/1")) + (mkdir* (scope "dev/vcs/2")) + (mkdir* (scope "dev/vcs/2")) + (rename-file (scope "/dev/console") (scope "/dev/console-")) + (for-each scope-set-translator devices) + + (false-if-EEXIST (symlink "/dev/random" (scope "dev/urandom"))) + (mkdir* (scope "dev/fd")) + (false-if-EEXIST (symlink "/dev/fd/0" (scope "dev/stdin"))) + (false-if-EEXIST (symlink "/dev/fd/1" (scope "dev/stdout"))) + (false-if-EEXIST (symlink "/dev/fd/2" (scope "dev/stderr")))) + (define* (boot-hurd-system #:key (on-error 'debug)) "This procedure is meant to be called from an early RC script. @@ -126,20 +255,9 @@ (define* (boot-hurd-system #:key (on-error 'debug)) XXX TODO: see linux-boot.scm:boot-system. XXX TODO: add proper file-system checking, mounting XXX TODO: move bits to (new?) (hurd?) (activation?) services -XXX TODO: use settrans/setxattr instead of MAKEDEV +XXX TODO: use Linux xattr/setxattr to remove (settrans in) /libexec/RUNSYSTEM " - (define translators - '(("/servers/crash-dump-core" ("/hurd/crash" "--dump-core")) - ("/servers/crash-kill" ("/hurd/crash" "--kill")) - ("/servers/crash-suspend" ("/hurd/crash" "--suspend")) - ("/servers/password" ("/hurd/password")) - ("/servers/socket/1" ("/hurd/pflocal")) - ("/servers/socket/2" ("/hurd/pfinet" "--interface" "eth0" - "--address" "10.0.2.15" ;the default QEMU guest IP - "--netmask" "255.255.255.0" - "--gateway" "10.0.2.2" - "--ipv6" "/servers/socket/16")))) (display "Welcome, this is GNU's early boot Guile.\n") (display "Use '--repl' for an initrd REPL.\n\n") @@ -147,35 +265,13 @@ (define translators (call-with-error-handling (lambda () - (define (translated? node) - ;; Return true if a translator is installed on NODE. - (with-output-to-port (%make-void-port "w") - (lambda () - (with-error-to-port (%make-void-port "w") - (lambda () - (zero? (system* "showtrans" "--silent" node))))))) - (let* ((args (command-line)) (system (find-long-option "--system" args)) (to-load (find-long-option "--load" args))) - (format #t "Creating essential servers...\n") - (setenv "PATH" (string-append system "/profile/bin" - ":" system "/profile/sbin")) - (for-each (match-lambda - ((node command) - (unless (translated? node) - (mkdir-p (dirname node)) - (apply invoke "settrans" "--create" node command)))) - translators) - - (format #t "Creating essential device nodes...\n") - (with-directory-excursion "/dev" - (invoke "MAKEDEV" "--devdir=/dev" "std") - (invoke "MAKEDEV" "--devdir=/dev" "vcs") - (invoke "MAKEDEV" "--devdir=/dev" "tty1""tty2" "tty3" "tty4" "tty5" "tty6") - (invoke "MAKEDEV" "--devdir=/dev" "ptyp0" "ptyp1" "ptyp2") - (invoke "MAKEDEV" "--devdir=/dev" "console")) + (format #t "Setting-up essential translators...\n") + (setenv "PATH" (string-append system "/profile/bin")) + (set-hurd-device-translators) (false-if-exception (delete-file "/hurd")) (let ((hurd/hurd (readlink* (string-append system "/profile/hurd")))) diff --git a/gnu/build/image.scm b/gnu/build/image.scm index 893b846976..e8df5866a7 100644 --- a/gnu/build/image.scm +++ b/gnu/build/image.scm @@ -137,12 +137,13 @@ (define* (register-closure prefix closure true, reset timestamps on store files and, if DEDUPLICATE? is true, deduplicates files common to CLOSURE and the rest of PREFIX." (let ((items (call-with-input-file closure read-reference-graph))) - (register-items items - #:prefix prefix - #:deduplicate? deduplicate? - #:reset-timestamps? reset-timestamps? - #:registration-time %epoch - #:schema schema))) + (parameterize ((sql-schema schema)) + (with-database (store-database-file #:prefix prefix) db + (register-items db items + #:prefix prefix + #:deduplicate? deduplicate? + #:reset-timestamps? reset-timestamps? + #:registration-time %epoch))))) (define* (initialize-efi-partition root #:key diff --git a/gnu/build/vm.scm b/gnu/build/vm.scm index 0f0ceae18f..287d099f79 100644 --- a/gnu/build/vm.scm +++ b/gnu/build/vm.scm @@ -223,12 +223,13 @@ (define* (register-closure prefix closure true, reset timestamps on store files and, if DEDUPLICATE? is true, deduplicates files common to CLOSURE and the rest of PREFIX." (let ((items (call-with-input-file closure read-reference-graph))) - (register-items items - #:prefix prefix - #:deduplicate? deduplicate? - #:reset-timestamps? reset-timestamps? - #:registration-time %epoch - #:schema schema))) + (parameterize ((sql-schema schema)) + (with-database (store-database-file #:prefix prefix) db + (register-items db items + #:prefix prefix + #:deduplicate? deduplicate? + #:reset-timestamps? reset-timestamps? + #:registration-time %epoch))))) ;;; diff --git a/gnu/installer/final.scm b/gnu/installer/final.scm index a742c2a0cd..685aa81d89 100644 --- a/gnu/installer/final.scm +++ b/gnu/installer/final.scm @@ -137,12 +137,6 @@ (define (umount-cow-store) "Remove the store overlay and the bind-mount on /tmp created by the cow-store service. This procedure is very fragile and a better approach would be much appreciated." - - ;; Remove when integrated in (gnu services herd). - (define (restart-service name) - (with-shepherd-action name ('restart) result - result)) - (catch #t (lambda () (let ((tmp-dir "/remove")) diff --git a/gnu/installer/newt/final.scm b/gnu/installer/newt/final.scm index 5cb4f6816d..fa8d6fea71 100644 --- a/gnu/installer/newt/final.scm +++ b/gnu/installer/newt/final.scm @@ -25,6 +25,7 @@ (define-module (gnu installer newt final) #:use-module (gnu installer newt page) #:use-module (gnu installer newt utils) #:use-module (guix i18n) + #:use-module (guix colors) #:use-module (srfi srfi-34) #:use-module (srfi srfi-35) #:use-module (ice-9 match) @@ -101,6 +102,13 @@ (define* (run-install-shell locale #:key (users '())) (clear-screen) (newt-suspend) + ;; XXX: Force loading 'bold' font files before mouting the + ;; cow-store. Otherwise, if the file is loaded by kmscon after the cow-store + ;; in mounted, it will be necessary to kill kmscon to umount to cow-store. + (display + (colorize-string + (format #f (G_ "Installing Guix System ...~%")) + (color BOLD))) (let ((install-ok? (install-system locale #:users users))) (newt-resume) install-ok?)) diff --git a/gnu/local.mk b/gnu/local.mk index c6e66091af..5a57e60a6a 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -35,6 +35,7 @@ # Copyright © 2020 Ryan Prior # Copyright © 2020 Jan Wielkiewicz # Copyright © 2020 Brice Waegeneire +# Copyright © 2020 Tanguy Le Carrour # # This file is part of GNU Guix. # @@ -133,6 +134,7 @@ GNU_SYSTEM_MODULES = \ %D%/packages/compton.scm \ %D%/packages/conky.scm \ %D%/packages/connman.scm \ + %D%/packages/convmv.scm \ %D%/packages/cook.scm \ %D%/packages/coq.scm \ %D%/packages/cpio.scm \ @@ -891,6 +893,7 @@ dist_patch_DATA = \ %D%/packages/patches/emacs-fix-scheme-indent-function.patch \ %D%/packages/patches/emacs-json-reformat-fix-tests.patch \ %D%/packages/patches/emacs-highlight-stages-add-gexp.patch \ + %D%/packages/patches/emacs-hyperbole-toggle-messaging.patch \ %D%/packages/patches/emacs-libgit-use-system-libgit2.patch \ %D%/packages/patches/emacs-scheme-complete-scheme-r5rs-info.patch \ %D%/packages/patches/emacs-source-date-epoch.patch \ @@ -917,7 +920,6 @@ dist_patch_DATA = \ %D%/packages/patches/fasthenry-spSolve.patch \ %D%/packages/patches/fasthenry-spFactor.patch \ %D%/packages/patches/fbreader-curl-7.62.patch \ - %D%/packages/patches/ffmpeg-prefer-dav1d.patch \ %D%/packages/patches/fifengine-swig-compat.patch \ %D%/packages/patches/fifo-map-fix-flags-for-gcc.patch \ %D%/packages/patches/fifo-map-remove-catch.hpp.patch \ @@ -1103,6 +1105,7 @@ dist_patch_DATA = \ %D%/packages/patches/inetutils-hurd.patch \ %D%/packages/patches/inkscape-poppler-0.76.patch \ %D%/packages/patches/intltool-perl-compatibility.patch \ + %D%/packages/patches/iputils-libcap-compat.patch \ %D%/packages/patches/irrlicht-use-system-libs.patch \ %D%/packages/patches/isl-0.11.1-aarch64-support.patch \ %D%/packages/patches/jacal-fix-texinfo.patch \ @@ -1160,8 +1163,7 @@ dist_patch_DATA = \ %D%/packages/patches/leela-zero-gtest.patch \ %D%/packages/patches/less-hurd-path-max.patch \ %D%/packages/patches/lib2geom-enable-assertions.patch \ - %D%/packages/patches/lib2geom-link-tests-against-glib.patch \ - %D%/packages/patches/lib2geom-use-system-googletest.patch \ + %D%/packages/patches/lib2geom-fix-tests.patch \ %D%/packages/patches/liba52-enable-pic.patch \ %D%/packages/patches/liba52-link-with-libm.patch \ %D%/packages/patches/liba52-set-soname.patch \ @@ -1425,6 +1427,7 @@ dist_patch_DATA = \ %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-memcached-syntax-warnings.patch \ %D%/packages/patches/python-mox3-python3.6-compat.patch \ %D%/packages/patches/python-testtools.patch \ %D%/packages/patches/python-packaging-test-arch.patch \ @@ -1449,6 +1452,7 @@ dist_patch_DATA = \ %D%/packages/patches/qtbase-use-TZDIR.patch \ %D%/packages/patches/qtscript-disable-tests.patch \ %D%/packages/patches/quagga-reproducible-build.patch \ + %D%/packages/patches/quassel-qt-514-compat.patch \ %D%/packages/patches/quickswitch-fix-dmenu-check.patch \ %D%/packages/patches/qtwebkit-pbutils-include.patch \ %D%/packages/patches/randomjungle-disable-static-build.patch \ @@ -1540,6 +1544,7 @@ dist_patch_DATA = \ %D%/packages/patches/ttf2eot-cstddef.patch \ %D%/packages/patches/ttfautohint-source-date-epoch.patch \ %D%/packages/patches/tomb-fix-errors-on-open.patch \ + %D%/packages/patches/tup-unbundle-dependencies.patch \ %D%/packages/patches/tuxpaint-stamps-path.patch \ %D%/packages/patches/twinkle-bcg729.patch \ %D%/packages/patches/u-boot-riscv64-fix-extlinux.patch \ @@ -1605,9 +1610,6 @@ dist_patch_DATA = \ %D%/packages/patches/xf86-video-voodoo-pcitag.patch \ %D%/packages/patches/xfce4-panel-plugins.patch \ %D%/packages/patches/xfce4-settings-defaults.patch \ - %D%/packages/patches/xmoto-utf8.patch \ - %D%/packages/patches/xmoto-remove-glext.patch \ - %D%/packages/patches/xmoto-reproducible.patch \ %D%/packages/patches/xplanet-1.3.1-cxx11-eof.patch \ %D%/packages/patches/xplanet-1.3.1-libdisplay_DisplayOutput.cpp.patch \ %D%/packages/patches/xplanet-1.3.1-libimage_gif.c.patch \ diff --git a/gnu/machine/ssh.scm b/gnu/machine/ssh.scm index 116da86327..7194181681 100644 --- a/gnu/machine/ssh.scm +++ b/gnu/machine/ssh.scm @@ -210,10 +210,9 @@ (define remote-exp (use-modules (gnu build file-systems) (gnu system uuid)) - (define uuid - (string->uuid #$(uuid->string (file-system-device fs)))) - - (find-partition-by-uuid uuid)))) + (let ((uuid (uuid #$(uuid->string (file-system-device fs)) + '#$(uuid-type (file-system-device fs))))) + (find-partition-by-uuid uuid))))) (remote-let ((result remote-exp)) (unless result diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm index d34864505a..de2f6534f8 100644 --- a/gnu/packages/admin.scm +++ b/gnu/packages/admin.scm @@ -1364,7 +1364,7 @@ (define-public rottlog (define-public sudo (package (name "sudo") - (version "1.9.0") + (version "1.9.1") (source (origin (method url-fetch) (uri @@ -1374,7 +1374,7 @@ (define-public sudo version ".tar.gz"))) (sha256 (base32 - "0p7r3cl16pjwbc48ff1gbhjw51lngrghvwblxz5lxpyzqlwi88xb")) + "1zxd6hxwhxqrm876wsn9bfajbfc4hc6l9ivzj5rjg80hzv71ch99")) (modules '((guix build utils))) (snippet '(begin @@ -3472,7 +3472,7 @@ (define-public inxi-minimal (let ((real-name "inxi")) (package (name "inxi-minimal") - (version "3.1.01-1") + (version "3.1.03-1") (source (origin (method git-fetch) @@ -3481,7 +3481,7 @@ (define-public inxi-minimal (commit version))) (file-name (git-file-name real-name version)) (sha256 - (base32 "0r204w0r06ibdr4dck7yw2nmvj7xq68bjr7xwwiy7liqdml0n0yc")))) + (base32 "0539hvlq021wxhbwzdp7qliiq1jgw60mxlwrwx0z2x8qi1zqdzg6")))) (build-system trivial-build-system) (inputs `(("bash" ,bash-minimal) diff --git a/gnu/packages/audio.scm b/gnu/packages/audio.scm index a9f34599bc..74ef7111c3 100644 --- a/gnu/packages/audio.scm +++ b/gnu/packages/audio.scm @@ -2344,7 +2344,29 @@ (define-public supercollider (file-name (git-file-name name version)) (sha256 (base32 - "02v911w2kdbg3kfl593lb2ig4sjbfxzv20a0vbcymhfzpvp1x6xp")))) + "02v911w2kdbg3kfl593lb2ig4sjbfxzv20a0vbcymhfzpvp1x6xp")) + (modules '((guix build utils) + (ice-9 ftw))) + (snippet + ;; The build system doesn't allow us to unbundle the following + ;; libraries. hidapi is also heavily patched and upstream not + ;; actively maintained. + '(let ((keep-dirs '("nova-simd" "nova-tt" "hidapi" + "TLSF-2.4.6" "oscpack_1_1_0" "." ".."))) + (with-directory-excursion "./external_libraries" + (for-each + delete-file-recursively + (scandir "." + (lambda (x) + (and (eq? (stat:type (stat x)) 'directory) + (not (member (basename x) keep-dirs))))))) + ;; To find the Guix provided ableton-link library. + (substitute* "lang/CMakeLists.txt" + (("include\\(\\.\\./external_libraries/link/\ +AbletonLinkConfig\\.cmake\\)") + "find_package(AbletonLink NAMES AbletonLink ableton-link \ +link REQUIRED)")) + #t)))) (build-system cmake-build-system) (outputs '("out" ;core language @@ -2355,44 +2377,16 @@ (define-public supercollider "-DFORTIFY=ON" "-DLIBSCSYNTH=ON" "-DSC_EL=off") ;scel is packaged individually as ;emacs-scel - #:modules ((guix build utils) - (guix build cmake-build-system) - (ice-9 ftw)) #:phases (modify-phases %standard-phases - (add-after 'unpack 'rm-bundled-libs + ;; HOME must be defined otherwise supercollider throws a "ERROR: + ;; Primitive '_FileMkDir' failed." error when generating the doc. + ;; The graphical tests also hang without it. + (add-after 'unpack 'set-home-directory (lambda _ - ;; The build system doesn't allow us to unbundle the following - ;; libraries. hidapi is also heavily patched. - (let ((keep-dirs '("nova-simd" "nova-tt" "hidapi" "TLSF-2.4.6" - "oscpack_1_1_0" "." ".."))) - (with-directory-excursion "./external_libraries" - (for-each - delete-file-recursively - (scandir "." - (lambda (x) - (and (eq? (stat:type (stat x)) 'directory) - (not (member (basename x) keep-dirs)))))))) - (substitute* "lang/CMakeLists.txt" - (("include\\(\\.\\./external_libraries/link/AbletonLinkConfig\\.cmake\\)") - "find_package(AbletonLink NAMES AbletonLink ableton-link link REQUIRED)")) + (setenv "HOME" (getcwd)) #t)) - ;; Some tests are broken (see: - ;; https://github.com/supercollider/supercollider/issues/3555 and - ;; https://github.com/supercollider/supercollider/issues/1736 - (add-after 'rm-bundled-libs 'disable-broken-tests - (lambda _ - (substitute* "testsuite/server/supernova/CMakeLists.txt" - (("server_test.cpp") - "") - (("perf_counter_test.cpp") - "")) - (substitute* "testsuite/CMakeLists.txt" - (("add_subdirectory\\(sclang\\)") - "")) - (delete-file "testsuite/sclang/CMakeLists.txt") - #t)) - (add-after 'disable-broken-tests 'patch-scclass-dir + (add-after 'unpack 'patch-scclass-dir (lambda* (#:key outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) (scclass-dir @@ -2404,6 +2398,11 @@ (define-public supercollider "\\(DirName::Resource\\) / CLASS_LIB_DIR_NAME")) (string-append "Path(\"" scclass-dir "\")"))) #t))) + (add-before 'build 'prepare-x + (lambda _ + (system "Xvfb &") + (setenv "DISPLAY" ":0") + #t)) (add-before 'install 'install-ide (lambda* (#:key outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) @@ -2416,7 +2415,8 @@ (define-public supercollider (native-inputs `(("ableton-link" ,ableton-link) ("pkg-config" ,pkg-config) - ("qttools" ,qttools))) + ("qttools" ,qttools) + ("xorg-server" ,xorg-server-for-tests))) (inputs `(("jack" ,jack-1) ("libsndfile" ,libsndfile) diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm index 4b5f94b277..e2c4408edd 100644 --- a/gnu/packages/base.scm +++ b/gnu/packages/base.scm @@ -357,10 +357,7 @@ (define-public coreutils (list (string-append "XFAIL_TESTS=tests/misc/env-S.pl" " tests/misc/kill.sh" " tests/misc/nice.sh" - " tests/misc/shred-passes.sh" " tests/split/fail.sh" - " tests/split/l-chunk.sh" - " tests/dd/stats.sh" " test-fdutimensat" " test-futimens" " test-linkat" @@ -380,7 +377,15 @@ (define-public coreutils (("/bin/sh") (which "sh"))) (substitute* (find-files "tests" "\\.sh$") (("#!/bin/sh") (string-append "#!" (which "sh")))) - #t))))) + #t)) + ,@(if (hurd-target?) + `((add-after 'unpack 'remove-tests + (lambda _ + (substitute* "Makefile.in" + ;; this test hangs + (("^ *tests/misc/timeout-group.sh.*") "")) + #t))) + '())))) (synopsis "Core GNU utilities (file, text, shell)") (description "GNU Coreutils package includes all of the basic command-line tools that diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm index f60a918d75..95f8b16db3 100644 --- a/gnu/packages/bioinformatics.scm +++ b/gnu/packages/bioinformatics.scm @@ -7813,13 +7813,13 @@ (define-public r-variantannotation (define-public r-limma (package (name "r-limma") - (version "3.44.1") + (version "3.44.3") (source (origin (method url-fetch) (uri (bioconductor-uri "limma" version)) (sha256 (base32 - "0l6f6lz1rghj8c5s14ljbnmsrwz27fi6a7g42n15n3d3msvflw36")))) + "09fnqxx4rzq5n447aqg2l6y0idfwgz2jxz99sifxsr2q8afzbcj6")))) (build-system r-build-system) (home-page "http://bioinf.wehi.edu.au/limma") (synopsis "Package for linear models for microarray and RNA-seq data") diff --git a/gnu/packages/bison.scm b/gnu/packages/bison.scm index b622ca1973..2ffdf47655 100644 --- a/gnu/packages/bison.scm +++ b/gnu/packages/bison.scm @@ -2,6 +2,7 @@ ;;; Copyright © 2012, 2013, 2015, 2019 Ludovic Courtès ;;; Copyright © 2018 Tobias Geerinckx-Rice ;;; Copyright © 2019 Efraim Flashner +;;; Copyright © 2020 B. Wilson ;;; ;;; This file is part of GNU Guix. ;;; @@ -64,6 +65,17 @@ (define-public bison simple tools through complex programming languages.") (license gpl3+))) +(define-public bison-3.6 + (package + (inherit bison) + (version "3.6.3") + (source + (origin + (method url-fetch) + (uri (string-append "mirror://gnu/bison/bison-" version ".tar.xz")) + (sha256 + (base32 "0gdpnjh6ra9xa9vj6hzjdf0c04x4pjyy8vssm3qdb7fya4v7knq6")))))) + (define-public bison-3.0 (package (inherit bison) diff --git a/gnu/packages/bittorrent.scm b/gnu/packages/bittorrent.scm index 8b041cb3f5..52160b9025 100644 --- a/gnu/packages/bittorrent.scm +++ b/gnu/packages/bittorrent.scm @@ -42,7 +42,6 @@ (define-module (gnu packages bittorrent) #:use-module (gnu packages crypto) #:use-module (gnu packages curl) #:use-module (gnu packages cyrus-sasl) - #:use-module (gnu packages file) #:use-module (gnu packages freedesktop) #:use-module (gnu packages glib) #:use-module (gnu packages gnome) @@ -50,7 +49,6 @@ (define-module (gnu packages bittorrent) #:use-module (gnu packages gstreamer) #:use-module (gnu packages gtk) #:use-module (gnu packages libevent) - #:use-module (gnu packages linux) #:use-module (gnu packages multiprecision) #:use-module (gnu packages nettle) #:use-module (gnu packages ncurses) @@ -104,12 +102,9 @@ (define-public transmission '("applications" "icons" "pixmaps"))) #t))))) (inputs - `(("inotify-tools" ,inotify-tools) - ("libevent" ,libevent) + `(("libevent" ,libevent) ("curl" ,curl) - ("cyrus-sasl" ,cyrus-sasl) ("openssl" ,openssl) - ("file" ,file) ("zlib" ,zlib) ("gtk+" ,gtk+))) (native-inputs @@ -131,7 +126,7 @@ (define-public transmission ;; or any future license endorsed by Mnemosyne LLC. ;; ;; A few files files carry an MIT/X11 license header. - (license l:gpl3+))) + (license (list l:gpl2 l:gpl3)))) (define-public libtorrent (package diff --git a/gnu/packages/build-tools.scm b/gnu/packages/build-tools.scm index 9ff32b22f9..11aee07378 100644 --- a/gnu/packages/build-tools.scm +++ b/gnu/packages/build-tools.scm @@ -10,6 +10,7 @@ ;;; Copyright © 2019 Jonathan Brielmaier ;;; Copyright © 2020 Leo Prikler ;;; Copyright © 2020 Yuval Kogman +;;; Copyright © 2020 Jakub Kądziołka ;;; ;;; This file is part of GNU Guix. ;;; @@ -36,12 +37,16 @@ (define-module (gnu packages build-tools) #:use-module (gnu packages) #:use-module (gnu packages check) #:use-module (gnu packages compression) + #:use-module (gnu packages linux) #:use-module (gnu packages lua) #:use-module (gnu packages package-management) + #:use-module (gnu packages pcre) + #:use-module (gnu packages pkg-config) #:use-module (gnu packages python) #:use-module (gnu packages python-crypto) #:use-module (gnu packages python-web) #:use-module (gnu packages python-xyz) + #:use-module (gnu packages sqlite) #:use-module (gnu packages ninja) #:use-module (guix build-system gnu) #:use-module (guix build-system python)) @@ -276,6 +281,80 @@ (define-public premake5 scripted definition of a software project and outputs @file{Makefile}s or other lower-level build files."))) +(define-public tup + (package + (name "tup") + (version "0.7.9") + (source (origin + (method url-fetch) + (uri (string-append "http://gittup.org/tup/releases/tup-v" + version ".tar.gz")) + (sha256 + (base32 + "0gnd2598xqgwihdkfkx7qn0q6p4n7npam1fy83mp7s04zwj99syc")) + (patches (search-patches "tup-unbundle-dependencies.patch")) + (modules '((guix build utils))) + (snippet + '(begin + ;; NOTE: Tup uses a slightly modified Lua, so it cannot be + ;; unbundled. See: src/lula/tup-lua.patch + (delete-file-recursively "src/pcre") + (delete-file-recursively "src/sqlite3") + #t)))) + (build-system gnu-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + ;; There is a bootstrap script, but it doesn't do what you think - it + ;; builds tup. + (delete 'bootstrap) + (replace 'configure + (lambda _ + (substitute* "src/tup/link.sh" + (("`git describe`") ,version)) + (with-output-to-file "tup.config" + (lambda _ + (format #t "CONFIG_TUP_USE_SYSTEM_SQLITE=y~%"))) + #t)) + (delete 'check) + (replace 'build + (lambda _ + ;; Based on bootstrap-nofuse.sh, but with a detour to patch-shebang. + (invoke "./build.sh") + (invoke "./build/tup" "init") + (invoke "./build/tup" "generate" "--verbose" "build-nofuse.sh") + (patch-shebang "build-nofuse.sh") + (invoke "./build-nofuse.sh"))) + (replace 'install + (lambda* (#:key outputs #:allow-other-keys) + (let* ((outdir (assoc-ref outputs "out")) + (ftdetect (string-append outdir + "/share/vim/vimfiles/ftdetect"))) + (install-file "tup" (string-append outdir "/bin")) + (install-file "tup.1" (string-append outdir "/share/man/man1")) + (install-file "contrib/syntax/tup.vim" + (string-append outdir "/share/vim/vimfiles/syntax")) + (mkdir-p ftdetect) + (with-output-to-file (string-append ftdetect "/tup.vim") + (lambda _ + (display "au BufNewFile,BufRead Tupfile,*.tup setf tup"))) + #t)))))) + (inputs + `(("fuse" ,fuse) + ("pcre" ,pcre) + ("pcre" ,pcre "bin") ; pcre-config + ("sqlite" ,sqlite))) + (native-inputs + `(("pkg-config" ,pkg-config))) + (home-page "http://gittup.org/tup/") + (synopsis "Fast build system that's hard to get wrong") + (description "Tup is a generic build system based on a directed acyclic +graphs of commands to be executed. Tup instruments your build to detect the +exact dependencies of the commands, allowing you to take advantage of ideal +parallelism during incremental builds, and detecting any situations where +a build worked by accident.") + (license license:gpl2))) + (define-public osc (package (name "osc") diff --git a/gnu/packages/cdrom.scm b/gnu/packages/cdrom.scm index 67236f86de..ac8dd26af0 100644 --- a/gnu/packages/cdrom.scm +++ b/gnu/packages/cdrom.scm @@ -13,6 +13,7 @@ ;;; Copyright © 2018 Oleg Pykhalov ;;; Copyright © 2018, 2019 Ricardo Wurmus ;;; Copyright © 2019 Eric Bavier +;;; Copyright © 2020 Timotej Lazar ;;; ;;; This file is part of GNU Guix. ;;; @@ -38,9 +39,11 @@ (define-module (gnu packages cdrom) #:use-module (guix build-system gnu) #:use-module (guix build-system glib-or-gtk) #:use-module (guix gexp) + #:use-module (guix utils) #:use-module (gnu packages) #:use-module (gnu packages acl) #:use-module (gnu packages audio) + #:use-module (gnu packages autotools) #:use-module (gnu packages bison) #:use-module (gnu packages compression) #:use-module (gnu packages flex) @@ -242,6 +245,54 @@ (define-public cdparanoia reconstruction capability.") (license gpl2))) ; libraries under lgpl2.1 +(define-public cdrdao + (package + (name "cdrdao") + (version "1.2.4") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/cdrdao/cdrdao.git") + (commit + (string-append "rel_" (string-replace-substring version "." "_"))))) + (file-name (git-file-name name version)) + (sha256 + (base32 "1gcl8ibyylamy2d1piq3749nw3xrlp12r0spzp2gmni57b8a6b7j")))) + (build-system gnu-build-system) + (arguments + '(#:configure-flags + (list + ;; GCDMaster depends on obsolete libgnomeuimm, see + ;; . + "--without-gcdmaster" + ;; Use the native SCSI interface. + "--without-scglib") + #:phases + (modify-phases %standard-phases + (add-before 'bootstrap 'fix-configure.ac + (lambda _ + ;; Remove reference to missing macro. + (substitute* "configure.ac" (("^AM_GCONF_SOURCE_2.*") "")) + #t))))) + (native-inputs + `(("autoconf" ,autoconf) + ("automake" ,automake) + ("pkg-config" ,pkg-config))) + (inputs + `(("ao" ,ao) + ("lame" ,lame) + ("libmad" ,libmad) + ("libvorbis" ,libvorbis))) + (home-page "http://cdrdao.sourceforge.net") + (synopsis "Read and write CDs in disk-at-once mode") + (description "cdrdao records audio or data CDs in disk-at-once (DAO) mode, +based on a textual description of the contents. This mode writes the complete +disc – lead-in, one or more tracks, and lead-out – in a single step and is +commonly used with audio CDs. @code{cdrdao} can also handle the bin/cue +format, commonly used for VCDs or disks with subchannel data.") + (license gpl2+))) + (define-public cdrtools (package (name "cdrtools") diff --git a/gnu/packages/ci.scm b/gnu/packages/ci.scm index 317136e38f..262396be84 100644 --- a/gnu/packages/ci.scm +++ b/gnu/packages/ci.scm @@ -47,8 +47,8 @@ (define-module (gnu packages ci) #:use-module (guix build-system gnu)) (define-public cuirass - (let ((commit "2280ae18eb25aa7034636c58bf288c9bd5a8fa3b") - (revision "31")) + (let ((commit "3db603c1913fe14d260a44b05575a2ead3866b47") + (revision "32")) (package (name "cuirass") (version (git-version "0.0.1" revision commit)) @@ -60,7 +60,7 @@ (define-public cuirass (file-name (git-file-name name version)) (sha256 (base32 - "1gbmpwgiwy740d936b052gfivzw52pgrny7j7lbl56wi9wnawkc9")))) + "1q69lgngsvpvcy6ww2a75wndjzymay5xaqmbj78znqmn7ck3fv44")))) (build-system gnu-build-system) (arguments '(#:modules ((guix build utils) diff --git a/gnu/packages/convmv.scm b/gnu/packages/convmv.scm new file mode 100644 index 0000000000..2a9a4ec68c --- /dev/null +++ b/gnu/packages/convmv.scm @@ -0,0 +1,60 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2020 Leo Prikler +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see . + +(define-module (gnu packages convmv) + #:use-module (gnu packages) + #:use-module (gnu packages perl) + #:use-module (guix licenses) + #:use-module (guix packages) + #:use-module (guix download) + #:use-module (guix build-system gnu)) + +(define-public convmv + (package + (name "convmv") + (version "2.05") + (source (origin + (method url-fetch) + (uri (string-append "https://www.j3e.de/linux/convmv/convmv-" + version ".tar.gz")) + (sha256 + (base32 + "19hwv197p7c23f43vvav5bs19z9b72jzca2npkjsxgprwj5ardjk")))) + (build-system gnu-build-system) + (arguments + `(#:test-target "test" + #:make-flags `(,(string-append "PREFIX=" (assoc-ref %outputs "out"))) + #:phases + (modify-phases %standard-phases + (delete 'bootstrap) + (delete 'configure) + (add-before 'check 'unpack-testsuite + (lambda _ + (invoke "tar" "xf" "testsuite.tar") + (patch-shebang "suite/dotests.sh") + (patch-shebang "suite/parsable_tester.pl") + #t))))) + (inputs + `(("perl" ,perl))) + (synopsis "Convert filenames between character sets") + (description + "convmv is a file renamer, that converts between different encodings, +e.g. from ISO-8859-1 to UTF-8. It is particularly usefuls for files with +names, that display incorrectly.") + (license (list gpl2 gpl3)) + (home-page "https://www.j3e.de/"))) diff --git a/gnu/packages/cran.scm b/gnu/packages/cran.scm index bc391d9afd..f3c90b073e 100644 --- a/gnu/packages/cran.scm +++ b/gnu/packages/cran.scm @@ -2131,14 +2131,14 @@ (define-public r-globaloptions (define-public r-circlize (package (name "r-circlize") - (version "0.4.9") + (version "0.4.10") (source (origin (method url-fetch) (uri (cran-uri "circlize" version)) (sha256 (base32 - "14944vn0n5d095mpjyag4fz8vy04m6wxb6mmyygi8q813akikm3h")))) + "1xb1jq3mg4kw1513zv1i09vhn7rj7f8vp0bnms2qml74s47wxsgk")))) (build-system r-build-system) (propagated-inputs `(("r-colorspace" ,r-colorspace) @@ -3839,18 +3839,20 @@ (define-public r-venndiagram (define-public r-vioplot (package (name "r-vioplot") - (version "0.3.4") + (version "0.3.5") (source (origin (method url-fetch) (uri (cran-uri "vioplot" version)) (sha256 (base32 - "1fsklymilspzz5fzlj7666x09aglaw0v4x0yfjjzy4vr5qpjc529")))) + "0aiy615kn9lpr2cs757g3pklg81n01yhqh0wrwv111fn3cy86r0v")))) (build-system r-build-system) (propagated-inputs `(("r-sm" ,r-sm) ("r-zoo" ,r-zoo))) + (native-inputs + `(("r-knitr" ,r-knitr))) (home-page "http://wsopuppenkiste.wiso.uni-goettingen.de/~dadler") (synopsis "Violin plot") (description @@ -6634,23 +6636,106 @@ (define-public r-officer to help insert or delete content at a specific location in the document.") (license license:gpl3))) +(define-public r-profilemodel + (package + (name "r-profilemodel") + (version "0.6.0") + (source + (origin + (method url-fetch) + (uri (cran-uri "profileModel" version)) + (sha256 + (base32 + "0yq8hy43h62hlz8bbf9ila4a3xcwizi1if27b78xc5y857ncwad8")))) + (properties `((upstream-name . "profileModel"))) + (build-system r-build-system) + (home-page "https://github.com/ikosmidis/profileModel") + (synopsis "Profiling inference functions for various model classes") + (description + "This package provides tools that can be used to calculate, evaluate, +plot and use for inference the profiles of *arbitrary* inference functions for +arbitrary @code{glm}-like fitted models with linear predictors. More information +on the methods that are implemented can be found in Kosmidis (2008) +@url{https://www.r-project.org/doc/Rnews/Rnews_2008-2.pdf}.") + (license license:gpl2+))) + +(define-public r-brglm + (package + (name "r-brglm") + (version "0.6.2") + (source + (origin + (method url-fetch) + (uri (cran-uri "brglm" version)) + (sha256 + (base32 + "0c9ngscc6zlfm90fqyggnj04qfkhp5qgf5q3wnfpxwyc8cm47by2")))) + (properties `((upstream-name . "brglm"))) + (build-system r-build-system) + (propagated-inputs + `(("r-profilemodel" ,r-profilemodel))) + (home-page "https://github.com/ikosmidis/brglm") + (synopsis "Bias reduction in binomial-response generalized linear models") + (description + "Fit generalized linear models with binomial responses using either an +adjusted-score approach to bias reduction or maximum penalized likelihood +where penalization is by Jeffreys invariant prior. These procedures return +estimates with improved frequentist properties (bias, mean squared error) that +are always finite even in cases where the maximum likelihood estimates are +infinite (data separation). Fitting takes place by fitting generalized linear +models on iteratively updated pseudo-data. The interface is essentially the +same as @code{glm}. More flexibility is provided by the fact that custom +pseudo-data representations can be specified and used for model fitting. +Functions are provided for the construction of confidence intervals for the +reduced-bias estimates.") + (license license:gpl2+))) + +(define-public r-entropy + (package + (name "r-entropy") + (version "1.2.1") + (source + (origin + (method url-fetch) + (uri (cran-uri "entropy" version)) + (sha256 + (base32 + "10vg4818q5g54pv2nn9x5i7pvky5nsv96syy47pz2mgqp1273cpd")))) + (properties `((upstream-name . "entropy"))) + (build-system r-build-system) + (home-page "https://www.strimmerlab.org/software/entropy/") + (synopsis "Estimation of entropy, mutual information and related quantities") + (description + "This package implements various estimators of entropy, such as the +shrinkage estimator by Hausser and Strimmer, the maximum likelihood and the +Millow-Madow estimator, various Bayesian estimators, and the Chao-Shen +estimator. It also offers an R interface to the NSB estimator. Furthermore, +it provides functions for estimating Kullback-Leibler divergence, chi-squared, +mutual information, and chi-squared statistic of independence. In addition +there are functions for discretizing continuous random variables.") + (license license:gpl3+))) + (define-public r-abn (package (name "r-abn") - (version "2.2") + (version "2.2.1") (source (origin (method url-fetch) (uri (cran-uri "abn" version)) (sha256 (base32 - "19w6bdjyp4zwqs6p0flry4qxqynf9rh8ykdrfrp61wrdf7kysw0d")))) + "11nbg6dwvbj0ac7qvr203vzjnw5zc1a8cibb9l6rzzr7yfg16xzc")))) (build-system r-build-system) (inputs `(("gsl" ,gsl))) (propagated-inputs - `(("r-lme4" ,r-lme4) + `(("r-boot" ,r-boot) + ("r-brglm" ,r-brglm) + ("r-entropy" ,r-entropy) + ("r-lme4" ,r-lme4) ("r-mass" ,r-mass) + ("r-moments" ,r-moments) ("r-nnet" ,r-nnet) ("r-rcpp" ,r-rcpp) ("r-rcpparmadillo" ,r-rcpparmadillo) @@ -8922,14 +9007,14 @@ (define-public r-bayestestr (define-public r-performance (package (name "r-performance") - (version "0.4.6") + (version "0.4.7") (source (origin (method url-fetch) (uri (cran-uri "performance" version)) (sha256 (base32 - "08i9ngvga06abs2k50gvkh6iwl4r77bkmmchsqjibsy09wdvd8xj")))) + "0gw165wm2a0vjsvyll8z9k6qd156z3jf4priy1r745v63x4mnb5k")))) (build-system r-build-system) (propagated-inputs `(("r-bayestestr" ,r-bayestestr) @@ -11769,14 +11854,14 @@ (define-public r-longitudinal (define-public r-genenet (package (name "r-genenet") - (version "1.2.14") + (version "1.2.15") (source (origin (method url-fetch) (uri (cran-uri "GeneNet" version)) (sha256 (base32 - "0cdhrj15rz0w0pyw3r8mikrzsdh95y5i1c0pa3cn0c2bjnjx3x3n")))) + "11ba6ahsk3x9alvcw8bai2bpg84ki1m8nadrjjdhjg65svhw8njm")))) (properties `((upstream-name . "GeneNet"))) (build-system r-build-system) (propagated-inputs @@ -15839,14 +15924,14 @@ (define-public r-citr (define-public r-xgboost (package (name "r-xgboost") - (version "1.0.0.2") + (version "1.1.1.1") (source (origin (method url-fetch) (uri (cran-uri "xgboost" version)) (sha256 (base32 - "1ld2w51c5fy3bl0kvjn1iplffc4lmin9s9zz5xx7xsm44d6j6kzd")))) + "13njhcxljhbcs37ni6r5174fk8kx9b5p7rlw1an1ak3w92jn56cq")))) (build-system r-build-system) (propagated-inputs `(("r-data-table" ,r-data-table) diff --git a/gnu/packages/crates-io.scm b/gnu/packages/crates-io.scm index 30e00b3f48..8ab88fa243 100644 --- a/gnu/packages/crates-io.scm +++ b/gnu/packages/crates-io.scm @@ -32,6 +32,7 @@ (define-module (gnu packages crates-io) #:use-module (gnu packages) #:use-module (gnu packages base) #:use-module (gnu packages compression) + #:use-module (gnu packages curl) #:use-module (gnu packages fontutils) #:use-module (gnu packages freedesktop) #:use-module (gnu packages glib) @@ -49,6 +50,7 @@ (define-module (gnu packages crates-io) #:use-module (gnu packages tls) #:use-module (gnu packages video) #:use-module (gnu packages version-control) + #:use-module (gnu packages web) #:use-module (gnu packages xml) #:use-module (gnu packages xorg)) @@ -149,10 +151,10 @@ (define-public rust-addr2line-0.9 ("rust-memmap" ,rust-memmap-0.7) ("rust-rustc-test" ,rust-rustc-test-0.3)))))) -(define-public rust-adler32-1.0 +(define-public rust-adler32-1 (package (name "rust-adler32") - (version "1.0.4") + (version "1.1.0") (source (origin (method url-fetch) @@ -161,12 +163,15 @@ (define-public rust-adler32-1.0 (string-append name "-" version ".crate")) (sha256 (base32 - "1hnan4fgmnidgn2k84hh2i67c3wp2c5iwd5hs61yi7gwwx1p6bjx")))) + "0bgks405vz823bphgwhj4l9h6vpfh900s0phfk4qqijyh9xhfysn")))) (build-system cargo-build-system) (arguments - `(#:skip-build? #t + `(#:cargo-inputs + (("rust-compiler-builtins" ,rust-compiler-builtins-0.1) + ("rust-rustc-std-workspace-core" ,rust-rustc-std-workspace-core-1.0)) #:cargo-development-inputs - (("rust-rand" ,rust-rand-0.4)))) + (("rust-bencher" ,rust-bencher-0.1) + ("rust-rand" ,rust-rand-0.4)))) (home-page "https://github.com/remram44/adler32-rs") (synopsis "Implementation of the Adler32 rolling hash algorithm") (description @@ -4619,31 +4624,42 @@ (define-public rust-curl-sys-0.4 (origin (method url-fetch) (uri (crate-uri "curl-sys" version)) - (file-name (string-append name "-" version ".crate")) + (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "02542zmvl3fpdqf7ai4cqnamm4albx9j645dkjx5qr1myq8ax42y")))) + "02542zmvl3fpdqf7ai4cqnamm4albx9j645dkjx5qr1myq8ax42y")) + (modules '((guix build utils))) + (snippet + '(begin (delete-file-recursively "curl") #t)))) (build-system cargo-build-system) - ;(arguments - ; `(#:phases - ; (modify-phases %standard-phases - ; (add-after 'unpack 'find-openssl - ; (lambda* (#:key inputs #:allow-other-keys) - ; (let ((openssl (assoc-ref inputs "openssl"))) - ; (setenv "OPENSSL_DIR" openssl)) - ; #t))))) - ;(native-inputs - ; `(("pkg-config" ,pkg-config))) - ;(inputs - ; `(("curl" ,curl) - ; ("nghttp2" ,nghttp2) - ; ("openssl" ,openssl) - ; ("zlib" ,zlib))) + (arguments + `(#:cargo-inputs + (("rust-libc" ,rust-libc-0.2) + ("rust-libnghttp2-sys" ,rust-libnghttp2-sys-0.1) + ("rust-libz-sys" ,rust-libz-sys-1.0) + ("rust-openssl-sys" ,rust-openssl-sys-0.9) + ("rust-winapi" ,rust-winapi-0.3) + ("rust-cc" ,rust-cc-1.0) + ("rust-pkg-config" ,rust-pkg-config-0.3) + ("rust-vcpkg" ,rust-vcpkg-0.2)) + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'find-openssl + (lambda* (#:key inputs #:allow-other-keys) + (let ((openssl (assoc-ref inputs "openssl"))) + (setenv "OPENSSL_DIR" openssl)) + #t))))) + (native-inputs + `(("pkg-config" ,pkg-config))) + (inputs + `(("curl" ,curl) + ("nghttp2" ,nghttp2) + ("openssl" ,openssl) + ("zlib" ,zlib))) (home-page "https://github.com/alexcrichton/curl-rust") (synopsis "Native bindings to the libcurl library") (description "This package provides native bindings to the @code{libcurl} library.") - (properties '((hidden? . #t))) (license license:expat))) (define-public rust-custom-derive-0.1 @@ -4835,7 +4851,7 @@ (define-public rust-deflate-0.7 (build-system cargo-build-system) (arguments `(#:cargo-inputs - (("rust-adler32" ,rust-adler32-1.0) + (("rust-adler32" ,rust-adler32-1) ("rust-byteorder" ,rust-byteorder-1.3) ("rust-gzip-header" ,rust-gzip-header-0.3) ("rust-flate2" ,rust-flate2-1.0)))) @@ -10325,7 +10341,7 @@ (define-public rust-inflate-0.4 "1zxjdn8iwa0ssxrnjmywm3r1v284wryvzrf8vkc7nyf5ijbjknqw")))) (build-system cargo-build-system) (arguments - `(#:cargo-inputs (("rust-adler32" ,rust-adler32-1.0)))) + `(#:cargo-inputs (("rust-adler32" ,rust-adler32-1)))) (home-page "https://github.com/PistonDevelopers/inflate.git") (synopsis "DEFLATE decoding") (description "This package provides DEFLATE decoding.") @@ -11178,8 +11194,43 @@ (define-public rust-lazycell-1.2 "This package provides a library providing a lazily filled Cell struct.") (license (list license:expat license:asl2.0)))) +(define-public rust-lexical-core-0.7 + (package + (name "rust-lexical-core") + (version "0.7.4") + (source + (origin + (method url-fetch) + (uri (crate-uri "lexical-core" version)) + (file-name + (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "05i6b69ay8xbxw88vx89vglb7xm5n8ky82hax7d5a7z60bdccrfv")))) + (build-system cargo-build-system) + (arguments + `(#:cargo-inputs + (("rust-arrayvec" ,rust-arrayvec-0.5) + ("rust-bitflags" ,rust-bitflags-1) + ("rust-cfg-if" ,rust-cfg-if-0.1) + ("rust-dtoa" ,rust-dtoa-0.4) + ("rust-ryu" ,rust-ryu-1.0) + ("rust-static-assertions" ,rust-static-assertions-1)) + #:cargo-development-inputs + (("rust-approx" ,rust-approx-0.3) + ("rust-proptest" ,rust-proptest-0.9) + ("rust-quickcheck" ,rust-quickcheck-0.9)))) + (home-page + "https://github.com/Alexhuszagh/rust-lexical/tree/master/lexical-core") + (synopsis + "Lexical, to- and from-string conversion routines") + (description + "Lexical, to- and from-string conversion routines.") + (license (list license:expat license:asl2.0)))) + (define-public rust-lexical-core-0.4 (package + (inherit rust-lexical-core-0.7) (name "rust-lexical-core") (version "0.4.2") (source @@ -11191,7 +11242,6 @@ (define-public rust-lexical-core-0.4 (sha256 (base32 "1gr5y3ykghd3wjc00l3iizkj1dxylyhwi6fj6yn2qg06nzx771iz")))) - (build-system cargo-build-system) (arguments `(#:skip-build? #t #:cargo-inputs @@ -11204,14 +11254,7 @@ (define-public rust-lexical-core-0.4 (("rust-approx" ,rust-approx-0.3) ("rust-proptest" ,rust-proptest-0.9) ("rust-quickcheck" ,rust-quickcheck-0.8) - ("rust-rustc-version" ,rust-rustc-version-0.2)))) - (home-page - "https://github.com/Alexhuszagh/rust-lexical/tree/master/lexical-core") - (synopsis - "Lexical, to- and from-string conversion routines") - (description - "Lexical, to- and from-string conversion routines.") - (license (list license:asl2.0 license:expat)))) + ("rust-rustc-version" ,rust-rustc-version-0.2)))))) (define-public rust-libc-0.2 (package @@ -11334,12 +11377,22 @@ (define-public rust-libgit2-sys-0.7 (origin (method url-fetch) (uri (crate-uri "libgit2-sys" version)) - (file-name (string-append name "-" version ".crate")) + (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "1wcvg2qqra2aviasvqcscl8gb2rnjnd6h998wy5dlmf2bnriqi28")))) - (arguments '()) - (properties '((hidden? . #t))))) + "1wcvg2qqra2aviasvqcscl8gb2rnjnd6h998wy5dlmf2bnriqi28")) + (modules '((guix build utils))) + (snippet + '(begin (delete-file-recursively "libgit2") #t)))) + (arguments + `(#:cargo-inputs + (("rust-curl-sys" ,rust-curl-sys-0.4) + ("rust-libc" ,rust-libc-0.2) + ("rust-libssh2-sys" ,rust-libssh2-sys-0.2) + ("rust-libz-sys" ,rust-libz-sys-1.0) + ("rust-openssl-sys" ,rust-openssl-sys-0.9) + ("rust-cc" ,rust-cc-1.0) + ("rust-pkg-config" ,rust-pkg-config-0.3)))))) (define-public rust-libloading-0.5 (package @@ -11438,18 +11491,25 @@ (define-public rust-libnghttp2-sys-0.1 (origin (method url-fetch) (uri (crate-uri "libnghttp2-sys" version)) - (file-name (string-append name "-" version ".crate")) + (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "0qr4lyh7righx9n22c7amlcpk906rn1jnb2zd6gdfpa3yi24s982")))) + "0qr4lyh7righx9n22c7amlcpk906rn1jnb2zd6gdfpa3yi24s982")) + (modules '((guix build utils))) + (snippet + '(begin (delete-file-recursively "nghttp2") #t)))) (build-system cargo-build-system) - ;(inputs - ; `(("nghttp2" ,nghttp2))) + (arguments + `(#:skip-build? #t ; Uses unstable features + #:cargo-inputs + (("rust-libc" ,rust-libc-0.2) + ("rust-cc" ,rust-cc-1.0)))) + (inputs + `(("nghttp2" ,nghttp2))) (home-page "https://github.com/alexcrichton/nghttp2-rs") (synopsis "FFI bindings for libnghttp2 (nghttp2)") (description "This package provides FFI bindings for libnghttp2 (nghttp2).") - (properties '((hidden? . #t))) (license (list license:asl2.0 license:expat)))) @@ -12639,7 +12699,7 @@ (define-public rust-miniz-oxide-0.3 (build-system cargo-build-system) (arguments `(#:skip-build? #t - #:cargo-inputs (("rust-adler32" ,rust-adler32-1.0)))) + #:cargo-inputs (("rust-adler32" ,rust-adler32-1)))) (home-page "https://github.com/Frommi/miniz_oxide/tree/master/miniz_oxide") (synopsis "Pure rust replacement for the miniz DEFLATE/zlib encoder/decoder") (description @@ -13421,8 +13481,53 @@ (define-public rust-nodrop-union-0.1 (license (list license:asl2.0 license:expat)))) +(define-public rust-nom-5 + (package + (name "rust-nom") + (version "5.1.2") + (source + (origin + (method url-fetch) + (uri (crate-uri "nom" version)) + (file-name + (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "1br74rwdp3c2ddga03bphnf355spn4mzwf1slg0a30zd4qnjdd7z")))) + (build-system cargo-build-system) + (arguments + `(#:tests? #f ; Tests require example directory, not included in tarball. + #:cargo-inputs + (("rust-lazy-static" ,rust-lazy-static-1) + ("rust-lexical-core" ,rust-lexical-core-0.7) + ("rust-memchr" ,rust-memchr-2.2) + ("rust-regex" ,rust-regex-1.1) + ("rust-version-check" ,rust-version-check-0.9)) + #:cargo-development-inputs + (("rust-criterion" ,rust-criterion-0.2) + ("rust-doc-comment" ,rust-doc-comment-0.3) + ("rust-jemallocator" ,rust-jemallocator-0.1)) + #:phases + (modify-phases %standard-phases + (add-after 'configure 'override-jemalloc + (lambda* (#:key inputs #:allow-other-keys) + (let ((jemalloc (assoc-ref inputs "jemalloc"))) + (setenv "JEMALLOC_OVERRIDE" + (string-append jemalloc "/lib/libjemalloc_pic.a"))) + #t))))) + (native-inputs + `(("jemalloc" ,jemalloc))) + (home-page "https://github.com/Geal/nom") + (synopsis + "Byte-oriented, zero-copy, parser combinators library") + (description + "This package provides a byte-oriented, zero-copy, parser +combinators library.") + (license license:expat))) + (define-public rust-nom-4.2 (package + (inherit rust-nom-5) (name "rust-nom") (version "4.2.3") (source @@ -13434,7 +13539,6 @@ (define-public rust-nom-4.2 (sha256 (base32 "1mkvby8b4m61p4g1px0pwr58yfkphyp1jcfbp4qfp7l6iqdaklia")))) - (build-system cargo-build-system) (arguments `(#:skip-build? #t #:cargo-inputs @@ -13444,14 +13548,7 @@ (define-public rust-nom-4.2 ("rust-version-check" ,rust-version-check-0.1)) #:cargo-development-inputs (("rust-criterion" ,rust-criterion-0.2) - ("rust-jemallocator" ,rust-jemallocator-0.1)))) - (home-page "https://github.com/Geal/nom") - (synopsis - "Byte-oriented, zero-copy, parser combinators library") - (description - "This package provides a byte-oriented, zero-copy, parser -combinators library.") - (license license:expat))) + ("rust-jemallocator" ,rust-jemallocator-0.1)))))) (define-public rust-nom-3 (package @@ -21861,8 +21958,29 @@ (define-public rust-stackvector-1.0 "StackVec: vector-like facade for stack-allocated arrays.") (license (list license:asl2.0 license:expat)))) +(define-public rust-static-assertions-1 + (package + (name "rust-static-assertions") + (version "1.1.0") + (source + (origin + (method url-fetch) + (uri (crate-uri "static-assertions" version)) + (file-name (string-append name "-" version ".crate")) + (sha256 + (base32 + "0gsl6xmw10gvn3zs1rv99laj5ig7ylffnh71f9l34js4nr4r7sx2")))) + (build-system cargo-build-system) + (home-page "https://github.com/nvzqz/static-assertions-rs") + (synopsis "Compile-time assertions for rust") + (description + "This package provides compile-time assertions to ensure that invariants +are met.") + (license (list license:expat license:asl2.0)))) + (define-public rust-static-assertions-0.3 (package + (inherit rust-static-assertions-1) (name "rust-static-assertions") (version "0.3.4") (source @@ -21872,14 +21990,7 @@ (define-public rust-static-assertions-0.3 (file-name (string-append name "-" version ".crate")) (sha256 (base32 - "1lw33i89888yb3x29c6dv4mrkg3534n0rlg3r7qzh4p58xmv6gkz")))) - (build-system cargo-build-system) - (home-page "https://github.com/nvzqz/static-assertions-rs") - (synopsis "Compile-time assertions for rust") - (description - "This package provides compile-time assertions to ensure that invariants -are met.") - (license (list license:expat license:asl2.0)))) + "1lw33i89888yb3x29c6dv4mrkg3534n0rlg3r7qzh4p58xmv6gkz")))))) (define-public rust-stb-truetype-0.3 (package diff --git a/gnu/packages/cups.scm b/gnu/packages/cups.scm index d83211ede2..8bfe96079c 100644 --- a/gnu/packages/cups.scm +++ b/gnu/packages/cups.scm @@ -415,14 +415,14 @@ (define-public cups-pk-helper (define-public hplip (package (name "hplip") - (version "3.20.5") + (version "3.20.6") (source (origin (method url-fetch) (uri (string-append "mirror://sourceforge/hplip/hplip/" version "/hplip-" version ".tar.gz")) (sha256 (base32 - "0nj79r61fzddwwzf8kcc0qkp4y9qx46v15iarz6h6y3v91wbsjq0")) + "0rmk7i28mb0q66i5l9d0fq2j23dkhz5gx5g2xvi16ga0dnprcilp")) (modules '((guix build utils))) (patches (search-patches "hplip-remove-imageprocessor.patch")) (snippet @@ -681,14 +681,14 @@ (define-public foomatic-filters (define-public foo2zjs (package (name "foo2zjs") - (version "20200426") + (version "20200610") (source (origin (method url-fetch) ;; XXX: This is an unversioned URL! (uri "http://foo2zjs.rkkda.com/foo2zjs.tar.gz") (sha256 (base32 - "0wwh29ddd59q18r1jpi3166lgnwr8zn9lry82vahc2g96l97isp7")))) + "11ddx6wf8b5ksl4fqw6fnyz9m3y470lryyrskkya2bsch2bvj9lg")))) (build-system gnu-build-system) (arguments '(#:phases (modify-phases %standard-phases diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm index bab4b4d128..e2eb0f396d 100644 --- a/gnu/packages/databases.scm +++ b/gnu/packages/databases.scm @@ -1147,7 +1147,7 @@ (define-public emacs-recutils (define-public rocksdb (package (name "rocksdb") - (version "6.10.1") + (version "6.10.2") (source (origin (method git-fetch) (uri (git-reference @@ -1156,7 +1156,7 @@ (define-public rocksdb (file-name (git-file-name name version)) (sha256 (base32 - "0rp8q73dx5f1nkcf2qp6fljm4dpj281y6cqckqgv976kvwvqdgz1")) + "1f2wqb6px812ijcivq3rsknqgkv01wblc6sd8wavhrw8qljgr3s1")) (modules '((guix build utils))) (snippet '(begin diff --git a/gnu/packages/diffoscope.scm b/gnu/packages/diffoscope.scm index f6f402b315..f5387f8501 100644 --- a/gnu/packages/diffoscope.scm +++ b/gnu/packages/diffoscope.scm @@ -72,7 +72,7 @@ (define-module (gnu packages diffoscope) (define-public diffoscope (package (name "diffoscope") - (version "146") + (version "148") (source (origin (method git-fetch) (uri (git-reference @@ -81,7 +81,7 @@ (define-public diffoscope (file-name (git-file-name name version)) (sha256 (base32 - "07kd3vshf4wlm0mv3mp6ljbxjq80mcg52w5ks6si1gnpzfbfz07p")))) + "0siv5z8iqgkzl51dmv69ifqids6hqmiir00yyl1aaqbginrwyhyv")))) (build-system python-build-system) (arguments `(#:phases (modify-phases %standard-phases @@ -92,12 +92,6 @@ (define-public diffoscope (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': 'openssl'") - "'debian': 'openssl', 'guix': 'openssl'")))) ;; This test is broken because our `file` package has a ;; bug in berkeley-db file type detection. (add-after 'unpack 'remove-berkeley-test diff --git a/gnu/packages/dns.scm b/gnu/packages/dns.scm index 7ff0501ab2..e4cc4a111b 100644 --- a/gnu/packages/dns.scm +++ b/gnu/packages/dns.scm @@ -119,7 +119,7 @@ (define-public dnsmasq (define-public isc-bind (package (name "bind") - (version "9.16.3") + (version "9.16.4") (source (origin (method url-fetch) (uri (string-append @@ -127,7 +127,7 @@ (define-public isc-bind "/bind-" version ".tar.xz")) (sha256 (base32 - "0zjgaspnx0p0rp83h4yj595s25da7fjis94z9frhv3azvq9nbb17")))) + "02ip1xvmnqla3p5k2rmfrksrw4q9iqbrhyg3mamvrj5a7n6hh8km")))) (build-system gnu-build-system) (outputs `("out" "utils")) (inputs diff --git a/gnu/packages/docbook.scm b/gnu/packages/docbook.scm index fe0b26e788..2c7f920011 100644 --- a/gnu/packages/docbook.scm +++ b/gnu/packages/docbook.scm @@ -3,6 +3,7 @@ ;;; Copyright © 2014 Eric Bavier ;;; Copyright © 2016 Mathieu Lirzin ;;; Copyright © 2018 Tobias Geerinckx-Rice +;;; Copyright © 2020 Marius Bakke ;;; ;;; This file is part of GNU Guix. ;;; @@ -34,8 +35,50 @@ (define-module (gnu packages docbook) #:use-module (guix build-system trivial) #:use-module (guix build-system python)) +(define-public docbook-xml-5 + (package + (name "docbook-xml") + (version "5.0.1") + (source (origin + (method url-fetch) + (uri (string-append "https://www.docbook.org/xml/" version + "/docbook-" version ".zip")) + (sha256 + (base32 + "1iz3hq1lqgnshvlz4j9gvh4jy1ml74qf90vqf2ikbq0h4i2xzybs")))) + (build-system trivial-build-system) + (arguments + `(#:modules ((guix build utils)) + #:builder + (begin + (use-modules (guix build utils)) + (let* ((unzip + (string-append (assoc-ref %build-inputs "unzip") + "/bin/unzip")) + (source (assoc-ref %build-inputs "source")) + (out (assoc-ref %outputs "out")) + (dtd (string-append out "/xml/dtd/docbook"))) + (invoke unzip source) + (mkdir-p dtd) + (copy-recursively (string-append "docbook-" ,version) dtd) + (with-directory-excursion dtd + (substitute* (string-append out "/xml/dtd/docbook/catalog.xml") + (("uri=\"") + (string-append + "uri=\"file://" dtd "/"))) + #t))))) + (native-inputs `(("unzip" ,unzip))) + (home-page "https://docbook.org") + (synopsis "DocBook XML DTDs for document authoring") + (description + "DocBook is general purpose XML and SGML document type particularly well +suited to books and papers about computer hardware and software (though it is +by no means limited to these applications.) This package provides XML DTDs.") + (license (x11-style "" "See file headers.")))) + (define-public docbook-xml (package + (inherit docbook-xml-5) (name "docbook-xml") (version "4.5") (source (origin @@ -45,7 +88,6 @@ (define-public docbook-xml (sha256 (base32 "1d671lcjckjri28xfbf6dq7y3xnkppa910w1jin8rjc35dx06kjf")))) - (build-system trivial-build-system) (arguments '(#:builder (begin (use-modules (guix build utils)) @@ -60,19 +102,11 @@ (define-public docbook-xml (with-directory-excursion dtd (invoke unzip source)) (substitute* (string-append out "/xml/dtd/docbook/catalog.xml") - (("uri=\"") - (string-append + (("uri=\"") + (string-append "uri=\"file://" dtd "/"))) #t)) - #:modules ((guix build utils)))) - (native-inputs `(("unzip" ,unzip))) - (home-page "https://docbook.org") - (synopsis "DocBook XML DTDs for document authoring") - (description - "DocBook is general purpose XML and SGML document type particularly well -suited to books and papers about computer hardware and software (though it is -by no means limited to these applications.) This package provides XML DTDs.") - (license (x11-style "" "See file headers.")))) + #:modules ((guix build utils)))))) (define-public docbook-xml-4.4 (package (inherit docbook-xml) diff --git a/gnu/packages/efi.scm b/gnu/packages/efi.scm index da00fdf932..bc27a7a504 100644 --- a/gnu/packages/efi.scm +++ b/gnu/packages/efi.scm @@ -64,7 +64,7 @@ (define-public gnu-efi (define-public sbsigntools (package (name "sbsigntools") - (version "0.9.3") + (version "0.9.4") (source (origin (method git-fetch) @@ -75,7 +75,7 @@ (define-public sbsigntools (recursive? #t))) (file-name (git-file-name name version)) (sha256 - (base32 "0gc3xmp73xl7z4nkwz4qy960rdflmx7k4ksgyblcnia9smvsir6y")))) + (base32 "1y76wy65y6k10mjl2dm5hb5ms475alr4s080xzj8y833x01xvf3m")))) (build-system gnu-build-system) (arguments `(#:phases diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index af379902a1..866a5c8ced 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -40,7 +40,7 @@ ;;; Copyright © 2018 Pierre-Antoine Rouby ;;; Copyright © 2018 Alex Branham ;;; Copyright © 2018 Thorsten Wilms -;;; Copyright © 2018, 2019 Pierre Langlois +;;; Copyright © 2018, 2019, 2020 Pierre Langlois ;;; Copyright © 2018, 2019, 2020 Brett Gilio ;;; Copyright © 2019, 2020 Dimakakos Dimos ;;; Copyright © 2019, 2020 Brian Leung @@ -96,6 +96,7 @@ (define-module (gnu packages emacs-xyz) #:use-module (guix packages) #:use-module (guix cvs-download) #:use-module (guix download) + #:use-module (guix bzr-download) #:use-module (guix git-download) #:use-module (guix hg-download) #:use-module (guix build-system gnu) @@ -249,6 +250,79 @@ (define-public emacs-ac-geiser (license license:bsd-3) (home-page "https://github.com/xiaohanyu/ac-geiser")))) +(define-public emacs-hyperbole + (package + (name "emacs-hyperbole") + (version "7.0.6") + (source + (origin + (method url-fetch) + (uri (string-append "https://elpa.gnu.org/packages/" + "hyperbole-" version ".tar")) + (sha256 + (base32 "08gi4v76s53nfmn3s0qcxc3zii0pspjfd6ry7jq1kgm3z34x8hab")) + (patches + (search-patches "emacs-hyperbole-toggle-messaging.patch")))) + (build-system emacs-build-system) + (arguments + `(#:include '("DEMO" + "DEMO-ROLO.otl" + "HY-ABOUT" + "\\.el$" + "\\.info$" + "\\.kotl$") + #:phases + (modify-phases %standard-phases + ;; Fix build issues about missing "domainname" and "hpmap:dir-user" + ;; parent dir. + (add-after 'unpack 'fix-build + (lambda* (#:key inputs #:allow-other-keys) + (substitute* "hypb.el" + (("/bin/domainname") + (string-append (assoc-ref inputs "inetutils") + "/bin/dnsdomainname"))) + (substitute* "hyperbole.el" + (("\\(hyperb:check-dir-user\\)") "")) + #t))))) + (inputs + `(("inetutils" ,inetutils))) + (home-page "https://www.gnu.org/software/hyperbole/") + (synopsis "The Everyday Hypertextual Information Manager") + (description + "GNU Hyperbole, or just Hyperbole, is an easy-to-use, yet powerful and +programmable hypertextual information management system implemented as a GNU +Emacs package. It offers rapid views and interlinking of all kinds of textual +information, utilizing Emacs for editing. It can dramatically increase your +productivity and greatly reduce the number of keyboard/mouse keys you'll need +to work efficiently. Hyperbole lets you: + +@itemize +@item Quickly create hyperlink buttons either from the keyboard or by dragging +between a source and destination window with a mouse button depressed. Later, +activate buttons by pressing/clicking on them or by giving the name of the +button. +@item Activate many kinds of \"implicit buttons\" recognized by context within +text buffers, e.g. URLs, grep output lines, and git commits. A single key or +mouse button automatically does the right thing in dozens of contexts; just +press and go. +@item Build outlines with multi-level numbered outline nodes, e.g. 1.4.8.6, +that all renumber automatically as any node or tree is moved in the outline. +Each node also has a permanent hyperlink anchor that you can reference from +any other node. +@item Manage all your contacts quickly with hierarchical categories and embed +hyperlinks within each entry. Or create an archive of documents with +hierarchical entries and use the same search mechanism to quickly find any +matching entry. +@item Use single keys to easily manage your Emacs windows or frames and +quickly retrieve saved window and frame configurations. +@item Search for things in your current buffers, in a directory tree or across +major web search engines with the touch of a few keys. +@end itemize + +The common thread in all these features is making retrieval, management and +display of information fast and easy. That is Hyperbole's purpose.") + (license license:gpl3+))) + (define-public emacs-paredit (package (name "emacs-paredit") @@ -398,10 +472,10 @@ (define-public emacs-libgit (define-public emacs-magit ;; There hasn't been an official release since 2018-11-16. - (let ((commit "d05545ec2fd7edf915eaf1b9c15c785bb08975cc")) + (let ((commit "0746bf1bacfe896d3917ccc19c7fb9d95c18b1e9")) (package (name "emacs-magit") - (version (git-version "2.90.1" "4" commit)) + (version (git-version "2.90.1" "5" commit)) (source (origin (method git-fetch) (uri (git-reference @@ -410,7 +484,7 @@ (define-public emacs-magit (file-name (git-file-name name version)) (sha256 (base32 - "11aqyy4r9hrdi9nlypd70hn8384b6q89c7xavgv8c5q7f2g5z9qg")))) + "1sgdygr81s2qxq2ahf998hl89qrb0r2wbgnsiz3hdda1431p0wzg")))) (build-system emacs-build-system) (arguments `(#:emacs ,emacs-no-x ;module support is required @@ -1188,14 +1262,14 @@ (define-public emacs-reformatter (define-public emacs-relint (package (name "emacs-relint") - (version "1.17") + (version "1.18") (source (origin (method url-fetch) - (uri (string-append - "https://elpa.gnu.org/packages/relint-" version ".tar")) + (uri (string-append "https://elpa.gnu.org/packages/" + "relint-" version ".tar")) (sha256 - (base32 "1nv13dqdhf72c1jgk1ml4k6jqb8wsyphcx2vhsyhig5198lg4kd7")))) + (base32 "0zfislsksrkn6qs0w26yaff5xr7xqy2x235dcdpz8s2v35b6dhci")))) (build-system emacs-build-system) (propagated-inputs `(("emacs-xr" ,emacs-xr))) (home-page "https://github.com/mattiase/relint") @@ -1404,44 +1478,21 @@ (define-public emacs-eww-lnum (define-public emacs-emms (package (name "emacs-emms") - (version "5.4") + (version "5.42") (source (origin (method url-fetch) - (uri (string-append "mirror://gnu/emms/emms-" version ".tar.gz")) + (uri (string-append "https://elpa.gnu.org/packages/" + "emms-" version ".tar")) (sha256 - (base32 "1nd7sb6pva7qb1ki6w0zhd6zvqzd7742kaqi0f3v4as5jh09l6nr")) - (modules '((guix build utils))) - (snippet - '(begin - (substitute* "Makefile" - (("/usr/bin/install-info") - ;; No need to use 'install-info' since it would create a - ;; useless 'dir' file. - "true") - (("^INFODIR=.*") - ;; Install Info files to $out/share/info, not $out/info. - "INFODIR := $(PREFIX)/share/info\n") - (("/site-lisp/emms") - ;; Install directly in share/emacs/site-lisp, not in a - ;; sub-directory. - "/site-lisp") - (("^all: (.*)\n" _ rest) - ;; Build 'emms-print-metadata'. - (string-append "all: " rest " emms-print-metadata\n"))) - #t)))) - (build-system gnu-build-system) + (base32 "1khx1fvllrs6w9kxk12mp1hj309c90mc7lkq1vvlqlr7vd6zmnpj")))) + (build-system emacs-build-system) (arguments - `(#:modules ((guix build gnu-build-system) - (guix build utils) - (guix build emacs-utils) - (ice-9 ftw)) - #:imported-modules (,@%gnu-build-system-modules - (guix build emacs-utils)) - - #:phases + `(#:phases (modify-phases %standard-phases - (replace 'configure + (add-after 'unpack 'set-external-programs + ;; Specify the absolute file names of the various programs + ;; so that everything works out-of-the-box. (lambda* (#:key inputs outputs #:allow-other-keys) (let ((out (assoc-ref outputs "out")) (flac (assoc-ref inputs "flac")) @@ -1451,94 +1502,56 @@ (define-public emacs-emms (mp3info (assoc-ref inputs "mp3info")) (mutagen (assoc-ref inputs "mutagen")) (opus (assoc-ref inputs "opus-tools"))) - ;; Specify the installation directory. - (substitute* "Makefile" - (("PREFIX=.*$") - (string-append "PREFIX := " out "\n"))) - - (setenv "SHELL" (which "sh")) - (setenv "CC" "gcc") - - ;; Specify the absolute file names of the various - ;; programs so that everything works out-of-the-box. - (with-directory-excursion "lisp" - (emacs-substitute-variables - "emms-player-mpg321-remote.el" - ("emms-player-mpg321-remote-command" - (string-append mpg321 "/bin/mpg321"))) - (substitute* "emms-player-simple.el" - (("\"ogg123\"") - (string-append "\"" vorbis "/bin/ogg123\""))) - (substitute* "emms-player-simple.el" - (("\"mpg321\"") - (string-append "\"" mpg321 "/bin/mpg321\""))) - (emacs-substitute-variables "emms-info-ogginfo.el" - ("emms-info-ogginfo-program-name" - (string-append vorbis "/bin/ogginfo"))) - (emacs-substitute-variables "emms-info-opusinfo.el" - ("emms-info-opusinfo-program-name" - (string-append opus "/bin/opusinfo"))) - (emacs-substitute-variables "emms-info-libtag.el" - ("emms-info-libtag-program-name" - (string-append out "/bin/emms-print-metadata"))) - (emacs-substitute-variables "emms-info-mp3info.el" - ("emms-info-mp3info-program-name" - (string-append mp3info "/bin/mp3info"))) - (emacs-substitute-variables "emms-info-metaflac.el" - ("emms-info-metaflac-program-name" - (string-append flac "/bin/metaflac"))) - (emacs-substitute-variables "emms-source-file.el" - ("emms-source-file-gnu-find" (which "find"))) - (substitute* "emms-volume-amixer.el" - (("\"amixer\"") - (string-append "\"" alsa "/bin/amixer\""))) - (substitute* "emms-tag-editor.el" - (("\"mid3v2\"") - (string-append "\"" mutagen "/bin/mid3v2\""))) - #t)))) - (add-before 'install 'pre-install - (lambda* (#:key outputs #:allow-other-keys) - ;; The 'install' rule expects the target directories to exist. - (let* ((out (assoc-ref outputs "out")) - (bin (string-append out "/bin")) - (man1 (string-append out "/share/man/man1"))) - (mkdir-p bin) - (mkdir-p man1) - - ;; Ensure that files are not rejected by gzip - (let ((early-1980 315619200)) ; 1980-01-02 UTC - (ftw "." (lambda (file stat flag) - (unless (<= early-1980 (stat:mtime stat)) - (utime file early-1980 early-1980)) - #t))) - #t))) - (add-after 'install 'post-install - (lambda* (#:key outputs #:allow-other-keys) - (let ((out (assoc-ref outputs "out"))) - (symlink "emms-auto.el" - (string-append out "/share/emacs/site-lisp/" - "emms-autoloads.el"))) - #t))) - #:tests? #f)) - (native-inputs `(("emacs" ,emacs-minimal) ;for (guix build emacs-utils) - ("texinfo" ,texinfo))) - (inputs `(("alsa-utils" ,alsa-utils) - ("flac" ,flac) ;for metaflac - ("vorbis-tools" ,vorbis-tools) - ("mpg321" ,mpg321) - ("taglib" ,taglib) - ("mp3info" ,mp3info) - ("mutagen" ,python-mutagen) - ("opus-tools" ,opus-tools))) - (properties '((upstream-name . "emms"))) - (synopsis "Emacs Multimedia System") + (emacs-substitute-variables "emms-player-mpg321-remote.el" + ("emms-player-mpg321-remote-command" + (string-append mpg321 "/bin/mpg321"))) + (substitute* "emms-player-simple.el" + (("\"ogg123\"") + (string-append "\"" vorbis "/bin/ogg123\""))) + (substitute* "emms-player-simple.el" + (("\"mpg321\"") + (string-append "\"" mpg321 "/bin/mpg321\""))) + (emacs-substitute-variables "emms-info-ogginfo.el" + ("emms-info-ogginfo-program-name" + (string-append vorbis "/bin/ogginfo"))) + (emacs-substitute-variables "emms-info-opusinfo.el" + ("emms-info-opusinfo-program-name" + (string-append opus "/bin/opusinfo"))) + (emacs-substitute-variables "emms-info-libtag.el" + ("emms-info-libtag-program-name" + (string-append out "/bin/emms-print-metadata"))) + (emacs-substitute-variables "emms-info-mp3info.el" + ("emms-info-mp3info-program-name" + (string-append mp3info "/bin/mp3info"))) + (emacs-substitute-variables "emms-info-metaflac.el" + ("emms-info-metaflac-program-name" + (string-append flac "/bin/metaflac"))) + (emacs-substitute-variables "emms-source-file.el" + ("emms-source-file-gnu-find" (which "find"))) + (substitute* "emms-volume-amixer.el" + (("\"amixer\"") + (string-append "\"" alsa "/bin/amixer\""))) + (substitute* "emms-tag-editor.el" + (("\"mid3v2\"") + (string-append "\"" mutagen "/bin/mid3v2\""))) + #t)))))) + (inputs + `(("alsa-utils" ,alsa-utils) + ("flac" ,flac) ;for metaflac + ("vorbis-tools" ,vorbis-tools) + ("mpg321" ,mpg321) + ("taglib" ,taglib) + ("mp3info" ,mp3info) + ("mutagen" ,python-mutagen) + ("opus-tools" ,opus-tools))) + (home-page "https://www.gnu.org/software/emms/") + (synopsis "The Emacs Multimedia System") (description "EMMS is the Emacs Multimedia System. It is a small front-end which can control one of the supported external players. Thus, it supports whatever formats are supported by your music player. It also supports tagging and playlist management, all behind a clean and light user interface.") - (home-page "https://www.gnu.org/software/emms/") (license license:gpl3+))) (define-public emacs-emms-mode-line-cycle @@ -3289,6 +3302,32 @@ (define-public emacs-znc IRC bouncer with ERC.") (license license:expat))) +(define-public emacs-erc-status-sidebar + (let ((commit "ea4189a1dbfe60117359c36e681ad7c389e2968c") + (revision "1")) + (package + (name "emacs-erc-status-sidebar") + (version (git-version "0.1" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/drewbarbs/erc-status-sidebar.git") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 "1hwlhzgx03z8891sblz56zdp8zj0izh72kxykgcnz5rrkyc3vfi3")))) + (build-system emacs-build-system) + (propagated-inputs `(("emacs-seq" ,emacs-seq))) + (home-page "https://github.com/drewbarbs/erc-status-sidebar") + (synopsis "Hexchat-like activity overview for ERC channels") + (description + "This package provides a Hexchat-like status bar for joined channels in +ERC, an Emacs client for IRC (Internet Relay Chat). It relies on the +@code{erc-track} module, and displays all the same information +@code{erc-track} does in the mode line, but in an alternative format.") + (license license:expat)))) + (define-public emacs-shut-up (package (name "emacs-shut-up") @@ -3912,6 +3951,31 @@ (define-public emacs-flycheck-grammalecte repetitions for example).") (license license:gpl3+))) +(define-public emacs-flycheck-guile + (package + (name "emacs-flycheck-guile") + (version "0.1.1") + (source + (origin + (method git-fetch) + (uri + (git-reference + (url "https://github.com/flatwhatson/flycheck-guile") + (commit version))) + (file-name (git-file-name name version)) + (sha256 + (base32 "163pnsh6r6bral1jg0vqri54g6hygws21vis0zci4114yb3fhkm1")))) + (propagated-inputs + `(("emacs-flycheck" ,emacs-flycheck) + ("emacs-geiser" ,emacs-geiser))) + (build-system emacs-build-system) + (home-page "https://github.com/flatwhatson/flycheck-guile") + (synopsis "GNU Guile support for Flycheck") + (description + "This package provides a Flycheck checker for GNU Guile using @code{guild +compile}.") + (license license:gpl3+))) + (define-public emacs-flycheck-rust (package (name "emacs-flycheck-rust") @@ -3989,6 +4053,62 @@ (define-public emacs-docker-compose-mode completion of relevant keywords.") (license license:expat))) +(define-public emacs-dvc + (let ((revision "591") ;no tags or official releases + (guix-revision "1")) + (package + (name "emacs-dvc") + (version (string-append "0.0.0-" guix-revision "." revision)) + (source + (origin + (method bzr-fetch) + (uri (bzr-reference + (url "lp:dvc") + (revision revision))) + (sha256 + (base32 + "03pqn493w70wcpgaxvqnfgynxghw114l9pyiv3r414d84vzhan6h")) + (file-name (string-append name "-" version "-checkout")))) + (build-system gnu-build-system) + (arguments + `(#:configure-flags + (list (string-append "--with-lispdir=" (assoc-ref %outputs "out") + "/share/emacs/site-lisp/")) + #:tests? #f ;no test suite + #:phases + (modify-phases %standard-phases + (add-before 'build 'set-home + ;; Something in dvc-bookmarks.el attempts to write config files in + ;; $HOME during the autoload generation. + (lambda _ (setenv "HOME" (getenv "TMPDIR")) #t)) + (add-before 'build 'fix-texinfo + ;; See https://bugs.launchpad.net/dvc/+bug/1264383. + (lambda _ + (substitute* "texinfo/dvc-intro.texinfo" + (("@itemx update ``to''") + "@item update ``to''") + (("@itemx brief") + "@item brief") + (("@itemx full") + "@item full") + (("@itemx drop") + "@item drop") + (("@itemx left file") + "@item left file")) + #t))))) + (native-inputs + `(("autoconf" ,autoconf) + ("automake" ,automake) ;for aclocal + ("emacs" ,emacs-minimal) + ("texinfo" ,texinfo))) + (home-page "http://xsteve.at/prg/emacs_dvc/index.html") + (synopsis "Emacs front-end for various distributed version control systems.") + (description "DVC is a legacy Emacs front-end for a number of +distributed version control systems. It currently supports GNU Arch, GNU +Bazaar, git, Mercurial, and Monotone. It also provides some integration with +Gnus, e.g., for applying patches received by email.") + (license license:gpl2+)))) + (define-public emacs-sudo-edit (let ((commit "cc3d478937b1accd38742bfceba92af02ee9357d") (revision "6")) @@ -4073,14 +4193,14 @@ (define-public emacs-ob-ipython (define-public emacs-debbugs (package (name "emacs-debbugs") - (version "0.23") - (source (origin - (method url-fetch) - (uri (string-append "https://elpa.gnu.org/packages/debbugs-" - version ".tar")) - (sha256 - (base32 - "0mcz97b3sddrc68wi8dz95b2rq7ky88pr2i1ghyhy28as16chmz5")))) + (version "0.24") + (source + (origin + (method url-fetch) + (uri (string-append "https://elpa.gnu.org/packages/debbugs-" + version ".tar")) + (sha256 + (base32 "1b8qwdvf3jvw0chrdgbymb2ci9ms45mf90nrljxx7jql2lsr3x63")))) (build-system emacs-build-system) (arguments '(#:include '("\\.el$" "\\.wsdl$" "\\.info$"))) (propagated-inputs @@ -5109,31 +5229,28 @@ (define-public emacs-puppet-mode (license license:gpl3+)))) (define-public emacs-god-mode - (let ((commit "6cf0807b6555eb6fcf8387a4e3b667071ef38964") - (revision "1")) - (package - (name "emacs-god-mode") - (version (string-append "20151005.925." - revision "-" (string-take commit 9))) - (source - (origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/chrisdone/god-mode.git") - (commit commit))) - (file-name (git-file-name name version)) - (sha256 - (base32 - "1am415k4xxcva6y3vbvyvknzc6bma49pq3p85zmpjsdmsp18qdix")))) - (build-system emacs-build-system) - (home-page "https://github.com/chrisdone/god-mode") - (synopsis "Minor mode for entering commands without modifier keys") - (description - "This package provides a global minor mode for entering Emacs commands + (package + (name "emacs-god-mode") + (version "2.17.0") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/chrisdone/god-mode.git") + (commit version))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1d2nrj35fzhnycchi0b7m5mbk5fyq7bgpbkkvc5xzqafclrsnapi")))) + (build-system emacs-build-system) + (home-page "https://github.com/chrisdone/god-mode") + (synopsis "Minor mode for entering commands without modifier keys") + (description + "This package provides a global minor mode for entering Emacs commands without modifier keys. It's similar to Vim's separation of commands and insertion mode. When enabled all keys are implicitly prefixed with @samp{C-} (among other helpful shortcuts).") - (license license:gpl3+)))) + (license license:gpl3+))) (define-public emacs-jinja2-mode (package @@ -7397,7 +7514,7 @@ (define-public emacs-highlight-indentation (define-public emacs-elpy (package (name "emacs-elpy") - (version "1.32.0") + (version "1.34.0") (source (origin (method git-fetch) (uri (git-reference @@ -7406,12 +7523,23 @@ (define-public emacs-elpy (file-name (git-file-name name version)) (sha256 (base32 - "0f00mdnzx6xqwni86rgvaa6sfkwyh62xfbwz8qsar15j0j6vc2dj")))) + "1x1z298axbh4xalssnq9nkf2z1sdgmx839vb01xz18kr9lfavx1x")))) (build-system emacs-build-system) (arguments `(#:include (cons* "^elpy/[^/]+\\.py$" "^snippets\\/" %default-include) #:phases (modify-phases %standard-phases + ;; The following tests fail when building with Emacs 27 (see: + ;; https://github.com/jorgenschaefer/elpy/issues/1812). + (add-after 'unpack 'disable-problematic-tests + (lambda _ + (substitute* "test/elpy-company-backend-test.el" + (("elpy-company-backend-should-add-shell-candidates.*" all) + (string-append all " (skip-unless nil)\n"))) + (substitute* "test/elpy-folding-fold-comments-test.el" + (("elpy-fold-at-point-should-fold-and-unfold-comments.*" all) + (string-append all " (skip-unless nil)\n"))) + #t)) ;; The default environment of the RPC uses Virtualenv to install ;; Python dependencies from PyPI. We don't want/need this in Guix. (add-before 'check 'do-not-use-virtualenv @@ -9456,48 +9584,26 @@ (define-public emacs-yasnippet (uri (git-reference (url "https://github.com/joaotavora/yasnippet.git") (commit version))) - (file-name (string-append name "-" version ".tar.gz")) + (file-name (git-file-name name version)) (sha256 - (base32 "0via9dzw8m5lzymg1h78xkwjssh39zr3g6ccyamlf1rjzjsyxknv")) - (modules '((guix build utils))) - (snippet - '(begin - ;; YASnippet expects a "snippets" subdirectory in the same - ;; directory as yasnippet.el, but we don't install it because it's - ;; a git submodule pointing to an external repository. Adjust - ;; `yas-snippet-dirs' to prevent warnings about a missing - ;; directory. - (substitute* "yasnippet.el" - (("^ +'yas-installed-snippets-dir\\)\\)\n") - "))\n")) - #t)))) + (base32 "0via9dzw8m5lzymg1h78xkwjssh39zr3g6ccyamlf1rjzjsyxknv")))) (build-system emacs-build-system) (arguments `(#:tests? #t #:test-command '("emacs" "--batch" "-l" "yasnippet-tests.el" "-f" "ert-run-tests-batch-and-exit") - ;; FIXME: one failing test. #:phases (modify-phases %standard-phases - (add-before 'check 'make-tests-writable + ;; Set HOME, otherwise test-rebindings fails. + (add-before 'check 'set-home (lambda _ - (make-file-writable "yasnippet-tests.el") - #t)) - (add-before 'check 'delete-rebinding-test - (lambda _ - (emacs-batch-edit-file "yasnippet-tests.el" - `(progn (goto-char (point-min)) - (re-search-forward "ert-deftest test-rebindings") - (beginning-of-line) - (kill-sexp) - (basic-save-buffer))) + (setenv "HOME" (getcwd)) #t))))) (home-page "https://github.com/joaotavora/yasnippet") (synopsis "Yet another snippet extension for Emacs") - (description - "YASnippet is a template system for Emacs. It allows you to type an -abbreviation and automatically expand it into function templates.") + (description "YASnippet is a template system for Emacs. It allows you to +type an abbreviation and automatically expand it into function templates.") (license license:gpl3+))) (define-public emacs-yasnippet-snippets @@ -10015,26 +10121,17 @@ (define-public emacs-use-package (define-public emacs-leaf (package (name "emacs-leaf") - (version "3.5.0") + (version "4.2.5") (source (origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/conao3/leaf.el.git") - (commit (string-append "v" version)))) - (file-name (git-file-name name version)) + (method url-fetch) + (uri (string-append "https://elpa.gnu.org/packages/" + "leaf-" version ".tar")) (sha256 - (base32 - "1rgd59146wad92yc64las0qgx67k2ifgsw1vwhp40xvkd7kb0r6d")))) + (base32 "0y78mp4c2gcwp7dc87wlx3r4hfmap14vvx8gkjc9nkf99qavpnkw")))) (build-system emacs-build-system) (home-page "https://github.com/conao3/leaf.el") - (arguments - `(#:tests? #t - #:test-command '("emacs" "--batch" - "-l" "leaf-tests.el" - "-f" "cort-test-run"))) - (synopsis - "Simplify your init.el configuration, extended use-package") + (synopsis "Simplify your init.el configuration, extended use-package") (description "This package provides macros that allows you to declaratively configure settings typical of an Elisp package with various keywords. The syntax is @@ -14524,7 +14621,7 @@ (define-public emacs-helm-mode-manager (define-public emacs-hy-mode (package (name "emacs-hy-mode") - (version "1.0.3") + (version "1.0.4") (source (origin (method git-fetch) @@ -14533,7 +14630,7 @@ (define-public emacs-hy-mode (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 - (base32 "1jxximiznz7fw9ys5k6plw85zrbzvxidql7py1fdi425fdp4058z")))) + (base32 "0gihxlmfminadaqdr8d2zccd7wwygl3m0gfzxsk5izi7f8hl4w7f")))) (build-system emacs-build-system) (propagated-inputs `(("emacs-dash" ,emacs-dash) @@ -14672,12 +14769,11 @@ (define-public emacs-org-ref notes.") (license license:gpl3+)))) -;; This project is unmaintained. Please use emacs-org-re-reveal instead. (define-public emacs-org-reveal - (let ((commit "9210413202a360a559a51e8275faa42be68cf44b")) + (let ((commit "84039bb499290926511b04749882ecb5eda45a0c")) (package (name "emacs-org-reveal") - (version (git-version "0.1" "3" commit)) + (version (git-version "20200607" "1" commit)) (source (origin (method git-fetch) (uri (git-reference @@ -14686,7 +14782,7 @@ (define-public emacs-org-reveal (file-name (git-file-name name version)) (sha256 (base32 - "1wlfk823d3vrn480m38j7ncaqm193lvh6y22b92fx4b3yhdbndza")))) + "1fx3xmnkpfljrdmy0dsyq79k93ky57gcqm1ad9qbzykk7qjvmmi8")))) (build-system emacs-build-system) (home-page "https://github.com/yjwen/org-reveal") (synopsis "Org and Reveal.js powered HTML presentation tool") @@ -16936,11 +17032,11 @@ (define-public emacs-github-review (license license:gpl3+)))) (define-public emacs-deadgrep - (let ((commit "3fc7ca1f58e190f0c80da455a0e40187e673020e") - (revision "2")) + (let ((commit "7e50e71c6ff4e17dded43e0836dae4e5ec020fcf") + (revision "1")) (package (name "emacs-deadgrep") - (version (git-version "0.8" revision commit)) + (version (git-version "0.10" revision commit)) (source (origin (method git-fetch) @@ -16950,9 +17046,9 @@ (define-public emacs-deadgrep (file-name (git-file-name name version)) (sha256 (base32 - "016gwqxd9aqzjw3hqv3vdf8cs6la8r65g6azg5rlmjqwfx3vsaha")))) + "1vjhrq02l8gvdn2haygzq7277hnhjchs9xrfpcnh76gqip200gx4")))) (build-system emacs-build-system) - (inputs + (propagated-inputs `(("emacs-dash" ,emacs-dash) ("emacs-s" ,emacs-s) ("emacs-spinner" ,emacs-spinner))) diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm index 59240f17c4..ab5b662915 100644 --- a/gnu/packages/emulators.scm +++ b/gnu/packages/emulators.scm @@ -44,7 +44,9 @@ (define-module (gnu packages emulators) #:use-module (gnu packages boost) #:use-module (gnu packages backup) #:use-module (gnu packages cdrom) + #:use-module (gnu packages check) #:use-module (gnu packages compression) + #:use-module (gnu packages cross-base) #:use-module (gnu packages curl) #:use-module (gnu packages elf) #:use-module (gnu packages fonts) @@ -88,7 +90,8 @@ (define-module (gnu packages emulators) #:use-module (gnu packages web) #:use-module (guix build-system cmake) #:use-module (guix build-system glib-or-gtk) - #:use-module (guix build-system gnu)) + #:use-module (guix build-system gnu) + #:use-module (guix build-system python)) (define-public desmume (package @@ -414,7 +417,7 @@ (define-public higan (define-public mgba (package (name "mgba") - (version "0.8.1") + (version "0.8.2") (source (origin (method git-fetch) @@ -423,7 +426,7 @@ (define-public mgba (commit version))) (file-name (git-file-name name version)) (sha256 - (base32 "1if82mfaak3696w5d5yshynpzywrxgvg3ifdfi2rwlpvq1gpd429")) + (base32 "0dlwhn3hrpaqnl5hjs53y8j2i16idxrg3gy688gcwrc9z1a6bkn2")) (modules '((guix build utils))) (snippet ;; Make sure we don't use the bundled software. @@ -1622,3 +1625,156 @@ (define-public gens-gs from various forks of Gens, and improved platform portability.") (supported-systems '("i686-linux" "x86_64-linux")) (license license:gpl2+))) + +(define-public bsnes + (package + (name "bsnes") + (version "115") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/bsnes-emu/bsnes") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0j054x38fwai61vj36sc04r3zkzay5acq2cgd9zqv5hs51s36g5b")))) + (build-system gnu-build-system) + (arguments + `(#:make-flags (list "-C" "bsnes" + (string-append "prefix=" (assoc-ref %outputs "out"))) + #:tests? #f ; No tests. + #:phases (modify-phases %standard-phases + (delete 'configure)))) + (native-inputs + `(("pkg-config" ,pkg-config))) + (inputs + `(("alsa-lib" ,alsa-lib) + ("ao" ,ao) + ("cairo" ,cairo) + ("eudev" ,eudev) + ("gtksourceview-2" ,gtksourceview-2) + ("libxrandr" ,libxrandr) + ("libxv" ,libxv) + ("openal" ,openal) + ("pulseaudio" ,pulseaudio) + ("sdl2" ,sdl2))) + (home-page "https://bsnes.dev/") + (synopsis "Emulator for the Super Nintendo / Super Famicom systems") + (description + "bsnes is a Super Nintendo / Super Famicom emulator that focuses on +performance, features, and ease of use.") + (license license:gpl3))) + +;; python-pwntools requires a -rc release of unicorn +(define-public unicorn + (let ((unless-x86 + (lambda (code) + (if (member (%current-system) '("x86_64-linux" "i686-linux")) + '() + code)))) + (package + (name "unicorn") + (version "1.0.2-rc4") + ;; NOTE: unicorn ships a bundled QEMU, but with a lot of custom modifications. + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/unicorn-engine/unicorn") + (commit version))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "17nyccgk7hpc4hab24yn57f1xnmr7kq4px98zbp2bkwcrxny8gwy")))) + (outputs '("out" "python")) + ;; The main library is not written in Python, but the build process has + ;; little in common with any defined build system, so we might as well + ;; build on top of python-build-system and make use of all + ;; the Python-specific phases that can be reused. + (build-system python-build-system) + (arguments + `(#:modules ((srfi srfi-26) + (guix build python-build-system) + (guix build utils)) + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'install-bindings-to-python-output + (lambda* (#:key outputs #:allow-other-keys) + ;; python-build-system will build the bindings and install them to + ;; the "out" output, so change the build-internal names of the + ;; outputs. + ;; + ;; TODO: remove this once #40469 lands, through the core-updates + ;; holding zone, on master. + (set-car! (assoc "out" outputs) "lib") + (set-car! (assoc "python" outputs) "out") + #t)) + (add-before 'build 'build-library + (lambda* (#:key inputs #:allow-other-keys) + (invoke "make" + "-j" (number->string (parallel-job-count)) + "UNICORN_STATIC=no" + "CC=gcc"))) + (add-after 'build-library 'install-library + (lambda* (#:key outputs #:allow-other-keys) + (invoke "make" "install" + "UNICORN_STATIC=no" + (string-append + "PREFIX=" + (assoc-ref outputs "lib"))))) + (add-before 'build 'prepare-bindings + (lambda* (#:key outputs #:allow-other-keys) + (chdir "bindings/python") + ;; Set this environment variable so that the Python bindings + ;; don't build their own copy of the shared object, but use + ;; a dummy value such that the bindings test suite uses the + ;; same mechanism for loading the library as any other user. + (setenv "LIBUNICORN_PATH" "1") + (substitute* "unicorn/unicorn.py" + (("_path_list = \\[.*") + (string-append + "_path_list = [\"" + (assoc-ref outputs "lib") + ;; eat the rest of the list + "/lib\"] + 0*["))) + #t)) + (add-before 'check 'check-library + (lambda* (#:key outputs #:allow-other-keys) + (for-each + (lambda (suite) + (with-directory-excursion + (string-append "../../tests/" suite) + (invoke "make" "test" "CC=gcc" + ,@(unless-x86 + '("AS=i686-unknown-linux-gnu-as" + "OBJCOPY=i686-unknown-linux-gnu-objcopy"))))) + '("unit" "regress")) + #t)) + (add-after 'install 'install-samples + (lambda* (#:key outputs #:allow-other-keys) + (let* ((python-samples (find-files "." "sample_.*")) + (c-samples (find-files "../../samples" ".*\\.c")) + (python-docdir + (string-append (assoc-ref outputs "out") + "/share/doc/unicorn/samples")) + (c-docdir + (string-append (assoc-ref outputs "lib") + "/share/doc/unicorn/samples"))) + (for-each (cut install-file <> c-docdir) c-samples) + (for-each (cut install-file <> python-docdir) python-samples) + #t)))))) + (native-inputs + ;; NOTE: cross-binutils needs to be wrapped with unless-x86, as otherwise + ;; the linker provided by the package will be used, circumventing the ld-wrapper. + `(,@(unless-x86 + `(("assembler-for-tests" ,(cross-binutils "i686-unknown-linux-gnu")))) + ("cmocka" ,cmocka) + ("hexdump-for-tests" ,util-linux))) + (home-page "http://www.unicorn-engine.org") + (synopsis "Unicorn CPU emulator framework") + (description + "Unicorn is a lightweight, multi-platform, multi-architecture CPU emulator +framework based on QEMU.") + (license license:gpl2+)))) diff --git a/gnu/packages/engineering.scm b/gnu/packages/engineering.scm index fe3c87edd5..f2d32e663f 100644 --- a/gnu/packages/engineering.scm +++ b/gnu/packages/engineering.scm @@ -18,6 +18,7 @@ ;;; Copyright © 2020 Vincent Legoll ;;; Copyright © 2020 Marius Bakke ;;; Copyright © 2020 Ekaitz Zarraga +;;; Copyright © 2020 B. Wilson ;;; ;;; This file is part of GNU Guix. ;;; @@ -54,6 +55,7 @@ (define-module (gnu packages engineering) #:use-module (gnu packages algebra) #:use-module (gnu packages autotools) #:use-module (gnu packages base) + #:use-module (gnu packages bdw-gc) #:use-module (gnu packages bison) #:use-module (gnu packages boost) #:use-module (gnu packages check) @@ -61,6 +63,7 @@ (define-module (gnu packages engineering) #:use-module (gnu packages commencement) #:use-module (gnu packages compression) #:use-module (gnu packages curl) + #:use-module (gnu packages dejagnu) #:use-module (gnu packages digest) #:use-module (gnu packages documentation) #:use-module (gnu packages flex) @@ -85,8 +88,10 @@ (define-module (gnu packages engineering) #:use-module (gnu packages imagemagick) #:use-module (gnu packages libevent) #:use-module (gnu packages linux) ;FIXME: for pcb + #:use-module (gnu packages lisp) #:use-module (gnu packages m4) #:use-module (gnu packages maths) + #:use-module (gnu packages man) #:use-module (gnu packages multiprecision) #:use-module (gnu packages mpi) #:use-module (gnu packages ncurses) @@ -103,6 +108,7 @@ (define-module (gnu packages engineering) #:use-module (gnu packages tls) #:use-module (gnu packages tex) #:use-module (gnu packages version-control) + #:use-module (gnu packages web) #:use-module (gnu packages wxwidgets) #:use-module (gnu packages xml) #:use-module (gnu packages openkinect) @@ -1027,15 +1033,14 @@ (define-public linsmith (define-public volk (package (name "volk") - (version "2.2.1") + (version "2.3.0") (source (origin (method url-fetch) (uri (string-append "https://www.libvolk.org/releases/volk-" version ".tar.gz")) (sha256 - (base32 - "1wz5nhmw6np8ka30pgy1qnima3rk2ksln4klfhrj7wah3fian0k9")))) + (base32 "1pjxz3piwy49njj5y2zk437prwkv9lfs5g48577jj3kcsg766vi3")))) (build-system cmake-build-system) (arguments `(#:phases @@ -1058,16 +1063,16 @@ (define-public volk (,(string-append python "/bin:"))))) #t))))) (inputs - `(("boost" ,boost))) - (native-inputs - `(("python" ,python-wrapper) + `(("boost" ,boost) + ("python" ,python-wrapper) ("python-mako" ,python-mako))) (home-page "https://www.libvolk.org/") (synopsis "Vector-Optimized Library of Kernels") (description - "@code{volk} contains procedures with machine-specific optimizations -for mathematical functions. It also provides an machine-independent -interface to select the best such procedures to use on a given system.") + "@acronym{VOLK, Vector-Optimized Library of Kernels} contains procedures +with machine-specific optimizations for mathematical functions. It also +provides a machine-independent interface to select the best such procedures to +use on a given system.") (license license:gpl3+))) (define-public minicom @@ -2624,7 +2629,7 @@ (define-public lib3ds (define-public meshlab (package (name "meshlab") - (version "2020.05") + (version "2020.06") (source (origin (method git-fetch) (uri (git-reference @@ -2633,7 +2638,7 @@ (define-public meshlab (recursive? #t))) (file-name (git-file-name name version)) (sha256 - (base32 "00sim20ka9vjwljixdj4cqd285j21mpaq05ari7nqq2w8yyglp5m")))) + (base32 "1cgx24wxh2ah5pff51rcrk6x8qcdjpkxcdak7s4cfzmxvjlshydd")))) (build-system cmake-build-system) (inputs `(("qtbase" ,qtbase) @@ -2677,3 +2682,65 @@ (define-public meshlab a program that can perform mesh processing tasks in batch mode, without a GUI.") (license license:gpl3+))) + +(define-public poke + ;; Upstream has yet to tag any releases. + (let ((commit "d33317a46e3b7c48130a471a48cbfea1abab70d8") + (revision "0")) + (package + (name "poke") + (version (git-version "0.0.0" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "git://git.savannah.gnu.org/poke.git") + (commit commit) + (recursive? #t))) + (sha256 + (base32 "1dd0r1x123bqi78lrsk58rvg9c9wka0kywdyzn7g3i4hkh54xb7d")) + (file-name (git-file-name name version)))) + (build-system gnu-build-system) + ;; The GUI, which we elide, requires tcl and tk. + (native-inputs `(("autoconf" ,autoconf) + ("automake" ,automake) + ;; Requires bison 3.6+ but we currently only have 3.5. + ;; Bison 3.6 will be available in the next core update. + ("bison-3.6" ,bison-3.6) + ("clisp" ,clisp) + ("dejagnu" ,dejagnu) + ("flex" ,flex) + ("gettext" ,gettext-minimal) + ("help2man" ,help2man) + ("libtool" ,libtool) + ("perl" ,perl) + ("pkg-config" ,pkg-config) + ("python-2" ,python-2) + ("python-3" ,python-3) + ("texinfo" ,texinfo))) + ;; FIXME: Enable NBD support by adding `libnbd' (currently unpackaged). + ;; FIXME: A "hyperlinks-capable" `libtexststyle' needed for the hserver. + (inputs `(("json-c" ,json-c) + ("libgc" ,libgc) + ("readline" ,readline))) + (arguments + ;; To build the GUI, add the `--enable-gui' configure flag. + ;; To enable the "hyperlink server", add the `--enable-hserver' flag. + `(#:configure-flags '("--enable-mi") + #:phases (modify-phases %standard-phases + ;; This is a non-trivial bootstrap that needs many of the + ;; native-inputs and thus must run after `patch-shebangs'. + (delete 'bootstrap) + (add-after 'patch-source-shebangs 'bootstrap + (lambda _ + (invoke "./bootstrap" "--no-git" + "--no-bootstrap-sync" + "--gnulib-srcdir=gnulib") + #t))))) + (home-page "http://jemarch.net/poke.html") + (synopsis "Interactive, extensible editor for binary data") + (description "GNU poke is an interactive, extensible editor for binary + data. Not limited to editing basic entities such as bits and bytes, it + provides a full-fledged procedural, interactive programming language designed + to describe data structures and to operate on them.") + (license license:gpl3+)))) diff --git a/gnu/packages/enlightenment.scm b/gnu/packages/enlightenment.scm index 40f1191416..02e1b0e220 100644 --- a/gnu/packages/enlightenment.scm +++ b/gnu/packages/enlightenment.scm @@ -70,7 +70,7 @@ (define-module (gnu packages enlightenment) (define-public efl (package (name "efl") - (version "1.24.2") + (version "1.24.3") (source (origin (method url-fetch) (uri (string-append @@ -78,7 +78,7 @@ (define-public efl version ".tar.xz")) (sha256 (base32 - "0w3srvigg4kfi7xq76c7y4hnq5yr2gxrrsvlyj1g2wc1igz1vyg1")))) + "0ajwc8lmay5ai7nsrp778g393h0p4h98p4c22gic2w61fgkcd5fy")))) (build-system meson-build-system) (native-inputs `(("check" ,check) @@ -152,11 +152,6 @@ (define-public efl ; (assoc-ref %build-inputs "hyphen") ; "/share/hyphen") "-Dnetwork-backend=connman" - ,@(match (%current-system) - ("armhf-linux" - '("-opengl=es-egl")) - (_ - '("-Dopengl=full"))) ;; for wayland "-Dwl=true" "-Ddrm=true") diff --git a/gnu/packages/fonts.scm b/gnu/packages/fonts.scm index 4ed0f9a037..5a913441e9 100644 --- a/gnu/packages/fonts.scm +++ b/gnu/packages/fonts.scm @@ -35,6 +35,7 @@ ;;; Copyright © 2020 Raghav Gururajan ;;; Copyright © 2020 Julien Lepiller ;;; Copyright © 2020 Zhu Zihao +;;; Copyright © 2020 Simen Endsjø ;;; ;;; This file is part of GNU Guix. ;;; @@ -63,6 +64,7 @@ (define-module (gnu packages fonts) #:use-module (guix build-system meson) #:use-module (guix build-system trivial) #:use-module (gnu packages base) + #:use-module (gnu packages bash) #:use-module (gnu packages compression) #:use-module (gnu packages fontutils) #:use-module (gnu packages gettext) @@ -1170,7 +1172,7 @@ (define-public font-iosevka (package (name "font-iosevka") ;; When updating, also update the hash of the Iosevka variant(s) below. - (version "2.3.3") + (version "3.1.1") (source (origin (method url-fetch/zipbomb) @@ -1178,7 +1180,7 @@ (define-public font-iosevka "/releases/download/v" version "/ttc-iosevka-" version ".zip")) (sha256 - (base32 "0jkv5rkg5hi0avhwyhcjiqzjslp6zjj77f09vxx2gj9l93byz731")))) + (base32 "1xnkfr11rdjnin2fvgkp9vxxigfbfdncr0wy6n78mlm3p1pqwfrm")))) (build-system font-build-system) (home-page "https://be5invis.github.io/Iosevka/") (synopsis "Coders' typeface, built from code") @@ -1201,7 +1203,7 @@ (define-public font-iosevka-slab "/releases/download/v" version "/ttc-iosevka-slab-" version ".zip")) (sha256 - (base32 "1rkmgi08kknc1fg54zpa6w92m3b3v7pc8cpwygz22kgd2h0mdrr8")))))) + (base32 "1n3lh015mvsdbyygpg3p3yqjpqdn1fdvjh1bhi2ggjanhifjsgzh")))))) (define-public font-iosevka-term (package @@ -1213,10 +1215,10 @@ (define-public font-iosevka-term (method url-fetch/zipbomb) (uri (string-append "https://github.com/be5invis/Iosevka" "/releases/download/v" version - "/02-iosevka-term-" version ".zip")) + "/ttf-iosevka-term-" version ".zip")) (sha256 (base32 - "1mxlb3qf64nykjd0x4gjfvib3k5kyv9ssv9iyzxxgk2z80bydz00")))) + "1mwzwpdppmcf03fgb5q6ksj0kk93wwaz2isk24wj1cm66r8psxk0")))) (arguments `(#:phases (modify-phases %standard-phases @@ -1235,10 +1237,10 @@ (define-public font-iosevka-term-slab (method url-fetch/zipbomb) (uri (string-append "https://github.com/be5invis/Iosevka" "/releases/download/v" version - "/06-iosevka-term-slab-" version ".zip")) + "/ttf-iosevka-term-slab-" version ".zip")) (sha256 (base32 - "1gc16hih157qy6vpa8f88psq0fnksiigi3msqazc75zsm3z4kzqj")))) + "0fiwxkf2gv38ia695wh8cvnb58sqs3fixjd33q1pp9cps94wzjpg")))) (arguments `(#:phases (modify-phases %standard-phases @@ -1247,10 +1249,52 @@ (define-public font-iosevka-term-slab (for-each make-file-writable (find-files "." ".*")) #t))))))) +(define-public font-iosevka-aile + (package + (inherit font-iosevka) + (name "font-iosevka-aile") + (version (package-version font-iosevka)) + (source + (origin + (method url-fetch/zipbomb) + (uri (string-append "https://github.com/be5invis/Iosevka" + "/releases/download/v" version + "/ttc-iosevka-aile-" version ".zip")) + (sha256 + (base32 "15kz8ahlynnb79s2d367a1fallc4l3j3957yj43qrymayagkh8sv")))))) + +(define-public font-iosevka-etoile + (package + (inherit font-iosevka) + (name "font-iosevka-etoile") + (version (package-version font-iosevka)) + (source + (origin + (method url-fetch/zipbomb) + (uri (string-append "https://github.com/be5invis/Iosevka" + "/releases/download/v" version + "/ttc-iosevka-etoile-" version ".zip")) + (sha256 + (base32 "0q9299mc595m251v9zj9b0zparl2qq8dwx090l0jkfpr2az9xr8q")))))) + +(define-public font-iosevka-sparkle + (package + (inherit font-iosevka) + (name "font-iosevka-sparkle") + (version (package-version font-iosevka)) + (source + (origin + (method url-fetch/zipbomb) + (uri (string-append "https://github.com/be5invis/Iosevka" + "/releases/download/v" version + "/ttc-iosevka-sparkle-" version ".zip")) + (sha256 + (base32 "0nhvcnvl11iqmsxsyrxlbnwy9z1vdhqv6p3g7fig9ra6n5j9k5kn")))))) + (define-public font-sarasa-gothic (package (name "font-sarasa-gothic") - (version "0.12.6") + (version "0.12.7") (source (origin (method url-fetch) @@ -1258,7 +1302,7 @@ (define-public font-sarasa-gothic "/releases/download/v" version "/sarasa-gothic-ttc-" version ".7z")) (sha256 - (base32 "1g6k9d5lajchbhsh3g12fk5cgilyy6yw09fals9vc1f9wsqvac86")))) + (base32 "09v65k00g8m953s6riz9xjzb2jgr6v5pdhcllalzzl7c1cn2xl3k")))) (build-system font-build-system) (arguments `(#:phases (modify-phases %standard-phases @@ -1795,3 +1839,61 @@ (define-public font-ipa-mj-mincho to write people's name, or for formal business situations where it is necessary to have a detailed and proper character style.") (license license:ipa))) + +(define-public font-fontna-yasashisa-antique + (package + (name "font-fontna-yasashisa-antique") + (version "0") + (source (origin + (method url-fetch) + (uri (string-append "http://flop.sakura.ne.jp/font/fontna-op/" + "YasashisaAntiqueFont.zip")) + (sha256 + (base32 + "1hl2qk3lzmh9h2vv5647vhlslkn3vqbq9rqgp4wzybajafx8c6nj")))) + (build-system font-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + ;; encoding issues cause many phases to fail + (add-after 'unpack 'fix-encoding + (lambda _ + ;; This directory, TrueType(サポート外), is not properly encoded, + ;; which makes rename-file fail. Instead, use shell globbing to + ;; select and rename the directory. + (invoke "sh" "-c" "mv TrueType* TrueType") + #t))))) + (native-inputs + `(("bash" ,bash-minimal) + ("coreutils" ,coreutils))) + (home-page "http://www.fontna.com/blog/1122/") + (synopsis "Mix font of gothic kanji and minchou kana") + (description "Antique is a font that is popular to write manga bubbles, +dictionary headwords and picture books. This font reduces the thickness +differences in characters compared to other antique fonts.") + (license (list license:ipa + (license:non-copyleft "mplus-TESTFLIGHT-057/LICENSE_E"))))) + +(define-public font-mplus-testflight + (package + (name "font-mplus-testflight") + (version "063a") + (source (origin + (method url-fetch) + (uri (string-append "https://osdn.net/frs/redir.php?" + "m=gigenet&f=mplus-fonts%2F62344%2Fmplus-TESTFLIGHT-" + version ".tar.xz")) + (file-name (string-append name "-" version ".tar.xz")) + (sha256 + (base32 + "0yfx9i77638yrgclnwwl4af79ri3vifi1nslwi6mgzva9cxrgss4")))) + (build-system font-build-system) + (home-page "https://mplus-fonts.osdn.jp/index.html") + (synopsis "Japanese font collection") + (description "M+ is a collection of Japanese fonts with all Latin glyph +sets, with Basic Latin, Latin-1 Supplement, Latin Extended-A, and IPA +Extensions. In addition to European letters used in many Western European +languages, it contains Japanese characters, including Kana glyphs and more +than 5,300 Kanji glyphs, as well major international phonetic symbols, +operators and special symbols.") + (license (license:non-copyleft "file:///LICENSE_E")))) diff --git a/gnu/packages/game-development.scm b/gnu/packages/game-development.scm index b899c2fe6c..9ef92a11f2 100644 --- a/gnu/packages/game-development.scm +++ b/gnu/packages/game-development.scm @@ -4,7 +4,7 @@ ;;; Copyright © 2015, 2018 Ludovic Courtès ;;; Copyright © 2015, 2018 Alex Kost ;;; Copyright © 2015, 2016, 2017 David Thompson -;;; Copyright © 2016, 2017, 2018, 2019 Efraim Flashner +;;; Copyright © 2016, 2017, 2018, 2019, 2020 Efraim Flashner ;;; Copyright © 2016, 2017 Kei Kebreau ;;; Copyright © 2016, 2018, 2019 Ricardo Wurmus ;;; Copyright © 2016, 2017, 2018 Julian Graham @@ -1495,7 +1495,7 @@ (define-public mygui-gl (define-public openmw (package (name "openmw") - (version "0.45.0") + (version "0.46.0") (source (origin (method url-fetch) @@ -1504,7 +1504,7 @@ (define-public openmw "openmw-" version ".tar.gz")) (sha256 (base32 - "0r0wgvv1faan8z8lbply8lks4hcnppifjrcz04l5zvq6yiqzjg5n")))) + "0n7x39kwhwmi6ly9hd7yc6dhlrmmdmx30ahc46kmlzzn2n7mm8q7")))) (build-system cmake-build-system) (arguments `(#:tests? #f ; No test target @@ -1743,20 +1743,25 @@ (define-public eureka (define-public guile-chickadee (package (name "guile-chickadee") - (version "0.4.0") + (version "0.5.0") (source (origin (method url-fetch) (uri (string-append "https://files.dthompson.us/chickadee/" "chickadee-" version ".tar.gz")) (sha256 (base32 - "1fdicsgls5cp0yffcm5vjmav67gv9bxhz1s3jvdvinspxb485x7l")))) + "0y3s0p4zyghys48sayfhcbmxmflh8hwawnx5an2jlb3x84yr0dsx")))) (build-system gnu-build-system) + (arguments + '(#:make-flags '("GUILE_AUTO_COMPILE=0"))) (propagated-inputs `(("guile-opengl" ,guile-opengl) ("guile-sdl2" ,guile-sdl2))) (inputs - `(("guile" ,guile-2.2))) + `(("guile" ,guile-2.2) + ("libvorbis" ,libvorbis) + ("mpg123" ,mpg123) + ("openal" ,openal))) (native-inputs `(("pkg-config" ,pkg-config) ("texinfo" ,texinfo))) @@ -1779,20 +1784,23 @@ (define-public guile3.0-chickadee (package (inherit guile-chickadee) (name "guile3.0-chickadee") - (version "0.4.0") + (version "0.5.0") (source (origin (method url-fetch) (uri (string-append "https://files.dthompson.us/chickadee/" "chickadee-" version ".tar.gz")) (sha256 (base32 - "1fdicsgls5cp0yffcm5vjmav67gv9bxhz1s3jvdvinspxb485x7l")))) + "0y3s0p4zyghys48sayfhcbmxmflh8hwawnx5an2jlb3x84yr0dsx")))) (build-system gnu-build-system) (propagated-inputs `(("guile-opengl" ,guile3.0-opengl) ("guile-sdl2" ,guile3.0-sdl2))) (inputs - `(("guile" ,guile-3.0))) + `(("guile" ,guile-3.0) + ("libvorbis" ,libvorbis) + ("mpg123" ,mpg123) + ("openal" ,openal))) (native-inputs `(("pkg-config" ,pkg-config) ("texinfo" ,texinfo))) diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm index 32d7d8d478..27cbf33fb9 100644 --- a/gnu/packages/games.scm +++ b/gnu/packages/games.scm @@ -146,6 +146,7 @@ (define-module (gnu packages games) #:use-module (gnu packages pcre) #:use-module (gnu packages perl) #:use-module (gnu packages perl-check) + #:use-module (gnu packages perl-compression) #:use-module (gnu packages pkg-config) #:use-module (gnu packages pulseaudio) #:use-module (gnu packages python) @@ -176,14 +177,15 @@ (define-module (gnu packages games) #:use-module (gnu packages messaging) #:use-module (gnu packages networking) #:use-module (guix build-system copy) + #:use-module (guix build-system cmake) #:use-module (guix build-system glib-or-gtk) #:use-module (guix build-system gnu) #:use-module (guix build-system go) #:use-module (guix build-system meson) - #:use-module (guix build-system scons) + #:use-module (guix build-system perl) #:use-module (guix build-system python) - #:use-module (guix build-system cmake) #:use-module (guix build-system qt) + #:use-module (guix build-system scons) #:use-module (guix build-system trivial) #:use-module ((srfi srfi-1) #:hide (zip)) #:use-module (srfi srfi-26)) @@ -515,7 +517,7 @@ (define-public cataclysm-dda (define-public corsix-th (package (name "corsix-th") - (version "0.63") + (version "0.64") (source (origin (method git-fetch) @@ -524,7 +526,7 @@ (define-public corsix-th (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 - (base32 "1rkyk8g55xny276s0hr5k8mq6f4nzz56d3k2mp09dzfymrqb8hgi")))) + (base32 "0chh9cv2kdc39sr0x8hclcyzd8dz2y6grgagqzkvr7j570wa5cqh")))) (build-system cmake-build-system) (arguments `(#:phases @@ -1011,6 +1013,45 @@ (define-public julius (license (list license:agpl3 license:zlib)))) ; ext/tinyfiledialogs +(define-public augustus + (package + (inherit julius) + (name "augustus") + (version (package-version julius)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/Keriew/augustus") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 "0ii0w0iwa9zv5bbqfcps5mxifd796m6fw4gvjf09pkm3yjgqc0ag")) + ;; Remove unused bundled libraries. + (modules '((guix build utils))) + (snippet + '(begin + (with-directory-excursion "ext" + (for-each delete-file-recursively '("dirent" "png" "SDL2" "zlib"))) + #t)))) + (arguments + ;; No tests. See https://github.com/Keriew/augustus/issues/82. + `(#:tests? #f)) + (home-page "https://github.com/Keriew/augustus") + (synopsis "Re-implementation of Caesar III game engine with gameplay changes") + (description + "Fork of Julius, an engine for the a city-building real-time strategy +game Caesar III. Gameplay enhancements include: + +@itemize +@item roadblocks; +@item market special orders; +@item global labour pool; +@item partial warehouse storage; +@item increased game limits; +@item zoom controls. +@end itemize\n"))) + (define-public meandmyshadow (package (name "meandmyshadow") @@ -1733,6 +1774,118 @@ (define-public roguebox-adventures license:gpl3+ license:silofl1.1)))) +(define-public seahorse-adventures + (package + (name "seahorse-adventures") + (version "1.2") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/dulsi/seahorse-adventures.git") + (commit (string-append "release-" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 "1rnvk06npaqcpjz5z6xcmssz61i32s422lydp49vrnf3j2g4yimd")) + (modules '((guix build utils) + (ice-9 ftw) + (srfi srfi-1))) + ;; Remove non-free (non-commercial) font. + (snippet + `(begin + (for-each delete-file (find-files "data/fonts" ".")) + #t)))) + (build-system python-build-system) + (arguments + `(#:tests? #f ;no test + #:phases + (modify-phases %standard-phases + (delete 'build) ;pure Python + (replace 'install ;no install script + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (bin (string-append out "/bin")) + (share (string-append out "/share")) + (applications (string-append share "/applications")) + (data (string-append share "/seahorse-adventures"))) + ;; Install data. + (for-each (lambda (f) + (chmod f #o555) + (install-file f data)) + '("leveledit.py" "run_game.py" "tileedit.py")) + (for-each (lambda (dir) + (let ((target (string-append data "/" dir))) + (mkdir-p target) + (copy-recursively dir target))) + '("data" "lib")) + ;; Create executable. + (mkdir-p bin) + (let ((executable (string-append bin "/seahorse-adventures"))) + (call-with-output-file executable + (lambda (p) + (format p + "#!~a~@ + export PYTHONPATH=~a:~a~@ + exec -a \"~a\" ~a \"$@\"~%" + (which "bash") data (getenv "PYTHONPATH") + (which "python3") + (string-append data "/run_game.py")))) + (chmod executable #o555)) + ;; Add desktop file. + (mkdir-p applications) + (make-desktop-entry-file + (string-append applications "/seahorse-adventures.desktop") + #:name "Seahorse Adventures" + #:comment + '((#f "Help Barbie the seahorse float on bubbles to the moon")) + #:exec ,name + #:icon ,name + #:categories '("Game" "ActionGame") + #:keywords '("game" "retro" "platform")) + ;; Add icons. + (for-each + (lambda (size) + (let ((dir (string-append share "/icons/hicolor/" + size "x" size "/apps"))) + (mkdir-p dir) + (copy-file + (string-append "icon" size ".png") + (string-append dir "/searhorse-adventures.png")))) + '("32" "64" "128"))) + #t)) + (add-after 'install 'unbundle-fonts + ;; Unbundle Bitstream Vera font and replace deleted one. + (lambda* (#:key outputs inputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (data (string-append out "/share/seahorse-adventures")) + (vera (string-append (assoc-ref inputs "font-bitstream-vera") + "/share/fonts/truetype/Vera.ttf"))) + (let ((themes-dir (string-append data "/data/themes/"))) + (for-each + (lambda (theme) + (let ((target (string-append themes-dir theme "/Vera.ttf"))) + (delete-file target) + (symlink vera target))) + '("default" "gray"))) + (symlink vera (string-append data "/data/fonts/04B_20__.TTF")) + (substitute* (string-append data "/lib/main.py") + (("f_scale = 0.35") "f_scale = 0.47"))) + #t))))) + (inputs + `(("font-bitstream-vera" ,font-bitstream-vera) + ("python-pygame" ,python-pygame))) + (home-page "http://www.imitationpickles.org/barbie/") + (synopsis "Help Barbie the seahorse float on bubbles to the moon") + (description + "Barbie Seahorse Adventures is a retro style platform arcade game. +You are Barbie the seahorse who travels through the jungle, up to the +volcano until you float on bubbles to the moon. On the way to your +final destination you will encounter various enemies, servants of the +evil overlord who has stolen the galaxy crystal. Avoid getting hit +and defeat them with your bubbles!") + ;; GPL2+ is for code, CC0 is for art. + (license (list license:gpl2+ license:cc0)))) + (define-public superstarfighter (package (name "superstarfighter") @@ -2970,7 +3123,7 @@ (define-public gnujump (define-public wesnoth (package (name "wesnoth") - (version "1.14.12") + (version "1.14.13") (source (origin (method url-fetch) (uri (string-append "mirror://sourceforge/wesnoth/wesnoth-" @@ -2979,7 +3132,7 @@ (define-public wesnoth "wesnoth-" version ".tar.bz2")) (sha256 (base32 - "027bc1363hdgahw7dvd22fvvqd132byxnljfbq6lvlr5ci01q8mk")))) + "1pmqj4rah0256qi9w394ksb9apid723i5f5agkg6x1lahb1ac91q")))) (build-system cmake-build-system) (arguments `(#:tests? #f)) ;no check target @@ -5225,7 +5378,7 @@ (define-public fillets-ng (define-public crawl (package (name "crawl") - (version "0.24.0") + (version "0.25.0") (source (origin (method url-fetch) @@ -5238,8 +5391,18 @@ (define-public crawl (string-append "http://crawl.develz.org/release/stone_soup-" version "-nodeps.tar.xz"))) (sha256 - (base32 "0kdq6s12myxfdg75ma9x3ys2nd0xwb3xm2ynlmhg4628va0pnixr")) - (patches (search-patches "crawl-upgrade-saves.patch")))) + (base32 "0rn1wjxdqw33caiwisfypm1j8cid3c9pz01ahicl17144zs29z3d")) + (patches (search-patches "crawl-upgrade-saves.patch")) + ;; The 0.25.0 -nodeps.tar.xz was built from an OSX machine; normally + ;; apparently it's built from a Debian machine before the Debian + ;; packages are made. These ._* files are binary and have the string + ;; "Mac OS X" in them... removing these seems to result in compilation + ;; again. + (modules '((guix build utils))) + (snippet + '(begin + (for-each delete-file (find-files "." "^\\._")) + #t)))) (build-system gnu-build-system) (inputs `(("lua51" ,lua-5.1) @@ -6842,6 +7005,104 @@ (define-public frotz-sdl (home-page "http://frotz.sourceforge.net") (license license:gpl2+)))) +(define-public frozen-bubble + ;; Last official release is very outdated (2010). Use latest commit (2017). + (let ((commit "d6a029110ad6ab9e4960052e175addc98807fb7e") + (revision "1")) + (package + (name "frozen-bubble") + (version (git-version "2.2.1" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/kthakore/frozen-bubble.git") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 "1rfrcym5lf4qac2qdklikb1ywijyxypq298azzxahy461dadl6cx")))) + (build-system perl-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + ;; Build process needs to create files in the "server" + ;; directory. + (add-after 'unpack 'fix-permissions + (lambda _ + (for-each make-file-writable + (find-files "server" "." #:directories? #t)))) + ;; By default, build stops at warnings. + (add-after 'unpack 'prevent-build-error + (lambda _ + (substitute* "inc/My/Builder.pm" + (("-Werror") "")) + #t)) + (add-after 'install 'install-desktop-file-and-icons + (lambda* (#:key outputs #:allow-other-keys) + (let* ((share (string-append (assoc-ref outputs "out") "/share")) + (hicolor (string-append share "/icons/hicolor"))) + ;; Create desktop entry. + (make-desktop-entry-file + (string-append share "/applications/" ,name ".desktop") + #:name "Frozen Bubble" + #:comment "Frozen Bubble arcade game" + #:exec ,name + #:icon ,name + #:categories '("Game" "ArcadeGame")) + ;; Add icons. + (with-directory-excursion "share/icons" + (for-each + (lambda (size) + (let* ((dim (string-append size "x" size)) + (dir (string-append hicolor "/" dim "/apps"))) + (mkdir-p dir) + (copy-file + (string-append "frozen-bubble-icon-" dim ".png") + (string-append dir "/frozen-bubble.png")))) + '("16" "32" "48" "64")))) + #t)) + (add-after 'install 'wrap-perl-libs + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out")) + (perl5lib (getenv "PERL5LIB"))) + (for-each (lambda (prog) + (wrap-program (string-append out "/" prog) + `("PERL5LIB" ":" prefix + (,(string-append perl5lib ":" out + "/lib/perl5/site_perl"))))) + (find-files "bin" "."))) + #t))))) + (native-inputs + `(("perl-alien-sdl" ,perl-alien-sdl) + ("perl-capture-tiny" ,perl-capture-tiny) + ("perl-locale-maketext-lexicon" ,perl-locale-maketext-lexicon) + ("perl-module-build" ,perl-module-build) + ("pkg-config" ,pkg-config))) + (inputs + `(("glib" ,glib) + ("perl-compress-bzip2" ,perl-compress-bzip2) + ("perl-file-sharedir" ,perl-file-sharedir) + ("perl-file-slurp" ,perl-file-slurp) + ("perl-file-which" ,perl-file-which) + ("perl-ipc-system-simple" ,perl-ipc-system-simple) + ("perl-sdl" ,perl-sdl) + ("sdl" ,(sdl-union (list sdl sdl-image sdl-mixer sdl-pango sdl-ttf))))) + (home-page "http://frozen-bubble.org/") + (synopsis "Puzzle with bubbles") + (description + "Frozen-Bubble is a clone of the popular Puzzle Bobble game, in which +you attempt to shoot bubbles into groups of the same color to cause them to +pop. + +Players compete as penguins and must use the arrow keys to aim a colored +bubble at groups of bubbles. The objective is to clear all the bubbles off +the screen before a bubble passes below a line at the bottom. + +It features 100 single-player levels, a two-player mode, music and striking +graphics. A level editor is also included to allow players to create and play +their own levels.") + (license license:gpl2)))) + (define-public libmanette (package (name "libmanette") @@ -10273,43 +10534,54 @@ (define-public kjumpingcube (define-public xmoto (package (name "xmoto") - (version "0.5.11") + (version "0.6.1") (source (origin - (method url-fetch) - (uri (string-append - "http://download.tuxfamily.org/xmoto/xmoto/" version "/" - "xmoto-" version "-src.tar.gz")) + (method git-fetch) + (uri (git-reference + (url "https://github.com/xmoto/xmoto.git") + (commit version))) + (file-name (git-file-name name version)) (sha256 - (base32 "1ci6r8zd0l7z28cy92ddf9dmqbdqwinz2y1cny34c61b57wsd155")) - (patches - (search-patches - "xmoto-remove-glext.patch" ;fixes licensing issue - "xmoto-reproducible.patch" - "xmoto-utf8.patch")) - ;; Unbundle ODE. - (modules '((guix build utils))) + (base32 "00f5ha79lfa2iiaz66wl0hl5dapa1l15qdr7m7knzi0ll7j6z66n")) + (modules '((guix build utils) + (ice-9 ftw) + (srfi srfi-1))) + ;; XXX: Remove some bundled libraries. Guix provides Chipmunk, but + ;; it appears to be incompatible with the (older) one bundled. (snippet `(begin - (delete-file-recursively "src/ode") + (let ((keep '("chipmunk" "glad" "md5sum"))) + (with-directory-excursion "vendor" + (for-each delete-file-recursively + (lset-difference string=? + (scandir ".") + (cons* "." ".." keep)))) + (substitute* "src/CMakeLists.txt" + (("add_subdirectory\\(.*?/vendor/(.+?)\".*" line library) + (if (member library keep) line "")))) #t)))) - (build-system gnu-build-system) + (build-system cmake-build-system) (arguments - ;; XXX: First flag prevents a build error with GCC7+. The second - ;; flag works around missing text in game. Both are fixed - ;; upstream. Remove once xmoto 0.5.12+ is released. - `(#:make-flags '("CXXFLAGS=-fpermissive -D_GLIBCXX_USE_CXX11_ABI=0") + `(#:tests? #f ;no test #:phases (modify-phases %standard-phases - (add-after 'install 'install-desktop-file + (add-after 'unpack 'fix-hard-coded-directory (lambda* (#:key outputs #:allow-other-keys) - (let* ((out (assoc-ref outputs "out")) - (apps (string-append out "/share/applications")) - (pixmaps (string-append out "/share/pixmaps"))) - (install-file "extra/xmoto.desktop" apps) - (install-file "extra/xmoto.xpm" pixmaps) - #t))) - (add-after 'install-desktop-file 'install-fonts + (substitute* "src/common/VFileIO.cpp" + (("/usr/share") + (string-append (assoc-ref outputs "out") "/share"))) + #t)) + (add-before 'build 'set-SDL + ;; Set correct environment for SDL. + (lambda* (#:key inputs #:allow-other-keys) + (setenv "CPATH" + (string-append + (assoc-ref inputs "sdl") "/include/SDL:" + (or (getenv "CPATH") ""))) + #t)) + (add-after 'install 'unbundle-fonts + ;; Unbundle DejaVuSans TTF files. (lambda* (#:key outputs inputs #:allow-other-keys) (let ((font-dir (string-append (assoc-ref inputs "font-dejavu") "/share/fonts/truetype/")) @@ -10321,38 +10593,34 @@ (define-public xmoto (delete-file target) (symlink font target))) '("DejaVuSans.ttf" "DejaVuSansMono.ttf")) - #t))) - (add-after 'install-fonts 'install-man-page - (lambda* (#:key outputs #:allow-other-keys) - (install-file "xmoto.6" - (string-append (assoc-ref outputs "out") - "/share/man/man6")) - #t))))) + #t)))))) (native-inputs - `(("gettext" ,gettext-minimal))) + `(("gettext" ,gettext-minimal) + ("pkg-config" ,pkg-config))) (inputs - `(("curl" ,curl) + `(("bzip2" ,bzip2) + ("curl" ,curl) ("font-dejavu" ,font-dejavu) ("glu" ,glu) ("libjpeg" ,libjpeg-turbo) ("libpng" ,libpng) ("libxdg-basedir" ,libxdg-basedir) ("libxml2" ,libxml2) - ("lua" ,lua-5.2) + ("lua" ,lua-5.1) ("ode" ,ode) ("sdl" ,(sdl-union (list sdl sdl-mixer sdl-net sdl-ttf))) ("sqlite" ,sqlite) ("zlib" ,zlib))) (home-page "https://xmoto.tuxfamily.org/") (synopsis "2D motocross platform game") - (description "X-Moto is a challenging 2D motocross platform game, where -physics play an all important role in the gameplay. You need to control your -bike to its limit, if you want to have a chance finishing the more difficult -challenges.") + (description + "X-Moto is a challenging 2D motocross platform game, where +physics play an all important role in the gameplay. You need to +control your bike to its limit, if you want to have a chance finishing +the more difficult challenges.") (license (list license:gpl2+ ;whole project - license:bsd-4 ;src/bzip - license:bsd-3 ;src/md5sum - license:lgpl2.1+ ;src/iqsort.h + license:bsd-3 ;vendor/md5sum + license:lgpl2.1+ license:expat)))) (define-public eboard diff --git a/gnu/packages/gnome-xyz.scm b/gnu/packages/gnome-xyz.scm index 21838ff0cd..53be103495 100644 --- a/gnu/packages/gnome-xyz.scm +++ b/gnu/packages/gnome-xyz.scm @@ -419,7 +419,7 @@ (define-public gnome-shell-extension-hide-app-icon (define-public gnome-shell-extension-dash-to-panel (package (name "gnome-shell-extension-dash-to-panel") - (version "26") + (version "37") (source (origin (method git-fetch) (uri (git-reference @@ -427,7 +427,7 @@ (define-public gnome-shell-extension-dash-to-panel (commit (string-append "v" version)))) (sha256 (base32 - "1phfx2pblygpcvsppsqqqflm7qnz46mqkw29hj0nv2dn69hf4xbc")) + "0c8p8cmwjh6rpj7jwj1lccpdv5l0bazwywg8hpwgnqy9f4rxmrz3")) (file-name (git-file-name name version)))) (build-system gnu-build-system) (arguments @@ -555,8 +555,8 @@ (define-public numix-theme (define-public papirus-icon-theme (let ((version "0.0.0") ;; The package does not use semver - (revision "1") - (tag "20200430")) + (revision "2") + (tag "20200602")) (package (name "papirus-icon-theme") (version (git-version version revision tag)) @@ -568,7 +568,7 @@ (define-public papirus-icon-theme (commit tag))) (sha256 (base32 - "19dfiifc7cjwy0nb1hgzryzaijszsyix303xsgk5xbmhpwrv92hq")) + "0yv19kl8jr2jmh9018b1qmnq68alw84vrmb35jm462qd3qzzdgah")) (file-name (git-file-name name version)))) (build-system gnu-build-system) (arguments diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm index 098abc8f49..e71af00bf8 100644 --- a/gnu/packages/gnome.scm +++ b/gnu/packages/gnome.scm @@ -43,7 +43,7 @@ ;;; Copyright © 2019, 2020 Martin Becze ;;; Copyright © 2019 David Wilson ;;; Copyright © 2019, 2020 Raghav Gururajan -;;; Copyright © 2019 Jonathan Brielmaier +;;; Copyright © 2019, 2020 Jonathan Brielmaier ;;; Copyright © 2019, 2020 Leo Prikler ;;; Copyright © 2020 Oleg Pykhalov ;;; Copyright © 2020 Pierre Neidhardt @@ -2174,8 +2174,7 @@ (define-public glade3 "023gx8rj51njn8fsb6ma5kz1irjpxi4js0n8rwy22inc4ysldd8r")))) (build-system glib-or-gtk-build-system) (arguments - `(#:tests? #f ; needs X, GL, and software rendering - #:phases + `(#:phases (modify-phases %standard-phases (add-before 'configure 'fix-docbook (lambda* (#:key inputs #:allow-other-keys) @@ -2185,18 +2184,27 @@ (define-public glade3 "/xml/xsl/docbook-xsl-" ,(package-version docbook-xsl) "/manpages/docbook.xsl"))) + #t)) + (add-before 'check 'pre-check + (lambda _ + (setenv "HOME" "/tmp") + ;; Tests require a running X server. + (system "Xvfb :1 &") + (setenv "DISPLAY" ":1") #t))))) (inputs `(("gtk+" ,gtk+) ("libxml2" ,libxml2))) (native-inputs - `(("intltool" ,intltool) + `(("hicolor-icon-theme" ,hicolor-icon-theme) + ("intltool" ,intltool) ("itstool" ,itstool) ("libxslt" ,libxslt) ;for xsltproc ("docbook-xml" ,docbook-xml-4.2) ("docbook-xsl" ,docbook-xsl) ("python" ,python-2) - ("pkg-config" ,pkg-config))) + ("pkg-config" ,pkg-config) + ("xorg-server" ,xorg-server-for-tests))) (home-page "https://glade.gnome.org") (synopsis "GTK+ rapid application development tool") (description "Glade is a rapid application development (RAD) tool to @@ -10424,3 +10432,37 @@ (define-public jsonrpc-glib both peers support it. You might want that when communicating on a single host to avoid parser overhead and memory-allocator fragmentation.") (license license:lgpl2.1+))) + +(define-public feedbackd + (package + (name "feedbackd") + (version "0.0.0+git20200527") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://source.puri.sm/Librem5/feedbackd.git") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1wbkzxnqjydfgjvp7vz4ghczcz740zcb1yn90cb6gb5md4n6qx2y")))) + (build-system meson-build-system) + (native-inputs + `(("glib:bin" ,glib "bin") + ("gobject-introspection" ,gobject-introspection) + ("pkg-config" ,pkg-config) + ("vala" ,vala))) + (inputs + `(("dbus" ,dbus) + ("gsound" ,gsound) + ("json-glib" ,json-glib) + ("libgudev" ,libgudev))) + (propagated-inputs + `(("glib" ,glib))) ; in Requires of libfeedback-0.0.pc + (synopsis "Haptic/visual/audio feedback via DBus") + (description "Feedbackd provides a DBus daemon to act on events to provide +haptic, visual and audio feedback. It offers the libfeedbackd library and +GObject introspection bindings.") + (home-page "https://source.puri.sm/Librem5/feedbackd") + (license (list license:lgpl2.1+ ; libfeedbackd + license:lgpl3+)))) ; the rest diff --git a/gnu/packages/gnunet.scm b/gnu/packages/gnunet.scm index 1b7ea9246c..f2ab3a1c27 100644 --- a/gnu/packages/gnunet.scm +++ b/gnu/packages/gnunet.scm @@ -1,11 +1,11 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2013, 2014, 2015 Andreas Enge ;;; Copyright © 2014 Sree Harsha Totakura -;;; Copyright © 2015, 2017, 2018, 2019 Ludovic Courtès +;;; Copyright © 2015, 2017, 2018, 2019, 2020 Ludovic Courtès ;;; Copyright © 2015, 2017, 2019, 2020 Efraim Flashner ;;; Copyright © 2016 Ricardo Wurmus ;;; Copyright © 2016 Mark H Weaver -;;; Copyright © 2016, 2017, 2018, 2019 Nikita +;;; Copyright © 2016, 2017, 2018, 2019, 2020 Nikita ;;; Copyright © 2016, 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice ;;; Copyright © 2018 Alex Vong ;;; Copyright © 2019 Brett Gilio @@ -180,13 +180,13 @@ (define-public libmicrohttpd (define-public gnurl (package (name "gnurl") - (version "7.69.1") + (version "7.70.0") (source (origin (method url-fetch) (uri (string-append "mirror://gnu/gnunet/gnurl-" version ".tar.gz")) (sha256 (base32 - "0x8m26y3klndis6a28j8i0b7ab04d38q3rmlvgaqa65bjhlfdrp0")))) + "0px9la8v4bj1dzxb95fx3yxk0rcjqjrxpj733ga27cza45wwzkqa")))) (build-system gnu-build-system) (outputs '("out" "doc")) ; 1.8 MiB of man3 pages @@ -245,7 +245,7 @@ (define-public gnurl "See COPYING in the distribution.")) (properties '((ftp-server . "ftp.gnu.org") (ftp-directory . "/gnunet"))) - (home-page "https://gnunet.org/gnurl"))) + (home-page "https://gnunet.org/en/gnurl.html"))) (define-public gnunet (package diff --git a/gnu/packages/gnuzilla.scm b/gnu/packages/gnuzilla.scm index 0a8edcb1e4..3bffe12577 100644 --- a/gnu/packages/gnuzilla.scm +++ b/gnu/packages/gnuzilla.scm @@ -648,6 +648,12 @@ (define icecat-source "-p1" "--input" #+makeicecat-patch) (invoke "patch" "--force" "--no-backup-if-mismatch" "-p1" "--input" #+gnuzilla-fixes-patch) + + ;; Remove the bundled tortm-browser-button extension, + ;; which doesn't seem to be working properly. + (delete-file-recursively + "data/extensions/tortm-browser-button@jeremybenthum") + (patch-shebang "makeicecat") (substitute* "makeicecat" (("^FFMAJOR=(.*)" all ffmajor) diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm index a631ad4285..a3b1c6c643 100644 --- a/gnu/packages/golang.scm +++ b/gnu/packages/golang.scm @@ -811,6 +811,33 @@ (define-public go-golang-org-x-time (home-page "https://godoc.org/golang.org/x/time/rate") (license license:bsd-3)))) +(define-public go-golang-org-x-oauth2 + (let ((commit "0f29369cfe4552d0e4bcddc57cc75f4d7e672a33") + (revision "1")) + (package + (name "go-golang-org-x-oauth2") + (version (git-version "0.0.0" revision commit)) + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://go.googlesource.com/oauth2") + (commit commit))) + (file-name (string-append "go.googlesource.com-oauth2-" + version "-checkout")) + (sha256 + (base32 + "06jwpvx0x2gjn2y959drbcir5kd7vg87k0r1216abk6rrdzzrzi2")))) + (build-system go-build-system) + (arguments + `(#:import-path "golang.org/x/oauth2")) + (propagated-inputs + `(("go-golang-org-x-net" ,go-golang-org-x-net))) + (home-page "https://go.googlesource.com/oauth2") + (synopsis "Client implementation of the OAuth 2.0 spec") + (description "This package contains a client implementation for OAuth 2.0 + spec in Go.") + (license license:bsd-3)))) + (define-public go-github-com-burntsushi-toml (package (name "go-github-com-burntsushi-toml") @@ -1813,6 +1840,31 @@ (define-public go-github-com-mattn-go-colorable makes it possible to handle ANSI color escapes on Windows.") (license license:expat)))) +(define-public go-github-com-mattn-go-pointer + (let ((commit "a0a44394634f41e4992b173b24f14fecd3318a67") + (revision "1")) + (package + (name "go-github-com-mattn-go-pointer") + (version (git-version "0.0.0" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/mattn/go-pointer") + (commit commit))) + (sha256 + (base32 + "09w7hcyc0zz2g23vld6jbcmq4ar27xakp1ldjvh549i5izf2anhz")) + (file-name (git-file-name name version)))) + (build-system go-build-system) + (arguments + '(#:import-path "github.com/mattn/go-pointer")) + (home-page "https://github.com/mattn/go-pointer") + (synopsis "Utility for cgo") + (description + "This package allows for a cgo argument to be passed a Go pointer.") + (license license:expat)))) + (define-public go-github-com-mgutz-ansi (let ((commit "9520e82c474b0a04dd04f8a40959027271bab992") (revision "0")) diff --git a/gnu/packages/graphics.scm b/gnu/packages/graphics.scm index 44d78c036b..0d768b8a0e 100644 --- a/gnu/packages/graphics.scm +++ b/gnu/packages/graphics.scm @@ -405,9 +405,11 @@ (define-public lib2geom (base32 "195rs0kdbs8w62irha1nwy83bccz04wglmk578qrj1mky7fc4rjv")) (patches - ;; Patch submitted to upstream (see: - ;; https://gitlab.com/inkscape/lib2geom/merge_requests/17). - (search-patches "lib2geom-enable-assertions.patch")) + ;; Patches submitted to upstream (see: + ;; https://gitlab.com/inkscape/lib2geom/merge_requests/17, + ;; https://gitlab.com/inkscape/lib2geom/-/merge_requests/32). + (search-patches "lib2geom-enable-assertions.patch" + "lib2geom-fix-tests.patch")) (modules '((guix build utils))) (snippet '(begin diff --git a/gnu/packages/guile-xyz.scm b/gnu/packages/guile-xyz.scm index 0942e7cf74..8386f9522e 100644 --- a/gnu/packages/guile-xyz.scm +++ b/gnu/packages/guile-xyz.scm @@ -1396,7 +1396,7 @@ (define-public guile-dbd-postgresql (define-public guile-config (package (name "guile-config") - (version "0.4.1") + (version "0.4.2") (source (origin (method git-fetch) @@ -1405,7 +1405,7 @@ (define-public guile-config (commit version))) (file-name (git-file-name name version)) (sha256 (base32 - "1c59ch96d5p4c7si8qp55fdc15375klf2hyh29y3ap8ahqx9pxqj")))) + "09028ylbddjdp3d67zdjz3pnsjqz6zs2bfck5rr3dfaa0qjap40n")))) (build-system gnu-build-system) (native-inputs `(("autoconf" ,autoconf) diff --git a/gnu/packages/guile.scm b/gnu/packages/guile.scm index 34d348c344..a8f5019687 100644 --- a/gnu/packages/guile.scm +++ b/gnu/packages/guile.scm @@ -308,6 +308,19 @@ (define-public guile-3.0 (files '("lib/guile/3.0/site-ccache" "share/guile/site/3.0"))))))) +(define-public guile-3.0.3 + ;; TODO: Make this 'guile-3.0' on the next rebuild cycle. + (package + (inherit guile-3.0) + (version "3.0.3") + (source (origin + (inherit (package-source guile-3.0)) + (uri (string-append "mirror://gnu/guile/guile-" + version ".tar.xz")) + (sha256 + (base32 + "0fz6fgx7ran6nn0l978jmpckjc9knk4g3bddr75n0daqqmhjs95k")))))) + (define-public guile-next (deprecated-package "guile-next" guile-3.0)) diff --git a/gnu/packages/haskell-apps.scm b/gnu/packages/haskell-apps.scm index 3089c17145..f8bee424c3 100644 --- a/gnu/packages/haskell-apps.scm +++ b/gnu/packages/haskell-apps.scm @@ -341,14 +341,14 @@ (define-public ghcid (define-public git-annex (package (name "git-annex") - (version "8.20200522") + (version "8.20200617") (source (origin (method url-fetch) (uri (string-append "https://hackage.haskell.org/package/" "git-annex/git-annex-" version ".tar.gz")) (sha256 - (base32 "1v71k5k9mcj1nq4pb8apx99rgw2rmckr6yshhvjl1dr6j70d67x8")))) + (base32 "1vgpqbscvxm03ibxy6cjnp9vd1wpsr3gkajp4z3m9nnkmjz5r4q4")))) (build-system haskell-build-system) (arguments `(#:configure-flags @@ -762,6 +762,58 @@ (define-public shellcheck @end enumerate") (license license:gpl3+))) +(define-public shelltestrunner + (package + (name "shelltestrunner") + (version "1.9") + (source (origin + (method url-fetch) + (uri (string-append "mirror://hackage/package/shelltestrunner-" + version "/shelltestrunner-" version ".tar.gz")) + (sha256 + (base32 + "1a5kzqbwg6990249ypw0cx6cqj6663as1kbj8nzblcky8j6kbi6b")))) + (build-system haskell-build-system) + (arguments + '(#:phases + (modify-phases %standard-phases + (delete 'check) + (add-after 'install 'check + (lambda* (#:key outputs tests? parallel-tests? #:allow-other-keys) + ;; This test is inspired by the Makefile in the upstream + ;; repository, which is missing in the Hackage release tarball + ;; along with some of the tests. The Makefile would not work + ;; anyway as it ties into the 'stack' build tool. + (let* ((out (assoc-ref outputs "out")) + (shelltest (string-append out "/bin/shelltest")) + (numjobs (if parallel-tests? + (number->string (parallel-job-count)) + "1"))) + (if tests? + (invoke shelltest (string-append "-j" numjobs) + "tests/examples") + (format #t "test suite not run~%")) + #t)))))) + (inputs + `(("ghc-diff" ,ghc-diff) + ("ghc-cmdargs" ,ghc-cmdargs) + ("ghc-filemanip" ,ghc-filemanip) + ("ghc-hunit" ,ghc-hunit) + ("ghc-pretty-show" ,ghc-pretty-show) + ("ghc-regex-tdfa" ,ghc-regex-tdfa) + ("ghc-safe" ,ghc-safe) + ("ghc-utf8-string" ,ghc-utf8-string) + ("ghc-test-framework" ,ghc-test-framework) + ("ghc-test-framework-hunit" ,ghc-test-framework-hunit))) + (home-page "https://github.com/simonmichael/shelltestrunner") + (synopsis "Test CLI programs") + (description + "shelltestrunner (executable: @command{shelltest}) is a command-line tool +for testing command-line programs, or general shell commands. It reads simple +test specifications defining a command to run, some input, and the expected +output, stderr, and exit status.") + (license license:gpl3+))) + (define-public stylish-haskell (package (name "stylish-haskell") diff --git a/gnu/packages/haskell-web.scm b/gnu/packages/haskell-web.scm index 4689025432..0c79ece194 100644 --- a/gnu/packages/haskell-web.scm +++ b/gnu/packages/haskell-web.scm @@ -8,6 +8,7 @@ ;;; Copyright © 2019 Robert Vollmert ;;; Copyright © 2019 John Soo ;;; Copyright © 2020 Alexandru-Sergiu Marton +;;; Copyright © 2020 Marius Bakke ;;; ;;; This file is part of GNU Guix. ;;; @@ -93,6 +94,27 @@ (define-public ghc-cookie (description "HTTP cookie parsing and rendering library for Haskell.") (license license:bsd-3))) +(define-public ghc-curl + (package + (name "ghc-curl") + (version "1.3.8") + (source (origin + (method url-fetch) + (uri (string-append "mirror://hackage/package/curl/curl-" + version ".tar.gz")) + (sha256 + (base32 + "0vj4hpaa30jz7c702xpsfvqaqdxz28zslsqnsfx6bf6dpwvck1wh")))) + (build-system haskell-build-system) + (inputs + `(("curl" ,curl))) + (home-page "https://hackage.haskell.org/package/curl") + (synopsis "Haskell bindings for libcurl") + (description + "@code{libcurl} is a versatile client-side URL transfer library. +This package provides a Haskell binding to libcurl.") + (license license:bsd-3))) + (define-public ghc-httpd-shed (package (name "ghc-httpd-shed") diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm index 815af82500..0508916ead 100644 --- a/gnu/packages/haskell-xyz.scm +++ b/gnu/packages/haskell-xyz.scm @@ -9812,6 +9812,29 @@ (define-public ghc-protolude replace the standard one provided by GHC.") (license license:expat))) +(define-public ghc-psqueue + (package + (name "ghc-psqueue") + (version "1.1.0.1") + (source (origin + (method url-fetch) + (uri (string-append "mirror://hackage/package/PSQueue-" + version "/PSQueue-" version ".tar.gz")) + (sha256 + (base32 + "1cik7sw10sacsijmfhghzy54gm1qcyxw14shlp86lx8z89kcnkza")))) + (build-system haskell-build-system) + (home-page "https://hackage.haskell.org/package/PSQueue") + (synopsis "Priority search queue") + (description + "A @dfn{priority search queue} efficiently supports the operations of +both a search tree and a priority queue. A @code{Binding} is a product of +a key and a priority. Bindings can be inserted, deleted, modified and queried +in logarithmic time, and the binding with the least priority can be retrieved +in constant time. A queue can be built from a list of bindings, sorted by +keys, in linear time.") + (license license:bsd-3))) + (define-public ghc-psqueues (package (name "ghc-psqueues") @@ -10249,6 +10272,29 @@ (define-public ghc-regex-compat-tdfa this problem.") (license license:bsd-3))) +(define-public ghc-regex-pcre + (package + (name "ghc-regex-pcre") + (version "0.94.4") + (source (origin + (method url-fetch) + (uri (string-append "https://hackage.haskell.org/package/" + "regex-pcre/regex-pcre-" version ".tar.gz")) + (sha256 + (base32 + "1h16w994g9s62iwkdqa7bar2n9cfixmkzz2rm8svm960qr57valf")))) + (build-system haskell-build-system) + (inputs + `(("ghc-regex-base" ,ghc-regex-base) + ("pcre" ,pcre))) + (home-page "https://hackage.haskell.org/package/regex-pcre") + (synopsis "Enhancement of the builtin Text.Regex library") + (description + "This package is an enhancement of the @code{Text.Regex} library. +It wraps the @code{PCRE} C library providing Perl-compatible regular +expressions.") + (license license:bsd-3))) + (define-public ghc-regex-pcre-builtin (package (name "ghc-regex-pcre-builtin") diff --git a/gnu/packages/inkscape.scm b/gnu/packages/inkscape.scm index b0707d6eff..85b0ba9fcf 100644 --- a/gnu/packages/inkscape.scm +++ b/gnu/packages/inkscape.scm @@ -213,6 +213,11 @@ (define-public inkscape-1.0 (arguments `(#:tests? #t #:test-target "check" ;otherwise some test binaries are missing + #:imported-modules (,@%cmake-build-system-modules + (guix build glib-or-gtk-build-system)) + #:modules ((guix build cmake-build-system) + ((guix build glib-or-gtk-build-system) #:prefix glib-or-gtk:) + (guix build utils)) #:phases (modify-phases %standard-phases (add-after 'unpack 'patch-icon-cache-generator @@ -240,7 +245,11 @@ (define-public inkscape-1.0 ;; as the "share/inkscape/ui/units.xml" file. (delete 'check) (add-after 'install 'check - (assoc-ref %standard-phases 'check))))) + (assoc-ref %standard-phases 'check)) + (add-after 'install 'glib-or-gtk-compile-schemas + (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-compile-schemas)) + (add-after 'glib-or-gtk-compile-schemas 'glib-or-gtk-wrap + (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap))))) (inputs `(("aspell" ,aspell) ("autotrace" ,autotrace) diff --git a/gnu/packages/ipfs.scm b/gnu/packages/ipfs.scm index 7ef7108c1f..15f174f8b6 100644 --- a/gnu/packages/ipfs.scm +++ b/gnu/packages/ipfs.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2018 Pierre Neidhardt ;;; Copyright © 2019, 2020 Tobias Geerinckx-Rice +;;; Copyright © 2019, 2020 Martin Becze ;;; ;;; This file is part of GNU Guix. ;;; @@ -212,7 +213,7 @@ (define-public gx-go (define-public go-ipfs (package (name "go-ipfs") - (version "0.4.23") + (version "0.5.1") (source (origin (method url-fetch/tarbomb) @@ -220,7 +221,7 @@ (define-public go-ipfs "https://dist.ipfs.io/go-ipfs/v" version "/go-ipfs-source.tar.gz")) (sha256 - (base32 "191ir4h6c76xcnbwx9fj8j2lzzqyp10inmqd8sa393b5y0jmhi5a")) + (base32 "0lpilycjbc1g9adp4d5kryfprixj18hg3235fnivakmv7fy2akkm")) (file-name (string-append name "-" version "-source")))) (build-system go-build-system) (arguments diff --git a/gnu/packages/irc.scm b/gnu/packages/irc.scm index 548a3ca049..81e4205acf 100644 --- a/gnu/packages/irc.scm +++ b/gnu/packages/irc.scm @@ -48,6 +48,7 @@ (define-module (gnu packages irc) #:use-module (gnu packages gnupg) #:use-module (gnu packages guile) #:use-module (gnu packages lua) + #:use-module (gnu packages lxqt) #:use-module (gnu packages ncurses) #:use-module (gnu packages kde) #:use-module (gnu packages kde-frameworks) @@ -77,6 +78,7 @@ (define-public quassel (sha256 (base32 "0mg8jydc70vlylppzich26q4s40kr78r3ysfyjwisfvlg2byxvs8")) + (patches (search-patches "quassel-qt-514-compat.patch")) (modules '((guix build utils))) ;; We don't want to install the bundled scripts. (snippet @@ -111,6 +113,7 @@ (define-public quassel ("qttools" ,qttools))) (inputs `(("inxi" ,inxi-minimal) + ("libdbusmenu-qt" ,libdbusmenu-qt) ("qca" ,qca) ("qtbase" ,qtbase) ("qtmultimedia" ,qtmultimedia) diff --git a/gnu/packages/kde-multimedia.scm b/gnu/packages/kde-multimedia.scm index 938251a532..dd1355010e 100644 --- a/gnu/packages/kde-multimedia.scm +++ b/gnu/packages/kde-multimedia.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2017, 2019 Hartmut Goebel +;;; Copyright © 2020 Timotej Lazar ;;; ;;; This file is part of GNU Guix. ;;; @@ -287,21 +288,48 @@ (define-public juk (define-public k3b (package (name "k3b") - (version "20.04.1") + (version "20.04.2") (source (origin (method url-fetch) (uri (string-append "mirror://kde/stable/release-service/" version "/src/k3b-" version ".tar.xz")) (sha256 - (base32 "0r01ninrrmqk7pl5jg0g51fcky1ammw0yyq572wyhibw7q8y7ly7")))) + (base32 "15wm987hz6rfs9ds9l1gbs6gdsardj1ywvk6zmpvj2i2190y4b3q")))) (build-system qt-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + (add-after 'unpack 'set-absolute-library-paths + (lambda _ + ;; Set absolute paths for dlopened libraries. We can’t use k3b’s + ;; runpath as they are loaded by the Qt library. + (let ((libcdio-paranoia (assoc-ref %build-inputs "libcdio-paranoia")) + (libdvdcss (assoc-ref %build-inputs "libdvdcss"))) + (substitute* "libk3b/tools/k3bcdparanoialib.cpp" + (("\"(cdio_cdda|cdio_paranoia)\"" _ library) + (string-append "\"" libcdio-paranoia "/lib/" library "\""))) + (substitute* "libk3b/tools/k3blibdvdcss.cpp" + (("\"(dvdcss)\"" _ library) + (string-append "\"" libdvdcss "/lib/" library "\"")))) + #t)) + (add-after 'qt-wrap 'wrap-path + (lambda _ + ;; Set paths to backend programs. + (wrap-program (string-append (assoc-ref %outputs "out") "/bin/k3b") + `("PATH" ":" prefix + ,(map (lambda (input) + (string-append (assoc-ref %build-inputs input) "/bin")) + '("cdrdao" "dvd+rw-tools" "libburn" "sox")))) + #t))))) (native-inputs `(("extra-cmake-modules" ,extra-cmake-modules) ("pkg-config" ,pkg-config) ("kdoctools" ,kdoctools))) (inputs - `(("ffmpeg" ,ffmpeg) + `(("cdrdao" ,cdrdao) + ("dvd+rw-tools" ,dvd+rw-tools) + ("ffmpeg" ,ffmpeg) ("flac" ,flac) ("karchive" ,karchive) ("kcmutils" ,kcmutils) @@ -319,6 +347,9 @@ (define-public k3b ("kwidgetsaddons" ,kwidgetsaddons) ("kxmlgui" ,kxmlgui) ("lame" ,lame) + ("libburn" ,libburn) + ("libcdio-paranoia" ,libcdio-paranoia) + ("libdvdcss" ,libdvdcss) ("libdvdread" ,libdvdread) ;; TODO: LibFuzzer ("libiconv" ,libiconv) @@ -334,13 +365,17 @@ (define-public k3b ("qtwebkit" ,qtwebkit) ("shared-mime-info" ,shared-mime-info) ("solid" ,solid) + ("sox" ,sox) ("taglib" ,taglib))) (home-page "https://kde.org/applications/multimedia/org.kde.k3b") (synopsis "Sophisticated CD/DVD burning application") (description "K3b is CD-writing software which intends to be feature-rich and provide an easily usable interface. Features include burning audio CDs from .WAV and .MP3 audio files, configuring external programs and configuring -devices.") +devices. + +The @code{udisks-service} should be enabled for @command{k3b} to discover the +available CD drives.") (license ;; GPL for programs, FDL for documentation (list license:gpl2+ license:fdl1.2+)))) diff --git a/gnu/packages/kodi.scm b/gnu/packages/kodi.scm index c81a4bc487..742172a969 100644 --- a/gnu/packages/kodi.scm +++ b/gnu/packages/kodi.scm @@ -269,7 +269,7 @@ (define-public fstrcmp (define-public kodi (package (name "kodi") - (version "18.7") + (version "18.7.1") (source (origin (method git-fetch) (uri (git-reference @@ -278,7 +278,7 @@ (define-public kodi (file-name (git-file-name name version)) (sha256 (base32 - "082cpih84j7v29w55qhj0rdia7hdjpwi81qywiwawd4vlyimpv2h")) + "1ypn29yhy49mz9x4xqh2zfdrsbfwm1b4canvh9zvy9c1irjwf419")) (patches (search-patches "kodi-skip-test-449.patch" "kodi-increase-test-timeout.patch" "kodi-set-libcurl-ssl-parameters.patch")) diff --git a/gnu/packages/linphone.scm b/gnu/packages/linphone.scm index f96fff2fc4..14da150ced 100644 --- a/gnu/packages/linphone.scm +++ b/gnu/packages/linphone.scm @@ -512,14 +512,6 @@ (define-public linphoneqt `(#:tests? #f ; No test target #:phases (modify-phases %standard-phases - (add-after 'set-paths 'set-qt-rcc-source-date-override - (lambda _ - ;; This fixes a reproducibility problem where the Qt Resource - ;; Compiler (RCC) includes timestamp of its source files - ;; (see: https://reproducible-builds.org/docs/ - ;; deterministic-build-systems/#cmake-notes). - (setenv "QT_RCC_SOURCE_DATE_OVERRIDE" "1") - #t)) (add-after 'unpack 'fix-cmake-error (lambda _ ;; This is fixed in commit efed2fd8 of the master branch. diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm index f2b35e33c5..95847165fd 100644 --- a/gnu/packages/linux.scm +++ b/gnu/packages/linux.scm @@ -371,18 +371,18 @@ (define (%upstream-linux-source version hash) (sha256 hash))) -(define-public linux-libre-5.7-version "5.7.2") +(define-public linux-libre-5.7-version "5.7.4") (define-public linux-libre-5.7-pristine-source (let ((version linux-libre-5.7-version) - (hash (base32 "02brxm78n0kg4mh48acvjsr7mpvaqd279ycyaixaflid1s1awrb0"))) + (hash (base32 "06mm0bmjw54aypfhhbm9aaz5bmgymvygfak587iwv901635gb95w"))) (make-linux-libre-source version (%upstream-linux-source version hash) deblob-scripts-5.7))) -(define-public linux-libre-5.4-version "5.4.46") +(define-public linux-libre-5.4-version "5.4.47") (define-public linux-libre-5.4-pristine-source (let ((version linux-libre-5.4-version) - (hash (base32 "13hvnfdcbcb9a21zizq8d90mc8maxz03zmzsj6iqsjd2y7r4y1rh"))) + (hash (base32 "0v4d86yci4lq82nb1fgf0g3j0348v6q6m77czpm4b3cs7lwrs2wp"))) (make-linux-libre-source version (%upstream-linux-source version hash) deblob-scripts-5.4))) @@ -395,26 +395,26 @@ (define-public linux-libre-4.19-pristine-source (%upstream-linux-source version hash) deblob-scripts-4.19))) -(define-public linux-libre-4.14-version "4.14.184") +(define-public linux-libre-4.14-version "4.14.185") (define-public linux-libre-4.14-pristine-source (let ((version linux-libre-4.14-version) - (hash (base32 "0h6r06c1d7amkfglsr66ic89p0zxpmk7jkq1ylcbknmkiwkixx9g"))) + (hash (base32 "1iixxwidp53s2i2br58wbx5s69f2jcllb116z73pv7fmd06b2czk"))) (make-linux-libre-source version (%upstream-linux-source version hash) deblob-scripts-4.14))) -(define-public linux-libre-4.9-version "4.9.227") +(define-public linux-libre-4.9-version "4.9.228") (define-public linux-libre-4.9-pristine-source (let ((version linux-libre-4.9-version) - (hash (base32 "0pqc0wld4s4zjas95xm54mrkk00l9zkc59b6i9gq4km126s8bi1q"))) + (hash (base32 "0d7w2zzs79ywxzfrh4bmk5lw318qbkcb8mcsyyh3cc25qqlz9gwg"))) (make-linux-libre-source version (%upstream-linux-source version hash) deblob-scripts-4.9))) -(define-public linux-libre-4.4-version "4.4.227") +(define-public linux-libre-4.4-version "4.4.228") (define-public linux-libre-4.4-pristine-source (let ((version linux-libre-4.4-version) - (hash (base32 "196x57w740firg8zchypq4vq6a83ymmwn9amqrscym9zr0pcgm40"))) + (hash (base32 "0y1xc5lk8j3p5maarksmh18wy921rgcngzsih7q1a82rah1fsjxr"))) (make-linux-libre-source version (%upstream-linux-source version hash) deblob-scripts-4.4))) diff --git a/gnu/packages/lisp-xyz.scm b/gnu/packages/lisp-xyz.scm index 025d1bc9ef..c89ad4aef9 100644 --- a/gnu/packages/lisp-xyz.scm +++ b/gnu/packages/lisp-xyz.scm @@ -5719,22 +5719,7 @@ (define-public sbcl-cxml (install-file "catalog.dtd" (string-append (assoc-ref outputs "out") - "/lib/" (%lisp-type))))) - (add-after 'create-asd 'remove-component - ;; XXX: The original .asd has no components, but our build system - ;; creates an entry nonetheless. We need to remove it for the - ;; generated .asd to load properly. See trivia.trivial for a - ;; similar problem. - (lambda* (#:key outputs #:allow-other-keys) - (let* ((out (assoc-ref outputs "out")) - (asd (string-append out "/lib/sbcl/cxml.asd"))) - (substitute* asd - ((" :components -") - "")) - (substitute* asd - ((" *\\(\\(:compiled-file \"cxml--system\"\\)\\)") - "")))))))))) + "/lib/" (%lisp-type)))))))))) (define-public cl-cxml (sbcl-package->cl-source-package sbcl-cxml)) @@ -6136,7 +6121,6 @@ (define-public sbcl-fare-quasiquote-readtable (define-public cl-fare-quasiquote-readtable (sbcl-package->cl-source-package sbcl-fare-quasiquote-readtable)) -;; TODO: Add support for component-less system in asdf-build-system/sbcl. (define-public sbcl-fare-quasiquote-extras (package (inherit sbcl-fare-quasiquote) @@ -6156,22 +6140,7 @@ (define-public sbcl-fare-quasiquote-extras (install-file "fare-quasiquote-extras.asd" lib) (make-file-writable (string-append lib "/fare-quasiquote-extras.asd")) - #t))) - (add-after 'create-asd-file 'fix-asd-file - (lambda* (#:key outputs #:allow-other-keys) - (let* ((out (assoc-ref outputs "out")) - (lib (string-append out "/lib/" (%lisp-type))) - (asd (string-append lib "/fare-quasiquote-extras.asd"))) - (substitute* asd - ((":class") - "") - (("asdf/bundle:prebuilt-system") - "") - ((":components") - "") - (("\\(\\(:compiled-file \"fare-quasiquote-extras--system\"\\)\\)") - ""))) - #t))))) + #t)))))) (description "This library combines @code{fare-quasiquote-readtable} and @code{fare-quasiquote-optima}."))) @@ -6247,32 +6216,6 @@ (define-public sbcl-trivia.trivial (name "sbcl-trivia.trivial") (inputs `(("trivia.level2" ,sbcl-trivia.level2))) - (arguments - `(#:phases - (modify-phases %standard-phases - (replace 'create-asd-file - (lambda* (#:key outputs inputs #:allow-other-keys) - (let* ((out (assoc-ref outputs "out")) - (lib (string-append out "/lib/" (%lisp-type))) - (level2 (assoc-ref inputs "trivia.level2"))) - (mkdir-p lib) - (install-file "trivia.trivial.asd" lib) - ;; XXX: This .asd does not have any component and the build - ;; system fails to work in this case. We should update the - ;; build system to handle component-less .asd. - ;; TODO: How do we append to file in Guile? It seems that - ;; (open-file ... "a") gets a "Permission denied". - (substitute* (string-append lib "/trivia.trivial.asd") - (("\"\\)") - (string-append "\") - -(progn (asdf/source-registry:ensure-source-registry) - (setf (gethash - \"trivia.level2\" - asdf/source-registry:*source-registry*) - #p\"" - level2 - "/share/common-lisp/sbcl-bundle-systems/trivia.level2.asd\"))"))))))))) (description "Trivia is a pattern matching compiler that is compatible with Optima, another pattern matching library for Common Lisp. It is meant to be faster and more extensible than Optima. @@ -6350,24 +6293,7 @@ (define-public sbcl-trivia ("trivia.cffi" ,sbcl-trivia.cffi) ("optima" ,sbcl-optima))) (arguments - `(#:test-asd-file "trivia.test.asd" - #:phases - (modify-phases %standard-phases - (add-after 'create-asd 'remove-component - ;; XXX: The original .asd has no components, but our build system - ;; creates an entry nonetheless. We need to remove it for the - ;; generated .asd to load properly. See trivia.trivial for a - ;; similar problem. - (lambda* (#:key outputs #:allow-other-keys) - (let* ((out (assoc-ref outputs "out")) - (asd (string-append out "/lib/" (%lisp-type) "/trivia.asd"))) - (substitute* asd - ((" :components -") - "")) - (substitute* asd - ((" *\\(\\(:compiled-file \"trivia--system\"\\)\\)") - "")))))))) + `(#:test-asd-file "trivia.test.asd")) (description "Trivia is a pattern matching compiler that is compatible with Optima, another pattern matching library for Common Lisp. It is meant to be faster and more extensible than Optima."))) @@ -12018,3 +11944,180 @@ (define-public sbcl-cl-rdkafka (define-public cl-rdkafka (sbcl-package->cl-source-package sbcl-cl-rdkafka)) + +(define-public sbcl-acclimation + (let ((commit "4d51150902568fcd59335f4cc4cfa022df6116a5")) + (package + (name "sbcl-acclimation") + (version (git-version "0.0.0" "1" commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/robert-strandh/Acclimation") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1aw7rarjl8ai57h0jxnp9hr3dka7qrs55mmbl1p6rhd6xj8mp9wq")))) + (build-system asdf-build-system/sbcl) + (home-page "https://github.com/robert-strandh/Acclimation") + (synopsis "Internationalization library for Common Lisp") + (description "This project is meant to provide tools for +internationalizing Common Lisp programs. + +One important aspect of internationalization is of course the language used in +error messages, documentation strings, etc. But with this project we provide +tools for all other aspects of internationalization as well, including dates, +weight, temperature, names of physical quantitites, etc.") + (license license:bsd-2)))) + +(define-public cl-acclimation + (sbcl-package->cl-source-package sbcl-acclimation)) + +(define-public sbcl-clump-2-3-tree + (let ((commit "1ea4dbac1cb86713acff9ae58727dd187d21048a")) + (package + (name "sbcl-clump-2-3-tree") + (version (git-version "0.0.0" "1" commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/robert-strandh/Clump") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1639msyagsswj85gc0wd90jgh8588j3qg5q70by9s2brf2q6w4lh")))) + (arguments + '(#:asd-file "2-3-tree/clump-2-3-tree.asd" + #:asd-system-name "clump-2-3-tree")) + (inputs + `(("acclimation" ,sbcl-acclimation))) + (build-system asdf-build-system/sbcl) + (home-page "https://github.com/robert-strandh/Clump") + (synopsis "Implementation of 2-3 trees for Common Lisp") + (description "The purpose of this library is to provide a collection of +implementations of trees. + +In contrast to existing libraries such as cl-containers, it does not impose a +particular use for the trees. Instead, it aims for a stratified design, +allowing client code to choose between different levels of abstraction. + +As a consequence of this policy, low-level interfaces are provided where +the concrete representation is exposed, but also high level interfaces +where the trees can be used as search trees or as trees that represent +sequences of objects.") + (license license:bsd-2)))) + +(define-public sbcl-clump-binary-tree + (package + (inherit sbcl-clump-2-3-tree) + (name "sbcl-clump-binary-tree") + (arguments + '(#:asd-file "Binary-tree/clump-binary-tree.asd" + #:asd-system-name "clump-binary-tree")) + (synopsis "Implementation of binary trees for Common Lisp"))) + +(define-public sbcl-clump + (package + (inherit sbcl-clump-2-3-tree) + (name "sbcl-clump") + (arguments + '(#:asd-file "clump.asd" + #:asd-system-name "clump")) + (inputs + `(("clump-2-3-tree" ,sbcl-clump-2-3-tree) + ("clump-binary-tree" ,sbcl-clump-binary-tree))) + (synopsis "Collection of tree implementations for Common Lisp"))) + +(define-public cl-clump + (sbcl-package->cl-source-package sbcl-clump)) + +(define-public sbcl-cluffer-base + (let ((commit "4aad29c276a58a593064e79972ee4d77cae0af4a")) + (package + (name "sbcl-cluffer-base") + (version (git-version "0.0.0" "1" commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/robert-strandh/cluffer") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1bcg13g7qb3dr8z50aihdjqa6miz5ivlc9wsj2csgv1km1mak2kj")))) + (arguments + '(#:asd-file "Base/cluffer-base.asd" + #:asd-system-name "cluffer-base")) + (inputs + `(("acclimation" ,sbcl-acclimation))) + (build-system asdf-build-system/sbcl) + (home-page "https://github.com/robert-strandh/cluffer") + (synopsis "Common Lisp library providing a protocol for text-editor buffers") + (description "Cluffer is a library for representing the buffer of a text +editor. As such, it defines a set of CLOS protocols for client code to +interact with the buffer contents in various ways, and it supplies different +implementations of those protocols for different purposes.") + (license license:bsd-2)))) + +(define-public sbcl-cluffer-standard-line + (package + (inherit sbcl-cluffer-base) + (name "sbcl-cluffer-standard-line") + (arguments + '(#:asd-file "Standard-line/cluffer-standard-line.asd" + #:asd-system-name "cluffer-standard-line")) + (inputs + `(("cluffer-base" ,sbcl-cluffer-base))))) + +(define-public sbcl-cluffer-standard-buffer + (package + (inherit sbcl-cluffer-base) + (name "sbcl-cluffer-standard-buffer") + (arguments + '(#:asd-file "Standard-buffer/cluffer-standard-buffer.asd" + #:asd-system-name "cluffer-standard-buffer")) + (inputs + `(("cluffer-base" ,sbcl-cluffer-base) + ("clump" ,sbcl-clump))))) + +(define-public sbcl-cluffer-simple-line + (package + (inherit sbcl-cluffer-base) + (name "sbcl-cluffer-simple-line") + (arguments + '(#:asd-file "Simple-line/cluffer-simple-line.asd" + #:asd-system-name "cluffer-simple-line")) + (inputs + `(("cluffer-base" ,sbcl-cluffer-base))))) + +(define-public sbcl-cluffer-simple-buffer + (package + (inherit sbcl-cluffer-base) + (name "sbcl-cluffer-simple-buffer") + (arguments + '(#:asd-file "Simple-buffer/cluffer-simple-buffer.asd" + #:asd-system-name "cluffer-simple-buffer")) + (inputs + `(("cluffer-base" ,sbcl-cluffer-base))))) + +(define-public sbcl-cluffer + (package + (inherit sbcl-cluffer-base) + (name "sbcl-cluffer") + (arguments + '(#:asd-file "cluffer.asd" + #:asd-system-name "cluffer")) + (inputs + `(("cluffer-base" ,sbcl-cluffer-base) + ("cluffer-standard-line" ,sbcl-cluffer-standard-line) + ("cluffer-standard-buffer" ,sbcl-cluffer-standard-buffer) + ("cluffer-simple-line" ,sbcl-cluffer-simple-line) + ("cluffer-simple-buffer" ,sbcl-cluffer-simple-buffer))))) + +(define-public cl-cluffer + (sbcl-package->cl-source-package sbcl-cluffer)) diff --git a/gnu/packages/machine-learning.scm b/gnu/packages/machine-learning.scm index 0e11da41ca..cc69aa3ec1 100644 --- a/gnu/packages/machine-learning.scm +++ b/gnu/packages/machine-learning.scm @@ -1817,8 +1817,7 @@ (define-public python-iml "1k8szlpm19rcwcxdny9qdm3gmaqq8akb4xlvrzyz8c2d679aak6l")))) (build-system python-build-system) (propagated-inputs - `(("ipython" ,(prompt-toolkit-2-instead-of-prompt-toolkit - python-ipython)) + `(("ipython" ,python-ipython) ("numpy" ,python-numpy) ("pandas" ,python-pandas) ("scipy" ,python-scipy))) diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm index ec1233f83b..87388747e4 100644 --- a/gnu/packages/mail.scm +++ b/gnu/packages/mail.scm @@ -32,6 +32,7 @@ ;;; Copyright © 2020 Vincent Legoll ;;; Copyright © 2020 Justus Winter ;;; Copyright © 2020 Eric Brown +;;; Copyright © 2020 Maxim Cournoyer ;;; ;;; This file is part of GNU Guix. ;;; @@ -146,6 +147,44 @@ (define-module (gnu packages mail) #:use-module (srfi srfi-1) #:use-module (ice-9 match)) +(define-public anubis + (package + (name "anubis") + ;; This 4.2.90 alpha release adds support for Guile 3 and has fixes for + ;; other issues. + (version "4.2.90") + (source + (origin + (method url-fetch) + (uri (string-append "https://alpha.gnu.org/gnu/anubis/anubis-" + version ".tar.gz")) + (sha256 + (base32 + "0dvm6acl32dv8bixx9z50gzwfp6kj4kxnn1j3dcwjlp7sasjp41s")))) + (build-system gnu-build-system) + (native-inputs + `(("automake" ,automake) + ("autoconf" ,autoconf) + ("gettext" ,gettext-minimal) + ("m4" ,m4))) ;for the test suite + (inputs + `(("gdbm" ,gdbm) + ("gnutls" ,gnutls) + ("gpgme" ,gpgme) + ("gsasl" ,gsasl) + ("guile" ,guile-3.0) + ("libgcrypt" ,libgcrypt) ;gnutls support depends on libgcrypt + ("libgpg-error" ,libgpg-error))) + (outputs '("out" "debug")) + (synopsis "SMTP message submission daemon") + (description "Anubis is a daemon that sits between the Mail User +Agent (MUA) and the Mail Transfer Agent (MTA). When a mail is sent by a user +in the MUA, it is first passed to Anubis, which performs additional processing +to the message before passing it on for delivery by the MTA. Anubis may, for +example, modify the message headers or body, or encrypt or sign the message.") + (home-page "https://www.gnu.org/software/anubis/manual/") + (license gpl3+))) + (define-public mailutils (package (name "mailutils") @@ -382,7 +421,7 @@ (define-public fetchmail (define-public mutt (package (name "mutt") - (version "1.14.2") + (version "1.14.4") (source (origin (method url-fetch) (uri (list @@ -392,7 +431,7 @@ (define-public mutt version ".tar.gz"))) (sha256 (base32 - "0cdcls0x6f2w99hkjz48hxhnx86w3bnyxzibchdc9yspih770bz2")) + "1hykkq3m7kqic5r7vzg45xaww7415fv5i2d03slzykqb47w5d3na")) (patches (search-patches "mutt-store-references.patch")))) (build-system gnu-build-system) (inputs diff --git a/gnu/packages/mate.scm b/gnu/packages/mate.scm index 8b548b5d8e..864fa8dc18 100644 --- a/gnu/packages/mate.scm +++ b/gnu/packages/mate.scm @@ -6,6 +6,7 @@ ;;; Copyright © 2019, 2020 Ludovic Courtès ;;; Copyright © 2019 Guy Fleury Iteriteka ;;; Copyright © 2020 Jonathan Brielmaier +;;; Copyright © 2020 Mathieu Othacehe ;;; ;;; This file is part of GNU Guix. ;;; @@ -264,7 +265,16 @@ (define-public libmateweather name "-" version ".tar.xz")) (sha256 (base32 - "094mnlczxq9crjj8z7dzs1zmwscdkbp54l3qjaf4a4bhd8lihv8d")))) + "094mnlczxq9crjj8z7dzs1zmwscdkbp54l3qjaf4a4bhd8lihv8d")) + (modules '((guix build utils))) + ;; This is fixed by commit ea13e065 upstream. Remove this once 1.25.0 + ;; is out. + (snippet + '(begin + (substitute* "data/Locations.xml.in" + (("Godthab") + "Nuuk")) + #t)))) (build-system gnu-build-system) (arguments '(#:configure-flags diff --git a/gnu/packages/messaging.scm b/gnu/packages/messaging.scm index c20e48cb6d..a03c620574 100644 --- a/gnu/packages/messaging.scm +++ b/gnu/packages/messaging.scm @@ -22,6 +22,7 @@ ;;; Copyright © 2020 Vincent Legoll ;;; Copyright © 2020 Marius Bakke ;;; Copyright © 2020 Reza Alizadeh Majd +;;; Copyright © 2020 Jonathan Brielmaier ;;; ;;; This file is part of GNU Guix. ;;; @@ -60,6 +61,7 @@ (define-module (gnu packages messaging) #:use-module (gnu packages documentation) #:use-module (gnu packages enchant) #:use-module (gnu packages fontutils) + #:use-module (gnu packages freedesktop) #:use-module (gnu packages gettext) #:use-module (gnu packages glib) #:use-module (gnu packages gnome) @@ -569,7 +571,7 @@ (define-public znc (version "1.8.1") (source (origin (method url-fetch) - (uri (string-append "http://znc.in/releases/archive/znc-" + (uri (string-append "https://znc.in/releases/archive/znc-" version ".tar.gz")) (sha256 (base32 @@ -603,7 +605,7 @@ (define-public znc ("perl" ,perl) ("python" ,python) ("zlib" ,zlib))) - (home-page "https://znc.in") + (home-page "https://wiki.znc.in/ZNC") (synopsis "IRC network bouncer") (description "ZNC is an @dfn{IRC network bouncer} or @dfn{BNC}. It can detach the client from the actual IRC server, and also from selected channels. @@ -2186,4 +2188,84 @@ (define-public tdlib (home-page "https://core.telegram.org/tdlib") (license license:boost1.0)))) +(define-public purple-mm-sms + (package + (name "purple-mm-sms") + (version "0.1.4") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://source.puri.sm/Librem5/purple-mm-sms.git") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1daf7zl8bhhm1szkgxflpqql69f2w9i9nlgf1n4p1nynxifz1bim")))) + (build-system gnu-build-system) + (arguments + `(#:make-flags + (let ((out (assoc-ref %outputs "out"))) + ;; Fix hardcoded paths + (list (string-append "PREFIX=" out) + (string-append "PLUGIN_DIR_PURPLE=" out "/lib/purple-2") + (string-append "DATA_ROOT_DIR_PURPLE=" out "/share"))) + #:tests? #f ; no tests + #:phases + (modify-phases %standard-phases + (delete 'configure)))) + (native-inputs + `(("glib:bin" ,glib "bin") + ("pkg-config" ,pkg-config))) + (inputs + `(("modem-manager" ,modem-manager) + ("pidgin" ,pidgin))) + (synopsis "Libpurple plugin for SMS via ModemManager") + (description "Plugin for libpurple to allow sending SMS using ModemManager.") + (home-page "https://source.puri.sm/Librem5/purple-mm-sms") + (license license:gpl2+))) + +(define-public chatty + (package + (name "chatty") + (version "0.1.10") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://source.puri.sm/Librem5/chatty.git") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0czvqwjzsb0rvmgrmbh97m1b35rnwl41j7q32z4fcqb7bschibql")))) + (build-system meson-build-system) + (arguments + '(#:phases + (modify-phases %standard-phases + (add-after 'unpack 'skip-updating-desktop-database + (lambda _ + (substitute* "meson.build" + (("meson.add_install_script.*") "")) + #t))))) + (native-inputs + `(("gettext" ,gettext-minimal) + ("glib:bin" ,glib "bin") + ("pkg-config" ,pkg-config))) + (inputs + `(("feedbackd" ,feedbackd) + ("folks" ,folks) + ("libgcrypt" ,libgcrypt) + ("libgee" ,libgee) + ("libhandy" ,libhandy) + ("pidgin" ,pidgin) + ("purple-mm-sms" ,purple-mm-sms) + ("sqlite" ,sqlite))) + (propagated-inputs + `(("adwaita-icon-theme" ,adwaita-icon-theme) + ("evolution-data-server" ,evolution-data-server))) + (synopsis "Mobile client for XMPP and SMS messaging") + (description "Chatty is a chat program for XMPP and SMS. It works on mobile +as well as on desktop platforms. It's based on libpurple and ModemManager.") + (home-page "https://source.puri.sm/Librem5/chatty") + (license license:gpl3+))) + ;;; messaging.scm ends here diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm index 49f784f529..b5d275b660 100644 --- a/gnu/packages/music.scm +++ b/gnu/packages/music.scm @@ -503,7 +503,7 @@ (define-public dumb-allegro4 (define-public hydrogen (package (name "hydrogen") - (version "1.0.0-beta2") + (version "1.0.0-rc1") (source (origin (method git-fetch) @@ -512,7 +512,7 @@ (define-public hydrogen (commit version))) (file-name (git-file-name name version)) (sha256 - (base32 "1s3jrdyjpm92flw9mkkxchnj0wz8nn1y1kifii8ws252iiqjya4a")))) + (base32 "1ibbdzyk30nj83jrq7py78hwpjgy0lq7ji6gi2pdp1pqzz1mqp0v")))) (build-system cmake-build-system) (arguments `(#:test-target "tests" diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm index 75017c060c..1e6f70e1ff 100644 --- a/gnu/packages/networking.scm +++ b/gnu/packages/networking.scm @@ -38,6 +38,7 @@ ;;; Copyright © 2019 Diego N. Barbato ;;; Copyright © 2020 Vincent Legoll ;;; Copyright © 2020 Brice Waegeneire +;;; Copyright © 2020 Jakub Kądziołka ;;; ;;; This file is part of GNU Guix. ;;; @@ -63,6 +64,7 @@ (define-module (gnu packages networking) #:use-module (guix build-system glib-or-gtk) #:use-module (guix build-system gnu) #:use-module (guix build-system go) + #:use-module (guix build-system meson) #:use-module (guix build-system perl) #:use-module (guix build-system python) #:use-module (guix build-system trivial) @@ -85,6 +87,7 @@ (define-module (gnu packages networking) #:use-module (gnu packages curl) #:use-module (gnu packages cyrus-sasl) #:use-module (gnu packages dejagnu) + #:use-module (gnu packages docbook) #:use-module (gnu packages documentation) #:use-module (gnu packages flex) #:use-module (gnu packages freedesktop) @@ -297,6 +300,34 @@ (define-public miredo residing in IPv4-only networks, even when they are behind a NAT device.") (license license:gpl2+))) +(define-public ndisc6 + (package + (name "ndisc6") + (version "1.0.4") + (source (origin + (method url-fetch) + (uri (string-append "https://www.remlab.net/files/ndisc6/ndisc6-" + version ".tar.bz2")) + (sha256 + (base32 + "07swyar1hl83zxmd7fqwb2q0c0slvrswkcfp3nz5lknrk15dmcdb")))) + (build-system gnu-build-system) + (home-page "https://www.remlab.net/ndisc6/") + (synopsis "IPv6 diagnostic tools") + (description + "NDisc6 is a collection of tools for IPv6 networking diagnostics. +It includes the following programs: + +@itemize +@item @command{ndisc6}: ICMPv6 Neighbor Discovery tool. +@item @command{rdisc6}: ICMPv6 Router Discovery tool. +@item @command{tcptraceroute6}: IPv6 traceroute over TCP. +@item @command{traceroute6}: IPv6 traceroute over UDP. +@item @command{rdnssd}: Recursive DNS Servers discovery daemon. +@end itemize") + ;; The user can choose version 2 or 3 of the GPL, not later versions. + (license (list license:gpl2 license:gpl3)))) + (define-public socat (package (name "socat") @@ -653,6 +684,76 @@ (define-public ifstatus intended as a substitute for the PPPStatus and EthStatus projects.") (license license:gpl2+))) +(define-public iputils + (package + (name "iputils") + (version "20190709") + (home-page "https://github.com/iputils/iputils") + (source (origin + (method git-fetch) + (uri (git-reference (url home-page) + (commit (string-append "s" version)))) + (file-name (git-file-name name version)) + (patches (search-patches "iputils-libcap-compat.patch")) + (sha256 + (base32 + "04bp4af15adp79ipxmiakfp0ij6hx5qam266flzbr94pr8z8l693")))) + (build-system meson-build-system) + (arguments + `(#:configure-flags '("-DBUILD_RARPD=true") + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'fix-docbook-url + (lambda* (#:key inputs #:allow-other-keys) + (let* ((docbook-xsl (assoc-ref inputs "docbook-xsl")) + (uri (string-append docbook-xsl "/xml/xsl/docbook-xsl-" + ,(package-version docbook-xsl)))) + (for-each + (lambda (file) + (substitute* file + (("http://docbook\\.sourceforge\\.net/release/xsl-ns/current") + uri))) + (cons "doc/meson.build" + (find-files "doc" "\\.xsl$"))) + #t)))))) + (native-inputs + `(("gettext" ,gettext-minimal) + ("pkg-config" ,pkg-config) + ("docbook-xsl" ,docbook-xsl) + ("docbook-xml" ,docbook-xml-5) + ("libxml2" ,libxml2) ;for XML_CATALOG_FILES + ("xsltproc" ,libxslt))) + (inputs + `(("libcap" ,libcap) + ("libidn2" ,libidn2) + ("openssl" ,openssl))) + (synopsis "Collection of network utilities") + (description + "This package contains a variety of tools for dealing with network +configuration, troubleshooting, or servers. Utilities included are: + +@itemize @bullet +@item @command{arping}: Ping hosts using the @dfn{Adress Resolution Protocol}. +@item @command{clockdiff}: Compute time difference between network hosts +using ICMP TSTAMP messages. +@item @command{ninfod}: Daemon that responds to IPv6 Node Information Queries. +@item @command{ping}: Use ICMP ECHO messages to measure round-trip delays +and packet loss across network paths. +@item @command{rarpd}: Answer RARP requests from clients. +@item @command{rdisc}: Populate network routing tables with information from +the ICMP router discovery protocol. +@item @command{tftpd}: Trivial file transfer protocol server. +@item @command{tracepath}: Trace network path to an IPv4 or IPv6 address and +discover MTU along the way. +@end itemize") + ;; The various utilities are covered by different licenses, see LICENSE + ;; for details. + (license (list license:gpl2+ ;arping, rarpd, tracepath + license:bsd-3 ;clockdiff, ninfod, ping, tftpd + (license:non-copyleft + "https://spdx.org/licenses/Rdisc.html" + "Sun Microsystems license, see rdisc.c for details"))))) + (define-public nload (package (name "nload") @@ -3187,3 +3288,49 @@ (define-public lldpd deliver Link-Layer notifications to adjacent network devices. @code{lldpd} is an implementation of LLDP. It also supports some proprietary protocols.") (license license:isc))) + +(define-public hashcash + (package + (name "hashcash") + (version "1.22") + (source + (origin + (method url-fetch) + (uri (string-append "http://www.hashcash.org/source/hashcash-" + version ".tgz")) + (sha256 + (base32 + "15kqaimwb2y8wvzpn73021bvay9mz1gqqfc40gk4hj6f84nz34h1")))) + (build-system gnu-build-system) + (arguments + `(#:make-flags (list (string-append "CC=" ,(cc-for-target))) + #:phases + (modify-phases %standard-phases + (delete 'configure) + ;; No tests available. + (delete 'check) + (replace 'install + (lambda* (#:key outputs #:allow-other-keys) + (let* ((outdir (assoc-ref outputs "out")) + (bindir (string-append outdir "/bin")) + (mandir (string-append outdir "/share/man/man1")) + (docdir (string-append outdir "/share/doc/hashcash-" ,version))) + ;; Install manually, as we don't need the `sha1' binary + (install-file "hashcash" bindir) + (install-file "hashcash.1" mandir) + (install-file "README" docdir) + (install-file "LICENSE" docdir) + (install-file "CHANGELOG" docdir) + #t)))))) + (home-page "https://www.hashcash.org/") + (synopsis "Denial-of-service countermeasure") + (description "Hashcash is a proof-of-work algorithm, which has been used +as a denial-of-service countermeasure technique in a number of systems. + +A hashcash stamp constitutes a proof-of-work which takes a parametrizable +amount of work to compute for the sender. The recipient can verify received +hashcash stamps efficiently. + +This package contains a command-line tool for computing and verifying hashcash +stamps.") + (license license:public-domain))) diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm index c1e6657dff..2cd7886011 100644 --- a/gnu/packages/package-management.scm +++ b/gnu/packages/package-management.scm @@ -118,8 +118,8 @@ (define-public guix ;; Note: the 'update-guix-package.scm' script expects this definition to ;; start precisely like this. (let ((version "1.1.0") - (commit "141b5c162048f5cb52e8c90ff7c16a2e98babcfb") - (revision 10)) + (commit "c00564192a9924ab2218c243342963aba89d67d1") + (revision 12)) (package (name "guix") @@ -135,7 +135,7 @@ (define-public guix (commit commit))) (sha256 (base32 - "1j3vag994kj05b09a7w4lyas991a19hbbslcm9xvn5k2ilf4qskz")) + "008ywpdkc5f2jh25x6rr9glzvq4a6qih7v73w5dbxscpddx5c5g2")) (file-name (string-append "guix-" version "-checkout")))) (build-system gnu-build-system) (arguments @@ -542,15 +542,30 @@ (define-public current-guix (define-public nix (package (name "nix") - (version "2.3.5") + (version "2.3.6") (source (origin (method url-fetch) (uri (string-append "http://nixos.org/releases/nix/nix-" version "/nix-" version ".tar.xz")) (sha256 (base32 - "1hbqsrp1ii2sfq8x2mahjrl2182qck76n8blrl1jfz3xq99m6i15")))) + "128xf2as0y7hr28x575pbf9lkjpxr9hsxknbavv4p7ywr4lhbs85")))) (build-system gnu-build-system) + (arguments + `(#:configure-flags + (list "--sysconfdir=/etc") + #:phases + (modify-phases %standard-phases + (replace 'install + ;; Don't try & fail to create subdirectories in /etc, but keep them + ;; in the output as examples. + (lambda* (#:key (make-flags '()) outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (etc (string-append out "/etc"))) + (apply invoke "make" "install" + (string-append "sysconfdir=" etc) + (string-append "profiledir=" etc "/profile.d") + make-flags))))))) (native-inputs `(("pkg-config" ,pkg-config))) (inputs `(("boost" ,boost) ("brotli" ,brotli) diff --git a/gnu/packages/patches/emacs-hyperbole-toggle-messaging.patch b/gnu/packages/patches/emacs-hyperbole-toggle-messaging.patch new file mode 100644 index 0000000000..ab66e1b389 --- /dev/null +++ b/gnu/packages/patches/emacs-hyperbole-toggle-messaging.patch @@ -0,0 +1,86 @@ +From 6d5c587ec719e3309077c7d637b03b13db65c047 Mon Sep 17 00:00:00 2001 +From: Joseph LaFreniere +Date: Fri, 12 Jul 2019 12:43:46 -0500 +Subject: [PATCH] Move definition of hyperbole-toggle-messaging to hsettings + +--- + hsettings.el | 25 +++++++++++++++++++++++++ + hyperbole.el | 26 -------------------------- + 2 files changed, 25 insertions(+), 26 deletions(-) + +diff --git a/hsettings.el b/hsettings.el +index 6cdd1b8..9632067 100644 +--- a/hsettings.el ++++ b/hsettings.el +@@ -163,6 +163,31 @@ package to display search results." + search-term))) + (user-error "(Hyperbole): Invalid web search service `%s'" service-name)))) + ++;;;###autoload ++(defun hyperbole-toggle-messaging (&optional arg) ++ "Toggle Hyperbole support for explicit buttons in mail and news buffers. ++Toggles the boolean variable `inhibit-hyperbole-messaging’ and either ++adds hooks (nil value) or removes them (t value). ++ ++With optional prefix ARG > 0, enables support. If ARG <= 0, ++disables/inhibits support." ++ (interactive "P") ++ (setq inhibit-hyperbole-messaging (if (null arg) ++ (not inhibit-hyperbole-messaging) ++ (<= (prefix-numeric-value arg) 0))) ++ (if inhibit-hyperbole-messaging ++ (var:remove-all) ++ (var:append-all) ++ ;; Add any hooks that were skipped when inhibit-hyperbole-messaging ++ ;; was nil. ++ (cond ((boundp 'hyperbole-loading)) ++ ((not after-init-time) ++ (add-hook 'after-init-hook (lambda () (load "hyperbole")))) ++ (t (load "hyperbole")))) ++ (if (called-interactively-p 'interactive) ++ (message "Hyperbole messaging button support is %s" ++ (if inhibit-hyperbole-messaging "disabled" "enabled")))) ++ + (defcustom inhibit-hyperbole-messaging t + "*Determines whether Hyperbole supports explicit buttons in mail and news buffers. + The default of t means disable such support (work remains to +diff --git a/hyperbole.el b/hyperbole.el +index 4aa427d..872dbaf 100644 +--- a/hyperbole.el ++++ b/hyperbole.el +@@ -121,32 +121,6 @@ + t))) + (error "(Hyperbole): Startup failure: `hyperb:dir' must be manually added to `load-path' to fix."))) + +-;; This must be defined before the defcustom `inhbit-hyperbole-messaging'. +-;;;###autoload +-(defun hyperbole-toggle-messaging (&optional arg) +- "Toggle Hyperbole support for explicit buttons in mail and news buffers. +-Toggles the boolean variable `inhibit-hyperbole-messaging’ and either +-adds hooks (nil value) or removes them (t value). +- +-With optional prefix ARG > 0, enables support. If ARG <= 0, +-disables/inhibits support." +- (interactive "P") +- (setq inhibit-hyperbole-messaging (if (null arg) +- (not inhibit-hyperbole-messaging) +- (<= (prefix-numeric-value arg) 0))) +- (if inhibit-hyperbole-messaging +- (var:remove-all) +- (var:append-all) +- ;; Add any hooks that were skipped when inhibit-hyperbole-messaging +- ;; was nil. +- (cond ((boundp 'hyperbole-loading)) +- ((not after-init-time) +- (add-hook 'after-init-hook (lambda () (load "hyperbole")))) +- (t (load "hyperbole")))) +- (if (called-interactively-p 'interactive) +- (message "Hyperbole messaging button support is %s" +- (if inhibit-hyperbole-messaging "disabled" "enabled")))) +- + (defgroup hyperbole-koutliner nil + "Hyperbole multi-level autonumbered outliner customizations." + :group 'hyperbole) +-- +2.22.0 + diff --git a/gnu/packages/patches/ffmpeg-prefer-dav1d.patch b/gnu/packages/patches/ffmpeg-prefer-dav1d.patch deleted file mode 100644 index 95e3712a7f..0000000000 --- a/gnu/packages/patches/ffmpeg-prefer-dav1d.patch +++ /dev/null @@ -1,43 +0,0 @@ -When decoding AV1 files, prefer dav1d over libaom for performance -reasons. - -Patch copied from upstream source repository: - - - -From dc0806dd25882f41f6085c8356712f95fded56c7 Mon Sep 17 00:00:00 2001 -From: James Almer -Date: Sun, 15 Sep 2019 11:29:56 -0300 -Subject: [PATCH] avcodec/allcodecs: make libdav1d the preferred AV1 decoder - -It's considerably faster than libaom in most systems. - -Reviewed-by: BBB -Signed-off-by: James Almer ---- - libavcodec/allcodecs.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c -index 5130fca026..d5dfba1877 100644 ---- a/libavcodec/allcodecs.c -+++ b/libavcodec/allcodecs.c -@@ -680,7 +680,6 @@ extern AVCodec ff_pcm_mulaw_at_encoder; - extern AVCodec ff_pcm_mulaw_at_decoder; - extern AVCodec ff_qdmc_at_decoder; - extern AVCodec ff_qdm2_at_decoder; --extern AVCodec ff_libaom_av1_decoder; - extern AVCodec ff_libaom_av1_encoder; - extern AVCodec ff_libaribb24_decoder; - extern AVCodec ff_libcelt_decoder; -@@ -738,6 +737,7 @@ extern AVCodec ff_idf_decoder; - /* external libraries, that shouldn't be used by default if one of the - * above is available */ - extern AVCodec ff_h263_v4l2m2m_encoder; -+extern AVCodec ff_libaom_av1_decoder; - extern AVCodec ff_libopenh264_encoder; - extern AVCodec ff_libopenh264_decoder; - extern AVCodec ff_h264_amf_encoder; --- -2.20.1 - diff --git a/gnu/packages/patches/iputils-libcap-compat.patch b/gnu/packages/patches/iputils-libcap-compat.patch new file mode 100644 index 0000000000..dc6da310ce --- /dev/null +++ b/gnu/packages/patches/iputils-libcap-compat.patch @@ -0,0 +1,37 @@ +Fix name clash with libcap 2.29. + +Taken from upstream: +https://github.com/iputils/iputils/commit/18f9a84e0e702841d6cc4d5f593de4fbd1348e83 + +diff --git a/ninfod/ninfod.c b/ninfod/ninfod.c +--- a/ninfod/ninfod.c ++++ b/ninfod/ninfod.c +@@ -455,7 +455,7 @@ static void do_daemonize(void) + /* --------- */ + #ifdef HAVE_LIBCAP + static const cap_value_t cap_net_raw = CAP_NET_RAW; +-static const cap_value_t cap_setuid = CAP_SETUID; ++static const cap_value_t cap_setuserid = CAP_SETUID; + static cap_flag_value_t cap_ok; + #else + static uid_t euid; +@@ -487,7 +487,7 @@ static void limit_capabilities(void) + + cap_get_flag(cap_cur_p, CAP_SETUID, CAP_PERMITTED, &cap_ok); + if (cap_ok != CAP_CLEAR) +- cap_set_flag(cap_p, CAP_PERMITTED, 1, &cap_setuid, CAP_SET); ++ cap_set_flag(cap_p, CAP_PERMITTED, 1, &cap_setuserid, CAP_SET); + + if (cap_set_proc(cap_p) < 0) { + DEBUG(LOG_ERR, "cap_set_proc: %s\n", strerror(errno)); +@@ -520,8 +520,8 @@ static void drop_capabilities(void) + + /* setuid / setuid */ + if (cap_ok != CAP_CLEAR) { +- cap_set_flag(cap_p, CAP_PERMITTED, 1, &cap_setuid, CAP_SET); +- cap_set_flag(cap_p, CAP_EFFECTIVE, 1, &cap_setuid, CAP_SET); ++ cap_set_flag(cap_p, CAP_PERMITTED, 1, &cap_setuserid, CAP_SET); ++ cap_set_flag(cap_p, CAP_EFFECTIVE, 1, &cap_setuserid, CAP_SET); + + if (cap_set_proc(cap_p) < 0) { + DEBUG(LOG_ERR, "cap_set_proc: %s\n", strerror(errno)); diff --git a/gnu/packages/patches/lib2geom-fix-tests.patch b/gnu/packages/patches/lib2geom-fix-tests.patch new file mode 100644 index 0000000000..9118658e49 --- /dev/null +++ b/gnu/packages/patches/lib2geom-fix-tests.patch @@ -0,0 +1,172 @@ +From 488edbf84e918e0353e7a8f438abbf6eeca3767e Mon Sep 17 00:00:00 2001 +From: Maxim Cournoyer +Date: Wed, 17 Jun 2020 23:20:53 -0400 +Subject: [PATCH] tests: Fix tests on non-x86_64 platforms. + +On platform other than x86_64 such as aarch64-linux or i686-linux, +some double comparison would fail. + +See . + +* tests/bezier-test.cpp: (Casteljau): Replace EXPECT_EQ by +EXPECT_near. +(Subdivide): Replace EXPECT_EQ by EXPECT_DOUBLE_EQ. +(Portion): Replace EXPECT_EQ by EXPECT_near. +* tests/ellipse-test.cpp (BezierIntersection): Lower error tolerance +from 6e-13 to 6e-12. +* tests/line-test.cpp (Reflection): Replace EXPECT_FLOAT_EQ BY +EXPECT_near. +(Coefficients): Skip test. +* tests/parallelogram-test.cpp (area): Replace EXPECT_EQ by +EXPECT_DOUBLE_EQ. +--- + tests/bezier-test.cpp | 31 +++++++++++++++++-------------- + tests/ellipse-test.cpp | 2 +- + tests/line-test.cpp | 11 +++++++---- + tests/parallelogram-test.cpp | 8 ++++---- + 4 files changed, 29 insertions(+), 23 deletions(-) + +diff --git a/tests/bezier-test.cpp b/tests/bezier-test.cpp +index 4054a65..46209f4 100644 +--- a/tests/bezier-test.cpp ++++ b/tests/bezier-test.cpp +@@ -152,11 +152,13 @@ TEST_F(BezierTest, Casteljau) { + EXPECT_vector_equal(right2, right); + + double vnone = casteljau_subdivision(t, &wiggle[0], NULL, NULL, wiggle.order()); +- EXPECT_EQ(vnone, vok); ++ EXPECT_near(vnone, vok, 1e-12); + } + } + + TEST_F(BezierTest, Portion) { ++ constexpr Coord eps{1e-12}; ++ + for (unsigned i = 0; i < 10000; ++i) { + double from = g_random_double_range(0, 1); + double to = g_random_double_range(0, 1); +@@ -165,8 +167,8 @@ TEST_F(BezierTest, Portion) { + Bezier result = portion(input, from, to); + + // the endpoints must correspond exactly +- EXPECT_EQ(result.at0(), input.valueAt(from)); +- EXPECT_EQ(result.at1(), input.valueAt(to)); ++ EXPECT_near(result.at0(), input.valueAt(from), eps); ++ EXPECT_near(result.at1(), input.valueAt(to), eps); + } + } + } +@@ -181,16 +183,16 @@ TEST_F(BezierTest, Subdivide) { + + // the endpoints must correspond exactly + // moreover, the subdivision point must be exactly equal to valueAt(t) +- EXPECT_EQ(result.first.at0(), input.at0()); +- EXPECT_EQ(result.first.at1(), result.second.at0()); +- EXPECT_EQ(result.second.at0(), input.valueAt(t)); +- EXPECT_EQ(result.second.at1(), input.at1()); ++ EXPECT_DOUBLE_EQ(result.first.at0(), input.at0()); ++ EXPECT_DOUBLE_EQ(result.first.at1(), result.second.at0()); ++ EXPECT_DOUBLE_EQ(result.second.at0(), input.valueAt(t)); ++ EXPECT_DOUBLE_EQ(result.second.at1(), input.at1()); + + // ditto for valueAt +- EXPECT_EQ(result.first.valueAt(0), input.valueAt(0)); +- EXPECT_EQ(result.first.valueAt(1), result.second.valueAt(0)); +- EXPECT_EQ(result.second.valueAt(0), input.valueAt(t)); +- EXPECT_EQ(result.second.valueAt(1), input.valueAt(1)); ++ EXPECT_DOUBLE_EQ(result.first.valueAt(0), input.valueAt(0)); ++ EXPECT_DOUBLE_EQ(result.first.valueAt(1), result.second.valueAt(0)); ++ EXPECT_DOUBLE_EQ(result.second.valueAt(0), input.valueAt(t)); ++ EXPECT_DOUBLE_EQ(result.second.valueAt(1), input.valueAt(1)); + + if (result.first.at1() != result.second.at0()) { + errors.push_back(std::pair(input, t)); +@@ -271,9 +273,10 @@ TEST_F(BezierTest, Deflate) { + EXPECT_FLOAT_EQ(0, b.at0()); + b = b.deflate(); + const double rootposition = (0.5-0.25) / (1-0.25); +- EXPECT_FLOAT_EQ(0, b.valueAt(rootposition)); ++ constexpr Coord eps{1e-12}; ++ EXPECT_near(0.0, b.valueAt(rootposition), eps); + b = b.subdivide(rootposition).second; +- EXPECT_FLOAT_EQ(0, b.at0()); ++ EXPECT_near(0.0, b.at0(), eps); + } + + TEST_F(BezierTest, Roots) { +@@ -364,7 +367,7 @@ TEST_F(BezierTest, Operators) { + for(int i = 0; i <= 16; i++) { + double t = i/16.0; + double b = B.valueAt(t); +- EXPECT_FLOAT_EQ(b*b, product.valueAt(t)); ++ EXPECT_near(b*b, product.valueAt(t), 1e-12); + } + } + } +diff --git a/tests/ellipse-test.cpp b/tests/ellipse-test.cpp +index 561c285..d6e65d8 100644 +--- a/tests/ellipse-test.cpp ++++ b/tests/ellipse-test.cpp +@@ -199,7 +199,7 @@ TEST(EllipseTest, BezierIntersection) { + std::vector xs = e.intersect(b); + + EXPECT_EQ(xs.size(), 2ul); +- EXPECT_intersections_valid(e, b, xs, 6e-13); ++ EXPECT_intersections_valid(e, b, xs, 6e-12); + } + + TEST(EllipseTest, Coefficients) { +diff --git a/tests/line-test.cpp b/tests/line-test.cpp +index 99546dd..2399130 100644 +--- a/tests/line-test.cpp ++++ b/tests/line-test.cpp +@@ -91,10 +91,12 @@ TEST(LineTest, Reflection) { + + Point testra = pa * reflecta; + Point testrb = pb * reflectb; +- EXPECT_FLOAT_EQ(testra[X], ra[X]); +- EXPECT_FLOAT_EQ(testra[Y], ra[Y]); +- EXPECT_FLOAT_EQ(testrb[X], rb[X]); +- EXPECT_FLOAT_EQ(testrb[Y], rb[Y]); ++ ++ constexpr Coord eps{1e-12}; ++ EXPECT_near(testra[X], ra[X], eps); ++ EXPECT_near(testra[Y], ra[Y], eps); ++ EXPECT_near(testrb[X], rb[X], eps); ++ EXPECT_near(testrb[Y], rb[Y], eps); + } + + TEST(LineTest, RotationToZero) { +@@ -115,6 +117,7 @@ TEST(LineTest, RotationToZero) { + } + + TEST(LineTest, Coefficients) { ++ GTEST_SKIP() << "This test fails on i686-linux and aarch64-linux"; + std::vector lines; + lines.push_back(Line(Point(1e9,1e9), Point(1,1))); + //the case below will never work without normalizing the line +diff --git a/tests/parallelogram-test.cpp b/tests/parallelogram-test.cpp +index 8109ead..70ccea1 100644 +--- a/tests/parallelogram-test.cpp ++++ b/tests/parallelogram-test.cpp +@@ -106,13 +106,13 @@ TEST(ParallelogramTest, area) + { + Rect r(2, 4, 7, 8); + Parallelogram p(r); +- EXPECT_EQ(p.area(), r.area()); ++ EXPECT_DOUBLE_EQ(p.area(), r.area()); + p *= Rotate(M_PI / 4.0); // 45° +- EXPECT_EQ(p.area(), r.area()); ++ EXPECT_DOUBLE_EQ(p.area(), r.area()); + p *= HShear(2); +- EXPECT_EQ(p.area(), r.area()); ++ EXPECT_DOUBLE_EQ(p.area(), r.area()); + p *= Scale(2); +- EXPECT_EQ(p.area(), r.area() * 4); ++ EXPECT_DOUBLE_EQ(p.area(), r.area() * 4); + } + + class ParallelogramTest +-- +2.26.2 + diff --git a/gnu/packages/patches/lib2geom-link-tests-against-glib.patch b/gnu/packages/patches/lib2geom-link-tests-against-glib.patch deleted file mode 100644 index 2b4f7ca6bf..0000000000 --- a/gnu/packages/patches/lib2geom-link-tests-against-glib.patch +++ /dev/null @@ -1,34 +0,0 @@ -From f95925afef451755fc1449e57fbfdc2e7277f4b4 Mon Sep 17 00:00:00 2001 -From: Maxim Cournoyer -Date: Sat, 11 Jan 2020 00:44:55 -0500 -Subject: [PATCH 1/3] tests: Link against GLib. - -This resolves an error about not finding when linking the -tests that make use of GLib. - -* src/tests/CMakeLists.txt[2GEOM_GTESTS_SRC]: Add the glib library to -the link target libraries. ---- - src/tests/CMakeLists.txt | 6 ++++-- - 1 file changed, 4 insertions(+), 2 deletions(-) - -diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt -index 5ddf7f9c..626cfd87 100644 ---- a/src/tests/CMakeLists.txt -+++ b/src/tests/CMakeLists.txt -@@ -32,8 +32,10 @@ sbasis-test - - foreach(source ${2GEOM_GTESTS_SRC}) - add_executable(${source} ${source}.cpp) -- target_include_directories(${source} PRIVATE ${GSL_INCLUDE_DIRS} ${GTK3_INCLUDE_DIRS}) -- target_link_libraries(${source} 2geom gtest_main gtest ${GSL_LIBRARIES} ${GTK3_LIBRARIES}) -+ target_include_directories(${source} PRIVATE ${GSL_INCLUDE_DIRS} -+ ${GTK3_INCLUDE_DIRS} ${GLIB_INCLUDE_DIRS}) -+ target_link_libraries(${source} 2geom gtest_main gtest ${GSL_LIBRARIES} -+ ${GTK3_LIBRARIES} ${GLIB_LIBRARIES}) - add_test(NAME ${source} COMMAND ${source}) - endforeach() - --- -2.24.1 - diff --git a/gnu/packages/patches/lib2geom-use-system-googletest.patch b/gnu/packages/patches/lib2geom-use-system-googletest.patch deleted file mode 100644 index 16cce1799f..0000000000 --- a/gnu/packages/patches/lib2geom-use-system-googletest.patch +++ /dev/null @@ -1,94 +0,0 @@ -From 6693b9c8ff1ae1ec02c9002c0a8f5f416f0c88f0 Mon Sep 17 00:00:00 2001 -From: Maxim Cournoyer -Date: Sun, 12 Jan 2020 23:23:33 -0500 -Subject: [PATCH 3/3] build: Prefer googletest from the system. - -Fixes issue #4. - -The build system now look for a system installed googletest or falls -back to the bundled copy of googletest otherwise. - -* CMakeLists.txt: Add call to find_package(GTest). -(include_directories): Remove "src/googletest/googletest/include" from -arg. -* src/CMakeLists.txt[NOT GTEST_FOUND]: Define the gtest and gtest_main -libraries when GTEST_FOUND is false. Globally include the googletest -headers here. Define aliases for the gtest and gtest_main libraries -that match those defined by the FindGTest module. -* src/tests/CMakeLists.txt: Replace references to gtest_main and gtest -by GTest::Main and GTest::GTest, respectively. ---- - CMakeLists.txt | 3 ++- - src/CMakeLists.txt | 15 +++++++++++---- - src/tests/CMakeLists.txt | 6 +++--- - 3 files changed, 16 insertions(+), 8 deletions(-) - -diff --git a/CMakeLists.txt b/CMakeLists.txt -index bfeb8f03..96fbd58c 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -25,13 +25,14 @@ find_package(DoubleConversion REQUIRED) - find_package(PkgConfig REQUIRED) - find_package(Cython) - find_package(Threads) -+find_package(GTest) - pkg_check_modules(GTK3 gtk+-3.0) - pkg_check_modules(GLIB glib-2.0) - pkg_check_modules(CAIRO cairo) - pkg_check_modules(GSL gsl) - - # Add global include and link directories --include_directories(src src/googletest/googletest/include ${CMAKE_CURRENT_BINARY_DIR}) -+include_directories(src ${CMAKE_CURRENT_BINARY_DIR}) - link_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/2geom) - - check_cxx_source_compiles("#include \nint main() { double a=0.5,b=0.5,c=0.5; sincos(a, &b, &c); return 0; }" HAVE_SINCOS) -diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt -index eefb3ac5..941dc4c7 100644 ---- a/src/CMakeLists.txt -+++ b/src/CMakeLists.txt -@@ -1,7 +1,14 @@ --add_library(gtest SHARED googletest/googletest/src/gtest-all.cc) --target_include_directories(gtest PRIVATE googletest/googletest) --target_link_libraries(gtest Threads::Threads) --add_library(gtest_main STATIC googletest/googletest/src/gtest_main.cc) -+if(NOT GTEST_FOUND) -+ message("No system googletest library: using bundled copy.") -+ add_library(gtest SHARED googletest/googletest/src/gtest-all.cc) -+ add_library(gtest_main STATIC googletest/googletest/src/gtest_main.cc) -+ target_include_directories(gtest PRIVATE googletest/googletest) -+ target_link_libraries(gtest Threads::Threads) -+ include_directories(SYSTEM googletest/googletest/include) -+ # Aliases to share the same nomenclature with FindGTest. -+ add_library(GTest::GTest ALIAS gtest) -+ add_library(GTest::Main ALIAS gtest_main) -+endif() - - add_subdirectory(2geom) - add_subdirectory(tests) -diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt -index 626cfd87..3538f8cf 100644 ---- a/src/tests/CMakeLists.txt -+++ b/src/tests/CMakeLists.txt -@@ -34,15 +34,15 @@ foreach(source ${2GEOM_GTESTS_SRC}) - add_executable(${source} ${source}.cpp) - target_include_directories(${source} PRIVATE ${GSL_INCLUDE_DIRS} - ${GTK3_INCLUDE_DIRS} ${GLIB_INCLUDE_DIRS}) -- target_link_libraries(${source} 2geom gtest_main gtest ${GSL_LIBRARIES} -- ${GTK3_LIBRARIES} ${GLIB_LIBRARIES}) -+ target_link_libraries(${source} 2geom GTest::Main GTest::GTest -+ ${GSL_LIBRARIES} ${GTK3_LIBRARIES} ${GLIB_LIBRARIES}) - add_test(NAME ${source} COMMAND ${source}) - endforeach() - - foreach(source ${2GEOM_TESTS_SRC}) - add_executable(${source} ${source}.cpp) - target_include_directories(${source} PRIVATE ${GSL_INCLUDE_DIRS} ${GTK3_INCLUDE_DIRS}) -- target_link_libraries(${source} 2geom gtest ${GSL_LIBRARIES} ${GTK3_LIBRARIES}) -+ target_link_libraries(${source} 2geom GTest::GTest ${GSL_LIBRARIES} ${GTK3_LIBRARIES}) - add_test(NAME ${source} COMMAND ${source}) - endforeach(source) - --- -2.24.1 - diff --git a/gnu/packages/patches/python-memcached-syntax-warnings.patch b/gnu/packages/patches/python-memcached-syntax-warnings.patch new file mode 100644 index 0000000000..f8690677c0 --- /dev/null +++ b/gnu/packages/patches/python-memcached-syntax-warnings.patch @@ -0,0 +1,24 @@ +Problem reported upstream: +https://github.com/linsomniac/python-memcached/issues/176 + +--- + memcache.py | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/memcache.py b/memcache.py +index 05b6657..b935681 100644 +--- a/memcache.py ++++ b/memcache.py +@@ -1300,8 +1300,8 @@ class Client(threading.local): + key = key[1] + if key is None: + raise Client.MemcachedKeyNoneError("Key is None") +- if key is '': +- if key_extra_len is 0: ++ if key == '': ++ if key_extra_len == 0: + raise Client.MemcachedKeyNoneError("Key is empty") + + # key is empty but there is some other component to key +-- +2.26.2 diff --git a/gnu/packages/patches/quassel-qt-514-compat.patch b/gnu/packages/patches/quassel-qt-514-compat.patch new file mode 100644 index 0000000000..7a0c42e8aa --- /dev/null +++ b/gnu/packages/patches/quassel-qt-514-compat.patch @@ -0,0 +1,130 @@ +https://github.com/quassel/quassel/commit/579e559a6322209df7cd51c34801fecff5fe734b.patch + +Based on the above patch, with some changes due to how the code has changed +in the time since 0.13.1 was released. + +https://git.archlinux.org/svntogit/community.git/plain/trunk/quassel-0.13.1-qt5.14.patch?h=packages/quassel + +From 579e559a6322209df7cd51c34801fecff5fe734b Mon Sep 17 00:00:00 2001 +From: Manuel Nickschas +Date: Tue, 7 Jan 2020 18:34:54 +0100 +Subject: [PATCH] common: Disable enum type stream operators for Qt >= 5.14 + +Starting from version 5.14, Qt provides stream operators for enum +types, which collide with the ones we ship in types.h. Disable +Quassel's stream operators when compiling against Qt 5.14 or later. + +Add a unit test that ensures that enum serialization honors the width +of the underlying type. +--- + src/common/types.h | 2 + + tests/common/CMakeLists.txt | 2 + + tests/common/typestest.cpp | 79 +++++++++++++++++++++++++++++++++++++ + 3 files changed, 83 insertions(+) + create mode 100644 tests/common/typestest.cpp + +diff --git a/src/common/types.h b/src/common/types.h +index d3742b788..e2a9aab5e 100644 +--- a/src/common/types.h ++++ b/src/common/types.h +@@ -140,6 +140,7 @@ Q_DECLARE_METATYPE(QHostAddress) + typedef QList MsgIdList; + typedef QList BufferIdList; + ++#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0) + /** + * Catch-all stream serialization operator for enum types. + * +@@ -169,6 +170,7 @@ QDataStream &operator>>(QDataStream &in, T &value) { + value = static_cast(v); + return in; + } ++#endif + + // Exceptions + +diff --git a/tests/common/typestest.cpp b/tests/common/typestest.cpp +new file mode 100644 +index 000000000..04031c299 +--- /dev/null ++++ b/tests/common/typestest.cpp +@@ -0,0 +1,79 @@ ++/*************************************************************************** ++ * Copyright (C) 2005-2020 by the Quassel Project * ++ * devel@quassel-irc.org * ++ * * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) version 3. * ++ * * ++ * This program is distributed in the hope that it will be useful, * ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of * ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ++ * GNU General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the * ++ * Free Software Foundation, Inc., * ++ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ++ ***************************************************************************/ ++ ++#include ++ ++#include ++#include ++#include ++ ++#include "testglobal.h" ++#include "types.h" ++ ++using namespace ::testing; ++ ++class EnumHolder ++{ ++ Q_GADGET ++ ++public: ++ enum class Enum16 : uint16_t {}; ++ enum class Enum32 : uint32_t {}; ++ ++ enum class EnumQt16 : uint16_t {}; ++ Q_ENUM(EnumQt16) ++ enum class EnumQt32 : uint32_t {}; ++ Q_ENUM(EnumQt32) ++}; ++ ++// Verify that enums are (de)serialized as their underlying type ++TEST(TypesTest, enumSerialization) ++{ ++ QByteArray data; ++ QDataStream out(&data, QIODevice::WriteOnly); ++ ++ // Serialize ++ out << EnumHolder::Enum16(0xabcd); ++ ASSERT_THAT(data.size(), Eq(2)); ++ out << EnumHolder::Enum32(0x123456); ++ ASSERT_THAT(data.size(), Eq(6)); ++ out << EnumHolder::EnumQt16(0x4321); ++ ASSERT_THAT(data.size(), Eq(8)); ++ out << EnumHolder::Enum32(0xfedcba); ++ ASSERT_THAT(data.size(), Eq(12)); ++ ASSERT_THAT(out.status(), Eq(QDataStream::Status::Ok)); ++ ++ // Deserialize ++ QDataStream in(data); ++ EnumHolder::Enum16 enum16; ++ EnumHolder::Enum32 enum32; ++ EnumHolder::EnumQt16 enumQt16; ++ EnumHolder::EnumQt32 enumQt32; ++ in >> enum16 >> enum32 >> enumQt16 >> enumQt32; ++ ASSERT_THAT(in.status(), Eq(QDataStream::Status::Ok)); ++ EXPECT_TRUE(in.atEnd()); ++ ++ EXPECT_THAT((int)enum16, Eq(0xabcd)); ++ EXPECT_THAT((int)enum32, Eq(0x123456)); ++ EXPECT_THAT((int)enumQt16, Eq(0x4321)); ++ EXPECT_THAT((int)enumQt32, Eq(0xfedcba)); ++} ++ ++#include "typestest.moc" diff --git a/gnu/packages/patches/tup-unbundle-dependencies.patch b/gnu/packages/patches/tup-unbundle-dependencies.patch new file mode 100644 index 0000000000..6409522bd3 --- /dev/null +++ b/gnu/packages/patches/tup-unbundle-dependencies.patch @@ -0,0 +1,66 @@ +Allow building tup after removing some bundled sources from the source +tree. + +diff --git a/build.sh b/build.sh +index 2937116d..eab650f7 100755 +--- a/build.sh ++++ b/build.sh +@@ -16,7 +16,7 @@ else + echo "Error: invalid TUP_SERVER \"$server\"" 1>&2 + exit 1 + fi +-LDFLAGS="$LDFLAGS -lm" ++LDFLAGS="$LDFLAGS -lm -lsqlite3 `pcre-config --libs`" + : ${CC:=gcc} + case "$os" in + Linux) +@@ -65,17 +65,15 @@ mkdir luabuiltin + + CFLAGS="$CFLAGS -DTUP_SERVER=\"$server\"" + CFLAGS="$CFLAGS -DHAVE_CONFIG_H" ++CFLAGS="$CFLAGS `pcre-config --cflags`" + +-for i in ../src/tup/*.c ../src/tup/tup/main.c ../src/tup/monitor/null.c ../src/tup/flock/fcntl.c ../src/inih/ini.c ../src/pcre/*.c $plat_files; do ++for i in ../src/tup/*.c ../src/tup/tup/main.c ../src/tup/monitor/null.c ../src/tup/flock/fcntl.c ../src/inih/ini.c $plat_files; do + echo " bootstrap CC $CFLAGS $i" + # Put -I. first so we find our new luabuiltin.h file, not one built + # by a previous 'tup upd'. +- $CC $CFLAGS -c $i -I. -I../src -I../src/pcre $plat_cflags ++ $CC $CFLAGS -c $i -I. -I../src $plat_cflags + done + +-echo " bootstrap CC $CFLAGS ../src/sqlite3/sqlite3.c" +-$CC $CFLAGS -c ../src/sqlite3/sqlite3.c -DSQLITE_TEMP_STORE=2 -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION $plat_cflags +- + echo " bootstrap LD tup $LDFLAGS" + echo "const char *tup_version(void) {return \"$label\";}" | $CC -x c -c - -o tup_version.o + $CC *.o -o tup -lpthread $plat_ldflags $LDFLAGS +diff --git a/src/tup/db.c b/src/tup/db.c +index 55ee3edd..9bdf7a80 100644 +--- a/src/tup/db.c ++++ b/src/tup/db.c +@@ -46,7 +46,7 @@ + #include + #include + #include +-#include "sqlite3/sqlite3.h" ++#include + + #define DB_VERSION 17 + #define PARSER_VERSION 12 +diff --git a/src/tup/tupid.h b/src/tup/tupid.h +index 7b36ae46..19aed438 100644 +--- a/src/tup/tupid.h ++++ b/src/tup/tupid.h +@@ -21,7 +21,7 @@ + #ifndef tup_tupid_h + #define tup_tupid_h + +-#include "sqlite3/sqlite3.h" ++#include + + typedef sqlite3_int64 tupid_t; + +-- +2.26.2 + diff --git a/gnu/packages/patches/xmoto-remove-glext.patch b/gnu/packages/patches/xmoto-remove-glext.patch deleted file mode 100644 index ad0c848d1d..0000000000 --- a/gnu/packages/patches/xmoto-remove-glext.patch +++ /dev/null @@ -1,23 +0,0 @@ -Description: Allow building without upstream-supplied glext.h -Author: Stephen Kitt -Bug: http://todo.xmoto.tuxfamily.org/index.php?do=details&task_id=803 - ---- xmoto-0.5.9+dfsg.orig/src/include/xm_OpenGL.h -+++ xmoto-0.5.9+dfsg/src/include/xm_OpenGL.h -@@ -1,7 +1,6 @@ - #ifdef ENABLE_OPENGL - /* Pull in OpenGL headers */ - /* following scissored from SDL_opengl.h */ --#define __glext_h_ /* Don't let gl.h include glext.h */ - #ifdef HAVE_APPLE_OPENGL_FRAMEWORK - #include /* Header File For The OpenGL Library */ - #include /* Header File For The GLU Library */ -@@ -12,8 +11,5 @@ - #include /* Header File For The OpenGL Library */ - #include /* Header File For The GLU Library */ - #endif --#undef __glext_h_ -- --#include "../glext.h" - - #endif diff --git a/gnu/packages/patches/xmoto-reproducible.patch b/gnu/packages/patches/xmoto-reproducible.patch deleted file mode 100644 index 606f4ec714..0000000000 --- a/gnu/packages/patches/xmoto-reproducible.patch +++ /dev/null @@ -1,24 +0,0 @@ -Description: Avoid __DATE__ and __TIME__ to build reproducibly -Author: Stephen Kitt - ---- a/src/GameInit.cpp -+++ b/src/GameInit.cpp -@@ -248,7 +248,6 @@ - Logger::setActiv(XMSession::instance()->noLog() == false); /* apply log activ mode */ - - LogInfo(std::string("X-Moto " + XMBuild::getVersionString(true)).c_str()); -- LogInfo("compiled at "__DATE__" "__TIME__); - if(SwapEndian::bigendien) { - LogInfo("Systeme is bigendien"); - } else { ---- a/src/states/StateOptions.cpp -+++ b/src/states/StateOptions.cpp -@@ -1233,8 +1233,6 @@ - int p=25; - makeWindowOptions_infos_line(v_window, "Version", "X-Moto " + XMBuild::getVersionString(true), p); - p+=20; -- makeWindowOptions_infos_line(v_window, "Compilation date", __DATE__ " " __TIME__, p); -- p+=20; - makeWindowOptions_infos_line(v_window, "User data directory", XMFS::getUserDir(FDT_DATA), p); - p+=20; - makeWindowOptions_infos_line(v_window, "User config directory", XMFS::getUserDir(FDT_CONFIG), p); diff --git a/gnu/packages/patches/xmoto-utf8.patch b/gnu/packages/patches/xmoto-utf8.patch deleted file mode 100644 index e5d0dfb2a4..0000000000 --- a/gnu/packages/patches/xmoto-utf8.patch +++ /dev/null @@ -1,16 +0,0 @@ -Description: Build with g++'s new utf8.h -Author: Stephen Kitt - ---- a/src/helpers/utf8.h -+++ b/src/helpers/utf8.h -@@ -18,8 +18,8 @@ - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - =============================================================================*/ - --#ifndef __UTF8_H__ --#define __UTF8_H__ -+#ifndef __XMOTO_UTF8_H__ -+#define __XMOTO_UTF8_H__ - - #include - #include diff --git a/gnu/packages/perl.scm b/gnu/packages/perl.scm index 42839f4409..41c6da67d4 100644 --- a/gnu/packages/perl.scm +++ b/gnu/packages/perl.scm @@ -57,9 +57,13 @@ (define-module (gnu packages perl) #:use-module (gnu packages bash) #:use-module (gnu packages compression) #:use-module (gnu packages databases) + #:use-module (gnu packages fontutils) #:use-module (gnu packages freedesktop) #:use-module (gnu packages gd) + #:use-module (gnu packages gl) + #:use-module (gnu packages gtk) #:use-module (gnu packages hurd) + #:use-module (gnu packages image) #:use-module (gnu packages less) #:use-module (gnu packages ncurses) #:use-module (gnu packages perl-check) @@ -67,7 +71,9 @@ (define-module (gnu packages perl) #:use-module (gnu packages perl-web) #:use-module (gnu packages pkg-config) #:use-module (gnu packages readline) + #:use-module (gnu packages sdl) #:use-module (gnu packages textutils) + #:use-module (gnu packages video) #:use-module (gnu packages web)) ;;; @@ -321,6 +327,63 @@ (define-public perl-aliased implicitly.") (license (package-license perl)))) +(define-public perl-alien-sdl + (package + (name "perl-alien-sdl") + (version "1.446") + (source + (origin + (method url-fetch) + (uri (string-append "mirror://cpan/authors/id/F/FR/FROGGS/" + "Alien-SDL-" version ".tar.gz")) + (sha256 + (base32 "0ajipk43syhlmw0zinbj1i6r46vdlkr06wkx7ivqjgf6qffjran9")))) + (build-system perl-build-system) + (arguments + `(#:module-build-flags + ;; XXX: For some reason, `sdl-config' reports stand-alone SDL + ;; directory, not SDL-union provided as an input to the + ;; package. We force the latter with "--prefix=" option. + (list (let ((sdl (assoc-ref %build-inputs "sdl"))) + (string-append "--with-sdl-config=" sdl "/bin/sdl-config" + " --prefix=" sdl))) + #:phases + (modify-phases %standard-phases + ;; Fix "unrecognized option: --with-sdl-config" during build. + ;; Reported upstream as + ;; . See also + ;; . + (add-after 'unpack 'fix-build.pl + (lambda _ + (substitute* "Build.PL" + (("use Getopt::Long;") "") + (("GetOptions\\( \"travis\" => \\\\\\$travis \\);") "")) + #t))))) + (native-inputs + `(("perl-archive-extract" ,perl-archive-extract) + ("perl-archive-zip" ,perl-archive-zip) + ("perl-capture-tiny" ,perl-capture-tiny) + ("perl-file-sharedir" ,perl-file-sharedir) + ("perl-file-which" ,perl-file-which) + ("perl-module-build" ,perl-module-build) + ("perl-text-patch" ,perl-text-patch))) + (inputs + `(("freetype" ,freetype) + ("fontconfig" ,fontconfig) + ("pango" ,pango) + ("sdl" ,(sdl-union + (list sdl sdl-gfx sdl-image sdl-mixer sdl-net sdl-ttf + sdl-pango))) + ("zlib" ,zlib))) + (home-page "https://metacpan.org/release/Alien-SDL") + (synopsis "Get, build and use SDL libraries") + (description + "Alien::SDL can be used to detect and get configuration settings from an +installed SDL and related libraries. Based on your platform it offers the +possibility to download and install prebuilt binaries or to build SDL & co.@: +from source codes.") + (license license:perl-license))) + (define-public perl-any-moose (package (name "perl-any-moose") @@ -2850,14 +2913,14 @@ (define-public perl-date-calc-xs (define-public perl-date-manip (package (name "perl-date-manip") - (version "6.78") + (version "6.82") (source (origin (method url-fetch) (uri (string-append "mirror://cpan/authors/id/S/SB/SBECK/" "Date-Manip-" version ".tar.gz")) (sha256 - (base32 "1faxj6gafrqir9hvy9r8q57s93n57b412s04qycrks7r0520hdnb")))) + (base32 "0ak72kpydwhq2z03mhdfwm3ganddzb8gawzh6crpsjvb9kwvr5ps")))) (build-system perl-build-system) (arguments ;; Tests would require tzdata for timezone information, but tzdata is in @@ -4808,15 +4871,14 @@ (define-public perl-filesys-notify-simple (define-public perl-getopt-long (package (name "perl-getopt-long") - (version "2.49.1") + (version "2.51") (source (origin (method url-fetch) (uri (string-append "mirror://cpan/authors/id/J/JV/JV/" - "Getopt-Long-v" (substring version 1) ".tar.gz")) + "Getopt-Long-" version ".tar.gz")) (sha256 - (base32 - "0bw8gbhj8s5gmkqvs3m7pk9arqhgqssrby4yimh29ah9alix9ylq")))) + (base32 "0r659i6rkz8zkfgdccbn29zmd4bk9lcdc4y20ng6w2glqaa3pd10")))) (build-system perl-build-system) (home-page "https://metacpan.org/release/Getopt-Long") (synopsis "Module to handle parsing command line options") @@ -9676,14 +9738,14 @@ (define-public perl-text-csv (define-public perl-text-csv-xs (package (name "perl-text-csv-xs") - (version "1.39") + (version "1.43") (source (origin (method url-fetch) (uri (string-append "mirror://cpan/authors/id/H/HM/HMBRAND/" "Text-CSV_XS-" version ".tgz")) (sha256 - (base32 "1gcy1bxym6f7qsxivkl3c5p94r1bjhf9csy1x38a1gk8mx744kma")))) + (base32 "1frh8awr5ipry21x4403wdkbglpl707n69smksg8sf79ia75756d")))) (build-system perl-build-system) (home-page "https://metacpan.org/release/Text-CSV_XS") (synopsis "Routines for manipulating CSV files") @@ -10704,14 +10766,14 @@ (define-public perl-xs-object-magic (define-public perl-yaml (package (name "perl-yaml") - (version "1.29") + (version "1.30") (source (origin (method url-fetch) (uri (string-append "mirror://cpan/authors/id/T/TI/TINITA/" "YAML-" version ".tar.gz")) (sha256 - (base32 "0gl5ssvrdajlbc85cy6z873n9cwlssk5q8z97a31vyiikhw5fp4w")))) + (base32 "1kbrfksjg4k4vmx1i337m5n69m00m0m5bgsh61c15bzzrgbacc2h")))) (build-system perl-build-system) (native-inputs `(("perl-test-yaml" ,perl-test-yaml))) @@ -10956,6 +11018,46 @@ (define-public perl-scalar-list-utils such that being individual extensions would be wasteful.") (license (package-license perl)))) +(define-public perl-sdl + (package + (name "perl-sdl") + (version "2.548") + (source + (origin + (method url-fetch) + (uri (string-append "mirror://cpan/authors/id/F/FR/FROGGS/" + "SDL-" version ".tar.gz")) + (sha256 + (base32 "1dagpmcpjnwvd4g6mmnc312rqpd4qcwx21rpi2j7084wz8mijai5")))) + (build-system perl-build-system) + (native-inputs + `(("perl-alien-sdl" ,perl-alien-sdl) + ("perl-capture-tiny" ,perl-capture-tiny) + ("perl-file-sharedir" ,perl-file-sharedir) + ("perl-module-build" ,perl-module-build) + ("perl-test-most" ,perl-test-most) + ("perl-tie-simple" ,perl-tie-simple))) + (inputs + `(("freeglut" ,freeglut) + ("libjpeg" ,libjpeg-turbo) + ("libpng" ,libpng) + ("libsmpeg" ,libsmpeg) + ("libtiff" ,libtiff) + ("mesa" ,mesa) + ("sdl" ,(sdl-union + (list sdl sdl-gfx sdl-image sdl-mixer sdl-pango sdl-ttf))))) + (propagated-inputs + `(("perl-file-sharedir" ,perl-file-sharedir) + ("perl-tie-simple" ,perl-tie-simple))) + (home-page "https://metacpan.org/release/SDL") + (synopsis "SDL bindings to Perl") + (description + "SDL Perl is a package of Perl modules that provide both functional and +object oriented interfaces to the Simple DirectMedia Layer for Perl5. This +package takes some liberties with the SDL API, and attempts to adhere to the +spirit of both the SDL and Perl.") + (license license:lgpl2.1))) + (define-public perl-shell-command (package (name "perl-shell-command") diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm index 7e0a738d51..e95dec21c2 100644 --- a/gnu/packages/python-xyz.scm +++ b/gnu/packages/python-xyz.scm @@ -6450,7 +6450,7 @@ (define-public python-ipython (propagated-inputs `(("python-backcall" ,python-backcall) ("python-pyzmq" ,python-pyzmq) - ("python-prompt-toolkit" ,python-prompt-toolkit) + ("python-prompt-toolkit" ,python-prompt-toolkit-2) ("python-terminado" ,python-terminado) ("python-matplotlib" ,python-matplotlib) ("python-numpy" ,python-numpy) @@ -9004,8 +9004,7 @@ (define-public python-widgetsnbextension "1ismyaxbv9d56yqqqb8xl58hg0iq0bbyy014a53y1g3hfbc8g7q7")))) (build-system python-build-system) (propagated-inputs - `(("python-ipykernel" - ,(prompt-toolkit-2-instead-of-prompt-toolkit python-ipykernel)) + `(("python-ipykernel" ,python-ipykernel) ("python-notebook" ,python-notebook))) (native-inputs `(("python-certifi" ,python-certifi) @@ -9032,8 +9031,7 @@ (define-public python-ipywidgets "15sww2mvnkqlvx55gwa82v05062a8j1xpncnqna4k9sl53hgcig9")))) (build-system python-build-system) (propagated-inputs - `(("python-ipython" ,(prompt-toolkit-2-instead-of-prompt-toolkit - python-ipython)) + `(("python-ipython" ,python-ipython) ("python-traitlets" ,python-traitlets) ("python-widgetsnbextension" ,python-widgetsnbextension))) (native-inputs @@ -9063,8 +9061,7 @@ (define-public python-jupyter-console "06s3kr5vx0l1y1b7fxb04dmrppscl7q69sl9yyfr0d057d1ssvkg")))) (build-system python-build-system) (propagated-inputs - `(("python-ipykernel" ,(prompt-toolkit-2-instead-of-prompt-toolkit - python-ipykernel)) + `(("python-ipykernel" ,python-ipykernel) ("python-jupyter-client" ,python-jupyter-client) ("python-prompt-toolkit" ,python-prompt-toolkit-2) ("python-pygments" ,python-pygments))) @@ -11782,7 +11779,8 @@ (define-public python-memcached (uri (pypi-uri "python-memcached" version)) (sha256 (base32 - "0kvyapavbirk2x3n1jx4yb9nyigrj1s3x15nm3qhpvhkpqvqdqm2")))) + "0kvyapavbirk2x3n1jx4yb9nyigrj1s3x15nm3qhpvhkpqvqdqm2")) + (patches (search-patches "python-memcached-syntax-warnings.patch")))) (build-system python-build-system) (propagated-inputs `(("python-six" ,python-six))) (home-page @@ -11886,7 +11884,7 @@ (define-public python-cachy (define-public poetry (package (name "poetry") - (version "1.0.5") + (version "1.0.9") ;; Poetry can only be built from source with Poetry. (source (origin @@ -11894,7 +11892,7 @@ (define-public poetry (uri (pypi-uri "poetry" version)) (sha256 (base32 - "02h387k0xssvv78yy82pcpknpq4w5ym2in1zl8cg9r5wljl5w6cf")))) + "1avp0db1a4hf6lz3wrzhpdvj4rpmzr4in3myrd3lp5j66nc5ck0a")))) (build-system python-build-system) (arguments `(#:tests? #f ;; Pypi does not have tests. @@ -11905,8 +11903,7 @@ (define-public poetry (substitute* "setup.py" ;; poetry won't update version as 21.0.0 relies on python > 3.6 (("keyring>=20.0.1,<21.0.0") "keyring>=21.0.0,<22.0.0") - (("pyrsistent>=0.14.2,<0.15.0") "pyrsistent>=0.14.2,<0.16.0") - (("importlib-metadata>=1.1.3,<1.2.0") "importlib-metadata>=1.1.3,<1.5.0")) + (("pyrsistent>=0.14.2,<0.15.0") "pyrsistent>=0.14.2,<0.17.0")) #t))))) (propagated-inputs `(("python-cachecontrol" ,python-cachecontrol) @@ -11914,9 +11911,9 @@ (define-public poetry ("python-cleo" ,python-cleo) ("python-clikit" ,python-clikit) ("python-html5lib" ,python-html5lib) - ("python-importlib-metadata" ,python-importlib-metadata) ;; python < 3.8 ("python-jsonschema" ,python-jsonschema) ("python-keyring" ,python-keyring) + ("python-msgpack-transitional" ,python-msgpack-transitional) ("python-pexpect" ,python-pexpect) ("python-pkginfo" ,python-pkginfo) ("python-pyparsing" ,python-pyparsing) @@ -12192,10 +12189,6 @@ (define-public python-prompt-toolkit-2 ("python-six" ,python-six) ("python-pygments" ,python-pygments))))) -(define-public prompt-toolkit-2-instead-of-prompt-toolkit - (package-input-rewriting/spec - `(("python-prompt-toolkit" . ,(const python-prompt-toolkit-2))))) - (define-public python2-prompt-toolkit (package-with-python2 python-prompt-toolkit-2)) diff --git a/gnu/packages/radio.scm b/gnu/packages/radio.scm index d18af8f75c..a607ad1bae 100644 --- a/gnu/packages/radio.scm +++ b/gnu/packages/radio.scm @@ -1070,3 +1070,41 @@ (define-public rtl-433 from devices on the 433 MHz, 868 MHz, 315 MHz, 345 MHz and 915 MHz ISM bands.") (home-page "https://github.com/merbanan/rtl_433") (license license:gpl2+))) + +(define-public multimon-ng + (package + (name "multimon-ng") + (version "1.1.8") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/EliasOenal/multimon-ng.git") + (commit version))) + (file-name (git-file-name name version)) + (sha256 + (base32 "1973xfyvzl1viz19zr83cgqlx5laxbjrca35rqabn6dlb6xb5xk8")))) + (build-system cmake-build-system) + (inputs + `(("libx11" ,libx11) + ("pulseaudio" ,pulseaudio))) + (arguments + '(#:tests? #f)) ; No test suite + (home-page "https://github.com/EliasOenal/multimon-ng") + (synopsis "Decoder for digital radio transmission modes") + (description "Multimon-ng can decode several digital radio transmission +modes: +@itemize +@item POCSAG512, POCSAG1200, POCSAG2400 +@item FLEX +@item EAS +@item UFSK1200, CLIPFSK, AFSK1200, AFSK2400, AFSK2400_2, AFSK2400_3 +@item HAPN4800 +@item FSK9600 +@item DTMF +@item ZVEI1, ZVEI2, ZVEI3, DZVEI, PZVEI +@item EEA, EIA, CCIR +@item MORSE CW +@item X10 +@end itemize") + (license license:gpl2+))) diff --git a/gnu/packages/sdl.scm b/gnu/packages/sdl.scm index 6d91727809..e4e452fec5 100644 --- a/gnu/packages/sdl.scm +++ b/gnu/packages/sdl.scm @@ -620,26 +620,17 @@ (define-public guile-sdl (define-public guile-sdl2 (package (name "guile-sdl2") - (version "0.4.0") + (version "0.5.0") (source (origin (method url-fetch) (uri (string-append "https://files.dthompson.us/guile-sdl2/" "guile-sdl2-" version ".tar.gz")) (sha256 (base32 - "0zcxwgyadwpbhq6h5mv2569c3kalgra26zc186y9fqiyyzmh1v9s")))) + "118x0cg7fzbsyrfhy5f9ab7dqp9czgia0ycgzp6sn3nlsdrcnr4m")))) (build-system gnu-build-system) (arguments - '(#:make-flags '("GUILE_AUTO_COMPILE=0") - #:configure-flags - (list (string-append "--with-libsdl2-prefix=" - (assoc-ref %build-inputs "sdl2")) - (string-append "--with-libsdl2-image-prefix=" - (assoc-ref %build-inputs "sdl2-image")) - (string-append "--with-libsdl2-ttf-prefix=" - (assoc-ref %build-inputs "sdl2-ttf")) - (string-append "--with-libsdl2-mixer-prefix=" - (assoc-ref %build-inputs "sdl2-mixer"))))) + '(#:make-flags '("GUILE_AUTO_COMPILE=0"))) (native-inputs `(("guile" ,guile-2.2) ("pkg-config" ,pkg-config))) diff --git a/gnu/packages/shells.scm b/gnu/packages/shells.scm index 8f251bb850..109baacc30 100644 --- a/gnu/packages/shells.scm +++ b/gnu/packages/shells.scm @@ -803,14 +803,14 @@ (define-public oil (package (name "oil") ;; https://www.oilshell.org/blog/2020/04/release-0.8.pre4.html#comment-on-version-numbering - (version "0.8.pre5") + (version "0.8.pre6") (source (origin (method url-fetch) (uri (string-append "https://www.oilshell.org/download/oil-" version ".tar.gz")) (sha256 - (base32 "02llxx10izxpv1y32qn8k6r0y7al01rzxjirc8h6x8nd9kiaqknl")))) + (base32 "11nfwn5b1w74hv78065jg2zm45mqzi59381b0f649j7n3g7yp3iq")))) (build-system gnu-build-system) (arguments `(#:strip-binaries? #f ; strip breaks the binary @@ -827,7 +827,7 @@ (define-public oil (replace 'check ;; The tests are not distributed in the tarballs but upstream ;; recommends running this smoke test. - ;; https://github.com/oilshell/oil/blob/release/0.8.pre5/INSTALL.txt#L38-L48 + ;; https://github.com/oilshell/oil/blob/release/0.8.pre6/INSTALL.txt#L38-L48 (lambda _ (let* ((oil "_bin/oil.ovm")) (invoke/quiet oil "osh" "-c" "echo hi") diff --git a/gnu/packages/statistics.scm b/gnu/packages/statistics.scm index 482eea9178..9e613cd63a 100644 --- a/gnu/packages/statistics.scm +++ b/gnu/packages/statistics.scm @@ -5902,3 +5902,24 @@ (define-public emacs-ess Emacs. It is designed to support editing of scripts and interaction with various statistical analysis programs such as R, Julia, and JAGS.") (license license:gpl2+))) + +(define-public r-boruta + (package + (name "r-boruta") + (version "7.0.0") + (source + (origin + (method url-fetch) + (uri (cran-uri "Boruta" version)) + (sha256 + (base32 + "0y2w4wb45kfnzrxcrdsiwgal9fsnlr3wad1sqdc70qv8gp921xbg")))) + (properties `((upstream-name . "Boruta"))) + (build-system r-build-system) + (propagated-inputs `(("r-ranger" ,r-ranger))) + (home-page "https://gitlab.com/mbq/Boruta/") + (synopsis + "Wrapper Algorithm for All Relevant Feature Selection") + (description + "An all relevant feature selection wrapper algorithm. It finds relevant features by comparing original attributes' importance with importance achievable at random, estimated using their permuted copies (shadows).") + (license license:gpl2+))) diff --git a/gnu/packages/tls.scm b/gnu/packages/tls.scm index ec401416ce..37f62c95bf 100644 --- a/gnu/packages/tls.scm +++ b/gnu/packages/tls.scm @@ -182,9 +182,9 @@ (define-public gnutls "0jvca1qahn9lrwv6f5kfs95icirc15b2a8x9fzczyj996ipg3b5z")))) (build-system gnu-build-system) (arguments - `(,@(if (hurd-target?) '(#:tests? #f) '()) - ; Ensure we don't keep a reference to this buggy software. - #:disallowed-references (,net-tools) + `(#:tests? ,(not (hurd-target?)) + ;; Ensure we don't keep a reference to net-tools. + #:disallowed-references ,(if (hurd-target?) '() (list net-tools)) #:configure-flags (list ;; GnuTLS doesn't consult any environment variables to specify diff --git a/gnu/packages/tor.scm b/gnu/packages/tor.scm index 2f2623b0e6..19ab5cf374 100644 --- a/gnu/packages/tor.scm +++ b/gnu/packages/tor.scm @@ -8,6 +8,7 @@ ;;; Copyright © 2017 Rutger Helling ;;; Copyright © 2018 Ricardo Wurmus ;;; Copyright © 2020 Vincent Legoll +;;; Copyright © 2020 Brice Waegeneire ;;; ;;; This file is part of GNU Guix. ;;; @@ -141,8 +142,28 @@ (define-public privoxy ;; $out/etc/privoxy. #:configure-flags (list (string-append "--sysconfdir=" (assoc-ref %outputs "out") - "/etc/privoxy")) - #:tests? #f)) + "/etc/privoxy") + "--localstatedir=/var") + #:tests? #f ; no test suite + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'patch-default-logging + (lambda _ + (with-fluids ((%default-port-encoding "ISO-8859-1")) + ;; Do not create /var/run nor /var/log/privoxy/logfile. + (substitute* "GNUmakefile.in" + (("(logfile \\|\\| exit )1" _ match) + (string-append match "0")) + (("(\\$\\(DESTDIR\\)\\$\\(SHARE_DEST\\)) \\\\" _ match) + match) + ((".*\\$\\(LOG_DEST\\) \\$\\(DESTDIR\\)\\$\\(PID_DEST\\).*") + "")) + ;; Disable logging in the default configuration to allow for + ;; non-root users using it as is. + (substitute* "config" + (("^logdir") "#logdir") + (("^logfile") "#logfile"))) + #t))))) (inputs `(("w3m" ,w3m) ("pcre" ,pcre) diff --git a/gnu/packages/toys.scm b/gnu/packages/toys.scm index 7f22646d8c..f643e06974 100644 --- a/gnu/packages/toys.scm +++ b/gnu/packages/toys.scm @@ -1,7 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice ;;; Copyright © 2019 Jesse Gibbons -;;; Copyright © 2019 Timotej Lazar +;;; Copyright © 2019, 2020 Timotej Lazar ;;; Copyright © 2020 Efraim Flashner ;;; ;;; This file is part of GNU Guix. @@ -167,7 +167,7 @@ (define-public filters (define-public xsnow (package (name "xsnow") - (version "2.0.15") + (version "2.0.22") (source (origin (method url-fetch) @@ -175,7 +175,7 @@ (define-public xsnow "https://www.ratrabbit.nl/ratrabbit/system/files/xsnow/xsnow-" version ".tar.gz")) (sha256 - (base32 "086s42frbz9bk550414v908yrax4iwwlvlxv4zwp39cyp7wgws03")))) + (base32 "1880643fal6l7bskqbm4zfbr2s719698mkx4pchrxkjpb240sj0z")))) (build-system gnu-build-system) (arguments '(#:phases diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm index 16136b7662..4bd2dca909 100644 --- a/gnu/packages/video.scm +++ b/gnu/packages/video.scm @@ -121,11 +121,13 @@ (define-module (gnu packages video) #:use-module (gnu packages iso-codes) #:use-module (gnu packages libidn) #:use-module (gnu packages libreoffice) + #:use-module (gnu packages libusb) #:use-module (gnu packages linux) #:use-module (gnu packages lua) #:use-module (gnu packages m4) #:use-module (gnu packages man) #:use-module (gnu packages markup) + #:use-module (gnu packages maths) #:use-module (gnu packages mp3) #:use-module (gnu packages ncurses) #:use-module (gnu packages networking) @@ -935,16 +937,14 @@ (define-public libva-utils (define-public ffmpeg (package (name "ffmpeg") - (version "4.2.3") + (version "4.3") (source (origin (method url-fetch) (uri (string-append "https://ffmpeg.org/releases/ffmpeg-" version ".tar.xz")) - ;; See - (patches (search-patches "ffmpeg-prefer-dav1d.patch")) (sha256 (base32 - "0cddkb5sma9dzy8i59sfls19rhjlq40zn9mh3x666dqkxl5ckxlx")))) + "0pbrsv5v96yd8qzb9bk4kw7qk4xqpi03rsd5xfbwnjzlhijd02hx")))) (build-system gnu-build-system) (inputs `(("dav1d" ,dav1d) @@ -971,6 +971,7 @@ (define-public ffmpeg ("mesa" ,mesa) ("openal" ,openal) ("pulseaudio" ,pulseaudio) + ("rav1e" ,rav1e) ("sdl" ,sdl2) ("soxr" ,soxr) ("speex" ,speex) @@ -1052,6 +1053,7 @@ (define-public ffmpeg "--enable-libmp3lame" "--enable-libopus" "--enable-libpulse" + "--enable-librav1e" "--enable-libsoxr" "--enable-libspeex" "--enable-libtheora" @@ -1130,10 +1132,10 @@ (define-public ffmpeg-3.4 (arguments (substitute-keyword-arguments (package-arguments ffmpeg) ((#:configure-flags flags) - `(delete "--enable-libdav1d" (delete "--enable-libaom" - ,flags))))) - (inputs (alist-delete "dav1d" (alist-delete "libaom" - (package-inputs ffmpeg)))))) + `(delete "--enable-libdav1d" (delete "--enable-libaom" (delete "--enable-librav1e" + ,flags)))))) + (inputs (alist-delete "dav1d" (alist-delete "libaom" (alist-delete "rav1e" + (package-inputs ffmpeg))))))) (define-public ffmpeg-for-stepmania (hidden-package @@ -1197,7 +1199,7 @@ (define-public ffmpegthumbnailer (define-public vlc (package (name "vlc") - (version "3.0.10") + (version "3.0.11") (source (origin (method url-fetch) (uri (string-append @@ -1206,7 +1208,7 @@ (define-public vlc "/vlc-" version ".tar.xz")) (sha256 (base32 - "0cackl1084hcmg4myf3kvjvd6sjxmzn0c0qkmanz6brvgzyanrm9")))) + "06a9hfl60f6l0fs5c9ma5s8np8kscm4ala6m2pdfji9lyfna351y")))) (build-system gnu-build-system) (native-inputs `(("flex" ,flex) @@ -1218,10 +1220,6 @@ (define-public vlc (inputs `(("alsa-lib" ,alsa-lib) ("avahi" ,avahi) - ;; XXX Try removing dav1d here and testing AV1 playback when FFmpeg 4.3 - ;; is released. - ;; - ("dav1d" ,dav1d) ("dbus" ,dbus) ("eudev" ,eudev) ("flac" ,flac) @@ -2771,7 +2769,7 @@ (define-public mps-youtube (define-public handbrake (package (name "handbrake") - (version "1.3.2") + (version "1.3.3") (source (origin (method url-fetch) (uri (string-append "https://github.com/HandBrake/HandBrake/" @@ -2779,7 +2777,7 @@ (define-public handbrake "HandBrake-" version "-source.tar.bz2")) (sha256 (base32 - "0w7jxjrccvxp7g15dv0spildg5apmqp4gwbcqmg58va2gylynvzc")) + "11bzhyp052bmng5119x74xvdj5632smx6qsk537ygda8bzckg2i1")) (modules '((guix build utils))) (snippet ;; Remove "contrib" and source not necessary for @@ -4097,3 +4095,42 @@ (define-public wf-recorder wlroots-based compositors. More specifically, those that support @code{wlr-screencopy-v1} and @code{xdg-output}.") (license license:expat))) + +(define-public guvcview + (package + (name "guvcview") + (version "2.0.6") + (source (origin + (method url-fetch) + (uri (string-append "mirror://sourceforge/guvcview/source/guvcview-" + "src-" version ".tar.gz")) + (sha256 + (base32 + "11byyfpkcik7wvf2qic77zjamfr2rhji97dpj1gy2fg1bvpiqf4m")))) + (build-system gnu-build-system) + (arguments + ;; There are no tests and "make check" would fail on an intltool error. + '(#:tests? #f)) + (native-inputs + `(("pkg-config" ,pkg-config) + ("intltool" ,intltool))) + (inputs + `(("gtk+" ,gtk+) + ("eudev" ,eudev) + ("libusb" ,libusb) + ("v4l-utils" ,v4l-utils) ;libv4l2 + ("ffmpeg" ,ffmpeg) ;libavcodec, libavutil + ("sdl2" ,sdl2) + ("gsl" ,gsl) + ("portaudio" ,portaudio) + ("alsa-lib" ,alsa-lib))) + (home-page "http://guvcview.sourceforge.net/") + (synopsis "Control your webcam and capture videos and images") + (description + "GTK+ UVC Viewer (guvcview) is a graphical application to control a +webcam accessible with Video4Linux (V4L2) and to capture videos and images. +It provides control over precise settings of the webcam such as exposure, +brightness, contrast, and frame rate.") + + ;; 'COPYING' is GPLv3 but source headers say GPLv2+. + (license license:gpl2+))) diff --git a/gnu/packages/wm.scm b/gnu/packages/wm.scm index 615ac788ed..61cbedef5c 100644 --- a/gnu/packages/wm.scm +++ b/gnu/packages/wm.scm @@ -694,14 +694,14 @@ (define-public xmonad (define-public xmobar (package (name "xmobar") - (version "0.33") + (version "0.34") (source (origin (method url-fetch) (uri (string-append "mirror://hackage/package/xmobar/" "xmobar-" version ".tar.gz")) (sha256 (base32 - "1hr3qqykc5givcpcwrr9f2y920jmiinmxm5mcy6qgpgymgwqb618")))) + "0x09xbz7y9ay0046j1xpr9jjk5jqivqi06vm3q6mhcrgc4y922rx")))) (build-system haskell-build-system) (native-inputs `(("ghc-hspec" ,ghc-hspec) diff --git a/gnu/services/shepherd.scm b/gnu/services/shepherd.scm index 77c4d0a8be..e14ceca231 100644 --- a/gnu/services/shepherd.scm +++ b/gnu/services/shepherd.scm @@ -266,8 +266,7 @@ (define (shepherd-service-file service) (define (scm->go file) "Compile FILE, which contains code to be loaded by shepherd's config file, and return the resulting '.go' file." - ;; FIXME: %current-target-system may not be bound - (let ((target (%current-target-system))) + (let-system (system target) (with-extensions (list shepherd) (computed-file (string-append (basename (scheme-file-name file) ".scm") ".go") diff --git a/gnu/services/virtualization.scm b/gnu/services/virtualization.scm index 989e439d5d..1a15ffbd48 100644 --- a/gnu/services/virtualization.scm +++ b/gnu/services/virtualization.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2017 Ryan Moe ;;; Copyright © 2018 Ludovic Courtès +;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen ;;; ;;; This file is part of GNU Guix. ;;; @@ -18,24 +19,45 @@ ;;; along with GNU Guix. If not, see . (define-module (gnu services virtualization) - #:use-module (gnu services) - #:use-module (gnu services configuration) + #:use-module (gnu bootloader) + #:use-module (gnu bootloader grub) + #:use-module (gnu image) + #:use-module (gnu packages admin) + #:use-module (gnu packages ssh) + #:use-module (gnu packages virtualization) #:use-module (gnu services base) + #:use-module (gnu services configuration) #:use-module (gnu services dbus) #:use-module (gnu services shepherd) - #:use-module (gnu system shadow) + #:use-module (gnu services ssh) + #:use-module (gnu services) #:use-module (gnu system file-systems) - #:use-module (gnu packages admin) - #:use-module (gnu packages virtualization) - #:use-module (guix records) + #:use-module (gnu system hurd) + #:use-module (gnu system image) + #:use-module (gnu system shadow) + #:use-module (gnu system) + #:use-module (guix derivations) #:use-module (guix gexp) + #:use-module (guix monads) #:use-module (guix packages) + #:use-module (guix records) + #:use-module (guix store) + #:use-module (guix utils) + #:use-module (srfi srfi-9) #:use-module (srfi srfi-26) #:use-module (rnrs bytevectors) #:use-module (ice-9 match) - #:export (libvirt-configuration + #:export (%hurd-vm-operating-system + hurd-vm-configuration + hurd-vm-disk-image + hurd-vm-id + hurd-vm-net-options + hurd-vm-options + hurd-vm-service-type + + libvirt-configuration libvirt-service-type virtlog-configuration virtlog-service-type @@ -773,3 +795,112 @@ (define qemu-binfmt-service-type "This service supports transparent emulation of binaries compiled for other architectures using QEMU and the @code{binfmt_misc} functionality of the kernel Linux."))) + + +;;; +;;; The Hurd in VM service: a Childhurd. +;;; + +(define %hurd-vm-operating-system + (operating-system + (inherit %hurd-default-operating-system) + (host-name "childhurd") + (timezone "Europe/Amsterdam") + (bootloader (bootloader-configuration + (bootloader grub-minimal-bootloader) + (target "/dev/vda") + (timeout 0))) + (services (cons* + (service openssh-service-type + (openssh-configuration + (openssh openssh-sans-x) + (use-pam? #f) + (port-number 2222) + (permit-root-login #t) + (allow-empty-passwords? #t) + (password-authentication? #t))) + %base-services/hurd)))) + +(define-record-type* + hurd-vm-configuration make-hurd-vm-configuration + hurd-vm-configuration? + (os hurd-vm-configuration-os ; + (default %hurd-vm-operating-system)) + (qemu hurd-vm-configuration-qemu ; + (default qemu-minimal)) + (image hurd-vm-configuration-image ;string + (thunked) + (default (hurd-vm-disk-image this-record))) + (disk-size hurd-vm-configuration-disk-size ;number or 'guess + (default 'guess)) + (memory-size hurd-vm-configuration-memory-size ;number + (default 512)) + (options hurd-vm-configuration-options ;list of string + (default `("--snapshot"))) + (id hurd-vm-configuration-id ;#f or integer [1..] + (default #f)) + (net-options hurd-vm-configuration-net-options ;list of string + (thunked) + (default (hurd-vm-net-options this-record)))) + +(define (hurd-vm-disk-image config) + "Return a disk-image for the Hurd according to CONFIG." + (let ((os (hurd-vm-configuration-os config)) + (disk-size (hurd-vm-configuration-disk-size config))) + (system-image + (image + (inherit hurd-disk-image) + (size disk-size) + (operating-system os))))) + +(define (hurd-vm-net-options config) + (let ((id (or (hurd-vm-configuration-id config) 0))) + (define (qemu-vm-port base) + (number->string (+ base (* 1000 id)))) + `("--device" "rtl8139,netdev=net0" + "--netdev" ,(string-append + "user,id=net0" + ",hostfwd=tcp:127.0.0.1:" (qemu-vm-port 10022) "-:2222" + ",hostfwd=tcp:127.0.0.1:" (qemu-vm-port 15900) "-:5900")))) + +(define (hurd-vm-shepherd-service config) + "Return a for a Hurd in a Virtual Machine with CONFIG." + + (let ((image (hurd-vm-configuration-image config)) + (qemu (hurd-vm-configuration-qemu config)) + (memory-size (hurd-vm-configuration-memory-size config)) + (options (hurd-vm-configuration-options config)) + (id (hurd-vm-configuration-id config)) + (net-options (hurd-vm-configuration-net-options config)) + (provisions '(hurd-vm childhurd))) + + (define vm-command + #~(list + (string-append #$qemu "/bin/qemu-system-i386") + #$@(if (file-exists? "/dev/kvm") '("--enable-kvm") '()) + "-m" (number->string #$memory-size) + #$@net-options + #$@options + "--hda" #+image)) + + (list + (shepherd-service + (documentation "Run the Hurd in a Virtual Machine: a Childhurd.") + (provision (if id + (map + (cute symbol-append <> + (string->symbol (number->string id))) + provisions) + provisions)) + (requirement '(networking)) + (start #~(make-forkexec-constructor #$vm-command)) + (stop #~(make-kill-destructor)))))) + +(define hurd-vm-service-type + (service-type + (name 'hurd-vm) + (extensions (list (service-extension shepherd-root-service-type + hurd-vm-shepherd-service))) + (default-value (hurd-vm-configuration)) + (description + "Provide a Virtual Machine running the GNU/Hurd."))) diff --git a/gnu/system.scm b/gnu/system.scm index d51691fe76..44baacee7b 100644 --- a/gnu/system.scm +++ b/gnu/system.scm @@ -941,7 +941,9 @@ (define %setuid-programs ;; Default set of setuid-root programs. (let ((shadow (@ (gnu packages admin) shadow))) (list (file-append shadow "/bin/passwd") + (file-append shadow "/bin/sg") (file-append shadow "/bin/su") + (file-append shadow "/bin/newgrp") (file-append shadow "/bin/newuidmap") (file-append shadow "/bin/newgidmap") (file-append inetutils "/bin/ping") @@ -1191,6 +1193,7 @@ (define (hurd-multiboot-modules os) "--device-master-port='${device-port}'" "--exec-server-task='${exec-task}'" "--store-type=typed" + "--x-xattr-translator-records" "'${root}'" "'$(task-create)'" "'$(task-resume)'")) (target (%current-target-system)) (libc (if target diff --git a/gnu/system/hurd.scm b/gnu/system/hurd.scm index 2205def577..43d98cc8c2 100644 --- a/gnu/system/hurd.scm +++ b/gnu/system/hurd.scm @@ -81,7 +81,10 @@ (define %base-services/hurd (service guix-service-type (guix-configuration (extra-options '("--disable-chroot" - "--disable-deduplication")))))) + "--disable-deduplication")))) + (service special-files-service-type + `(("/bin/sh" ,(file-append bash "/bin/sh")) + ("/usr/bin/env" ,(file-append coreutils "/bin/env")))))) (define %hurd-default-operating-system (operating-system diff --git a/gnu/system/image.scm b/gnu/system/image.scm index 1bda25fd7f..26ffa028fe 100644 --- a/gnu/system/image.scm +++ b/gnu/system/image.scm @@ -524,15 +524,15 @@ (define* (system-image image) "Return the derivation of IMAGE. It can be a raw disk-image or an ISO9660 image, depending on IMAGE format." (define substitutable? (image-substitutable? image)) + (define target (image-target image)) - (let* ((os (operating-system-for-image image)) - (image* (image-with-os image os)) - (target (image-target image)) - (register-closures? (has-guix-service-type? os)) - (bootcfg (operating-system-bootcfg os)) - (bootloader (bootloader-configuration-bootloader - (operating-system-bootloader os)))) - (with-parameters ((%current-target-system target)) + (with-parameters ((%current-target-system target)) + (let* ((os (operating-system-for-image image)) + (image* (image-with-os image os)) + (register-closures? (has-guix-service-type? os)) + (bootcfg (operating-system-bootcfg os)) + (bootloader (bootloader-configuration-bootloader + (operating-system-bootloader os)))) (case (image-format image) ((disk-image) (system-disk-image image* @@ -573,8 +573,4 @@ (define (find-image file-system-type target) (else efi-disk-image))))) -;;; Local Variables: -;;; eval: (put 'maybe-with-target 'scheme-indent-function 1) -;;; End: - ;;; image.scm ends here diff --git a/gnu/system/uuid.scm b/gnu/system/uuid.scm index 225959e2b7..bc3af69610 100644 --- a/gnu/system/uuid.scm +++ b/gnu/system/uuid.scm @@ -298,5 +298,5 @@ (define uuid=? (bytevector=? (uuid-bytevector a) b)) (((? uuid? a) (? uuid? b)) (bytevector=? (uuid-bytevector a) (uuid-bytevector b))) - ((a b) + (((or (? uuid? a) (? bytevector? a)) (or (? uuid? b) (? bytevector? b))) (uuid=? b a)))) diff --git a/guix/build-system/cmake.scm b/guix/build-system/cmake.scm index 29259c5785..f590b6ea42 100644 --- a/guix/build-system/cmake.scm +++ b/guix/build-system/cmake.scm @@ -2,6 +2,7 @@ ;;; Copyright © 2013, 2014, 2015, 2020 Ludovic Courtès ;;; Copyright © 2013 Cyril Roelandt ;;; Copyright © 2017 Ricardo Wurmus +;;; Copyright © 2020 Efraim Flashner ;;; ;;; This file is part of GNU Guix. ;;; @@ -113,6 +114,7 @@ (define* (cmake-build store name inputs (phases '(@ (guix build cmake-build-system) %standard-phases)) (system (%current-system)) + (substitutable? #t) (imported-modules %cmake-build-system-modules) (modules '((guix build cmake-build-system) (guix build utils)))) @@ -162,6 +164,7 @@ (define guile-for-build #:inputs inputs #:modules imported-modules #:outputs outputs + #:substitutable? substitutable? #:guile-for-build guile-for-build)) @@ -192,6 +195,7 @@ (define* (cmake-cross-build store name "bin" "sbin")) (phases '(@ (guix build cmake-build-system) %standard-phases)) + (substitutable? #t) (system (%current-system)) (build (nix-system->gnu-triplet system)) (imported-modules %cmake-build-system-modules) @@ -271,6 +275,7 @@ (define guile-for-build #:inputs (append native-drvs target-drvs) #:outputs outputs #:modules imported-modules + #:substitutable? substitutable? #:guile-for-build guile-for-build)) (define cmake-build-system diff --git a/guix/build-system/gnu.scm b/guix/build-system/gnu.scm index f59567febb..6b481ad45c 100644 --- a/guix/build-system/gnu.scm +++ b/guix/build-system/gnu.scm @@ -235,25 +235,21 @@ (define* (dist-package p source #:key (phases '%dist-phases)) (source s) (arguments ;; Use the right phases and modules. - (let* ((args (default-keyword-arguments (package-arguments p) - `(#:phases #f - #:modules ,%default-modules - #:imported-modules ,%gnu-build-system-modules)))) - (substitute-keyword-arguments args - ((#:modules modules) - `((guix build gnu-dist) - ,@modules)) - ((#:imported-modules modules) - `((guix build gnu-dist) - ,@modules)) - ((#:phases _) - phases)))) + (substitute-keyword-arguments (package-arguments p) + ((#:modules modules %default-modules) + `((guix build gnu-dist) + ,@modules)) + ((#:imported-modules modules %gnu-build-system-modules) + `((guix build gnu-dist) + ,@modules)) + ((#:phases _ #f) + phases))) (native-inputs ;; Add autotools & co. as inputs. (let ((ref (lambda (module var) (module-ref (resolve-interface module) var)))) `(,@(package-native-inputs p) - ("autoconf" ,((ref '(gnu packages autotools) 'autoconf-wrapper))) + ("autoconf" ,(ref '(gnu packages autotools) 'autoconf-wrapper)) ("automake" ,(ref '(gnu packages autotools) 'automake)) ("libtool" ,(ref '(gnu packages autotools) 'libtool)) ("gettext" ,(ref '(gnu packages gettext) 'gnu-gettext)) @@ -517,9 +513,11 @@ (define* (gnu-cross-build store name (define canonicalize-reference (match-lambda ((? package? p) - (derivation->output-path (package-cross-derivation store p system))) + (derivation->output-path (package-cross-derivation store p + target system))) (((? package? p) output) - (derivation->output-path (package-cross-derivation store p system) + (derivation->output-path (package-cross-derivation store p + target system) output)) ((? string? output) output))) diff --git a/guix/build/gnu-dist.scm b/guix/build/gnu-dist.scm index bf1c63cb85..fce1cd0759 100644 --- a/guix/build/gnu-dist.scm +++ b/guix/build/gnu-dist.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2013, 2015 Ludovic Courtès +;;; Copyright © 2013, 2015, 2020 Ludovic Courtès ;;; Copyright © 2018 Mark H Weaver ;;; ;;; This file is part of GNU Guix. @@ -30,26 +30,6 @@ (define-module (guix build gnu-dist) ;;; ;;; Code: -(define* (copy-source #:key source #:allow-other-keys) - (copy-recursively source ".")) - -(define* (autoreconf #:rest args) - (letrec-syntax ((try-files (syntax-rules (else) - ((_ (else fallback ...)) - (begin fallback ...)) - ((_ file files ... (else fallback ...)) - (if (file-exists? file) - (begin - (format #t "bootstrapping with `~a'...~%" - file) - (invoke (string-append "./" file))) - (try-files files ... - (else fallback ...))))))) - (try-files "bootstrap" "bootstrap.sh" "autogen" "autogen.sh" - (else - (format #t "bootstrapping with `autoreconf'...~%") - (invoke "autoreconf" "-vfi"))))) - (define* (build #:key build-before-dist? make-flags (dist-target "distcheck") #:allow-other-keys #:rest args) @@ -60,23 +40,10 @@ (define* (build #:key build-before-dist? make-flags (dist-target "distcheck") (apply invoke "make" dist-target make-flags)) (define* (install-dist #:key outputs #:allow-other-keys) - (let* ((out (assoc-ref outputs "out")) - (meta (string-append out "/nix-support")) ; Hydra meta-data - (tarballs (find-files "." "\\.tar\\."))) - (mkdir out) + (let ((out (assoc-ref outputs "out"))) (for-each (lambda (tarball) - (copy-file tarball (string-append out "/" tarball))) - out) - - (mkdir meta) - (call-with-output-file (string-append out "/hydra-build-products") - (lambda (port) - (for-each (lambda (tarball) - ;; This tells Hydra's what kind of build products we have, - ;; so it can represent them nicely. See `product-list.tt' - ;; in Hydra for details. - (format port "file source-dist ~a/~a~%" out tarball)) - tarballs))) + (install-file tarball out)) + (find-files "." "\\.tar\\.")) #t)) (define %dist-phases @@ -84,8 +51,7 @@ (define %dist-phases (modify-phases %standard-phases (delete 'strip) (replace 'install install-dist) - (replace 'build build) - (add-before 'configure 'autoreconf autoreconf) - (replace 'unpack copy-source))) + (add-after 'build 'build-dist build) + (delete 'build))) ;;; gnu-dist.scm ends here diff --git a/guix/build/lisp-utils.scm b/guix/build/lisp-utils.scm index c7a589c902..5bb3d81c9e 100644 --- a/guix/build/lisp-utils.scm +++ b/guix/build/lisp-utils.scm @@ -186,13 +186,17 @@ (define (compiled-system system) (_ system)))) (define* (generate-system-definition system - #:key version dependencies) + #:key version dependencies component?) `(asdf:defsystem ,(normalize-string system) - :class asdf/bundle:prebuilt-system + ,@(if component? + '(:class asdf/bundle:prebuilt-system) + '()) :version ,version :depends-on ,dependencies - :components ((:compiled-file ,(compiled-system system))) + ,@(if component? + `(:components ((:compiled-file ,(compiled-system system)))) + '()) ,@(if (string=? "ecl" (%lisp-type)) `(:lib ,(string-append system ".a")) '()))) @@ -311,14 +315,20 @@ (define registry lisp-input-map) (map dependency-name dependencies))) + ;; Ensure directory exists, which might not be the case for an .asd without components. + (mkdir-p (dirname asd-file)) (call-with-output-file asd-file (lambda (port) (display (replace-escaped-macros (format #f "~y~%~y~%" - (generate-system-definition system - #:version version - #:dependencies dependencies) + (generate-system-definition + system + #:version version + #:dependencies dependencies + ;; Some .asd don't have components, and thus they don't generate any .fasl. + #:component? (pair? + (find-files (dirname asd-file) "--system\\.fasl$"))) (generate-dependency-links registry system))) port)))) diff --git a/guix/build/profiles.scm b/guix/build/profiles.scm index 1dc7976879..67ee9b665a 100644 --- a/guix/build/profiles.scm +++ b/guix/build/profiles.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2015, 2017, 2018, 2019 Ludovic Courtès +;;; Copyright © 2015, 2017, 2018, 2019, 2020 Ludovic Courtès ;;; ;;; This file is part of GNU Guix. ;;; @@ -167,6 +167,10 @@ (define manifest-file ;; Store meta-data. (call-with-output-file manifest-file (lambda (p) + (display "\ +;; This file was automatically generated and is for internal use only. +;; It cannot be passed to the '--manifest' option.\n\n" + p) (pretty-print manifest p))) ;; Make sure we can write to 'OUTPUT/etc'. 'union-build' above could have diff --git a/guix/channels.scm b/guix/channels.scm index 84c47fc0d0..3eec5df883 100644 --- a/guix/channels.scm +++ b/guix/channels.scm @@ -21,6 +21,11 @@ (define-module (guix channels) #:use-module (git) #:use-module (guix git) + #:use-module (guix git-authenticate) + #:use-module ((guix openpgp) + #:select (openpgp-public-key-fingerprint + openpgp-format-fingerprint)) + #:use-module (guix base16) #:use-module (guix records) #:use-module (guix gexp) #:use-module (guix modules) @@ -28,6 +33,7 @@ (define-module (guix channels) #:use-module (guix monads) #:use-module (guix profiles) #:use-module (guix packages) + #:use-module (guix progress) #:use-module (guix derivations) #:use-module (guix combinators) #:use-module (guix diagnostics) @@ -48,17 +54,23 @@ (define-module (guix channels) #:autoload (guix self) (whole-package make-config.scm) #:autoload (guix inferior) (gexp->derivation-in-inferior) ;FIXME: circular dep #:autoload (guix quirks) (%quirks %patches applicable-patch? apply-patch) + #:use-module (ice-9 format) #:use-module (ice-9 match) #:use-module (ice-9 vlist) #:use-module ((ice-9 rdelim) #:select (read-string)) + #:use-module ((rnrs bytevectors) #:select (bytevector=?)) #:export (channel channel? channel-name channel-url channel-branch channel-commit + channel-introduction channel-location + channel-introduction? + ;; accessors purposefully omitted for now. + %default-channels guix-channel? @@ -67,6 +79,7 @@ (define-module (guix channels) channel-instance-commit channel-instance-checkout + authenticate-channel latest-channel-instances checkout->channel-instance latest-channel-derivation @@ -104,20 +117,63 @@ (define-record-type* channel make-channel (url channel-url) (branch channel-branch (default "master")) (commit channel-commit (default #f)) + (introduction channel-introduction (default #f)) (location channel-location (default (current-source-location)) (innate))) +;; Channel introductions. A "channel introduction" provides a commit/signer +;; pair that specifies the first commit of the authentication process as well +;; as its signer's fingerprint. The pair must be signed by the signer of that +;; commit so that only them may emit this introduction. Introductions are +;; used to bootstrap trust in a channel. +(define-record-type + (make-channel-introduction first-signed-commit first-commit-signer + signature) + channel-introduction? + (first-signed-commit channel-introduction-first-signed-commit) ;hex string + (first-commit-signer channel-introduction-first-commit-signer) ;bytevector + (signature channel-introduction-signature)) ;string + +(define %guix-channel-introduction + ;; Introduction of the official 'guix channel. The chosen commit is the + ;; first one that introduces '.guix-authorizations' on the 'staging' + ;; branch that was eventually merged in 'master'. Any branch starting + ;; before that commit cannot be merged or it will be rejected by 'guix pull' + ;; & co. + (make-channel-introduction + "9edb3f66fd807b096b48283debdcddccfea34bad" ;2020-05-26 + (base16-string->bytevector + (string-downcase + (string-filter char-set:hex-digit ;mbakke + "BBB0 2DDF 2CEA F6A8 0D1D E643 A2A0 6DF2 A33A 54FA"))) + #f)) ;TODO: Add an intro signature so it can be exported. + +(define %default-channel-url + ;; URL of the default 'guix' channel. + "https://git.savannah.gnu.org/git/guix.git") + (define %default-channels ;; Default list of channels. (list (channel (name 'guix) (branch "master") - (url "https://git.savannah.gnu.org/git/guix.git")))) + (url %default-channel-url) + (introduction %guix-channel-introduction)))) (define (guix-channel? channel) "Return true if CHANNEL is the 'guix' channel." (eq? 'guix (channel-name channel))) +(define (ensure-default-introduction chan) + "If CHAN represents the \"official\" 'guix' channel and lacks an +introduction, add it." + (if (and (guix-channel? chan) + (not (channel-introduction chan)) + (string=? (channel-url chan) %default-channel-url)) + (channel (inherit chan) + (introduction %guix-channel-introduction)) + chan)) + (define-record-type (channel-instance channel commit checkout) channel-instance? @@ -126,11 +182,17 @@ (define-record-type (checkout channel-instance-checkout)) (define-record-type - (channel-metadata directory dependencies news-file) + (channel-metadata directory dependencies news-file keyring-reference url) channel-metadata? (directory channel-metadata-directory) ;string with leading slash (dependencies channel-metadata-dependencies) ;list of - (news-file channel-metadata-news-file)) ;string | #f + (news-file channel-metadata-news-file) ;string | #f + (keyring-reference channel-metadata-keyring-reference) ;string + (url channel-metadata-url)) ;string | #f + +(define %default-keyring-reference + ;; Default value of the 'keyring-reference' field. + "keyring") (define (channel-reference channel) "Return the \"reference\" for CHANNEL, an sexp suitable for @@ -147,7 +209,11 @@ (define (read-channel-metadata port) (('channel ('version 0) properties ...) (let ((directory (and=> (assoc-ref properties 'directory) first)) (dependencies (or (assoc-ref properties 'dependencies) '())) - (news-file (and=> (assoc-ref properties 'news-file) first))) + (news-file (and=> (assoc-ref properties 'news-file) first)) + (url (and=> (assoc-ref properties 'url) first)) + (keyring-reference + (or (and=> (assoc-ref properties 'keyring-reference) first) + %default-keyring-reference))) (channel-metadata (cond ((not directory) "/") ;directory ((string-prefix? "/" directory) directory) @@ -164,7 +230,9 @@ (define (read-channel-metadata port) (url url) (commit (get 'commit)))))) dependencies) - news-file))) ;news-file + news-file + keyring-reference + url))) ((and ('channel ('version version) _ ...) sexp) (raise (condition (&message (message "unsupported '.guix-channel' version")) @@ -188,7 +256,7 @@ (define (read-channel-metadata-from-source source) read-channel-metadata)) (lambda args (if (= ENOENT (system-error-errno args)) - (channel-metadata "/" '() #f) + (channel-metadata "/" '() #f %default-keyring-reference #f) (apply throw args))))) (define (channel-instance-metadata instance) @@ -212,19 +280,137 @@ (define (apply-patches checkout commit patches) (apply-patch patch checkout)) (loop rest))))) +(define commit-short-id + (compose (cut string-take <> 7) oid->string commit-id)) + +(define (verify-introductory-commit repository introduction keyring) + "Raise an exception if the first commit described in INTRODUCTION doesn't +have the expected signer." + (define commit-id + (channel-introduction-first-signed-commit introduction)) + + (define actual-signer + (openpgp-public-key-fingerprint + (commit-signing-key repository (string->oid commit-id) + keyring))) + + (define expected-signer + (channel-introduction-first-commit-signer introduction)) + + (unless (bytevector=? expected-signer actual-signer) + (raise (condition + (&message + (message (format #f (G_ "initial commit ~a is signed by '~a' \ +instead of '~a'") + commit-id + (openpgp-format-fingerprint actual-signer) + (openpgp-format-fingerprint expected-signer)))))))) + +(define* (authenticate-channel channel checkout commit + #:key (keyring-reference-prefix "origin/")) + "Authenticate the given COMMIT of CHANNEL, available at CHECKOUT, a +directory containing a CHANNEL checkout. Raise an error if authentication +fails." + ;; XXX: Too bad we need to re-open CHECKOUT. + (with-repository checkout repository + (define start-commit + (commit-lookup repository + (string->oid + (channel-introduction-first-signed-commit + (channel-introduction channel))))) + + (define end-commit + (commit-lookup repository (string->oid commit))) + + (define cache-key + (string-append "channels/" (symbol->string (channel-name channel)))) + + (define keyring-reference + (channel-metadata-keyring-reference + (read-channel-metadata-from-source checkout))) + + (define keyring + (load-keyring-from-reference repository + (string-append keyring-reference-prefix + keyring-reference))) + + (define authenticated-commits + ;; Previously-authenticated commits that don't need to be checked again. + (filter-map (lambda (id) + (false-if-exception + (commit-lookup repository (string->oid id)))) + (previously-authenticated-commits cache-key))) + + (define commits + ;; Commits to authenticate, excluding the closure of + ;; AUTHENTICATED-COMMITS. + (commit-difference end-commit start-commit + authenticated-commits)) + + (define reporter + (progress-reporter/bar (length commits))) + + ;; When COMMITS is empty, it's because END-COMMIT is in the closure of + ;; START-COMMIT and/or AUTHENTICATED-COMMITS, in which case it's known to + ;; be authentic already. + (unless (null? commits) + (format (current-error-port) + (G_ "Authenticating channel '~a', \ +commits ~a to ~a (~h new commits)...~%") + (channel-name channel) + (commit-short-id start-commit) + (commit-short-id end-commit) + (length commits)) + + ;; If it's our first time, verify CHANNEL's introductory commit. + (when (null? authenticated-commits) + (verify-introductory-commit repository + (channel-introduction channel) + keyring)) + + (call-with-progress-reporter reporter + (lambda (report) + (authenticate-commits repository commits + #:keyring keyring + #:report-progress report))) + + (cache-authenticated-commit cache-key + (oid->string + (commit-id end-commit)))))) + (define* (latest-channel-instance store channel #:key (patches %patches) - starting-commit) - "Return two values: the latest channel instance for CHANNEL, and its -relation to STARTING-COMMIT when provided." + starting-commit + (authenticate? #f) + (validate-pull + ensure-forward-channel-update)) + "Return the latest channel instance for CHANNEL. When STARTING-COMMIT is +true, call VALIDATE-PULL with CHANNEL, STARTING-COMMIT, the target commit, and +their relation. When AUTHENTICATE? is false, CHANNEL is not authenticated." (define (dot-git? file stat) (and (string=? (basename file) ".git") (eq? 'directory (stat:type stat)))) - (let-values (((checkout commit relation) + (let-values (((channel) + (ensure-default-introduction channel)) + ((checkout commit relation) (update-cached-checkout (channel-url channel) #:ref (channel-reference channel) #:starting-commit starting-commit))) + (when relation + (validate-pull channel starting-commit commit relation)) + + (if authenticate? + (if (channel-introduction channel) + (authenticate-channel channel checkout commit) + ;; TODO: Warn for all the channels once the authentication interface + ;; is public. + (when (guix-channel? channel) + (warning (G_ "channel '~a' lacks an introduction and \ +cannot be authenticated~%") + (channel-name channel)))) + (warning (G_ "channel authentication disabled~%"))) + (when (guix-channel? channel) ;; Apply the relevant subset of PATCHES directly in CHECKOUT. This is ;; safe to do because 'switch-to-ref' eventually does a hard reset. @@ -233,12 +419,11 @@ (define (dot-git? file stat) (let* ((name (url+commit->name (channel-url channel) commit)) (checkout (add-to-store store name #t "sha256" checkout #:select? (negate dot-git?)))) - (values (channel-instance channel commit checkout) - relation)))) + (channel-instance channel commit checkout)))) -(define (ensure-forward-channel-update channel start instance relation) +(define (ensure-forward-channel-update channel start commit relation) "Raise an error if RELATION is not 'ancestor, meaning that START is not an -ancestor of the commit in INSTANCE, unless CHANNEL specifies a commit. +ancestor of COMMIT, unless CHANNEL specifies a commit. This procedure implements a channel update policy meant to be used as a #:validate-pull argument." @@ -252,8 +437,7 @@ (define (ensure-forward-channel-update channel start instance relation) (format #f (G_ "\ aborting update of channel '~a' to commit ~a, which is not a descendant of ~a") (channel-name channel) - (channel-instance-commit instance) - start)))) + commit start)))) ;; If the user asked for a specific commit, they might want ;; that to happen nevertheless, so tell them about the @@ -270,14 +454,23 @@ (define (ensure-forward-channel-update channel start instance relation) getting the latest updates. If you think this is not the case, explicitly allow non-forward updates.")))))))))) +(define (channel-instance-primary-url instance) + "Return the primary URL advertised for INSTANCE, or #f if there is no such +information." + (channel-metadata-url (channel-instance-metadata instance))) + (define* (latest-channel-instances store channels #:key (current-channels '()) + (authenticate? #t) (validate-pull ensure-forward-channel-update)) "Return a list of channel instances corresponding to the latest checkouts of CHANNELS and the channels on which they depend. +When AUTHENTICATE? is true, authenticate the subset of CHANNELS that has a +\"channel introduction\". + CURRENT-CHANNELS is the list of currently used channels. It is compared against the newly-fetched instances of CHANNELS, and VALIDATE-PULL is called for each channel update and can choose to emit warnings or raise an error, @@ -312,14 +505,28 @@ (define-values (resulting-channels instances) (G_ "Updating channel '~a' from Git repository at '~a'...~%") (channel-name channel) (channel-url channel)) - (let*-values (((current) - (current-commit (channel-name channel))) - ((instance relation) - (latest-channel-instance store channel - #:starting-commit - current))) - (when relation - (validate-pull channel current instance relation)) + (let* ((current (current-commit (channel-name channel))) + (instance + (latest-channel-instance store channel + #:authenticate? + authenticate? + #:validate-pull + validate-pull + #:starting-commit + current))) + (when authenticate? + ;; CHANNEL is authenticated so we can trust the + ;; primary URL advertised in its metadata and warn + ;; about possibly stale mirrors. + (let ((primary-url (channel-instance-primary-url + instance))) + (unless (or (not primary-url) + (channel-commit channel) + (string=? primary-url (channel-url channel))) + (warning (G_ "pulled channel '~a' from a mirror \ +of ~a, which might be stale~%") + (channel-name channel) + primary-url)))) (let-values (((new-instances new-channels) (loop (channel-instance-dependencies instance) diff --git a/guix/ci.scm b/guix/ci.scm index 8fd05668f2..02eb90e6c3 100644 --- a/guix/ci.scm +++ b/guix/ci.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2018, 2019, 2020 Ludovic Courtès +;;; Copyright © 2020 Mathieu Othacehe ;;; ;;; This file is part of GNU Guix. ;;; @@ -22,12 +23,19 @@ (define-module (guix ci) #:use-module (json) #:use-module (srfi srfi-1) #:use-module (ice-9 match) - #:export (build? + #:export (build-product? + build-product-id + build-product-type + build-product-file-size + build-product-path + + build? build-id build-derivation build-system build-status build-timestamp + build-products checkout? checkout-commit @@ -52,13 +60,28 @@ (define-module (guix ci) ;;; ;;; Code: +(define-json-mapping make-build-product + build-product? + json->build-product + (id build-product-id) ;integer + (type build-product-type) ;string + (file-size build-product-file-size) ;integer + (path build-product-path)) ;string + (define-json-mapping make-build build? json->build (id build-id "id") ;integer (derivation build-derivation) ;string | #f (system build-system) ;string (status build-status "buildstatus" ) ;integer - (timestamp build-timestamp)) ;integer + (timestamp build-timestamp) ;integer + (products build-products "buildproducts" ;* + (lambda (products) + (map json->build-product + ;; Before Cuirass 3db603c1, #f is always returned. + (if (vector? products) + (vector->list products) + '()))))) (define-json-mapping make-checkout checkout? json->checkout @@ -95,7 +118,7 @@ (define* (queued-builds url #:optional (limit %query-limit)) (map json->build (vector->list queue)))) (define* (latest-builds url #:optional (limit %query-limit) - #:key evaluation system) + #:key evaluation system job status) "Return the latest builds performed by the CI server at URL. If EVALUATION is an integer, restrict to builds of EVALUATION. If SYSTEM is true (a system string such as \"x86_64-linux\"), restrict to builds for SYSTEM." @@ -108,7 +131,10 @@ (define* (option name value #:optional (->string identity)) (number->string limit) (option "evaluation" evaluation number->string) - (option "system" system))))) + (option "system" system) + (option "job" job) + (option "status" status + number->string))))) ;; Note: Hydra does not provide a "derivation" field for entries in ;; 'latestbuilds', but Cuirass does. (map json->build (vector->list latest)))) diff --git a/guix/download.scm b/guix/download.scm index 7d6edddbdd..e5df678315 100644 --- a/guix/download.scm +++ b/guix/download.scm @@ -250,7 +250,6 @@ (define %mirrors ;; mirrors keeping old versions at the top level "https://sunsite.icm.edu.pl/packages/ImageMagick/" ;; mirrors moving old versions to "legacy" - "http://mirrors-usa.go-parts.com/mirrors/ImageMagick/" "http://mirror.checkdomain.de/imagemagick/" "http://ftp.surfnet.nl/pub/ImageMagick/" "http://mirror.searchdaimon.com/ImageMagick" @@ -308,7 +307,6 @@ (define %mirrors "http://mirror.its.dal.ca/kde/" "http://mirror.csclub.uwaterloo.ca/kde/" "http://mirror.cc.columbia.edu/pub/software/kde/" - "http://mirrors-usa.go-parts.com/kde" "http://kde.mirrors.hoobly.com/" "http://ftp.ussg.iu.edu/kde/" "http://mirrors.mit.edu/kde/" diff --git a/guix/git-authenticate.scm b/guix/git-authenticate.scm index 0d6f696a0b..082c44ee06 100644 --- a/guix/git-authenticate.scm +++ b/guix/git-authenticate.scm @@ -271,13 +271,13 @@ (define* (authenticate-commits repository commits #:key (default-authorizations '()) (keyring-reference "keyring") + (keyring (load-keyring-from-reference + repository keyring-reference)) (report-progress (const #t))) "Authenticate COMMITS, a list of commit objects, calling REPORT-PROGRESS for each of them. Return an alist showing the number of occurrences of each key. -The OpenPGP keyring is loaded from KEYRING-REFERENCE in REPOSITORY." - (define keyring - (load-keyring-from-reference repository keyring-reference)) - +If KEYRING is omitted, the OpenPGP keyring is loaded from KEYRING-REFERENCE in +REPOSITORY." (fold (lambda (commit stats) (report-progress) (let ((signer (authenticate-commit repository commit keyring @@ -295,33 +295,40 @@ (define keyring ;;; Caching. ;;; -(define (authenticated-commit-cache-file) +(define (authenticated-commit-cache-file key) "Return the name of the file that contains the cache of -previously-authenticated commits." - (string-append (cache-directory) "/authentication/channels/guix")) +previously-authenticated commits for KEY." + (string-append (cache-directory) "/authentication/" key)) -(define (previously-authenticated-commits) - "Return the previously-authenticated commits as a list of commit IDs (hex -strings)." +(define (previously-authenticated-commits key) + "Return the previously-authenticated commits under KEY as a list of commit +IDs (hex strings)." (catch 'system-error (lambda () - (call-with-input-file (authenticated-commit-cache-file) - read)) + (call-with-input-file (authenticated-commit-cache-file key) + (lambda (port) + ;; If PORT has the wrong permissions, it might have been tampered + ;; with by another user so ignore its contents. + (if (= #o600 (stat:perms (stat port))) + (read port) + (begin + (chmod port #o600) + '()))))) (lambda args (if (= ENOENT (system-error-errno args)) '() (apply throw args))))) -(define (cache-authenticated-commit commit-id) - "Record in ~/.cache COMMIT-ID and its closure as authenticated (only -COMMIT-ID is written to cache, though)." +(define (cache-authenticated-commit key commit-id) + "Record in ~/.cache, under KEY, COMMIT-ID and its closure as +authenticated (only COMMIT-ID is written to cache, though)." (define %max-cache-length ;; Maximum number of commits in cache. 200) (let ((lst (delete-duplicates - (cons commit-id (previously-authenticated-commits)))) - (file (authenticated-commit-cache-file))) + (cons commit-id (previously-authenticated-commits key)))) + (file (authenticated-commit-cache-file key))) (mkdir-p (dirname file)) (with-atomic-file-output file (lambda (port) diff --git a/guix/inferior.scm b/guix/inferior.scm index c9a5ee5129..d347754bbc 100644 --- a/guix/inferior.scm +++ b/guix/inferior.scm @@ -687,13 +687,16 @@ (define %inferior-cache-directory (define* (cached-channel-instance store channels #:key + (authenticate? #t) (cache-directory (%inferior-cache-directory)) (ttl (* 3600 24 30))) "Return a directory containing a guix filetree defined by CHANNELS, a list of channels. The directory is a subdirectory of CACHE-DIRECTORY, where entries can be reclaimed after TTL seconds. -This procedure opens a new connection to the build daemon." +This procedure opens a new connection to the build daemon. AUTHENTICATE? +determines whether CHANNELS are authenticated." (define instances - (latest-channel-instances store channels)) + (latest-channel-instances store channels + #:authenticate? authenticate?)) (define key (bytevector->base32-string @@ -732,6 +735,8 @@ (define add-indirect-root* (mbegin %store-monad (show-what-to-build* (list profile)) (built-derivations (list profile)) + ;; Note: Caching is fine even when AUTHENTICATE? is false because + ;; we always call 'latest-channel-instances?'. (symlink* (derivation->output-path profile) cached) (add-indirect-root* cached) (return cached)))))) diff --git a/guix/nar.scm b/guix/nar.scm index eff4becbce..6bb2ea5b96 100644 --- a/guix/nar.scm +++ b/guix/nar.scm @@ -27,8 +27,9 @@ (define-module (guix nar) ;; (guix store) since this is "daemon-side" code. #:use-module (guix store) #:use-module (guix store database) + #:use-module ((guix build store-copy) #:select (store-info)) - #:use-module (guix ui) ; for '_' + #:use-module (guix i18n) #:use-module (gcrypt hash) #:use-module (guix pki) #:use-module (gcrypt pk-crypto) @@ -115,9 +116,8 @@ (define (acquire-lock file) ;; Register TARGET. As a side effect, it resets the timestamps of all ;; its files, recursively, and runs a deduplication pass. - (register-path target - #:references references - #:deriver deriver)) + (register-items db + (list (store-info target deriver references)))) (when lock? (delete-file (string-append target ".lock")) diff --git a/guix/profiles.scm b/guix/profiles.scm index 9df63c97e9..f34f73e17e 100644 --- a/guix/profiles.scm +++ b/guix/profiles.scm @@ -1202,17 +1202,18 @@ (define (linux-module-database manifest) and creates the dependency graph of all these kernel modules. This is meant to be used as a profile hook." - (define kmod ; lazy reference + (define kmod ; lazy reference (module-ref (resolve-interface '(gnu packages linux)) 'kmod)) (define build - (with-imported-modules - (source-module-closure '((guix build utils) + (with-imported-modules (source-module-closure + '((guix build utils) (gnu build linux-modules))) #~(begin (use-modules (ice-9 ftw) (ice-9 match) - (srfi srfi-1) ; append-map + (srfi srfi-1) ; append-map (gnu build linux-modules)) + (let* ((inputs '#$(manifest-inputs manifest)) (module-directories (map (lambda (directory) @@ -1220,20 +1221,25 @@ (define build inputs)) (directory-entries (lambda (directory) - (scandir directory (lambda (basename) - (not - (string-prefix? "." basename)))))) + (or (scandir directory + (lambda (basename) + (not (string-prefix? "." basename)))) + '()))) ;; Note: Should usually result in one entry. (versions (delete-duplicates (append-map directory-entries module-directories)))) - (match versions - ((version) - (let ((old-path (getenv "PATH"))) - (setenv "PATH" #+(file-append kmod "/bin")) - (make-linux-module-directory inputs version #$output) - (setenv "PATH" old-path))) - (_ (error "Specified Linux kernel and Linux kernel modules + (match versions + ((version) + (let ((old-path (getenv "PATH"))) + (setenv "PATH" #+(file-append kmod "/bin")) + (make-linux-module-directory inputs version #$output) + (setenv "PATH" old-path))) + (() + ;; Nothing here, maybe because this is a kernel with + ;; CONFIG_MODULES=n. + (mkdir #$output)) + (_ (error "Specified Linux kernel and Linux kernel modules are not all of the same version"))))))) (gexp->derivation "linux-module-database" build #:local-build? #t diff --git a/guix/scripts/environment.scm b/guix/scripts/environment.scm index 03f455ab7b..d3b8b57ccc 100644 --- a/guix/scripts/environment.scm +++ b/guix/scripts/environment.scm @@ -48,7 +48,8 @@ (define-module (guix scripts environment) #:use-module (srfi srfi-26) #:use-module (srfi srfi-37) #:use-module (srfi srfi-98) - #:export (guix-environment)) + #:export (assert-container-features + guix-environment)) ;; Protect some env vars from purification. Borrowed from nix-shell. (define %precious-variables diff --git a/guix/scripts/pack.scm b/guix/scripts/pack.scm index 518bf6e7e3..e0f9cc1a12 100644 --- a/guix/scripts/pack.scm +++ b/guix/scripts/pack.scm @@ -4,6 +4,7 @@ ;;; Copyright © 2018 Konrad Hinsen ;;; Copyright © 2018 Chris Marusich ;;; Copyright © 2018 Efraim Flashner +;;; Copyright © 2020 Tobias Geerinckx-Rice ;;; ;;; This file is part of GNU Guix. ;;; @@ -81,6 +82,11 @@ (define %compressors #~(#+(file-append xz "/bin/xz") "-e")) (compressor "bzip2" ".bz2" #~(#+(file-append bzip2 "/bin/bzip2") "-9")) + (compressor "zstd" ".zst" + ;; The default level 3 compresses better than gzip in a + ;; fraction of the time, while the highest level 19 + ;; (de)compresses more slowly and worse than xz. + #~(#+(file-append zstd "/bin/zstd") "-3")) (compressor "none" "" #f))) ;; This one is only for use in this module, so don't put it in %compressors. @@ -140,13 +146,16 @@ (define build (define (read-closure closure) (call-with-input-file closure read-reference-graph)) + (define db-file + (store-database-file #:state-directory #$output)) + + (sql-schema #$schema) (let ((items (append-map read-closure '#$labels))) - (register-items items - #:state-directory #$output - #:deduplicate? #f - #:reset-timestamps? #f - #:registration-time %epoch - #:schema #$schema)))))) + (with-database db-file db + (register-items db items + #:deduplicate? #f + #:reset-timestamps? #f + #:registration-time %epoch))))))) (computed-file "store-database" build #:options `(#:references-graphs ,(zip labels items)))) diff --git a/guix/scripts/pull.scm b/guix/scripts/pull.scm index c386d81b8e..f953957161 100644 --- a/guix/scripts/pull.scm +++ b/guix/scripts/pull.scm @@ -82,6 +82,7 @@ (define %default-options (graft? . #t) (debug . 0) (verbosity . 1) + (authenticate-channels? . #t) (validate-pull . ,ensure-forward-channel-update))) (define (show-help) @@ -97,6 +98,9 @@ (define (show-help) --branch=BRANCH download the tip of the specified BRANCH")) (display (G_ " --allow-downgrades allow downgrades to earlier channel revisions")) + (display (G_ " + --disable-authentication + disable channel authentication")) (display (G_ " -N, --news display news compared to the previous generation")) (display (G_ " @@ -165,6 +169,9 @@ (define %options (lambda (opt name arg result) (alist-cons 'validate-pull warn-about-backward-updates result))) + (option '("disable-authentication") #f #f + (lambda (opt name arg result) + (alist-cons 'authenticate-channels? #f result))) (option '(#\p "profile") #t #f (lambda (opt name arg result) (alist-cons 'profile (canonicalize-profile arg) @@ -195,20 +202,18 @@ (define %options %standard-build-options)) -(define (warn-about-backward-updates channel start instance relation) - "Warn about non-forward updates of CHANNEL from START to INSTANCE, without +(define (warn-about-backward-updates channel start commit relation) + "Warn about non-forward updates of CHANNEL from START to COMMIT, without aborting." (match relation ((or 'ancestor 'self) #t) ('descendant (warning (G_ "rolling back channel '~a' from ~a to ~a~%") - (channel-name channel) start - (channel-instance-commit instance))) + (channel-name channel) start commit)) ('unrelated (warning (G_ "moving channel '~a' from ~a to unrelated commit ~a~%") - (channel-name channel) start - (channel-instance-commit instance))))) + (channel-name channel) start commit)))) (define* (display-profile-news profile #:key concise? current-is-newer?) @@ -773,7 +778,8 @@ (define (guix-pull . args) (channels (channel-list opts)) (profile (or (assoc-ref opts 'profile) %current-profile)) (current-channels (profile-channels profile)) - (validate-pull (assoc-ref opts 'validate-pull))) + (validate-pull (assoc-ref opts 'validate-pull)) + (authenticate? (assoc-ref opts 'authenticate-channels?))) (cond ((assoc-ref opts 'query) (process-query opts profile)) ((assoc-ref opts 'generation) @@ -795,7 +801,9 @@ (define (guix-pull . args) #:current-channels current-channels #:validate-pull - validate-pull))) + validate-pull + #:authenticate? + authenticate?))) (format (current-error-port) (N_ "Building from this channel:~%" "Building from these channels:~%" diff --git a/guix/scripts/repl.scm b/guix/scripts/repl.scm index ff1f208894..0ea9c3655c 100644 --- a/guix/scripts/repl.scm +++ b/guix/scripts/repl.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2018, 2019, 2020 Ludovic Courtès ;;; Copyright © 2020 Simon Tournier +;;; Copyright © 2020 Konrad Hinsen ;;; ;;; This file is part of GNU Guix. ;;; @@ -22,6 +23,7 @@ (define-module (guix scripts repl) #:use-module (guix scripts) #:use-module (guix repl) #:use-module (srfi srfi-1) + #:use-module (srfi srfi-26) #:use-module (srfi srfi-37) #:use-module (ice-9 match) #:use-module (rnrs bytevectors) @@ -32,7 +34,8 @@ (define-module (guix scripts repl) ;;; Commentary: ;;; -;;; This command provides a Guile REPL +;;; This command provides a Guile script runner and REPL in an environment +;;; that contains all the modules comprising Guix. (define %default-options `((type . guile))) @@ -63,8 +66,9 @@ (define %options (define (show-help) - (display (G_ "Usage: guix repl [OPTIONS...] -Start a Guile REPL in the Guix execution environment.\n")) + (display (G_ "Usage: guix repl [OPTIONS...] [-- FILE ARGS...] +In the Guix execution environment, run FILE as a Guile script with +command-line arguments ARGS. If no FILE is given, start a Guile REPL.\n")) (display (G_ " -t, --type=TYPE start a REPL of the given TYPE")) (display (G_ " @@ -135,12 +139,13 @@ (define socket (define (guix-repl . args) (define opts - ;; Return the list of package names. (args-fold* args %options (lambda (opt name arg result) (leave (G_ "~A: unrecognized option~%") name)) (lambda (arg result) - (leave (G_ "~A: extraneous argument~%") arg)) + (append `((script . ,arg) + (ignore-dot-guile? . #t)) + result)) %default-options)) (define user-config @@ -148,28 +153,48 @@ (define user-config (lambda (home) (string-append home "/.guile")))) - (with-error-handling - (let ((type (assoc-ref opts 'type))) - (call-with-connection (assoc-ref opts 'listen) - (lambda () - (case type - ((guile) - (save-module-excursion - (lambda () - (set-current-module user-module) - (when (and (not (assoc-ref opts 'ignore-dot-guile?)) - user-config - (file-exists? user-config)) - (load user-config)) + (define (set-user-module) + (set-current-module user-module) + (when (and (not (assoc-ref opts 'ignore-dot-guile?)) + user-config + (file-exists? user-config)) + (load user-config))) - ;; Do not exit repl on SIGINT. - ((@@ (ice-9 top-repl) call-with-sigint) - (lambda () - (start-repl)))))) - ((machine) - (machine-repl)) - (else - (leave (G_ "~a: unknown type of REPL~%") type)))))))) + (define script + (reverse + (filter-map (match-lambda + (('script . script) script) + (_ #f)) + opts))) + + (with-error-handling + + (unless (null? script) + ;; Run script + (save-module-excursion + (lambda () + (set-program-arguments script) + (set-user-module) + (load-in-vicinity "." (car script))))) + + (when (null? script) + ;; Start REPL + (let ((type (assoc-ref opts 'type))) + (call-with-connection (assoc-ref opts 'listen) + (lambda () + (case type + ((guile) + (save-module-excursion + (lambda () + (set-user-module) + ;; Do not exit repl on SIGINT. + ((@@ (ice-9 top-repl) call-with-sigint) + (lambda () + (start-repl)))))) + ((machine) + (machine-repl)) + (else + (leave (G_ "~a: unknown type of REPL~%") type))))))))) ;; Local Variables: ;; eval: (put 'call-with-connection 'scheme-indent-function 1) diff --git a/guix/scripts/system.scm b/guix/scripts/system.scm index 6769a602b1..212b49f008 100644 --- a/guix/scripts/system.scm +++ b/guix/scripts/system.scm @@ -802,8 +802,8 @@ (define bootcfg (check-initrd-modules os))) (mlet* %store-monad - ((target (current-target-system)) - (image -> (find-image file-system-type target)) + ((target* (current-target-system)) + (image -> (find-image file-system-type target*)) (sys (system-derivation-for-action os image action #:file-system-type file-system-type #:image-size image-size diff --git a/guix/scripts/time-machine.scm b/guix/scripts/time-machine.scm index 1e800e160f..f9bcec651a 100644 --- a/guix/scripts/time-machine.scm +++ b/guix/scripts/time-machine.scm @@ -1,6 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2019 Konrad Hinsen -;;; Copyright © 2019 Ludovic Courtès +;;; Copyright © 2019, 2020 Ludovic Courtès ;;; ;;; This file is part of GNU Guix. ;;; @@ -55,6 +55,9 @@ (define (show-help) --commit=COMMIT use the specified COMMIT")) (display (G_ " --branch=BRANCH use the tip of the specified BRANCH")) + (display (G_ " + --disable-authentication + disable channel authentication")) (newline) (show-build-options-help) (newline) @@ -80,6 +83,9 @@ (define %options (option '("branch") #t #f (lambda (opt name arg result) (alist-cons 'ref `(branch . ,arg) result))) + (option '("disable-authentication") #f #f + (lambda (opt name arg result) + (alist-cons 'authenticate-channels? #f result))) (option '(#\h "help") #f #f (lambda args (show-help) @@ -98,6 +104,7 @@ (define %default-options (print-build-trace? . #t) (print-extended-build-trace? . #t) (multiplexed-build-output? . #t) + (authenticate-channels? . #t) (graft? . #t) (debug . 0) (verbosity . 1))) @@ -124,12 +131,14 @@ (define (guix-time-machine . args) (with-git-error-handling (let* ((opts (parse-args args)) (channels (channel-list opts)) - (command-line (assoc-ref opts 'exec))) + (command-line (assoc-ref opts 'exec)) + (authenticate? (assoc-ref opts 'authenticate-channels?))) (when command-line (let* ((directory (with-store store (with-status-verbosity (assoc-ref opts 'verbosity) (set-build-options-from-command-line store opts) - (cached-channel-instance store channels)))) + (cached-channel-instance store channels + #:authenticate? authenticate?)))) (executable (string-append directory "/bin/guix"))) (apply execl (cons* executable executable command-line)))))))) diff --git a/guix/store/database.scm b/guix/store/database.scm index ad9ca68efe..a38e4d7e52 100644 --- a/guix/store/database.scm +++ b/guix/store/database.scm @@ -37,6 +37,7 @@ (define-module (guix store database) #:use-module (system foreign) #:export (sql-schema %default-database-file + store-database-file with-database path-id sqlite-register @@ -65,6 +66,28 @@ (define sqlite-exec (unless (zero? ret) ((@@ (sqlite3) sqlite-error) db "sqlite-exec" ret)))))) +(define* (store-database-directory #:key prefix state-directory) + "Return the store database directory, taking PREFIX and STATE-DIRECTORY into +account when provided." + ;; Priority for options: first what is given, then environment variables, + ;; then defaults. %state-directory, %store-directory, and + ;; %store-database-directory already handle the "environment variables / + ;; defaults" question, so we only need to choose between what is given and + ;; those. + (cond (state-directory + (string-append state-directory "/db")) + (prefix + (string-append prefix %localstatedir "/guix/db")) + (else + %store-database-directory))) + +(define* (store-database-file #:key prefix state-directory) + "Return the store database file name, taking PREFIX and STATE-DIRECTORY into +account when provided." + (string-append (store-database-directory #:prefix prefix + #:state-directory state-directory) + "/db.sqlite")) + (define (initialize-database db) "Initializing DB, an empty database, by creating all the tables and indexes as specified by SQL-SCHEMA." @@ -77,7 +100,10 @@ (define schema (define (call-with-database file proc) "Pass PROC a database record corresponding to FILE. If FILE doesn't exist, create it and initialize it as a new database." - (let ((new? (not (file-exists? file))) + (let ((new? (and (not (file-exists? file)) + (begin + (mkdir-p (dirname file)) + #t))) (db (sqlite-open file))) ;; Turn DB in "write-ahead log" mode, which should avoid SQLITE_LOCKED ;; errors when we have several readers: . @@ -361,45 +387,32 @@ (define* (register-path path Use with care as it directly modifies the store! This is primarily meant to be used internally by the daemon's build hook." - (register-items (list (store-info path deriver references)) - #:prefix prefix #:state-directory state-directory - #:deduplicate? deduplicate? - #:reset-timestamps? reset-timestamps? - #:schema schema - #:log-port (%make-void-port "w"))) + (define db-file + (store-database-file #:prefix prefix + #:state-directory state-directory)) + + (parameterize ((sql-schema schema)) + (with-database db-file db + (register-items db (list (store-info path deriver references)) + #:prefix prefix + #:deduplicate? deduplicate? + #:reset-timestamps? reset-timestamps? + #:log-port (%make-void-port "w"))))) (define %epoch ;; When it all began. (make-time time-utc 0 1)) -(define* (register-items items - #:key prefix state-directory +(define* (register-items db items + #:key prefix (deduplicate? #t) (reset-timestamps? #t) registration-time - (schema (sql-schema)) (log-port (current-error-port))) "Register all of ITEMS, a list of records as returned by -'read-reference-graph', in the database under PREFIX/STATE-DIRECTORY. ITEMS -must be in topological order (with leaves first.) If the database is -initially empty, apply SCHEMA to initialize it. REGISTRATION-TIME must be the -registration time to be recorded in the database; #f means \"now\". -Write a progress report to LOG-PORT." - - ;; Priority for options: first what is given, then environment variables, - ;; then defaults. %state-directory, %store-directory, and - ;; %store-database-directory already handle the "environment variables / - ;; defaults" question, so we only need to choose between what is given and - ;; those. - - (define db-dir - (cond (state-directory - (string-append state-directory "/db")) - (prefix - (string-append prefix %localstatedir "/guix/db")) - (else - %store-database-directory))) - +'read-reference-graph', in DB. ITEMS must be in topological order (with +leaves first.) REGISTRATION-TIME must be the registration time to be recorded +in the database; #f means \"now\". Write a progress report to LOG-PORT." (define store-dir (if prefix (string-append prefix %storedir) @@ -438,17 +451,14 @@ (define real-file-name (when deduplicate? (deduplicate real-file-name hash #:store store-dir))))) - (mkdir-p db-dir) - (parameterize ((sql-schema schema)) - (with-database (string-append db-dir "/db.sqlite") db - (call-with-retrying-transaction db - (lambda () - (let* ((prefix (format #f "registering ~a items" (length items))) - (progress (progress-reporter/bar (length items) - prefix log-port))) - (call-with-progress-reporter progress - (lambda (report) - (for-each (lambda (item) - (register db item) - (report)) - items))))))))) + (call-with-retrying-transaction db + (lambda () + (let* ((prefix (format #f "registering ~a items" (length items))) + (progress (progress-reporter/bar (length items) + prefix log-port))) + (call-with-progress-reporter progress + (lambda (report) + (for-each (lambda (item) + (register db item) + (report)) + items))))))) diff --git a/guix/tests/gnupg.scm b/guix/tests/gnupg.scm index 47c858d232..eb8ff63a43 100644 --- a/guix/tests/gnupg.scm +++ b/guix/tests/gnupg.scm @@ -17,12 +17,23 @@ ;;; along with GNU Guix. If not, see . (define-module (guix tests gnupg) + #:use-module (guix openpgp) #:use-module (guix utils) #:use-module (guix build utils) + #:use-module (rnrs io ports) #:use-module (ice-9 match) #:export (gpg-command gpgconf-command - with-fresh-gnupg-setup)) + with-fresh-gnupg-setup + + %ed25519-public-key-file + %ed25519-secret-key-file + %ed25519bis-public-key-file + %ed25519bis-secret-key-file + + read-openpgp-packet + key-fingerprint + key-id)) (define gpg-command (make-parameter "gpg")) @@ -50,3 +61,22 @@ (define-syntax-rule (with-fresh-gnupg-setup imported exp ...) such that the user's real GnuPG files are left untouched. The 'gpg-agent' process is terminated afterwards." (call-with-fresh-gnupg-setup imported (lambda () exp ...))) + +(define %ed25519-public-key-file + (search-path %load-path "tests/ed25519.key")) +(define %ed25519-secret-key-file + (search-path %load-path "tests/ed25519.sec")) +(define %ed25519bis-public-key-file + (search-path %load-path "tests/ed25519bis.key")) +(define %ed25519bis-secret-key-file + (search-path %load-path "tests/ed25519bis.sec")) + +(define (read-openpgp-packet file) + (get-openpgp-packet + (open-bytevector-input-port + (call-with-input-file file read-radix-64)))) + +(define key-fingerprint + (compose openpgp-format-fingerprint + openpgp-public-key-fingerprint + read-openpgp-packet)) diff --git a/guix/ui.scm b/guix/ui.scm index 7690f48660..0d3620f96f 100644 --- a/guix/ui.scm +++ b/guix/ui.scm @@ -14,6 +14,7 @@ ;;; Copyright © 2019 Chris Marusich ;;; Copyright © 2019 Tobias Geerinckx-Rice ;;; Copyright © 2019 Simon Tournier +;;; Copyright © 2020 Arun Isaac ;;; ;;; This file is part of GNU Guix. ;;; @@ -1464,16 +1465,13 @@ (define (package (package-synopsis-string p) P_) - ""))) + (or (package-synopsis-string p) ""))) (format port "~a~%" (string->recutils (string-trim-right (parameterize ((%text-width width*)) - (texi->plain-text - (string-append "description: " - (or (and=> (package-description p) P_) - "")))) + (string-append "description: " + (or (package-description-string p) ""))) #\newline))) (for-each (match-lambda ((field . value) @@ -1520,11 +1518,16 @@ (define (regexp->score regexp) (+ relevance (* weight (apply + (map score-regexp lst))))))))) 0 metrics))) - (let ((scores (map regexp->score regexps))) - ;; Return zero if one of REGEXPS doesn't match. - (if (any zero? scores) - 0 - (reduce + 0 scores)))) + (let loop ((regexps regexps) + (total-score 0)) + (match regexps + ((head . tail) + (let ((score (regexp->score head))) + ;; Return zero if one of PATTERNS doesn't match. + (if (zero? score) + 0 + (loop tail (+ total-score score))))) + (() total-score)))) (define %package-metrics ;; Metrics used to compute the "relevance score" of a package against a set diff --git a/tests/channels.scm b/tests/channels.scm index 3b141428c8..5f13a48ec1 100644 --- a/tests/channels.scm +++ b/tests/channels.scm @@ -31,15 +31,28 @@ (define-module (test-channels) #:use-module ((guix build utils) #:select (which)) #:use-module (git) #:use-module (guix git) + #:use-module (guix git-authenticate) + #:use-module (guix openpgp) #:use-module (guix tests git) + #:use-module (guix tests gnupg) #:use-module (srfi srfi-1) #:use-module (srfi srfi-26) #:use-module (srfi srfi-34) #:use-module (srfi srfi-35) #:use-module (srfi srfi-64) + #:use-module (rnrs bytevectors) + #:use-module (rnrs io ports) #:use-module (ice-9 control) #:use-module (ice-9 match)) +(define (gpg+git-available?) + (and (which (git-command)) + (which (gpg-command)) (which (gpgconf-command)))) + +(define commit-id-string + (compose oid->string commit-id)) + + (test-begin "channels") (define* (make-instance #:key @@ -199,12 +212,12 @@ (define channel-metadata-dependencies (commit (oid->string (commit-id commit2))))) (old (channel (inherit spec) (commit (oid->string (commit-id commit1)))))) - (define (validate-pull channel current instance relation) + (define (validate-pull channel current commit relation) (return (and (eq? channel old) (string=? (oid->string (commit-id commit2)) current) (string=? (oid->string (commit-id commit1)) - (channel-instance-commit instance)) + commit) relation))) (with-store store @@ -389,4 +402,113 @@ (define (find-commit* message) (channel-news-for-commit channel commit5 commit1)) '(#f "tag-for-first-news-entry"))))))) +(unless (gpg+git-available?) (test-skip 1)) +(test-assert "authenticate-channel, wrong first commit signer" + (with-fresh-gnupg-setup (list %ed25519-public-key-file + %ed25519-secret-key-file + %ed25519bis-public-key-file + %ed25519bis-secret-key-file) + (with-temporary-git-repository directory + `((add ".guix-channel" + ,(object->string + '(channel (version 0) + (keyring-reference "master")))) + (add ".guix-authorizations" + ,(object->string + `(authorizations (version 0) + ((,(key-fingerprint + %ed25519-public-key-file) + (name "Charlie")))))) + (add "signer.key" ,(call-with-input-file %ed25519-public-key-file + get-string-all)) + (commit "first commit" + (signer ,(key-fingerprint %ed25519-public-key-file)))) + (with-repository directory repository + (let* ((commit1 (find-commit repository "first")) + (intro ((@@ (guix channels) make-channel-introduction) + (commit-id-string commit1) + (openpgp-public-key-fingerprint + (read-openpgp-packet + %ed25519bis-public-key-file)) ;different key + #f)) ;no signature + (channel (channel (name 'example) + (url (string-append "file://" directory)) + (introduction intro)))) + (guard (c ((message? c) + (->bool (string-contains (condition-message c) + "initial commit")))) + (authenticate-channel channel directory + (commit-id-string commit1) + #:keyring-reference-prefix "") + 'failed)))))) + +(unless (gpg+git-available?) (test-skip 1)) +(test-assert "authenticate-channel, .guix-authorizations" + (with-fresh-gnupg-setup (list %ed25519-public-key-file + %ed25519-secret-key-file + %ed25519bis-public-key-file + %ed25519bis-secret-key-file) + (with-temporary-git-repository directory + `((add ".guix-channel" + ,(object->string + '(channel (version 0) + (keyring-reference "channel-keyring")))) + (add ".guix-authorizations" + ,(object->string + `(authorizations (version 0) + ((,(key-fingerprint + %ed25519-public-key-file) + (name "Charlie")))))) + (commit "zeroth commit") + (add "a.txt" "A") + (commit "first commit" + (signer ,(key-fingerprint %ed25519-public-key-file))) + (add "b.txt" "B") + (commit "second commit" + (signer ,(key-fingerprint %ed25519-public-key-file))) + (add "c.txt" "C") + (commit "third commit" + (signer ,(key-fingerprint %ed25519bis-public-key-file))) + (branch "channel-keyring") + (checkout "channel-keyring") + (add "signer.key" ,(call-with-input-file %ed25519-public-key-file + get-string-all)) + (add "other.key" ,(call-with-input-file %ed25519bis-public-key-file + get-string-all)) + (commit "keyring commit") + (checkout "master")) + (with-repository directory repository + (let* ((commit1 (find-commit repository "first")) + (commit2 (find-commit repository "second")) + (commit3 (find-commit repository "third")) + (intro ((@@ (guix channels) make-channel-introduction) + (commit-id-string commit1) + (openpgp-public-key-fingerprint + (read-openpgp-packet + %ed25519-public-key-file)) + #f)) ;no signature + (channel (channel (name 'example) + (url (string-append "file://" directory)) + (introduction intro)))) + ;; COMMIT1 and COMMIT2 are fine. + (and (authenticate-channel channel directory + (commit-id-string commit2) + #:keyring-reference-prefix "") + + ;; COMMIT3 is signed by an unauthorized key according to its + ;; parent's '.guix-authorizations' file. + (guard (c ((unauthorized-commit-error? c) + (and (oid=? (git-authentication-error-commit c) + (commit-id commit3)) + (bytevector=? + (openpgp-public-key-fingerprint + (unauthorized-commit-error-signing-key c)) + (openpgp-public-key-fingerprint + (read-openpgp-packet + %ed25519bis-public-key-file)))))) + (authenticate-channel channel directory + (commit-id-string commit3) + #:keyring-reference-prefix "") + 'failed))))))) + (test-end "channels") diff --git a/tests/git-authenticate.scm b/tests/git-authenticate.scm index 97990acaea..865481f7c5 100644 --- a/tests/git-authenticate.scm +++ b/tests/git-authenticate.scm @@ -32,31 +32,6 @@ (define-module (test-git-authenticate) ;; Test the (guix git-authenticate) tools. -(define %ed25519-public-key-file - (search-path %load-path "tests/ed25519.key")) -(define %ed25519-secret-key-file - (search-path %load-path "tests/ed25519.sec")) -(define %ed25519bis-public-key-file - (search-path %load-path "tests/ed25519bis.key")) -(define %ed25519bis-secret-key-file - (search-path %load-path "tests/ed25519bis.sec")) - -(define (read-openpgp-packet file) - (get-openpgp-packet - (open-bytevector-input-port - (call-with-input-file file read-radix-64)))) - -(define key-fingerprint - (compose openpgp-format-fingerprint - openpgp-public-key-fingerprint - read-openpgp-packet)) - -(define (key-id file) - (define id - (openpgp-public-key-id (read-openpgp-packet))) - - (string-pad (number->string id 16) 16 #\0)) - (define (gpg+git-available?) (and (which (git-command)) (which (gpg-command)) (which (gpgconf-command)))) @@ -81,7 +56,7 @@ (define (gpg+git-available?) #:keyring-reference "master") 'failed))))) -(unless (which (git-command)) (test-skip 1)) +(unless (which (gpg+git-available?)) (test-skip 1)) (test-assert "signed commits, SHA1 signature" (with-fresh-gnupg-setup (list %ed25519-public-key-file %ed25519-secret-key-file) diff --git a/tests/guix-environment-container.sh b/tests/guix-environment-container.sh index d313f2e734..45264d4978 100644 --- a/tests/guix-environment-container.sh +++ b/tests/guix-environment-container.sh @@ -24,7 +24,7 @@ set -e guix environment --version -if ! guile -c '((@@ (guix scripts environment) assert-container-features))' +if ! guile -c '((@ (guix scripts environment) assert-container-features))' then # User containers are not supported; skip this test. exit 77 diff --git a/tests/guix-repl.sh b/tests/guix-repl.sh new file mode 100644 index 0000000000..e1c2b8241f --- /dev/null +++ b/tests/guix-repl.sh @@ -0,0 +1,84 @@ +# GNU Guix --- Functional package management for GNU +# Copyright © 2020 Simon Tournier +# Copyright © 2020 Konrad Hinsen +# +# This file is part of GNU Guix. +# +# GNU Guix is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GNU Guix is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Guix. If not, see . + +# +# Test the `guix repl' command-line utility. +# + +guix repl --version + +test_directory="`mktemp -d`" +export test_directory +trap 'chmod -Rf +w "$test_directory"; rm -rf "$test_directory"' EXIT + +tmpfile="$test_directory/foo.scm" +rm -f "$tmpfile" +trap 'rm -f "$tmpfile"' EXIT + +module_dir="t-guix-repl-$$" +mkdir "$module_dir" +trap 'rm -rf "$module_dir"' EXIT + + +cat > "$tmpfile"< "$module_dir/foo.scm"< "$tmpfile"< "$tmpfile"< "$tmpfile"<