summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.guix-authorizations2
-rw-r--r--.mailmap1
-rwxr-xr-xbuild-aux/test-driver.scm3
-rw-r--r--doc/guix.texi127
-rw-r--r--etc/news.scm57
-rwxr-xr-xetc/teams.scm20
-rw-r--r--gnu/home/services/shepherd.scm12
-rw-r--r--gnu/image.scm4
-rw-r--r--gnu/local.mk19
-rw-r--r--gnu/packages/admin.scm4
-rw-r--r--gnu/packages/bioconductor.scm38
-rw-r--r--gnu/packages/bioinformatics.scm217
-rw-r--r--gnu/packages/bootloaders.scm58
-rw-r--r--gnu/packages/bootstrap.scm5
-rw-r--r--gnu/packages/check.scm31
-rw-r--r--gnu/packages/chemistry.scm2
-rw-r--r--gnu/packages/cpp.scm24
-rw-r--r--gnu/packages/curl.scm15
-rw-r--r--gnu/packages/display-managers.scm80
-rw-r--r--gnu/packages/education.scm6
-rw-r--r--gnu/packages/emacs-xyz.scm64
-rw-r--r--gnu/packages/finance.scm4
-rw-r--r--gnu/packages/firmware.scm4
-rw-r--r--gnu/packages/fonts.scm29
-rw-r--r--gnu/packages/game-development.scm131
-rw-r--r--gnu/packages/games.scm157
-rw-r--r--gnu/packages/gcc.scm5
-rw-r--r--gnu/packages/geo.scm28
-rw-r--r--gnu/packages/gl.scm29
-rw-r--r--gnu/packages/gnome.scm17
-rw-r--r--gnu/packages/gnuzilla.scm5
-rw-r--r--gnu/packages/golang-web.scm5
-rw-r--r--gnu/packages/golang.scm52
-rw-r--r--gnu/packages/graph.scm50
-rw-r--r--gnu/packages/graphviz.scm12
-rw-r--r--gnu/packages/gtk.scm6
-rw-r--r--gnu/packages/guile-xyz.scm156
-rw-r--r--gnu/packages/jami.scm444
-rw-r--r--gnu/packages/libsigsegv.scm27
-rw-r--r--gnu/packages/linux.scm44
-rw-r--r--gnu/packages/lisp-xyz.scm102
-rw-r--r--gnu/packages/lisp.scm4
-rw-r--r--gnu/packages/llvm.scm30
-rw-r--r--gnu/packages/logging.scm2
-rw-r--r--gnu/packages/machine-learning.scm111
-rw-r--r--gnu/packages/minetest.scm6
-rw-r--r--gnu/packages/mpd.scm5
-rw-r--r--gnu/packages/multiprecision.scm4
-rw-r--r--gnu/packages/networking.scm345
-rw-r--r--gnu/packages/parallel.scm4
-rw-r--r--gnu/packages/patches/curl-use-ssl-cert-env.patch26
-rw-r--r--gnu/packages/patches/dtc-meson-cell-overflow.patch32
-rw-r--r--gnu/packages/patches/emacs-ess-fix-obsolete-function-alias.patch23
-rw-r--r--gnu/packages/patches/ffmpeg-jami-change-RTCP-ratio.patch27
-rw-r--r--gnu/packages/patches/ffmpeg-jami-libopusdec-enable-FEC.patch127
-rw-r--r--gnu/packages/patches/ffmpeg-jami-libopusenc-enable-FEC.patch50
-rw-r--r--gnu/packages/patches/ffmpeg-jami-libopusenc-reload-packet-loss-at-encode.patch44
-rw-r--r--gnu/packages/patches/ffmpeg-jami-remove-mjpeg-log.patch26
-rw-r--r--gnu/packages/patches/ffmpeg-jami-rtp_ext_abs_send_time.patch71
-rw-r--r--gnu/packages/patches/ffmpeg-jami-screen-sharing-x11-fix.patch302
-rw-r--r--gnu/packages/patches/guile-fibers-libevent-timeout.patch61
-rw-r--r--gnu/packages/patches/jami-disable-integration-tests.patch10
-rw-r--r--gnu/packages/patches/jami-libjami-headers-search.patch5
-rw-r--r--gnu/packages/patches/jami-qml-tests-discovery.patch15
-rw-r--r--gnu/packages/patches/jami-skip-tests-requiring-internet.patch51
-rw-r--r--gnu/packages/patches/jami-unbundle-dependencies.patch71
-rw-r--r--gnu/packages/patches/libjami-ac-config-files.patch52
-rw-r--r--gnu/packages/patches/python-pyreadstat-link-libiconv.patch15
-rw-r--r--gnu/packages/patches/python-uqbar-python3.10.patch23
-rw-r--r--gnu/packages/plan9.scm136
-rw-r--r--gnu/packages/potassco.scm2
-rw-r--r--gnu/packages/python-compression.scm34
-rw-r--r--gnu/packages/python-web.scm59
-rw-r--r--gnu/packages/python-xyz.scm314
-rw-r--r--gnu/packages/serialization.scm71
-rw-r--r--gnu/packages/shellutils.scm4
-rw-r--r--gnu/packages/statistics.scm177
-rw-r--r--gnu/packages/swig.scm4
-rw-r--r--gnu/packages/tbb.scm46
-rw-r--r--gnu/packages/telephony.scm71
-rw-r--r--gnu/packages/terminals.scm6
-rw-r--r--gnu/packages/textutils.scm4
-rw-r--r--gnu/packages/tls.scm29
-rw-r--r--gnu/packages/valgrind.scm4
-rw-r--r--gnu/packages/version-control.scm267
-rw-r--r--gnu/packages/video.scm428
-rw-r--r--gnu/packages/vim.scm14
-rw-r--r--gnu/packages/web-browsers.scm4
-rw-r--r--gnu/packages/web.scm24
-rw-r--r--gnu/packages/wm.scm4
-rw-r--r--gnu/packages/xfce.scm8
-rw-r--r--gnu/packages/xorg.scm10
-rw-r--r--gnu/services/base.scm4
-rw-r--r--gnu/services/messaging.scm53
-rw-r--r--gnu/services/shepherd.scm51
-rw-r--r--gnu/services/ssh.scm7
-rw-r--r--gnu/services/xorg.scm15
-rw-r--r--gnu/system.scm4
-rw-r--r--gnu/system/hurd.scm4
-rw-r--r--gnu/system/image.scm41
-rw-r--r--gnu/tests/data/jami-dummy-account.dat127
-rw-r--r--gnu/tests/docker.scm2
-rw-r--r--gnu/tests/telephony.scm7
-rw-r--r--gnu/tests/virtualization.scm3
-rw-r--r--guix/build-system/zig.scm118
-rw-r--r--guix/build/zig-build-system.scm7
-rw-r--r--guix/docker.scm212
-rw-r--r--guix/import/crate.scm161
-rw-r--r--guix/platforms/x86.scm10
-rw-r--r--guix/read-print.scm1
-rw-r--r--guix/scripts/import/crate.scm24
-rw-r--r--guix/scripts/pack.scm88
-rw-r--r--guix/scripts/system.scm31
-rw-r--r--guix/ui.scm4
-rw-r--r--guix/utils.scm12
-rw-r--r--nix/libstore/globals.cc4
-rw-r--r--tests/crate.scm576
-rw-r--r--tests/pack.scm50
118 files changed, 5280 insertions, 1694 deletions
diff --git a/.guix-authorizations b/.guix-authorizations
index c2e043d414..c52aa39755 100644
--- a/.guix-authorizations
+++ b/.guix-authorizations
@@ -100,6 +100,8 @@
(;; primary: "D6B0 C593 DA8C 5EDC A44C 7A58 C336 91F7 1188 B004"
"A02C 2D82 0EF4 B25B A6B5 1D90 2AC6 A5EC 1C35 7C59"
(name "samplet"))
+ ("9847 81DE 689C 21C2 6418 0867 76D7 27BF F62C D2B5"
+ (name "sharlatan"))
("F494 72F4 7A59 00D5 C235 F212 89F9 6D48 08F3 59C7"
(name "snape"))
("6580 7361 3BFC C5C7 E2E4 5D45 DC51 8FC8 7F97 16AA"
diff --git a/.mailmap b/.mailmap
index ee6dd3f4f2..39b01335ee 100644
--- a/.mailmap
+++ b/.mailmap
@@ -90,6 +90,7 @@ Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
Theodoros Foradis <theodoros.for@openmailbox.org> <theodoros@foradis.org>
Thomas Danckaert <thomas.danckaert@gmail.com> <post@thomasdanckaert.be>
Tobias Geerinckx-Rice <me@tobias.gr> <tobias.geerinckx.rice@gmail.com>
+Tomas Volf <~@wolfsden.cz> <wolf@wolfsden.cz>
Tomáš Čech <sleep_walker@gnu.org> <sleep_walker@suse.cz>
Vincent Legoll <vincent.legoll@gmail.com> <vincent.legoll@idgrilles.fr>
Zheng Junjie <873216071@qq.com> Z572 <873216071@qq.com>
diff --git a/build-aux/test-driver.scm b/build-aux/test-driver.scm
index 1cdd4ff8f7..901f6ab9ec 100755
--- a/build-aux/test-driver.scm
+++ b/build-aux/test-driver.scm
@@ -3,7 +3,7 @@ exec guile --no-auto-compile -e main -s "$0" "$@"
!#
;;;; test-driver.scm - Guile test driver for Automake testsuite harness
-(define script-version "2021-02-02.05") ;UTC
+(define script-version "2023-12-08.14") ;UTC
;;; Copyright © 2015, 2016 Mathieu Lirzin <mthl@gnu.org>
;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
@@ -274,6 +274,7 @@ cases based on their names."
(exit 0)))
;;; Local Variables:
+;;; mode: scheme
;;; eval: (add-hook 'write-file-functions 'time-stamp)
;;; time-stamp-start: "(define script-version \""
;;; time-stamp-format: "%:y-%02m-%02d.%02H"
diff --git a/doc/guix.texi b/doc/guix.texi
index 924dbf23ba..395545bed7 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -56,7 +56,7 @@ Copyright @copyright{} 2017 Andy Wingo@*
Copyright @copyright{} 2017, 2018, 2019, 2020, 2023 Arun Isaac@*
Copyright @copyright{} 2017 nee@*
Copyright @copyright{} 2018 Rutger Helling@*
-Copyright @copyright{} 2018, 2021 Oleg Pykhalov@*
+Copyright @copyright{} 2018, 2021, 2023 Oleg Pykhalov@*
Copyright @copyright{} 2018 Mike Gerwitz@*
Copyright @copyright{} 2018 Pierre-Antoine Rouby@*
Copyright @copyright{} 2018, 2019 Gábor Boskovits@*
@@ -122,6 +122,7 @@ Copyright @copyright{} 2023 Felix Lechner@*
Copyright @copyright{} 2023 Foundation Devices, Inc.@*
Copyright @copyright{} 2023 Thomas Ieong@*
Copyright @copyright{} 2023 Saku Laesvuori@*
+Copyright @copyright{} 2023 Graham James Addis@*
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -1799,7 +1800,7 @@ Setup}), or simply fail.
When the build or substitution process remains silent for more than
@var{seconds}, terminate it and report a build failure.
-The default value is @code{0}, which disables the timeout.
+The default value is @code{3600} (one hour).
The value specified here can be overridden by clients (@pxref{Common
Build Options, @option{--max-silent-time}}).
@@ -1808,7 +1809,7 @@ Build Options, @option{--max-silent-time}}).
Likewise, when the build or substitution process lasts for more than
@var{seconds}, terminate it and report a build failure.
-The default value is @code{0}, which disables the timeout.
+The default value is 24 hours.
The value specified here can be overridden by clients (@pxref{Common
Build Options, @option{--timeout}}).
@@ -7406,7 +7407,7 @@ execution engines listed above by setting the
@env{GUIX_EXECUTION_ENGINE} environment variable accordingly.
@end quotation
-@cindex entry point, for Docker images
+@cindex entry point, for Docker and Singularity images
@item --entry-point=@var{command}
Use @var{command} as the @dfn{entry point} of the resulting pack, if the pack
format supports it---currently @code{docker} and @code{squashfs} (Singularity)
@@ -7429,6 +7430,41 @@ docker load -i pack.tar.gz
docker run @var{image-id}
@end example
+@cindex entry point arguments, for docker images
+@item --entry-point-argument=@var{command}
+@itemx -A @var{command}
+Use @var{command} as an argument to @dfn{entry point} of the resulting pack.
+This option is only valid in conjunction with @code{--entry-point} and can
+appear multiple times on the command line.
+
+@example
+guix pack -f docker --entry-point=bin/guile --entry-point-argument="--help" guile
+@end example
+
+@cindex maximum layers argument, for docker images
+@item --max-layers=@code{n}
+Specifies the maximum number of Docker image layers allowed when
+building an image.
+
+@example
+guix pack -f docker --max-layers=100 guile
+@end example
+
+This option allows you to limit the number of layers in a Docker image.
+Docker images are comprised of multiple layers, and each layer adds to
+the overall size and complexity of the image. By setting a maximum
+number of layers, you can control the following effects:
+
+@itemize
+@item Disk Usage:
+Increasing the number of layers can help optimize the disk space
+required to store multiple images built with a similar package graph.
+
+@item Pulling:
+When transferring images between different nodes or systems, having more
+layers can reduce the time required to pull the image.
+@end itemize
+
@item --expression=@var{expr}
@itemx -e @var{expr}
Consider the package @var{expr} evaluates to.
@@ -14549,6 +14585,13 @@ Additional options include:
Traverse the dependency graph of the given upstream package recursively
and generate package expressions for all those packages that are not yet
in Guix.
+@item --recursive-dev-dependencies
+If @option{--recursive-dev-dependencies} is specified, also the recursively
+imported packages contain their development dependencies, which are recursively
+imported as well.
+@item --allow-yanked
+If no non-yanked version of a crate is available, use the latest yanked
+version instead instead of aborting.
@end table
@item elm
@@ -19455,8 +19498,8 @@ few seconds when enough entropy is available and is only done once; you
might want to turn it off for instance in a virtual machine that does
not need it and where the extra boot time is a problem.
-@item @code{max-silent-time} (default: @code{0})
-@itemx @code{timeout} (default: @code{0})
+@item @code{max-silent-time} (default: @code{3600})
+@itemx @code{timeout} (default: @code{(* 3600 24)})
The number of seconds of silence and the number of seconds of activity,
respectively, after which a build process times out. A value of zero
disables the timeout.
@@ -45243,25 +45286,25 @@ PulseAudio clients to use PipeWire transparently.
@node Mail Home Services
@subsection Mail Home Services
-
+
The @code{(gnu home services mail)} module provides services that help
you set up the tools to work with emails in your home environment.
-
+
@cindex msmtp
@uref{https://marlam.de/msmtp, MSMTP} is a @acronym{SMTP, Simple Mail
Transfer Protocol} client. It sends mail to a predefined SMTP server
that takes care of proper delivery.
-
+
The service reference is given below.
-
+
@defvar home-msmtp-service-type
This is the service type for @command{msmtp}. Its value must be a
@code{home-msmtp-configuration}, as shown below. It provides the
@file{~/.config/msmtp/config} file.
-
+
As an example, here is how you would configure @code{msmtp} for a single
account:
-
+
@lisp
(service home-msmtp-service-type
(home-msmtp-configuration
@@ -45279,101 +45322,101 @@ account:
@end defvar
@c %start of fragment
-
+
@deftp {Data Type} home-msmtp-configuration
Available @code{home-msmtp-configuration} fields are:
-
+
@table @asis
@item @code{defaults} (type: msmtp-configuration)
The configuration that will be set as default for all accounts.
-
+
@item @code{accounts} (default: @code{'()}) (type: list-of-msmtp-accounts)
A list of @code{msmtp-account} records which contain information about
all your accounts.
-
+
@item @code{default-account} (type: maybe-string)
Set the default account.
-
+
@item @code{extra-content} (default: @code{""}) (type: string)
Extra content appended as-is to the configuration file. Run
@command{man msmtp} for more information about the configuration file
format.
-
+
@end table
-
+
@end deftp
-
+
@c %end of fragment
-
+
@c %start of fragment
-
+
@deftp {Data Type} msmtp-account
Available @code{msmtp-account} fields are:
-
+
@table @asis
@item @code{name} (type: string)
The unique name of the account.
-
+
@item @code{configuration} (type: msmtp-configuration)
The configuration for this given account.
-
+
@end table
-
+
@end deftp
-
+
@c %end of fragment
@c %start of fragment
-
+
@deftp {Data Type} msmtp-configuration
Available @code{msmtp-configuration} fields are:
-
+
@table @asis
@item @code{auth?} (type: maybe-boolean)
Enable or disable authentication.
-
+
@item @code{tls?} (type: maybe-boolean)
Enable or disable TLS (also known as SSL) for secured connections.
-
+
@item @code{tls-starttls?} (type: maybe-boolean)
Choose the TLS variant: start TLS from within the session (‘on’,
default), or tunnel the session through TLS (‘off’).
-
+
@item @code{tls-trust-file} (type: maybe-string)
Activate server certificate verification using a list of trusted
Certification Authorities (CAs).
-
+
@item @code{log-file} (type: maybe-string)
Enable logging to the specified file. An empty argument disables
logging. The file name ‘-’ directs the log information to standard
output.
-
+
@item @code{host} (type: maybe-string)
The SMTP server to send the mail to.
-
+
@item @code{port} (type: maybe-integer)
The port that the SMTP server listens on. The default is 25 ("smtp"),
unless TLS without STARTTLS is used, in which case it is 465 ("smtps").
-
+
@item @code{user} (type: maybe-string)
Set the user name for authentication.
-
+
@item @code{from} (type: maybe-string)
Set the envelope-from address.
-
+
@item @code{password-eval} (type: maybe-string)
Set the password for authentication to the output (stdout) of the
command cmd.
-
+
@item @code{extra-content} (default: @code{""}) (type: string)
Extra content appended as-is to the configuration block. Run
@command{man msmtp} for more information about the configuration file
format.
-
+
@end table
-
+
@end deftp
-
+
@c %end of fragment
@node Messaging Home Services
diff --git a/etc/news.scm b/etc/news.scm
index 848873d675..2b0a90a7f3 100644
--- a/etc/news.scm
+++ b/etc/news.scm
@@ -18,6 +18,7 @@
;; Copyright © 2021 Andrew Tropin <andrew@trop.in>
;; Copyright © 2021, 2023 Jonathan Brielmaier <jonathan.brielmaier@web.de>
;; Copyright © 2022 Thiago Jung Bauermann <bauermann@kolabnow.com>
+;; Copyright © 2024 Oleg Pykhalov <go.wigust@gmail.com>
;;
;; Copying and distribution of this file, with or without modification, are
;; permitted in any medium without royalty provided the copyright notice and
@@ -26,6 +27,62 @@
(channel-news
(version 0)
+ (entry (commit "519e1e3eb88ec532fc83ebb742d9919269b57c87")
+ (title
+ (de "Neues Option @samp{--max-layers=N} für den Befehl @command{guix pack}")
+ (en "New @samp{--max-layers=N} option for the @command{guix pack} command")
+ (ru "Новая опция @samp{--max-layers=N} для @command{guix pack} команды"))
+ (body
+ (de "Sie können jetzt auch mehrschichtige Docker-Abbilder mit dem Befehl
+@command{guix pack --format=docker --max-layers=N} erzeugen. Damit bekommen Sie ein
+Docker-Abbild, bei dem Store-Pfade auf getrennten Schichten („Layer“)
+untergebracht sind, die sich mehrere Abbilder teilen können. Das Abbild wird
+im Store als gzip-komprimierter Tarball erzeugt. Hier ist ein einfaches
+Beispiel, wo ein mehrschichtiges Docker-Abbild für das Paket @code{hello}
+angelegt wird:
+
+@example
+guix pack --format=docker --max-layers=N --symlink=/usr/bin/hello=bin/hello hello
+@end example
+
+@command{guix system image} kann jetzt geschichtete Docker-Abbilder erzeugen,
+indem Sie @code{--max-layers=N}.
+
+Siehe @command{info \"(guix.de) Aufruf von guix pack\"} und
+@command{info \"(guix.de) Systemabbilder\"} für weitere Informationen.")
+ (en "Docker layered images can now be produced via the @command{guix
+pack --format=docker --max-layers=N} command, providing a Docker image with
+many of the store paths being on their own layer to improve sharing between
+images. The image is realized into the GNU store as a gzipped tarball. Here
+is a simple example that generates a layered Docker image for the @code{hello}
+package:
+
+@example
+guix pack --format=docker --max-layers=N --symlink=/usr/bin/hello=bin/hello hello
+@end example
+
+The @command{guix system image} can now produce layered Docker image by passing
+@code{--max-layers=N}.
+
+See @command{info \"(guix) Invoking guix pack\"} and
+@command{info \"(guix) System Images\"} for more information.")
+ (ru "Появилась команда создания многослойных Docker образов с помощью
+@command{guix pack --format=docker --max-layers=N}, которая соберет Docker образ с
+путями в store расположенными на отдельных слоях, ускоряя таким образом
+передачу образов. Образ будет создан в GNU store в качестве gzipped tarball.
+
+Пример создания Docker layered образ с @code{hello} пакетом:
+@example
+guix pack --format=docker --max-layers=N --symlink=/usr/bin/hello=bin/hello hello
+@end example
+
+@command{guix system image} теперь может создавать layered Docker образ путем
+указания опции @option{--max-layers=N}.
+
+Смотрите @command{info \"(guix) Invoking guix pack\"} и
+@command{info \"(guix) System Images\"} для получения более детальных
+сведений.")))
+
(entry (commit "953c65ffdd43c02c934518fb7a1c68542584b223")
(title
(en "Declarative offloading on Guix System and childhurds")
diff --git a/etc/teams.scm b/etc/teams.scm
index fba9010130..98f51c13e1 100755
--- a/etc/teams.scm
+++ b/etc/teams.scm
@@ -310,7 +310,8 @@ asdf-build-system."
(define-team bootstrap
(team 'bootstrap
#:name "Bootstrap"
- #:scope (list "gnu/packages/mes.scm")))
+ #:scope (list "gnu/packages/commencement.scm"
+ "gnu/packages/mes.scm")))
(define-team embedded
(team 'embedded
@@ -424,6 +425,21 @@ asdf-build-system."
(make-regexp* "^guix/scripts/")
(make-regexp* "^guix/store/"))))
+(define-team core-packages
+ (team 'core-packages
+ #:name "Core packages"
+ #:description "Core packages: the GNU tool chain, Guile, Coreutils, etc."
+ #:scope (list "gnu/packages/base.scm"
+ "gnu/packages/bootstrap.scm"
+ "gnu/packages/commencement.scm"
+ "gnu/packages/cross-base.scm"
+ "gnu/packages/gcc.scm"
+ "gnu/packages/guile.scm"
+ "gnu/packages/make-bootstrap.scm"
+ "guix/build/gnu-build-system.scm"
+ "guix/build/utils.scm"
+ "guix/build-system/gnu.scm")))
+
(define-team games
(team 'games
#:name "Games and Toys"
@@ -556,7 +572,7 @@ GLib/GIO, GTK, GStreamer and Webkit."
(define-member (person "Ludovic Courtès"
"ludo@gnu.org")
- core home bootstrap installer mentors)
+ core home bootstrap core-packages installer mentors)
(define-member (person "Andreas Enge"
"andreas@enge.fr")
diff --git a/gnu/home/services/shepherd.scm b/gnu/home/services/shepherd.scm
index bd068c37fc..176f4575cb 100644
--- a/gnu/home/services/shepherd.scm
+++ b/gnu/home/services/shepherd.scm
@@ -1,6 +1,7 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2021, 2023 Andrew Tropin <andrew@trop.in>
;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
+;;; Copyright © 2024 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -75,11 +76,8 @@ as shepherd package."
#~(begin
(use-modules (srfi srfi-34)
(system repl error-handling))
- (apply
- register-services
- (map
- (lambda (file) (load file))
- '#$files))
+
+ (register-services (map load '#$files))
#$@(if daemonize?
`((action 'root 'daemonize))
@@ -90,9 +88,7 @@ as shepherd package."
'#$(append-map shepherd-service-provision
(filter shepherd-service-auto-start?
services))))
- (if (defined? 'start-in-the-background)
- (start-in-the-background services-to-start)
- (for-each start services-to-start))
+ (start-in-the-background services-to-start)
(redirect-port (open-input-file "/dev/null")
(current-input-port)))))
diff --git a/gnu/image.scm b/gnu/image.scm
index 523653dd77..7fb06dec10 100644
--- a/gnu/image.scm
+++ b/gnu/image.scm
@@ -1,5 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2020, 2022 Mathieu Othacehe <othacehe@gnu.org>
+;;; Copyright © 2023 Oleg Pykhalov <go.wigust@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -42,6 +43,7 @@
image-format
image-platform
image-size
+ image-max-layers
image-operating-system
image-partition-table-type
image-partitions
@@ -170,6 +172,8 @@ that is not in SET, mentioning FIELD in the error message."
(size image-size ;size in bytes as integer
(default 'guess)
(sanitize validate-size))
+ (max-layers image-max-layers ;number of layers as integer
+ (default #false))
(operating-system image-operating-system) ;<operating-system>
(partition-table-type image-partition-table-type ; 'mbr or 'gpt
(default 'mbr)
diff --git a/gnu/local.mk b/gnu/local.mk
index 1bf8a9df27..453e3fb5c7 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1,5 +1,5 @@
# GNU Guix --- Functional package management for GNU
-# Copyright © 2012-2023 Ludovic Courtès <ludo@gnu.org>
+# Copyright © 2012-2024 Ludovic Courtès <ludo@gnu.org>
# Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2022, 2023 Andreas Enge <andreas@enge.fr>
# Copyright © 2016 Mathieu Lirzin <mthl@gnu.org>
# Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Mark H Weaver <mhw@netris.org>
@@ -62,6 +62,7 @@
# Copyright © 2023 B. Wilson <elaexuotee@wilsonb.com>
# Copyright © 2023 gemmaro <gemmaro.dev@gmail.com>
# Copyright © 2023 Herman Rimm <herman@rimm.ee>
+# Copyright © 2023 Troy Figiel <troy@troyfigiel.com>
#
# This file is part of GNU Guix.
#
@@ -1092,6 +1093,7 @@ dist_patch_DATA = \
%D%/packages/patches/doxygen-hurd.patch \
%D%/packages/patches/dstat-fix-crash-when-specifying-delay.patch \
%D%/packages/patches/dstat-skip-devices-without-io.patch \
+ %D%/packages/patches/dtc-meson-cell-overflow.patch \
%D%/packages/patches/dune-common-skip-failing-tests.patch \
%D%/packages/patches/dune-grid-add-missing-include-cassert.patch \
%D%/packages/patches/dune-istl-fix-solver-playground.patch \
@@ -1111,7 +1113,6 @@ dist_patch_DATA = \
%D%/packages/patches/emacs-deferred-fix-number-of-arguments.patch \
%D%/packages/patches/emacs-elpy-dup-test-name.patch \
%D%/packages/patches/emacs-exec-path.patch \
- %D%/packages/patches/emacs-ess-fix-obsolete-function-alias.patch \
%D%/packages/patches/emacs-git-email-missing-parens.patch \
%D%/packages/patches/emacs-fix-scheme-indent-function.patch \
%D%/packages/patches/emacs-json-reformat-fix-tests.patch \
@@ -1166,6 +1167,13 @@ dist_patch_DATA = \
%D%/packages/patches/fenics-dolfin-demo-init.patch \
%D%/packages/patches/fenics-dolfin-boost.patch \
%D%/packages/patches/fenics-dolfin-config-slepc.patch \
+ %D%/packages/patches/ffmpeg-jami-change-RTCP-ratio.patch \
+ %D%/packages/patches/ffmpeg-jami-rtp_ext_abs_send_time.patch \
+ %D%/packages/patches/ffmpeg-jami-libopusdec-enable-FEC.patch \
+ %D%/packages/patches/ffmpeg-jami-libopusenc-enable-FEC.patch \
+ %D%/packages/patches/ffmpeg-jami-libopusenc-reload-packet-loss-at-encode.patch \
+ %D%/packages/patches/ffmpeg-jami-remove-mjpeg-log.patch \
+ %D%/packages/patches/ffmpeg-jami-screen-sharing-x11-fix.patch \
%D%/packages/patches/fifengine-boost-compat.patch \
%D%/packages/patches/fifengine-swig-compat.patch \
%D%/packages/patches/fifo-map-fix-flags-for-gcc.patch \
@@ -1384,6 +1392,7 @@ dist_patch_DATA = \
%D%/packages/patches/guile-fibers-fd-finalizer-leak.patch \
%D%/packages/patches/guile-fibers-wait-for-io-readiness.patch \
%D%/packages/patches/guile-fibers-libevent-32-bit.patch \
+ %D%/packages/patches/guile-fibers-libevent-timeout.patch \
%D%/packages/patches/guile-fix-invalid-unicode-handling.patch \
%D%/packages/patches/guile-gdbm-ffi-support-gdbm-1.14.patch \
%D%/packages/patches/guile-git-adjust-for-libgit2-1.2.0.patch \
@@ -1458,6 +1467,9 @@ dist_patch_DATA = \
%D%/packages/patches/itk-snap-alt-glibc-compat.patch \
%D%/packages/patches/jami-disable-integration-tests.patch \
%D%/packages/patches/jami-libjami-headers-search.patch \
+ %D%/packages/patches/jami-qml-tests-discovery.patch \
+ %D%/packages/patches/jami-skip-tests-requiring-internet.patch \
+ %D%/packages/patches/jami-unbundle-dependencies.patch \
%D%/packages/patches/jamvm-1.5.1-aarch64-support.patch \
%D%/packages/patches/jamvm-1.5.1-armv7-support.patch \
%D%/packages/patches/jamvm-2.0.0-aarch64-support.patch \
@@ -1548,6 +1560,7 @@ dist_patch_DATA = \
%D%/packages/patches/libgnome-encoding.patch \
%D%/packages/patches/libgnomeui-utf8.patch \
%D%/packages/patches/libgrss-CVE-2016-2001.patch \
+ %D%/packages/patches/libjami-ac-config-files.patch \
%D%/packages/patches/libjxr-fix-function-signature.patch \
%D%/packages/patches/libjxr-fix-typos.patch \
%D%/packages/patches/libofa-ftbfs-1.diff \
@@ -1776,6 +1789,7 @@ dist_patch_DATA = \
%D%/packages/patches/python-louvain-fix-test.patch \
%D%/packages/patches/python-random2-getrandbits-test.patch \
%D%/packages/patches/python-poppler-qt5-fix-build.patch \
+ %D%/packages/patches/python-pyreadstat-link-libiconv.patch \
%D%/packages/patches/python-pypdf-annotate-tests-appropriately.patch \
%D%/packages/patches/python-pytorch2-system-libraries.patch \
%D%/packages/patches/python-sip-include-dirs.patch \
@@ -1783,6 +1797,7 @@ dist_patch_DATA = \
%D%/packages/patches/python-sphinx-prompt-docutils-0.19.patch \
%D%/packages/patches/python-telingo-fix-comparison.patch \
%D%/packages/patches/python-typeguard-python3.10.patch \
+ %D%/packages/patches/python-uqbar-python3.10.patch \
%D%/packages/patches/python-wxwidgets-type-errors.patch \
%D%/packages/patches/qtdeclarative-5-disable-qmlcache.patch \
%D%/packages/patches/qtdeclarative-disable-qmlcache.patch \
diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm
index 5442714665..3f1de1e6b6 100644
--- a/gnu/packages/admin.scm
+++ b/gnu/packages/admin.scm
@@ -373,14 +373,14 @@ interface and is based on GNU Guile.")
(define-public shepherd-0.10
(package
(inherit shepherd-0.9)
- (version "0.10.2")
+ (version "0.10.3")
(source (origin
(method url-fetch)
(uri (string-append "mirror://gnu/shepherd/shepherd-"
version ".tar.gz"))
(sha256
(base32
- "0v9ld9gbqdp5ya380fbkdsxa0iqr90gi6yk004ccz3n792nq6wlj"))))
+ "1vxghlxnxajx2iciqmjia49c5hkir8li0gv29kl55frhn2zgxilf"))))
(native-inputs (modify-inputs (package-native-inputs shepherd-0.9)
(replace "guile-fibers"
;; Work around
diff --git a/gnu/packages/bioconductor.scm b/gnu/packages/bioconductor.scm
index 1ea5e47321..a7af5c42ce 100644
--- a/gnu/packages/bioconductor.scm
+++ b/gnu/packages/bioconductor.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2015-2023 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015-2024 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2016, 2017, 2018, 2020, 2021 Roel Janssen <roel@gnu.org>
;;; Copyright © 2016 Pjotr Prins <pjotr.guix@thebird.nl>
;;; Copyright © 2016 Ben Woodcroft <donttrustben@gmail.com>
@@ -7324,13 +7324,13 @@ global-scaling and full-quantile normalization.")
(define-public r-edger
(package
(name "r-edger")
- (version "4.0.3")
+ (version "4.0.5")
(source (origin
(method url-fetch)
(uri (bioconductor-uri "edgeR" version))
(sha256
(base32
- "0sz46pwa1bsqrff2igswfhhj1fcwzn34zrlawy4fnb58z48kccb0"))))
+ "16cghh83v14jdq5n6xkm3jxj87n6l6zrxjgqdwb2ffgc26vkpb7w"))))
(properties `((upstream-name . "edgeR")))
(build-system r-build-system)
(propagated-inputs
@@ -10510,6 +10510,38 @@ expression information. The package functions as a wrapper for Startrac and
powerTCR R packages.")
(license license:gpl2)))
+(define-public r-scrnaseq
+ (package
+ (name "r-scrnaseq")
+ (version "2.16.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (bioconductor-uri "scRNAseq" version
+ 'experiment))
+ (sha256
+ (base32 "0dbh3sqq7lkkdf7vls5qg7fbn6y74c7hsigb4d69pvk934ll88aw"))))
+ (properties `((upstream-name . "scRNAseq")))
+ (build-system r-build-system)
+ (propagated-inputs (list r-annotationdbi
+ r-annotationhub
+ r-biocgenerics
+ r-ensembldb
+ r-experimenthub
+ r-genomicfeatures
+ r-genomicranges
+ r-s4vectors
+ r-singlecellexperiment
+ r-summarizedexperiment))
+ (native-inputs (list r-knitr))
+ (home-page "https://bioconductor.org/packages/scRNAseq")
+ (synopsis "Collection of public single-cell RNA-seq datasets")
+ (description
+ "This package contains gene-level counts for a collection of public
+@code{scRNA-seq} datasets, provided as @code{SingleCellExperiment} objects
+with cell- and gene-level metadata.")
+ (license license:cc0)))
+
(define-public r-scry
(package
(name "r-scry")
diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm
index 2ceb0190b6..7dbebcf3da 100644
--- a/gnu/packages/bioinformatics.scm
+++ b/gnu/packages/bioinformatics.scm
@@ -130,6 +130,7 @@
#:use-module (gnu packages pdf)
#:use-module (gnu packages perl)
#:use-module (gnu packages perl-check)
+ #:use-module (gnu packages perl-web)
#:use-module (gnu packages pkg-config)
#:use-module (gnu packages popt)
#:use-module (gnu packages protobuf)
@@ -574,6 +575,30 @@ BED, GFF/GTF, VCF.")
whole-genome bisulfite sequencing (WGBS) reads from directional protocol.")
(license license:asl2.0)))
+(define-public bustools
+ (package
+ (name "bustools")
+ (version "0.43.2")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/BUStools/bustools")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "068kjlc4d528269nl5mc3j8h2c95r1v545d3fi1iw1ckg8rba0hg"))))
+ (build-system cmake-build-system)
+ (arguments (list #:tests? #f)) ;no test target
+ (inputs (list zlib))
+ (home-page "https://bustools.github.io")
+ (synopsis "Tools for working with BUS files")
+ (description "bustools is a program for manipulating BUS files for single
+cell RNA-Seq datasets. It can be used to error correct barcodes, collapse
+UMIs, produce gene count or transcript compatibility count matrices, and is useful
+for many other tasks.")
+ (license license:bsd-2)))
+
(define-public cellsnp-lite
;; Last release is from November 2021 and does not contain fixes.
(let ((commit "0885d746b0b1ea65c8ef92f8943ca7669ca9734a")
@@ -2365,6 +2390,40 @@ sequencing data and the end result are tables of UMI-unique DamID and CEL-Seq
counts.")
(license license:expat)))
+(define-public python-snaptools
+ (package
+ (name "python-snaptools")
+ (version "1.4.8")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "snaptools" version))
+ (sha256
+ (base32
+ "1s5373g5jjbshh3q39zy7dlxr7nda6ksxq9d1gw46h82c4fsmfbn"))))
+ (build-system pyproject-build-system)
+ (propagated-inputs
+ (list python-future
+ python-h5py
+ python-louvain
+ python-numpy
+ python-pybedtools
+ python-pysam))
+ (home-page "https://github.com/r3fang/SnapTools")
+ (synopsis "Tools for processing snap files" )
+ (description
+ "@code{SnapTools} can operate on snap files the following types of
+operations:
+
+@itemize
+@item index the reference genome before alignment;
+@item align reads to the corresponding reference genome;
+@item pre-process by convert pair-end reads into fragments, checking the
+ mapping quality score, alingment and filtration;
+@item create the cell-by-bin matrix.
+@end itemize")
+ (license license:asl2.0)))
+
(define-public python-bioframe
(package
(name "python-bioframe")
@@ -4999,6 +5058,126 @@ be of arbitrary length. Repeats with pattern size in the range from 1 to 2000
bases are detected.")
(license license:agpl3+)))
+(define-public trinityrnaseq
+ (package
+ (name "trinityrnaseq")
+ (version "2.13.2")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/trinityrnaseq/trinityrnaseq.git")
+ (commit (string-append "Trinity-v" version))
+ (recursive? #true)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "1qszrxqbx4q5pavpgm4rkrh1z1v1mf7qx83vv3fnlqdmncnsf1gv"))))
+ (build-system gnu-build-system)
+ (arguments
+ (list
+ #:test-target "test"
+ #:modules
+ '((guix build gnu-build-system)
+ (guix build utils)
+ (ice-9 match)
+ (srfi srfi-1))
+ #:make-flags
+ #~(list (string-append "CC=" #$(cc-for-target)))
+ #:phases
+ #~(modify-phases %standard-phases
+ (replace 'configure
+ (lambda _
+ (setenv "SHELL" (which "sh"))
+ (setenv "CONFIG_SHELL" (which "sh"))
+ ;; Do not require version.h, which triggers a local build of a
+ ;; vendored htslib.
+ (substitute* "trinity-plugins/bamsifter/Makefile"
+ (("sift_bam_max_cov.cpp htslib/version.h")
+ "sift_bam_max_cov.cpp"))))
+ (add-after 'build 'build-plugins
+ (lambda _
+ ;; Run this in the subdirectory to avoid running the
+ ;; tests right here.
+ (with-directory-excursion "trinity-plugins"
+ (invoke "make" "plugins"))))
+ ;; The install script uses rsync, provides no overrides for the
+ ;; default location at /usr/local/bin, and patching it would change
+ ;; all lines that do something.
+ (replace 'install
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let ((share (string-append #$output "/share/trinity/"))
+ (bin (string-append #$output "/bin/")))
+ (mkdir-p bin)
+ (copy-recursively "." share)
+ (delete-file (string-append share "/Chrysalis/build/CMakeFiles/CMakeOutput.log"))
+ (delete-file (string-append share "/Inchworm/build/CMakeFiles/CMakeOutput.log"))
+
+ (wrap-program (string-append share "Trinity")
+ `("R_LIBS_SITE" ":" = (,(getenv "R_LIBS_SITE")))
+ `("PERL5LIB" ":" = (,(getenv "PERL5LIB")))
+ `("PYTHONPATH" ":" = (,(getenv "GUIX_PYTHONPATH")))
+ `("PATH" ":" =
+ ,(cons (string-append share "/trinity-plugins/BIN")
+ (filter-map (match-lambda
+ ((name . dir)
+ (string-append dir "/bin")))
+ inputs))))
+ (symlink (string-append share "Trinity")
+ (string-append bin "Trinity"))))))))
+ (inputs
+ (list blast+
+ bowtie
+ fastqc
+ hisat
+ htslib
+ icedtea-8
+ jellyfish
+ kallisto
+ multiqc
+ perl
+ perl-uri-escape
+ python-numpy
+ python-wrapper
+ r-ape
+ r-argparse
+ r-biobase
+ r-ctc
+ r-deseq2
+ r-edger
+ r-fastcluster
+ r-glimma
+ r-goplot
+ r-goseq
+ r-gplots
+ r-minimal
+ r-qvalue
+ r-rots
+ r-sm
+ r-tidyverse
+ rsem
+ salmon
+ samtools
+ sra-tools
+ star
+ zlib))
+ (propagated-inputs
+ (list coreutils
+ gzip
+ which))
+ (native-inputs (list cmake))
+ (home-page "https://github.com/trinityrnaseq/trinityrnaseq/wiki")
+ (synopsis "Trinity RNA-Seq de novo transcriptome assembly")
+ (description "Trinity assembles transcript sequences from Illumina RNA-Seq
+data. Trinity represents a novel method for the efficient and robust de novo
+reconstruction of transcriptomes from RNA-seq data. Trinity combines three
+independent software modules: Inchworm, Chrysalis, and Butterfly, applied
+sequentially to process large volumes of RNA-seq reads. Trinity partitions
+the sequence data into many individual de Bruijn graphs, each representing the
+transcriptional complexity at a given gene or locus, and then processes each
+graph independently to extract full-length splicing isoforms and to tease
+apart transcripts derived from paralogous genes.")
+ (license license:bsd-3)))
+
(define-public repeat-masker
(package
(name "repeat-masker")
@@ -20521,24 +20700,28 @@ aligner.")
(uri (pypi-uri "scvelo" version))
(sha256
(base32 "0h5ha1459ljs0qgpnlfsw592i8dxqn6p9bl08l1ikpwk36baxb7z"))))
- (build-system python-build-system)
+ (build-system pyproject-build-system)
(arguments
- `(#:phases
- (modify-phases %standard-phases
- ;; Numba needs a writable dir to cache functions.
- (add-before 'check 'set-numba-cache-dir
- (lambda _
- (setenv "NUMBA_CACHE_DIR" "/tmp")))
- (replace 'check
- (lambda* (#:key outputs tests? #:allow-other-keys)
- (when tests?
- ;; The discovered test file names must match the names of the
- ;; compiled files, so we cannot run the tests from
- ;; /tmp/guix-build-*.
- (with-directory-excursion
- (string-append (assoc-ref outputs "out")
- "/lib/python3.10/site-packages/scvelo/core/tests/")
- (invoke "pytest" "-v"))))))))
+ (list
+ #:test-flags
+ ;; XXX: these two tests fail for unknown reasons
+ '(list "-k" "not test_perfect_fit and not test_perfect_fit_2d")
+ #:phases
+ #~(modify-phases %standard-phases
+ ;; Numba needs a writable dir to cache functions.
+ (add-before 'check 'set-numba-cache-dir
+ (lambda _
+ (setenv "NUMBA_CACHE_DIR" "/tmp")))
+ (replace 'check
+ (lambda* (#:key tests? test-flags #:allow-other-keys)
+ (when tests?
+ ;; The discovered test file names must match the names of the
+ ;; compiled files, so we cannot run the tests from
+ ;; /tmp/guix-build-*.
+ (with-directory-excursion
+ (string-append #$output
+ "/lib/python3.10/site-packages/scvelo/core/tests/")
+ (apply invoke "pytest" "-v" test-flags))))))))
(propagated-inputs
(list python-anndata
python-hnswlib
diff --git a/gnu/packages/bootloaders.scm b/gnu/packages/bootloaders.scm
index bd8b621e35..c73a0e665d 100644
--- a/gnu/packages/bootloaders.scm
+++ b/gnu/packages/bootloaders.scm
@@ -55,9 +55,12 @@
#:use-module (gnu packages man)
#:use-module (gnu packages mtools)
#:use-module (gnu packages ncurses)
+ #:use-module (gnu packages ninja)
+ #:use-module (gnu packages package-management)
#:use-module (gnu packages perl)
#:use-module (gnu packages pkg-config)
#:use-module (gnu packages python)
+ #:use-module (gnu packages python-build)
#:use-module (gnu packages python-crypto)
#:use-module (gnu packages texinfo)
#:use-module (gnu packages tls)
@@ -71,6 +74,7 @@
#:use-module (gnu packages python-web)
#:use-module (gnu packages python-xyz)
#:use-module (guix build-system gnu)
+ #:use-module (guix build-system meson)
#:use-module (guix build-system pyproject)
#:use-module (guix build-system trivial)
#:use-module (guix download)
@@ -631,7 +635,7 @@ The SUBDIR argument defaults to \"efi/Guix\", as it is also the case for
(define-public dtc
(package
(name "dtc")
- (version "1.6.1")
+ (version "1.7.0")
(source (origin
(method url-fetch)
(uri (string-append
@@ -639,42 +643,56 @@ The SUBDIR argument defaults to \"efi/Guix\", as it is also the case for
"dtc-" version ".tar.gz"))
(sha256
(base32
- "0xm38h31jb29xfh2sfyk48d8wdfq4b8lmb412zx9vjr35izjb9iq"))))
- (build-system gnu-build-system)
+ "0cij9399snpn672pdbda8qbxljdkfg068kvv3g5811rz6yslx124"))
+ (patches
+ (search-patches "dtc-meson-cell-overflow.patch"))))
+ (build-system meson-build-system)
(arguments
(list
- #:modules `(,@%gnu-build-system-modules (srfi srfi-26))
- #:make-flags
- #~(list (string-append "CC=" #$(cc-for-target))
- ;; /bin/fdt{get,overlay,put} need help finding libfdt.so.1.
- (string-append "LDFLAGS=-Wl,-rpath=" #$output "/lib")
- (string-append "PREFIX=" #$output)
- (string-append "SETUP_PREFIX=" #$output)
- "INSTALL=install")
+ #:modules '((guix build meson-build-system)
+ (guix build utils)
+ (srfi srfi-26))
#:phases
#~(modify-phases %standard-phases
- (add-after 'unpack 'patch-pkg-config
+ (add-after 'unpack 'preparations
(lambda _
- (substitute* '("Makefile"
- "tests/run_tests.sh")
- (("pkg-config")
- #$(pkg-config-for-target)))))
- (delete 'configure) ;no configure script
- (add-before 'build 'install-doc
+ ;; The version string is usually derived via setuptools-scm, but
+ ;; without the git metadata available this fails.
+ (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version)
+
+ ;; Needed by setup.py.
+ (setenv "DESTDIR" "/")
+
+ ;; Native gcc needed by run_test.sh.
+ (setenv "CC" "gcc")
+
+ ;; /bin/fdt{get,overlay,put} need help finding libfdt.so.1.
+ (setenv "LDFLAGS"
+ (string-append "-Wl,-rpath=" #$output "/lib"))))
+ (add-after 'unpack 'install-doc
(lambda _
(with-directory-excursion "Documentation"
(for-each (cut install-file <> (string-append
#$output "/share/doc/dtc/"))
'("dts-format.txt"
"dt-object-internal.txt"
- "manual.txt"))))))))
+ "manual.txt")))))
+ (add-after 'unpack 'patch-pkg-config
+ (lambda _
+ (substitute* '("tests/run_tests.sh")
+ (("pkg-config")
+ #$(pkg-config-for-target))))))))
(native-inputs
(append
(list bison
flex
libyaml
+ ninja
pkg-config
- swig)
+ python
+ python-setuptools-scm
+ swig
+ which)
(if (member (%current-system) (package-supported-systems valgrind))
(list valgrind)
'())))
diff --git a/gnu/packages/bootstrap.scm b/gnu/packages/bootstrap.scm
index 602d8f26c5..a36bb289cd 100644
--- a/gnu/packages/bootstrap.scm
+++ b/gnu/packages/bootstrap.scm
@@ -1,7 +1,7 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2014, 2015, 2018, 2019 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2017, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2017, 2020, 2024 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2018, 2020, 2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2019 Carl Dong <contact@carldong.me>
;;; Copyright © 2019 Léo Le Bouter <lle-bout@zaclys.net>
@@ -323,6 +323,9 @@ or false to signal an error."
((string=? system "powerpc64-linux") "/lib/ld64.so.1")
((string=? system "alpha-linux") "/lib/ld-linux.so.2")
+ ;; TODO: Differentiate between x86_64-linux-gnu and x86_64-linux-gnux32.
+ ((string=? system "x86_64-linux-gnux32") "/lib/ld-linux-x32.so.2")
+
;; XXX: This one is used bare-bones, without a libc, so add a case
;; here just so we can keep going.
((string=? system "arm-eabi") "no-ld.so")
diff --git a/gnu/packages/check.scm b/gnu/packages/check.scm
index 80e0b94d01..449340f331 100644
--- a/gnu/packages/check.scm
+++ b/gnu/packages/check.scm
@@ -47,6 +47,7 @@
;;; Copyright © 2023 Bruno Victal <mirai@makinata.eu>
;;; Copyright © 2023 Reza Housseini <reza@housseini.me>
;;; Copyright © 2023 Hilton Chain <hako@ultrarare.space>
+;;; Copyright © 2023 Troy Figiel <troy@troyfigiel.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -602,10 +603,10 @@ It allows the specification of behaviour scenarios using a given-when-then
pattern.")
(license license:apsl2))))
-(define-public catch2-3.3
+(define-public catch2-3
(package
(name "catch2")
- (version "3.4.0")
+ (version "3.5.1")
(home-page "https://github.com/catchorg/Catch2")
(source (origin
(method git-fetch)
@@ -615,7 +616,7 @@ pattern.")
(file-name (git-file-name name version))
(sha256
(base32
- "1gdfsva6mnd66px85fmm3s65h8qzqnmgbmws2i3nygfav1y8d88f"))))
+ "0p7rk01n4qfnnm1bgakllyqi83n1kbpz11gh65z1vspfz58hs9iv"))))
(build-system cmake-build-system)
(arguments
(list
@@ -1416,6 +1417,30 @@ distributed testing in both @code{load} and @code{each} modes. It also
supports coverage of subprocesses.")
(license license:expat)))
+(define-public python-pytest-dotenv
+ (package
+ (name "python-pytest-dotenv")
+ (version "0.5.2")
+ (source
+ (origin
+ ;; No tests in the PyPI tarball.
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/quiqua/pytest-dotenv")
+ (commit version)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "0bdxwaak5clhsd63b9q65nf2amqqv5hfn7dskfakyldxsqnnh0y6"))))
+ (build-system pyproject-build-system)
+ (propagated-inputs (list python-dotenv))
+ (native-inputs (list python-pytest))
+ (home-page "https://github.com/quiqua/pytest-dotenv")
+ (synopsis "Automatically detect and load a .env file before running tests")
+ (description
+ "This Pytest plugin automatically detects and loads environment variables
+from a .env file before running tests.")
+ (license license:expat)))
+
(define-public python-pytest-httpserver
(package
(name "python-pytest-httpserver")
diff --git a/gnu/packages/chemistry.scm b/gnu/packages/chemistry.scm
index e177b27e9d..df96a2f5c1 100644
--- a/gnu/packages/chemistry.scm
+++ b/gnu/packages/chemistry.scm
@@ -263,7 +263,7 @@ molecules.")
(arguments '(#:tests? #f))
;; There is no support for modern msgpack versions yet (see:
;; https://github.com/rcsb/mmtf-cpp/issues/44).
- (propagated-inputs (list msgpack)) ;included by mmtf/structure_data.hpp
+ (propagated-inputs (list msgpack-3)) ;included by mmtf/structure_data.hpp
(home-page "https://mmtf.rcsb.org/")
(synopsis "C++ API for the Macromolecular Transmission Format")
(description "This package is a library for the
diff --git a/gnu/packages/cpp.scm b/gnu/packages/cpp.scm
index 0f2c6e0b85..f65506dcec 100644
--- a/gnu/packages/cpp.scm
+++ b/gnu/packages/cpp.scm
@@ -31,7 +31,7 @@
;;; Copyright © 2022 Arun Isaac <arunisaac@systemreboot.net>
;;; Copyright © 2022, 2023 David Elsing <david.elsing@posteo.net>
;;; Copyright © 2022, 2023 Zheng Junjie <873216071@qq.com>
-;;; Copyright © 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2022, 2023, 2024 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 2022 Antero Mejr <antero@mailbox.org>
;;; Copyright © 2023 Sughosha <Sughosha@proton.me>
;;; Copyright © 2023 Artyom V. Poptsov <poptsov.artyom@gmail.com>
@@ -327,6 +327,28 @@ the @code{Clang/LLVM} infrastructure to extract the data, and emits it in
various formats, including @code{json}.")
(license license:gpl2+)))
+(define-public expected-lite
+ (package
+ (name "expected-lite")
+ (version "0.6.3")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/martinmoene/expected-lite")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0d58nqh2fwdzdpln2wlnf898wyfxdnskq6ff33azbg92d5ibzys2"))))
+ (build-system cmake-build-system)
+ (home-page "https://github.com/martinmoene/expected-lite")
+ (synopsis "Expected objects in C++11 and later")
+ (description "@i{expected lite} is a single-file header-only library for
+objects that either represent a valid value or an error that can be passed by
+value. It is intended for use with C++11 and later. The library is based on
+the @code{std::expected} proposal (@url{http://wg21.link/p0323}).")
+ (license license:boost1.0)))
+
(define-public libzen
(package
(name "libzen")
diff --git a/gnu/packages/curl.scm b/gnu/packages/curl.scm
index b33f4d36d4..f73aed679d 100644
--- a/gnu/packages/curl.scm
+++ b/gnu/packages/curl.scm
@@ -65,14 +65,14 @@
(define-public curl
(package
(name "curl")
- (version "8.4.0")
+ (version "8.5.0")
(source (origin
(method url-fetch)
(uri (string-append "https://curl.se/download/curl-"
version ".tar.xz"))
(sha256
(base32
- "0bd8y8v66biyqvg70ka1sdd0aixs6yzpnvfsig907xzh9af2mihn"))
+ "1sqfflilf7mcz1g03lazyr6v6pf1rsrzprrknsir10hdwawqvas2"))
(patches (search-patches "curl-use-ssl-cert-env.patch"))))
(build-system gnu-build-system)
(outputs '("out"
@@ -127,15 +127,20 @@
(if parallel-tests?
(number->string (parallel-job-count))
"1")))
+ ;; Ignore test 1477 due to a missing file in the 8.5.0
+ ;; release. See
+ ;; <https://github.com/curl/curl/issues/12462>.
(arguments `("-C" "tests" "test"
,@make-flags
,(if #$(or (system-hurd?)
(target-arm32?)
(target-aarch64?))
;; protocol FAIL
- (string-append "TFLAGS=\"~1474 "
- job-count "\"")
- (string-append "TFLAGS=" job-count)))))
+ (string-append "TFLAGS=~1474 "
+ "!1477 "
+ job-count)
+ (string-append "TFLAGS=\"~1477 "
+ job-count "\"")))))
;; The top-level "make check" does "make -C tests quiet-test", which
;; is too quiet. Use the "test" target instead, which is more
;; verbose.
diff --git a/gnu/packages/display-managers.scm b/gnu/packages/display-managers.scm
index 7120c2ad75..2df4e6311b 100644
--- a/gnu/packages/display-managers.scm
+++ b/gnu/packages/display-managers.scm
@@ -69,25 +69,16 @@
(define-public sddm
(package
(name "sddm")
- (version "0.19.0")
+ (version "0.20.0")
(source (origin
- (method url-fetch)
- (uri (string-append
- "https://github.com/sddm/sddm"
- "/releases/download/v" version "/"
- "sddm-" version ".tar.xz"))
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/sddm/sddm")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
(sha256
(base32
- "0hcdysw8ibr66vk8i7v56l0v5ijvhlq67v4460mc2xf2910g2m72"))
- (snippet
- #~(begin
- ;; https://github.com/sddm/sddm/issues/1536
- ;; https://github.com/sddm/sddm/commit/e93bf95c54ad8c2a1604f8d7be05339164b19308
- ;; Commit comes shortly after the 0.19.0 release.
- (use-modules ((guix build utils)))
- (substitute* "src/daemon/XorgDisplayServer.cpp"
- (("m_cookie\\[i\\] = digits\\[dis\\(gen\\)\\]")
- "m_cookie[i] = QLatin1Char(digits[dis(gen)])"))))))
+ "1450zv03d3mbid27986p4mdshw9qf3ar8crl4idybf7khxgan22y"))))
(build-system qt-build-system)
(native-inputs
(list extra-cmake-modules pkg-config qttools-5))
@@ -109,36 +100,39 @@
shadow
wayland))
(arguments
- `(#:configure-flags
- ,#~(list
- ;; This option currently does nothing, but will presumably be enabled
- ;; if/when <https://github.com/sddm/sddm/pull/616> is merged.
- "-DENABLE_WAYLAND=ON"
- "-DENABLE_PAM=ON"
- ;; Both flags are required for elogind support.
- "-DNO_SYSTEMD=ON" "-DUSE_ELOGIND=ON"
- "-DCONFIG_FILE=/etc/sddm.conf"
- ;; Set path to /etc/login.defs.
- ;; An alternative would be to use -DUID_MIN and -DUID_MAX.
- (string-append "-DLOGIN_DEFS_PATH="
- #$(this-package-input "shadow")
- "/etc/login.defs")
- (string-append "-DQT_IMPORTS_DIR="
- #$output "/lib/qt5/qml")
- (string-append "-DCMAKE_INSTALL_SYSCONFDIR="
- #$output "/etc"))
- #:phases
- (modify-phases %standard-phases
- (add-after 'unpack 'embed-loginctl-reference
- (lambda _
- (substitute* "CMakeLists.txt"
- (("/usr/bin/loginctl") (which "loginctl")))
- #t)))))
+ (list
+ #:configure-flags
+ #~(list
+ "-DENABLE_WAYLAND=ON"
+ "-DENABLE_PAM=ON"
+ ;; Both flags are required for elogind support.
+ "-DNO_SYSTEMD=ON"
+ "-DUSE_ELOGIND=ON"
+ "-DCONFIG_FILE=/etc/sddm.conf"
+ ;; Set path to /etc/login.defs.
+ ;; An alternative would be to use -DUID_MIN and -DUID_MAX.
+ (string-append "-DLOGIN_DEFS_PATH="
+ #$(this-package-input "shadow")
+ "/etc/login.defs")
+ (string-append "-DCMAKE_CXX_FLAGS=-I"
+ #$(this-package-input
+ "qtdeclarative") "/include/qt5")
+ (string-append "-DQT_IMPORTS_DIR="
+ #$output "/lib/qt5/qml")
+ (string-append "-DCMAKE_INSTALL_SYSCONFDIR="
+ #$output "/etc"))
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'unpack 'embed-loginctl-reference
+ (lambda _
+ (substitute* "CMakeLists.txt"
+ (("/usr/bin/loginctl")
+ (which "loginctl"))))))))
(synopsis "QML based X11 and Wayland display manager")
(description "SDDM is a display manager for X11 and Wayland aiming to be
fast, simple and beautiful. SDDM is themeable and puts no restrictions on the
-user interface design. It uses QtQuick which gives the designer the ability to
-create smooth, animated user interfaces.")
+user interface design. It uses QtQuick which gives the designer the ability
+to create smooth, animated user interfaces.")
(home-page "https://github.com/sddm/sddm")
;; QML files are MIT licensed and images are CC BY 3.0.
(license (list license:gpl2+ license:expat license:cc-by3.0))))
diff --git a/gnu/packages/education.scm b/gnu/packages/education.scm
index 2fd1d4a632..7b72ed0349 100644
--- a/gnu/packages/education.scm
+++ b/gnu/packages/education.scm
@@ -4,7 +4,7 @@
;;; Copyright © 2016 Hartmut Goebel <h.goebel@crazy-compilers.com>
;;; Copyright © 2017-2023 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2018-2023 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2018-2024 Nicolas Goaziou <mail@nicolasgoaziou.fr>
;;; Copyright © 2020 Robert Smith <robertsmith@posteo.net>
;;; Copyright © 2020 Guy Fleury Iteriteka <gfleury@disroot.org>
;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
@@ -564,7 +564,7 @@ a pen-tablet display and a beamer.")
(define-public fet
(package
(name "fet")
- (version "6.9.0")
+ (version "6.15.0")
(source
(origin
(method url-fetch)
@@ -573,7 +573,7 @@ a pen-tablet display and a beamer.")
(list (string-append directory base)
(string-append directory "old/" base))))
(sha256
- (base32 "1lnw58ga1ldhqfznclmk9l21698pg152w3slq2cwmr69ywqr5wys"))))
+ (base32 "0mmk9f0b23lmmk40mv25wf9vgb7wdgfn5zsa1qrkvkh7dh1hjpax"))))
(build-system gnu-build-system)
(arguments
(list
diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm
index 979c55bb99..1d99fb30ff 100644
--- a/gnu/packages/emacs-xyz.scm
+++ b/gnu/packages/emacs-xyz.scm
@@ -2017,6 +2017,27 @@ Apprentice and Sourcerer.")
theme but now takes more inspiration from the Nano theme.")
(license license:gpl3+)))
+(define-public emacs-adwaita-dark-theme
+ ;; Version 1.1.1 isn't tagged upstream.
+ (package
+ (name "emacs-adwaita-dark-theme")
+ (version "1.1.1")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://gitlab.com/jessieh/adwaita-dark-theme")
+ (commit "057c39313341907b35c68d2179226886a0c276fd")))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "1g7hyg2hfvn24gaw4lca4g8lw10q2wg9nfrgl7pfdggz202m027c"))))
+ (build-system emacs-build-system)
+ (home-page "https://gitlab.com/jessieh/adwaita-dark-theme")
+ (synopsis "Adwaita-inspired dark color scheme for Emacs")
+ (description
+ "This package provides an Adwaita-inspired dark color scheme for Emacs.")
+ (license license:gpl2+)))
+
(define-public emacs-treepy
(package
(name "emacs-treepy")
@@ -10105,13 +10126,20 @@ constants and units into an Emacs buffer.")
(sha256
(base32 "0kq40g46s8kgiafrhdq99h79rz9h5fvgz59k7ralmf86bl4sdmdb"))))
(build-system emacs-build-system)
+ (arguments
+ (list #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'unpack 'remove-spurious-require
+ (lambda _
+ (substitute* "tagedit.el"
+ (("\\(require 'assoc\\)") "")))))))
(propagated-inputs
- (list emacs-s emacs-dash))
+ (list emacs-dash emacs-s))
(home-page "https://github.com/magnars/tagedit")
- (synopsis "Some paredit-like features for html-mode")
+ (synopsis "Some Paredit-like features for HTML mode")
(description
- "This package provides a collection of paredit-like functions for editing
-in @code{html-mode}.")
+ "This package provides a collection of Paredit-like functions for editing
+in HTML mode.")
(license license:gpl3+)))
(define-public emacs-slime
@@ -11388,6 +11416,30 @@ package provides a light and a dark variant.")
Solarized color scheme.")
(license license:expat))))
+(define-public emacs-color-identifiers-mode
+ (let ((commit "a26d00d898e0a3295cb7da9323046397223ea1fe")
+ (revision "0"))
+ (package
+ (name "emacs-color-identifiers-mode")
+ (version (git-version "1.1" revision commit))
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/ankurdave/color-identifiers-mode")
+ (commit commit)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "1kky827f922ziiwasrfnv97vqdf62fp9yml36x1fjsm2h6qw0c8v"))))
+ (build-system emacs-build-system)
+ (propagated-inputs (list emacs-dash))
+ (home-page "https://github.com/ankurdave/color-identifiers-mode")
+ (synopsis "Minor mode for coloring identifiers based on their names")
+ (description
+ "This package provides an Emacs minor mode to highlight each source
+code identifier uniquely based on its name.")
+ (license license:gpl3+))))
+
(define-public emacs-poet-theme
(let ((commit "16eb694f0755c04c4db98614d0eca1199fddad70")
(revision "1"))
@@ -29880,14 +29932,14 @@ buffer and launches Magit from the status buffer for the project at point.")
(define-public emacs-repology
(package
(name "emacs-repology")
- (version "1.2.3")
+ (version "1.2.4")
(source
(origin
(method url-fetch)
(uri (string-append "https://elpa.gnu.org/packages/"
"repology-" version ".tar"))
(sha256
- (base32 "1ngx23b7dilyps20nznrrn867kbxyn6nryf4p1sy5m576hkw18kn"))))
+ (base32 "0l53wl0bk8rnqwsjdh1hwvkvbay080l10bslcj3scn42bgbi59j1"))))
(build-system emacs-build-system)
(arguments
(list
diff --git a/gnu/packages/finance.scm b/gnu/packages/finance.scm
index 749f741710..eadaa46102 100644
--- a/gnu/packages/finance.scm
+++ b/gnu/packages/finance.scm
@@ -2300,7 +2300,7 @@ mining.")
(define-public p2pool
(package
(name "p2pool")
- (version "3.7")
+ (version "3.10")
(source
(origin
(method git-fetch)
@@ -2309,7 +2309,7 @@ mining.")
(commit (string-append "v" version))
(recursive? #t)))
(file-name (git-file-name name version))
- (sha256 (base32 "1sghdk8yq8si0bq0z83fji48q8yrq0ymvsxbbh5mscw6223syrjq"))
+ (sha256 (base32 "0lp9slfwaq3wp4x6xpsiazam5lv6dz57m20adzlzzk0anb1ascr0"))
(modules '((guix build utils)))
(snippet
#~(for-each delete-file-recursively
diff --git a/gnu/packages/firmware.scm b/gnu/packages/firmware.scm
index 5cebf515bf..e691bf33da 100644
--- a/gnu/packages/firmware.scm
+++ b/gnu/packages/firmware.scm
@@ -875,7 +875,7 @@ Executables included are:
(let ((toolchain-ver "GCC5"))
(package
(name "ovmf")
- (version "202308")
+ (version "202311")
(source (origin
(method git-fetch)
(uri (git-reference
@@ -886,7 +886,7 @@ Executables included are:
(file-name (git-file-name name version))
(sha256
(base32
- "04rnfnaqr2c7ayplj7ib730zp1snw157zx5rmykz5hz1zz2vb20j"))))
+ "136dl5cxpjpg37whzlqq7jrrjsgybmwrgkbbmks8xaixqmzwhbw0"))))
(build-system gnu-build-system)
(arguments
(list
diff --git a/gnu/packages/fonts.scm b/gnu/packages/fonts.scm
index 7516e1642b..e050f4fde9 100644
--- a/gnu/packages/fonts.scm
+++ b/gnu/packages/fonts.scm
@@ -123,6 +123,29 @@
titling.")
(license license:silofl1.1)))
+(define-public font-cardo
+ (package
+ (name "font-cardo")
+ (version "1.04")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "https://scholarsfonts.net/cardo"
+ (string-delete #\. version) ".zip"))
+ (sha256
+ (base32
+ "0ps55zjva4fzmg47w2i8srrh8sqxz1wkcclihwgzlwfbaxixn0cl"))))
+ (build-system font-build-system)
+ (home-page "https://scholarsfonts.net/cardofnt.html")
+ (synopsis "Unicode font for classical scholarship")
+ (description
+ "Cardo is a large unicode font specifically designed for the needs of
+classicists, biblical scholars, medievalists, and linguists. Since it may be
+used to prepare materials for publication, it also contains features that are
+required for high-quality typography, such as ligatures, text figures (also
+known as old style numerals), true small capitals and a variety of punctuation
+and space characters.")
+ (license license:silofl1.1)))
+
(define-public font-chivo
(let ((commit "dc61c468d79781eb5183426e88e844af16cdc3e5")
(revision "0"))
@@ -1952,15 +1975,15 @@ weights and five widths in both Roman and Italic, plus variable fonts.")
(define-public font-sarasa-gothic
(package
(name "font-sarasa-gothic")
- (version "0.42.6")
+ (version "1.0.3")
(source
(origin
(method url-fetch)
(uri (string-append "https://github.com/be5invis/Sarasa-Gothic"
"/releases/download/v" version
- "/sarasa-gothic-ttc-" version ".7z"))
+ "/Sarasa-TTC-" version ".7z"))
(sha256
- (base32 "0czx10yph2lxg2k4w6qjnil73zb2pgg3g400apm9gay41m04990v"))))
+ (base32 "1cgqf15fhg567s2bwjpal3xfcdnbgyy0iav5181zkn6b4k56dgl4"))))
(build-system font-build-system)
(arguments
`(#:phases (modify-phases %standard-phases
diff --git a/gnu/packages/game-development.scm b/gnu/packages/game-development.scm
index 73f93a9992..ea1adf0ecf 100644
--- a/gnu/packages/game-development.scm
+++ b/gnu/packages/game-development.scm
@@ -196,69 +196,71 @@ is used in some video games and movies.")
(license license:zlib)))
(define-public dds
- (package
- (name "dds")
- (version "2.9.0")
- (source
- (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://github.com/dds-bridge/dds")
- (commit (string-append "v" version))))
- (file-name (git-file-name name version))
- (sha256
- (base32
- "1iv09qic43nvla02lm8zgnkqpjgnc95p8zh3wyifmnmlh1rz02yj"))))
- (build-system gnu-build-system)
- (arguments
- (list #:phases
- #~(modify-phases %standard-phases
- (add-after 'unpack 'chdir
- (lambda _
- (chdir "src")))
- (replace 'configure
- ;; Configuration is done by copying the appropriate
- ;; make file in the working directory. There is no
- ;; configure script.
- (lambda _
- (copy-file "Makefiles/Makefile_linux_shared"
- "Makefile")))
- (replace 'check
- ;; There is no "check" traget. We must compile
- ;; a "dtest" program and apply it on a data set.
- (lambda* (#:key tests? #:allow-other-keys)
- (when tests?
- (install-file "libdds.so" "../test")
- (with-directory-excursion "../test"
- (copy-file "Makefiles/Makefile_linux"
- "Makefile")
- (substitute* "Makefile"
- (("-Werror") ""))
- (invoke "make")
- (invoke "./dtest" "-f" "../hands/list100.txt")))))
- (replace 'install
- ;; "install" target merely moves ".so" file around
- ;; the source directory. We install it in the store,
- ;; along with all shipped documentation (which cannot
- ;; be built from source unfortunately).
- (lambda _
- (install-file "libdds.so"
- (string-append #$output "/lib"))
- (let ((doc (string-append #$output
- "/share/doc/"
- #$name "-" #$version)))
- (install-file "../LICENSE" doc)
- (copy-recursively "../doc" doc)))))))
- (native-inputs
- (list gawk procps))
- (inputs
- (list boost))
- (home-page "https://privat.bahnhof.se/wb758135/")
- (synopsis "Double dummy solver for the bridge card game")
- (description "DDS is a double-dummy solver of bridge hands. It supports
+ (let ((commit "d2bc4c2c703941664fc1d73e69caa5233cdeac18")
+ (revision "1"))
+ (package
+ (name "dds")
+ (version (git-version "2.9.0" revision commit))
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/dds-bridge/dds")
+ (commit commit)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "1ishbb69cvyv96xdxshnly0m5ydwljgdf8fwa1cr9rj2qj40q4rm"))))
+ (build-system gnu-build-system)
+ (arguments
+ (list #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'unpack 'chdir
+ (lambda _
+ (chdir "src")))
+ (replace 'configure
+ ;; Configuration is done by copying the appropriate
+ ;; make file in the working directory. There is no
+ ;; configure script.
+ (lambda _
+ (copy-file "Makefiles/Makefile_linux_shared"
+ "Makefile")))
+ (replace 'check
+ ;; There is no "check" traget. We must compile
+ ;; a "dtest" program and apply it on a data set.
+ (lambda* (#:key tests? #:allow-other-keys)
+ (when tests?
+ (install-file "libdds.so" "../test")
+ (with-directory-excursion "../test"
+ (copy-file "Makefiles/Makefile_linux"
+ "Makefile")
+ (substitute* "Makefile"
+ (("-Werror") ""))
+ (invoke "make")
+ (invoke "./dtest" "-f" "../hands/list100.txt")))))
+ (replace 'install
+ ;; "install" target merely moves ".so" file around
+ ;; the source directory. We install it in the store,
+ ;; along with all shipped documentation (which cannot
+ ;; be built from source unfortunately).
+ (lambda _
+ (install-file "libdds.so"
+ (string-append #$output "/lib"))
+ (let ((doc (string-append #$output
+ "/share/doc/"
+ #$name "-" #$version)))
+ (install-file "../LICENSE" doc)
+ (copy-recursively "../doc" doc)))))))
+ (native-inputs
+ (list gawk procps))
+ (inputs
+ (list boost))
+ (home-page "https://privat.bahnhof.se/wb758135/")
+ (synopsis "Double dummy solver for the bridge card game")
+ (description "DDS is a double-dummy solver of bridge hands. It supports
single-threading and multi-threading for improved performance. DDS
offers a wide range of functions, including par-score calculations.")
- (license license:asl2.0)))
+ (license license:asl2.0))))
(define-public deutex
(package
@@ -3269,16 +3271,16 @@ progresses the level, or you may regenerate tiles as the world changes.")
(define-public bbcsdl
(package
(name "bbcsdl")
- (version "1.35a")
+ (version "1.39a")
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/rtrussell/BBCSDL/")
- (commit "b9b2a3eb438cb799edb2766055b3c38e9518e3e3")))
+ (commit "93b0ffae960f4c4f45fdc2202bc6e83ee5ca277c")))
(file-name (git-file-name name version))
(sha256
(base32
- "1d03xmhrl6ba6w0vwfk46mpyc9d0w3bixxj2d4irx7wl7bh3bfic"))))
+ "03ga14k2hbhflnaynbyx9lwlbxlzx3rv6zqq21yhl183s6d4c0wa"))))
(build-system gnu-build-system)
(arguments
(list
@@ -3318,6 +3320,7 @@ progresses the level, or you may regenerate tiles as the world changes.")
inputs (string-append "share/fonts/truetype/" font))
(string-append opt "/lib/" font)))
'("DejaVuSans.ttf" "DejaVuSansMono.ttf"
+ "DejaVuSans-Oblique.ttf"
"FreeSans.ttf" "FreeMono.ttf" "FreeSerif.ttf"))
(mkdir bin)
(symlink (string-append opt "/bbcsdl")
diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
index c7813790a1..cf2e38f49c 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -78,7 +78,8 @@
;;; Copyright © 2023 Zheng Junjie <873216071@qq.com>
;;; Copyright © 2023 Florian Pelz <pelzflorian@pelzflorian.de>
;;; Copyright © 2023 Ivana Drazovic <iv.dra@hotmail.com>
-;;; Copyright © 2023 gemmaro <gemmaro.dev@gmail.com>
+;;; Copyright © 2023, 2024 gemmaro <gemmaro.dev@gmail.com>
+;;; Copyright © 2023 Wilko Meyer <w@wmeyer.eu>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -193,6 +194,7 @@
#:use-module (gnu packages protobuf)
#:use-module (gnu packages pulseaudio)
#:use-module (gnu packages python)
+ #:use-module (gnu packages python-compression)
#:use-module (gnu packages python-web)
#:use-module (gnu packages python-xyz)
#:use-module (gnu packages qt)
@@ -230,6 +232,7 @@
#:use-module (guix build-system meson)
#:use-module (guix build-system perl)
#:use-module (guix build-system python)
+ #:use-module (guix build-system pyproject)
#:use-module (guix build-system qt)
#:use-module (guix build-system scons)
#:use-module (guix build-system trivial)
@@ -2367,6 +2370,55 @@ Every puzzle has a complete solution, although there may be more than one.")
"PrBoom+ is a Doom source port developed from the original PrBoom project.")
(license license:gpl2+)))
+(define-public redeal
+ (let ((commit "e2e81a477fd31ae548a340b5f0f380594d3d0ad6")
+ (revision "1"))
+ (package
+ (name "redeal")
+ (version (git-version "0.2.0" revision commit))
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/anntzer/redeal")
+ (commit commit)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "1vac36bg4ah9gs4hgmp745xq6nnmd7s71vsq99d72ng3sxap0wa3"))))
+ (build-system pyproject-build-system)
+ (arguments
+ (list
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'unpack 'unbundle-dds
+ (lambda* (#:key inputs #:allow-other-keys)
+ (substitute* "setup.py"
+ (("cmdclass=.*") ""))
+ (let ((libdds (search-input-file inputs "lib/libdds.so")))
+ (substitute* "redeal/dds.py"
+ ((" and os.path.exists\\(dll_path\\)") "")
+ (("dll = DLL\\(dll_path\\)")
+ (format #f "dll = DLL(~s)" libdds))))))
+ (add-after 'install 'install-examples
+ (lambda _
+ (let* ((doc (string-append #$output "/share/doc/"))
+ (examples
+ (string-append doc #$name "-" #$version "/examples")))
+ (mkdir-p examples)
+ (copy-recursively "examples" examples)))))))
+ (inputs (list dds `(,python "tk")))
+ (propagated-inputs (list python-colorama))
+ (home-page "https://github.com/anntzer/redeal")
+ (synopsis
+ "Deal generator for bridge card game, written in Python")
+ (description
+ "Redeal is a deal generator written in Python. It outputs deals
+satisfying whatever conditions you specify --- deals with a double void, deals
+with a strong 2♣ opener opposite a yarborough, etc. Using Bo Haglund's double
+dummy solver, it can even solve the hands it has generated for you.")
+ (license license:gpl3))))
+
(define-public retux
(let ((release "1.6.1")
(revision 0))
@@ -3385,25 +3437,29 @@ a C library, so they can easily be integrated into other programs.")
(define-public taisei
(package
(name "taisei")
- (version "1.3.2")
+ (version "1.4")
(source
(origin
(method url-fetch)
(uri (string-append "https://github.com/taisei-project/"
"taisei/releases/download/v" version
- "/taisei-v" version ".tar.xz"))
+ "/taisei-" version ".tar.xz"))
(sha256
- (base32 "1g53fcyrlzmvlsb40pw90gaglysv6n1w42hk263iv61ibhdmzh6v"))))
+ (base32 "1glrr99xiyz674d1izgvmk9w1zxanc94d34pacd0wya66bbml0nc"))))
(build-system meson-build-system)
(arguments
- `(#:build-type "release" ;comment out for bug-reporting (and cheats)
- #:configure-flags
- (list "-Dr_default=gles30"
- "-Dr_gles20=true"
- "-Dr_gles30=true"
- "-Dshader_transpiler=true")))
+ (list
+ #:build-type "release" ;comment out for bug-reporting (and cheats)
+ #:configure-flags #~(list "-Dr_default=gles30"
+ "-Dr_gles20=true"
+ "-Dr_gles30=true"
+ "-Dshader_transpiler=true")))
(native-inputs
- (list pkg-config python python-docutils python-pygments))
+ (list pkg-config
+ python
+ python-docutils
+ python-pygments
+ python-zstandard))
(inputs
(list cglm
freetype
@@ -3417,21 +3473,23 @@ a C library, so they can easily be integrated into other programs.")
sdl2-mixer
shaderc
spirv-cross
- zlib))
+ zlib
+ (list zstd "lib")))
(home-page "https://taisei-project.org/")
(synopsis "Shoot'em up fangame and libre clone of Touhou Project")
(description
"The player controls a character (one of three: Good, Bad, and Dead),
dodges the missiles (lots of it cover the screen, but the character's hitbox
is very small), and shoot at the adversaries that keep appear on the screen.")
- (license (list ;;game
- license:expat
- ;;resources/00-taisei.pkgdir/bgm/
- ;;atlas/portraits/
- license:cc-by4.0
- ;;miscellaneous
- license:cc0
- license:public-domain))))
+ (license (list
+ ;; game
+ license:expat
+ ;; resources/00-taisei.pkgdir/bgm/
+ ;; atlas/portraits/
+ license:cc-by4.0
+ ;; miscellaneous
+ license:cc0
+ license:public-domain))))
(define-public cmatrix
(package
@@ -3833,7 +3891,7 @@ for common mesh file formats, and collision detection.")
(package
(inherit irrlicht)
(name "irrlicht-for-minetest")
- (version "1.9.0mt10")
+ (version "1.9.0mt13")
(source
(origin
(method git-fetch)
@@ -3843,7 +3901,7 @@ for common mesh file formats, and collision detection.")
(file-name (git-file-name name version))
(sha256
(base32
- "0y5vchz91khs8dmrkpgc7sqmvzx2yjj6svivvm80r4yppv7s03rw"))))
+ "11pxg0yh50ym1hvh8va5jbbcjz5dsshj3xxvm3qhkgg96vpism06"))))
(build-system cmake-build-system)
(arguments
;; No check target.
@@ -10115,6 +10173,36 @@ can be downloaded from @url{https://zero.sjeng.org/best-network}.")
(home-page "https://github.com/bernds/q5Go")
(license license:gpl2+)))
+(define-public qcheckers
+ (package
+ (name "qcheckers")
+ (version "0.9.0")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/portnov/qcheckers")
+ (commit version)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "05wzql6abzdf6l0vdzki4rfy2zn31mcplh1wkw3ddk8w81pvaymw"))))
+ (build-system qt-build-system)
+ (arguments
+ (list
+ #:tests? #f
+ #:phases
+ #~(modify-phases %standard-phases
+ (replace 'configure
+ (lambda _
+ (invoke "qmake"
+ (string-append "PREFIX=" #$output)))))))
+ (inputs (list qtbase-5 qtsvg-5))
+ (home-page "https://portnov.github.io/qcheckers/")
+ (synopsis "Qt-based checkers boardgame")
+ (description "QCheckers, formely known as KCheckers, is a is a Qt version
+of the classic boardgame checkers (also known as draughts).")
+ (license license:gpl2+)))
+
(define-public xmoto
(package
(name "xmoto")
@@ -10415,6 +10503,31 @@ sunfish, but is written in C rather than Python. It also has TUI tools for
using any UCI engine and also to connect UCI engines to Lichess.")
(license license:agpl3+))))
+(define-public morris
+ (package
+ (name "morris")
+ (version "0.3")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/farindk/morris")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "1kkcnpkzgybm7rqg7nafd7sqd5m4alns6l4j5zcf3p41jdc9s3iv"))))
+ (build-system glib-or-gtk-build-system)
+ (inputs (list automake autoconf pkg-config intltool
+ gnu-gettext libtool glib gtk+-2 boost))
+ (arguments `(#:tests? #f))
+ (home-page "http://nine-mens-morris.net/downloads.html")
+ (synopsis "Morris is an implementation of the board game Nine Men's Morris")
+ (description "Morris is an implementation of the board game Nine Men's Morris.
+It supports not only the standard game, but also several rule-variants and different
+board layouts. You can play against the computer, or simply use the program to
+present the board, but play against another human opponent.")
+ (license license:gpl3)))
+
(define-public barrage
(package
(name "barrage")
diff --git a/gnu/packages/gcc.scm b/gnu/packages/gcc.scm
index a8b74a3632..5590cd3d7e 100644
--- a/gnu/packages/gcc.scm
+++ b/gnu/packages/gcc.scm
@@ -3,7 +3,7 @@
;;; Copyright © 2014, 2015, 2018 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2014, 2015, 2016, 2017, 2019, 2021 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2015, 2023 Andreas Enge <andreas@enge.fr>
-;;; Copyright © 2015-2018, 2020-2023 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2015-2018, 2020-2024 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2016 Carlos Sánchez de La Lama <csanchezdll@gmail.com>
;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2018, 2020, 2022 Marius Bakke <marius@gnu.org>
@@ -75,6 +75,9 @@ where the OS part is overloaded to denote a specific ABI---into GCC
"--with-mode=thumb"
"--with-fpu=neon"))
+ ((string-match "x86_64-linux-gnux32" target)
+ '("--with-abi=mx32"))
+
((and (string-suffix? "-gnu" target)
(not (string-contains target "-linux")))
;; Cross-compilation of libcilkrts in GCC 5.5.0 to GNU/Hurd fails
diff --git a/gnu/packages/geo.scm b/gnu/packages/geo.scm
index 31abb2cc36..73b7aa3d11 100644
--- a/gnu/packages/geo.scm
+++ b/gnu/packages/geo.scm
@@ -3228,3 +3228,31 @@ For maps, it can uses its own \"binfile\" map format, or Garmin map
file format, and data from OpenStreetMap, Garmin maps, Marco Polo
Grosser Reiseplaner, Routeplaner Europa 2007, Map + Route.")
(license license:gpl2)))
+
+(define-public laszip
+ (package
+ (name "laszip")
+ (version "3.4.3")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/LASzip/LASzip")
+ (commit "3.4.3")))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "09lcsgxwv0jq50fhsgfhx0npbf1zcwn3hbnq6q78fshqksbxmz7m"))))
+ (build-system cmake-build-system)
+ (arguments
+ (list
+ #:configure-flags #~(list "-DLASZIP_BUILD_STATIC=NO")
+ #:build-type "Release"
+ ;; No tests.
+ #:tests? #f))
+ (home-page "https://laszip.org/")
+ (synopsis "Compression library for LAS files")
+ (description
+ "LASzip is a library for compressing @code{LAS} files and uncompressing
+@code{LAZ} files. The @code{LAS} format is a file format designed for the
+interchange and archiving of lidar point cloud data.")
+ (license license:asl2.0)))
diff --git a/gnu/packages/gl.scm b/gnu/packages/gl.scm
index b0ee413acd..7998142b4d 100644
--- a/gnu/packages/gl.scm
+++ b/gnu/packages/gl.scm
@@ -18,7 +18,7 @@
;;; Copyright © 2021, 2022, 2023 John Kehayias <john.kehayias@protonmail.com>
;;; Copyright © 2022 Petr Hodina <phodina@protonmail.com>
;;; Copyright © 2023 Kaelyn Takata <kaelyn.alexi@protonmail.com>
-;;; Copyright © 2023 Zheng Junjie <873216071@qq.com>
+;;; Copyright © 2023, 2024 Zheng Junjie <873216071@qq.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -62,6 +62,7 @@
#:use-module (guix download)
#:use-module (guix git-download)
#:use-module (guix hg-download)
+ #:use-module (gnu packages cmake)
#:use-module (guix build-system gnu)
#:use-module (guix build-system cmake)
#:use-module (guix build-system meson)
@@ -294,7 +295,7 @@ also known as DXTn or DXTC) for Mesa.")
(define-public mesa
(package
(name "mesa")
- (version "23.2.1")
+ (version "23.3.2")
(source
(origin
(method url-fetch)
@@ -304,7 +305,7 @@ also known as DXTn or DXTC) for Mesa.")
"mesa-" version ".tar.xz")))
(sha256
(base32
- "1k61pgw0vcjrlb4299q98cy7iqmk2r7jmb5ika91z01dzhb0dpk4"))))
+ "1p4swrbmz3kb1805kdj973hf8virgmix4m9qprmcb2bgl4gviz1w"))))
(build-system meson-build-system)
(propagated-inputs
;; The following are in the Requires.private field of gl.pc.
@@ -338,7 +339,8 @@ also known as DXTn or DXTC) for Mesa.")
python-wrapper
(@ (gnu packages base) which)
(if (%current-target-system)
- (list pkg-config-for-build
+ (list cmake-minimal-cross
+ pkg-config-for-build
wayland
wayland-protocols)
'())))
@@ -351,16 +353,16 @@ also known as DXTn or DXTC) for Mesa.")
((target-aarch64?)
;; TODO: Fix svga driver for non-Intel architectures.
'("-Dgallium-drivers=etnaviv,freedreno,kmsro,lima,nouveau,\
-panfrost,r300,r600,swrast,tegra,v3d,vc4,virgl"))
+panfrost,r300,r600,swrast,tegra,v3d,vc4,virgl,zink"))
((target-arm32?)
;; Freedreno FTBFS when built on a 64-bit machine.
'("-Dgallium-drivers=etnaviv,kmsro,lima,nouveau,panfrost,\
-r300,r600,swrast,tegra,v3d,vc4,virgl"))
+r300,r600,swrast,tegra,v3d,vc4,virgl,zink"))
((or (target-ppc64le?) (target-ppc32?) (target-riscv64?))
- '("-Dgallium-drivers=nouveau,r300,r600,radeonsi,swrast,virgl"))
+ '("-Dgallium-drivers=nouveau,r300,r600,radeonsi,swrast,virgl,zink"))
(else
'("-Dgallium-drivers=crocus,iris,nouveau,r300,r600,radeonsi,\
-svga,swrast,virgl")))
+svga,swrast,virgl,zink")))
;; Enable various optional features. TODO: opencl requires libclc,
;; omx requires libomxil-bellagio
"-Dplatforms=x11,wayland"
@@ -415,10 +417,13 @@ svga,swrast,virgl")))
#~(modify-phases %standard-phases
#$@(if (%current-target-system)
#~((add-after 'unpack 'fix-cross-compiling
- (lambda* (#:key inputs #:allow-other-keys)
- ;; It isn't a problem to use the host's llvm-config.
- (setenv "LLVM_CONFIG"
- (search-input-file inputs "/bin/llvm-config")))))
+ (lambda* (#:key native-inputs #:allow-other-keys)
+ ;; When cross compiling, we use cmake to find llvm, not
+ ;; llvm-config, because llvm-config cannot be executed
+ ;; see https://github.com/llvm/llvm-project/issues/58984
+ (setenv "CMAKE"
+ (search-input-file
+ native-inputs "/bin/cmake")))))
#~())
(add-after 'unpack 'disable-failing-test
(lambda _
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index b2d4b73088..b43e533769 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -11,7 +11,7 @@
;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2023 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2015, 2016, 2017, 2018, 2021 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2015 David Thompson <davet@gnu.org>
-;;; Copyright © 2015-2023 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2015-2024 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2016, 2017, 2018 Rene Saavedra <pacoon@protonmail.com>
;;; Copyright © 2016 Jochem Raat <jchmrt@riseup.net>
;;; Copyright © 2016, 2017, 2019 Kei Kebreau <kkebreau@posteo.net>
@@ -4781,12 +4781,15 @@ GLib and GObject, and integrates JSON with GLib data types.")
(string-append #$output:doc
"/share/gtk-doc"))))))))))
(native-inputs
- (modify-inputs (package-native-inputs json-glib-minimal)
- (prepend docbook-xml-4.3
- docbook-xsl
- gobject-introspection
- gtk-doc
- libxslt)))))
+ (if (%current-target-system)
+ ;; No docs, no additional inputs.
+ (package-native-inputs json-glib-minimal)
+ (modify-inputs (package-native-inputs json-glib-minimal)
+ (prepend docbook-xml-4.3
+ docbook-xsl
+ gobject-introspection
+ gtk-doc
+ libxslt))))))
(define-public libxklavier
(package
diff --git a/gnu/packages/gnuzilla.scm b/gnu/packages/gnuzilla.scm
index bf9bf34e3a..188aa02293 100644
--- a/gnu/packages/gnuzilla.scm
+++ b/gnu/packages/gnuzilla.scm
@@ -1034,6 +1034,9 @@ variable defined below. It requires guile-json to be installed."
(setenv "MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE" "system")
(setenv "MOZ_BUILD_DATE" #$%icecat-build-id) ; avoid timestamp
+ ;; WM_CLASS (default is "$MOZ_APP_NAME-$MOZ_UPDATE_CHANNEL").
+ (setenv "MOZ_APP_REMOTINGNAME" "Icecat")
+
;; XXX TODO: Fix this to work on systems other than x86_64-linux.
(setenv "GUIX_PYTHONPATH"
(string-append (getcwd)
@@ -1126,7 +1129,7 @@ variable defined below. It requires guile-json to be installed."
(("NewWindow") "new-window")
(("NewPrivateWindow") "new-private-window")
(("StartupNotify=true")
- "StartupNotify=true\nStartupWMClass=Navigator"))
+ "StartupNotify=true\nStartupWMClass=Icecat"))
(install-file desktop-file applications))))
(add-after 'install-desktop-entry 'install-icons
(lambda _
diff --git a/gnu/packages/golang-web.scm b/gnu/packages/golang-web.scm
index 7759916c35..3e60bfaf33 100644
--- a/gnu/packages/golang-web.scm
+++ b/gnu/packages/golang-web.scm
@@ -21,6 +21,7 @@
;;; Copyright © 2023 Hilton Chain <hako@ultrarare.space>
;;; Copyright © 2023 Katherine Cox-Buday <cox.katherine.e@gmail.com>
;;; Copyright © 2023 Nicolas Graves <ngraves@ngraves.fr>
+;;; Copyright © 2023 Artyom V. Poptsov <poptsov.artyom@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -870,7 +871,7 @@ protocol.")
(define-public go-github-com-hjson-hjson-go
(package
(name "go-github-com-hjson-hjson-go")
- (version "3.1.0")
+ (version "4.3.1")
(source
(origin
(method git-fetch)
@@ -879,7 +880,7 @@ protocol.")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
- (base32 "1dfdiahimg6z9idg8jiqxwnlwjnmasbjccx8gnag49cz4yfqskaz"))))
+ (base32 "138vmbnrwzxf64cia27k407clrydvs2jx927dlv6ziydiqyvy7m3"))))
(build-system go-build-system)
(arguments
'(#:import-path "github.com/hjson/hjson-go"))
diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm
index 36e2c4b23e..58681af958 100644
--- a/gnu/packages/golang.scm
+++ b/gnu/packages/golang.scm
@@ -3959,11 +3959,11 @@ packages.")
(license license:bsd-3))))
(define-public go-golang-org-x-sys
- (let ((commit "b60007cc4e6f966b1c542e343d026d06723e5653")
+ (let ((commit "ca59edaa5a761e1d0ea91d6c07b063f85ef24f78")
(revision "0"))
(package
(name "go-golang-org-x-sys")
- (version (git-version "0.4.0" revision commit))
+ (version (git-version "0.8.0" revision commit))
(source (origin
(method git-fetch)
(uri (git-reference
@@ -3972,7 +3972,7 @@ packages.")
(file-name (git-file-name name version))
(sha256
(base32
- "0fr2d6fnpbqx6n89sg9lsinqkdaw49y068kqj2g0cxlhbh69hzii"))))
+ "1p81niiin8dwyrjl2xsc95136w3vdw4kmj0w3mlh0vh5v134s4xq"))))
(build-system go-build-system)
(arguments
(list
@@ -3989,24 +3989,6 @@ support for low-level interaction with the operating system.")
(home-page "https://go.googlesource.com/sys")
(license license:bsd-3))))
-;; XXX: This version is required for "go-github-com-quic-go-qtls-go1-20".
-(define-public go-golang-org-x-sys-0.8
- (let ((commit "ca59edaa5a761e1d0ea91d6c07b063f85ef24f78")
- (revision "0"))
- (package
- (inherit go-golang-org-x-sys)
- (name "go-golang-org-x-sys")
- (version (git-version "0.8.0" revision commit))
- (source (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://go.googlesource.com/sys")
- (commit commit)))
- (file-name (git-file-name name version))
- (sha256
- (base32
- "1p81niiin8dwyrjl2xsc95136w3vdw4kmj0w3mlh0vh5v134s4xq")))))))
-
(define-public go-golang-org-x-text
(package
(name "go-golang-org-x-text")
@@ -7269,7 +7251,7 @@ implementation of generics.")
#:import-path "github.com/quic-go/qtls-go1-20"
#:go go-1.20))
(propagated-inputs (list go-golang-org-x-crypto
- go-golang-org-x-sys-0.8))
+ go-golang-org-x-sys))
(synopsis "TLS 1.3 for QUIC")
(description
"Go standard library TLS 1.3 implementation, modified for QUIC. For
@@ -7330,21 +7312,17 @@ the Go standard library}.")
#:tests? #f
#:go go-1.20))
(propagated-inputs
- (let ((p (package-input-rewriting
- `((,go-golang-org-x-sys . ,go-golang-org-x-sys-0.8))
- #:deep? #true)))
- (cons go-golang-org-x-sys-0.8
- (map p
- (list go-github-com-quic-go-qtls-go1-20
- go-github-com-quic-go-qpack
- go-golang-org-x-crypto
- go-github-com-cheekybits-genny
- go-github-com-marten-seemann-chacha20
- go-github-com-golang-protobuf-proto
- go-golang-org-x-crypto
- go-golang-org-x-exp
- go-golang-org-x-net
- go-golang-org-x-sync)))))
+ (list go-github-com-quic-go-qtls-go1-20
+ go-github-com-quic-go-qpack
+ go-golang-org-x-crypto
+ go-github-com-cheekybits-genny
+ go-github-com-marten-seemann-chacha20
+ go-github-com-golang-protobuf-proto
+ go-golang-org-x-crypto
+ go-golang-org-x-exp
+ go-golang-org-x-net
+ go-golang-org-x-sys
+ go-golang-org-x-sync))
(synopsis "QUIC in Go")
(description "This package provides a Go language implementation of the QUIC
network protocol.")
diff --git a/gnu/packages/graph.scm b/gnu/packages/graph.scm
index a40b580417..26b9d03a73 100644
--- a/gnu/packages/graph.scm
+++ b/gnu/packages/graph.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2017, 2018, 2019, 2020, 2022, 2023 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2017-2024 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2018 Joshua Sierles, Nextjournal <joshua@nextjournal.com>
;;; Copyright © 2018, 2020, 2022 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2019, 2021, 2022 Efraim Flashner <efraim@flashner.co.il>
@@ -426,6 +426,48 @@ algorithm for community detection in large networks.")
large networks.")
(license license:gpl3+)))
+(define-public python-louvain-igraph
+ (package
+ (name "python-louvain-igraph")
+ (version "0.8.1")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/vtraag/louvain-igraph")
+ (commit version)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "1j2ybihvvzggwjb9zvm829aqb5b94q10h8bw6v0h42xd9w75z9sv"))))
+ (build-system pyproject-build-system)
+ (arguments
+ (list
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'unpack 'find-igraph
+ (lambda _
+ (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version)
+ (substitute* "setup.py"
+ (("/usr/include/igraph")
+ (string-append #$(this-package-input "igraph")
+ "/include/igraph"))))))))
+ (propagated-inputs (list python-igraph))
+ (inputs (list igraph))
+ (native-inputs
+ (list python-ddt
+ python-setuptools-scm
+ pkg-config))
+ (home-page "https://github.com/vtraag/louvain-igraph")
+ (synopsis "Implementation of the Louvain algorithm")
+ (description "This package implements the Louvain algorithm for community
+detection in C++ and exposes it to Python. Besides the relative flexibility
+of the implementation, it also scales well, and can be run on graphs of
+millions of nodes (as long as they can fit in memory). The core function is
+@code{find_partition} which finds the optimal partition using the louvain
+algorithm for a number of different methods.")
+ (license license:gpl3+)))
+
(define-public faiss
(package
(name "faiss")
@@ -449,8 +491,8 @@ large networks.")
(build-system cmake-build-system)
(arguments
`(#:configure-flags
- (list "-DBUILD_WITH_GPU=OFF" ; thanks, but no thanks, CUDA.
- "-DBUILD_TUTORIAL=OFF") ; we don't need those
+ (list "-DBUILD_WITH_GPU=OFF" ; thanks, but no thanks, CUDA.
+ "-DBUILD_TUTORIAL=OFF") ; we don't need those
#:phases
(modify-phases %standard-phases
(add-after 'unpack 'prepare-build
@@ -466,7 +508,7 @@ large networks.")
'()))))))
(substitute* "CMakeLists.txt"
(("-m64") "")
- (("-mpopcnt") "") ; only some architectures
+ (("-mpopcnt") "") ; only some architectures
(("-msse4")
(string-append
(string-join features)
diff --git a/gnu/packages/graphviz.scm b/gnu/packages/graphviz.scm
index b91c365e3c..c5507e036c 100644
--- a/gnu/packages/graphviz.scm
+++ b/gnu/packages/graphviz.scm
@@ -195,7 +195,7 @@ structure and layout algorithms.")
(define-public python-uqbar
(package
(name "python-uqbar")
- (version "0.5.6")
+ (version "0.5.9")
(source
(origin
(method git-fetch)
@@ -205,18 +205,12 @@ structure and layout algorithms.")
(file-name (git-file-name name version))
(sha256
(base32
- "1ml3x2mf7nlnvrh9lari5yk0sz2mmg39jwsbjxnpzhnw4kcwpdrs"))))
+ "0c573nzpm51qgz2g296f8pw8ys0i3r6daynxk06zagk5l5fgw9ar"))
+ (patches (search-patches "python-uqbar-python3.10.patch"))))
(build-system python-build-system)
(arguments
`(#:phases
(modify-phases %standard-phases
- (add-after 'unpack 'patch
- (lambda _
- (substitute* "setup.py"
- ;; Latest versions of sphink-rtd-theme require npm to build.
- (("sphinx-rtd-theme >= 0.5.0") "sphinx-rtd-theme >= 0.2.4")
- (("black") "black >= 19.10b0"))
- #t))
(replace 'check
(lambda* (#:key tests? #:allow-other-keys)
(when tests?
diff --git a/gnu/packages/gtk.scm b/gnu/packages/gtk.scm
index cc33c9f672..1a3bb56945 100644
--- a/gnu/packages/gtk.scm
+++ b/gnu/packages/gtk.scm
@@ -1178,7 +1178,11 @@ application suites.")
;; The unaligned-offscreen test fails for unknown reasons, also
;; on different distributions (see:
;; https://gitlab.gnome.org/GNOME/gtk/-/issues/4889).
- ((" 'unaligned-offscreen',") ""))
+ ((" 'unaligned-offscreen',") "")
+ ;; This test, 'gtk:tools / validate', started failing for
+ ;; unknown reasons after updating mesa to 23.3.1 and xorgproto
+ ;; to 2023.2.
+ ((" 'validate',") ""))
(substitute* "testsuite/reftests/meson.build"
(("[ \t]*'label-wrap-justify.ui',") "")
;; The inscription-markup.ui fails due to /etc/machine-id
diff --git a/gnu/packages/guile-xyz.scm b/gnu/packages/guile-xyz.scm
index afd8900848..520b838d88 100644
--- a/gnu/packages/guile-xyz.scm
+++ b/gnu/packages/guile-xyz.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012-2023 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012-2024 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2014, 2015, 2018 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2015, 2017, 2022 Christine Lemmer-Webber <cwebber@dustycloud.org>
;;; Copyright © 2016 Alex Sassmannshausen <alex@pompo.co>
@@ -816,7 +816,8 @@ tables.")
(base32
"0wvdi4l58f9a5c9wi3cdc9l1bniscsixb6w2zj86mch7j7j814lc"))
(patches
- (search-patches "guile-fibers-libevent-32-bit.patch"))))
+ (search-patches "guile-fibers-libevent-32-bit.patch"
+ "guile-fibers-libevent-timeout.patch"))))
(build-system gnu-build-system)
(arguments
(list #:make-flags
@@ -1839,6 +1840,33 @@ written in pure Scheme by using Guile's foreign function interface.")
library}.")
(license license:gpl3+)))
+(define-public guile-yamlpp
+ (package
+ (name "guile-yamlpp")
+ (version "0.2")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://gitlab.com/yorgath/guile-yamlpp")
+ (commit version)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "14mlqi7hw7pi9scwk1g432issnqcn185pd8na2plijxq55cy0iq7"))))
+ (build-system gnu-build-system)
+ (native-inputs (list autoconf automake libtool pkg-config))
+ (inputs (list guile-3.0 yaml-cpp))
+ (native-search-paths
+ (list (search-path-specification
+ (variable "GUILE_EXTENSIONS_PATH")
+ (files (list "lib/guile/3.0")))))
+ (home-page "https://gitlab.com/yorgath/guile-yamlpp")
+ (synopsis "Guile YAML reader/writer based on @code{yaml-cpp}")
+ (description
+ "A module for GNU Guile to read and write YAML files. It works using
+bindings to the @code{yaml-cpp} C++ library.")
+ (license license:gpl3+)))
+
(define-public guile-dbi
(package
(name "guile-dbi")
@@ -3565,6 +3593,80 @@ structures. This package re-uses the SRFI sample implementation.")
;; contains ISC code from the SRFI sample implementation
license:isc))))
+(define-public guile-srfi-133
+ (package
+ (name "guile-srfi-133")
+ (version "0.0.1")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/scheme-requests-for-implementation/srfi-133")
+ (commit "db81a114cd3e23375f024baec15482614ec90453")))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0a7srl72291yah0aj6rwddhj041v2spximhknjj7hczlparsrm7f"))))
+ (build-system guile-build-system)
+ (arguments
+ (list
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'unpack 'move-create-and-delete-files
+ (lambda _
+ (rename-file "vectors" "srfi")
+ (rename-file "srfi/vectors-test.scm" "srfi/srfi-test.scm")
+ (rename-file "srfi/vectors-impl.scm" "srfi/srfi-impl.scm")
+ (with-output-to-file "srfi/srfi-133.scm"
+ (lambda ()
+ (display "(define-module (srfi srfi-133)
+ #:replace (;; Constructors
+ vector-copy
+
+ ;; Mutators
+ vector-fill! vector-copy!
+
+ ;; Conversion
+ vector->list list->vector)
+ #:export (;; Constructors
+ vector-unfold vector-unfold-right vector-reverse-copy
+ vector-append vector-concatenate vector-append-subvectors
+
+ ;; Predicates
+ vector-empty? vector=
+
+ ;; Iteration
+ vector-fold vector-fold-right vector-map vector-map!
+ vector-for-each vector-count vector-cumulate
+
+ ;; Searching
+ vector-index vector-index-right vector-skip vector-skip-right
+ vector-binary-search vector-any vector-every vector-partition
+
+ ;; Mutators
+ vector-swap! vector-reverse!
+ vector-reverse-copy! vector-unfold! vector-unfold-right!
+
+ ;; Conversion
+ reverse-vector->list reverse-list->vector
+ vector->string string->vector))
+
+(include \"srfi-impl.scm\")")))
+ (for-each (lambda (filename)
+ (delete-file filename))
+ '("tests/run.scm"
+ "srfi/vectors.sld"
+ "srfi/vectors.scm")))))))
+ (native-inputs
+ (list guile-3.0))
+ (home-page "https://github.com/scheme-requests-for-implementation/srfi-133")
+ (synopsis "R7RS-compatible vector library for Guile")
+ (description
+ "This package provides a Guile implementation of
+@uref{https://srfi.schemers.org/srfi-133/srfi-133.html, SRFI-133}, a
+comprehensive library of vector operations.")
+ (license license:expat)))
+
(define-public guile-srfi-145
(package
(name "guile-srfi-145")
@@ -3766,6 +3868,56 @@ Either represents the concept of values which are either correct (Right)
or errors (Left).")
(license license:expat))))
+(define-public guile-srfi-232
+ (package
+ (name "guile-srfi-232")
+ (version "0.0.1")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/scheme-requests-for-implementation/srfi-232")
+ (commit "c3f580d220778cd71492aba4fdd0c7040968e705")))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0lp4zcqjjj6hwfh3ix71wak1nffgg4npzsg7cdxfn9hf6iwf9xby"))))
+ (build-system guile-build-system)
+ (arguments
+ (list
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'unpack 'move-and-delete-things
+ (lambda _
+ (let* ((srfi-directory (string-append #$output "/srfi")))
+ (mkdir-p "srfi")
+ (with-output-to-file "srfi/srfi-232.scm"
+ (lambda ()
+ (display "(define-library (srfi srfi-232)
+ (export curried define-curried)
+ (import (only (guile) import)
+ (scheme base))
+ (include \"../srfi-232.scm\"))")))
+ (for-each (lambda (filename)
+ (delete-file filename))
+ '("test-body.scm"
+ "test-chibi.scm"
+ "test-srfi-64.scm"))))))))
+ (native-inputs
+ (list guile-3.0))
+ (home-page "https://github.com/scheme-requests-for-implementation/srfi-232")
+ (synopsis "Flexible curried procedures")
+ (description
+ " This package provides an implementation of
+@uref{https://srfi.schemers.org/srfi-232/srfi-232.html, SRFI-232}, which
+describes @code{curried}, a variant of @code{lambda} that creates true curried
+procedures which also behave just like ordinary Scheme procedures. They can
+be applied to their arguments one by one, all at once, or anywhere in between,
+without any novel syntax. @code{curried} also supports nullary and variadic
+procedures, and procedures created with it have predictable behavior when
+applied to surplus arguments.")
+ (license license:expat)))
+
(define-public emacsy
(package
(name "emacsy")
diff --git a/gnu/packages/jami.scm b/gnu/packages/jami.scm
index db120f223e..1ef840845a 100644
--- a/gnu/packages/jami.scm
+++ b/gnu/packages/jami.scm
@@ -2,7 +2,7 @@
;;; Copyright © 2019 Pierre Neidhardt <mail@ambrevar.xyz>
;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
;;; Copyright © 2019, 2020 Jan Wielkiewicz <tona_kosmicznego_smiecia@interia.pl>
-;;; Copyright © 2020, 2021, 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2020, 2021, 2022, 2023, 2024 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -38,6 +38,7 @@
#:use-module (gnu packages guile)
#:use-module (gnu packages libcanberra)
#:use-module (gnu packages linux)
+ #:use-module (gnu packages markup)
#:use-module (gnu packages networking)
#:use-module (gnu packages perl)
#:use-module (gnu packages pkg-config)
@@ -54,6 +55,7 @@
#:use-module (gnu packages version-control)
#:use-module (gnu packages video)
#:use-module (gnu packages vulkan)
+ #:use-module (gnu packages web)
#:use-module (gnu packages webkit)
#:use-module (gnu packages xdisorg)
#:use-module (gnu packages xiph)
@@ -68,307 +70,33 @@
#:use-module (guix packages)
#:use-module (guix utils))
-(define %jami-version "20230323.0")
+;;; We use nightlies as stable versions are a bit far in-between, and often
+;;; have bugs anyway. When the nightly version change, do not forget to
+;;; retrieve the associated daemon submodule commit and update it in
+;;; %jami-daemon-commit variable below.
-(define %jami-sources
- ;; Return an origin object of the tarball release sources archive of the
- ;; Jami project.
- (origin
- (method url-fetch)
- (uri (string-append "https://dl.jami.net/release/tarballs/jami-"
- %jami-version ".tar.gz"))
- (modules '((guix build utils)))
- (snippet
- ;; Delete multiple MiBs of bundled tarballs. The daemon/contrib
- ;; directory contains the custom patches for pjproject and other
- ;; libraries used by Jami.
- '(delete-file-recursively "daemon/contrib/tarballs"))
- (sha256
- (base32
- "0vjsjr37cb87j9hqbmipyxn4877k1wn3l0vzca3l3ldgknglz7v2"))
- (patches (search-patches "jami-disable-integration-tests.patch"
- "jami-libjami-headers-search.patch"))))
-
-;; Jami maintains a set of patches for some key dependencies (currently
-;; pjproject and ffmpeg) of Jami that haven't yet been integrated upstream.
-;; This procedure simplifies the process of applying them.
-(define jami-apply-custom-patches
- #~(lambda* (#:key dep-name patches)
- (let ((patches-directory "patches"))
- (mkdir-p patches-directory)
- (invoke "tar" "-xvf" #$%jami-sources
- "-C" patches-directory
- "--strip-components=5"
- "--wildcards"
- (string-append "jami-*/daemon/contrib/src/" dep-name))
- (for-each (lambda (f)
- (invoke "patch" "--force" "--ignore-whitespace" "-p1" "-i"
- (string-append patches-directory "/" f ".patch")))
- patches))))
-
-(define-public pjproject-jami
- (let ((commit "e4b83585a0bdf1523e808a4fc1946ec82ac733d0")
- (revision "3"))
- (package
- (inherit pjproject)
- (name "pjproject-jami")
- (version (git-version "2.12" revision commit))
- (source (origin
- (inherit (package-source pjproject))
- ;; The Jami development team regularly issues patches to
- ;; pjproject to extend the its functionality and fix bugs;
- ;; they are submitted for inclusion upstream but larger
- ;; patches take time to be reviewed and merged, hence this
- ;; forked repository.
- (method git-fetch)
- (uri (git-reference
- (url "https://github.com/savoirfairelinux/pjproject")
- (commit commit)))
- (file-name (git-file-name name version))
- (sha256
- (base32
- "0gky5idyyqxhqk959lzys5l7x1i925db773lfdpvxxmkmfizdq21"))))
- (arguments
- (substitute-keyword-arguments (package-arguments pjproject)
- ((#:phases phases '%standard-phases)
- #~(modify-phases #$phases
- (add-after 'unpack 'apply-patches
- (lambda _
- (#$jami-apply-custom-patches
- #:dep-name "pjproject"
- #:patches
- ;; This adds a config_site.h configuration file that sets
- ;; constants such as PJ_ICE_MAX_CAND that cannot be
- ;; configured at build time.
- '("0009-add-config-site")))))))))))
-
-;; The following variables are configure flags used by ffmpeg-jami. They're
-;; from the jami/daemon/contrib/src/ffmpeg/rules.mak file. We try to keep it
-;; as close to the official Jami package as possible, to provide all the
-;; codecs and extra features that are expected (see:
-;; https://review.jami.net/plugins/gitiles/jami-daemon/+/refs/heads/master/contrib/src/ffmpeg/rules.mak).
-;; An exception are the ffnvcodec-related switches, which is not packaged in
-;; Guix and would not work with Mesa.
-(define %ffmpeg-default-configure-flags
- '("--disable-everything"
- "--enable-zlib"
- "--enable-gpl"
- "--enable-swscale"
- "--enable-bsfs"
- "--disable-filters"
- "--disable-programs"
- "--disable-postproc"
- "--disable-protocols"
- "--enable-protocol=crypto"
- "--enable-protocol=file"
- "--enable-protocol=rtp"
- "--enable-protocol=srtp"
- "--enable-protocol=tcp"
- "--enable-protocol=udp"
- "--enable-protocol=unix"
- "--enable-protocol=pipe"
-
- ;; Enable muxers/demuxers.
- "--disable-demuxers"
- "--disable-muxers"
- "--enable-muxer=rtp"
- "--enable-muxer=g722"
- "--enable-muxer=g726"
- "--enable-muxer=g726le"
- "--enable-muxer=h263"
- "--enable-muxer=h264"
- "--enable-muxer=hevc"
- "--enable-muxer=matroska"
- "--enable-muxer=wav"
- "--enable-muxer=webm"
- "--enable-muxer=ogg"
- "--enable-muxer=pcm_s16be"
- "--enable-muxer=pcm_s16le"
- "--enable-demuxer=rtp"
- "--enable-demuxer=mjpeg"
- "--enable-demuxer=mjpeg_2000"
- "--enable-demuxer=mpegvideo"
- "--enable-demuxer=gif"
- "--enable-demuxer=image_jpeg_pipe"
- "--enable-demuxer=image_png_pipe"
- "--enable-demuxer=image_webp_pipe"
- "--enable-demuxer=matroska"
- "--enable-demuxer=m4v"
- "--enable-demuxer=mp3"
- "--enable-demuxer=ogg"
- "--enable-demuxer=flac"
- "--enable-demuxer=wav"
- "--enable-demuxer=ac3"
- "--enable-demuxer=g722"
- "--enable-demuxer=g723_1"
- "--enable-demuxer=g726"
- "--enable-demuxer=g726le"
- "--enable-demuxer=pcm_mulaw"
- "--enable-demuxer=pcm_alaw"
- "--enable-demuxer=pcm_s16be"
- "--enable-demuxer=pcm_s16le"
- "--enable-demuxer=h263"
- "--enable-demuxer=h264"
- "--enable-demuxer=hevc"
-
- ;; Enable parsers.
- "--enable-parser=h263"
- "--enable-parser=h264"
- "--enable-parser=hevc"
- "--enable-parser=mpeg4video"
- "--enable-parser=vp8"
- "--enable-parser=vp9"
- "--enable-parser=opus"
-
- ;; Encoders/decoders.
- "--enable-encoder=adpcm_g722"
- "--enable-decoder=adpcm_g722"
- "--enable-encoder=adpcm_g726"
- "--enable-decoder=adpcm_g726"
- "--enable-encoder=adpcm_g726le"
- "--enable-decoder=adpcm_g726le"
- "--enable-decoder=g729"
- "--enable-encoder=g723_1"
- "--enable-decoder=g723_1"
- "--enable-encoder=rawvideo"
- "--enable-decoder=rawvideo"
- "--enable-encoder=libx264"
- "--enable-decoder=h264"
- "--enable-encoder=pcm_alaw"
- "--enable-decoder=pcm_alaw"
- "--enable-encoder=pcm_mulaw"
- "--enable-decoder=pcm_mulaw"
- "--enable-encoder=mpeg4"
- "--enable-decoder=mpeg4"
- "--enable-encoder=libvpx_vp8"
- "--enable-decoder=vp8"
- "--enable-decoder=vp9"
- "--enable-encoder=h263"
- "--enable-encoder=h263p"
- "--enable-decoder=h263"
- "--enable-encoder=mjpeg"
- "--enable-decoder=mjpeg"
- "--enable-decoder=mjpegb"
- "--enable-libspeex"
- "--enable-libopus"
- "--enable-libvpx"
- "--enable-libx264"
- "--enable-encoder=libspeex"
- "--enable-decoder=libspeex"
- "--enable-encoder=libopus"
- "--enable-decoder=libopus"
-
- ;; Encoders/decoders for ringtones and audio streaming.
- "--enable-decoder=flac"
- "--enable-decoder=vorbis"
- "--enable-decoder=aac"
- "--enable-decoder=ac3"
- "--enable-decoder=eac3"
- "--enable-decoder=mp3"
- "--enable-decoder=pcm_u24le"
- "--enable-decoder=pcm_u32le"
- "--enable-decoder=pcm_u8"
- "--enable-decoder=pcm_f16le"
- "--enable-decoder=pcm_f32le"
- "--enable-decoder=pcm_f64le"
- "--enable-decoder=pcm_s16le"
- "--enable-decoder=pcm_s24le"
- "--enable-decoder=pcm_s32le"
- "--enable-decoder=pcm_s64le"
- "--enable-decoder=pcm_u16le"
- "--enable-encoder=pcm_u8"
- "--enable-encoder=pcm_f32le"
- "--enable-encoder=pcm_f64le"
- "--enable-encoder=pcm_s16le"
- "--enable-encoder=pcm_s32le"
- "--enable-encoder=pcm_s64le"
-
- ;; Encoders/decoders for images.
- "--enable-encoder=gif"
- "--enable-decoder=gif"
- "--enable-encoder=jpegls"
- "--enable-decoder=jpegls"
- "--enable-encoder=ljpeg"
- "--enable-decoder=jpeg2000"
- "--enable-encoder=png"
- "--enable-decoder=png"
- "--enable-encoder=bmp"
- "--enable-decoder=bmp"
- "--enable-encoder=tiff"
- "--enable-decoder=tiff"
-
- ;; Filters.
- "--enable-filter=scale"
- "--enable-filter=overlay"
- "--enable-filter=amix"
- "--enable-filter=amerge"
- "--enable-filter=aresample"
- "--enable-filter=format"
- "--enable-filter=aformat"
- "--enable-filter=fps"
- "--enable-filter=transpose"
- "--enable-filter=pad"))
-
-(define %ffmpeg-linux-configure-flags
- '("--enable-pic"
- "--extra-cxxflags=-fPIC"
- "--extra-cflags=-fPIC"
- "--target-os=linux"
- "--enable-indev=v4l2"
- "--enable-indev=xcbgrab"
- "--enable-vdpau"
- "--enable-hwaccel=h264_vdpau"
- "--enable-hwaccel=mpeg4_vdpau"
- "--enable-vaapi"
- "--enable-hwaccel=h264_vaapi"
- "--enable-hwaccel=mpeg4_vaapi"
- "--enable-hwaccel=h263_vaapi"
- "--enable-hwaccel=vp8_vaapi"
- "--enable-hwaccel=mjpeg_vaapi"
- "--enable-hwaccel=hevc_vaapi"
- "--enable-encoder=h264_vaapi"
- "--enable-encoder=vp8_vaapi"
- "--enable-encoder=mjpeg_vaapi"
- "--enable-encoder=hevc_vaapi"))
-
-(define (ffmpeg-compose-configure-flags)
- "Compose the configure flag lists of ffmpeg-jami."
- #~(append '#$%ffmpeg-default-configure-flags
- (if (string-contains #$(%current-system) "linux")
- '#$%ffmpeg-linux-configure-flags
- '())))
-
-(define-public ffmpeg-jami
- (package
- (inherit ffmpeg)
- (name "ffmpeg-jami")
- (arguments
- (substitute-keyword-arguments (package-arguments ffmpeg)
- ((#:configure-flags _ '())
- #~(cons* "--disable-static"
- "--enable-shared"
- "--disable-stripping"
- #$(ffmpeg-compose-configure-flags)))
- ((#:phases phases)
- #~(modify-phases #$phases
- (add-after 'unpack 'apply-patches
- (lambda _
- ;; These patches come from:
- ;; "jami-project/daemon/contrib/src/ffmpeg/rules.mak".
- (#$jami-apply-custom-patches
- #:dep-name "ffmpeg"
- #:patches '("remove-mjpeg-log"
- "change-RTCP-ratio"
- "rtp_ext_abs_send_time"
- "libopusdec-enable-FEC"
- "libopusenc-reload-packet-loss-at-encode"
- "screen-sharing-x11-fix"))))))))))
+;;; When updating Jami, make sure that the patches used for ffmpeg-jami are up
+;;; to date with those listed in
+;;; <https://review.jami.net/plugins/gitiles/jami-daemon/+/refs/heads/master/contrib/src/ffmpeg/rules.mak>.
+(define %jami-nightly-version "20231222.2")
+(define %jami-daemon-commit "317b7317dcda4afb733ddb9bd5b450d4635941ae")
(define-public libjami
(package
(name "libjami")
- (version %jami-version)
- (source %jami-sources)
+ (version %jami-nightly-version)
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://review.jami.net/jami-daemon")
+ (commit %jami-daemon-commit)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "16qx50xz2mkw894irjsvql82iw7wpc5xncxpvw1nqd2sxhgfiq0i"))
+ (patches (search-patches
+ "libjami-ac-config-files.patch"
+ "jami-disable-integration-tests.patch"))))
(outputs '("out" "bin" "debug")) ;"bin' contains jamid
(build-system gnu-build-system)
(arguments
@@ -378,13 +106,25 @@
;; user scripts too, until more general purpose Scheme bindings are made
;; available (see: test/agent/README.md).
#:configure-flags #~(list "--enable-agent" "--enable-debug")
- #:make-flags #~(list "V=1") ;build verbosely
+ #:make-flags
+ #~(list
+ "V=1" ;build verbosely
+ ;; The 'ut_media_player' is known to fail (see:
+ ;; https://git.jami.net/savoirfairelinux/jami-daemon/-/issues/935).
+ "XFAIL_TESTS=ut_media_player")
#:phases
#~(modify-phases %standard-phases
(add-after 'unpack 'change-directory/maybe
(lambda _
;; Allow building from the tarball or a git checkout.
(false-if-exception (chdir "daemon"))))
+ (add-after 'change-directory/maybe 'extend-scheduler-test-timeout
+ (lambda _
+ ;; The ut_scheduler unit test may fail on slower machines (see:
+ ;; https://git.jami.net/savoirfairelinux/jami-daemon/-/issues/939).
+ (substitute* "test/unitTest/scheduler.cpp"
+ (("std::chrono::seconds\\(3)")
+ "std::chrono::seconds(30)"))))
(add-after 'install 'delete-static-libraries
;; Remove 100+ MiB of static libraries. "--disable-static" cannot
;; be used as the test suite requires access to private symbols
@@ -409,14 +149,14 @@
(inputs
(list alsa-lib
asio
- dbus-c++
+ dhtnet
eudev
ffmpeg-jami
guile-3.0
jack-1
jsoncpp
libarchive
- libgit2
+ libgit2-1.6
libnatpmp
libsecp256k1
libupnp
@@ -424,6 +164,7 @@
openssl
pjproject-jami
pulseaudio
+ sdbus-c++
speex
speexdsp
webrtc-audio-processing
@@ -447,18 +188,71 @@ service definitions.")
(home-page "https://jami.net/")
(license license:gpl3+)))
+;;; Private package; this is used in source form: the project build system has
+;;; no install target.
+(define sortfilterproxymodel
+ ;; Use the latest commit available from the 'qt-6' branch.
+ (let ((commit "6cc21205dbf36640613f0e6e67b2b13b1855c377")
+ (revision "0"))
+ (package
+ (name "sortfilterproxymodel")
+ ;; There are no recent release tag; the module version defined in the
+ ;; source is used (see:
+ ;; https://github.com/oKcerG/SortFilterProxyModel/blob/
+ ;; 5a930885b7ea99f7f41c25fce08bf8006ee54e3f/
+ ;; qqmlsortfilterproxymodel.cpp#L574C15-L574C15).
+ (version (git-version "0.2" revision commit))
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ ;; The upstream is
+ ;; https://github.com/oKcerG/SortFilterProxyModel, but
+ ;; it lacks Qt 6 support, so use this fork, which is the
+ ;; one used by Jami.
+ (url "https://github.com/atraczyk/SortFilterProxyModel")
+ (commit commit)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "1n54jkimr3a818i3w7w3lnbqn47x72nnr5xi9vk0mdnbwri3viwy"))))
+ (build-system qt-build-system)
+ (arguments
+ (list #:qtbase qtbase ;use Qt 6
+ #:tests? #f ;no test suite
+ #:configure-flags #~(list "BUILD_SFPM_PIC=ON")))
+ (inputs (list qtdeclarative))
+ (home-page "https://github.com/oKcerG/SortFilterProxyModel")
+ (synopsis "Improved QSortFilterProxyModel implementation for QML")
+ (description "SortFilterProxyModel is an implementation of
+QSortFilterProxyModel conveniently exposed for QML.")
+ (license license:expat))))
+
(define-public jami
(package
(name "jami")
- (version %jami-version)
- (source %jami-sources)
+ (version %jami-nightly-version)
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://review.jami.net/jami-client-qt")
+ (commit (string-append "nightly/" %jami-nightly-version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0ypbbyqmq6x9zq4sr550k38v8pg7yq685bmwqmigqzhqgfazcg97"))
+ (patches (search-patches
+ "jami-libjami-headers-search.patch"
+ "jami-qml-tests-discovery.patch"
+ "jami-skip-tests-requiring-internet.patch"
+ "jami-unbundle-dependencies.patch"))))
(build-system qt-build-system)
(outputs '("out" "debug"))
(arguments
(list
#:qtbase qtbase
#:configure-flags
- #~(list "-DENABLE_TESTS=ON"
+ #~(list "-DWITH_DAEMON_SUBMODULE=OFF"
+ "-DENABLE_TESTS=ON"
;; Disable the webengine since it grows the closure size by
;; about 450 MiB and requires more resources.
"-DWITH_WEBENGINE=OFF"
@@ -467,11 +261,7 @@ service definitions.")
"-DENABLE_LIBWRAP=ON")
#:phases
#~(modify-phases %standard-phases
- (add-after 'unpack 'change-directory/maybe
- (lambda _
- ;; Allow building from the tarball or a git checkout.
- (false-if-exception (chdir "client-qt"))))
- (add-after 'change-directory/maybe 'fix-version-string
+ (add-after 'unpack 'fix-version-string
(lambda _
(substitute* "src/app/version.h"
(("VERSION_STRING")
@@ -480,6 +270,17 @@ service definitions.")
(string-append "const char VERSION_STRING[] = \""
#$version "\";\n"
anchor)))))
+ (add-after 'unpack 'copy-3rdparty-source-dependencies
+ (lambda _
+ (copy-recursively #$(package-source sortfilterproxymodel)
+ "3rdparty/SortFilterProxyModel")))
+ (add-before 'configure 'fake-x11-environment
+ (lambda _
+ ;; This works around the lack of configuration for the X11
+ ;; push-to-talk feature, which is auto-detected via the
+ ;; XDG_SESSION_TYPE environment variable (see:
+ ;; https://git.jami.net/savoirfairelinux/jami-client-qt/-/issues/1504).
+ (setenv "XDG_SESSION_TYPE" "x11")))
(replace 'check
(lambda* (#:key tests? #:allow-other-keys)
(when tests?
@@ -488,22 +289,13 @@ service definitions.")
;; The tests require a writable HOME.
(setenv "HOME" "/tmp")
- (display "Running unittests...\n")
- (invoke "tests/unittests" "-mutejamid")
+ (display "Running unit tests...\n")
+ (invoke "tests/unit_tests")
- ;; XXX: There are currently multiple failures with the
- ;; functional tests (see:
- ;; https://git.jami.net/savoirfairelinux/jami-client-qt/-/issues/883),
- ;; so the code below is disabled for now.
- ;;
+ ;; XXX: The QML test suite fails, exiting with status code 1 (see:
+ ;; https://git.jami.net/savoirfairelinux/jami-client-qt/-/issues/883).
;; (display "Running functional tests...\n")
- ;; ;; This is to allow building from the source tarball or
- ;; ;; directly from the git repository.
- ;; (let ((tests-qml (if (file-exists? "../client-qt/tests")
- ;; "../client-qt/tests/qml"
- ;; "../tests/qml")))
- ;; (invoke "tests/qml_tests" "-mutejamid"
- ;; "-input" tests-qml))
+ ;; (invoke "tests/qml_tests")
))))))
(native-inputs
(list googletest
@@ -518,6 +310,7 @@ service definitions.")
libnotify
libxcb
libxkbcommon
+ md4c
network-manager
qrencode
qt5compat
@@ -526,6 +319,7 @@ service definitions.")
qtnetworkauth
qtpositioning
qtsvg
+ tidy-html ;used by src/app/htmlparser.h
vulkan-loader))
(home-page "https://jami.net")
(synopsis "Qt Jami client")
@@ -538,8 +332,8 @@ P2P-DHT.")
(define-public jami-docs
;; There aren't any tags, so use the latest commit.
- (let ((revision "1")
- (commit "ff466ebadb9b99a1672a814126793de670c3099b"))
+ (let ((revision "2")
+ (commit "a48997de84cc4933bd111fa93fbf6a58189b166d"))
(package
(name "jami-docs")
(version (git-version "0.0.0" revision commit))
@@ -551,7 +345,7 @@ P2P-DHT.")
(file-name (git-file-name name version))
(sha256
(base32
- "1n8a9dk8mi617rk3ycz5jrzbwv9ybfynlci5faz1klckx0aqdf6q"))))
+ "0a1kcflvk39aag2vk83cn4m0ifkgb3gvwkr8pbbvf0hcd2cj2j31"))))
(build-system copy-build-system)
(arguments
(list
diff --git a/gnu/packages/libsigsegv.scm b/gnu/packages/libsigsegv.scm
index ebbdd2ad90..71afb35be0 100644
--- a/gnu/packages/libsigsegv.scm
+++ b/gnu/packages/libsigsegv.scm
@@ -1,6 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012, 2013, 2018 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2017, 2024 Efraim Flashner <efraim@flashner.co.il>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -21,6 +21,7 @@
#:use-module (guix licenses)
#:use-module (guix packages)
#:use-module (guix download)
+ #:use-module (guix utils)
#:use-module (guix build-system gnu))
(define-public libsigsegv
@@ -40,21 +41,15 @@
(arguments
`(;; The shared library isn't built by default but some packages need it.
#:configure-flags '("--enable-shared")
-
- ;; On MIPS, work around this error:
- ;;
- ;; In file included from fault-linux-mips-old.h:18:0,
- ;; [...]
- ;; linux-libre-headers-cross-mips64el-linux-gnu-3.3.8/include/asm/sigcontext.h:57:8: error: redefinition of 'struct sigcontext'
- ,@(if (string-contains (or (%current-target-system) (%current-system))
- "mips64el")
- `(#:phases (modify-phases %standard-phases
- (add-before 'configure 'patch-mips-old-h
- (lambda _
- (substitute* "src/fault-linux-mips-old.h"
- (("#include <asm/sigcontext\\.h>") ""))
- #t))))
- '())))
+ ;; On some architectures 'struct sigcontext' gets redefined from
+ ;; %linux-libre-headers/include/asm/sigcontext.h
+ ,@(cond ((%current-target-system)
+ `(#:phases (modify-phases %standard-phases
+ (add-before 'configure 'patch-asm-sigcontext-h
+ (lambda _
+ (substitute* (find-files "src" "^fault-.*-old\\.h$")
+ (("#include <asm/sigcontext\\.h>") "")))))))
+ (else '()))))
(description
"GNU libsigsegv is a library to handle page faults, which occur when a
program tries to access an unavailable region of memory, in user mode. By
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index 1c359cb300..2ce25bfa00 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -76,7 +76,7 @@
;;; Copyright © 2023 Zheng Junjie <873216071@qq.com>
;;; Copyright © 2023 dan <i@dan.games>
;;; Copyright © 2023 Foundation Devices, Inc. <hello@foundationdevices.com>
-;;; Copyright © 2023 Wilko Meyer <w@wmeyer.eu>
+;;; Copyright © 2023, 2024 Wilko Meyer <w@wmeyer.eu>
;;; Copyright © 2023 Jaeme Sifat <jaeme@runbox.com>
;;;
;;; This file is part of GNU Guix.
@@ -494,17 +494,17 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
;; The current "stable" kernels. That is, the most recently released major
;; versions that are still supported upstream.
-(define-public linux-libre-6.6-version "6.6.8")
+(define-public linux-libre-6.6-version "6.6.10")
(define-public linux-libre-6.6-gnu-revision "gnu")
(define deblob-scripts-6.6
(linux-libre-deblob-scripts
linux-libre-6.6-version
linux-libre-6.6-gnu-revision
(base32 "0g8m0rb15b0231dv8ji456s75a67szsaim71may3yprplycz6pav")
- (base32 "1hg3ck1j8288fhlhcvhgs1zzwh3i62nfvphw7x3vsaqr75kiwbjp")))
+ (base32 "0kavbby960k7wg355p3hjb9v1c4gnk8dv3lkfhpz44ayhv7kihg5")))
(define-public linux-libre-6.6-pristine-source
(let ((version linux-libre-6.6-version)
- (hash (base32 "05i4ayj9wyjkd1s8ixx7bxwcyagqyx8rhj1zvbc3cjqyw4sc8djh")))
+ (hash (base32 "0v2l0l90w7scv7bxkxxjgqnay0fjh678k9gdlgycgbh9q7j2grly")))
(make-linux-libre-source version
(%upstream-linux-source version hash)
deblob-scripts-6.6)))
@@ -512,92 +512,92 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
;; The "longterm" kernels — the older releases with long-term upstream support.
;; Here are the support timelines:
;; <https://www.kernel.org/category/releases.html>
-(define-public linux-libre-6.1-version "6.1.69")
+(define-public linux-libre-6.1-version "6.1.71")
(define-public linux-libre-6.1-gnu-revision "gnu")
(define deblob-scripts-6.1
(linux-libre-deblob-scripts
linux-libre-6.1-version
linux-libre-6.1-gnu-revision
(base32 "1sf80f2i4vf888xjcn84ymn4w5ynn30ib9033zwmv7f09yvfhapy")
- (base32 "1hdibv43xbn1lv83i6qjgfmf1bvqxvq17fryfsq4r4sjgs9212js")))
+ (base32 "1jg2v1nxd6i5x536vmd1l14xhpzrcimpmjfipb1zkrwil102y25f")))
(define-public linux-libre-6.1-pristine-source
(let ((version linux-libre-6.1-version)
- (hash (base32 "0hdm28k49kmy9r96hckps0bvvaq9m06l72n8ih305rccs6a2cgby")))
+ (hash (base32 "0hghnwsa282js9hy4krhdbgrb4khjzslr05zgvjx9zzragfp9xrd")))
(make-linux-libre-source version
(%upstream-linux-source version hash)
deblob-scripts-6.1)))
-(define-public linux-libre-5.15-version "5.15.145")
+(define-public linux-libre-5.15-version "5.15.146")
(define-public linux-libre-5.15-gnu-revision "gnu")
(define deblob-scripts-5.15
(linux-libre-deblob-scripts
linux-libre-5.15-version
linux-libre-5.15-gnu-revision
(base32 "18ac30kxg2mf2f6gk3p935hzhz2qs110jy4xwk21kblnnkskbxj8")
- (base32 "1idjrn2w8jrixj8ifkk1awxyyq5042nc4p2mld4rda96azlnp948")))
+ (base32 "14pw0yl0yxdgcdp01rpi91ylil9irwzxfq04kfvn3gg2abaq37bn")))
(define-public linux-libre-5.15-pristine-source
(let ((version linux-libre-5.15-version)
- (hash (base32 "086nssif66s86wkixz4yb7xilz1k49g32l0ib28r8fjzc23rv95j")))
+ (hash (base32 "14nijbspmzd4r38l8cpl4vn9dhawzcfnhyc0gnaxl2m8l9gpm02s")))
(make-linux-libre-source version
(%upstream-linux-source version hash)
deblob-scripts-5.15)))
-(define-public linux-libre-5.10-version "5.10.205")
+(define-public linux-libre-5.10-version "5.10.206")
(define-public linux-libre-5.10-gnu-revision "gnu1")
(define deblob-scripts-5.10
(linux-libre-deblob-scripts
linux-libre-5.10-version
linux-libre-5.10-gnu-revision
(base32 "1b33rkn32b923025iiz4xzxiy8y5ii9j5qk4021mg575890rl4ch")
- (base32 "0xrrnmb5kcc5r21bdm24aq0fnkk1imn367c1cxlj78b6l6gigx4b")))
+ (base32 "0zmmqj5gyiy2q81f199c29b14isfiqbvl87y72k14yy0q5398276")))
(define-public linux-libre-5.10-pristine-source
(let ((version linux-libre-5.10-version)
- (hash (base32 "0qw8g0h4k0b4dyvspbj51cwr68ihwjzsi2b2261ipy3l1nl1fln5")))
+ (hash (base32 "0ns8qxcrxj9i76b93xcghl002l8vbkg7ksd435sikig62qr62gf4")))
(make-linux-libre-source version
(%upstream-linux-source version hash)
deblob-scripts-5.10)))
-(define-public linux-libre-5.4-version "5.4.265")
+(define-public linux-libre-5.4-version "5.4.266")
(define-public linux-libre-5.4-gnu-revision "gnu1")
(define deblob-scripts-5.4
(linux-libre-deblob-scripts
linux-libre-5.4-version
linux-libre-5.4-gnu-revision
(base32 "0xg5cz82k2cb0ikxvwv1hp5c3h377jkb5sd6aszvsk7hnabhk62v")
- (base32 "0sw67b2pk3lng4y67diqqnhxaggnp3nbkx8dxc5fs27rinfxr4m1")))
+ (base32 "08wn4rjrmi8asmdkg92xbbm6v0sw44kackp69agbw57zy6fp2zys")))
(define-public linux-libre-5.4-pristine-source
(let ((version linux-libre-5.4-version)
- (hash (base32 "05cvvwjiznn7hfd02qklklalg0chahvh5v18w64lcva6kzj9kbjd")))
+ (hash (base32 "1dmcn9i3nvf1gldm1a32gnl5ybwbk2lizb3wa4gc06g7dxz2y1ys")))
(make-linux-libre-source version
(%upstream-linux-source version hash)
deblob-scripts-5.4)))
-(define-public linux-libre-4.19-version "4.19.303")
+(define-public linux-libre-4.19-version "4.19.304")
(define-public linux-libre-4.19-gnu-revision "gnu1")
(define deblob-scripts-4.19
(linux-libre-deblob-scripts
linux-libre-4.19-version
linux-libre-4.19-gnu-revision
(base32 "0pjal2cc2f99cvw8r4icb4l24j41k48jkj6bqk7pcahzcgx33ycb")
- (base32 "1425mhkfxn18vxn05bb4h3li7x1jl7l1hf1zi8xhnqv3wa31h9wl")))
+ (base32 "07j33w4pq319gaypfsym6v0i2xqc5jagm47nxyy2010zn8k6y8kd")))
(define-public linux-libre-4.19-pristine-source
(let ((version linux-libre-4.19-version)
- (hash (base32 "0dlbl47xs7z4yf9cxbxqzd7zs1f9070jr6ck231wgppa6lwwwb82")))
+ (hash (base32 "165mljr8v1cf4vf4a4b44hx089rprkssvi2azq5wbxxg3basbind")))
(make-linux-libre-source version
(%upstream-linux-source version hash)
deblob-scripts-4.19)))
-(define-public linux-libre-4.14-version "4.14.334")
+(define-public linux-libre-4.14-version "4.14.335")
(define-public linux-libre-4.14-gnu-revision "gnu1")
(define deblob-scripts-4.14
(linux-libre-deblob-scripts
linux-libre-4.14-version
linux-libre-4.14-gnu-revision
(base32 "1vbgykwzf7j0yjqcwn747cfhwj0rgw3s9h627q94wb9a19x9p0fr")
- (base32 "1faagsj4i31z2bp83hflx3q9vrddjnn37a3ah2b47iaplva7z1nd")))
+ (base32 "1ir96bbhw77xw6lmsnh42gi130nnzjklpgfyd46pxmqckrpydcvx")))
(define-public linux-libre-4.14-pristine-source
(let ((version linux-libre-4.14-version)
- (hash (base32 "0iaaqdkszmfarvjfszc9rf7y9zsv3w82934xmvmzmsbiz86547ca")))
+ (hash (base32 "0aa0xi1sn4rw9ichgmvxp0s9hsi6rfzhzd9wgbvzvc90md2qfs19")))
(make-linux-libre-source version
(%upstream-linux-source version hash)
deblob-scripts-4.14)))
diff --git a/gnu/packages/lisp-xyz.scm b/gnu/packages/lisp-xyz.scm
index 38eb9bdfdd..e63364f54b 100644
--- a/gnu/packages/lisp-xyz.scm
+++ b/gnu/packages/lisp-xyz.scm
@@ -23,7 +23,7 @@
;;; Copyright © 2020-2023 Sharlatan Hellseher <sharlatanus@gmail.com>
;;; Copyright © 2021, 2022 Aurora <rind38@disroot.org>
;;; Copyright © 2021 Matthew James Kraai <kraai@ftbfs.org>
-;;; Copyright © 2021, 2022, 2023 André A. Gomes <andremegafone@gmail.com>
+;;; Copyright © 2021-2024 André A. Gomes <andremegafone@gmail.com>
;;; Copyright © 2021, 2022, 2023 Cage <cage-dev@twistfold.it>
;;; Copyright © 2021 Cameron Chaparro <cameron@cameronchaparro.com>
;;; Copyright © 2021 Charles Jackson <charles.b.jackson@protonmail.com>
@@ -6126,6 +6126,38 @@ BTCPay, Paypal, and Stripe.")
(define-public ecl-lisp-pay
(sbcl-package->ecl-package sbcl-lisp-pay))
+(define-public sbcl-stripe
+ (let ((commit "b59631d21d63e101de6eb96b56941471504ba644")
+ (revision "0"))
+ (package
+ (name "sbcl-stripe")
+ (version (git-version "0.0.0" revision commit))
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/atlas-engineer/stripe")
+ (commit commit)))
+ (file-name (git-file-name "cl-stripe" version))
+ (sha256
+ (base32 "00sfq2f6dnpwa6pf7rgw5hazbwx4yf1g0jrkfz9h4kq5zyxwk1cy"))))
+ (build-system asdf-build-system/sbcl)
+ (inputs
+ (list sbcl-dexador
+ sbcl-golden-utils
+ sbcl-local-time
+ sbcl-yason))
+ (home-page "https://github.com/atlas-engineer/stripe")
+ (synopsis "Stripe payment API client for Common Lisp")
+ (description "A client for the Stripe payment API.")
+ (license license:expat))))
+
+(define-public cl-stripe
+ (sbcl-package->cl-source-package sbcl-stripe))
+
+(define-public ecl-stripe
+ (sbcl-package->ecl-package sbcl-stripe))
+
(define-public sbcl-drakma
(package
(name "sbcl-drakma")
@@ -26284,43 +26316,45 @@ extra features like type inference.")
(sbcl-package->cl-source-package sbcl-nclasses))
(define-public sbcl-prompter
- (package
- (name "sbcl-prompter")
- (version "0.1.1")
- (source
- (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://github.com/atlas-engineer/prompter")
- (commit version)))
- (file-name (git-file-name "cl-prompter" version))
- (sha256
- (base32
- "008bq36siza9qwmz6b1pvpm53lxmzryahnhy372l18gl3180in03"))))
- (build-system asdf-build-system/sbcl)
- (inputs
- (list
- sbcl-alexandria
- sbcl-calispel
- sbcl-cl-containers
- sbcl-cl-str
- sbcl-closer-mop
- sbcl-lparallel
- sbcl-moptilities
- sbcl-nclasses
- sbcl-serapeum
- sbcl-trivial-package-local-nicknames))
- (native-inputs
- (list sbcl-lisp-unit2))
- (home-page "https://github.com/atlas-engineer/prompter")
- (synopsis "Live-narrowing, fuzzy-matching, extensible prompt framework")
- (description
- "This prompter library is heavily inspired by Emacs' minibuffer and
+ (let ((commit "7890ed5d02e70aba01ceb964c6ee4f40776e7dc0")
+ (revision "0"))
+ (package
+ (name "sbcl-prompter")
+ (version (git-version "0.1.1" revision commit))
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/atlas-engineer/prompter")
+ (commit commit)))
+ (file-name (git-file-name "cl-prompter" version))
+ (sha256
+ (base32
+ "0r15a6cagyp5x8aqx92ln2anni737h73bdshkvpzrac04ajss4md"))))
+ (build-system asdf-build-system/sbcl)
+ (inputs
+ (list
+ sbcl-alexandria
+ sbcl-calispel
+ sbcl-cl-containers
+ sbcl-cl-str
+ sbcl-closer-mop
+ sbcl-lparallel
+ sbcl-moptilities
+ sbcl-nclasses
+ sbcl-serapeum
+ sbcl-trivial-package-local-nicknames))
+ (native-inputs
+ (list sbcl-lisp-unit2))
+ (home-page "https://github.com/atlas-engineer/prompter")
+ (synopsis "Live-narrowing, fuzzy-matching, extensible prompt framework")
+ (description
+ "This prompter library is heavily inspired by Emacs' minibuffer and
Helm (@url{https://emacs-helm.github.io/helm/}). It only deals with the
backend side of things, it does not handle any display. Features include
asynchronous suggestion computation, multiple sources, actions and resumable
prompters.")
- (license license:bsd-3)))
+ (license license:bsd-3))))
(define-public cl-prompter
(sbcl-package->cl-source-package sbcl-prompter))
diff --git a/gnu/packages/lisp.scm b/gnu/packages/lisp.scm
index 40217780c8..aa7315a7ce 100644
--- a/gnu/packages/lisp.scm
+++ b/gnu/packages/lisp.scm
@@ -1486,7 +1486,7 @@ includes a compiler as well as an interpreter.")
(define-public s7-bootstrap
;; Need s7-bootstrap to build libc_s7.so (for the REPL) and run tests
- (let ((commit "a5b4bb49f8bcd7c33ae2366065fc8c254b734460") ;no releases
+ (let ((commit "618de30e0f9851515724245e3ebbfa1be4de6906") ;no releases
(revision "0"))
(hidden-package
(package
@@ -1500,7 +1500,7 @@ includes a compiler as well as an interpreter.")
(file-name (git-file-name name version))
(sha256
(base32
- "03n1axdlypzmbgzrhlwfqwa1xiw36hi25j2hwc7vw77mz90cd9f8"))))
+ "0kh1f49g24ppjpr16v1nc9lr7pvr5nzb82bpw8c6q8ll7pqalqaf"))))
(build-system gnu-build-system)
(arguments
(list #:tests? #f ;no tests in bootstrap
diff --git a/gnu/packages/llvm.scm b/gnu/packages/llvm.scm
index 6abd1a67d7..4a7cb8033d 100644
--- a/gnu/packages/llvm.scm
+++ b/gnu/packages/llvm.scm
@@ -27,6 +27,7 @@
;;; Copyright © 2022 Clément Lassieur <clement@lassieur.org>
;;; Copyright © 2022 Zhu Zihao <all_but_last@163.com>
;;; Copyright © 2023 Hilton Chain <hako@ultrarare.space>
+;;; Copyright © 2023, 2024 Zheng Junjie <873216071@qq.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -2169,20 +2170,31 @@ using @code{clang-rename}.")))
;; AMDGPU is needed by the vulkan drivers.
#$(string-append "-DLLVM_TARGETS_TO_BUILD="
(system->llvm-target) ";AMDGPU")
+ #$@(if (%current-target-system)
+ '("-DBUILD_SHARED_LIBS:BOOL=TRUE"
+ "-DCMAKE_BUILD_WITH_INSTALL_RPATH=TRUE")
+ '())
;; Skipping tools and utils decreases the output by ~100 MiB.
"-DLLVM_BUILD_TOOLS=NO"
- (remove (cut string-match
- "-DLLVM_(TARGETS_TO_BUILD|INSTALL_UTILS).*" <>)
+ (remove
+ (cut string-match
+ #$(if (%current-target-system)
+ "-DLLVM_(LINK_LLVM_DYLIB|TARGETS_TO_BUILD|INSTALL_UTILS).*"
+ "-DLLVM_(TARGETS_TO_BUILD|INSTALL_UTILS).*") <>)
#$cf)))
((#:phases phases '%standard-phases)
#~(modify-phases #$phases
- (add-after 'install 'delete-static-libraries
- ;; If these are just relocated then llvm-config can't find them.
- (lambda* (#:key outputs #:allow-other-keys)
- (for-each delete-file
- (find-files (string-append
- (assoc-ref outputs "out") "/lib")
- "\\.a$"))))
+ #$@(if (%current-target-system)
+ '()
+ #~((add-after 'install 'delete-static-libraries
+ ;; If these are just relocated then llvm-config
+ ;; can't find them.
+ (lambda* (#:key outputs #:allow-other-keys)
+ (for-each delete-file
+ (find-files
+ (string-append
+ (assoc-ref outputs "out") "/lib")
+ "\\.a$"))))))
;; llvm-config is how mesa and others find the various
;; libraries and headers they use.
(add-after 'install 'build-and-install-llvm-config
diff --git a/gnu/packages/logging.scm b/gnu/packages/logging.scm
index c204a013b4..0efd828f8a 100644
--- a/gnu/packages/logging.scm
+++ b/gnu/packages/logging.scm
@@ -232,7 +232,7 @@ output in multiple windows in a terminal.")
(list "-DSPDLOG_BUILD_BENCH=OFF"
"-DSPDLOG_BUILD_SHARED=ON"
"-DSPDLOG_BUILD_TESTS=ON")))
- (native-inputs (list catch2-3.3))
+ (native-inputs (list catch2-3))
(home-page "https://github.com/gabime/spdlog")
(synopsis "Fast C++ logging library")
(description "Spdlog is a very fast header-only/compiled C++ logging
diff --git a/gnu/packages/machine-learning.scm b/gnu/packages/machine-learning.scm
index 14fc2a0a72..1616738399 100644
--- a/gnu/packages/machine-learning.scm
+++ b/gnu/packages/machine-learning.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2015-2023 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015-2024 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2016, 2020-2023 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2016, 2017, 2020 Marius Bakke <mbakke@fastmail.com>
;;; Copyright © 2016 Hartmut Goebel <h.goebel@crazy-compilers.com>
@@ -21,6 +21,7 @@
;;; Copyright © 2023 zamfofex <zamfofex@twdb.moe>
;;; Copyright © 2023 Navid Afkhami <navid.afkhami@mdc-berlin.de>
;;; Copyright © 2023 Zheng Junjie <873216071@qq.com>
+;;; Copyright © 2023 Troy Figiel <troy@troyfigiel.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -812,6 +813,94 @@ SentencePiece allows us to make a purely end-to-end system that does not
depend on language-specific pre- or post-processing.")
(license license:asl2.0)))
+(define-public python-hopcroftkarp
+ ;; This commit fixes a broken import, but has not been released to PyPI.
+ (let ((commit "2846e1dd3265d95d2bddb0cf4190b830cbb4efe6")
+ (revision "1"))
+ (package
+ (name "python-hopcroftkarp")
+ (version (git-version "1.2.5" revision commit))
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/sofiatolaosebikan/hopcroftkarp")
+ (commit commit)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "018ilrp41fcclmb5lsml3aijwbmhbq3m7wy65hr1fryj0avic8fr"))))
+ (build-system pyproject-build-system)
+ (home-page "https://github.com/sofiatolaosebikan/hopcroftkarp")
+ (synopsis "Implementation of the Hopcroft-Karp algorithm")
+ (description
+ "This package implements the Hopcroft-Karp algorithm, producing a maximum
+cardinality matching from a bipartite graph.")
+ (license license:gpl3))))
+
+(define-public python-persim
+ (package
+ (name "python-persim")
+ (version "0.3.2")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "persim" version))
+ (sha256
+ (base32 "0q8wfakx8q4h3ryvw8cba0v6z7xn9139qkrzs3mi1ggyzacnx9d7"))))
+ (build-system pyproject-build-system)
+ (propagated-inputs (list python-deprecated
+ python-hopcroftkarp
+ python-joblib
+ python-matplotlib
+ python-numpy
+ python-scikit-learn
+ python-scipy))
+ (native-inputs (list python-pytest python-pytest-cov))
+ (home-page "https://persim.scikit-tda.org")
+ (synopsis "Tools for analyzing persistence diagrams in Python")
+ (description
+ "This package includes a variety of tools used to analyze persistence diagrams.
+It currently houses implementations of
+@itemize
+@item Persistence images
+@item Persistence landscapes
+@item Bottleneck distance
+@item Modified Gromov–Hausdorff distance
+@item Sliced Wasserstein kernel
+@item Heat kernel
+@item Diagram plotting
+@end itemize
+")
+ (license license:expat))) ; MIT License
+
+(define-public python-ripser
+ (package
+ (name "python-ripser")
+ (version "0.6.4")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "ripser" version))
+ (sha256
+ (base32 "1575nwsn6b29z7w1mjk23ri83bxq2b4ld979hpgm174642a3x6vs"))))
+ (build-system pyproject-build-system)
+ (propagated-inputs (list python-numpy python-persim python-scikit-learn
+ python-scipy))
+ (native-inputs (list python-cython python-pytest))
+ (home-page "https://ripser.scikit-tda.org")
+ (synopsis "Persistent homology library for Python")
+ (description
+ "This package implements a variety of persistent homology algorithms. It
+provides an interface for
+@itemize
+@item computing persistence cohomology of sparse and dense data sets
+@item visualizing persistence diagrams
+@item computing lowerstar filtrations on images
+@item computing representative cochains
+@end itemize
+")
+ (license license:expat))) ; MIT License
+
(define-public python-sacrebleu
(package
(name "python-sacrebleu")
@@ -1151,6 +1240,11 @@ in terms of new algorithms.")
(build-system python-build-system)
(arguments
'(#:phases (modify-phases %standard-phases
+ (add-after 'unpack 'relax-requirements
+ (lambda _
+ ;; Does this difference really matter?
+ (substitute* "requirements.txt"
+ (("3.20.1") "3.20.2"))))
(add-before 'build 'pass-cmake-arguments
(lambda* (#:key outputs #:allow-other-keys)
;; Pass options to the CMake-based build process.
@@ -1235,7 +1329,13 @@ operators and standard data types.")
'(begin
(delete-file-recursively "third_party")
(substitute* "onnx/backend/test/runner/__init__.py"
- (("urlretrieve\\(.*") "raise unittest.SkipTest('Skipping download')\n"))))))))
+ (("urlretrieve\\(.*") "raise unittest.SkipTest('Skipping download')\n"))))))
+ (arguments
+ ;; reuse build system tweaks
+ (substitute-keyword-arguments (package-arguments onnx)
+ ((#:phases phases)
+ #~(modify-phases #$phases
+ (delete 'relax-requirements)))))))
(define-public python-onnx
;; This used to be called "python-onnx" because it provided nothing but
@@ -1262,7 +1362,12 @@ operators and standard data types.")
(modules '((guix build utils)))
(snippet '(delete-file-recursively "third_party"))))
(build-system python-build-system)
- (arguments (package-arguments onnx)) ;reuse build system tweaks
+ (arguments
+ ;; reuse build system tweaks
+ (substitute-keyword-arguments (package-arguments onnx)
+ ((#:phases phases)
+ #~(modify-phases #$phases
+ (delete 'relax-requirements)))))
(native-inputs
(list cmake python-pytest python-pytest-runner python-nbval
python-coverage))
diff --git a/gnu/packages/minetest.scm b/gnu/packages/minetest.scm
index bf0df314a7..14c47430e3 100644
--- a/gnu/packages/minetest.scm
+++ b/gnu/packages/minetest.scm
@@ -52,7 +52,7 @@
(define-public minetest
(package
(name "minetest")
- (version "5.7.0")
+ (version "5.8.0")
(source (origin
(method git-fetch)
(uri (git-reference
@@ -61,7 +61,7 @@
(file-name (git-file-name name version))
(sha256
(base32
- "008l44zwwsarwk4hn7wx2nj2m21b1iqsphl7g69rrlxj760zl0pl"))
+ "1sww17h8z77w38jk19nsqxn8xcj27msq0glbil7pyj4i0ffprjrr"))
(modules '((guix build utils)))
(snippet
'(begin
@@ -166,7 +166,7 @@ in different ways.")
(file-name (git-file-name name version))
(sha256
(base32
- "02kbj1h6jsq6k8x4v2ir0njczdz7nyx6dbym85ixxp3mrqxiws61"))))
+ "1pq4rm15lzwcqv6npgyz6v89hi3zj8zybw25n9i0d27qj786xc4z"))))
(build-system copy-build-system)
(arguments
(list #:install-plan
diff --git a/gnu/packages/mpd.scm b/gnu/packages/mpd.scm
index e462f0f01d..e16c6bb964 100644
--- a/gnu/packages/mpd.scm
+++ b/gnu/packages/mpd.scm
@@ -117,7 +117,7 @@ interfacing MPD in the C, C++ & Objective C languages.")
(define-public mpd
(package
(name "mpd")
- (version "0.23.14")
+ (version "0.23.15")
(source (origin
(method url-fetch)
(uri
@@ -126,7 +126,7 @@ interfacing MPD in the C, C++ & Objective C languages.")
"/mpd-" version ".tar.xz"))
(sha256
(base32
- "1lh9nn4a7ng6i08df7rbs8c4nbgmz883pss9p2gswa6m4rsadfc5"))))
+ "06k60ych9crifyx6zfc98hdcihixq5nba1c9rwngib6ik8ik40am"))))
(build-system meson-build-system)
(arguments
(list
@@ -162,6 +162,7 @@ interfacing MPD in the C, C++ & Objective C languages.")
boost
chromaprint
curl
+ dbus
elogind
expat
ffmpeg
diff --git a/gnu/packages/multiprecision.scm b/gnu/packages/multiprecision.scm
index 0c6255c129..591170b508 100644
--- a/gnu/packages/multiprecision.scm
+++ b/gnu/packages/multiprecision.scm
@@ -6,7 +6,7 @@
;;; Copyright © 2016, 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2018 Eric Bavier <bavier@member.fsf.org>
-;;; Copyright © 2018, 2019, 2021, 2023 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2018, 2019, 2021, 2023, 2024 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2021 Vinicius Monego <monego@posteo.net>
;;; Copyright © 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
@@ -71,6 +71,8 @@
;; they produce different headers. We need shared.
`("--disable-static"
"--enable-shared"))
+ ((target-x32?)
+ `("ABI=x32"))
(else '())))
;; Remove after core-updates merge.
;; Workaround for gcc-7 transition breakage, -system and cross-build,
diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm
index c3796f7328..28287a6e32 100644
--- a/gnu/packages/networking.scm
+++ b/gnu/packages/networking.scm
@@ -26,7 +26,7 @@
;;; Copyright © 2018, 2020-2022 Marius Bakke <marius@gnu.org>
;;; Copyright © 2018, 2020, 2021, 2022 Oleg Pykhalov <go.wigust@gmail.com>
;;; Copyright © 2018 Pierre Neidhardt <mail@ambrevar.xyz>
-;;; Copyright © 2019, 2020, 2021, 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2019, 2020, 2021, 2022, 2023, 2024 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 2019 Vasile Dumitrascu <va511e@yahoo.com>
;;; Copyright © 2019 Julien Lepiller <julien@lepiller.eu>
;;; Copyright © 2019 Timotej Lazar <timotej.lazar@araneo.si>
@@ -164,8 +164,10 @@
#:use-module (gnu packages sqlite)
#:use-module (gnu packages ssh)
#:use-module (gnu packages tcl)
+ #:use-module (gnu packages telephony)
#:use-module (gnu packages textutils)
#:use-module (gnu packages tls)
+ #:use-module (gnu packages upnp)
#:use-module (gnu packages valgrind)
#:use-module (gnu packages web)
#:use-module (gnu packages wxwidgets)
@@ -1414,39 +1416,50 @@ files contain direct mappings of the abstractions provided by the ØMQ C API.")
(license license:expat)))
(define-public libnatpmp
- (package
- (name "libnatpmp")
- (version "20230423")
- (source (origin
- (method url-fetch)
- (uri (string-append
- "http://miniupnp.free.fr/files/"
- name "-" version ".tar.gz"))
- (sha256
- (base32
- "0w7wvf4yi8qv659dg9d3ndqvh3bqhgm21gd135spwhq6hhnfv106"))))
- (build-system gnu-build-system)
- (arguments
- `(#:phases
- (modify-phases %standard-phases
- (delete 'configure)
- (delete 'check)) ; no tests
- #:make-flags
- (let* ((target ,(%current-target-system))
- (gcc (if target
- (string-append target "-gcc")
- "gcc")))
- (list
- (string-append "CC=" gcc)
- (string-append "INSTALLPREFIX=" (assoc-ref %outputs "out"))
- (string-append "LDFLAGS=-Wl,-rpath=" %output "/lib")))))
- (home-page "http://miniupnp.free.fr/libnatpmp.html")
- (synopsis "C library implementing NAT-PMP")
- (description
- "@code{libnatpmp} is a portable and asynchronous implementation of
+ ;; Install the latest commit as it provides a pkg-config (.pc) file.
+ (let ((base-version "20230423")
+ (commit "6a850fd2bd9b08e6edc886382a1dbae2a7df55ec")
+ (revision "0"))
+ (package
+ (name "libnatpmp")
+ (version (git-version base-version revision commit))
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/miniupnp/libnatpmp")
+ (commit commit)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "18hf9a3i3mncl3w80nzi1684iac3by86bv0hgmbm1v2w8gbfjyw0"))))
+ (build-system cmake-build-system)
+ (arguments
+ (list
+ #:tests? #f ;no test suite
+ #:configure-flags #~(list "-DBUILD_SHARED_LIBS=ON")
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'unpack 'patch-build-system
+ ;; Have CMake install the natpmp_declspec.h missing header file
+ ;; that is referenced by natpmp.h (see:
+ ;; https://github.com/miniupnp/libnatpmp/issues/41).
+ (lambda _
+ (substitute* "CMakeLists.txt"
+ (("install\\(FILES natpmp.h")
+ "install(FILES natpmp.h natpmp_declspec.h"))))
+ (add-after 'unpack 'fix-version
+ (lambda _
+ (with-output-to-file "VERSION"
+ (lambda ()
+ (display #$base-version))))))))
+ (native-inputs (list which))
+ (home-page "https://miniupnp.tuxfamily.org/libnatpmp.html")
+ (synopsis "C library implementing NAT-PMP")
+ (description
+ "@code{libnatpmp} is a portable and asynchronous implementation of
the Network Address Translation - Port Mapping Protocol (NAT-PMP)
written in the C programming language.")
- (license license:bsd-3)))
+ (license license:bsd-3))))
(define-public librdkafka
(package
@@ -3382,14 +3395,14 @@ eight bytes) tools
(define-public asio
(package
(name "asio")
- (version "1.22.2")
+ (version "1.28.0")
(source
(origin
(method url-fetch)
(uri (string-append "mirror://sourceforge/asio/asio/"
version " (Stable)/asio-" version ".tar.bz2"))
(sha256
- (base32 "0v5w9j4a02j2rkc7mrdj3ms0kfpqbgq2ipkixlz2l0p8xs0vfsvp"))))
+ (base32 "0cp2c4v0kz0ln4bays0s3fr1mcxl527ay2lp7s14qbxx38vc5pfh"))))
(build-system gnu-build-system)
(inputs
(list boost openssl))
@@ -3701,61 +3714,103 @@ communication over HTTP.")
(license license:agpl3+)))
(define-public restinio
- ;; Temporarily use an unreleased commit, which includes fixes to be able to
- ;; run the test suite in the resolver-less Guix build environment.
- (let ((revision "0")
- (commit "eda471ec3a2815965ca02ec93a1124a342b7601d"))
- (package
- (name "restinio")
- (version (git-version "0.6.18" revision commit))
- (source (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://github.com/Stiffstream/restinio")
- (commit commit)))
- (file-name (git-file-name name version))
- (sha256
- (base32
- "0f4w7714r0ic7csgxydw2vzfh35ssk34pns9jycmc08dzc3r7whb"))))
- (build-system cmake-build-system)
- (arguments
- (list
- #:configure-flags #~(list "-DRESTINIO_FIND_DEPS=ON"
- "-DRESTINIO_INSTALL=ON"
- "-DRESTINIO_TEST=ON"
- "-DRESTINIO_USE_EXTERNAL_HTTP_PARSER=ON"
- "-DRESTINIO_USE_EXTERNAL_SOBJECTIZER=ON")
- #:phases
- #~(modify-phases %standard-phases
- (add-after 'unpack 'change-directory
- (lambda _
- (chdir "dev"))))))
- (native-inputs
- (list catch2
- clara
- json-dto))
- (inputs
- (list openssl
- sobjectizer))
- (propagated-inputs
- ;; These are all #include'd by restinio's .hpp header files.
- (list asio
- fmt
- http-parser
- pcre
- pcre2
- zlib))
- (home-page "https://stiffstream.com/en/products/restinio.html")
- (synopsis "C++14 library that gives you an embedded HTTP/Websocket server")
- (description "RESTinio is a header-only C++14 library that gives you an embedded
+ (package
+ (name "restinio")
+ (version "0.7.1")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/Stiffstream/restinio")
+ (commit (string-append "v." version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "06p9gcnzgynsgfxxa1lk58pq5755px7sn00x2xh21qjnspwld1sy"))))
+ (build-system cmake-build-system)
+ (arguments
+ (list
+ #:configure-flags
+ #~(list "-DRESTINIO_INSTALL=ON"
+ "-DRESTINIO_TEST=ON"
+ "-DRESTINIO_DEP_LLHTTP=system"
+ "-DRESTINIO_DEP_FMT=system"
+ "-DRESTINIO_DEP_EXPECTED_LITE=system"
+ "-DRESTINIO_DEP_CATCH2=system"
+ ;; No support to use a system provided so_5
+ ;; (see:
+ ;; https://github.com/Stiffstream/restinio/issues/207).
+ "-DRESTINIO_WITH_SOBJECTIZER=OFF")
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'unpack 'change-directory
+ (lambda _
+ (chdir "dev")))
+ (add-after 'change-directory 'use-system-catch2
+ ;; It's not currently possible to select a system-provided catch2,
+ ;; so patch the build system (see:
+ ;; https://github.com/Stiffstream/restinio/issues/208).
+ (lambda _
+ (substitute* "CMakeLists.txt"
+ (("add_subdirectory\\(catch2\\)")
+ "find_package(Catch2 REQUIRED)")))))))
+ (native-inputs
+ (list catch2-3
+ expected-lite
+ json-dto))
+ (inputs
+ (list openssl
+ sobjectizer))
+ (propagated-inputs
+ ;; These are all #include'd by restinio's .hpp header files.
+ (list asio
+ fmt
+ llhttp
+ pcre
+ pcre2
+ zlib))
+ (home-page "https://stiffstream.com/en/products/restinio.html")
+ (synopsis "C++14 library that gives you an embedded HTTP/Websocket server")
+ (description "RESTinio is a header-only C++14 library that gives you an embedded
HTTP/Websocket server. It is based on standalone version of ASIO
and targeted primarily for asynchronous processing of HTTP-requests.")
- (license license:bsd-3))))
+ (license license:bsd-3)))
+
+(define-public restinio-0.6
+ (package
+ (inherit restinio)
+ (name "restinio")
+ (version "0.6.19")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/Stiffstream/restinio")
+ (commit (string-append "v." version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "1qrb1qr075r5059w984c4slgpsiwv94j6fmi9naa5l48dbi1p7jz"))))
+ (arguments
+ (list
+ #:configure-flags #~(list "-DRESTINIO_FIND_DEPS=ON"
+ "-DRESTINIO_INSTALL=ON"
+ "-DRESTINIO_TEST=ON"
+ "-DRESTINIO_USE_EXTERNAL_HTTP_PARSER=ON"
+ "-DRESTINIO_USE_EXTERNAL_SOBJECTIZER=ON")
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'unpack 'change-directory
+ (lambda _
+ (chdir "dev"))))))
+ (native-inputs (list catch2 clara json-dto))
+ ;; These are all #include'd by restinio's .hpp header files.
+ (propagated-inputs
+ (modify-inputs (package-propagated-inputs restinio)
+ (replace "llhttp" http-parser)))))
(define-public opendht
(package
(name "opendht")
- (version "2.4.12")
+ (version "3.1.7")
(source (origin
(method git-fetch)
(uri (git-reference
@@ -3764,7 +3819,7 @@ and targeted primarily for asynchronous processing of HTTP-requests.")
(file-name (git-file-name name version))
(sha256
(base32
- "0yji5pziqxfvyfizk3fn9j59bqlfdwfa1a0y9jjfknb2mmlwwb9w"))))
+ "15jx62fm1frbbvpkxysvvwz1a8d605xi53aacf0bvp4mb1dzpddn"))))
(outputs '("out" "python" "tools" "debug"))
(build-system gnu-build-system)
(arguments
@@ -3792,6 +3847,14 @@ and targeted primarily for asynchronous processing of HTTP-requests.")
(substitute* "tests/Makefile.am"
(("\\bdhtrunnertester\\.(h|cpp)\\b")
""))))
+ (add-after 'unupack 'relax-test-timeouts
+ (lambda _
+ ;; At least the 'test_send_json' has been seen to fail
+ ;; non-deterministically, but it seems hard to reproducible that
+ ;; failure.
+ (substitute* "tests/httptester.cpp"
+ (("std::chrono::seconds\\(10)")
+ "std::chrono::seconds(30)"))))
(add-after 'unpack 'fix-python-installation-prefix
;; Specify the installation prefix for the compiled Python module
;; that would otherwise attempt to installs itself to Python's own
@@ -3835,8 +3898,8 @@ and targeted primarily for asynchronous processing of HTTP-requests.")
fmt
readline))
(propagated-inputs
- (list msgpack ;included in several installed headers
- restinio ;included in opendht/http.h
+ (list msgpack-cxx ;included in several installed headers
+ restinio-0.6 ;included in opendht/http.h
;; The following are listed in the 'Requires.private' field of
;; opendht.pc:
argon2
@@ -3880,6 +3943,60 @@ A very simple IM client working over the DHT.
@end table")
(license license:gpl3+)))
+(define-public dhtnet
+ ;; There is no tag nor release; use the latest available commit.
+ (let ((revision "0")
+ (commit "8b6e99fd34f150fde5f21f3a57e0e9f28174c70c"))
+ (package
+ (name "dhtnet")
+ ;; The base version is taken from the CMakeLists.txt file.
+ (version (git-version "0.0.1" revision commit))
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/savoirfairelinux/dhtnet")
+ (commit commit)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "1yhygsimcl9j6hbww1b77am1kgbcriczslcrfb838nbfh18n1780"))))
+ (outputs (list "out" "debug"))
+ (build-system cmake-build-system)
+ (arguments
+ (list
+ #:configure-flags #~(list "-DBUILD_DEPENDENCIES=OFF"
+ "-DBUILD_SHARED_LIBS=ON"
+ "-DBUILD_TESTING=ON")
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'unpack 'delete-problematic-tests
+ (lambda _
+ (substitute* "CMakeLists.txt"
+ ;; The connectionManager test currently segfaults (see:
+ ;; https://git.jami.net/savoirfairelinux/dhtnet/-/issues/18).
+ ((".*tests_connectionManager.*") "")
+ ;; The fileutils test fail, asserting an unexpected returned
+ ;; value for the removeAll call when the directory to be
+ ;; removed is missing (see:
+ ;; https://git.jami.net/savoirfairelinux/dhtnet/-/issues/17).
+ ((".*tests_fileutils.*") "")))))))
+ (native-inputs (list cppunit pkg-config))
+ ;; This library depends on the Jami fork of pjproject that adds ICE
+ ;; support.
+ (inputs
+ (list asio
+ fmt
+ msgpack-cxx
+ opendht
+ libupnp
+ pjproject-jami
+ readline))
+ (home-page "https://github.com/savoirfairelinux/dhtnet/")
+ (synopsis "OpenDHT network library for C++")
+ (description "The @code{dhtnet} is a C++ library providing abstractions
+for interacting with an OpenDHT distributed network.")
+ (license license:gpl3+))))
+
(define-public frrouting
(package
(name "frrouting")
@@ -4445,36 +4562,32 @@ QUIC protocol.")
"github.com/yggdrasil-network/yggdrasil-go/cmd/yggdrasilctl"
"github.com/yggdrasil-network/yggdrasil-go/cmd/genkeys"))))))))
(propagated-inputs
- (let ((p (package-input-rewriting
- `((,go-golang-org-x-sys . ,go-golang-org-x-sys-0.8))
- #:deep? #true)))
- (cons go-golang-org-x-sys-0.8
- (map p
- (list go-golang-zx2c4-com-wireguard
- go-golang-org-x-text
- go-golang-org-x-net
- go-golang-org-x-crypto
- go-golang-org-x-tools
- go-netns
- go-netlink
- go-github-com-bits-and-blooms-bitset
- go-github-com-bits-and-blooms-bloom
- go-github-com-quic-go-quic-go
- go-github-com-hjson-hjson-go
- go-github-com-olekukonko-tablewriter
- go-github-com-mitchellh-mapstructure
- go-github-com-mattn-go-runewidth
- go-github-com-mattn-go-isatty
- go-github-com-mattn-go-colorable
- go-github-com-kardianos-minwinsvc
- go-github-com-hjson-hjson-go
- go-github-com-hashicorp-go-syslog
- go-github-com-gologme-log
- go-github-com-fatih-color
- go-github-com-cheggaaa-pb-v3
- go-github-com-vividcortex-ewma
- go-github-com-arceliar-phony
- go-github-com-arceliar-ironwood)))))
+ (list go-golang-zx2c4-com-wireguard
+ go-golang-org-x-text
+ go-golang-org-x-net
+ go-golang-org-x-crypto
+ go-golang-org-x-tools
+ go-golang-org-x-sys
+ go-netns
+ go-netlink
+ go-github-com-bits-and-blooms-bitset
+ go-github-com-bits-and-blooms-bloom
+ go-github-com-quic-go-quic-go
+ go-github-com-hjson-hjson-go
+ go-github-com-olekukonko-tablewriter
+ go-github-com-mitchellh-mapstructure
+ go-github-com-mattn-go-runewidth
+ go-github-com-mattn-go-isatty
+ go-github-com-mattn-go-colorable
+ go-github-com-kardianos-minwinsvc
+ go-github-com-hjson-hjson-go
+ go-github-com-hashicorp-go-syslog
+ go-github-com-gologme-log
+ go-github-com-fatih-color
+ go-github-com-cheggaaa-pb-v3
+ go-github-com-vividcortex-ewma
+ go-github-com-arceliar-phony
+ go-github-com-arceliar-ironwood))
(home-page "https://yggdrasil-network.github.io/blog.html")
(synopsis
"Experiment in scalable routing as an encrypted IPv6 overlay network")
diff --git a/gnu/packages/parallel.scm b/gnu/packages/parallel.scm
index e12035e47d..8f59331a02 100644
--- a/gnu/packages/parallel.scm
+++ b/gnu/packages/parallel.scm
@@ -64,14 +64,14 @@
(define-public parallel
(package
(name "parallel")
- (version "20231122")
+ (version "20231222")
(source
(origin
(method url-fetch)
(uri (string-append "mirror://gnu/parallel/parallel-"
version ".tar.bz2"))
(sha256
- (base32 "1qpa3dhmdddw7l5906y8ck8rnri66kqkxcbxhsnj058pmbw9qb42"))
+ (base32 "1alvva2dlnlq5rbbklzc2a7l84mg550l1xc632zdgfx9dzf6sihr"))
(snippet
'(begin
(use-modules (guix build utils))
diff --git a/gnu/packages/patches/curl-use-ssl-cert-env.patch b/gnu/packages/patches/curl-use-ssl-cert-env.patch
index 24be6e31d9..c39c1f7e98 100644
--- a/gnu/packages/patches/curl-use-ssl-cert-env.patch
+++ b/gnu/packages/patches/curl-use-ssl-cert-env.patch
@@ -5,37 +5,37 @@ must be called when no other threads exist).
This fixes network functionality in rust:cargo, and probably removes the need
for other future workarounds.
===================================================================
---- curl-7.66.0.orig/lib/easy.c 2020-01-02 15:43:11.883921171 +0100
-+++ curl-7.66.0/lib/easy.c 2020-01-02 16:18:54.691882797 +0100
-@@ -134,6 +134,9 @@
- # pragma warning(default:4232) /* MSVC extension, dllimport identity */
+--- curl-8.5.0.orig/lib/easy.c 2023-12-17 00:36:32.400468561 -0500
++++ curl-8.5.0/lib/easy.c 2023-12-17 00:39:08.898612331 -0500
+@@ -137,6 +137,9 @@
+ static char *leakpointer;
#endif
-
+
+char * Curl_ssl_cert_dir = NULL;
+char * Curl_ssl_cert_file = NULL;
+
/**
* curl_global_init() globally initializes curl given a bitwise set of the
* different features of what to initialize.
-@@ -155,6 +158,9 @@
- #endif
+@@ -163,6 +166,9 @@
+ goto fail;
}
-
+
+ Curl_ssl_cert_dir = curl_getenv("SSL_CERT_DIR");
+ Curl_ssl_cert_file = curl_getenv("SSL_CERT_FILE");
+
if(!Curl_ssl_init()) {
DEBUGF(fprintf(stderr, "Error: Curl_ssl_init failed\n"));
- return CURLE_FAILED_INIT;
-@@ -260,6 +266,9 @@
+ goto fail;
+@@ -287,6 +293,9 @@
Curl_ssl_cleanup();
Curl_resolver_global_cleanup();
-
+
+ free(Curl_ssl_cert_dir);
+ free(Curl_ssl_cert_file);
+
- #ifdef WIN32
- Curl_win32_cleanup(init_flags);
+ #ifdef _WIN32
+ Curl_win32_cleanup(easy_init_flags);
#endif
diff -ur curl-7.66.0.orig/lib/url.c curl-7.66.0/lib/url.c
--- curl-7.66.0.orig/lib/url.c 2020-01-02 15:43:11.883921171 +0100
diff --git a/gnu/packages/patches/dtc-meson-cell-overflow.patch b/gnu/packages/patches/dtc-meson-cell-overflow.patch
new file mode 100644
index 0000000000..1c319312f7
--- /dev/null
+++ b/gnu/packages/patches/dtc-meson-cell-overflow.patch
@@ -0,0 +1,32 @@
+Taken from upstream:
+https://git.kernel.org/pub/scm/utils/dtc/dtc.git/commit/?id=32174a66efa4ad19fc6a2a6422e4af2ae4f055cb
+
+From 32174a66efa4ad19fc6a2a6422e4af2ae4f055cb Mon Sep 17 00:00:00 2001
+From: David Gibson <david@gibson.dropbear.id.au>
+Date: Tue, 28 Feb 2023 10:33:58 +1100
+Subject: [PATCH] meson: Fix cell overflow tests when running from meson
+
+Because meson always builds out-of-tree we need to reference things in the
+original source tree via $SRCDIR from run_tests.sh. We forgot a couple of
+cases for the cell overflow tests. Fix them.
+
+Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
+---
+ tests/run_tests.sh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/tests/run_tests.sh b/tests/run_tests.sh
+index 91350ad3..f899d8cb 100755
+--- a/tests/run_tests.sh
++++ b/tests/run_tests.sh
+@@ -519,8 +519,8 @@ libfdt_tests () {
+ check_tests "$SRCDIR/phandle-args-overflow.dts" clocks_property
+
+ ## https://github.com/dgibson/dtc/issues/74
+- run_dtc_test -I dts -O dtb -o cell-overflow-results.test.dtb cell-overflow-results.dts
+- run_dtc_test -I dts -O dtb -o cell-overflow.test.dtb cell-overflow.dts
++ run_dtc_test -I dts -O dtb -o cell-overflow-results.test.dtb "$SRCDIR/cell-overflow-results.dts"
++ run_dtc_test -I dts -O dtb -o cell-overflow.test.dtb "$SRCDIR/cell-overflow.dts"
+ run_test dtbs_equal_ordered cell-overflow.test.dtb cell-overflow-results.test.dtb
+
+ # check full tests
diff --git a/gnu/packages/patches/emacs-ess-fix-obsolete-function-alias.patch b/gnu/packages/patches/emacs-ess-fix-obsolete-function-alias.patch
deleted file mode 100644
index f7b61391c3..0000000000
--- a/gnu/packages/patches/emacs-ess-fix-obsolete-function-alias.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-From 9cc5520e1998d03f5dec0fbb1fe71b7cdec38b65 Mon Sep 17 00:00:00 2001
-From: Alex Branham <alex.branham@gmail.com>
-Date: Wed, 6 Jan 2021 06:41:20 -0500
-Subject: [PATCH] Add required when to obsolete function alias
-
-Closes #1085
----
- lisp/ess-r-package.el | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/lisp/ess-r-package.el b/lisp/ess-r-package.el
-index 260959955..397ce14e6 100644
---- a/lisp/ess-r-package.el
-+++ b/lisp/ess-r-package.el
-@@ -577,7 +577,7 @@ package mode. Use this function if state of the buffer such as
- (error "As of ESS 16.04, `ess-developer' is deprecated. Use `ess-r-set-evaluation-env' instead"))
-
- (defalias 'ess-toggle-developer 'ess-developer)
--(define-obsolete-function-alias 'ess-r-devtools-check-package-buildwin 'ess-r-devtools-check-with-winbuilder)
-+(define-obsolete-function-alias 'ess-r-devtools-check-package-buildwin 'ess-r-devtools-check-with-winbuilder "18.04")
- (define-obsolete-function-alias 'ess-r-devtools-ask 'ess-r-devtools-execute-command "18.04")
-
- (make-obsolete-variable 'ess-developer "Please use `ess-developer-select-package' and `ess-r-set-evaluation-env' instead." "16.04")
diff --git a/gnu/packages/patches/ffmpeg-jami-change-RTCP-ratio.patch b/gnu/packages/patches/ffmpeg-jami-change-RTCP-ratio.patch
new file mode 100644
index 0000000000..6248165d8c
--- /dev/null
+++ b/gnu/packages/patches/ffmpeg-jami-change-RTCP-ratio.patch
@@ -0,0 +1,27 @@
+From a884b62c9e6f23b9f4369d724e25db2f42dad28d Mon Sep 17 00:00:00 2001
+From: Pierre LESPAGNOL <pierre.lespagnol@savoirfairelinux.com>
+Date: Tue, 28 May 2019 16:18:20 -0400
+Subject: [PATCH] Changement du ratio de 0.5% a 5%
+
+---
+ libavformat/rtp.h | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/libavformat/rtp.h b/libavformat/rtp.h
+index 54512c6f71..16916ff86a 100644
+--- a/libavformat/rtp.h
++++ b/libavformat/rtp.h
+@@ -78,8 +78,8 @@ enum AVCodecID ff_rtp_codec_id(const char *buf, enum AVMediaType codec_type);
+ #define RTP_VERSION 2
+ #define RTP_MAX_SDES 256 /**< maximum text length for SDES */
+
+-/* RTCP packets use 0.5% of the bandwidth */
+-#define RTCP_TX_RATIO_NUM 5
++/* RTCP packets use 2.5% of the bandwidth */
++#define RTCP_TX_RATIO_NUM 25
+ #define RTCP_TX_RATIO_DEN 1000
+
+ /* An arbitrary id value for RTP Xiph streams - only relevant to indicate
+--
+2.17.1
+
diff --git a/gnu/packages/patches/ffmpeg-jami-libopusdec-enable-FEC.patch b/gnu/packages/patches/ffmpeg-jami-libopusdec-enable-FEC.patch
new file mode 100644
index 0000000000..fb9466a4fc
--- /dev/null
+++ b/gnu/packages/patches/ffmpeg-jami-libopusdec-enable-FEC.patch
@@ -0,0 +1,127 @@
+diff --git a/libavcodec/libopusdec.c b/libavcodec/libopusdec.c
+index 9b9a610343..8ec5bfc1ad 100644
+--- a/libavcodec/libopusdec.c
++++ b/libavcodec/libopusdec.c
+@@ -45,6 +45,8 @@ struct libopus_context {
+ #ifdef OPUS_SET_PHASE_INVERSION_DISABLED_REQUEST
+ int apply_phase_inv;
+ #endif
++ int decode_fec;
++ int64_t expected_next_pts;
+ };
+
+ #define OPUS_HEAD_SIZE 19
+@@ -141,6 +143,8 @@ static av_cold int libopus_decode_init(AVCodecContext *avc)
+ /* Decoder delay (in samples) at 48kHz */
+ avc->delay = avc->internal->skip_samples = opus->pre_skip;
+
++ opus->expected_next_pts = AV_NOPTS_VALUE;
++
+ return 0;
+ }
+
+@@ -161,27 +165,82 @@ static int libopus_decode(AVCodecContext *avc, AVFrame *frame,
+ int *got_frame_ptr, AVPacket *pkt)
+ {
+ struct libopus_context *opus = avc->priv_data;
+- int ret, nb_samples;
++ uint8_t *outptr;
++ int ret, nb_samples = 0, nb_lost_samples = 0, nb_samples_left;
++
++ // If FEC is enabled, calculate number of lost samples
++ if (opus->decode_fec &&
++ opus->expected_next_pts != AV_NOPTS_VALUE &&
++ pkt->pts != AV_NOPTS_VALUE &&
++ pkt->pts != opus->expected_next_pts) {
++ // Cap at recovering 120 ms of lost audio.
++ nb_lost_samples = pkt->pts - opus->expected_next_pts;
++ nb_lost_samples = FFMIN(nb_lost_samples, MAX_FRAME_SIZE);
++ }
+
+- frame->nb_samples = MAX_FRAME_SIZE;
++ frame->nb_samples = MAX_FRAME_SIZE + nb_lost_samples;
+ if ((ret = ff_get_buffer(avc, frame, 0)) < 0)
+ return ret;
+
++ outptr = frame->data[0];
++ nb_samples_left = frame->nb_samples;
++
++ if (opus->decode_fec && nb_lost_samples) {
++ // Try to recover the lost samples with FEC data from this one.
++ // If there's no FEC data, the decoder will do loss concealment instead.
++ if (avc->sample_fmt == AV_SAMPLE_FMT_S16)
++ nb_samples = opus_multistream_decode(opus->dec, pkt->data, pkt->size,
++ (opus_int16 *)outptr,
++ nb_lost_samples, 1);
++ else
++ nb_samples = opus_multistream_decode_float(opus->dec, pkt->data, pkt->size,
++ (float *)outptr,
++ nb_lost_samples, 1);
++
++ if (nb_samples < 0) {
++ av_log(avc, AV_LOG_ERROR, "Decoding error: %s\n",
++ opus_strerror(nb_samples));
++ return ff_opus_error_to_averror(nb_samples);
++ }
++
++ av_log(avc, AV_LOG_WARNING, "Recovered %d samples with FEC/PLC\n",
++ nb_samples);
++
++ outptr += nb_samples * avc->channels * av_get_bytes_per_sample(avc->sample_fmt);
++ nb_samples_left -= nb_samples;
++ if (pkt->pts != AV_NOPTS_VALUE) {
++ pkt->pts -= nb_samples;
++ frame->pts = pkt->pts;
++ }
++ }
++
++ // Decode the actual, non-lost data.
+ if (avc->sample_fmt == AV_SAMPLE_FMT_S16)
+- nb_samples = opus_multistream_decode(opus->dec, pkt->data, pkt->size,
+- (opus_int16 *)frame->data[0],
+- frame->nb_samples, 0);
++ ret = opus_multistream_decode(opus->dec, pkt->data, pkt->size,
++ (opus_int16 *)outptr,
++ nb_samples_left, 0);
+ else
+- nb_samples = opus_multistream_decode_float(opus->dec, pkt->data, pkt->size,
+- (float *)frame->data[0],
+- frame->nb_samples, 0);
++ ret = opus_multistream_decode_float(opus->dec, pkt->data, pkt->size,
++ (float *)outptr,
++ nb_samples_left, 0);
+
+- if (nb_samples < 0) {
++ if (ret < 0) {
+ av_log(avc, AV_LOG_ERROR, "Decoding error: %s\n",
+- opus_strerror(nb_samples));
+- return ff_opus_error_to_averror(nb_samples);
++ opus_strerror(ret));
++ return ff_opus_error_to_averror(ret);
+ }
+
++ nb_samples += ret;
++
++ if (opus->decode_fec)
++ {
++ // Calculate the next expected pts
++ if (pkt->pts == AV_NOPTS_VALUE) {
++ opus->expected_next_pts = AV_NOPTS_VALUE;
++ } else {
++ opus->expected_next_pts = pkt->pts + nb_samples;
++ }
++ }
+ #ifndef OPUS_SET_GAIN
+ {
+ int i = avc->ch_layout.nb_channels * nb_samples;
+@@ -220,6 +279,7 @@ static const AVOption libopusdec_options[] = {
+ #ifdef OPUS_SET_PHASE_INVERSION_DISABLED_REQUEST
+ { "apply_phase_inv", "Apply intensity stereo phase inversion", OFFSET(apply_phase_inv), AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, FLAGS },
+ #endif
++ { "decode_fec", "Decode FEC data or use PLC", OFFSET(decode_fec), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, FLAGS },
+ { NULL },
+ };
+
+--
+2.34.1
+
diff --git a/gnu/packages/patches/ffmpeg-jami-libopusenc-enable-FEC.patch b/gnu/packages/patches/ffmpeg-jami-libopusenc-enable-FEC.patch
new file mode 100644
index 0000000000..43b786c567
--- /dev/null
+++ b/gnu/packages/patches/ffmpeg-jami-libopusenc-enable-FEC.patch
@@ -0,0 +1,50 @@
+diff --git a/libavcodec/libopusencc.c b/libavcodec/libopusencc.c
+index 2a97811d18..40ee7b8fec 100644
+--- a/libavcodec/libopusenc.c
++++ b/libavcodec/libopusenc.c
+@@ -33,6 +33,7 @@
+ typedef struct LibopusEncOpts {
+ int vbr;
+ int application;
++ int enable_fec;
+ int packet_loss;
+ int complexity;
+ float frame_duration;
+@@ -143,6 +144,13 @@
+ "Unable to set constrained VBR: %s\n", opus_strerror(ret));
+
+ ret = opus_multistream_encoder_ctl(enc,
++ OPUS_SET_INBAND_FEC(opts->enable_fec));
++ if (ret != OPUS_OK)
++ av_log(avctx, AV_LOG_WARNING,
++ "Unable to set enable FEC flag percentage: %s\n",
++ opus_strerror(ret));
++
++ ret = opus_multistream_encoder_ctl(enc,
+ OPUS_SET_PACKET_LOSS_PERC(opts->packet_loss));
+ if (ret != OPUS_OK)
+ av_log(avctx, AV_LOG_WARNING,
+@@ -452,6 +460,15 @@
+ int ret;
+ int discard_padding;
+
++ // Reload packet loss setting
++ ret = opus_multistream_encoder_ctl(opus->enc,
++ OPUS_SET_PACKET_LOSS_PERC(opus->opts.packet_loss));
++ if (ret != OPUS_OK)
++ av_log(avctx, AV_LOG_WARNING,
++ "Unable to set expected packet loss percentage: %s\n",
++ opus_strerror(ret));
++
++
+ if (frame) {
+ ret = ff_af_queue_add(&opus->afq, frame);
+ if (ret < 0)
+@@ -543,6 +560,7 @@
+ { "audio", "Favor faithfulness to the input", 0, AV_OPT_TYPE_CONST, { .i64 = OPUS_APPLICATION_AUDIO }, 0, 0, FLAGS, "application" },
+ { "lowdelay", "Restrict to only the lowest delay modes", 0, AV_OPT_TYPE_CONST, { .i64 = OPUS_APPLICATION_RESTRICTED_LOWDELAY }, 0, 0, FLAGS, "application" },
+ { "frame_duration", "Duration of a frame in milliseconds", OFFSET(frame_duration), AV_OPT_TYPE_FLOAT, { .dbl = 20.0 }, 2.5, 120.0, FLAGS },
++ { "enable_fec", "Enable forward error correction", OFFSET(enable_fec), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, FLAGS },
+ { "packet_loss", "Expected packet loss percentage", OFFSET(packet_loss), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 100, FLAGS },
+ { "vbr", "Variable bit rate mode", OFFSET(vbr), AV_OPT_TYPE_INT, { .i64 = 1 }, 0, 2, FLAGS, "vbr" },
+ { "off", "Use constant bit rate", 0, AV_OPT_TYPE_CONST, { .i64 = 0 }, 0, 0, FLAGS, "vbr" },
diff --git a/gnu/packages/patches/ffmpeg-jami-libopusenc-reload-packet-loss-at-encode.patch b/gnu/packages/patches/ffmpeg-jami-libopusenc-reload-packet-loss-at-encode.patch
new file mode 100644
index 0000000000..5c4bd4d3eb
--- /dev/null
+++ b/gnu/packages/patches/ffmpeg-jami-libopusenc-reload-packet-loss-at-encode.patch
@@ -0,0 +1,44 @@
+From dba13d03bc8e827fededc20b0ab1f574a1500f2a Mon Sep 17 00:00:00 2001
+From: Philip-Dylan Gleonec <philip-dylan.gleonec@savoirfairelinux.com>
+Date: Thu, 11 Feb 2021 12:25:14 +0100
+Subject: [PATCH 2/2] avcodec/libopusenc: reload packet loss at encode
+
+An estimation of packet loss is required by libopus to compute its FEC
+data. Currently, this estimation is constant, and can not be changed
+after configuration. This means an application using libopus through
+ffmpeg can not adapt the packet loss estimation when the network
+quality degrades.
+
+This patch makes the encoder reload the packet_loss AVOption before
+encoding samples, if fec is enabled. This way an application can modify
+the packet loss estimation by changing the AVOption. Typical use-case
+is a RTP stream, where packet loss can be estimated from RTCP packets.
+
+Signed-off-by: Philip-Dylan Gleonec <philip-dylan.gleonec@savoirfairelinux.com>
+---
+ libavcodec/libopusenc.c | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+diff --git a/libavcodec/libopusenc.c b/libavcodec/libopusenc.c
+index 70d17f802b..c18e8ae7fa 100644
+--- a/libavcodec/libopusenc.c
++++ b/libavcodec/libopusenc.c
+@@ -460,6 +460,15 @@ static int libopus_encode(AVCodecContext *avctx, AVPacket *avpkt,
+ int ret;
+ int discard_padding;
+
++ if (opus->opts.fec) {
++ ret = opus_multistream_encoder_ctl(opus->enc,
++ OPUS_SET_PACKET_LOSS_PERC(opus->opts.packet_loss));
++ if (ret != OPUS_OK)
++ av_log(avctx, AV_LOG_WARNING,
++ "Unable to set expected packet loss percentage: %s\n",
++ opus_strerror(ret));
++ }
++
+ if (frame) {
+ ret = ff_af_queue_add(&opus->afq, frame);
+ if (ret < 0)
+--
+2.25.1
+
diff --git a/gnu/packages/patches/ffmpeg-jami-remove-mjpeg-log.patch b/gnu/packages/patches/ffmpeg-jami-remove-mjpeg-log.patch
new file mode 100644
index 0000000000..595baea9c9
--- /dev/null
+++ b/gnu/packages/patches/ffmpeg-jami-remove-mjpeg-log.patch
@@ -0,0 +1,26 @@
+From c557a6211f5a29d89fc2ab561e0fb3d8878fb6ad Mon Sep 17 00:00:00 2001
+From: philippegorley <gorley.philippe@gmail.com>
+Date: Mon, 17 Dec 2018 15:27:57 -0500
+Subject: [PATCH] remove mjpeg log
+
+---
+ libavcodec/mjpegdec.c | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+diff --git a/libavcodec/mjpegdec.c b/libavcodec/mjpegdec.c
+index d1dca84d36..4a26c23cd4 100644
+--- a/libavcodec/mjpegdec.c
++++ b/libavcodec/mjpegdec.c
+@@ -2294,9 +2294,7 @@ int ff_mjpeg_decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
+ "restart marker: %d\n", start_code & 0x0f);
+ /* APP fields */
+ } else if (start_code >= APP0 && start_code <= APP15) {
+- if ((ret = mjpeg_decode_app(s)) < 0)
+- av_log(avctx, AV_LOG_ERROR, "unable to decode APP fields: %s\n",
+- av_err2str(ret));
++ ret = mjpeg_decode_app(s);
+ /* Comment */
+ } else if (start_code == COM) {
+ ret = mjpeg_decode_com(s);
+--
+2.17.1
diff --git a/gnu/packages/patches/ffmpeg-jami-rtp_ext_abs_send_time.patch b/gnu/packages/patches/ffmpeg-jami-rtp_ext_abs_send_time.patch
new file mode 100644
index 0000000000..cf52cf972a
--- /dev/null
+++ b/gnu/packages/patches/ffmpeg-jami-rtp_ext_abs_send_time.patch
@@ -0,0 +1,71 @@
+diff --git a/libavformat/rtpenc.c b/libavformat/rtpenc.c
+index 63047beccc..d59ec3dc8c 100644
+--- a/libavformat/rtpenc.c
++++ b/libavformat/rtpenc.c
+@@ -28,6 +28,8 @@
+
+ #include "rtpenc.h"
+
++#define EXT_ABS_SEND_TIME
++
+ static const AVOption options[] = {
+ FF_RTP_FLAG_OPTS(RTPMuxContext, flags),
+ { "payload_type", "Specify RTP payload type", offsetof(RTPMuxContext, payload_type), AV_OPT_TYPE_INT, {.i64 = -1 }, -1, 127, AV_OPT_FLAG_ENCODING_PARAM },
+@@ -146,7 +148,11 @@ static int rtp_write_header(AVFormatContext *s1)
+ s1->pb->max_packet_size);
+ } else
+ s1->packet_size = s1->pb->max_packet_size;
++#ifdef EXT_ABS_SEND_TIME
++ if (s1->packet_size <= 20) {
++#else
+ if (s1->packet_size <= 12) {
++#endif
+ av_log(s1, AV_LOG_ERROR, "Max packet size %u too low\n", s1->packet_size);
+ return AVERROR(EIO);
+ }
+@@ -154,7 +160,11 @@ static int rtp_write_header(AVFormatContext *s1)
+ if (!s->buf) {
+ return AVERROR(ENOMEM);
+ }
++#ifdef EXT_ABS_SEND_TIME
++ s->max_payload_size = s1->packet_size - 20;
++#else
+ s->max_payload_size = s1->packet_size - 12;
++#endif
+
+ if (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) {
+ avpriv_set_pts_info(st, 32, 1, st->codecpar->sample_rate);
+@@ -332,16 +342,34 @@ static void rtcp_send_sr(AVFormatContext *s1, int64_t ntp_time, int bye)
+ void ff_rtp_send_data(AVFormatContext *s1, const uint8_t *buf1, int len, int m)
+ {
+ RTPMuxContext *s = s1->priv_data;
++ uint64_t ntp64_time;
++ uint32_t absoluteSendTime;
+
+ av_log(s1, AV_LOG_TRACE, "rtp_send_data size=%d\n", len);
+
+ /* build the RTP header */
++#ifdef EXT_ABS_SEND_TIME
++ avio_w8(s1->pb, RTP_VERSION << 6 | 0x10); // extention bit
++#else
+ avio_w8(s1->pb, RTP_VERSION << 6);
++#endif
+ avio_w8(s1->pb, (s->payload_type & 0x7f) | ((m & 0x01) << 7));
+ avio_wb16(s1->pb, s->seq);
+ avio_wb32(s1->pb, s->timestamp);
+ avio_wb32(s1->pb, s->ssrc);
+
++#ifdef EXT_ABS_SEND_TIME
++ avio_wb16(s1->pb, 0xBEDE); // magic word
++ avio_wb16(s1->pb, 0x0001); // length=1
++ avio_w8(s1->pb, 0x32); // ID=3 and lenght=2
++ ntp64_time = ff_get_formatted_ntp_time(ff_ntp_time());
++ absoluteSendTime = (uint32_t)((ntp64_time>> 14) & 0x00ffffff);
++ av_log(s1, AV_LOG_TRACE, "ntp64:%lu, abs_time:%u\n", ntp64_time, absoluteSendTime);
++ avio_w8(s1->pb, (uint8_t)(absoluteSendTime >> 16));
++ avio_w8(s1->pb, (uint8_t)(absoluteSendTime >> 8 & 0xff));
++ avio_w8(s1->pb, (uint8_t)(absoluteSendTime & 0xff));
++#endif
++
+ avio_write(s1->pb, buf1, len);
+ avio_flush(s1->pb);
diff --git a/gnu/packages/patches/ffmpeg-jami-screen-sharing-x11-fix.patch b/gnu/packages/patches/ffmpeg-jami-screen-sharing-x11-fix.patch
new file mode 100644
index 0000000000..e54a346706
--- /dev/null
+++ b/gnu/packages/patches/ffmpeg-jami-screen-sharing-x11-fix.patch
@@ -0,0 +1,302 @@
+From c1b210534b15188c964b31dc47e172f8ed4aca55 Mon Sep 17 00:00:00 2001
+From: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
+Date: Tue, 19 Jul 2022 13:35:19 -0300
+Subject: [PATCH] Screen sharing x11 fixes
+
++ We can now have a single stream in the x11grab, which can be updated to follow window resizing
++ Due to stream reinit, shm may cause memory issues and was removed
++ Adds one option (is_area) that defines if we are grabing a region of the display/window or the hole screen/window.
+
+note: This is a custom patch for later rebase
+---
+ libavdevice/xcbgrab.c | 186 ++++++++++--------------------------------
+ 1 file changed, 45 insertions(+), 141 deletions(-)
+
+diff --git a/libavdevice/xcbgrab.c b/libavdevice/xcbgrab.c
+index 64a68ba497..76e654b424 100644
+--- a/libavdevice/xcbgrab.c
++++ b/libavdevice/xcbgrab.c
+@@ -29,11 +29,6 @@
+ #include <xcb/xfixes.h>
+ #endif
+
+-#if CONFIG_LIBXCB_SHM
+-#include <sys/shm.h>
+-#include <xcb/shm.h>
+-#endif
+-
+ #if CONFIG_LIBXCB_SHAPE
+ #include <xcb/shape.h>
+ #endif
+@@ -53,9 +48,6 @@ typedef struct XCBGrabContext {
+ xcb_connection_t *conn;
+ xcb_screen_t *screen;
+ xcb_window_t window;
+-#if CONFIG_LIBXCB_SHM
+- AVBufferPool *shm_pool;
+-#endif
+ int64_t time_frame;
+ AVRational time_base;
+ int64_t frame_duration;
+@@ -72,10 +64,9 @@ typedef struct XCBGrabContext {
+ int region_border;
+ int centered;
+ int select_region;
++ int is_area;
+
+ const char *framerate;
+-
+- int has_shm;
+ } XCBGrabContext;
+
+ #define FOLLOW_CENTER -1
+@@ -97,6 +88,7 @@ static const AVOption options[] = {
+ { "show_region", "Show the grabbing region.", OFFSET(show_region), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, D },
+ { "region_border", "Set the region border thickness.", OFFSET(region_border), AV_OPT_TYPE_INT, { .i64 = 3 }, 1, 128, D },
+ { "select_region", "Select the grabbing region graphically using the pointer.", OFFSET(select_region), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, D },
++ { "is_area", "Define if we are grabing a region of the display/window.", OFFSET(is_area), AV_OPT_TYPE_INT, { .i64 = 1 }, 0, 1, D },
+ { NULL },
+ };
+
+@@ -216,99 +208,6 @@ static int64_t wait_frame(AVFormatContext *s, AVPacket *pkt)
+ return curtime;
+ }
+
+-#if CONFIG_LIBXCB_SHM
+-static int check_shm(xcb_connection_t *conn)
+-{
+- xcb_shm_query_version_cookie_t cookie = xcb_shm_query_version(conn);
+- xcb_shm_query_version_reply_t *reply;
+-
+- reply = xcb_shm_query_version_reply(conn, cookie, NULL);
+- if (reply) {
+- free(reply);
+- return 1;
+- }
+-
+- return 0;
+-}
+-
+-static void free_shm_buffer(void *opaque, uint8_t *data)
+-{
+- shmdt(data);
+-}
+-
+-static AVBufferRef *allocate_shm_buffer(void *opaque, size_t size)
+-{
+- xcb_connection_t *conn = opaque;
+- xcb_shm_seg_t segment;
+- AVBufferRef *ref;
+- uint8_t *data;
+- int id;
+-
+- id = shmget(IPC_PRIVATE, size, IPC_CREAT | 0777);
+- if (id == -1)
+- return NULL;
+-
+- segment = xcb_generate_id(conn);
+- xcb_shm_attach(conn, segment, id, 0);
+- data = shmat(id, NULL, 0);
+- shmctl(id, IPC_RMID, 0);
+- if ((intptr_t)data == -1 || !data)
+- return NULL;
+-
+- ref = av_buffer_create(data, size, free_shm_buffer, (void *)(ptrdiff_t)segment, 0);
+- if (!ref)
+- shmdt(data);
+-
+- return ref;
+-}
+-
+-static int xcbgrab_frame_shm(AVFormatContext *s, AVPacket *pkt)
+-{
+- XCBGrabContext *c = s->priv_data;
+- xcb_shm_get_image_cookie_t iq;
+- xcb_shm_get_image_reply_t *img;
+- xcb_drawable_t drawable = c->window_id;
+- xcb_generic_error_t *e = NULL;
+- AVBufferRef *buf;
+- xcb_shm_seg_t segment;
+-
+- buf = av_buffer_pool_get(c->shm_pool);
+- if (!buf) {
+- av_log(s, AV_LOG_ERROR, "Could not get shared memory buffer.\n");
+- return AVERROR(ENOMEM);
+- }
+- segment = (xcb_shm_seg_t)(uintptr_t)av_buffer_pool_buffer_get_opaque(buf);
+-
+- iq = xcb_shm_get_image(c->conn, drawable,
+- c->x, c->y, c->width, c->height, ~0,
+- XCB_IMAGE_FORMAT_Z_PIXMAP, segment, 0);
+- img = xcb_shm_get_image_reply(c->conn, iq, &e);
+-
+- xcb_flush(c->conn);
+-
+- if (e) {
+- av_log(s, AV_LOG_ERROR,
+- "Cannot get the image data "
+- "event_error: response_type:%u error_code:%u "
+- "sequence:%u resource_id:%u minor_code:%u major_code:%u.\n",
+- e->response_type, e->error_code,
+- e->sequence, e->resource_id, e->minor_code, e->major_code);
+-
+- free(e);
+- av_buffer_unref(&buf);
+- return AVERROR(EACCES);
+- }
+-
+- free(img);
+-
+- pkt->buf = buf;
+- pkt->data = buf->data;
+- pkt->size = c->frame_size;
+-
+- return 0;
+-}
+-#endif /* CONFIG_LIBXCB_SHM */
+-
+ #if CONFIG_LIBXCB_XFIXES
+ static int check_xfixes(xcb_connection_t *conn)
+ {
+@@ -462,14 +361,7 @@ static int xcbgrab_read_packet(AVFormatContext *s, AVPacket *pkt)
+ if (c->show_region)
+ xcbgrab_update_region(s, win_x, win_y);
+
+-#if CONFIG_LIBXCB_SHM
+- if (c->has_shm && xcbgrab_frame_shm(s, pkt) < 0) {
+- av_log(s, AV_LOG_WARNING, "Continuing without shared memory.\n");
+- c->has_shm = 0;
+- }
+-#endif
+- if (!c->has_shm)
+- ret = xcbgrab_frame(s, pkt);
++ ret = xcbgrab_frame(s, pkt);
+ pkt->dts = pkt->pts = pts;
+ pkt->duration = c->frame_duration;
+
+@@ -488,11 +380,8 @@ static av_cold int xcbgrab_read_close(AVFormatContext *s)
+ {
+ XCBGrabContext *ctx = s->priv_data;
+
+-#if CONFIG_LIBXCB_SHM
+- av_buffer_pool_uninit(&ctx->shm_pool);
+-#endif
+-
+ xcb_disconnect(ctx->conn);
++ ctx->conn = NULL;
+
+ return 0;
+ }
+@@ -572,7 +461,15 @@ static int pixfmt_from_pixmap_format(AVFormatContext *s, int depth,
+ static int create_stream(AVFormatContext *s)
+ {
+ XCBGrabContext *c = s->priv_data;
+- AVStream *st = avformat_new_stream(s, NULL);
++
++ // If we try to open another stream to x11grab, there is no reason
++ // to keep more than one stream in the context.
++ AVStream *st;
++ if (!s->nb_streams) {
++ st = avformat_new_stream(s, NULL);
++ } else {
++ st = s->streams[0];
++ }
+ xcb_get_geometry_cookie_t gc;
+ xcb_get_geometry_reply_t *geo;
+ int64_t frame_size_bits;
+@@ -594,11 +491,26 @@ static int create_stream(AVFormatContext *s)
+ return AVERROR_EXTERNAL;
+ }
+
++ // av_log(s, AV_LOG_ERROR, "Capture is_area %d\n", c->is_area);
++ // Width and Height are not 0 only when we set a window area to share
++ // This if may be valid only in the first call to create_stream
+ if (!c->width || !c->height) {
++ // av_log(s, AV_LOG_ERROR, "Capture area!\n");
++ c->is_area = 0;
++ c->width = geo->width;
++ c->height = geo->height;
++ }
++ // If not a predefined area, then we should follow geometry changes
++ // This can be valid only on the second call onwards
++ if (!c->is_area && (c->width != geo->width || c->height != geo->height)) {
+ c->width = geo->width;
+ c->height = geo->height;
+ }
+
++ // av_log(s, AV_LOG_ERROR, "Capture area %dx%d at position %d.%d\n",
++ // c->width, c->height,
++ // c->x, c->y);
++
+ if (c->x + c->width > geo->width ||
+ c->y + c->height > geo->height) {
+ av_log(s, AV_LOG_ERROR,
+@@ -628,13 +540,6 @@ static int create_stream(AVFormatContext *s)
+ }
+ c->frame_size = frame_size_bits / 8;
+
+-#if CONFIG_LIBXCB_SHM
+- c->shm_pool = av_buffer_pool_init2(c->frame_size + AV_INPUT_BUFFER_PADDING_SIZE,
+- c->conn, allocate_shm_buffer, NULL);
+- if (!c->shm_pool)
+- return AVERROR(ENOMEM);
+-#endif
+-
+ st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO;
+ st->codecpar->codec_id = AV_CODEC_ID_RAWVIDEO;
+ st->codecpar->width = c->width;
+@@ -829,23 +734,26 @@ static av_cold int xcbgrab_read_header(AVFormatContext *s)
+ sscanf(s->url, "+%d,%d", &c->x, &c->y);
+ }
+
+- c->conn = xcb_connect(display_name[0] ? display_name : NULL, &screen_num);
+- av_freep(&display_name);
++ if (!c->conn || !c->screen) {
++ xcbgrab_read_close(s);
++ c->conn = xcb_connect(display_name[0] ? display_name : NULL, &screen_num);
++ av_freep(&display_name);
+
+- if ((ret = xcb_connection_has_error(c->conn))) {
+- av_log(s, AV_LOG_ERROR, "Cannot open display %s, error %d.\n",
+- s->url[0] ? s->url : "default", ret);
+- return AVERROR(EIO);
+- }
++ if ((ret = xcb_connection_has_error(c->conn))) {
++ av_log(s, AV_LOG_ERROR, "Cannot open display %s, error %d.\n",
++ s->url[0] ? s->url : "default", ret);
++ return AVERROR(EIO);
++ }
+
+- setup = xcb_get_setup(c->conn);
++ setup = xcb_get_setup(c->conn);
+
+- c->screen = get_screen(setup, screen_num);
+- if (!c->screen) {
+- av_log(s, AV_LOG_ERROR, "The screen %d does not exist.\n",
+- screen_num);
+- xcbgrab_read_close(s);
+- return AVERROR(EIO);
++ c->screen = get_screen(setup, screen_num);
++ if (!c->screen) {
++ av_log(s, AV_LOG_ERROR, "The screen %d does not exist.\n",
++ screen_num);
++ xcbgrab_read_close(s);
++ return AVERROR(EIO);
++ }
+ }
+
+ if (c->window_id == XCB_NONE)
+@@ -876,10 +784,6 @@ static av_cold int xcbgrab_read_header(AVFormatContext *s)
+ return ret;
+ }
+
+-#if CONFIG_LIBXCB_SHM
+- c->has_shm = check_shm(c->conn);
+-#endif
+-
+ #if CONFIG_LIBXCB_XFIXES
+ if (c->draw_mouse) {
+ if (!(c->draw_mouse = check_xfixes(c->conn))) {
+--
+2.34.1
+
diff --git a/gnu/packages/patches/guile-fibers-libevent-timeout.patch b/gnu/packages/patches/guile-fibers-libevent-timeout.patch
new file mode 100644
index 0000000000..c33678eea3
--- /dev/null
+++ b/gnu/packages/patches/guile-fibers-libevent-timeout.patch
@@ -0,0 +1,61 @@
+commit 2ca397bfcca94c106380368b5b0ce920b0a62a95
+Author: Ludovic Courtès <ludo@gnu.org>
+Date: Sat Jan 6 16:22:45 2024 +0100
+
+ libevent: Fix computation of the timeout value.
+
+diff --git a/extensions/libevent.c b/extensions/libevent.c
+index 134460a..62e50a3 100644
+--- a/extensions/libevent.c
++++ b/extensions/libevent.c
+@@ -192,30 +192,27 @@ scm_primitive_resize (SCM lst, SCM eventsv)
+ }
+ #undef FUNC_NAME
+
+-static uint64_t time_units_per_microsec;
++static uint64_t time_units_per_microsec, microsec_per_time_units;
+
+ static void*
+ run_event_loop (void *p)
+ #define FUNC_NAME "primitive-event-loop"
+ {
+- int ret = 0;
+- int microsec = 0;
+- struct timeval tv;
+-
++ int ret;
+ struct loop_data *data = p;
+
+- if (data->timeout < 0)
+- microsec = -1;
+- else if (data->timeout >= 0)
++ if (data->timeout >= 0)
+ {
+- microsec = (time_units_per_microsec == 0)
+- ? 0 : data->timeout / time_units_per_microsec;
+- tv.tv_sec = 0;
+- tv.tv_usec = microsec;
+- }
++ struct timeval tv;
++
++ tv.tv_sec = data->timeout / scm_c_time_units_per_second;
++ tv.tv_usec =
++ time_units_per_microsec > 0
++ ? ((data->timeout % scm_c_time_units_per_second)
++ / time_units_per_microsec)
++ : ((data->timeout % scm_c_time_units_per_second)
++ * microsec_per_time_units);
+
+- if (microsec >= 0)
+- {
+ ret = event_base_loopexit (data->base, &tv);
+ if (ret == -1)
+ SCM_MISC_ERROR ("event loop exit failed", SCM_EOL);
+@@ -307,6 +304,7 @@ void
+ init_fibers_libevt (void)
+ {
+ time_units_per_microsec = scm_c_time_units_per_second / 1000000;
++ microsec_per_time_units = 1000000 / scm_c_time_units_per_second;
+
+ scm_c_define_gsubr ("primitive-event-wake", 1, 0, 0,
+ scm_primitive_event_wake);
diff --git a/gnu/packages/patches/jami-disable-integration-tests.patch b/gnu/packages/patches/jami-disable-integration-tests.patch
index 1efb7d552e..18f13800ac 100644
--- a/gnu/packages/patches/jami-disable-integration-tests.patch
+++ b/gnu/packages/patches/jami-disable-integration-tests.patch
@@ -1,3 +1,5 @@
+This issue is tracked at https://git.jami.net/savoirfairelinux/jami-daemon/-/issues/824.
+
From 3fd7acc6e5a8c316c366827956d7c06affdc9685 Mon Sep 17 00:00:00 2001
From: Olivier Dion <olivier.dion@savoirfairelinux.com>
Date: Fri, 7 Oct 2022 15:20:37 -0400
@@ -17,8 +19,8 @@ With file names adjusted for the source tarball.
diff --git a/configure.ac b/configure.ac
index 27215d044..aaeef1c1b 100644
---- a/daemon/configure.ac
-+++ b/daemon/configure.ac
+--- a/configure.ac
++++ b/configure.ac
@@ -40,6 +40,11 @@ AS_IF([test "x$enable_debug" = "xyes"],
[DAEMONCFLAGS+=" -DNDEBUG=1 -O3"
DAEMONCXXFLAGS+=" -DNDEBUG=1 -O3 -Wno-deprecated"])
@@ -33,8 +35,8 @@ index 27215d044..aaeef1c1b 100644
[Build fuzzing tools]))
diff --git a/test/unitTest/Makefile.am b/test/unitTest/Makefile.am
index f2b0fd994..ab232ddb7 100644
---- a/daemon/test/unitTest/Makefile.am
-+++ b/daemon/test/unitTest/Makefile.am
+--- a/test/unitTest/Makefile.am
++++ b/test/unitTest/Makefile.am
@@ -13,30 +13,6 @@ check_PROGRAMS =
####### Unit Test ########
diff --git a/gnu/packages/patches/jami-libjami-headers-search.patch b/gnu/packages/patches/jami-libjami-headers-search.patch
index 92cc92a4a6..3e7e19d703 100644
--- a/gnu/packages/patches/jami-libjami-headers-search.patch
+++ b/gnu/packages/patches/jami-libjami-headers-search.patch
@@ -1,4 +1,7 @@
-Upstream status: https://review.jami.net/c/jami-client-qt/+/24273.
+It was applied, then reverted (by mistake?) in 4d2c55348bc014.
+
+It's been resubmitted here:
+https://lists.gnu.org/archive/html/jami/2024-01/msg00005.html
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8d71b84b..36729698 100644
diff --git a/gnu/packages/patches/jami-qml-tests-discovery.patch b/gnu/packages/patches/jami-qml-tests-discovery.patch
new file mode 100644
index 0000000000..11fd69571c
--- /dev/null
+++ b/gnu/packages/patches/jami-qml-tests-discovery.patch
@@ -0,0 +1,15 @@
+Upstream status: https://review.jami.net/c/jami-client-qt/+/25640
+
+diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
+index d50908cf..587c9d15 100644
+--- a/tests/CMakeLists.txt
++++ b/tests/CMakeLists.txt
+@@ -73,6 +73,8 @@ endif()
+
+ string(TOUPPER ${CMAKE_BUILD_TYPE} BUILD_TYPE)
+
++set(QUICK_TEST_SOURCE_DIR "${CMAKE_SOURCE_DIR}tests/qml/src")
++
+ set(QML_TESTS_SOURCE_FILES
+ ${CMAKE_SOURCE_DIR}/tests/qml/main.cpp
+ ${TEST_QML_RESOURCES}
diff --git a/gnu/packages/patches/jami-skip-tests-requiring-internet.patch b/gnu/packages/patches/jami-skip-tests-requiring-internet.patch
new file mode 100644
index 0000000000..1abc0e80cb
--- /dev/null
+++ b/gnu/packages/patches/jami-skip-tests-requiring-internet.patch
@@ -0,0 +1,51 @@
+Forwarded upstream: https://lists.gnu.org/archive/html/jami/2024-01/msg00010.html
+
+From 1d3b044c85c32341cca392254fe8bbf34a4639e1 Mon Sep 17 00:00:00 2001
+From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
+Date: Tue, 9 Jan 2024 11:14:04 -0500
+Subject: [PATCH] tests: Skip tests that need Internet when there's none.
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+* tests/unittests/messageparser_unittest.cpp (ALinkIsParsedCorrectly)
+(YoutubeLinkIsParsedCorrectly): Skip when there is no Internet.
+
+Series-to: jami@gnu.org
+Series-cc: Sébastien Blin <sebastien.blin@savoirfairelinux.com>
+Fixes: <https://git.jami.net/savoirfairelinux/jami-client-qt/-/issues/1507>
+Change-Id: I0a5b57cd82f93fd7edf3fbeb73fb3db5a04c628c
+---
+ tests/unittests/messageparser_unittest.cpp | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/tests/unittests/messageparser_unittest.cpp b/tests/unittests/messageparser_unittest.cpp
+index c10b0d0b..df7a0692 100644
+--- a/tests/unittests/messageparser_unittest.cpp
++++ b/tests/unittests/messageparser_unittest.cpp
+@@ -69,6 +69,9 @@ TEST_F(MessageParserFixture, TextIsParsedCorrectly)
+ */
+ TEST_F(MessageParserFixture, ALinkIsParsedCorrectly)
+ {
++ if (!globalEnv.connectivityMonitor->isOnline())
++ GTEST_SKIP() << "ALinkIsParsedCorrectly requires Internet connectivity";
++
+ auto linkColor = QColor::fromRgb(0, 0, 255);
+ auto backgroundColor = QColor::fromRgb(0, 0, 255);
+
+@@ -174,6 +177,9 @@ TEST_F(MessageParserFixture, FencedCodeIsParsedCorrectly)
+ */
+ TEST_F(MessageParserFixture, YoutubeLinkIsParsedCorrectly)
+ {
++ if (!globalEnv.connectivityMonitor->isOnline())
++ GTEST_SKIP() << "YoutubeLinkIsParsedCorrectly requires Internet connectivity";
++
+ auto url = "https://www.youtube.com/watch?v=1234567890";
+ auto msg = "blah blah " + QString(url) + " blah blah";
+
+
+base-commit: a4300308dc8d03d59f620bb5fed753df5cf31ed9
+prerequisite-patch-id: 90a419e7de1f4fa5bb68bc58ad0da2817ed268e0
+--
+2.41.0
+
diff --git a/gnu/packages/patches/jami-unbundle-dependencies.patch b/gnu/packages/patches/jami-unbundle-dependencies.patch
new file mode 100644
index 0000000000..dab82b26cb
--- /dev/null
+++ b/gnu/packages/patches/jami-unbundle-dependencies.patch
@@ -0,0 +1,71 @@
+Forwarded here: https://lists.gnu.org/archive/html/jami/2024-01/msg00007.html
+
+From a302dc0a0faf2778331745a1d01bc3071e182d4d Mon Sep 17 00:00:00 2001
+From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
+Date: Mon, 8 Jan 2024 16:07:05 -0500
+Subject: [PATCH] build: Allow using system-provided md4c and tidy libraries.
+
+* CMakeLists.txt <md4c, tidy>: Search for libraries in the system
+first, falling back to bundled copies in case they aren't found.
+
+Series-to: jami@gnu.org
+Fixes: <https://git.jami.net/savoirfairelinux/jami-client-qt/-/issues/1506>
+Change-Id: I637959fefce6a21b0ee73a793acb6c3c42dcdce0
+---
+ CMakeLists.txt | 36 +++++++++++++++++++++++++-----------
+ 1 file changed, 25 insertions(+), 11 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 38e7a4e2..3f1bd599 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -545,19 +545,33 @@ add_subdirectory(3rdparty/SortFilterProxyModel)
+ set(SFPM_OBJECTS $<TARGET_OBJECTS:SortFilterProxyModel>)
+
+ # md4c
+-set(BUILD_SHARED_LIBS OFF CACHE BOOL "Don't build shared md4c library" FORCE)
+-add_subdirectory(3rdparty/md4c EXCLUDE_FROM_ALL)
+-list(APPEND CLIENT_LINK_DIRS ${MD4C_BINARY_DIR}/src)
+-list(APPEND CLIENT_INCLUDE_DIRS ${MD4C_SOURCE_DIR}/src)
+-list(APPEND CLIENT_LIBS md4c-html)
++find_package(md4c)
++if(md4c_FOUND)
++ message(STATUS "Using system-provided md4c-html")
++ list(APPEND CLIENT_LIBS md4c::md4c-html)
++else()
++ message("Using bundled md4c-html library")
++ set(BUILD_SHARED_LIBS OFF CACHE BOOL "Don't build shared md4c library" FORCE)
++ add_subdirectory(3rdparty/md4c EXCLUDE_FROM_ALL)
++ list(APPEND CLIENT_LINK_DIRS ${MD4C_BINARY_DIR}/src)
++ list(APPEND CLIENT_INCLUDE_DIRS ${MD4C_SOURCE_DIR}/src)
++ list(APPEND CLIENT_LIBS md4c-html)
++endif()
+
+ # tidy-html5
+-set(BUILD_SHARED_LIB OFF CACHE BOOL "Don't build shared tidy library" FORCE)
+-set(SUPPORT_CONSOLE_APP OFF CACHE BOOL "Don't build tidy console app" FORCE)
+-add_subdirectory(3rdparty/tidy-html5 EXCLUDE_FROM_ALL)
+-list(APPEND CLIENT_LINK_DIRS ${tidy_BINARY_DIR}/Release)
+-list(APPEND CLIENT_INCLUDE_DIRS ${tidy_SOURCE_DIR}/include)
+-list(APPEND CLIENT_LIBS tidy-static)
++pkg_check_modules(tidy IMPORTED_TARGET tidy)
++if(tidy_FOUND)
++ message(STATUS "Using system-provided tidy")
++ list(APPEND CLIENT_LIBS PkgConfig::tidy)
++else()
++ message("Using bundled tidy library")
++ set(BUILD_SHARED_LIB OFF CACHE BOOL "Don't build shared tidy library" FORCE)
++ set(SUPPORT_CONSOLE_APP OFF CACHE BOOL "Don't build tidy console app" FORCE)
++ add_subdirectory(3rdparty/tidy-html5 EXCLUDE_FROM_ALL)
++ list(APPEND CLIENT_LINK_DIRS ${tidy_BINARY_DIR}/Release)
++ list(APPEND CLIENT_INCLUDE_DIRS ${tidy_SOURCE_DIR}/include)
++ list(APPEND CLIENT_LIBS tidy-static)
++endif()
+
+ # common executable sources
+ qt_add_executable(
+
+base-commit: a4300308dc8d03d59f620bb5fed753df5cf31ed9
+--
+2.41.0
+
diff --git a/gnu/packages/patches/libjami-ac-config-files.patch b/gnu/packages/patches/libjami-ac-config-files.patch
new file mode 100644
index 0000000000..8508d55ee1
--- /dev/null
+++ b/gnu/packages/patches/libjami-ac-config-files.patch
@@ -0,0 +1,52 @@
+Forwarded here: https://lists.gnu.org/archive/html/jami/2024-01/msg00003.html
+
+From 20a1702d881b381979d31c456f1b8cf5e0f728ad Mon Sep 17 00:00:00 2001
+From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
+Date: Sun, 7 Jan 2024 16:40:41 -0500
+Subject: [PATCH] configure.ac: Expand AC_CONFIG_FILES to fix a race.
+
+The commands apparently run for each file listed, or something
+similar, leading to:
+
+ configure: creating ./config.status
+ config.status: creating test/agent/Makefile
+ chmod: cannot access 'test/agent/pre-inst-env': No such file or directory
+ chmod: cannot access 'test/agent/scenarios/bulk-calls/run-scenario': No such file or directory
+ config.status: creating test/agent/pre-inst-env
+ chmod: cannot access 'test/agent/scenarios/bulk-calls/run-scenario': No such file or directory
+
+* configure.ac [ENABLE_AGENT]: Separate AC_CONFIG_FILES uses per file.
+
+Series-to: jami@gnu.org
+Series-postfix: daemon
+Change-Id: Ib283955b73540248e09bf31ef44ef3d178b216fa
+---
+ configure.ac | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index cdea5ff1c..2ab96d817 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -61,11 +61,11 @@ AC_ARG_ENABLE([agent],
+ [Build agent]))
+ AM_CONDITIONAL([ENABLE_AGENT], [test "x$enable_agent" = "xyes"])
+ AM_COND_IF([ENABLE_AGENT],
+- [AC_CONFIG_FILES([test/agent/Makefile
+- test/agent/pre-inst-env:test/agent/build-aux/pre-inst-env.in
+- test/agent/scenarios/bulk-calls/run-scenario],
+- [chmod +x test/agent/pre-inst-env
+- chmod +x test/agent/scenarios/bulk-calls/run-scenario])])
++ [AC_CONFIG_FILES([test/agent/Makefile])
++ AC_CONFIG_FILES([test/agent/pre-inst-env:test/agent/build-aux/pre-inst-env.in],
++ [chmod +x test/agent/pre-inst-env])
++ AC_CONFIG_FILES([test/agent/scenarios/bulk-calls/run-scenario],
++ [chmod +x test/agent/scenarios/bulk-calls/run-scenario])])
+
+ AC_ARG_ENABLE([tracepoints], AS_HELP_STRING([--enable-tracepoints], [Enable tracepoints]))
+
+
+base-commit: e246fb2e090c9b3de55e2d455eee5a6f05a5b286
+--
+2.41.0
+
diff --git a/gnu/packages/patches/python-pyreadstat-link-libiconv.patch b/gnu/packages/patches/python-pyreadstat-link-libiconv.patch
new file mode 100644
index 0000000000..7efd71faeb
--- /dev/null
+++ b/gnu/packages/patches/python-pyreadstat-link-libiconv.patch
@@ -0,0 +1,15 @@
+To ensure libiconv can be found by Guix, we need to link the library.
+
+--- a/setup.py
++++ b/setup.py
+@@ -81,8 +81,7 @@ else:
+ libraries.extend(["m", "z"])
+ _platform = sys.platform
+ # Mac: iconv needs to be linked statically
+- if _platform.lower().startswith("darwin"):
+- libraries.append("iconv")
++ libraries.append("iconv")
+
+ # Extensions
+ sources.sort()
+
diff --git a/gnu/packages/patches/python-uqbar-python3.10.patch b/gnu/packages/patches/python-uqbar-python3.10.patch
new file mode 100644
index 0000000000..164f0c0c64
--- /dev/null
+++ b/gnu/packages/patches/python-uqbar-python3.10.patch
@@ -0,0 +1,23 @@
+Since Python 3.10 the output of a CLI program created with argparse
+uses "options" instead of "optional arguments". This behaviour breaks
+the tests in python-uqbar.
+
+--- a/tests/test_cli.py
++++ b/tests/test_cli.py
+@@ -84,7 +84,7 @@ def test_call_help():
+
+ speak like a cat
+
+- optional arguments:
++ options:
+ -h, --help show this help message and exit
+ --version show program's version number and exit
+ --loud be adamant
+@@ -101,6 +101,6 @@ def test_help():
+ """
+ usage: vox-aggregator [-h] [--version] {help,list,birds,mammals} ...
+
+- optional arguments:
++ options:
+ -h, --help show this help message and exit
+ --version show program's version number and exit
diff --git a/gnu/packages/plan9.scm b/gnu/packages/plan9.scm
index f78c26e215..b2d8d75471 100644
--- a/gnu/packages/plan9.scm
+++ b/gnu/packages/plan9.scm
@@ -73,8 +73,8 @@ reconstruct a Plan 9 terminal-like experience from a non-Plan 9 system.")
(define-public plan9port
;; no releases
- (let ((commit "cc4571fec67407652b03d6603ada6580de2194dc")
- (revision "0"))
+ (let ((commit "f8681acb374fa0d5ed1568dbedb00a4abe1ca6f1")
+ (revision "1"))
(package
(name "plan9port")
(version (git-version "0.1.0" revision commit))
@@ -86,7 +86,7 @@ reconstruct a Plan 9 terminal-like experience from a non-Plan 9 system.")
(file-name (git-file-name name version))
(sha256
(base32
- "1g2kzlghcghs560na6xalfsjq5zwp015wv9wk8wxn26981zs759x"))
+ "01343jvn8kr63i78h8xlgscn6wihdsr44xzh1cylvhigjbqw8n2x"))
(modules '((guix build utils)))
(snippet #~(for-each delete-file-recursively
'("font/luc" ;nonfree
@@ -94,73 +94,69 @@ reconstruct a Plan 9 terminal-like experience from a non-Plan 9 system.")
(build-system gnu-build-system)
(arguments
(list #:tests? #f ;no tests
- #:phases #~(modify-phases %standard-phases
- (add-after 'unpack 'setup
- (lambda _
- (delete-file "src/cmd/mk/mk.pdf")
- (substitute* "src/cmd/acme/acme.c"
- (("/lib/font/bit/lucsans/euro.8.font")
- (string-append #$output
- "/font/fixed/unicode.5x8.font"))
- (("/lib/font/bit/lucm/unicode.9.font")
- (string-append #$output
- "/font/fixed/unicode.6x9.font")))
- (substitute* (find-files "src")
- (("/lib/font/bit")
- (string-append #$output "/font")))
- (substitute* "bin/9c"
- (("which")
- (which "which")))
- (substitute* "src/cmd/fontsrv/freetyperules.sh"
- (("'\\$i'/freetype2")
- (string-append "-I"
- #$freetype
- "/include/freetype2")))
- (with-output-to-file "LOCAL.config"
- (lambda _
- (format #t "CC9=~a~%" #$(cc-for-target))
- (format #t "FONTSRV=fontsrv~%")))
- (setenv "X11"
- #$libx11)
- (setenv "PLAN9"
- (getcwd))
- (setenv "PLAN9_TARGET"
- #$output)))
- (delete 'configure) ;no configure
- (replace 'build
- (lambda _
- (invoke "./INSTALL" "-b")))
- (replace 'install
- (lambda _
- (for-each (lambda (x)
- (let ((out (string-append #$output
- "/" x)))
- (mkdir-p out)
- (copy-recursively x out)))
- ;; TODO: use external sky and dict packages
- '("bin" "face"
- "font"
- "include"
- "lib"
- "lp"
- "mail"
- "man"
- "ndb"
- "plumb"
- "tmac"
- "troff"
- "postscript"))
- (install-file "rcmain" #$output)))
- (add-after 'install 'wrap-executables
- (lambda _
- (for-each (lambda (exe)
- (wrap-program exe
- `("PLAN9" ":" prefix
- (,#$output))))
- (find-files
- (string-append #$output "/bin")))))
- ;; Plan9 doesn't compress man pages
- (delete 'compress-documentation))))
+ #:strip-directories #~'("plan9/bin")
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'unpack 'setup
+ (lambda _
+ (let ((dest (string-append #$output "/plan9")))
+ (delete-file "src/cmd/mk/mk.pdf")
+ (substitute* "src/cmd/acme/acme.c"
+ (("/lib/font/bit/lucsans/euro.8.font")
+ (string-append dest
+ "/font/fixed/unicode.5x8.font"))
+ (("/lib/font/bit/lucm/unicode.9.font")
+ (string-append dest
+ "/font/fixed/unicode.6x9.font")))
+ (substitute* (find-files "src")
+ (("/lib/font/bit")
+ (string-append dest "/font")))
+ (substitute* "bin/9c"
+ (("which")
+ (which "which")))
+ (substitute* "src/cmd/fontsrv/freetyperules.sh"
+ (("'\\$i'/freetype2")
+ (string-append "-I"
+ #$freetype
+ "/include/freetype2")))
+ (with-output-to-file "LOCAL.config"
+ (lambda _
+ (format #t "CC9=~a~%" #$(cc-for-target))
+ (format #t "FONTSRV=fontsrv~%")))
+ (setenv "X11" #$libx11)
+ (setenv "PLAN9" (getcwd))
+ (setenv "PLAN9_TARGET" dest))))
+ (delete 'configure) ;no configure
+ (replace 'build
+ (lambda _
+ (invoke "./INSTALL" "-b")))
+ (replace 'install
+ (lambda _
+ (invoke "./INSTALL" "-c")
+ (let ((dest (getenv "PLAN9_TARGET")))
+ (for-each (lambda (x)
+ (let ((out (string-append dest "/" x)))
+ (mkdir-p out)
+ (copy-recursively x out)))
+ ;; TODO: use external sky and dict packages
+ '("bin" "face"
+ "font"
+ "include"
+ "lib"
+ "lp"
+ "mail"
+ "man"
+ "ndb"
+ "plumb"
+ "tmac"
+ "troff"
+ "postscript"))
+ (install-file "rcmain" dest)
+ (mkdir-p (string-append #$output "/bin"))
+ (symlink (string-append dest "/bin/9")
+ (string-append #$output "/bin/9")))))
+ ;; Plan9 doesn't compress man pages
+ (delete 'compress-documentation))))
(native-inputs (list perl which))
(inputs (list bash-minimal ;for 'wrap-program'
fontconfig libx11 libxext libxt))
diff --git a/gnu/packages/potassco.scm b/gnu/packages/potassco.scm
index 884da3c99f..e69bfda9d6 100644
--- a/gnu/packages/potassco.scm
+++ b/gnu/packages/potassco.scm
@@ -209,7 +209,7 @@ satisfiability checking (SAT).")
"unpool-ast-v2" "parse_term"
"propagator" "propgator-sequence-mining"
"symbol" "visitor"))))))))))
- (inputs (list catch2-3.3 clasp libpotassco))
+ (inputs (list catch2-3 clasp libpotassco))
(native-inputs (list mpark-variant
pkg-config
tl-optional
diff --git a/gnu/packages/python-compression.scm b/gnu/packages/python-compression.scm
index bc96bc05d3..6f249dd3af 100644
--- a/gnu/packages/python-compression.scm
+++ b/gnu/packages/python-compression.scm
@@ -7,6 +7,7 @@
;;; Copyright © 2020 Nicolas Goaziou <mail@nicolasgoaziou.fr>
;;; Copyright © 2020, 2022, 2023 Marius Bakke <marius@gnu.org>
;;; Copyright © 2021 Brendan Tildesley <mail@brendan.scot>
+;;; Copyright © 2023 Troy Figiel <troy@troyfigiel.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -416,6 +417,39 @@ the LZ4 frame format.")
(description "Lz-string is a string compressor library for Python.")
(license license:expat)))
+(define-public python-python-snappy
+ (package
+ ;; PyPI contains both `snappy' and `python-snappy' as completely distinct
+ ;; packages. To avoid a name collision in Guix, we use the variable name
+ ;; `python-python-snappy' for the package called `python-snappy' on PyPI.
+ (name "python-python-snappy")
+ (version "0.6.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "python-snappy" version))
+ (sha256
+ (base32 "0amv12w0ybn6n1lk36x70a3l8bdjv4mn7iflb59wqsi00smhg8dn"))))
+ (build-system python-build-system)
+ (arguments
+ '(#:phases (modify-phases %standard-phases
+ (replace 'check
+ (lambda* (#:key tests? #:allow-other-keys)
+ (when tests?
+ (invoke "pytest" "-vv" "-k"
+ ;; CFFI is only supported for PyPy builds.
+ (string-append "not test_snappy_cffi_enum "
+ "and not test_snappy_all_cffi"))))))))
+ (inputs (list snappy))
+ (native-inputs (list python-pytest))
+ (home-page "https://github.com/andrix/python-snappy")
+ (synopsis "Python bindings for the Snappy compression library")
+ (description
+ "@code{python-python-snappy} provides bindings to the Snappy library and
+can be used to compress and decompress files and streams. It can also be used
+directly from the command line.")
+ (license license:bsd-3)))
+
(define-public bitshuffle
(package
(name "bitshuffle")
diff --git a/gnu/packages/python-web.scm b/gnu/packages/python-web.scm
index 06b578dac7..88d07ffbc7 100644
--- a/gnu/packages/python-web.scm
+++ b/gnu/packages/python-web.scm
@@ -60,6 +60,7 @@
;;; Copyright © 2022 Baptiste Strazzulla <bstrazzull@hotmail.fr>
;;; Copyright © 2023 John Kehayias <john.kehayias@protonmail.com>
;;; Copyright © 2023 Ivan Vilata-i-Balaguer <ivan@selidor.net>
+;;; Copyright © 2024 Troy Figiel <troy@troyfigiel.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -201,6 +202,38 @@ scripting Launchpad via its the web service API.")
reusable library for parsing, manipulating, and generating URIs.")
(license license:lgpl3)))
+(define-public python-portend
+ (package
+ (name "python-portend")
+ (version "3.2.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "portend" version))
+ (sha256
+ (base32 "0wpvixicc3d0lack65554mvdrrckkn18p1xcgiv9v5cwq59a6l2j"))))
+ (build-system pyproject-build-system)
+ ;; Do not test pyproject.toml with python-pytest-checkdocs as it tries to
+ ;; download dependencies.
+ (arguments
+ '(#:test-flags '("-k" "not project")))
+ (propagated-inputs (list python-tempora))
+ ;; TODO: Add python-pytest-ruff to native-inputs once it has been packaged.
+ (native-inputs (list python-pytest
+ python-pytest-black
+ python-pytest-checkdocs
+ python-pytest-cov
+ python-pytest-enabler
+ python-pytest-mypy))
+ (home-page "https://github.com/jaraco/portend")
+ (synopsis "Monitor TCP ports for bound or unbound states")
+ (description
+ "@code{python-portend} can be used to monitor TCP ports for bound or
+unbound states. For example, waiting for a port to be occupied or freed
+within a set timeout. @code{python-portend} can also be used directly from
+the command line.")
+ (license license:expat)))
+
(define-public python-prawcore
(package
(name "python-prawcore")
@@ -2595,6 +2628,32 @@ your Web app.")
object to help create WSGI responses.")
(license license:expat)))
+(define-public python-zc-lockfile
+ (package
+ (name "python-zc-lockfile")
+ (version "3.0.post1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "zc.lockfile" version))
+ (sha256
+ (base32 "1v41irj7azaag3f14xyviv3l8mvap74v5p3q274k68vakrnyxcmd"))))
+ (build-system python-build-system)
+ (arguments
+ '(#:phases (modify-phases %standard-phases
+ (replace 'check
+ (lambda* (#:key tests? #:allow-other-keys)
+ (if tests?
+ (invoke "zope-testrunner" "--test-path=src")
+ (format #t "test suite not run~%")))))))
+ (native-inputs (list python-zope-testing python-zope-testrunner))
+ (home-page "https://github.com/zopefoundation/zc.lockfile")
+ (synopsis "Interprocess locks using lock files")
+ (description
+ "This package provides an implementation of interprocess locks using lock
+files. These locks can also be used to mediate access to other files.")
+ (license license:zpl2.1)))
+
(define-public python-zope-event
(package
(name "python-zope-event")
diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
index 2afce6c667..46a5e81cb4 100644
--- a/gnu/packages/python-xyz.scm
+++ b/gnu/packages/python-xyz.scm
@@ -145,7 +145,7 @@
;;; Copyright © c4droid <c4droid@foxmail.com>
;;; Copyright © 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2023 Attila Lendvai <attila@lendvai.name>
-;;; Copyright © 2023 Troy Figiel <troy@troyfigiel.com>
+;;; Copyright © 2023, 2024 Troy Figiel <troy@troyfigiel.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -2250,25 +2250,21 @@ library.")
(version "3.8.0")
(source
(origin
- (method url-fetch)
- (uri (pypi-uri "h5py" version))
- (sha256
- (base32
- "0pyr6z4h2xqbp49yx2i1401gl6yqh03h771zslwcy0201hpxiskg"))))
+ (method url-fetch)
+ (uri (pypi-uri "h5py" version))
+ (sha256
+ (base32 "0pyr6z4h2xqbp49yx2i1401gl6yqh03h771zslwcy0201hpxiskg"))))
(build-system python-build-system)
(arguments
- `(#:tests? #f ; no test target
- #:phases
- (modify-phases %standard-phases
- (add-after 'unpack 'fix-hdf5-paths
- (lambda* (#:key inputs #:allow-other-keys)
- (setenv "HDF5_DIR" (assoc-ref inputs "hdf5")))))))
- (propagated-inputs
- (list python-six python-numpy))
- (inputs
- (list hdf5-1.10))
- (native-inputs
- (list python-cython python-pkgconfig pkg-config))
+ '(#:phases (modify-phases %standard-phases
+ (add-after 'unpack 'fix-hdf5-paths
+ (lambda* (#:key inputs #:allow-other-keys)
+ (setenv "HDF5_DIR"
+ (assoc-ref inputs "hdf5")))))))
+ (propagated-inputs (list python-six python-numpy))
+ (inputs (list hdf5-1.10))
+ (native-inputs (list pkg-config python-cython python-ipython
+ python-pkgconfig python-pytest))
(home-page "https://www.h5py.org/")
(synopsis "Read and write HDF5 files from Python")
(description
@@ -2279,6 +2275,30 @@ access to HDF5 files, datasets and groups using established Python and NumPy
concepts.")
(license license:bsd-3)))
+(define-public python-hdf5storage
+ (package
+ (name "python-hdf5storage")
+ (version "0.1.19")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "hdf5storage" version))
+ (sha256
+ (base32 "11pgxsqap9l7jsf52649q9mpj8a0w6p9im929lpr9s26ynnnn6ks"))))
+ (build-system pyproject-build-system)
+ (propagated-inputs (list python-h5py python-numpy))
+ (native-inputs (list python-nose))
+ (home-page "https://github.com/frejanordsiek/hdf5storage")
+ (synopsis "Read and write Python data types from and to HDF5 files")
+ (description
+ "This Python package provides high-level utilities to read and write a
+variety of Python types from and to @acronym{HDF5, Hierarchical Data Format}
+formatted files. This package also provides support for MATLAB MAT v7.3
+formatted files, which are HDF5 files with a different extension and some
+extra metadata. Because HDF5 and MAT files might need to be read from
+untrusted sources, pickling is avoided in this package.")
+ (license license:bsd-2)))
+
(define-public python-hjson
;; Using commit from master branch as the PyPI version does not contain
;; the hjson/tests/ directory.
@@ -9236,6 +9256,105 @@ converting, and viewing many of the proprietary file formats used to store
experimental data and metadata at the Laboratory for Fluorescence Dynamics.")
(license license:bsd-3)))
+(define-public python-av
+ (package
+ (name "python-av")
+ (version "10.0.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "av" version))
+ (sha256
+ (base32 "01byqsjclkg65mhr6b4i2r2n4y7af9kdd2c35lxny27121b3vzca"))))
+ (build-system pyproject-build-system)
+ (arguments
+ (list
+ #:test-flags
+ #~(list
+ ;; Tests require outbound access to download data samples from
+ ;; http://fate.ffmpeg.org/fate-suite:
+ ;;
+ ;; E urllib.error.URLError: <urlopen error [Errno -3]
+ ;; Temporary failure in name resolution>
+ ;;
+ "--ignore=tests/test_doctests.py"
+ "--ignore=tests/test_timeout.py"
+ "-k"
+ (string-append
+ "not test_data"
+ " and not test_container_probing"
+ " and not test_stream_probing"
+ " and not test_transcode"
+ " and not test_codec_tag"
+ " and not test_parse"
+ " and not test_decode_audio_sample_count"
+ " and not test_decoded_motion_vectors"
+ " and not test_decoded_motion_vectors_no_flag"
+ " and not test_decoded_time_base"
+ " and not test_decoded_video_frame_count"
+ " and not test_encoding_aac"
+ " and not test_encoding_dnxhd"
+ " and not test_encoding_dvvideo"
+ " and not test_encoding_h264"
+ " and not test_encoding_mjpeg"
+ " and not test_encoding_mp2"
+ " and not test_encoding_mpeg1video"
+ " and not test_encoding_mpeg4"
+ " and not test_encoding_pcm_s24le"
+ " and not test_encoding_png"
+ " and not test_encoding_tiff"
+ " and not test_encoding_xvid"
+ " and not test_reading_from_buffer"
+ " and not test_reading_from_buffer_no_seek"
+ " and not test_reading_from_file"
+ " and not test_reading_from_pipe_readonly"
+ " and not test_reading_from_write_readonly"
+ " and not test_writing_to_custom_io_dash"
+ " and not test_writing_to_custom_io_image2"
+ " and not test_decode_half"
+ " and not test_seek_end"
+ " and not test_seek_float"
+ " and not test_seek_int64"
+ " and not test_seek_middle"
+ " and not test_seek_start"
+ " and not test_stream_seek"
+ " and not test_selection"
+ " and not test_stream_tuples"
+ " and not test_movtext"
+ " and not test_vobsub"
+ " and not test_roundtrip"
+ " and not test_stream_probing"))
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-before 'check 'build-extensions
+ (lambda _
+ (invoke "python" "setup.py" "build_ext" "--inplace"))))))
+ (native-inputs
+ (list pkg-config
+ python-cython
+ python-editorconfig
+ python-numpy
+ python-pillow
+ python-pytest))
+ (inputs
+ ;; XXX: Build is failing with FFmpeg 6.0, unresolved upstream.
+ ;; See https://github.com/PyAV-Org/PyAV/issues/1106
+ (list ffmpeg-5))
+ (home-page "https://github.com/PyAV-Org/PyAV")
+ (synopsis "Pythonic bindings for FFmpeg's libraries")
+ (description
+ "PyAV is a Python library that allows for direct and precise manipulation
+of media through containers, streams, packets, codecs, and frames. It provides
+access to the powerful FFmpeg libraries while managing the complex details as
+much as possible.
+PyAV also facilitates data transformation and integration with
+other packages such as Numpy and Pillow. However, working with media is a
+challenging task and PyAV cannot abstract it away or make all the best decisions
+for you. If you can accomplish your tasks with the ffmpeg command, PyAV may not
+be necessary. Nonetheless, PyAV is an essential tool when working with media
+that requires its specific capabilities.")
+ (license license:bsd-3)))
+
(define-public python-ffmpeg-python
;; The latest release (0.2.0) is old and its test suite crashs on Python 3.10.
(let ((commit "df129c7ba30aaa9ffffb81a48f53aa7253b0b4e6") (revision "0"))
@@ -10275,6 +10394,67 @@ finding unresolved symbols in Python code and their corresponding imports.")
class constructs.")
(license license:expat)))
+(define-public python-jaraco-collections
+ (package
+ (name "python-jaraco-collections")
+ (version "5.0.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "jaraco.collections" version))
+ (sha256
+ (base32 "0s7y3jr7c173k38pck1b17kxnvx2fl0qh9m9gdf64pr9kz8fi00n"))))
+ (build-system pyproject-build-system)
+ ;; Do not test pyproject.toml with python-pytest-checkdocs as it tries to
+ ;; download dependencies.
+ (arguments
+ '(#:test-flags '("-k" "not project")))
+ (propagated-inputs (list python-jaraco-text))
+ ;; TODO: Add python-pytest-ruff to native-inputs once it has been
+ ;; packaged.
+ (native-inputs (list python-pytest
+ python-pytest-black
+ python-pytest-checkdocs
+ python-pytest-cov
+ python-pytest-enabler
+ python-pytest-mypy))
+ (home-page "https://github.com/jaraco/jaraco.collections")
+ (synopsis "Provides various collection objects")
+ (description
+ "This package provides models and classes to supplement the
+standard library @code{collections} module. Examples include
+@itemize
+@item
+RangeMap: A mapping that accepts a range of values for keys.
+@item
+Projection: A subset over an existing mapping.
+@item
+KeyTransformingDict: Generalized mapping with keys transformed by a function.
+@item
+FoldedCaseKeyedDict: A dict whose string keys are case-insensitive.
+@item
+BijectiveMap: A map where keys map to values and values back to their keys.
+@item
+ItemsAsAttributes: A mapping mix-in exposing items as attributes.
+@item
+IdentityOverrideMap: A map whose keys map by default to themselves unless overridden.
+@item
+FrozenDict: A hashable, immutable map.
+@item
+Enumeration: An object whose keys are enumerated.
+@item
+Everything: A container that contains all things.
+@item
+Least, Greatest: Objects that are always less than or greater than any other.
+@item
+pop_all: Return all items from the mutable sequence and remove them from that sequence.
+@item
+DictStack: A stack of dicts, great for sharing scopes.
+@item
+WeightedLookup: A specialized RangeMap for selecting an item by weights.
+@end itemize")
+ (license license:expat)))
+
;;; Variant used to break a cycle with python-pytest-enabler.
(define-public python-jaraco-context-bootstrap
(hidden-package
@@ -10439,6 +10619,41 @@ releases.")
(description "This package provides testing support by jaraco.")
(license license:expat)))
+(define-public python-jaraco-text
+ (package
+ (name "python-jaraco-text")
+ (version "3.12.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "jaraco.text" version))
+ (sha256
+ (base32 "0b2rmx0sa61f75lkkr4nfaj3mkgmn3x9c1akpwarfbmksk42b7iq"))))
+ (build-system pyproject-build-system)
+ ;; Do not test pyproject.toml with python-pytest-checkdocs as it tries to
+ ;; download dependencies.
+ (arguments
+ '(#:test-flags '("-k" "not project")))
+ (propagated-inputs (list python-autocommand python-inflect
+ python-jaraco-context python-jaraco-functools
+ python-more-itertools))
+ ;; TODO: Add python-pytest-ruff to native-inputs once it has been
+ ;; packaged.
+ (native-inputs (list python-pytest
+ python-pytest-black
+ python-pytest-checkdocs
+ python-pytest-cov
+ python-pytest-enabler
+ python-pytest-mypy))
+ (home-page "https://github.com/jaraco/jaraco.text")
+ (synopsis "Provides various routines for text manipulation")
+ (description
+ "This package provides handy routines for dealing with text,
+such as wrapping, substitution, trimming, stripping, prefix and suffix
+removal, line continuation, indentation, comment processing, identifier
+processing, values parsing, case insensitive comparison, and more.")
+ (license license:expat)))
+
(define-public python-simplegeneric
(package
(name "python-simplegeneric")
@@ -30176,6 +30391,45 @@ heterogeneous and multi-platform clusters (including clusters running other
applications with variable CPU loads).")
(license license:bsd-3)))
+(define-public python-djitellopy
+ (package
+ (name "python-djitellopy")
+ (version "2.5.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "djitellopy" version))
+ (sha256
+ (base32 "1kc0syb4hpn7fay0rxpazmczag6jw3pncrrc6v762jj0afiwkrps"))))
+ (build-system pyproject-build-system)
+ (arguments
+ (list
+ #:tests? #f ;no test suite
+ #:phases
+ #~(modify-phases %standard-phases
+ ;; OpenCV does not ship metadata files for its Python library, which
+ ;; makes it invisible to the sanity_check script (see:
+ ;; https://github.com/opencv/opencv/issues/24810).
+ (delete 'sanity-check))))
+ (propagated-inputs
+ (list opencv ;for opencv-python
+ python-av
+ python-numpy
+ python-pillow))
+ (home-page "https://github.com/damiafuentes/DJITelloPy")
+ (synopsis
+ "DJI Tello drone video streaming, swarms and state packets library")
+ (description
+ "DJI Tello drone Python interface using the official Tello SDK and Tello
+EDU SDK. This library has the following features:
+@itemize
+@item Implementation of all tello commands
+@item Retrieve a video stream easily
+@item Receive and parse state packets
+@item Control a swarm of drones.
+@end itemize")
+ (license license:expat)))
+
(define-public python-djvulibre
(package
(name "python-djvulibre")
@@ -31490,6 +31744,30 @@ graph can be output for rendering by GraphViz or yEd.")
function implementations based on the types of the arguments.")
(license license:bsd-3)))
+(define-public python-multimethod
+ (package
+ (name "python-multimethod")
+ (version "1.10")
+ (source
+ (origin
+ ;; No tests in the PyPI tarball.
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/coady/multimethod")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "07xv92q7f4bkp6dzkqvcv0zxr11729qdak4s3ldmbhdwgsf44g5h"))))
+ (build-system pyproject-build-system)
+ (native-inputs (list python-pytest))
+ (home-page "https://github.com/coady/multimethod")
+ (synopsis "Python support for multiple argument dispatching")
+ (description
+ "This package provides a decorator for adding multiple argument
+dispatching to functions. The decorator creates a multimethod object as
+needed and registers the function with its annotations.")
+ (license license:asl2.0)))
+
(define-public python-logical-unification
(package
(name "python-logical-unification")
diff --git a/gnu/packages/serialization.scm b/gnu/packages/serialization.scm
index e836b4f8b3..3ff3b57cb2 100644
--- a/gnu/packages/serialization.scm
+++ b/gnu/packages/serialization.scm
@@ -15,6 +15,7 @@
;;; Copyright © 2023 Alexey Abramov <levenson@mmer.org>
;;; Copyright © 2023 Sharlatan Hellseher <sharlatanus@gmail.com>
;;; Copyright © 2023 Vinicius Monego <monego@posteo.net>
+;;; Copyright © 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -219,8 +220,60 @@ such as compact binary encodings, XML, or JSON.")
(list doxygen gcc-10
(package-source cereal)))))
+(define-public msgpack-c
+ (package
+ (name "msgpack-c")
+ (version "6.0.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri
+ (string-append
+ "https://github.com/msgpack/msgpack-c/releases/download/"
+ "c-" version "/" name "-" version ".tar.gz"))
+ (sha256
+ (base32 "1fmf08babfsjq5qkgw034wk2nw6mayxp1qlkm7h55p2jqvigam1n"))
+ (snippet
+ '(let ((p (open-file "msgpack-c.pc.in" "a")))
+ (display "Requires: zlib\n" p)
+ (close-output-port p)))))
+ (build-system cmake-build-system)
+ (arguments (list #:configure-flags #~(list "-DMSGPACK_BUILD_TESTS=ON")))
+ (native-inputs (list googletest))
+ (propagated-inputs (list zlib)) ;zbuffer.h includes zlib.h
+ (home-page "https://www.msgpack.org")
+ (synopsis "Binary serialization library")
+ (description "Msgpack is a library for C that implements binary
+serialization.")
+ (license license:boost1.0)))
+
+(define-public msgpack-cxx
+ (package
+ (inherit msgpack-c)
+ (name "msgpack-cxx")
+ (version "6.1.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri
+ (string-append
+ "https://github.com/msgpack/msgpack-c/releases/download/"
+ "cpp-" version "/" name "-" version ".tar.gz"))
+ (sha256
+ (base32 "1rrrf3nskcv994z3pbq6a5z2021piz118rccmm1y7zlf7klygv93"))))
+ (build-system cmake-build-system)
+ (propagated-inputs (list boost zlib)) ;included in headers
+ (description "Msgpack is a library for C++ that implements binary
+serialization.")))
+
+;;; The msgpack package was split into msgpack-c and msgpack-cxx starting from
+;;; version 4.0.0.
(define-public msgpack
+ (deprecated-package "msgpack" msgpack-c))
+
+(define-public msgpack-3
(package
+ (inherit msgpack-c)
(name "msgpack")
(version "3.3.0")
(source
@@ -234,23 +287,13 @@ such as compact binary encodings, XML, or JSON.")
'(let ((p (open-file "msgpack.pc.in" "a")))
(display
(string-append "Requires: " "zlib" "\n") p)
- (close-output-port p)
- #t))
+ (close-output-port p)))
(sha256
(base32 "0yzhq50ijvwrfkr97knhvn54lj3f4hr3zy39yq8wpf6xll94s4bf"))))
- (build-system cmake-build-system)
- (native-inputs
- (list googletest-1.8 pkg-config))
- (propagated-inputs
- (list zlib)) ;; Msgpack installs two headers (zbuffer.h,
- ;; zbuffer.hpp) which #include <zlib.h>. However, 'guix gc --references'
- ;; does not detect a store reference to zlib since these headers are not
- ;; compiled.
- (home-page "https://www.msgpack.org")
- (synopsis "Binary serialization library")
+ (native-inputs (list googletest-1.8))
(description "Msgpack is a library for C/C++ that implements binary
-serialization.")
- (license license:boost1.0)))
+serialization. This is the legacy version that predates the split into C and
+C++ specific packages.")))
(define-public libmpack
(package
diff --git a/gnu/packages/shellutils.scm b/gnu/packages/shellutils.scm
index 9993c0b807..00352dc327 100644
--- a/gnu/packages/shellutils.scm
+++ b/gnu/packages/shellutils.scm
@@ -331,7 +331,7 @@ particularly in catching syntax errors.")
(define-public grml-zsh-config
(package
(name "grml-zsh-config")
- (version "0.19.5")
+ (version "0.19.6")
(source (origin
(method url-fetch)
(uri (string-append
@@ -339,7 +339,7 @@ particularly in catching syntax errors.")
version ".tar.gz"))
(sha256
(base32
- "0ifw490z3v9ljccbmm04adz39fj2dmx8mjgayxqj0a9ln90yfdc4"))))
+ "1k1m2fbmvw73qy9mc6k2ygjg6zz8h7nn3d9pvj6jbjadnx4pz770"))))
(build-system copy-build-system)
(arguments
(list
diff --git a/gnu/packages/statistics.scm b/gnu/packages/statistics.scm
index c2cf68fca8..906ec456b6 100644
--- a/gnu/packages/statistics.scm
+++ b/gnu/packages/statistics.scm
@@ -18,6 +18,7 @@
;;; Copyright © 2021 Frank Pursel <frank.pursel@gmail.com>
;;; Copyright © 2022 Simon Tournier <zimon.toutoune@gmail.com>
;;; Copyright © 2023 gemmaro <gemmaro.dev@gmail.com>
+;;; Copyright © 2023 Troy Figiel <troy@troyfigiel.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -6757,11 +6758,9 @@ Java package that provides routines for various statistical distributions.")
(license license:gpl2+)))
(define-public emacs-ess
- ;; Latest release is old. This is not the latest commit either due to bug
- ;; reported here: <https://github.com/emacs-ess/ESS/issues/987>.
- (let ((commit "24da603184ce39246611dd5b8602e769d7ebd5bf")
+ (let ((commit "3691ecc642eab5d016887e42699648e0eeeef566")
(version "18.10.2")
- (revision "0"))
+ (revision "1"))
(package
(name "emacs-ess")
(version (git-version version revision commit))
@@ -6772,60 +6771,96 @@ Java package that provides routines for various statistical distributions.")
(url "https://github.com/emacs-ess/ESS")
(commit commit)))
(sha256
- (base32 "0j98lv07nzwzd54d4dgcfz01wy5gj48m0mnirxzh5r45ik2myh1r"))
+ (base32 "19p8djsbgvahpsx1w8i6h3qvpbdr4isjwm3wi82yk2648ri0qsq1"))
(file-name (git-file-name name version))
(modules '((guix build utils)))
(snippet
- '(begin
- ;; Stop ESS from trying to bundle an external julia-mode.el.
- (substitute* "lisp/Makefile"
- ((" \\$\\(JULIAS)") "")
- (("\ttest.*julia-mode.*\\.el") ""))
- ;; Only build docs in info format.
- (substitute* "doc/Makefile"
- (("all : info text")
- "all : info")
- (("install: install-info install-other-docs")
- "install: install-info"))
- ;; Stop install-info from trying to update the info directory.
- (substitute* "doc/Makefile"
- ((".*/dir.*") ""))
- ;; Fix r-help-mode test.
- (substitute* "test/ess-test-r.el"
- (("\\(equal ess-help-object \"plot.default\")") "t"))
- ;; Avoid generating ess-autoloads.el twice.
- (substitute* "Makefile"
- (("all: lisp doc etc autoloads")
- "all: lisp doc etc"))
- ;; Install to correct directories.
- (substitute* "Makefile"
- (("mkdir -p \\$\\(ESSDESTDIR)")
- "$(MAKE) -C lisp install; $(MAKE) -C doc install")
- (("\\$\\(INSTALL) -R \\./\\* \\$\\(ESSDESTDIR)/")
- "$(MAKE) -C etc install"))
- #t))
- (patches
- (search-patches "emacs-ess-fix-obsolete-function-alias.patch"))))
+ #~(begin
+ ;; Stop ESS from trying to bundle an external julia-mode.el.
+ (substitute* "lisp/Makefile"
+ ((" \\$\\(JULIAS)") "")
+ (("\ttest.*julia-mode.*\\.el") ""))
+ ;; Only build docs in info format.
+ (substitute* "doc/Makefile"
+ (("all : info text")
+ "all : info")
+ (("install: install-info install-other-docs")
+ "install: install-info"))
+ ;; Stop install-info from trying to update the info directory.
+ (substitute* "doc/Makefile"
+ ((".*/dir.*") ""))
+ ;; Fix r-help-mode test.
+ (substitute* "test/ess-test-r.el"
+ (("\\(equal ess-help-object \"plot.default\")") "t"))
+ ;; Avoid generating ess-autoloads.el twice.
+ (substitute* "Makefile"
+ (("all: lisp doc etc autoloads")
+ "all: lisp doc etc"))
+ ;; Install to correct directories.
+ (substitute* "Makefile"
+ (("mkdir -p \\$\\(ESSDESTDIR)")
+ "$(MAKE) -C lisp install; $(MAKE) -C doc install")
+ (("\\$\\(INSTALL) -R \\./\\* \\$\\(ESSDESTDIR)/")
+ "$(MAKE) -C etc install"))))))
(build-system gnu-build-system)
(arguments
(let ((base-directory "/share/emacs/site-lisp"))
- `(#:make-flags (list (string-append "PREFIX=" %output)
- (string-append "ETCDIR=" %output
- ,base-directory "/etc")
- (string-append "LISPDIR=" %output
- ,base-directory)
- (string-append "INFODIR=" %output
- "/share/info"))
- #:phases
- (modify-phases %standard-phases
- (delete 'configure)
- (replace 'check
- (lambda _ (invoke "make" "test")))))))
+ (list
+ #:modules '((guix build gnu-build-system)
+ (guix build utils)
+ (guix build emacs-utils))
+ #:imported-modules `(,@%gnu-build-system-modules
+ (guix build emacs-build-system)
+ (guix build emacs-utils))
+ #:make-flags
+ #~(list (string-append "PREFIX=" #$output)
+ (string-append "ETCDIR=" #$output #$base-directory "/etc")
+ (string-append "LISPDIR=" #$output #$base-directory)
+ (string-append "INFODIR=" #$output "/share/info"))
+ #:phases
+ #~(modify-phases %standard-phases
+ (delete 'configure)
+ (add-before 'check 'skip-failing-tests
+ ;; XXX: Skip 10 failing tests (out of 187).
+ (lambda _
+ (let-syntax
+ ((disable-tests
+ (syntax-rules ()
+ ((_ file ())
+ (syntax-error "test names list must not be empty"))
+ ((_ file (test-name ...))
+ (substitute* file
+ (((string-append "^\\(ert-deftest " test-name ".*")
+ all)
+ (string-append all "(skip-unless nil)\n"))
+ ...)))))
+ (disable-tests (list "test/ess-test-inf.el"
+ "test/ess-test-r.el")
+ ("ess--derive-connection-path"
+ "ess-eval-line-test"
+ "ess-eval-region-test"
+ "ess-mock-remote-process"
+ "ess-r-load-ESSR-github-fetch-no"
+ "ess-r-load-ESSR-github-fetch-yes"
+ "ess-set-working-directory-test"
+ "ess-test-r-startup-directory")))
+ ;; The two tests below use a different syntax.
+ (emacs-batch-edit-file "test/ess-test-r-eval.el"
+ '(progn
+ (mapc (lambda (test)
+ (goto-char (point-min))
+ (search-forward (format "etest-deftest %s " test))
+ (beginning-of-line)
+ (kill-sexp))
+ '("ess-r-eval-ns-env-roxy-tracebug-test"
+ "ess-r-eval-sink-freeze-test"))
+ (basic-save-buffer)))))
+ (replace 'check
+ (lambda _ (invoke "make" "test")))))))
(native-inputs
(list perl r-roxygen2 texinfo))
(inputs
- `(("emacs" ,emacs-minimal)
- ("r-minimal" ,r-minimal)))
+ (list emacs-minimal r-minimal))
(propagated-inputs
(list emacs-julia-mode))
(home-page "https://ess.r-project.org/")
@@ -6885,6 +6920,50 @@ files, including Rmarkdown files.")
popular stats packages like SAS, Stata and SPSS.")
(license license:expat)))
+(define-public python-pyreadstat
+ (package
+ (name "python-pyreadstat")
+ (version "1.2.4")
+ ;; No tests in the PyPI tarball.
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/Roche/pyreadstat")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "0zysrzixvqw2lwwykxqg5yj8a0zyv5s2bmk22x30f4rj2hgvq1pv"))
+ (patches (search-patches "python-pyreadstat-link-libiconv.patch"))))
+ (arguments
+ '(#:phases (modify-phases %standard-phases
+ (add-before 'check 'change-home-dir
+ (lambda _
+ ;; test_sav_expand and test_sav_write_basic_expanduser need a
+ ;; home directory with write permissions.
+ (setenv "HOME" "/tmp")))
+ (replace 'check
+ (lambda* (#:key tests? #:allow-other-keys)
+ (when tests?
+ ;; The source also contains tests/test_version.py
+ ;; which checks the version in __init__.py against the
+ ;; one in setup.py. Since this requires texlive
+ ;; dependencies to run and is also not mentioned in
+ ;; how_to_test.md, this test is skipped.
+ (invoke "python" "tests/test_basic.py")))))))
+ (build-system python-build-system)
+ (propagated-inputs (list python-pandas))
+ (inputs (list libiconv zlib))
+ (native-inputs (list python-cython-3))
+ (home-page "https://github.com/Roche/pyreadstat")
+ (synopsis
+ "Read and write SAS, SPSS and Stata files into/from Pandas DataFrames")
+ (description
+ "This Python package can be used to read and write SAS, SPSS and Stata
+files into/from Pandas DataFrames. It is a wrapper around the C library
+@code{readstat}.")
+ (license license:asl2.0)))
+
(define-public r-quantpsyc
(package
(name "r-quantpsyc")
diff --git a/gnu/packages/swig.scm b/gnu/packages/swig.scm
index 3f38cd9f9f..7025d05038 100644
--- a/gnu/packages/swig.scm
+++ b/gnu/packages/swig.scm
@@ -79,7 +79,7 @@ you tailor the wrapping process to suit your application.")
(package
(inherit swig)
(name "swig")
- (version "4.1.1")
+ (version "4.2.0")
(source (origin
(method url-fetch)
(uri (string-append "mirror://sourceforge/" name "/" name "/"
@@ -87,5 +87,5 @@ you tailor the wrapping process to suit your application.")
name "-" version ".tar.gz"))
(sha256
(base32
- "16xc767gf5ip40jh698wbdrxrghli5v2c966bkdmrmpwv378mw1a"))))
+ "15wwh9215rdkflpr85r7zxr2nmrib03jr4bvh5i0f9lyb3bs4716"))))
(inputs (list pcre2))))
diff --git a/gnu/packages/tbb.scm b/gnu/packages/tbb.scm
index ec630a029f..da3ea74fb6 100644
--- a/gnu/packages/tbb.scm
+++ b/gnu/packages/tbb.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2015, 2016, 2022 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015, 2016, 2022, 2024 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2016 Nikita <nikita@n0.is>
;;; Copyright © 2019 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
@@ -51,31 +51,31 @@
`(#:configure-flags
'(,@(if (or (target-riscv64?)
(target-ppc32?))
- '("-DTBB_TEST_LINK_FLAGS=-latomic")
- `())
+ '("-DTBB_TEST_LINK_FLAGS=-latomic")
+ `())
,@(if (or (target-arm32?)
(target-ppc32?))
- '("-DTBB_TEST_COMPILE_FLAGS=-DTBB_TEST_LOW_WORKLOAD")
- `())
- "-DTBB_STRICT=OFF") ;; Don't fail on warnings
+ '("-DTBB_TEST_COMPILE_FLAGS=-DTBB_TEST_LOW_WORKLOAD")
+ `())
+ "-DTBB_STRICT=OFF") ;; Don't fail on warnings
#:phases
(modify-phases %standard-phases
,@(cond
- ((target-arm32?)
- `((add-after 'unpack 'adjust-test-suite
- (lambda _
- (substitute* "test/CMakeLists.txt"
- ;; Bus error, skipped on mips.
- ((".*test_malloc_pools.*") ""))))))
- ((target-ppc32?)
- `((add-after 'unpack 'adjust-test-suite
- (lambda _
- (substitute* "test/CMakeLists.txt"
- ;; These tests hang forever.
- ((".*test_function_node.*") "")
- ((".*test_multifunction_node.*") "")
- ((".*test_async_node.*") ""))))))
- (else '())))))
+ ((target-arm32?)
+ `((add-after 'unpack 'adjust-test-suite
+ (lambda _
+ (substitute* "test/CMakeLists.txt"
+ ;; Bus error, skipped on mips.
+ ((".*test_malloc_pools.*") ""))))))
+ ((target-ppc32?)
+ `((add-after 'unpack 'adjust-test-suite
+ (lambda _
+ (substitute* "test/CMakeLists.txt"
+ ;; These tests hang forever.
+ ((".*test_function_node.*") "")
+ ((".*test_multifunction_node.*") "")
+ ((".*test_async_node.*") ""))))))
+ (else '())))))
(home-page "https://www.threadingbuildingblocks.org")
(synopsis "C++ library for parallel programming")
(description
@@ -101,7 +101,9 @@ tasks, synchronization primitives, atomic operations, and more.")
(lambda _
(substitute* "python/CMakeLists.txt"
(("\\$\\{PYTHON_BUILD_WORK_DIR\\}/build")
- #$output))
+ #$output)
+ (("install --prefix.*-f" m)
+ (string-append m " --root=/")))
(substitute* "python/setup.py"
(("extra_link_args=tbb_flag,")
(string-append "extra_link_args=['-Wl,-rpath="
diff --git a/gnu/packages/telephony.scm b/gnu/packages/telephony.scm
index 3092c39b24..41e83384ec 100644
--- a/gnu/packages/telephony.scm
+++ b/gnu/packages/telephony.scm
@@ -17,7 +17,7 @@
;;; Copyright © 2020 Brett Gilio <brettg@gnu.org>
;;; Copyright © 2020, 2022 Michael Rohleder <mike@rohleder.de>
;;; Copyright © 2020 Raghav Gururajan <raghavgururajan@disroot.org>
-;;; Copyright © 2020, 2021, 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2020, 2021, 2022, 2023, 2024 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
;;; Copyright © 2021 LibreMiami <packaging-guix@libremiami.org>
;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev>
@@ -855,6 +855,75 @@ your calls and messages.")
Initiation Protocol (SIP) and a multimedia framework.")
(license license:gpl2+)))
+(define-public pjproject-jami
+ (let ((commit "d044ad6c5b4221648c555da16196804e4721299c")
+ (revision "0"))
+ (package
+ (inherit pjproject)
+ (name "pjproject-jami")
+ ;; The version is taken from
+ ;; <https://raw.githubusercontent.com/savoirfairelinux/pjproject/master/version.mak>.
+ (version (git-version "2.13.1" revision commit))
+ (source (origin
+ (inherit (package-source pjproject))
+ ;; The Jami development team regularly issues patches to
+ ;; pjproject to extend the its functionality and fix bugs;
+ ;; they are submitted for inclusion upstream but larger
+ ;; patches take time to be reviewed and merged, hence this
+ ;; forked repository.
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/savoirfairelinux/pjproject")
+ (commit commit)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0z4d7wdpa2mlaygb283k0j8n3l6q68gn0xqd62b5ngqvkhlaf775"))))
+ (arguments
+ (substitute-keyword-arguments (package-arguments pjproject)
+ ((#:configure-flags _ ''())
+ ;; This package is tailored for DhtNet; see how it is built for its
+ ;; CI in
+ ;; <https://git.jami.net/savoirfairelinux/dhtnet/-/raw/master/Dockerfile>.
+ #~(list
+ ;; Some flags preserved flags from parent package.
+ "--with-external-srtp"
+ #$@(if (string-contains (or (%current-system)
+ (%current-target-system)) "linux")
+ #~("--enable-epoll")
+ #~())
+ "--with-gnutls" ;disable OpenSSL checks
+ ;; -DNDEBUG is set to prevent pjproject from raising
+ ;; assertions that aren't critical, crashing
+ ;; applications as the result.
+ "CFLAGS=-DNDEBUG"
+ ;; Specify a runpath reference to itself, which is missing and
+ ;; causes the validate-runpath phase to fail.
+ (string-append "LDFLAGS=-Wl,-rpath=" #$output "/lib")
+ "--enable-shared"
+ "--disable-libyuv" ;TODO: add missing package
+
+ ;; These flags are specific to DhtNet.
+ "--disable-sound"
+ "--enable-video"
+ "--enable-ext-sound"
+ "--disable-speex-aec"
+ "--disable-g711-codec"
+ "--disable-l16-codec"
+ "--disable-gsm-codec"
+ "--disable-g722-codec"
+ "--disable-g7221-codec"
+ "--disable-speex-codec"
+ "--disable-ilbc-codec"
+ "--disable-opencore-amr"
+ "--disable-silk"
+ "--disable-sdl"
+ "--disable-ffmpeg"
+ "--disable-v4l2"
+ "--disable-openh264"
+ "--disable-resample"
+ "--disable-libwebrtc")))))))
+
(define-public libtgvoip
(package
(name "libtgvoip")
diff --git a/gnu/packages/terminals.scm b/gnu/packages/terminals.scm
index 53f67a80e5..f609de8eff 100644
--- a/gnu/packages/terminals.scm
+++ b/gnu/packages/terminals.scm
@@ -1289,10 +1289,8 @@ that can be displayed terminal.")
(base32
"0x5c31yq7ansmiy20a0qf59wagba9v3pq97mlkxrqxn4n1gcc6vi"))))
(build-system gnu-build-system)
- (inputs
- (list libevent libssh msgpack ncurses))
- (native-inputs
- (list autoconf automake pkg-config))
+ (inputs (list libevent libssh msgpack-3 ncurses))
+ (native-inputs (list autoconf automake pkg-config))
(home-page "https://tmate.io/")
(synopsis "Terminal sharing application")
(description "tmate is a terminal sharing application that allows you to
diff --git a/gnu/packages/textutils.scm b/gnu/packages/textutils.scm
index ea182b1925..494e6b5ef5 100644
--- a/gnu/packages/textutils.scm
+++ b/gnu/packages/textutils.scm
@@ -996,13 +996,13 @@ and Cython.")
(define-public txt2tags
(package
(name "txt2tags")
- (version "3.7")
+ (version "3.9")
(source (origin
(method url-fetch)
(uri (pypi-uri "txt2tags" version))
(sha256
(base32
- "12hpnvdy7dgarq6ini9jp7dp2zcmvpax04zbl3jb84kd423r75i7"))))
+ "0ik7gpr3gymgxnj0p86k8768kyxncbncv93zq67sbak3dbdl8hky"))))
(build-system python-build-system)
(native-inputs (list python-tox))
(home-page "https://txt2tags.org")
diff --git a/gnu/packages/tls.scm b/gnu/packages/tls.scm
index 75e6370c72..806a761d9b 100644
--- a/gnu/packages/tls.scm
+++ b/gnu/packages/tls.scm
@@ -5,7 +5,7 @@
;;; Copyright © 2013, 2015 Andreas Enge <andreas@enge.fr>
;;; Copyright © 2015 David Thompson <davet@gnu.org>
;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021 Leo Famulari <leo@famulari.name>
-;;; Copyright © 2016, 2017, 2019, 2021-2023 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2019, 2021-2024 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2016, 2017, 2018 Nikita <nikita@n0.is>
;;; Copyright © 2016 Hartmut Goebel <h.goebel@crazy-compilers.com>
;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
@@ -15,7 +15,7 @@
;;; Copyright © 2018 Clément Lassieur <clement@lassieur.org>
;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
;;; Copyright © 2020, 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
-;;; Copyright © 2020, 2021, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2020, 2021, 2023, 2024 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 2021 Solene Rapenne <solene@perso.pw>
;;; Copyright © 2021 Brice Waegeneire <brice@waegenei.re>
;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
@@ -200,7 +200,7 @@ living in the same process.")
(package
(name "gnutls")
(version "3.7.7")
- (replacement gnutls-3.8.1)
+ (replacement gnutls-3.8.2)
(source (origin
(method url-fetch)
;; Note: Releases are no longer on ftp.gnu.org since the
@@ -305,11 +305,11 @@ required structures.")
(define-deprecated/public-alias gnutls-latest gnutls)
;; Replacement for gnutls@3.7.7 to address GNUTLS-SA-2020-07-14 /
-;; CVE-2023-0361
-(define-public gnutls-3.8.1
+;; CVE-2023-0361 and GNUTLS-SA-2023-10-23 / CVE-2023-5981.
+(define gnutls-3.8.2
(package
(inherit gnutls)
- (version "3.8.1")
+ (version "3.8.2")
(source (origin
(method url-fetch)
(uri (string-append "mirror://gnupg/gnutls/v"
@@ -318,20 +318,7 @@ required structures.")
(patches (search-patches "gnutls-skip-trust-store-test.patch"))
(sha256
(base32
- "1742jiigwsfhx7nj5rz7dwqr8d46npsph6b68j7siar0mqarx2xs"))))
- (arguments
- (if (target-hurd?)
- ;; Fix reference to undefined 'PATH_MAX'. This is fixed in GnuTLS
- ;; commit 3b6ec1e01de4e96d36276dfe34ee9e183f285264.
- (substitute-keyword-arguments (package-arguments gnutls)
- ((#:phases phases #~%standard-phases)
- #~(modify-phases #$phases
- (add-after 'unpack 'set-path-max
- (lambda _
- (substitute* "lib/pathbuf.h"
- (("^#define GNUTLS_PATH_MAX PATH_MAX")
- "#define GNUTLS_PATH_MAX 8192\n")))))))
- (package-arguments gnutls)))))
+ "0xzgmp1ck5ifvdki4jg29r278w2p1m3a0qz38g99v6zsdw0yarg7"))))))
(define-public gnutls/dane
;; GnuTLS with build libgnutls-dane, implementing DNS-based
@@ -429,6 +416,8 @@ OpenSSL for TARGET."
(cond
((target-x86-32? target)
"x86")
+ ((target-x32? target)
+ "x32")
((target-x86-64? target)
"x86_64")
((target-mips64el? target)
diff --git a/gnu/packages/valgrind.scm b/gnu/packages/valgrind.scm
index 06622548a5..b50dabf9ca 100644
--- a/gnu/packages/valgrind.scm
+++ b/gnu/packages/valgrind.scm
@@ -39,7 +39,7 @@
(define-public valgrind
(package
(name "valgrind")
- (version "3.20.0")
+ (version "3.22.0")
(source (origin
(method url-fetch)
(uri (list (string-append "https://sourceware.org/pub/valgrind"
@@ -48,7 +48,7 @@
"/valgrind-" version ".tar.bz2")))
(sha256
(base32
- "1ipkp6yi202pml2r0qwflysmq86dkqd8iyi1y51d6y70vcqw0dl5"))))
+ "0k1ddnzxfpbng2sp5r31jjxsmp35g977rx6a8jcp4prcvmddn4f8"))))
(build-system gnu-build-system)
(outputs '("doc" ;16 MB
"out"))
diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm
index 40d7a00dae..a7a701629f 100644
--- a/gnu/packages/version-control.scm
+++ b/gnu/packages/version-control.scm
@@ -33,7 +33,7 @@
;;; Copyright © 2020 Tanguy Le Carrour <tanguy@bioneland.org>
;;; Copyright © 2020, 2021, 2022 Michael Rohleder <mike@rohleder.de>
;;; Copyright © 2021 Greg Hogan <code@greghogan.com>
-;;; Copyright © 2021, 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021, 2022, 2023, 2024 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 2021 Chris Marusich <cmmarusich@gmail.com>
;;; Copyright © 2021 Léo Le Bouter <lle-bout@zaclys.net>
;;; Copyright © 2021 LibreMiami <packaging-guix@libremiami.org>
@@ -823,6 +823,52 @@ on @command{git}, and use any regular Git hosting service.")
to GitHub contributions calendar.")
(license license:expat)))
+(define-public xdiff
+ (let ((revision "0")
+ (commit "a137bc7ee6c76618ed1737c257548eaa10ac0089"))
+ (package
+ (name "xdiff")
+ ;; The base version is taken from the CMakeLists.txt file.
+ (version (git-version "0.1" revision commit))
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/libgit2/xdiff")
+ (commit commit)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "1rxzpag2pih64qlgq40xg1z6mz0bzvps4baxw7bmykyhjhc2gx75"))))
+ (build-system cmake-build-system)
+ (arguments
+ (list
+ #:modules '((guix build cmake-build-system)
+ (guix build utils)
+ (srfi srfi-26))
+ #:tests? #f ;no test suite
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'unpack 'create-shared-library
+ (lambda _
+ (substitute* "CMakeLists.txt"
+ (("add_library\\(xdiff STATIC")
+ "add_library(xdiff SHARED"))))
+ (replace 'install ;no install target
+ (lambda _
+ (with-directory-excursion "../source"
+ (for-each (cute install-file <>
+ (string-append #$output "/include"))
+ (list "xdiff.h"
+ "git-xdiff.h"))) ;included by xdiff.h
+ (install-file "libxdiff.so"
+ (string-append #$output "/lib")))))))
+ (home-page "https://github.com/libgit2/xdiff")
+ (synopsis "File differential library used by git")
+ (description "@code{xdiff} is the file differential library used by git,
+which has been extracted into a standalone library for compatibility with
+other git-like projects such as @code{libgit2}.")
+ (license license:lgpl2.1+))))
+
(define-public libgit2
(package
(name "libgit2")
@@ -1072,115 +1118,118 @@ collaboration using typical untrusted file hosts or services.")
(license license:gpl3+)))
(define-public cgit
- (package
- (name "cgit")
- ;; Update the ‘git-source’ input as well.
- (version "1.2.3")
- (source (origin
- (method url-fetch)
- (uri (string-append
- "https://git.zx2c4.com/cgit/snapshot/cgit-"
- version ".tar.xz"))
- (sha256
- (base32
- "193d990ym10qlslk0p8mjwp2j6rhqa7fq0y1iff65lvbyv914pss"))))
- (build-system gnu-build-system)
- (arguments
- (list
- #:tests? #f ; XXX: fail to build the in-source git.
- #:test-target "test"
- #:make-flags #~(list (string-append "CC=" #$(cc-for-target))
- "SHELL_PATH=sh")
- #:phases
- #~(modify-phases %standard-phases
- (add-after 'unpack 'unpack-git
- (lambda* (#:key inputs #:allow-other-keys)
- ;; Unpack the source of git into the 'git' directory.
- (invoke "tar" "--strip-components=1" "-C" "git" "-xf"
- (assoc-ref inputs "git-source"))))
- (add-after 'unpack 'patch-absolute-file-names
- (lambda* (#:key inputs #:allow-other-keys)
- (define (quoted-file-name input path)
- (string-append "\"" input path "\""))
- (substitute* "ui-snapshot.c"
- (("\"gzip\"")
- (quoted-file-name (assoc-ref inputs "gzip") "/bin/gzip"))
- (("\"bzip2\"")
- (quoted-file-name (assoc-ref inputs "bzip2") "/bin/bzip2"))
- (("\"xz\"")
- (quoted-file-name (assoc-ref inputs "xz") "/bin/xz")))
-
- (substitute* "filters/about-formatting.sh"
- (("$\\(dirname $0\\)") (string-append (assoc-ref outputs "out")
- "/lib/cgit/filters"))
- (("\\| tr") (string-append "| " (which "tr"))))
-
- (substitute* "filters/html-converters/txt2html"
- (("sed") (which "sed")))
-
- (substitute* "filters/html-converters/man2html"
- (("groff") (which "groff")))
-
- (substitute* "filters/html-converters/rst2html"
- (("rst2html\\.py") (which "rst2html.py")))))
- (delete 'configure) ; no configure script
- (add-after 'build 'build-man
- (lambda* (#:key make-flags #:allow-other-keys)
- (apply invoke "make" "doc-man" make-flags)))
- (replace 'install
- (lambda* (#:key make-flags outputs #:allow-other-keys)
- (let ((out (assoc-ref outputs "out")))
- (apply invoke
- "make" "install" "install-man"
- (string-append "prefix=" out)
- (string-append "CGIT_SCRIPT_PATH=" out "/share/cgit")
- make-flags)
- ;; Move the platform-dependent 'cgit.cgi' into lib to get it
- ;; stripped.
- (rename-file (string-append out "/share/cgit/cgit.cgi")
- (string-append out "/lib/cgit/cgit.cgi")))))
- (add-after 'install 'wrap-python-scripts
- (lambda* (#:key outputs #:allow-other-keys)
- (for-each
- (lambda (file)
- (wrap-program (string-append (assoc-ref outputs "out")
- "/lib/cgit/filters/" file)
- `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH")))))
- '("syntax-highlighting.py"
- "html-converters/md2html")))))))
- (native-inputs
- ;; For building manpage.
- (list asciidoc))
- (inputs
- `(;; Building cgit requires a Git source tree.
- ("git-source"
- ,(origin
- (method url-fetch)
- ;; cgit is tightly bound to git. Use GIT_VER from the Makefile,
- ;; which may not match the current (package-version git).
- (uri "mirror://kernel.org/software/scm/git/git-2.25.4.tar.xz")
- (sha256
- (base32 "11am6s46wmn1yll5614smjhzlghbqq6gysgcs64igjr9y5wzpdxq"))))
- ("bash-minimal" ,bash-minimal)
- ("openssl" ,openssl)
- ("python" ,python)
- ("python-docutils" ,python-docutils)
- ("python-markdown" ,python-markdown)
- ("python-pygments" ,python-pygments)
- ("zlib" ,zlib)
- ;; bzip2, groff, gzip and xz are inputs (not native inputs)
- ;; since they are actually substituted into cgit source and
- ;; referenced by the built package output.
- ("bzip2" ,bzip2)
- ("groff" ,groff)
- ("gzip" ,gzip)
- ("xz" ,xz)))
- (home-page "https://git.zx2c4.com/cgit/")
- (synopsis "Web frontend for git repositories")
- (description
- "CGit is an attempt to create a fast web interface for the Git SCM, using
+ (let ((commit "793c420897e18eb3474c751d54cf4e0983f85433")
+ (rev "1"))
+ (package
+ (name "cgit")
+ ;; Update the ‘git-source’ input as well.
+ (version (git-version "1.2.3" rev commit))
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://git.zx2c4.com/cgit")
+ (commit commit)))
+ (sha256
+ (base32
+ "1mhrm14wpqvralf9j33ih5ai6naiq3g2jg2z91gnw9dhh8f9ilwz"))
+ (file-name (git-file-name name version))))
+ (build-system gnu-build-system)
+ (arguments
+ (list
+ #:tests? #f ; XXX: fail to build the in-source git.
+ #:test-target "test"
+ #:make-flags #~(list (string-append "CC=" #$(cc-for-target))
+ "SHELL_PATH=sh")
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'unpack 'unpack-git
+ (lambda* (#:key inputs #:allow-other-keys)
+ ;; Unpack the source of git into the 'git' directory.
+ (invoke "tar" "--strip-components=1" "-C" "git" "-xf"
+ (assoc-ref inputs "git-source"))))
+ (add-after 'unpack 'patch-absolute-file-names
+ (lambda* (#:key inputs #:allow-other-keys)
+ (define (quoted-file-name input path)
+ (string-append "\"" input path "\""))
+ (substitute* "ui-snapshot.c"
+ (("\"gzip\"")
+ (quoted-file-name (assoc-ref inputs "gzip") "/bin/gzip"))
+ (("\"bzip2\"")
+ (quoted-file-name (assoc-ref inputs "bzip2") "/bin/bzip2"))
+ (("\"xz\"")
+ (quoted-file-name (assoc-ref inputs "xz") "/bin/xz")))
+
+ (substitute* "filters/about-formatting.sh"
+ (("$\\(dirname $0\\)") (string-append (assoc-ref outputs "out")
+ "/lib/cgit/filters"))
+ (("\\| tr") (string-append "| " (which "tr"))))
+
+ (substitute* "filters/html-converters/txt2html"
+ (("sed") (which "sed")))
+
+ (substitute* "filters/html-converters/man2html"
+ (("groff") (which "groff")))
+
+ (substitute* "filters/html-converters/rst2html"
+ (("rst2html\\.py") (which "rst2html.py")))))
+ (delete 'configure) ; no configure script
+ (add-after 'build 'build-man
+ (lambda* (#:key make-flags #:allow-other-keys)
+ (apply invoke "make" "doc-man" make-flags)))
+ (replace 'install
+ (lambda* (#:key make-flags outputs #:allow-other-keys)
+ (let ((out (assoc-ref outputs "out")))
+ (apply invoke
+ "make" "install" "install-man"
+ (string-append "prefix=" out)
+ (string-append "CGIT_SCRIPT_PATH=" out "/share/cgit")
+ make-flags)
+ ;; Move the platform-dependent 'cgit.cgi' into lib to get it
+ ;; stripped.
+ (rename-file (string-append out "/share/cgit/cgit.cgi")
+ (string-append out "/lib/cgit/cgit.cgi")))))
+ (add-after 'install 'wrap-python-scripts
+ (lambda* (#:key outputs #:allow-other-keys)
+ (for-each
+ (lambda (file)
+ (wrap-program (string-append (assoc-ref outputs "out")
+ "/lib/cgit/filters/" file)
+ `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH")))))
+ '("syntax-highlighting.py"
+ "html-converters/md2html")))))))
+ (native-inputs
+ ;; For building manpage.
+ (list asciidoc))
+ (inputs
+ `( ;; Building cgit requires a Git source tree.
+ ("git-source"
+ ,(origin
+ (method url-fetch)
+ ;; cgit is tightly bound to git. Use GIT_VER from the Makefile,
+ ;; which may not match the current (package-version git).
+ (uri "mirror://kernel.org/software/scm/git/git-2.43.0.tar.xz")
+ (sha256
+ (base32 "1v3nkfm3gw8wr7595qy86qla8xyjvi85fmly4lfph4frfcz60ijl"))))
+ ("bash-minimal" ,bash-minimal)
+ ("openssl" ,openssl)
+ ("python" ,python)
+ ("python-docutils" ,python-docutils)
+ ("python-markdown" ,python-markdown)
+ ("python-pygments" ,python-pygments)
+ ("zlib" ,zlib)
+ ;; bzip2, groff, gzip and xz are inputs (not native inputs)
+ ;; since they are actually substituted into cgit source and
+ ;; referenced by the built package output.
+ ("bzip2" ,bzip2)
+ ("groff" ,groff)
+ ("gzip" ,gzip)
+ ("xz" ,xz)))
+ (home-page "https://git.zx2c4.com/cgit/")
+ (synopsis "Web frontend for git repositories")
+ (description
+ "CGit is an attempt to create a fast web interface for the Git SCM, using
a built-in cache to decrease server I/O pressure.")
- (license license:gpl2)))
+ (license license:gpl2))))
(define-public cgit-pink
(package
diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm
index 6da4897a57..d751442561 100644
--- a/gnu/packages/video.scm
+++ b/gnu/packages/video.scm
@@ -50,7 +50,7 @@
;;; Copyright © 2021 Alexey Abramov <levenson@mmer.org>
;;; Copyright © 2021, 2022, 2023 Andrew Tropin <andrew@trop.in>
;;; Copyright © 2021 David Wilson <david@daviwil.com>
-;;; Copyright © 2021, 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021, 2022, 2023, 2024 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 2020 Hartmut Goebel <h.goebel@crazy-compilers.com>
;;; Copyright © 2021 Raghav Gururajan <rg@raghavgururajan.name>
;;; Copyright © 2021 Thiago Jung Bauermann <bauermann@kolabnow.com>
@@ -1047,14 +1047,14 @@ H.264 (MPEG-4 AVC) video streams.")
(define-public mkvtoolnix
(package
(name "mkvtoolnix")
- (version "52.0.0")
+ (version "80.0")
(source
(origin
(method url-fetch)
(uri (string-append "https://mkvtoolnix.download/sources/"
"mkvtoolnix-" version ".tar.xz"))
(sha256
- (base32 "15y7ahlifsclnkl70wn5w34dil8nwcwcjnw3k2ydqc6dz4vb0j5s"))
+ (base32 "1x9k9pmw7mzm2amvm251a45dlj9p9iqfank5p4w2fizxkapws25v"))
(modules '((guix build utils)))
(snippet '(begin
;; Delete bundled libraries.
@@ -1070,6 +1070,7 @@ H.264 (MPEG-4 AVC) video streams.")
(outputs '("out" "gui")) ; "mkvtoolnix-gui" brings the closure size from ~300 MB to 1.5+ GB.
(inputs
(list boost
+ gmp
bzip2
cmark
libebml
@@ -1083,86 +1084,96 @@ H.264 (MPEG-4 AVC) video streams.")
lzo
pcre2
pugixml
- qtbase-5
- qtmultimedia-5
+ qtbase
+ qtmultimedia
+ qtsvg
utfcpp
zlib))
(native-inputs
- `(("docbook-xsl" ,docbook-xsl)
- ("gettext" ,gettext-minimal)
- ("googletest" ,googletest)
- ("libxslt" ,libxslt)
- ("nlohmann-json" ,nlohmann-json)
- ("perl" ,perl)
- ("pkg-config" ,pkg-config)
- ("po4a" ,po4a)
- ("qttools-5" ,qttools-5)
- ("ruby" ,ruby-2.7)))
+ (list docbook-xsl
+ gettext-minimal
+ googletest
+ libxslt
+ nlohmann-json
+ perl
+ pkg-config
+ po4a
+ qttools
+ ruby-3.2))
(arguments
- `(#:configure-flags
- (list (string-append "--with-boost="
- (assoc-ref %build-inputs "boost"))
- (string-append "--with-docbook-xsl-root="
- (assoc-ref %build-inputs "docbook-xsl")
- "/xml/xsl/docbook-xsl-"
- ,(package-version docbook-xsl))
- "--enable-update-check=no"
- "--enable-precompiled-headers=no")
- #:phases
- (modify-phases %standard-phases
- (add-after 'unpack 'fix-utfcpp-include
- (lambda _
- (substitute* "src/common/strings/utf8.cpp"
- (("<utf8.h>")
- "<utf8cpp/utf8.h>"))))
- (add-after 'unpack 'patch-relative-file-names
- (lambda* (#:key outputs #:allow-other-keys)
- (let ((out (assoc-ref outputs "out")))
- (substitute* "src/mkvtoolnix-gui/util/settings.cpp"
- (("mkvmerge" match)
- (string-append out "/bin/" match)))
- #t)))
- (add-before 'configure 'add-googletest
- (lambda* (#:key inputs #:allow-other-keys)
- (symlink (search-input-directory inputs "/include/gtest")
- "lib/gtest")))
- (replace 'build
- (lambda _
- (let ((-j (list "-j" (number->string (parallel-job-count)))))
- (apply invoke "rake" -j))))
- (replace 'check
- (lambda _
- (invoke "rake" "tests/unit")))
- (replace 'install
- (lambda _
- (invoke "rake" "install")))
- (add-after 'install 'post-install
- (lambda* (#:key outputs #:allow-other-keys)
- ;; Move the Qt interface to "gui".
- (let* ((out (assoc-ref outputs "out"))
- (gui (assoc-ref outputs "gui"))
- (strip-store-dir (lambda (path)
- (substring path (string-prefix-length out path)))))
- (for-each
- (lambda (file)
- (mkdir-p (string-append gui (dirname file)))
- (rename-file (string-append out file)
- (string-append gui file)))
- (append '("/bin/mkvtoolnix-gui"
- "/share/applications/org.bunkus.mkvtoolnix-gui.desktop"
- "/share/metainfo/org.bunkus.mkvtoolnix-gui.appdata.xml"
- "/share/mime/packages/org.bunkus.mkvtoolnix-gui.xml")
- (map strip-store-dir (find-files out "\\.ogg$"))
- (map strip-store-dir (find-files out "mkvtoolnix-gui\\.png$"))
- (map strip-store-dir (find-files out "mkvtoolnix-gui\\.1"))))
- (for-each
- (lambda (file)
- (delete-file-recursively (string-append out file)))
- '("/share/applications"
- "/share/metainfo"
- "/share/mime"
- "/share/mkvtoolnix")))
- #t)))))
+ (list
+ #:configure-flags
+ #~(list (string-append "--with-boost="
+ #$(this-package-input "boost"))
+ (string-append "--with-docbook-xsl-root="
+ #$(this-package-native-input "docbook-xsl")
+ "/xml/xsl/docbook-xsl-"
+ #$(package-version
+ (this-package-native-input "docbook-xsl")))
+ "--enable-update-check=no"
+ "--enable-precompiled-headers=no")
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'unpack 'fix-utfcpp-include
+ (lambda _
+ (substitute* "src/common/strings/utf8.cpp"
+ (("<utf8.h>")
+ "<utf8cpp/utf8.h>"))))
+ (add-after 'unpack 'patch-relative-file-names
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let ((out (assoc-ref outputs "out")))
+ (substitute* "src/mkvtoolnix-gui/util/settings.cpp"
+ (("mkvmerge" match)
+ (string-append out "/bin/" match))) #t)))
+ (add-before 'configure 'add-googletest
+ (lambda* (#:key inputs #:allow-other-keys)
+ (symlink (search-input-directory inputs
+ "/include/gtest")
+ "lib/gtest")))
+ (replace 'build
+ (lambda _
+ (let ((-j (list "-j"
+ (number->string (parallel-job-count)))))
+ (apply invoke "rake" -j))))
+ (replace 'check
+ (lambda _
+ (invoke "rake" "tests/unit")))
+ (replace 'install
+ (lambda _
+ (invoke "rake" "install")))
+ (add-after 'install 'post-install
+ (lambda* (#:key outputs #:allow-other-keys)
+ ;; Move the Qt interface to "gui".
+ (let* ((out (assoc-ref outputs "out"))
+ (gui (assoc-ref outputs "gui"))
+ (strip-store-dir (lambda (path)
+ (substring path
+ (string-prefix-length
+ out path)))))
+ (for-each (lambda (file)
+ (mkdir-p (string-append gui
+ (dirname
+ file)))
+ (rename-file (string-append out file)
+ (string-append gui file)))
+ (append '("/bin/mkvtoolnix-gui"
+ "/share/applications/org.bunkus.mkvtoolnix-gui.desktop"
+ "/share/metainfo/org.bunkus.mkvtoolnix-gui.appdata.xml"
+ "/share/mime/packages/org.bunkus.mkvtoolnix-gui.xml")
+ (map strip-store-dir
+ (find-files out "\\.ogg$"))
+ (map strip-store-dir
+ (find-files out
+ "mkvtoolnix-gui\\.png$"))
+ (map strip-store-dir
+ (find-files out
+ "mkvtoolnix-gui\\.1"))))
+ (for-each (lambda (file)
+ (delete-file-recursively
+ (string-append out file)))
+ '("/share/applications"
+ "/share/metainfo" "/share/mime"
+ "/share/mkvtoolnix"))))))))
(home-page "https://mkvtoolnix.download")
(synopsis "Tools to create, alter and inspect Matroska files")
(description
@@ -1505,14 +1516,14 @@ SMPTE 314M.")
(define-public libmatroska
(package
(name "libmatroska")
- (version "1.6.3")
+ (version "1.7.1")
(source
(origin
(method url-fetch)
(uri (string-append "https://dl.matroska.org/downloads/"
"libmatroska/libmatroska-" version ".tar.xz"))
(sha256
- (base32 "06h81sxyz2riic0gpzik6ffcnq32wrqphi8c6k55glcdymiimyfs"))))
+ (base32 "1cqq61qgv6x3xjzjrw71dya7lbsbrsmi9raqm2k4hgfrp0rk0ajp"))))
(build-system cmake-build-system)
(inputs
(list libebml))
@@ -1657,14 +1668,14 @@ operate properly.")
(define-public ffmpeg
(package
(name "ffmpeg")
- (version "6.0")
+ (version "6.1.1")
(source (origin
(method url-fetch)
(uri (string-append "https://ffmpeg.org/releases/ffmpeg-"
version ".tar.xz"))
(sha256
(base32
- "10kh2f4y4isfqj4xpcqqnzk611jh89ywcjyjnq9c2jcv5p18ggjp"))))
+ "0s7r2qv8gh2a3w568n9xxgcz0q8j5ww1jdsci1hm9f4l1yqg9146"))))
(outputs '("out" "debug"))
(build-system gnu-build-system)
(inputs
@@ -1989,6 +2000,252 @@ audio/video codec library.")
"--enable-static"))))
(inputs '()))))
+;;; Custom ffmpeg package used by Jami, which incorporates custom patches.
+(define-public ffmpeg-jami
+ (package
+ (inherit ffmpeg)
+ (name "ffmpeg-jami")
+ (source (let ((ffmpeg-origin (package-source ffmpeg)))
+ (origin
+ (inherit ffmpeg-origin)
+ ;; These patches originate come from
+ ;; <https://review.jami.net/plugins/gitiles/jami-daemon/+/refs/heads/master/contrib/src/ffmpeg/>.
+ ;; Make sure to keep them update and/or register any new ones
+ ;; here.
+ (patches
+ (append
+ (origin-patches ffmpeg-origin)
+ (search-patches
+ "ffmpeg-jami-remove-mjpeg-log.patch"
+ "ffmpeg-jami-change-RTCP-ratio.patch"
+ "ffmpeg-jami-rtp_ext_abs_send_time.patch"
+ "ffmpeg-jami-libopusdec-enable-FEC.patch"
+ "ffmpeg-jami-libopusenc-reload-packet-loss-at-encode.patch"
+ "ffmpeg-jami-screen-sharing-x11-fix.patch"))))))
+ (arguments
+ (substitute-keyword-arguments (package-arguments ffmpeg)
+ ((#:configure-flags _ '())
+ #~(list "--disable-static"
+ "--enable-shared"
+ "--disable-stripping"
+ ;; The following variables are configure flags used by
+ ;; ffmpeg-jami. They're from the
+ ;; jami/daemon/contrib/src/ffmpeg/rules.mak file. We try to
+ ;; keep it as close to the official Jami package as possible,
+ ;; to provide all the codecs and extra features that are
+ ;; expected (see:
+ ;; https://review.jami.net/plugins/gitiles/jami-daemon/+/
+ ;; refs/heads/master/contrib/src/ffmpeg/rules.mak).
+ ;; An exception are the ffnvcodec-related switches, which is
+ ;; not packaged in Guix and would not work with Mesa.
+ #$@(if (string-contains (%current-system) "linux")
+ '("--enable-pic"
+ "--extra-cxxflags=-fPIC"
+ "--extra-cflags=-fPIC"
+ "--target-os=linux"
+ "--enable-indev=v4l2"
+ "--enable-indev=xcbgrab"
+ "--enable-vdpau"
+ "--enable-hwaccel=h264_vdpau"
+ "--enable-hwaccel=mpeg4_vdpau"
+ "--enable-vaapi"
+ "--enable-hwaccel=h264_vaapi"
+ "--enable-hwaccel=mpeg4_vaapi"
+ "--enable-hwaccel=h263_vaapi"
+ "--enable-hwaccel=vp8_vaapi"
+ "--enable-hwaccel=mjpeg_vaapi"
+ "--enable-hwaccel=hevc_vaapi"
+ "--enable-encoder=h264_vaapi"
+ "--enable-encoder=vp8_vaapi"
+ "--enable-encoder=mjpeg_vaapi"
+ "--enable-encoder=hevc_vaapi")
+ '())
+ "--disable-everything"
+ "--enable-zlib"
+ "--enable-gpl"
+ "--enable-swscale"
+ "--enable-bsfs"
+ "--disable-filters"
+ "--disable-programs"
+ "--disable-postproc"
+ "--disable-protocols"
+ "--enable-protocol=crypto"
+ "--enable-protocol=file"
+ "--enable-protocol=rtp"
+ "--enable-protocol=srtp"
+ "--enable-protocol=tcp"
+ "--enable-protocol=udp"
+ "--enable-protocol=unix"
+ "--enable-protocol=pipe"
+
+ ;; Enable muxers/demuxers.
+ "--disable-demuxers"
+ "--disable-muxers"
+ "--enable-muxer=rtp"
+ "--enable-muxer=g722"
+ "--enable-muxer=g726"
+ "--enable-muxer=g726le"
+ "--enable-muxer=h263"
+ "--enable-muxer=h264"
+ "--enable-muxer=hevc"
+ "--enable-muxer=matroska"
+ "--enable-muxer=wav"
+ "--enable-muxer=webm"
+ "--enable-muxer=ogg"
+ "--enable-muxer=pcm_s16be"
+ "--enable-muxer=pcm_s16le"
+ "--enable-demuxer=rtp"
+ "--enable-demuxer=mjpeg"
+ "--enable-demuxer=mjpeg_2000"
+ "--enable-demuxer=mpegvideo"
+ "--enable-demuxer=gif"
+ "--enable-demuxer=image_jpeg_pipe"
+ "--enable-demuxer=image_png_pipe"
+ "--enable-demuxer=image_webp_pipe"
+ "--enable-demuxer=matroska"
+ "--enable-demuxer=m4v"
+ "--enable-demuxer=mp3"
+ "--enable-demuxer=ogg"
+ "--enable-demuxer=flac"
+ "--enable-demuxer=wav"
+ "--enable-demuxer=ac3"
+ "--enable-demuxer=g722"
+ "--enable-demuxer=g723_1"
+ "--enable-demuxer=g726"
+ "--enable-demuxer=g726le"
+ "--enable-demuxer=pcm_mulaw"
+ "--enable-demuxer=pcm_alaw"
+ "--enable-demuxer=pcm_s16be"
+ "--enable-demuxer=pcm_s16le"
+ "--enable-demuxer=h263"
+ "--enable-demuxer=h264"
+ "--enable-demuxer=hevc"
+
+ ;; Enable parsers.
+ "--enable-parser=h263"
+ "--enable-parser=h264"
+ "--enable-parser=hevc"
+ "--enable-parser=mpeg4video"
+ "--enable-parser=vp8"
+ "--enable-parser=vp9"
+ "--enable-parser=opus"
+
+ ;; Encoders/decoders.
+ "--enable-encoder=adpcm_g722"
+ "--enable-decoder=adpcm_g722"
+ "--enable-encoder=adpcm_g726"
+ "--enable-decoder=adpcm_g726"
+ "--enable-encoder=adpcm_g726le"
+ "--enable-decoder=adpcm_g726le"
+ "--enable-decoder=g729"
+ "--enable-encoder=g723_1"
+ "--enable-decoder=g723_1"
+ "--enable-encoder=rawvideo"
+ "--enable-decoder=rawvideo"
+ "--enable-encoder=libx264"
+ "--enable-decoder=h264"
+ "--enable-encoder=pcm_alaw"
+ "--enable-decoder=pcm_alaw"
+ "--enable-encoder=pcm_mulaw"
+ "--enable-decoder=pcm_mulaw"
+ "--enable-encoder=mpeg4"
+ "--enable-decoder=mpeg4"
+ "--enable-encoder=libvpx_vp8"
+ "--enable-decoder=vp8"
+ "--enable-decoder=vp9"
+ "--enable-encoder=h263"
+ "--enable-encoder=h263p"
+ "--enable-decoder=h263"
+ "--enable-encoder=mjpeg"
+ "--enable-decoder=mjpeg"
+ "--enable-decoder=mjpegb"
+ "--enable-libspeex"
+ "--enable-libopus"
+ "--enable-libvpx"
+ "--enable-libx264"
+ "--enable-encoder=libspeex"
+ "--enable-decoder=libspeex"
+ "--enable-encoder=libopus"
+ "--enable-decoder=libopus"
+
+ ;; Encoders/decoders for ringtones and audio streaming.
+ "--enable-decoder=flac"
+ "--enable-decoder=vorbis"
+ "--enable-decoder=aac"
+ "--enable-decoder=ac3"
+ "--enable-decoder=eac3"
+ "--enable-decoder=mp3"
+ "--enable-decoder=pcm_u24le"
+ "--enable-decoder=pcm_u32le"
+ "--enable-decoder=pcm_u8"
+ "--enable-decoder=pcm_f16le"
+ "--enable-decoder=pcm_f32le"
+ "--enable-decoder=pcm_f64le"
+ "--enable-decoder=pcm_s16le"
+ "--enable-decoder=pcm_s24le"
+ "--enable-decoder=pcm_s32le"
+ "--enable-decoder=pcm_s64le"
+ "--enable-decoder=pcm_u16le"
+ "--enable-encoder=pcm_u8"
+ "--enable-encoder=pcm_f32le"
+ "--enable-encoder=pcm_f64le"
+ "--enable-encoder=pcm_s16le"
+ "--enable-encoder=pcm_s32le"
+ "--enable-encoder=pcm_s64le"
+
+ "--enable-decoder=pcm_s16be"
+ "--enable-decoder=pcm_s16be_planar"
+ "--enable-decoder=pcm_s16le_planar"
+ "--enable-decoder=pcm_s24be"
+ "--enable-decoder=pcm_s24le_planar"
+ "--enable-decoder=pcm_s32be"
+ "--enable-decoder=pcm_s32le_planar"
+ "--enable-decoder=pcm_s64be"
+ "--enable-decoder=pcm_s8"
+ "--enable-decoder=pcm_s8_planar"
+ "--enable-decoder=pcm_u16be"
+
+ ;; Encoders/decoders for images.
+ "--enable-encoder=gif"
+ "--enable-decoder=gif"
+ "--enable-encoder=jpegls"
+ "--enable-decoder=jpegls"
+ "--enable-encoder=ljpeg"
+ "--enable-decoder=jpeg2000"
+ "--enable-encoder=png"
+ "--enable-decoder=png"
+ "--enable-encoder=bmp"
+ "--enable-decoder=bmp"
+ "--enable-encoder=tiff"
+ "--enable-decoder=tiff"
+
+ ;; Filters.
+ "--enable-filter=scale"
+ "--enable-filter=overlay"
+ "--enable-filter=amix"
+ "--enable-filter=amerge"
+ "--enable-filter=aresample"
+ "--enable-filter=format"
+ "--enable-filter=aformat"
+ "--enable-filter=fps"
+ "--enable-filter=transpose"
+ "--enable-filter=pad"
+
+ "--enable-filter=afir"
+ "--enable-filter=split"
+ "--enable-filter=drawbox"
+ "--enable-filter=drawtext"
+ "--enable-filter=rotate"
+ "--enable-filter=loop"
+ "--enable-filter=setpts"
+ "--enable-filter=movie"
+ "--enable-filter=alphamerge"
+ "--enable-filter=boxblur"
+ "--enable-filter=lut"
+ "--enable-filter=negate"
+ "--enable-filter=colorkey"
+ "--enable-filter=transpose"))))))
+
(define-public ffmpegthumbnailer
(package
(name "ffmpegthumbnailer")
@@ -3631,7 +3888,10 @@ be used for realtime video capture via Linux-specific APIs.")
(lambda* _
(let ((plugin-path (getenv "QT_PLUGIN_PATH")))
(wrap-program (string-append #$output "/bin/obs")
- `("QT_PLUGIN_PATH" ":" prefix (,plugin-path)))))))))
+ `("QT_PLUGIN_PATH" ":" prefix (,plugin-path))
+ `("LD_LIBRARY_PATH" ":" prefix
+ (,(string-append #$(this-package-input "vlc")
+ "/lib"))))))))))
(native-search-paths
(list (search-path-specification
(variable "OBS_PLUGINS_DIRECTORY")
diff --git a/gnu/packages/vim.scm b/gnu/packages/vim.scm
index 1f7a005cb1..e301088394 100644
--- a/gnu/packages/vim.scm
+++ b/gnu/packages/vim.scm
@@ -884,6 +884,14 @@ refactor Vim in order to:
'(#:tests? #false ;no tests
#:phases
(modify-phases %standard-phases
+ (add-after 'unpack 'help-cmake-find-msgpack-c
+ (lambda _
+ ;; Patch the build system so that it can find the modern
+ ;; 'msgpack-c' named pkg-config file (see:
+ ;; https://github.com/jeanguyomarch/eovim/issues/73).
+ (substitute* "cmake/Modules/FindMsgPack.cmake"
+ (("MSGPACK QUIET msgpack")
+ "MSGPACK QUIET msgpack-c msgpack"))))
(add-after 'configure 'reference-nvim
(lambda* (#:key inputs #:allow-other-keys)
(let ((nvim (search-input-file inputs "/bin/nvim")))
@@ -894,10 +902,8 @@ refactor Vim in order to:
(string-append start nvim))))))
(add-before 'build 'set-home
(lambda _ (setenv "HOME" "/tmp"))))))
- (native-inputs
- (list pkg-config))
- (inputs
- (list efl msgpack neovim))
+ (native-inputs (list pkg-config))
+ (inputs (list efl msgpack-c neovim))
(home-page "https://github.com/jeanguyomarch/eovim/")
(synopsis "EFL GUI for Neovim")
(description "Graphical Neovim interface based on the @acronym{EFL, Enlightenment
diff --git a/gnu/packages/web-browsers.scm b/gnu/packages/web-browsers.scm
index 0d749dcd30..1d9b562c8b 100644
--- a/gnu/packages/web-browsers.scm
+++ b/gnu/packages/web-browsers.scm
@@ -587,7 +587,7 @@ driven and does not detract you from your daily work.")
(define-public nyxt
(package
(name "nyxt")
- (version "3.10.0")
+ (version "3.11.0")
(source
(origin
(method git-fetch)
@@ -596,7 +596,7 @@ driven and does not detract you from your daily work.")
(commit version)))
(sha256
(base32
- "1rz2082kk3fdvszqmi3fgndrq205vbxl3i0x4qyli0jy3lpvjin8"))
+ "0hzkpk8kshw7afz3pryi99xz2vg3v676day0mgji3hvaazfan39p"))
(file-name (git-file-name name version))))
(build-system gnu-build-system)
(arguments
diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm
index 13ae53aa8c..41295a1e90 100644
--- a/gnu/packages/web.scm
+++ b/gnu/packages/web.scm
@@ -46,7 +46,7 @@
;;; Copyright © 2020, 2022 Michael Rohleder <mike@rohleder.de>
;;; Copyright © 2020, 2021 Ryan Prior <rprior@protonmail.com>
;;; Copyright © 2020 Alexandru-Sergiu Marton <brown121407@posteo.ro>
-;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021, 2024 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 2021 Stefan Reichör <stefan@xsteve.at>
;;; Copyright © 2021 la snesne <lasnesne@lagunposprasihopre.org>
;;; Copyright © 2021 Matthew James Kraai <kraai@ftbfs.org>
@@ -6621,6 +6621,28 @@ Depending on your architecture, it only requires about 40 bytes of data per
message stream (in a web server that is per connection).")
(license license:expat))))
+(define-public llhttp
+ (package
+ (name "llhttp")
+ (version "9.1.3")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/nodejs/llhttp")
+ (commit (string-append "release/v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "1nkv64c5fs8x6n5f9f6g28w5hvg776p55cwa0f82ni548nx279s1"))))
+ (build-system cmake-build-system)
+ (arguments (list #:tests? #f)) ;FIXME: tests depend on node-mocha
+ (home-page "https://github.com/nodejs/llhttp")
+ (synopsis "Port of http_parser to llparse")
+ (description "@code{llparse} is a port of @code{http_parser} to
+@code{llparse} which aims making it more maintainable, verifiable and
+efficient where possible.")
+ (license license:expat)))
+
(define-public python-httpretty
(package
(name "python-httpretty")
diff --git a/gnu/packages/wm.scm b/gnu/packages/wm.scm
index a87eb20428..bd7589b2a6 100644
--- a/gnu/packages/wm.scm
+++ b/gnu/packages/wm.scm
@@ -787,7 +787,7 @@ desktop environment.")
(define-public icewm
(package
(name "icewm")
- (version "3.4.4")
+ (version "3.4.5")
(source (origin
(method url-fetch)
(uri (string-append
@@ -795,7 +795,7 @@ desktop environment.")
version "/icewm-" version ".tar.lz"))
(sha256
(base32
- "0cdsb2d45dwcr2dm4jfh0z5g6pkb0ghd4jaybxqiz74mbw5rmjhv"))))
+ "1wd5k0whh2b43a72223cy19pwc29fhrhd2dnc61fha2y5ndgw6ld"))))
(build-system gnu-build-system)
(native-inputs (list pkg-config))
(inputs (list fontconfig
diff --git a/gnu/packages/xfce.scm b/gnu/packages/xfce.scm
index 73889c945e..a44a871ba2 100644
--- a/gnu/packages/xfce.scm
+++ b/gnu/packages/xfce.scm
@@ -216,7 +216,7 @@ to share commonly used Xfce widgets among the Xfce applications.")
(define-public catfish
(package
(name "catfish")
- (version "4.16.4")
+ (version "4.18.0")
(source (origin
(method url-fetch)
(uri (string-append "https://archive.xfce.org/src/apps/"
@@ -224,7 +224,7 @@ to share commonly used Xfce widgets among the Xfce applications.")
"/catfish-" version ".tar.bz2"))
(sha256
(base32
- "1z5m9f4cj473n68rrhhbkq3x5df5k394qp4n27lqqyny6k2h2p3f"))))
+ "16cbsnki7qragwhbfs3h0ja7xg8xlf59ajxhddqm0jkmrirrpbpx"))))
(build-system python-build-system)
(arguments
'(#:phases
@@ -270,7 +270,7 @@ it to your needs by using several command line options.")
(define-public elementary-xfce-icon-theme
(package
(name "elementary-xfce-icon-theme")
- (version "0.17")
+ (version "0.18")
(source (origin
(method git-fetch)
(uri
@@ -280,7 +280,7 @@ it to your needs by using several command line options.")
(file-name (git-file-name name version))
(sha256
(base32
- "0jlawp6rg55w5cm4d7836r660i2pnc5gkzpdjsq7w5875i85arzm"))))
+ "124bdgghkjkpcsfn9a2ad6zqy233pi9jqmv8w8a3ha6q3al2s11s"))))
(build-system gnu-build-system)
(arguments
'(#:tests? #f ; no check target
diff --git a/gnu/packages/xorg.scm b/gnu/packages/xorg.scm
index 4f85a5de8b..9624fb44aa 100644
--- a/gnu/packages/xorg.scm
+++ b/gnu/packages/xorg.scm
@@ -245,14 +245,14 @@ which can be read by any architecture.")
(define-public xorgproto
(package
(name "xorgproto")
- (version "2022.2")
+ (version "2023.2")
(source (origin
(method url-fetch)
(uri (string-append "mirror://xorg/individual/proto"
"/xorgproto-" version ".tar.xz"))
(sha256
(base32
- "17kbq1x68jl9mz69ays5c0w72lpkqi937raxk0im7y88pvrdn4sx"))))
+ "0b4c27aq25w1fccks49p020avf9jzh75kaq5qwnww51bp1yvq7xn"))))
(build-system gnu-build-system)
(propagated-inputs
;; To get util-macros in (almost?) all package inputs.
@@ -5250,7 +5250,7 @@ EGLStream families of extensions.")
(define-public xorg-server-xwayland
(package
(name "xorg-server-xwayland")
- (version "21.1.3")
+ (version "23.2.3")
(source
(origin
(method url-fetch)
@@ -5258,7 +5258,7 @@ EGLStream families of extensions.")
"/xserver/xwayland-" version ".tar.xz"))
(sha256
(base32
- "18pqvg76grbsyxa3mm3j06i1l8cwb28nbn2gcnqpsk7x75zpbhpb"))))
+ "00p30yyikh7h9xsqgir66xb06pspgjlibv1mi0n42irc4fkrm7gb"))))
(inputs (list font-dejavu
dbus
egl-wayland
@@ -5268,6 +5268,7 @@ EGLStream families of extensions.")
libepoxy
libgcrypt
libtirpc
+ libxcvt
libxfont2
libxkbfile
pixman
@@ -5283,6 +5284,7 @@ EGLStream families of extensions.")
wayland
wayland-protocols)
'())))
+ (properties '((upstream-name . "xwayland")))
(build-system meson-build-system)
(arguments
`(#:configure-flags
diff --git a/gnu/services/base.scm b/gnu/services/base.scm
index 6539bfd6ce..60388a22dd 100644
--- a/gnu/services/base.scm
+++ b/gnu/services/base.scm
@@ -1798,9 +1798,9 @@ archive' public keys, with GUIX."
(chroot-directories guix-configuration-chroot-directories ;list of file-like/strings
(default '()))
(max-silent-time guix-configuration-max-silent-time ;integer
- (default 0))
+ (default 3600))
(timeout guix-configuration-timeout ;integer
- (default 0))
+ (default (* 3600 24)))
(log-compression guix-configuration-log-compression
(default 'gzip))
(discover? guix-configuration-discover?
diff --git a/gnu/services/messaging.scm b/gnu/services/messaging.scm
index 7505810e7c..9702170b3e 100644
--- a/gnu/services/messaging.scm
+++ b/gnu/services/messaging.scm
@@ -1,7 +1,7 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2017, 2018 Clément Lassieur <clement@lassieur.org>
;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
-;;; Copyright © 2015, 2017-2020, 2022, 2023 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2015, 2017-2020, 2022-2024 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2018 Pierre-Antoine Rouby <contact@parouby.fr>
;;;
;;; This file is part of GNU Guix.
@@ -857,39 +857,24 @@ string, you could instantiate a prosody service like this:
;; on 'networking'.
(requirement '(user-processes networking))
- (start #~(if (defined? 'make-inetd-constructor)
-
- (make-inetd-constructor
- (list #$bitlbee* "-I" "-c" #$conf)
- (list (endpoint
- (addrinfo:addr
- (car (getaddrinfo #$interface
- #$(number->string port)
- (logior AI_NUMERICHOST
- AI_NUMERICSERV))))))
- #:requirements '#$requirement
- #:service-name-stem "bitlbee"
- #:user "bitlbee" #:group "bitlbee"
-
- ;; Allow 'bitlbee-purple' to use libpurple plugins.
- #:environment-variables
- (list (string-append "PURPLE_PLUGIN_PATH="
- #$plugins "/lib/purple-2")
- "GUIX_LOCPATH=/run/current-system/locale"))
-
- (make-forkexec-constructor
- (list #$(file-append bitlbee "/sbin/bitlbee")
- "-n" "-F" "-u" "bitlbee" "-c" #$conf)
-
- ;; Allow 'bitlbee-purple' to use libpurple plugins.
- #:environment-variables
- (list (string-append "PURPLE_PLUGIN_PATH="
- #$plugins "/lib/purple-2"))
-
- #:pid-file "/var/run/bitlbee.pid")))
- (stop #~(if (defined? 'make-inetd-destructor)
- (make-inetd-destructor)
- (make-kill-destructor)))))))))
+ (start #~(make-inetd-constructor
+ (list #$bitlbee* "-I" "-c" #$conf)
+ (list (endpoint
+ (addrinfo:addr
+ (car (getaddrinfo #$interface
+ #$(number->string port)
+ (logior AI_NUMERICHOST
+ AI_NUMERICSERV))))))
+ #:requirements '#$requirement
+ #:service-name-stem "bitlbee"
+ #:user "bitlbee" #:group "bitlbee"
+
+ ;; Allow 'bitlbee-purple' to use libpurple plugins.
+ #:environment-variables
+ (list (string-append "PURPLE_PLUGIN_PATH="
+ #$plugins "/lib/purple-2")
+ "GUIX_LOCPATH=/run/current-system/locale")))
+ (stop #~(make-inetd-destructor))))))))
(define %bitlbee-accounts
;; User group and account to run BitlBee.
diff --git a/gnu/services/shepherd.scm b/gnu/services/shepherd.scm
index e9d3a631c2..5ebac129ce 100644
--- a/gnu/services/shepherd.scm
+++ b/gnu/services/shepherd.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013-2016, 2018-2023 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013-2016, 2018-2024 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
;;; Copyright © 2018 Carlo Zancanaro <carlo@zancanaro.id.au>
;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
@@ -183,7 +183,6 @@ DEFAULT is given, use it as the service's default value."
(define %default-modules
;; Default set of modules visible in a service's file.
`((shepherd service)
- (oop goops)
((guix build utils) #:hide (delete))
(guix build syscalls)))
@@ -300,10 +299,10 @@ stored."
#~(begin
(use-modules #$@(shepherd-service-modules service))
- (make <service>
- #:docstring '#$(shepherd-service-documentation service)
- #:provides '#$(shepherd-service-provision service)
- #:requires '#$(shepherd-service-requirement service)
+ (service
+ '#$(shepherd-service-provision service)
+ #:documentation '#$(shepherd-service-documentation service)
+ #:requirement '#$(shepherd-service-requirement service)
;; The 'one-shot?' slot is new in Shepherd 0.6.0.
;; Older versions ignore it.
@@ -313,7 +312,7 @@ stored."
#:start #$(shepherd-service-start service)
#:stop #$(shepherd-service-stop service)
#:actions
- (make-actions
+ (actions
#$@(map (match-lambda
(($ <shepherd-action> name proc doc)
#~(#$name #$doc #$proc)))
@@ -338,7 +337,6 @@ and return the resulting '.go' file. SHEPHERD is used as shepherd package."
;; Do the same as the Shepherd's 'load-in-user-module'.
(let ((env (make-fresh-user-module)))
- (module-use! env (resolve-interface '(oop goops)))
(module-use! env (resolve-interface '(shepherd service)))
(with-target #$(or target #~%host-type)
(lambda _
@@ -371,17 +369,6 @@ as shepherd package."
(use-modules (srfi srfi-34)
(system repl error-handling))
- (define (call-with-file file flags proc)
- (let ((port #f))
- (dynamic-wind
- (lambda ()
- (set! port (open file flags)))
- (lambda ()
- (proc port))
- (lambda ()
- (close-port port)
- (set! port #f)))))
-
;; There's code run from shepherd that uses 'call-with-input-file' &
;; co.--e.g., the 'urandom-seed' service. Starting from Shepherd
;; 0.9.2, users need to make sure not to leak non-close-on-exec file
@@ -389,12 +376,12 @@ as shepherd package."
;; standard bindings with O_CLOEXEC variants.
(set! call-with-input-file
(lambda (file proc)
- (call-with-file file (logior O_RDONLY O_CLOEXEC)
- proc)))
+ (call-with-port (open file (logior O_RDONLY O_CLOEXEC))
+ proc)))
(set! call-with-output-file
(lambda (file proc)
- (call-with-file file (logior O_WRONLY O_CREAT O_CLOEXEC)
- proc)))
+ (call-with-port (open file (logior O_WRONLY O_CREAT O_CLOEXEC))
+ proc)))
;; Specify the default environment visible to all the services.
;; Without this statement, all the environment variables of PID 1
@@ -412,25 +399,17 @@ as shepherd package."
;; than a kernel panic.
(call-with-error-handling
(lambda ()
- (apply register-services
- (parameterize ((current-warning-port
- (%make-void-port "w")))
- (map load-compiled '#$(map scm->go files))))))
+ (register-services
+ (parameterize ((current-warning-port
+ (%make-void-port "w")))
+ (map load-compiled '#$(map scm->go files))))))
(format #t "starting services...~%")
(let ((services-to-start
'#$(append-map shepherd-service-provision
(filter shepherd-service-auto-start?
services))))
- (if (defined? 'start-in-the-background)
- (start-in-the-background services-to-start)
- (for-each (lambda (service) ;pre-0.9.0 compatibility
- (guard (c ((service-error? c)
- (format (current-error-port)
- "failed to start service '~a'~%"
- service)))
- (start service)))
- services-to-start))
+ (start-in-the-background services-to-start)
;; Hang up stdin. At this point, we assume that 'start' methods
;; that required user interaction on the console (e.g.,
diff --git a/gnu/services/ssh.scm b/gnu/services/ssh.scm
index 0abecd6b42..f759c5cf6e 100644
--- a/gnu/services/ssh.scm
+++ b/gnu/services/ssh.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014-2019, 2022, 2023 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014-2019, 2022-2024 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2016 David Craven <david@craven.ch>
;;; Copyright © 2016 Julien Lepiller <julien@lepiller.eu>
;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
@@ -592,7 +592,10 @@ of user-name/file-like tuples."
(list (shepherd-service
(documentation "OpenSSH server.")
- (requirement '(pam syslogd loopback))
+
+ ;; On the Hurd, this can only be started after pfinet is up, hence
+ ;; the dependency on 'networking'.
+ (requirement '(pam syslogd loopback networking))
(provision '(ssh-daemon ssh sshd))
(start #~(if #$inetd-style?
diff --git a/gnu/services/xorg.scm b/gnu/services/xorg.scm
index f8cf9f25b6..1ee15ea90c 100644
--- a/gnu/services/xorg.scm
+++ b/gnu/services/xorg.scm
@@ -981,6 +981,11 @@ argument.")))
(lambda (pw)
(string-append (passwd:dir pw) "/.guix-profile"))))
+ (define home-profile
+ (and=> (getpw (getuid))
+ (lambda (pw)
+ (string-append (passwd:dir pw) "/.guix-home/profile"))))
+
;; If we are able to find the user's profile, we can add it to
;; the search paths set below. We need to do this so that D-Bus
;; can start services installed by the user. This allows
@@ -988,9 +993,13 @@ argument.")))
;; 'evolution') to work even if those services are only available
;; in the user's profile. See <https://bugs.gnu.org/35267>.
(define profiles
- (if user-profile
- (list user-profile system-profile)
- (list system-profile)))
+ (append (if home-profile
+ (list home-profile)
+ '())
+ (if user-profile
+ (list user-profile)
+ '())
+ (list system-profile)))
(setenv "XDG_CONFIG_DIRS"
(string-join (map (cut string-append <> "/etc/xdg") profiles)
diff --git a/gnu/system.scm b/gnu/system.scm
index cfa036556d..3cd64a5c9f 100644
--- a/gnu/system.scm
+++ b/gnu/system.scm
@@ -803,9 +803,7 @@ bookkeeping."
%boot-service
%hurd-startup-service
%activation-service
- (service shepherd-root-service-type
- (shepherd-configuration
- (shepherd shepherd-0.8))) ;no Fibers
+ (service shepherd-root-service-type)
(service user-processes-service-type)
(account-service (append (operating-system-accounts os)
diff --git a/gnu/system/hurd.scm b/gnu/system/hurd.scm
index 3b138bef65..cbe0081382 100644
--- a/gnu/system/hurd.scm
+++ b/gnu/system/hurd.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2020-2022 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2020-2023 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2020, 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
;;;
;;; This file is part of GNU Guix.
@@ -70,7 +70,7 @@
;; Note: the Shepherd comes before the Hurd, not just because its duty is to
;; shepherd the herd, but also because we want its 'halt' and 'reboot'
;; commands to take precedence.
- (list shepherd-0.8 hurd netdde bash coreutils file findutils grep sed
+ (list shepherd-0.10 hurd netdde bash coreutils file findutils grep sed
diffutils patch gawk tar gzip bzip2 xz lzip
guile-3.0-latest guile-colorized guile-readline
net-base nss-certs inetutils less procps shadow sudo which
diff --git a/gnu/system/image.scm b/gnu/system/image.scm
index b825892232..2cc1012893 100644
--- a/gnu/system/image.scm
+++ b/gnu/system/image.scm
@@ -5,6 +5,7 @@
;;; Copyright © 2022 Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
;;; Copyright © 2022 Alex Griffin <a@ajgrf.com>
;;; Copyright © 2023 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2023 Oleg Pykhalov <go.wigust@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -686,7 +687,8 @@ returns an image record where the first partition's label is set to <label>."
(define* (system-docker-image image
#:key
- (name "docker-image"))
+ (name "docker-image")
+ (archiver tar))
"Build a docker image for IMAGE. NAME is the base name to use for the
output file."
(define boot-program
@@ -731,6 +733,7 @@ output file."
(use-modules (guix docker)
(guix build utils)
(gnu build image)
+ (srfi srfi-1)
(srfi srfi-19)
(guix build store-copy)
(guix store database))
@@ -754,18 +757,30 @@ output file."
#:register-closures? #$register-closures?
#:deduplicate? #f
#:system-directory #$os)
- (build-docker-image
- #$output
- (cons* image-root
- (map store-info-item
- (call-with-input-file #$graph
- read-reference-graph)))
- #$os
- #:entry-point '(#$boot-program #$os)
- #:compressor '(#+(file-append gzip "/bin/gzip") "-9n")
- #:creation-time (make-time time-utc 0 1)
- #:system #$image-target
- #:transformations `((,image-root -> ""))))))))
+ (when #$(image-max-layers image)
+ (setenv "PATH"
+ (string-join (list #+(file-append archiver "/bin")
+ #+(file-append gzip "/bin"))
+ ":")))
+ (apply build-docker-image
+ (append (list #$output
+ (append (if #$(image-max-layers image)
+ '()
+ (list image-root))
+ (map store-info-item
+ (call-with-input-file #$graph
+ read-reference-graph)))
+ #$os
+ #:entry-point '(#$boot-program #$os)
+ #:compressor
+ '(#+(file-append gzip "/bin/gzip") "-9n")
+ #:creation-time (make-time time-utc 0 1)
+ #:system #$image-target
+ #:transformations `((,image-root -> "")))
+ (if #$(image-max-layers image)
+ (list #:root-system image-root
+ #:max-layers #$(image-max-layers image))
+ '()))))))))
(computed-file name builder
;; Allow offloading so that this I/O-intensive process
diff --git a/gnu/tests/data/jami-dummy-account.dat b/gnu/tests/data/jami-dummy-account.dat
index 0e908396ca..c2c5357189 100644
--- a/gnu/tests/data/jami-dummy-account.dat
+++ b/gnu/tests/data/jami-dummy-account.dat
@@ -1,8 +1,7 @@
;;; -*- mode: scheme; -*-
;;; JSON extracted from an actual Jami account and processed with
;;; Emacs/guile-json.
-(define %jami-account-content-sexp
- '(("RINGCAKEY" . "LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUpRd0lCQURBTkJna3F\
+(("RINGCAKEY" . "LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUpRd0lCQURBTkJna3F\
oa2lHOXcwQkFRRUZBQVNDQ1Mwd2dna3BBZ0VBQW9JQ0FRQzBxWUozSkYvTzhQRGEKRnUwRnpRcHBCaD\
gybGJMdURrNTlVU0I0MUJSaS9kdDZGV1BRN29YOVpsY25vNGZzM2dmUHQ0dU1hRVBkVFBGKwowbGN2Q\
jc2cytQTEFlcjlOZGpVQzQ2ZXp0UnNiNE9aQXc4ZUk1M3EwSU04QWJFd0o0ZjllLzBmQUFueHgrK3Qw\
@@ -58,7 +57,7 @@ TUNPaHdxN21xYXRUVnNrawpTRDNySmkrTFR6a2Y4OEx1bjZZNjdiaFNOTWpKZkFaUXNQc0FTRkJBUTJ\
rQnE5alRLZGVuaU4yYTJIbm0xNCtrCnJDeU9ZVE14Q2hQbWNpS25pVy9MWnFUL0U1dlNRUGdBVzc0dT\
VLazJoSjRBajNjRW9NVEwxSytZbStWYWh2U0cKTi8xOFdYQ1JRQkg1d0p2eXJYczBtT29GQlRnTWg4d\
z0KLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLQo=")
- ("ringAccountKey" . "LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUpRUUlCQURBTk\
+ ("ringAccountKey" . "LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUpRUUlCQURBTk\
Jna3Foa2lHOXcwQkFRRUZBQVNDQ1Nzd2dna25BZ0VBQW9JQ0FRRDNCdDRnOUVUdk9EVnYKM3hWV0ZlS\
1Nnbk5uVEF3S2dYa3IrQ1FhdU8vTGZWM01RenNSNHliL3hoaWhhb1Z2c2FtZ3ZRU1haL0M1R3I5QQpE\
YlAxbHNHclRCK1pXMC9uMXVEb3hmVWdZRWY3SGtVanJtdVFjUGlFWGlUVkNiY002U0NzdVNrMnRxdE1\
@@ -114,7 +113,7 @@ KMTlPd09oZ1lGcjFheGQvNXd2VgpURjNoVlQwbFZGN2RyRC9iMHZOcmxnbUNjbEk4UDg1a2dkRUhZbG\
ZtTFoxeXJIMkNXVy9SS0lsWk9ZdFVuNFNpCkp5a2VlNDROWElXU3ovalRBdFRta3VQTzRvUjF5d3dRc\
jdhUTF5a3hRVm9rVm5vY2xqU0tyQlk4R294a0I0eDIKUDNrb3F1UnkvcUd3QzBnN1o4ZjBTQjNQZVZt\
eQotLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCg==")
- ("ringAccountCert" . "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZXakNDQTBLZ\
+ ("ringAccountCert" . "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZXakNDQTBLZ\
0F3SUJBZ0lJRm1tNmZuaWRndEl3RFFZSktvWklodmNOQVFFTUJRQXdUREVRTUE0R0ExVUUKQXhNSFNt\
RnRhU0JEUVRFNE1EWUdDZ21TSm9tVDhpeGtBUUVUS0RjNVpqSTJaVFZpWTJNeU9EWXlPREppT0dFMwp\
PRFF6TUdOak1EWXpNakV4T1RFNFkyWm1PVGd3SGhjTk1qRXdOREUyTVRjek1qRXdXaGNOTXpFd05ERT\
@@ -180,17 +179,17 @@ OFY2cWM2bXZTbUFXa25nL3QwaStXVmdGVkZuZFQrQ0oyNTJsa0ZacGljdAp6ekdETW44VUNDRUp4TDR\
KTklTM2lLOUhlRys2MlZuay9QOEM3YVpLSXpVdjFud25rcVdUUUFYWDBKckJGdDdICjI5ZDk1RElmRT\
RuT0FyS0JFNHc2Z1R4SU1uZzVzWi9ZbDFjcG5wUHlsR3VICi0tLS0tRU5EIENFUlRJRklDQVRFLS0tL\
S0K")
- ("ethKey" . "fN8cOT1lYNziaW0+pjBIgZ8r6+zMMhHsukkWBNPDsFo=")
- ("TURN.username" . "ring")
- ("TURN.server" . "turn.jami.net")
- ("TURN.realm" . "ring")
- ("TURN.password" . "ring")
- ("TURN.enable" . "true")
- ("TLS.verifyServer" . "true")
- ("TLS.verifyClient" . "true")
- ("TLS.serverName" . "")
- ("TLS.requireClientCertificate" . "true")
- ("TLS.privateKeyFile" . "LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUpRd0lCQU\
+ ("ethKey" . "fN8cOT1lYNziaW0+pjBIgZ8r6+zMMhHsukkWBNPDsFo=")
+ ("TURN.username" . "ring")
+ ("TURN.server" . "turn.jami.net")
+ ("TURN.realm" . "ring")
+ ("TURN.password" . "ring")
+ ("TURN.enable" . "true")
+ ("TLS.verifyServer" . "true")
+ ("TLS.verifyClient" . "true")
+ ("TLS.serverName" . "")
+ ("TLS.requireClientCertificate" . "true")
+ ("TLS.privateKeyFile" . "LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUpRd0lCQU\
RBTkJna3Foa2lHOXcwQkFRRUZBQVNDQ1Mwd2dna3BBZ0VBQW9JQ0FRQzM5b1Z0cXNtUGdaSUgKcHpTV\
GtlT3BlWC9CSEx2KzFTYnJPSFpVRHEwNFZCUU5BNmJmSFNSWTJpbHE1WEVheXNVSmwzQmsvM0txZEhS\
cQpEV01wQ1dpcE1Vc2FwSGxJR0tSWHEwbXhQZ29WODZSUVBub1dCRTdhWVVEZTlJZXlxMmllZXpDK1l\
@@ -246,11 +245,11 @@ mNUloSWU0RUtZUE5VUXNua0tSVTlxUApzWi9idXBXc2w4bWVFcko3bllJQ05ucHpnSHRpNXdSMlliVF\
VXT01odmRFUldxMnhTV3BBYmtNMElhZDBUc05kCmUrYVRQVmJOMXFibFZLMm1qUTl2YS9JSkVuSE51V\
E9TREtJeUpvcVArQkxiRTVjQU5acXQ2OFFadWdOc2RxNHkKV2FoeStydU5LS1F3Mk5MYzQzZUtsNmxv\
bXdtRlFZOD0KLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLQo=")
- ("TLS.password" . "")
- ("TLS.negotiationTimeoutSec" . "-1")
- ("TLS.method" . "Automatic")
- ("TLS.ciphers" . "")
- ("TLS.certificateFile" . "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZHVENDQ\
+ ("TLS.password" . "")
+ ("TLS.negotiationTimeoutSec" . "-1")
+ ("TLS.method" . "Automatic")
+ ("TLS.ciphers" . "")
+ ("TLS.certificateFile" . "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZHVENDQ\
XdHZ0F3SUJBZ0lJU1pUdlZPQnh3akF3RFFZSktvWklodmNOQVFFTUJRQXdTVEVOTUFzR0ExVUUKQXhN\
RVNtRnRhVEU0TURZR0NnbVNKb21UOGl4a0FRRVRLR1l6TXpRMVpqSTNOelZrWkdabE1EZGhOR0l3WkR\
rMQpaR0ZsWVRFeE1XUXhOV1ppWXpFeE9Ua3dIaGNOTWpFd05ERTJNVGN6TWpFd1doY05NekV3TkRFME\
@@ -346,47 +345,47 @@ lzVXFsVHVncXhtM2xDOUhzaDM2UFJLNURDUG93eHVUNlgKcXo1M1ZiN2h6TkxLelpiRlJzbUdFOFY2c\
WM2bXZTbUFXa25nL3QwaStXVmdGVkZuZFQrQ0oyNTJsa0ZacGljdAp6ekdETW44VUNDRUp4TDRKTklT\
M2lLOUhlRys2MlZuay9QOEM3YVpLSXpVdjFud25rcVdUUUFYWDBKckJGdDdICjI5ZDk1RElmRTRuT0F\
yS0JFNHc2Z1R4SU1uZzVzWi9ZbDFjcG5wUHlsR3VICi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K")
- ("STUN.server" . "")
- ("STUN.enable" . "false")
- ("SRTP.rtpFallback" . "false")
- ("SRTP.keyExchange" . "sdes")
- ("SRTP.enable" . "true")
- ("RingNS.uri" . "")
- ("RingNS.account" . "0790738ce15fa05933b49dd77034312787da86c3")
- ("DHT.PublicInCalls" . "true")
- ("Account.videoPortMin" . "49152")
- ("Account.videoPortMax" . "65534")
- ("Account.videoEnabled" . "true")
- ("Account.username" . "f3345f2775ddfe07a4b0d95daea111d15fbc1199")
- ("Account.useragent" . "")
- ("Account.upnpEnabled" . "true")
- ("Account.type" . "RING")
- ("Account.ringtoneEnabled" . "true")
- ("Account.rendezVous" . "true")
- ("Account.publishedSameAsLocal" . "true")
- ("Account.publishedPort" . "5060")
- ("Account.publishedAddress" . "")
- ("Account.presenceSubscribeSupported" . "true")
- ("Account.peerDiscovery" . "false")
- ("Account.managerUsername" . "")
- ("Account.managerUri" . "")
- ("Account.mailbox" . "")
- ("Account.localModeratorsEnabled" . "true")
- ("Account.localInterface" . "default")
- ("Account.hostname" . "bootstrap.jami.net")
- ("Account.hasCustomUserAgent" . "false")
- ("Account.enable" . "true")
- ("Account.dtmfType" . "overrtp")
- ("Account.displayName" . "dummy")
- ("Account.defaultModerators" . "")
- ("Account.audioPortMin" . "16384")
- ("Account.audioPortMax" . "32766")
- ("Account.archiveHasPassword" . "false")
- ("Account.allowCertFromTrusted" . "true")
- ("Account.allowCertFromHistory" . "true")
- ("Account.allowCertFromContact" . "true")
- ("Account.allModeratorEnabled" . "true")
- ("Account.alias" . "dummy")
- ("Account.activeCallLimit" . "-1")
- ("Account.accountPublish" . "false")
- ("Account.accountDiscovery" . "false")))
+ ("STUN.server" . "")
+ ("STUN.enable" . "false")
+ ("SRTP.rtpFallback" . "false")
+ ("SRTP.keyExchange" . "sdes")
+ ("SRTP.enable" . "true")
+ ("RingNS.uri" . "")
+ ("RingNS.account" . "0790738ce15fa05933b49dd77034312787da86c3")
+ ("DHT.PublicInCalls" . "true")
+ ("Account.videoPortMin" . "49152")
+ ("Account.videoPortMax" . "65534")
+ ("Account.videoEnabled" . "true")
+ ("Account.username" . "f3345f2775ddfe07a4b0d95daea111d15fbc1199")
+ ("Account.useragent" . "")
+ ("Account.upnpEnabled" . "true")
+ ("Account.type" . "RING")
+ ("Account.ringtoneEnabled" . "true")
+ ("Account.rendezVous" . "true")
+ ("Account.publishedSameAsLocal" . "true")
+ ("Account.publishedPort" . "5060")
+ ("Account.publishedAddress" . "")
+ ("Account.presenceSubscribeSupported" . "true")
+ ("Account.peerDiscovery" . "false")
+ ("Account.managerUsername" . "")
+ ("Account.managerUri" . "")
+ ("Account.mailbox" . "")
+ ("Account.localModeratorsEnabled" . "true")
+ ("Account.localInterface" . "default")
+ ("Account.hostname" . "bootstrap.jami.net")
+ ("Account.hasCustomUserAgent" . "false")
+ ("Account.enable" . "true")
+ ("Account.dtmfType" . "overrtp")
+ ("Account.displayName" . "dummy")
+ ("Account.defaultModerators" . "")
+ ("Account.audioPortMin" . "16384")
+ ("Account.audioPortMax" . "32766")
+ ("Account.archiveHasPassword" . "false")
+ ("Account.allowCertFromTrusted" . "true")
+ ("Account.allowCertFromHistory" . "true")
+ ("Account.allowCertFromContact" . "true")
+ ("Account.allModeratorEnabled" . "true")
+ ("Account.alias" . "dummy")
+ ("Account.activeCallLimit" . "-1")
+ ("Account.accountPublish" . "false")
+ ("Account.accountDiscovery" . "false"))
diff --git a/gnu/tests/docker.scm b/gnu/tests/docker.scm
index edc9804414..9e9d2e2d07 100644
--- a/gnu/tests/docker.scm
+++ b/gnu/tests/docker.scm
@@ -212,7 +212,7 @@ inside %DOCKER-OS."
(virtual-machine
(operating-system os)
(volatile? #f)
- (disk-image-size (* 5500 (expt 2 20)))
+ (disk-image-size (* 6000 (expt 2 20)))
(memory-size 2048)
(port-forwardings '())))
diff --git a/gnu/tests/telephony.scm b/gnu/tests/telephony.scm
index f7d9c73767..f03ea963f7 100644
--- a/gnu/tests/telephony.scm
+++ b/gnu/tests/telephony.scm
@@ -38,7 +38,10 @@
;;; Jami daemon.
;;;
-(include "data/jami-dummy-account.dat") ;defines %jami-account-content-sexp
+(define %jami-account-content-sexp
+ (call-with-input-file
+ (search-path %load-path "gnu/tests/data/jami-dummy-account.dat")
+ read))
(define %dummy-jami-account-archive
;; A Jami account archive is a gzipped JSON file.
@@ -391,7 +394,7 @@ jami account used as part of the jami configuration are left *unspecified*."
(description "Provisioning test for the jami service.")
(value (run-jami-test #:provisioning? #t))))
-;;; Thi test verifies that <jami-account> values can be left unspecified
+;;; This test verifies that <jami-account> values can be left unspecified
;;; without causing any issue (see: https://issues.guix.gnu.org/56799).
(define %test-jami-provisioning-partial
(system-test
diff --git a/gnu/tests/virtualization.scm b/gnu/tests/virtualization.scm
index f3655f1d8a..6ca88cbacd 100644
--- a/gnu/tests/virtualization.scm
+++ b/gnu/tests/virtualization.scm
@@ -1,6 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2017 Christopher Baines <mail@cbaines.net>
-;;; Copyright © 2020-2023 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2020-2024 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2021 Pierre Langlois <pierre.langlois@gmx.com>
;;; Copyright © 2022 Marius Bakke <marius@gnu.org>
@@ -277,6 +277,7 @@
(let ((session (make-session #:user "test"
#:port 10022
#:host "localhost"
+ #:timeout 120
#:log-verbosity 'rare)))
(match (connect! session)
('ok
diff --git a/guix/build-system/zig.scm b/guix/build-system/zig.scm
index 215178ceb4..1fa4782a2e 100644
--- a/guix/build-system/zig.scm
+++ b/guix/build-system/zig.scm
@@ -83,6 +83,79 @@
#:system system
#:guile-for-build guile)))
+(define* (zig-cross-build name
+ #:key
+ source target
+ build-inputs target-inputs host-inputs
+ (phases '%standard-phases)
+ (outputs '("out"))
+ (search-paths '())
+ (native-search-paths '())
+ (tests? #t)
+ (test-target #f)
+ (zig-build-flags ''())
+ (zig-test-flags ''())
+ (zig-destdir "out")
+ (zig-test-destdir "test-out")
+ (zig-release-type #f)
+ (system (%current-system))
+ (guile #f)
+ (imported-modules %zig-build-system-modules)
+ (modules '((guix build zig-build-system)
+ (guix build utils))))
+ "Build SOURCE using Zig, and with INPUTS."
+ (define builder
+ (with-imported-modules imported-modules
+ #~(begin
+ (use-modules #$@(sexp->gexp modules))
+
+ (define %build-host-inputs
+ #+(input-tuples->gexp build-inputs))
+
+ (define %build-target-inputs
+ (append #$(input-tuples->gexp host-inputs)
+ #+(input-tuples->gexp target-inputs)))
+
+ (define %build-inputs
+ (append %build-host-inputs %build-target-inputs))
+
+ (define %outputs
+ #$(outputs->gexp outputs))
+
+ (zig-build #:name #$name
+ #:source #+source
+ #:system #$system
+ #:phases #$phases
+ #:outputs %outputs
+ #:target #$target
+ #:test-target #$test-target
+ #:inputs %build-target-inputs
+ #:native-inputs %build-host-inputs
+ #:search-paths '#$(map search-path-specification->sexp
+ search-paths)
+ #:native-search-paths '#$(map
+ search-path-specification->sexp
+ native-search-paths)
+ #:zig-build-flags #$zig-build-flags
+ #:zig-test-flags #$zig-test-flags
+ #:zig-release-type #$zig-release-type
+ #:zig-destdir #$zig-destdir
+ #:zig-test-destdir #$zig-test-destdir
+ #:tests? #$tests?
+ #:search-paths '#$(sexp->gexp
+ (map search-path-specification->sexp
+ search-paths))))))
+
+ (mlet %store-monad ((guile (package->derivation (or guile (default-guile))
+ system #:graft? #f)))
+ (gexp->derivation name builder
+ #:system system
+ #:target target
+ #:graft? #f
+ #:substitutable? substitutable?
+ #:guile-for-build guile)))
+
+
(define* (lower name
#:key source inputs native-inputs outputs system target
(zig (default-zig))
@@ -93,27 +166,30 @@
(define private-keywords
'(#:target #:zig #:inputs #:native-inputs #:outputs))
- ;; TODO: support cross-compilation
- ;; It's as simple as adding some build flags to `zig-build-flags`
- ;; -Dtarget=aarch64-linux-musl, for example.
- (and (not target)
- (bag
- (name name)
- (system system)
- (target target)
- (host-inputs `(,@(if source
- `(("source" ,source))
- '())
- ,@inputs
-
- ;; Keep the standard inputs of 'gnu-build-system'
- ;; TODO: do we need this?
- ,@(standard-packages)))
- (build-inputs `(("zig" ,zig)
- ,@native-inputs))
- (outputs outputs)
- (build zig-build)
- (arguments (strip-keyword-arguments private-keywords arguments)))))
+ (bag
+ (name name)
+ (system system)
+ (target target)
+ (build-inputs `(,@(if source
+ `(("source" ,source))
+ '())
+ ,@`(("zig" ,zig))
+ ,@native-inputs
+ ,@(if target '() inputs)
+ ,@(if target
+ ;; Use the standard cross inputs of
+ ;; 'gnu-build-system'.
+ (standard-cross-packages target 'host)
+ '())
+ ;; Keep the standard inputs of 'gnu-build-system'.
+ ,@(standard-packages)))
+ (host-inputs (if target inputs '()))
+ (target-inputs (if target
+ (standard-cross-packages target 'target)
+ '()))
+ (outputs outputs)
+ (build (if target zig-cross-build zig-build))
+ (arguments (strip-keyword-arguments private-keywords arguments))))
(define zig-build-system
(build-system
diff --git a/guix/build/zig-build-system.scm b/guix/build/zig-build-system.scm
index d414ebfb17..8352a73324 100644
--- a/guix/build/zig-build-system.scm
+++ b/guix/build/zig-build-system.scm
@@ -47,6 +47,7 @@
zig-build-flags
zig-release-type ;; "safe", "fast" or "small" empty for a
;; debug build"
+ target
#:allow-other-keys)
"Build a given Zig package."
@@ -56,6 +57,9 @@
"--prefix-lib-dir" "lib"
"--prefix-exe-dir" "bin"
"--prefix-include-dir" "include"
+ ,@(if target
+ (list (string-append "-Dtarget=" target))
+ '())
,@(if zig-release-type
(list (string-append "-Drelease-" zig-release-type))
'())
@@ -65,9 +69,10 @@
(define* (check #:key tests?
zig-test-flags
+ target
#:allow-other-keys)
"Run all the tests"
- (when tests?
+ (when (and tests? (not target))
(let ((old-destdir (getenv "DESTDIR")))
(setenv "DESTDIR" "test-out") ;; Avoid colisions with the build output
(let ((call `("zig" "build" "test"
diff --git a/guix/docker.scm b/guix/docker.scm
index 5e6460f43f..1c6f59568f 100644
--- a/guix/docker.scm
+++ b/guix/docker.scm
@@ -3,6 +3,7 @@
;;; Copyright © 2017, 2018, 2019, 2021 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2018 Chris Marusich <cmmarusich@gmail.com>
;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2023 Oleg Pykhalov <go.wigust@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -29,16 +30,27 @@
with-directory-excursion
invoke))
#:use-module (gnu build install)
+ #:use-module ((guix build store-copy)
+ #:select (file-size))
#:use-module (json) ;guile-json
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-19)
#:use-module (srfi srfi-26)
+ #:use-module (srfi srfi-71)
#:use-module ((texinfo string-utils)
#:select (escape-special-chars))
#:use-module (rnrs bytevectors)
#:use-module (ice-9 ftw)
#:use-module (ice-9 match)
- #:export (build-docker-image))
+ #:export (%docker-image-max-layers
+ build-docker-image))
+
+;; The maximum number of layers allowed in a Docker image is typically around
+;; 128, although it may vary depending on the Docker daemon. However, we
+;; recommend setting the limit to 100 to ensure sufficient room for future
+;; extensions.
+(define %docker-image-max-layers
+ #f)
;; Generate a 256-bit identifier in hexadecimal encoding for the Docker image.
(define docker-id
@@ -92,12 +104,12 @@ Return a version of TAG that follows these rules."
(make-string (- min-length l) padding-character)))
(_ normalized-name))))
-(define* (manifest path id #:optional (tag "guix"))
+(define* (manifest path layers #:optional (tag "guix"))
"Generate a simple image manifest."
(let ((tag (canonicalize-repository-name tag)))
`#(((Config . "config.json")
(RepoTags . #(,(string-append tag ":latest")))
- (Layers . #(,(string-append id "/layer.tar")))))))
+ (Layers . ,(list->vector layers))))))
;; According to the specifications this is required for backwards
;; compatibility. It duplicates information provided by the manifest.
@@ -106,8 +118,8 @@ Return a version of TAG that follows these rules."
`((,(canonicalize-repository-name tag) . ((latest . ,id)))))
;; See https://github.com/opencontainers/image-spec/blob/master/config.md
-(define* (config layer time arch #:key entry-point (environment '()))
- "Generate a minimal image configuration for the given LAYER file."
+(define* (config layers-diff-ids time arch #:key entry-point (environment '()))
+ "Generate a minimal image configuration for the given LAYERS files."
;; "architecture" must be values matching "platform.arch" in the
;; runtime-spec at
;; https://github.com/opencontainers/runtime-spec/blob/v1.0.0-rc2/config.md#platform
@@ -125,7 +137,7 @@ Return a version of TAG that follows these rules."
(container_config . #nil)
(os . "linux")
(rootfs . ((type . "layers")
- (diff_ids . #(,(layer-diff-id layer)))))))
+ (diff_ids . ,(list->vector layers-diff-ids))))))
(define directive-file
;; Return the file or directory created by a 'evaluate-populate-directive'
@@ -136,6 +148,26 @@ Return a version of TAG that follows these rules."
(('directory name _ ...)
(string-trim name #\/))))
+(define (size-sorted-store-items items max-layers)
+ "Split list of ITEMS at %MAX-LAYERS and sort by disk usage."
+ (let* ((items-length (length items))
+ (head tail
+ (split-at
+ (map (match-lambda ((size . item) item))
+ (sort (map (lambda (item)
+ (cons (file-size item) item))
+ items)
+ (lambda (item1 item2)
+ (< (match item2 ((size . _) size))
+ (match item1 ((size . _) size))))))
+ (if (>= items-length max-layers)
+ (- max-layers 2)
+ (1- items-length)))))
+ (list head tail)))
+
+(define (create-empty-tar file)
+ (invoke "tar" "-cf" file "--files-from" "/dev/null"))
+
(define* (build-docker-image image paths prefix
#:key
(repository "guix")
@@ -146,11 +178,13 @@ Return a version of TAG that follows these rules."
entry-point
(environment '())
compressor
- (creation-time (current-time time-utc)))
- "Write to IMAGE a Docker image archive containing the given PATHS. PREFIX
-must be a store path that is a prefix of any store paths in PATHS. REPOSITORY
-is a descriptive name that will show up in \"REPOSITORY\" column of the output
-of \"docker images\".
+ (creation-time (current-time time-utc))
+ max-layers
+ root-system)
+ "Write to IMAGE a layerer Docker image archive containing the given PATHS.
+PREFIX must be a store path that is a prefix of any store paths in PATHS.
+REPOSITORY is a descriptive name that will show up in \"REPOSITORY\" column of
+the output of \"docker images\".
When DATABASE is true, copy it to /var/guix/db in the image and create
/var/guix/gcroots and friends.
@@ -172,7 +206,14 @@ non-empty directory, then its contents will be recursively added, as well.
SYSTEM is a GNU triplet (or prefix thereof) of the system the binaries in
PATHS are for; it is used to produce metadata in the image. Use COMPRESSOR, a
command such as '(\"gzip\" \"-9n\"), to compress IMAGE. Use CREATION-TIME, a
-SRFI-19 time-utc object, as the creation time in metadata."
+SRFI-19 time-utc object, as the creation time in metadata.
+
+When MAX-LAYERS is not false build layered image, providing a Docker
+image with store paths splitted in their own layers to improve sharing
+between images.
+
+ROOT-SYSTEM is a directory with a provisioned root file system, which will be
+added to image as a layer."
(define (sanitize path-fragment)
(escape-special-chars
;; GNU tar strips the leading slash off of absolute paths before applying
@@ -203,6 +244,59 @@ SRFI-19 time-utc object, as the creation time in metadata."
(if (eq? '() transformations)
'()
`("--transform" ,(transformations->expression transformations))))
+ (define (seal-layer)
+ ;; Add 'layer.tar' to 'image.tar' under the right name. Return its hash.
+ (let* ((file-hash (layer-diff-id "layer.tar"))
+ (file-name (string-append file-hash "/layer.tar")))
+ (mkdir file-hash)
+ (rename-file "layer.tar" file-name)
+ (invoke "tar" "-rf" "image.tar" file-name)
+ (delete-file file-name)
+ file-hash))
+ (define layers-hashes
+ ;; Generate a tarball that includes container image layers as tarballs,
+ ;; along with a manifest.json file describing the layer and config file
+ ;; locations.
+ (match-lambda
+ (((head ...) (tail ...) id)
+ (create-empty-tar "image.tar")
+ (let* ((head-layers
+ (map
+ (lambda (file)
+ (invoke "tar" "cf" "layer.tar" file)
+ (seal-layer))
+ head))
+ (tail-layer
+ (begin
+ (create-empty-tar "layer.tar")
+ (for-each (lambda (file)
+ (invoke "tar" "-rf" "layer.tar" file))
+ tail)
+ (let* ((file-hash (layer-diff-id "layer.tar"))
+ (file-name (string-append file-hash "/layer.tar")))
+ (mkdir file-hash)
+ (rename-file "layer.tar" file-name)
+ (invoke "tar" "-rf" "image.tar" file-name)
+ (delete-file file-name)
+ file-hash)))
+ (customization-layer
+ (let* ((file-id (string-append id "/layer.tar"))
+ (file-hash (layer-diff-id file-id))
+ (file-name (string-append file-hash "/layer.tar")))
+ (mkdir file-hash)
+ (rename-file file-id file-name)
+ (invoke "tar" "-rf" "image.tar" file-name)
+ file-hash))
+ (all-layers
+ (append head-layers (list tail-layer customization-layer))))
+ (with-output-to-file "manifest.json"
+ (lambda ()
+ (scm->json (manifest prefix
+ (map (cut string-append <> "/layer.tar")
+ all-layers)
+ repository))))
+ (invoke "tar" "-rf" "image.tar" "manifest.json")
+ all-layers))))
(let* ((directory "/tmp/docker-image") ;temporary working directory
(id (docker-id prefix))
(time (date->string (time-utc->date creation-time) "~4"))
@@ -229,26 +323,39 @@ SRFI-19 time-utc object, as the creation time in metadata."
(with-output-to-file "json"
(lambda () (scm->json (image-description id time))))
- ;; Create a directory for the non-store files that need to go into the
- ;; archive.
- (mkdir "extra")
+ (if root-system
+ (let ((directory (getcwd)))
+ (with-directory-excursion root-system
+ (apply invoke "tar"
+ "-cf" (string-append directory "/layer.tar")
+ `(,@transformation-options
+ ,@(tar-base-options)
+ ,@(scandir "."
+ (lambda (file)
+ (not (member file '("." "..")))))))))
+ (begin
+ ;; Create a directory for the non-store files that need to go
+ ;; into the archive.
+ (mkdir "extra")
- (with-directory-excursion "extra"
- ;; Create non-store files.
- (for-each (cut evaluate-populate-directive <> "./")
- extra-files)
+ (with-directory-excursion "extra"
+ ;; Create non-store files.
+ (for-each (cut evaluate-populate-directive <> "./")
+ extra-files)
- (when database
- ;; Initialize /var/guix, assuming PREFIX points to a profile.
- (install-database-and-gc-roots "." database prefix))
+ (when database
+ ;; Initialize /var/guix, assuming PREFIX points to a
+ ;; profile.
+ (install-database-and-gc-roots "." database prefix))
- (apply invoke "tar" "-cf" "../layer.tar"
- `(,@transformation-options
- ,@(tar-base-options)
- ,@paths
- ,@(scandir "."
- (lambda (file)
- (not (member file '("." ".."))))))))
+ (apply invoke "tar" "-cf" "../layer.tar"
+ `(,@transformation-options
+ ,@(tar-base-options)
+ ,@(if max-layers '() paths)
+ ,@(scandir "."
+ (lambda (file)
+ (not (member file '("." ".."))))))))
+ (delete-file-recursively "extra")))
;; It is possible for "/" to show up in the archive, especially when
;; applying transformations. For example, the transformation
@@ -261,24 +368,37 @@ SRFI-19 time-utc object, as the creation time in metadata."
;; error messages.
(with-error-to-port (%make-void-port "w")
(lambda ()
- (system* "tar" "--delete" "/" "-f" "layer.tar")))
-
- (delete-file-recursively "extra"))
+ (system* "tar" "--delete" "/" "-f" "layer.tar"))))
(with-output-to-file "config.json"
(lambda ()
- (scm->json (config (string-append id "/layer.tar")
- time arch
- #:environment environment
- #:entry-point entry-point))))
- (with-output-to-file "manifest.json"
- (lambda ()
- (scm->json (manifest prefix id repository))))
- (with-output-to-file "repositories"
- (lambda ()
- (scm->json (repositories prefix id repository)))))
-
- (apply invoke "tar" "-cf" image "-C" directory
- `(,@(tar-base-options #:compressor compressor)
- "."))
+ (scm->json
+ (config (if max-layers
+ (layers-hashes
+ (append (size-sorted-store-items paths max-layers)
+ (list id)))
+ (list (layer-diff-id (string-append id "/layer.tar"))))
+ time arch
+ #:environment environment
+ #:entry-point entry-point))))
+ (if max-layers
+ (begin
+ (invoke "tar" "-rf" "image.tar" "config.json")
+ (if compressor
+ (begin
+ (apply invoke `(,@compressor "image.tar"))
+ (copy-file "image.tar.gz" image))
+ (copy-file "image.tar" image)))
+ (begin
+ (with-output-to-file "manifest.json"
+ (lambda ()
+ (scm->json (manifest prefix
+ (list (string-append id "/layer.tar"))
+ repository))))
+ (with-output-to-file "repositories"
+ (lambda ()
+ (scm->json (repositories prefix id repository))))
+ (apply invoke "tar" "-cf" image
+ `(,@(tar-base-options #:compressor compressor)
+ ".")))))
(delete-file-recursively directory)))
diff --git a/guix/import/crate.scm b/guix/import/crate.scm
index 43823d006e..c57bd0bc6a 100644
--- a/guix/import/crate.scm
+++ b/guix/import/crate.scm
@@ -6,6 +6,7 @@
;;; Copyright © 2022 Hartmut Goebel <h.goebel@crazy-compilers.com>
;;; Copyright © 2023 Simon Tournier <zimon.toutoune@gmail.com>
;;; Copyright © 2023 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2023 David Elsing <david.elsing@posteo.net>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -25,12 +26,15 @@
(define-module (guix import crate)
#:use-module (guix base32)
#:use-module (guix build-system cargo)
+ #:use-module (guix diagnostics)
#:use-module (gcrypt hash)
#:use-module (guix http-client)
+ #:use-module (guix i18n)
#:use-module (guix import json)
#:use-module (guix import utils)
#:use-module (guix memoization)
#:use-module (guix packages)
+ #:use-module (guix read-print)
#:use-module (guix upstream)
#:use-module (guix utils)
#:use-module (gnu packages)
@@ -40,6 +44,7 @@
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-2)
#:use-module (srfi srfi-26)
+ #:use-module (srfi srfi-69)
#:use-module (srfi srfi-71)
#:export (crate->guix-package
guix-package->crate-name
@@ -99,7 +104,7 @@
;; Autoload Guile-Semver so we only have a soft dependency.
(module-autoload! (current-module)
- '(semver) '(string->semver semver->string semver<?))
+ '(semver) '(string->semver semver->string semver<? semver=?))
(module-autoload! (current-module)
'(semver ranges) '(string->semver-range semver-range-contains?))
@@ -164,16 +169,18 @@ record or #f if it was not found."
(list-matches "^(0+\\.){,2}[0-9]+" version))))
(define* (make-crate-sexp #:key name version cargo-inputs cargo-development-inputs
- home-page synopsis description license build?)
+ home-page synopsis description license build? yanked?)
"Return the `package' s-expression for a rust package with the given NAME,
VERSION, CARGO-INPUTS, CARGO-DEVELOPMENT-INPUTS, HOME-PAGE, SYNOPSIS, DESCRIPTION,
and LICENSE."
(define (format-inputs inputs)
(map
(match-lambda
- ((name version)
+ ((name version yanked)
(list (crate-name->package-name name)
- (version->semver-prefix version))))
+ (if yanked
+ (string-append version "-yanked")
+ (version->semver-prefix version)))))
inputs))
(let* ((port (http-fetch (crate-uri name version)))
@@ -183,6 +190,9 @@ and LICENSE."
(pkg `(package
(name ,guix-name)
(version ,version)
+ ,@(if yanked?
+ `(,(comment "; This version was yanked!\n" #t))
+ '())
(source (origin
(method url-fetch)
(uri (crate-uri ,name version))
@@ -190,6 +200,9 @@ and LICENSE."
(sha256
(base32
,(bytevector->nix-base32-string (port-sha256 port))))))
+ ,@(if yanked?
+ `((properties '((crate-version-yanked? . #t))))
+ '())
(build-system cargo-build-system)
,@(maybe-arguments (append (if build?
'()
@@ -206,7 +219,10 @@ and LICENSE."
((license) license)
(_ `(list ,@license)))))))
(close-port port)
- (package->definition pkg (version->semver-prefix version))))
+ (package->definition pkg
+ (if yanked?
+ (string-append version "-yanked")
+ (version->semver-prefix version)))))
(define (string->license string)
(filter-map (lambda (license)
@@ -217,13 +233,14 @@ and LICENSE."
'unknown-license!)))
(string-split string (string->char-set " /"))))
-(define* (crate->guix-package crate-name #:key version include-dev-deps?
- #:allow-other-keys)
+(define* (crate->guix-package
+ crate-name
+ #:key version include-dev-deps? allow-yanked? #:allow-other-keys)
"Fetch the metadata for CRATE-NAME from crates.io, and return the
`package' s-expression corresponding to that package, or #f on failure.
When VERSION is specified, convert it into a semver range and attempt to fetch
the latest version matching this semver range; otherwise fetch the latest
-version of CRATE-NAME. If INCLUDE-DEV-DEPS is true then this will also
+version of CRATE-NAME. If INCLUDE-DEV-DEPS is true then this will also
look up the development dependencs for the given crate."
(define (semver-range-contains-string? range version)
@@ -242,63 +259,112 @@ look up the development dependencs for the given crate."
(or version
(crate-latest-version crate))))
- ;; find the highest existing package that fulfills the semver <range>
+ ;; Find the highest existing package that fulfills the semver <range>.
+ ;; Packages previously marked as yanked take lower priority.
(define (find-package-version name range)
(let* ((semver-range (string->semver-range range))
- (versions
+ (package-versions
(sort
- (filter (lambda (version)
- (semver-range-contains? semver-range version))
+ (filter (match-lambda ((semver yanked)
+ (and
+ (or allow-yanked? (not yanked))
+ (semver-range-contains? semver-range semver))))
(map (lambda (pkg)
- (string->semver (package-version pkg)))
+ (let ((version (package-version pkg)))
+ (list
+ (string->semver version)
+ (assoc-ref (package-properties pkg)
+ 'crate-version-yanked?))))
(find-packages-by-name
(crate-name->package-name name))))
- semver<?)))
- (and (not (null-list? versions))
- (semver->string (last versions)))))
-
- ;; Find the highest version of a crate that fulfills the semver <range>
- ;; and hasn't been yanked.
+ (match-lambda* (((semver1 yanked1) (semver2 yanked2))
+ (or (and yanked1 (not yanked2))
+ (and (eq? yanked1 yanked2)
+ (semver<? semver1 semver2))))))))
+ (and (not (null-list? package-versions))
+ (match-let (((semver yanked) (last package-versions)))
+ (list (semver->string semver) yanked)))))
+
+ ;; Find the highest version of a crate that fulfills the semver <range>.
+ ;; If no matching non-yanked version has been found and allow-yanked? is #t,
+ ;; also consider yanked packages.
(define (find-crate-version crate range)
(let* ((semver-range (string->semver-range range))
(versions
(sort
(filter (lambda (entry)
(and
- (not (crate-version-yanked? (second entry)))
+ (or allow-yanked?
+ (not (crate-version-yanked? (second entry))))
(semver-range-contains? semver-range (first entry))))
(map (lambda (ver)
(list (string->semver (crate-version-number ver))
ver))
(crate-versions crate)))
- (match-lambda* (((semver _) ...)
- (apply semver<? semver))))))
+ (match-lambda* (((semver ver) ...)
+ (match-let (((yanked1 yanked2)
+ (map crate-version-yanked? ver)))
+ (or (and yanked1 (not yanked2))
+ (and (eq? yanked1 yanked2)
+ (apply semver<? semver)))))))))
(and (not (null-list? versions))
(second (last versions)))))
- (define (dependency-name+version dep)
+ ;; If no non-yanked existing package version was found, check the upstream
+ ;; versions. If a non-yanked upsteam version exists, use it instead,
+ ;; otherwise use the existing package version, provided it exists.
+ (define (dependency-name+version+yanked dep)
(let* ((name (crate-dependency-id dep))
- (req (crate-dependency-requirement dep))
- (existing-version (find-package-version name req)))
- (if existing-version
- (list name existing-version)
+ (req (crate-dependency-requirement dep))
+ (existing-version (find-package-version name req)))
+ (if (and existing-version (not (second existing-version)))
+ (cons name existing-version)
(let* ((crate (lookup-crate* name))
(ver (find-crate-version crate req)))
- (list name
- (crate-version-number ver))))))
+ (if existing-version
+ (if (and ver (not (crate-version-yanked? ver)))
+ (if (semver=? (string->semver (first existing-version))
+ (string->semver (crate-version-number ver)))
+ (begin
+ (warning (G_ "~A: version ~a is no longer yanked~%")
+ name (first existing-version))
+ (cons name existing-version))
+ (list name
+ (crate-version-number ver)
+ (crate-version-yanked? ver)))
+ (begin
+ (warning (G_ "~A: using existing version ~a, which was yanked~%")
+ name (first existing-version))
+ (cons name existing-version)))
+ (begin
+ (unless ver
+ (leave (G_ "~A: no version found for requirement ~a~%") name req))
+ (if (crate-version-yanked? ver)
+ (warning (G_ "~A: imported version ~a was yanked~%")
+ name (crate-version-number ver)))
+ (list name
+ (crate-version-number ver)
+ (crate-version-yanked? ver))))))))
(define version*
(and crate
- (find-crate-version crate version-number)))
+ (or (find-crate-version crate version-number)
+ (leave (G_ "~A: version ~a not found~%") crate-name version-number))))
;; sort and map the dependencies to a list containing
;; pairs of (name version)
(define (sort-map-dependencies deps)
- (sort (map dependency-name+version
+ (sort (map dependency-name+version+yanked
deps)
- (match-lambda* (((name _) ...)
+ (match-lambda* (((name _ _) ...)
(apply string-ci<? name)))))
+ (define (remove-yanked-info deps)
+ (map
+ (match-lambda ((name version yanked)
+ (list name version)))
+ deps))
+
(if (and crate version*)
(let* ((dependencies (crate-version-dependencies version*))
(dep-crates dev-dep-crates (partition normal-dependency? dependencies))
@@ -308,6 +374,7 @@ look up the development dependencs for the given crate."
'())))
(values
(make-crate-sexp #:build? include-dev-deps?
+ #:yanked? (crate-version-yanked? version*)
#:name crate-name
#:version (crate-version-number version*)
#:cargo-inputs cargo-inputs
@@ -324,19 +391,27 @@ look up the development dependencs for the given crate."
#:description (crate-description crate)
#:license (and=> (crate-version-license version*)
string->license))
- (append cargo-inputs cargo-development-inputs)))
+ (append
+ (remove-yanked-info cargo-inputs)
+ (remove-yanked-info cargo-development-inputs))))
(values #f '())))
-(define* (crate-recursive-import crate-name #:key version)
- (recursive-import crate-name
- #:repo->guix-package (lambda* params
- ;; download development dependencies only for the top level package
- (let ((include-dev-deps? (equal? (car params) crate-name))
- (crate->guix-package* (memoize crate->guix-package)))
- (apply crate->guix-package*
- (append params `(#:include-dev-deps? ,include-dev-deps?)))))
- #:version version
- #:guix-name crate-name->package-name))
+(define* (crate-recursive-import
+ crate-name #:key version recursive-dev-dependencies? allow-yanked?)
+ (recursive-import
+ crate-name
+ #:repo->guix-package
+ (let ((crate->guix-package* (memoize crate->guix-package)))
+ (lambda* params
+ ;; download development dependencies only for the top level package
+ (let ((include-dev-deps?
+ (or (equal? (car params) crate-name)
+ recursive-dev-dependencies?)))
+ (apply crate->guix-package*
+ (append params `(#:include-dev-deps? ,include-dev-deps?
+ #:allow-yanked? ,allow-yanked?))))))
+ #:version version
+ #:guix-name crate-name->package-name))
(define (guix-package->crate-name package)
"Return the crate name of PACKAGE."
diff --git a/guix/platforms/x86.scm b/guix/platforms/x86.scm
index 4ed5638c14..0c8fc7296c 100644
--- a/guix/platforms/x86.scm
+++ b/guix/platforms/x86.scm
@@ -1,5 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2022 Mathieu Othacehe <othacehe@gnu.org>
+;;; Copyright © 2023, 2024 Efraim Flashner <efraim@flashner.co.il>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -21,6 +22,7 @@
#:use-module (guix records)
#:export (i686-linux
x86_64-linux
+ x86_64-linux-x32
i686-mingw
x86_64-mingw
i586-gnu))
@@ -41,6 +43,14 @@
(rust-target "x86_64-unknown-linux-gnu")
(glibc-dynamic-linker "/lib/ld-linux-x86-64.so.2")))
+(define x86_64-linux-x32
+ (platform
+ (target "x86_64-linux-gnux32")
+ (system #f)
+ (linux-architecture "x86_64")
+ (rust-target "x86_64-unknown-linux-gnux32")
+ (glibc-dynamic-linker "/lib/ld-linux-x32.so.2")))
+
(define i686-mingw
(platform
(target "i686-w64-mingw32")
diff --git a/guix/read-print.scm b/guix/read-print.scm
index 690f5dacdd..6421b79737 100644
--- a/guix/read-print.scm
+++ b/guix/read-print.scm
@@ -46,6 +46,7 @@
page-break
page-break?
+ <comment>
comment
comment?
comment->string
diff --git a/guix/scripts/import/crate.scm b/guix/scripts/import/crate.scm
index 038faa87db..082a973aee 100644
--- a/guix/scripts/import/crate.scm
+++ b/guix/scripts/import/crate.scm
@@ -5,6 +5,7 @@
;;; Copyright © 2019, 2020 Martin Becze <mjbecze@riseup.net>
;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev>
;;; Copyright © 2023 Simon Tournier <zimon.toutoune@gmail.com>
+;;; Copyright © 2023 David Elsing <david.elsing@posteo.net>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -47,6 +48,13 @@
Import and convert the crates.io package for PACKAGE-NAME.\n"))
(display (G_ "
-r, --recursive import packages recursively"))
+ (display (G_ "
+ --recursive-dev-dependencies
+ include dev-dependencies recursively"))
+ (display (G_ "
+ --allow-yanked
+ allow importing yanked crates if no alternative
+ satisfying the version requirement exists"))
(newline)
(display (G_ "
-h, --help display this help and exit"))
@@ -67,6 +75,12 @@ Import and convert the crates.io package for PACKAGE-NAME.\n"))
(option '(#\r "recursive") #f #f
(lambda (opt name arg result)
(alist-cons 'recursive #t result)))
+ (option '("recursive-dev-dependencies") #f #f
+ (lambda (opt name arg result)
+ (alist-cons 'recursive-dev-dependencies #t result)))
+ (option '("allow-yanked") #f #f
+ (lambda (opt name arg result)
+ (alist-cons 'allow-yanked #t result)))
%standard-import-options))
@@ -92,8 +106,14 @@ Import and convert the crates.io package for PACKAGE-NAME.\n"))
(package-name->name+version spec))
(match (if (assoc-ref opts 'recursive)
- (crate-recursive-import name #:version version)
- (crate->guix-package name #:version version #:include-dev-deps? #t))
+ (crate-recursive-import
+ name #:version version
+ #:recursive-dev-dependencies?
+ (assoc-ref opts 'recursive-dev-dependencies)
+ #:allow-yanked? (assoc-ref opts 'allow-yanked))
+ (crate->guix-package
+ name #:version version #:include-dev-deps? #t
+ #:allow-yanked? (assoc-ref opts 'allow-yanked)))
((or #f '())
(leave (G_ "failed to download meta-data for package '~a'~%")
(if version
diff --git a/guix/scripts/pack.scm b/guix/scripts/pack.scm
index 8071840de1..d0acc6cfd8 100644
--- a/guix/scripts/pack.scm
+++ b/guix/scripts/pack.scm
@@ -8,6 +8,8 @@
;;; Copyright © 2020, 2021, 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 2020 Eric Bavier <bavier@posteo.net>
;;; Copyright © 2022 Alex Griffin <a@ajgrf.com>
+;;; Copyright © 2023 Graham James Addis <graham@addis.org.uk>
+;;; Copyright © 2023 Oleg Pykhalov <go.wigust@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -47,6 +49,7 @@
#:use-module (guix scripts build)
#:use-module (guix transformations)
#:use-module ((guix self) #:select (make-config.scm))
+ #:use-module ((guix docker) #:select (%docker-image-max-layers))
#:use-module (gnu compression)
#:use-module (gnu packages)
#:use-module (gnu packages bootstrap)
@@ -202,6 +205,16 @@ target the profile's @file{bin/env} file:
(leave (G_ "~a: invalid symlink specification~%")
arg))))
+(define (entry-point-argument-spec-option-parser opt name arg result)
+ "A SRFI-37 option parser for the --entry-point-argument option. The spec
+takes multiple occurrences. The entries are used in the exec form for the
+docker entry-point. The values are used as parameters in conjunction with the
+--entry-point option which is used as the first value in the exec form."
+ (let ((entry-point-argument (assoc-ref result 'entry-point-argument)))
+ (alist-cons 'entry-point-argument
+ (append entry-point-argument (list arg))
+ (alist-delete 'entry-point-argument result eq?))))
+
(define (set-utf8-locale profile)
"Configure the environment to use the \"en_US.utf8\" locale provided by the
GLIBC-UT8-LOCALES package."
@@ -506,12 +519,15 @@ added to the pack."
localstatedir?
(symlinks '())
(archiver tar)
- (extra-options '()))
- "Return a derivation to construct a Docker image of PROFILE. The
-image is a tarball conforming to the Docker Image Specification, compressed
-with COMPRESSOR. It can be passed to 'docker load'. If TARGET is true, it
-must a be a GNU triplet and it is used to derive the architecture metadata in
-the image. EXTRA-OPTIONS may contain the IMAGE-TAG keyword argument."
+ (extra-options '())
+ max-layers)
+ "Return a derivation to construct a Docker image of PROFILE. The image is a
+tarball conforming to the Docker Image Specification, compressed with
+COMPRESSOR. It can be passed to 'docker load'. If TARGET is true, it must a
+be a GNU triplet and it is used to derive the architecture metadata in the
+image. EXTRA-OPTIONS may contain the IMAGE-TAG keyword argument. If
+MAX-LAYERS is not false, the image will be splitted in up to MAX-LAYERS
+layers."
(define database
(and localstatedir?
(file-append (store-database (list profile))
@@ -562,10 +578,28 @@ the image. EXTRA-OPTIONS may contain the IMAGE-TAG keyword argument."
`((directory "/tmp" ,(getuid) ,(getgid) #o1777)
,@(append-map symlink->directives '#$symlinks)))
- (setenv "PATH" #+(file-append archiver "/bin"))
+ (define (form-entry-point prefix entry-point entry-point-argument)
+ ;; Construct entry-point parameter for build-docker-image. The
+ ;; first entry is constructed by prefixing the entry-point with
+ ;; the supplied index, subsequent entries are taken from the
+ ;; --entry-point-argument options.
+ (and=> entry-point
+ (lambda (entry-point)
+ (cons* (string-append prefix "/" entry-point)
+ entry-point-argument))))
+
+ (setenv "PATH"
+ (string-join `(#+(file-append archiver "/bin")
+ #+@(if max-layers
+ (list (file-append gzip "/bin"))
+ '()))
+ ":"))
(let-keywords '#$extra-options #f
- ((image-tag #f))
+ ((image-tag #f)
+ (entry-point-argument #f)
+ (max-layers #f))
+
(build-docker-image #$output
(map store-info-item
(call-with-input-file "profile"
@@ -578,16 +612,16 @@ the image. EXTRA-OPTIONS may contain the IMAGE-TAG keyword argument."
#:database #+database
#:system (or #$target %host-type)
#:environment environment
- #:entry-point
- #$(and entry-point
- #~(list
- (string-append #$profile "/"
- #$entry-point)))
+ #:entry-point (form-entry-point
+ #$profile
+ #$entry-point
+ entry-point-argument)
#:extra-files directives
#:compressor
#+(compressor-command compressor)
#:creation-time
- (make-time time-utc 0 1)))))))
+ (make-time time-utc 0 1)
+ #:max-layers max-layers))))))
(gexp->derivation (string-append name ".tar"
(compressor-extension compressor))
@@ -1264,6 +1298,8 @@ last resort for relocation."
(debug . 0)
(verbosity . 1)
(symlinks . ())
+ (entry-point-argument . ())
+ (max-layers . ,%docker-image-max-layers)
(compressor . ,(first %compressors))))
(define %formats
@@ -1299,7 +1335,13 @@ last resort for relocation."
rest))))
(define %docker-format-options
- (list (required-option 'image-tag)))
+ (list (required-option 'image-tag)
+ (option '(#\A "entry-point-argument") #t #f
+ entry-point-argument-spec-option-parser)
+ (option '("max-layers") #t #f
+ (lambda (opt name arg result)
+ (alist-cons 'max-layers (string->number* arg)
+ result)))))
(define (show-docker-format-options)
(display (G_ "
@@ -1308,7 +1350,15 @@ last resort for relocation."
(define (show-docker-format-options/detailed)
(display (G_ "
--image-tag=NAME
- Use the given NAME for the Docker image repository"))
+ Use the given NAME for the Docker image repository
+
+ -A, --entry-point-argument=COMMAND/PARAMETER
+ Value(s) to use for the Docker ENTRYPOINT arguments.
+ Multiple instances are accepted. This is only valid
+ in conjunction with the --entry-point option
+
+ --max-layers=N
+ Number of image layers"))
(newline)
(exit 0))
@@ -1619,7 +1669,11 @@ Create a bundle of PACKAGE.\n"))
(extra-options (match pack-format
('docker
(list #:image-tag
- (assoc-ref opts 'image-tag)))
+ (assoc-ref opts 'image-tag)
+ #:entry-point-argument
+ (assoc-ref opts 'entry-point-argument)
+ #:max-layers
+ (assoc-ref opts 'max-layers)))
('deb
(list #:control-file
(process-file-arg opts 'control-file)
diff --git a/guix/scripts/system.scm b/guix/scripts/system.scm
index f85b663d64..bf3d2f9044 100644
--- a/guix/scripts/system.scm
+++ b/guix/scripts/system.scm
@@ -58,6 +58,7 @@
#:use-module (guix scripts system reconfigure)
#:use-module (guix build utils)
#:use-module (guix progress)
+ #:use-module ((guix docker) #:select (%docker-image-max-layers))
#:use-module (gnu build image)
#:use-module (gnu build install)
#:autoload (gnu build file-systems)
@@ -1053,6 +1054,8 @@ Some ACTIONS support additional ARGS.\n"))
(newline)
(show-native-build-options-help)
(newline)
+ (show-docker-format-options)
+ (newline)
(display (G_ "
-h, --help display this help and exit"))
(display (G_ "
@@ -1060,12 +1063,21 @@ Some ACTIONS support additional ARGS.\n"))
(newline)
(show-bug-report-information))
+(define %docker-format-options
+ (list (option '("max-layers") #t #f
+ (lambda (opt name arg result)
+ (alist-cons 'max-layers (string->number* arg)
+ result)))))
+
(define %options
;; Specifications of the command-line options.
(cons* (option '(#\h "help") #f #f
(lambda args
(leave-on-EPIPE (show-help))
(exit 0)))
+ (option '("help-docker-format") #f #f
+ (lambda args
+ (show-docker-format-options/detailed)))
(option '(#\V "version") #f #f
(lambda args
(show-version-and-exit "guix system")))
@@ -1154,7 +1166,8 @@ Some ACTIONS support additional ARGS.\n"))
(alist-cons 'list-installed (or arg "") result)))
(append %standard-build-options
%standard-cross-build-options
- %standard-native-build-options)))
+ %standard-native-build-options
+ %docker-format-options)))
(define %default-options
;; Alist of default option values.
@@ -1175,7 +1188,8 @@ Some ACTIONS support additional ARGS.\n"))
(label . #f)
(volatile-image-root? . #f)
(volatile-vm-root? . #t)
- (graph-backend . "graphviz")))
+ (graph-backend . "graphviz")
+ (max-layers . ,%docker-image-max-layers)))
(define (verbosity-level opts)
"Return the verbosity level based on OPTS, the alist of parsed options."
@@ -1183,6 +1197,17 @@ Some ACTIONS support additional ARGS.\n"))
(if (eq? (assoc-ref opts 'action) 'build)
3 1)))
+(define (show-docker-format-options)
+ (display (G_ "
+ --help-docker-format list options specific to the docker image type.")))
+
+(define (show-docker-format-options/detailed)
+ (display (G_ "
+ --max-layers=N
+ Number of image layers"))
+ (newline)
+ (exit 0))
+
;;;
;;; Entry point.
@@ -1245,6 +1270,7 @@ resulting from command-line parsing."
((docker-image) docker-image-type)
(else image-type)))
(image-size (assoc-ref opts 'image-size))
+ (image-max-layers (assoc-ref opts 'max-layers))
(volatile?
(assoc-ref opts 'volatile-image-root?))
(shared-network?
@@ -1258,6 +1284,7 @@ resulting from command-line parsing."
(image-with-label base-image label)
base-image))
(size image-size)
+ (max-layers image-max-layers)
(volatile-root? volatile?)
(shared-network? shared-network?))))
(os (or (image-operating-system image)
diff --git a/guix/ui.scm b/guix/ui.scm
index e3bf07212f..962d291d2e 100644
--- a/guix/ui.scm
+++ b/guix/ui.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012-2023 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012-2024 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2013, 2018 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
;;; Copyright © 2014 Cyril Roelandt <tipecaml@gmail.com>
@@ -555,7 +555,7 @@ See the \"Application Setup\" section in the manual, for more info.\n"))
(leave-on-EPIPE
(simple-format #t "~a (~a) ~a~%"
command %guix-package-name %guix-version)
- (format #t "Copyright ~a 2023 ~a"
+ (format #t "Copyright ~a 2024 ~a"
;; TRANSLATORS: Translate "(C)" to the copyright symbol
;; (C-in-a-circle), if this symbol is available in the user's
;; locale. Otherwise, do not translate "(C)"; leave it as-is. */
diff --git a/guix/utils.scm b/guix/utils.scm
index 8e71f97e1c..e4e9d922e7 100644
--- a/guix/utils.scm
+++ b/guix/utils.scm
@@ -7,7 +7,7 @@
;;; Copyright © 2015 David Thompson <davet@gnu.org>
;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
;;; Copyright © 2018, 2020 Marius Bakke <marius@gnu.org>
-;;; Copyright © 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2020, 2021, 2024 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2020, 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 2021 Simon Tournier <zimon.toutoune@gmail.com>
;;; Copyright © 2021 Chris Marusich <cmmarusich@gmail.com>
@@ -97,6 +97,7 @@
target-x86-32?
target-x86-64?
target-x86?
+ target-x32?
target-arm32?
target-aarch64?
target-arm?
@@ -634,6 +635,8 @@ returned by `config.guess'."
(else triplet))))
(cond ((string-match "^arm[^-]*-([^-]+-)?linux-gnueabihf" triplet)
"armhf-linux")
+ ;; Otherwise it will show up as x86_64-linux... which isn't wrong.
+ ((string-match "x86_64-linux-gnux32" triplet) "x86_64-linux-gnux32")
((string-match "^([^-]+)-([^-]+-)?linux-gnu.*" triplet)
=>
(lambda (m)
@@ -710,6 +713,13 @@ a character other than '@'."
architecture (x86_64)?"
(string-prefix? "x86_64-" target))
+(define* (target-x32? #:optional (target (or (%current-target-system)
+ (%current-system))))
+ "Is the architecture of TARGET a variant of Intel/AMD's 64-bit
+architecture (x86_64) using 32-bit data types?"
+ (and (target-x86-64? target)
+ (string-suffix? "gnux32" target)))
+
(define* (target-x86? #:optional (target (or (%current-target-system)
(%current-system))))
(or (target-x86-32? target) (target-x86-64? target)))
diff --git a/nix/libstore/globals.cc b/nix/libstore/globals.cc
index d4f9a46a74..89add1f107 100644
--- a/nix/libstore/globals.cc
+++ b/nix/libstore/globals.cc
@@ -32,8 +32,8 @@ Settings::Settings()
buildCores = 1;
readOnlyMode = false;
thisSystem = SYSTEM;
- maxSilentTime = 0;
- buildTimeout = 0;
+ maxSilentTime = 3600;
+ buildTimeout = 3600 * 24;
useBuildHook = true;
printBuildTrace = false;
multiplexedBuildOutput = false;
diff --git a/tests/crate.scm b/tests/crate.scm
index 5aea5efaf3..ce2f08aade 100644
--- a/tests/crate.scm
+++ b/tests/crate.scm
@@ -4,6 +4,7 @@
;;; Copyright © 2019, 2020, 2022 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2020 Martin Becze <mjbecze@riseup.net>
;;; Copyright © 2023 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2023 David Elsing <david.elsing@posteo.net>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -24,7 +25,10 @@
#:use-module (guix import crate)
#:use-module (guix base32)
#:use-module (guix build-system cargo)
- #:use-module (gcrypt hash)
+ #:use-module ((gcrypt hash)
+ #:select ((sha256 . gcrypt-sha256)))
+ #:use-module (guix packages)
+ #:use-module (guix read-print)
#:use-module (guix tests)
#:use-module (gnu packages)
#:use-module (ice-9 iconv)
@@ -37,13 +41,18 @@
;; foo-1.0.0
;; foo-1.0.3
;; leaf-alice 0.7.5
+;; bar-1.0.0
+;; leaf-bob 3.0.1
+;; leaf-bob 3.0.2 (dev-dependency)
+;; leaf-bob 4.0.0 (dev-dependency)
;;
;; root-1.0.0
;; root-1.0.4
-;; intermediate-a 1.0.42
-;; intermeidate-b ^1.0.0
+;; intermediate-a 1.0.42
+;; intermediate-b ^1.0.0
;; leaf-alice ^0.7
-;; leaf-bob ^3
+;; leaf-bob ^3
+;; intermediate-c 1 (dev-dependency)
;;
;; intermediate-a-1.0.40
;; intermediate-a-1.0.42
@@ -55,10 +64,15 @@
;; intermediate-b-1.2.3
;; leaf-bob 3.0.1
;;
+;; intermediate-c-1.0.1
+;; leaf-alice 0.7.5 (dev-dependency)
+;;
;; leaf-alice-0.7.3
;; leaf-alice-0.7.5
;;
;; leaf-bob-3.0.1
+;; leaf-bob-3.0.2 (yanked)
+;; leaf-bob-4.0.0 (yanked)
(define test-foo-crate
@@ -111,6 +125,50 @@
]
}")
+(define test-bar-crate
+ "{
+ \"crate\": {
+ \"max_version\": \"1.0.0\",
+ \"name\": \"bar\",
+ \"description\": \"summary\",
+ \"homepage\": \"http://example.com\",
+ \"repository\": \"http://example.com\",
+ \"keywords\": [\"dummy\", \"test\"],
+ \"categories\": [\"test\"],
+ \"actual_versions\": [
+ { \"id\": 234100,
+ \"num\": \"1.0.0\",
+ \"license\": \"MIT OR Apache-2.0\",
+ \"links\": {
+ \"dependencies\": \"/api/v1/crates/bar/1.0.0/dependencies\"
+ },
+ \"yanked\": false
+ }
+ ]
+ }
+}")
+
+(define test-bar-dependencies
+ "{
+ \"dependencies\": [
+ {
+ \"crate_id\": \"leaf-bob\",
+ \"kind\": \"normal\",
+ \"req\": \"3.0.1\"
+ },
+ {
+ \"crate_id\": \"leaf-bob\",
+ \"kind\": \"dev\",
+ \"req\": \"^3.0.2\"
+ },
+ {
+ \"crate_id\": \"leaf-bob\",
+ \"kind\": \"dev\",
+ \"req\": \"^4.0.0\"
+ }
+ ]
+}")
+
(define test-root-crate
"{
\"crate\": {
@@ -164,6 +222,11 @@
\"crate_id\": \"leaf-bob\",
\"kind\": \"normal\",
\"req\": \"^3\"
+ },
+ {
+ \"crate_id\": \"intermediate-c\",
+ \"kind\": \"dev\",
+ \"req\": \"1\"
}
]
}")
@@ -262,6 +325,40 @@
]
}")
+(define test-intermediate-c-crate
+ "{
+ \"crate\": {
+ \"max_version\": \"1.0.1\",
+ \"name\": \"intermediate-c\",
+ \"description\": \"summary\",
+ \"homepage\": \"http://example.com\",
+ \"repository\": \"http://example.com\",
+ \"keywords\": [\"dummy\", \"test\"],
+ \"categories\": [\"test\"],
+ \"actual_versions\": [
+ { \"id\": 234290,
+ \"num\": \"1.0.1\",
+ \"license\": \"MIT OR Apache-2.0\",
+ \"links\": {
+ \"dependencies\": \"/api/v1/crates/intermediate-c/1.0.1/dependencies\"
+ },
+ \"yanked\": false
+ }
+ ]
+ }
+}")
+
+(define test-intermediate-c-dependencies
+ "{
+ \"dependencies\": [
+ {
+ \"crate_id\": \"leaf-alice\",
+ \"kind\": \"dev\",
+ \"req\": \"0.7.5\"
+ }
+ ]
+}")
+
(define test-leaf-alice-crate
"{
\"crate\": {
@@ -316,6 +413,22 @@
\"dependencies\": \"/api/v1/crates/leaf-bob/3.0.1/dependencies\"
},
\"yanked\": false
+ },
+ { \"id\": 234281,
+ \"num\": \"3.0.2\",
+ \"license\": \"MIT OR Apache-2.0\",
+ \"links\": {
+ \"dependencies\": \"/api/v1/crates/leaf-bob/3.0.2/dependencies\"
+ },
+ \"yanked\": true
+ },
+ { \"id\": 234282,
+ \"num\": \"4.0.0\",
+ \"license\": \"MIT OR Apache-2.0\",
+ \"links\": {
+ \"dependencies\": \"/api/v1/crates/leaf-bob/4.0.0/dependencies\"
+ },
+ \"yanked\": true
}
]
}
@@ -355,7 +468,7 @@
("https://crates.io/api/v1/crates/foo/1.0.3/download"
(set! test-source-hash
(bytevector->nix-base32-string
- (sha256 (string->bytevector "empty file\n" "utf-8"))))
+ (gcrypt-sha256 (string->bytevector "empty file\n" "utf-8"))))
(open-input-string "empty file\n"))
("https://crates.io/api/v1/crates/foo/1.0.3/dependencies"
(open-input-string test-foo-dependencies))
@@ -364,7 +477,7 @@
("https://crates.io/api/v1/crates/leaf-alice/0.7.5/download"
(set! test-source-hash
(bytevector->nix-base32-string
- (sha256 (string->bytevector "empty file\n" "utf-8"))))
+ (gcrypt-sha256 (string->bytevector "empty file\n" "utf-8"))))
(open-input-string "empty file\n"))
("https://crates.io/api/v1/crates/leaf-alice/0.7.5/dependencies"
(open-input-string test-leaf-alice-dependencies))
@@ -398,7 +511,7 @@
(pk 'fail x #f)))))
(unless have-guile-semver? (test-skip 1))
-(test-assert "cargo-recursive-import"
+(test-assert "crate-recursive-import"
;; Replace network resources with sample data.
(mock ((guix http-client) http-fetch
(lambda (url . rest)
@@ -408,7 +521,7 @@
("https://crates.io/api/v1/crates/root/1.0.4/download"
(set! test-source-hash
(bytevector->nix-base32-string
- (sha256 (string->bytevector "empty file\n" "utf-8"))))
+ (gcrypt-sha256 (string->bytevector "empty file\n" "utf-8"))))
(open-input-string "empty file\n"))
("https://crates.io/api/v1/crates/root/1.0.4/dependencies"
(open-input-string test-root-dependencies))
@@ -417,7 +530,7 @@
("https://crates.io/api/v1/crates/intermediate-a/1.0.42/download"
(set! test-source-hash
(bytevector->nix-base32-string
- (sha256 (string->bytevector "empty file\n" "utf-8"))))
+ (gcrypt-sha256 (string->bytevector "empty file\n" "utf-8"))))
(open-input-string "empty file\n"))
("https://crates.io/api/v1/crates/intermediate-a/1.0.42/dependencies"
(open-input-string test-intermediate-a-dependencies))
@@ -426,16 +539,25 @@
("https://crates.io/api/v1/crates/intermediate-b/1.2.3/download"
(set! test-source-hash
(bytevector->nix-base32-string
- (sha256 (string->bytevector "empty file\n" "utf-8"))))
+ (gcrypt-sha256 (string->bytevector "empty file\n" "utf-8"))))
(open-input-string "empty file\n"))
("https://crates.io/api/v1/crates/intermediate-b/1.2.3/dependencies"
(open-input-string test-intermediate-b-dependencies))
+ ("https://crates.io/api/v1/crates/intermediate-c"
+ (open-input-string test-intermediate-c-crate))
+ ("https://crates.io/api/v1/crates/intermediate-c/1.0.1/download"
+ (set! test-source-hash
+ (bytevector->nix-base32-string
+ (gcrypt-sha256 (string->bytevector "empty file\n" "utf-8"))))
+ (open-input-string "empty file\n"))
+ ("https://crates.io/api/v1/crates/intermediate-c/1.0.1/dependencies"
+ (open-input-string test-intermediate-c-dependencies))
("https://crates.io/api/v1/crates/leaf-alice"
(open-input-string test-leaf-alice-crate))
("https://crates.io/api/v1/crates/leaf-alice/0.7.5/download"
(set! test-source-hash
(bytevector->nix-base32-string
- (sha256 (string->bytevector "empty file\n" "utf-8"))))
+ (gcrypt-sha256 (string->bytevector "empty file\n" "utf-8"))))
(open-input-string "empty file\n"))
("https://crates.io/api/v1/crates/leaf-alice/0.7.5/dependencies"
(open-input-string test-leaf-alice-dependencies))
@@ -444,7 +566,7 @@
("https://crates.io/api/v1/crates/leaf-bob/3.0.1/download"
(set! test-source-hash
(bytevector->nix-base32-string
- (sha256 (string->bytevector "empty file\n" "utf-8"))))
+ (gcrypt-sha256 (string->bytevector "empty file\n" "utf-8"))))
(open-input-string "empty file\n"))
("https://crates.io/api/v1/crates/leaf-bob/3.0.1/dependencies"
(open-input-string test-leaf-bob-dependencies))
@@ -452,7 +574,27 @@
(match (crate-recursive-import "root")
;; rust-intermediate-b has no dependency on the rust-leaf-alice
;; package, so this is a valid ordering
- (((define-public 'rust-leaf-alice-0.7
+ (((define-public 'rust-intermediate-c-1
+ (package
+ (name "rust-intermediate-c")
+ (version "1.0.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (crate-uri "intermediate-c" version))
+ (file-name
+ (string-append name "-" version ".tar.gz"))
+ (sha256
+ (base32
+ (? string? hash)))))
+ (build-system cargo-build-system)
+ (arguments
+ ('quasiquote (#:skip-build? #t)))
+ (home-page "http://example.com")
+ (synopsis "summary")
+ (description "summary")
+ (license (list license:expat license:asl2.0))))
+ (define-public 'rust-leaf-alice-0.7
(package
(name "rust-leaf-alice")
(version "0.7.5")
@@ -563,10 +705,157 @@
("rust-leaf-alice"
('unquote 'rust-leaf-alice-0.7))
("rust-leaf-bob"
+ ('unquote rust-leaf-bob-3)))
+ #:cargo-development-inputs
+ (("rust-intermediate-c"
+ ('unquote rust-intermediate-c-1))))))
+ (home-page "http://example.com")
+ (synopsis "summary")
+ (description "summary")
+ (license (list license:expat license:asl2.0)))))
+ #t)
+ (x
+ (pk 'fail x #f)))
+ (match (crate-recursive-import "root"
+ #:recursive-dev-dependencies? #t)
+ ;; rust-intermediate-b has no dependency on the rust-leaf-alice
+ ;; package, so this is a valid ordering
+ (((define-public 'rust-intermediate-c-1
+ (package
+ (name "rust-intermediate-c")
+ (version "1.0.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (crate-uri "intermediate-c" version))
+ (file-name
+ (string-append name "-" version ".tar.gz"))
+ (sha256
+ (base32
+ (? string? hash)))))
+ (build-system cargo-build-system)
+ (arguments
+ ('quasiquote (#:cargo-development-inputs
+ (("rust-leaf-alice"
+ ('unquote rust-leaf-alice-0.7))))))
+ (home-page "http://example.com")
+ (synopsis "summary")
+ (description "summary")
+ (license (list license:expat license:asl2.0))))
+ (define-public 'rust-leaf-alice-0.7
+ (package
+ (name "rust-leaf-alice")
+ (version "0.7.5")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (crate-uri "leaf-alice" version))
+ (file-name
+ (string-append name "-" version ".tar.gz"))
+ (sha256
+ (base32
+ (? string? hash)))))
+ (build-system cargo-build-system)
+ (home-page "http://example.com")
+ (synopsis "summary")
+ (description "summary")
+ (license (list license:expat license:asl2.0))))
+ (define-public 'rust-leaf-bob-3
+ (package
+ (name "rust-leaf-bob")
+ (version "3.0.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (crate-uri "leaf-bob" version))
+ (file-name
+ (string-append name "-" version ".tar.gz"))
+ (sha256
+ (base32
+ (? string? hash)))))
+ (build-system cargo-build-system)
+ (home-page "http://example.com")
+ (synopsis "summary")
+ (description "summary")
+ (license (list license:expat license:asl2.0))))
+ (define-public 'rust-intermediate-b-1
+ (package
+ (name "rust-intermediate-b")
+ (version "1.2.3")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (crate-uri "intermediate-b" version))
+ (file-name
+ (string-append name "-" version ".tar.gz"))
+ (sha256
+ (base32
+ (? string? hash)))))
+ (build-system cargo-build-system)
+ (arguments
+ ('quasiquote (#:cargo-inputs
+ (("rust-leaf-bob"
+ ('unquote rust-leaf-bob-3))))))
+ (home-page "http://example.com")
+ (synopsis "summary")
+ (description "summary")
+ (license (list license:expat license:asl2.0))))
+ (define-public 'rust-intermediate-a-1
+ (package
+ (name "rust-intermediate-a")
+ (version "1.0.42")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (crate-uri "intermediate-a" version))
+ (file-name
+ (string-append name "-" version ".tar.gz"))
+ (sha256
+ (base32
+ (? string? hash)))))
+ (build-system cargo-build-system)
+ (arguments
+ ('quasiquote (#:cargo-inputs
+ (("rust-intermediate-b"
+ ('unquote rust-intermediate-b-1))
+ ("rust-leaf-alice"
+ ('unquote 'rust-leaf-alice-0.7))
+ ("rust-leaf-bob"
('unquote rust-leaf-bob-3))))))
(home-page "http://example.com")
(synopsis "summary")
(description "summary")
+ (license (list license:expat license:asl2.0))))
+ (define-public 'rust-root-1
+ (package
+ (name "rust-root")
+ (version "1.0.4")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (crate-uri "root" version))
+ (file-name
+ (string-append name "-" version ".tar.gz"))
+ (sha256
+ (base32
+ (? string? hash)))))
+ (build-system cargo-build-system)
+ (arguments
+ ('quasiquote (#:cargo-inputs
+ (("rust-intermediate-a"
+ ('unquote rust-intermediate-a-1))
+ ("rust-intermediate-b"
+ ('unquote rust-intermediate-b-1))
+ ("rust-leaf-alice"
+ ('unquote 'rust-leaf-alice-0.7))
+ ("rust-leaf-bob"
+ ('unquote rust-leaf-bob-3)))
+ #:cargo-development-inputs
+ (("rust-intermediate-c"
+ ('unquote rust-intermediate-c-1))))))
+ (home-page "http://example.com")
+ (synopsis "summary")
+ (description "summary")
(license (list license:expat license:asl2.0)))))
#t)
(x
@@ -594,69 +883,209 @@
-(define test-doctool-crate
- "{
- \"crate\": {
- \"max_version\": \"2.2.2\",
- \"name\": \"leaf-bob\",
- \"description\": \"summary\",
- \"homepage\": \"http://example.com\",
- \"repository\": \"http://example.com\",
- \"keywords\": [\"dummy\", \"test\"],
- \"categories\": [\"test\"]
- \"actual_versions\": [
- { \"id\": 234280,
- \"num\": \"2.2.2\",
- \"license\": \"MIT OR Apache-2.0\",
- \"links\": {
- \"dependencies\": \"/api/v1/crates/doctool/2.2.2/dependencies\"
- },
- \"yanked\": false
- }
- ]
- }
-}")
+(define rust-leaf-bob-3
+ (package
+ (name "rust-leaf-bob")
+ (version "3.0.1")
+ (source #f)
+ (build-system #f)
+ (home-page #f)
+ (synopsis #f)
+ (description #f)
+ (license #f)))
-;; FIXME: This test depends on some existing packages
-(define test-doctool-dependencies
- "{
- \"dependencies\": [
- {
- \"crate_id\": \"docopt\",
- \"kind\": \"normal\",
- \"req\": \"^0.8.1\"
- }
- ]
-}")
+(define rust-leaf-bob-3.0.2-yanked
+ (package
+ (name "rust-leaf-bob")
+ (version "3.0.2")
+ (source #f)
+ (properties '((crate-version-yanked? . #t)))
+ (build-system #f)
+ (home-page #f)
+ (synopsis #f)
+ (description #f)
+ (license #f)))
-
-(test-assert "self-test: rust-docopt 0.8.x is gone, please adjust the test case"
- (not (null? (find-packages-by-name "rust-docopt" "0.8"))))
+(unless have-guile-semver? (test-skip 1))
+(test-assert "crate-recursive-import-honors-existing-packages"
+ (mock
+ ((gnu packages) find-packages-by-name
+ (lambda* (name #:optional version)
+ (match name
+ ("rust-leaf-bob"
+ (list rust-leaf-bob-3 rust-leaf-bob-3.0.2-yanked))
+ (_ '()))))
+ (mock
+ ((guix http-client) http-fetch
+ (lambda (url . rest)
+ (match url
+ ("https://crates.io/api/v1/crates/bar"
+ (open-input-string test-bar-crate))
+ ("https://crates.io/api/v1/crates/bar/1.0.0/download"
+ (set! test-source-hash
+ (bytevector->nix-base32-string
+ (gcrypt-sha256 (string->bytevector "empty file\n" "utf-8"))))
+ (open-input-string "empty file\n"))
+ ("https://crates.io/api/v1/crates/bar/1.0.0/dependencies"
+ (open-input-string test-bar-dependencies))
+ ("https://crates.io/api/v1/crates/leaf-bob"
+ (open-input-string test-leaf-bob-crate))
+ ("https://crates.io/api/v1/crates/leaf-bob/3.0.2/download"
+ (set! test-source-hash
+ (bytevector->nix-base32-string
+ (gcrypt-sha256 (string->bytevector "empty file\n" "utf-8"))))
+ (open-input-string "empty file\n"))
+ ("https://crates.io/api/v1/crates/leaf-bob/3.0.2/dependencies"
+ (open-input-string test-leaf-bob-dependencies))
+ ("https://crates.io/api/v1/crates/leaf-bob/4.0.0/download"
+ (set! test-source-hash
+ (bytevector->nix-base32-string
+ (gcrypt-sha256 (string->bytevector "empty file\n" "utf-8"))))
+ (open-input-string "empty file\n"))
+ ("https://crates.io/api/v1/crates/leaf-bob/4.0.0/dependencies"
+ (open-input-string test-leaf-bob-dependencies))
+ (_ (error "Unexpected URL: " url)))))
+ (match (crate-recursive-import "bar"
+ #:allow-yanked? #t)
+ (((define-public 'rust-bar-1
+ (package
+ (name "rust-bar")
+ (version "1.0.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (crate-uri "bar" version))
+ (file-name
+ (string-append name "-" version ".tar.gz"))
+ (sha256
+ (base32
+ (? string? hash)))))
+ (build-system cargo-build-system)
+ (arguments
+ ('quasiquote (#:cargo-inputs
+ (("rust-leaf-bob"
+ ('unquote 'rust-leaf-bob-3)))
+ #:cargo-development-inputs
+ (("rust-leaf-bob"
+ ('unquote 'rust-leaf-bob-3.0.2-yanked))
+ ("rust-leaf-bob"
+ ('unquote 'rust-leaf-bob-4.0.0-yanked))))))
+ (home-page "http://example.com")
+ (synopsis "summary")
+ (description "summary")
+ (license (list license:expat license:asl2.0)))))
+ #t)
+ (x
+ (pk 'fail x #f))))))
(unless have-guile-semver? (test-skip 1))
-(test-assert "cargo-recursive-import-hoors-existing-packages"
- (mock ((guix http-client) http-fetch
- (lambda (url . rest)
- (match url
- ("https://crates.io/api/v1/crates/doctool"
- (open-input-string test-doctool-crate))
- ("https://crates.io/api/v1/crates/doctool/2.2.2/download"
- (set! test-source-hash
- (bytevector->nix-base32-string
- (sha256 (string->bytevector "empty file\n" "utf-8"))))
- (open-input-string "empty file\n"))
- ("https://crates.io/api/v1/crates/doctool/2.2.2/dependencies"
- (open-input-string test-doctool-dependencies))
- (_ (error "Unexpected URL: " url)))))
- (match (crate-recursive-import "doctool")
- (((define-public 'rust-doctool-2
+(test-assert "crate-import-only-yanked-available"
+ (mock
+ ((guix http-client) http-fetch
+ (lambda (url . rest)
+ (match url
+ ("https://crates.io/api/v1/crates/bar"
+ (open-input-string test-bar-crate))
+ ("https://crates.io/api/v1/crates/bar/1.0.0/download"
+ (set! test-source-hash
+ (bytevector->nix-base32-string
+ (gcrypt-sha256 (string->bytevector "empty file\n" "utf-8"))))
+ (open-input-string "empty file\n"))
+ ("https://crates.io/api/v1/crates/bar/1.0.0/dependencies"
+ (open-input-string test-bar-dependencies))
+ ("https://crates.io/api/v1/crates/leaf-bob"
+ (open-input-string test-leaf-bob-crate))
+ ("https://crates.io/api/v1/crates/leaf-bob/3.0.1/download"
+ (set! test-source-hash
+ (bytevector->nix-base32-string
+ (gcrypt-sha256 (string->bytevector "empty file\n" "utf-8"))))
+ (open-input-string "empty file\n"))
+ ("https://crates.io/api/v1/crates/leaf-bob/3.0.1/dependencies"
+ (open-input-string test-leaf-bob-dependencies))
+ ("https://crates.io/api/v1/crates/leaf-bob/3.0.2/download"
+ (set! test-source-hash
+ (bytevector->nix-base32-string
+ (gcrypt-sha256 (string->bytevector "empty file\n" "utf-8"))))
+ (open-input-string "empty file\n"))
+ ("https://crates.io/api/v1/crates/leaf-bob/3.0.2/dependencies"
+ (open-input-string test-leaf-bob-dependencies))
+ ("https://crates.io/api/v1/crates/leaf-bob/4.0.0/download"
+ (set! test-source-hash
+ (bytevector->nix-base32-string
+ (gcrypt-sha256 (string->bytevector "empty file\n" "utf-8"))))
+ (open-input-string "empty file\n"))
+ ("https://crates.io/api/v1/crates/leaf-bob/4.0.0/dependencies"
+ (open-input-string test-leaf-bob-dependencies))
+ (_ (error "Unexpected URL: " url)))))
+ (match (crate-recursive-import "bar"
+ #:recursive-dev-dependencies? #t
+ #:allow-yanked? #t)
+ (((define-public 'rust-leaf-bob-4.0.0-yanked
+ (package
+ (name "rust-leaf-bob")
+ (version "4.0.0")
+ ($ <comment> "; This version was yanked!\n" #t)
+ (source
+ (origin
+ (method url-fetch)
+ (uri (crate-uri "leaf-bob" version))
+ (file-name
+ (string-append name "-" version ".tar.gz"))
+ (sha256
+ (base32
+ (? string? hash)))))
+ (properties ('quote (('crate-version-yanked? . #t))))
+ (build-system cargo-build-system)
+ (home-page "http://example.com")
+ (synopsis "summary")
+ (description "summary")
+ (license (list license:expat license:asl2.0))))
+ (define-public 'rust-leaf-bob-3.0.2-yanked
(package
- (name "rust-doctool")
- (version "2.2.2")
+ (name "rust-leaf-bob")
+ (version "3.0.2")
+ ($ <comment> "; This version was yanked!\n" #t)
+ (source
+ (origin
+ (method url-fetch)
+ (uri (crate-uri "leaf-bob" version))
+ (file-name
+ (string-append name "-" version ".tar.gz"))
+ (sha256
+ (base32
+ (? string? hash)))))
+ (properties ('quote (('crate-version-yanked? . #t))))
+ (build-system cargo-build-system)
+ (home-page "http://example.com")
+ (synopsis "summary")
+ (description "summary")
+ (license (list license:expat license:asl2.0))))
+ (define-public 'rust-leaf-bob-3
+ (package
+ (name "rust-leaf-bob")
+ (version "3.0.1")
(source
(origin
(method url-fetch)
- (uri (crate-uri "doctool" version))
+ (uri (crate-uri "leaf-bob" version))
+ (file-name
+ (string-append name "-" version ".tar.gz"))
+ (sha256
+ (base32
+ (? string? hash)))))
+ (build-system cargo-build-system)
+ (home-page "http://example.com")
+ (synopsis "summary")
+ (description "summary")
+ (license (list license:expat license:asl2.0))))
+ (define-public 'rust-bar-1
+ (package
+ (name "rust-bar")
+ (version "1.0.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (crate-uri "bar" version))
(file-name
(string-append name "-" version ".tar.gz"))
(sha256
@@ -665,14 +1094,19 @@
(build-system cargo-build-system)
(arguments
('quasiquote (#:cargo-inputs
- (("rust-docopt"
- ('unquote 'rust-docopt-0.8))))))
+ (("rust-leaf-bob"
+ ('unquote 'rust-leaf-bob-3)))
+ #:cargo-development-inputs
+ (("rust-leaf-bob"
+ ('unquote 'rust-leaf-bob-3.0.2-yanked))
+ ("rust-leaf-bob"
+ ('unquote 'rust-leaf-bob-4.0.0-yanked))))))
(home-page "http://example.com")
(synopsis "summary")
(description "summary")
(license (list license:expat license:asl2.0)))))
#t)
(x
- (pk 'fail x #f)))))
+ (pk 'fail (pretty-print-with-comments (current-output-port) x) #f)))))
(test-end "crate")
diff --git a/tests/pack.scm b/tests/pack.scm
index ac78817a70..55445ea1e9 100644
--- a/tests/pack.scm
+++ b/tests/pack.scm
@@ -2,6 +2,7 @@
;;; Copyright © 2017-2021, 2023 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2021, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2023 Oleg Pykhalov <go.wigust@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -29,6 +30,7 @@
#:use-module (guix gexp)
#:use-module (guix modules)
#:use-module (guix utils)
+ #:use-module ((guix build utils) #:select (%store-directory))
#:use-module (gnu packages)
#:use-module ((gnu packages base) #:select (libc-utf8-locales-for-target))
#:use-module (gnu packages bootstrap)
@@ -251,6 +253,54 @@
(built-derivations (list check))))
(unless store (test-skip 1))
+ (test-assertm "docker-layered-image + localstatedir"
+ (mlet* %store-monad
+ ((guile (set-guile-for-build (default-guile)))
+ (profile -> (profile
+ (content (packages->manifest (list %bootstrap-guile)))
+ (hooks '())
+ (locales? #f)))
+ (tarball (docker-image "docker-pack" profile
+ #:symlinks '(("/bin/Guile" -> "bin/guile"))
+ #:localstatedir? #t
+ #:max-layers 100))
+ (check (gexp->derivation
+ "check-tarball"
+ (with-imported-modules '((guix build utils))
+ #~(begin
+ (use-modules (guix build utils)
+ (ice-9 match))
+
+ (define bin
+ (string-append "." #$profile "/bin"))
+
+ (define store
+ (string-append "." #$(%store-directory)))
+
+ (setenv "PATH" (string-append #$%tar-bootstrap "/bin"))
+ (mkdir "base")
+ (with-directory-excursion "base"
+ (invoke "tar" "xvf" #$tarball))
+
+ (match (find-files "base" "layer.tar")
+ ((layers ...)
+ (for-each (lambda (layer)
+ (invoke "tar" "xvf" layer)
+ (invoke "chmod" "--recursive" "u+w" store))
+ layers)))
+
+ (when
+ (and (file-exists? (string-append bin "/guile"))
+ (file-exists? "var/guix/db/db.sqlite")
+ (file-is-directory? "tmp")
+ (string=? (string-append #$%bootstrap-guile "/bin")
+ (readlink bin))
+ (string=? (string-append #$profile "/bin/guile")
+ (readlink "bin/Guile")))
+ (mkdir #$output)))))))
+ (built-derivations (list check))))
+
+ (unless store (test-skip 1))
(test-assertm "squashfs-image + localstatedir"
(mlet* %store-monad
((guile (set-guile-for-build (default-guile)))