summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile.am52
-rw-r--r--NEWS2
-rw-r--r--doc/guix.texi54
-rwxr-xr-xetc/guix-install.sh2
-rw-r--r--etc/news.scm72
-rw-r--r--gnu/build/install.scm60
-rw-r--r--gnu/build/marionette.scm1
-rw-r--r--gnu/home/services/mcron.scm47
-rw-r--r--gnu/home/services/shells.scm2
-rw-r--r--gnu/local.mk2
-rw-r--r--gnu/packages/admin.scm15
-rw-r--r--gnu/packages/audio.scm44
-rw-r--r--gnu/packages/avr.scm8
-rw-r--r--gnu/packages/bioinformatics.scm25
-rw-r--r--gnu/packages/check.scm3
-rw-r--r--gnu/packages/chromium.scm14
-rw-r--r--gnu/packages/cpp.scm8
-rw-r--r--gnu/packages/crates-io.scm4
-rw-r--r--gnu/packages/crypto.scm4
-rw-r--r--gnu/packages/databases.scm2
-rw-r--r--gnu/packages/dns.scm4
-rw-r--r--gnu/packages/emacs-xyz.scm167
-rw-r--r--gnu/packages/freedesktop.scm7
-rw-r--r--gnu/packages/geo.scm106
-rw-r--r--gnu/packages/gnuzilla.scm20
-rw-r--r--gnu/packages/guile-xyz.scm92
-rw-r--r--gnu/packages/image.scm2
-rw-r--r--gnu/packages/lisp-xyz.scm251
-rw-r--r--gnu/packages/llvm.scm305
-rw-r--r--gnu/packages/package-management.scm98
-rw-r--r--gnu/packages/patches/clang-15.0-libc-search-path.patch95
-rw-r--r--gnu/packages/patches/giara-fix-login.patch27
-rw-r--r--gnu/packages/python-web.scm9
-rw-r--r--gnu/packages/python-xyz.scm16
-rw-r--r--gnu/packages/rust.scm34
-rw-r--r--gnu/packages/shellutils.scm57
-rw-r--r--gnu/packages/syndication.scm50
-rw-r--r--gnu/packages/vim.scm4
-rw-r--r--gnu/services/configuration.scm10
-rw-r--r--gnu/services/mcron.scm47
-rw-r--r--gnu/services/monitoring.scm6
-rw-r--r--gnu/services/version-control.scm2
-rw-r--r--gnu/services/web.scm37
-rw-r--r--gnu/tests/base.scm8
-rw-r--r--guix/download.scm2
-rw-r--r--guix/gnu-maintenance.scm4
-rw-r--r--guix/import/cran.scm1
-rw-r--r--guix/scripts/environment.scm303
-rw-r--r--guix/scripts/pack.scm190
-rw-r--r--guix/scripts/shell.scm77
-rw-r--r--tests/guix-environment-container.sh12
-rw-r--r--tests/guix-pack.sh2
-rw-r--r--tests/guix-shell.sh3
53 files changed, 1659 insertions, 810 deletions
diff --git a/Makefile.am b/Makefile.am
index 47886721fa..c3af23b68e 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -660,49 +660,49 @@ dist_fishcompletion_DATA = etc/completion/fish/guix.fish
nodist_selinux_policy_DATA = etc/guix-daemon.cil
EXTRA_DIST += \
- HACKING \
- ROADMAP \
- TODO \
- CODE-OF-CONDUCT \
.dir-locals.el \
.guix-authorizations \
.guix-channel \
- scripts/guix.in \
- etc/disarchive-manifest.scm \
- etc/guix-install.sh \
- etc/news.scm \
- etc/release-manifest.scm \
- etc/source-manifest.scm \
- etc/system-tests.scm \
- etc/time-travel-manifest.scm \
- etc/historical-authorizations \
+ CODE-OF-CONDUCT \
+ HACKING \
+ ROADMAP \
+ TODO \
+ bootstrap \
build-aux/build-self.scm \
- build-aux/compile-all.scm \
- build-aux/cuirass/hurd-manifest.scm \
- build-aux/check-final-inputs-self-contained.scm \
build-aux/check-channel-news.scm \
+ build-aux/check-final-inputs-self-contained.scm \
+ build-aux/compile-all.scm \
build-aux/compile-as-derivation.scm \
+ build-aux/config.rpath \
build-aux/convert-xref.scm \
+ build-aux/cuirass/hurd-manifest.scm \
build-aux/generate-authors.scm \
build-aux/test-driver.scm \
- build-aux/update-guix-package.scm \
build-aux/update-NEWS.scm \
- tests/test.drv \
+ build-aux/update-guix-package.scm \
+ doc/build.scm \
+ etc/disarchive-manifest.scm \
+ etc/guix-install.sh \
+ etc/historical-authorizations \
+ etc/news.scm \
+ etc/release-manifest.scm \
+ etc/source-manifest.scm \
+ etc/system-tests.scm \
+ etc/time-travel-manifest.scm \
+ scripts/guix.in \
tests/cve-sample.json \
- tests/keys/signing-key.pub \
- tests/keys/signing-key.sec \
tests/keys/civodul.pub \
- tests/keys/rsa.pub \
tests/keys/dsa.pub \
- tests/keys/ed25519.pub \
- tests/keys/ed25519.sec \
tests/keys/ed25519-2.pub \
tests/keys/ed25519-2.sec \
tests/keys/ed25519-3.pub \
tests/keys/ed25519-3.sec \
- build-aux/config.rpath \
- bootstrap \
- doc/build.scm \
+ tests/keys/ed25519.pub \
+ tests/keys/ed25519.sec \
+ tests/keys/rsa.pub \
+ tests/keys/signing-key.pub \
+ tests/keys/signing-key.sec \
+ tests/test.drv \
$(TESTS)
if !BUILD_DAEMON_OFFLOAD
diff --git a/NEWS b/NEWS
index 3dd88893de..b1eaf896db 100644
--- a/NEWS
+++ b/NEWS
@@ -32,6 +32,7 @@ Please send Guix bug reports to bug-guix@gnu.org.
*** ‘guix graph’ has a new ‘--max-depth’ option
*** ‘guix deploy’ has a new ‘--execute’ option
*** ‘guix shell’ has a new ‘--emulate-fhs’ option
+*** ‘guix shell’ has a new ‘--symlink’ option
*** ‘--with-commit’ option now accepts strings returned by ‘git describe’
*** Align tabular data output by commands like ‘guix package --list-available’
*** Improved ‘guix import go’ importer via a new PEG parser
@@ -76,6 +77,7 @@ Please send Guix bug reports to bug-guix@gnu.org.
*** The GNU Shepherd was upgraded to 0.9.2
*** The init RAM disk honors more arguments—e.g. ‘root’ and ‘rootflags’
*** ‘guix system image’ can now generate WSL images
+*** The mcron task scheduler logs now contain the jobs exit statuses
** Programming interfaces
*** Package input fields can now plain package lists
*** G-expressions can now be used in build phases
diff --git a/doc/guix.texi b/doc/guix.texi
index 75b7f4adcb..ef3b8e127e 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -49,7 +49,7 @@ Copyright @copyright{} 2017 humanitiesNerd@*
Copyright @copyright{} 2017, 2021 Christine Lemmer-Webber@*
Copyright @copyright{} 2017, 2018, 2019, 2020, 2021, 2022 Marius Bakke@*
Copyright @copyright{} 2017, 2019, 2020, 2022 Hartmut Goebel@*
-Copyright @copyright{} 2017, 2019, 2020, 2021 Maxim Cournoyer@*
+Copyright @copyright{} 2017, 2019, 2020, 2021, 2022 Maxim Cournoyer@*
Copyright @copyright{} 2017–2022 Tobias Geerinckx-Rice@*
Copyright @copyright{} 2017 George Clemmer@*
Copyright @copyright{} 2017 Andy Wingo@*
@@ -6246,6 +6246,12 @@ directory:
guix shell --container --expose=$HOME=/exchange guile -- guile
@end example
+@cindex symbolic links, guix shell
+@item --symlink=@var{spec}
+@itemx -S @var{spec}
+For containers, create the symbolic links specified by @var{spec}, as
+documented in @ref{pack-symlink-option}.
+
@cindex file system hierarchy standard (FHS)
@cindex FHS (file system hierarchy standard)
@item --emulate-fhs
@@ -7038,6 +7044,7 @@ Compress the resulting tarball using @var{tool}---one of @code{gzip},
@code{zstd}, @code{bzip2}, @code{xz}, @code{lzip}, or @code{none} for no
compression.
+@anchor{pack-symlink-option}
@item --symlink=@var{spec}
@itemx -S @var{spec}
Add the symlinks specified by @var{spec} to the pack. This option can
@@ -19012,20 +19019,33 @@ words, it is possible to define services that provide additional mcron
jobs to run.
@end defvr
+@c Generated via (generate-documentation) at the bottom of (gnu services
+@c mcron).
+@c %start of fragment
@deftp {Data Type} mcron-configuration
-Data type representing the configuration of mcron.
+Available @code{mcron-configuration} fields are:
@table @asis
-@item @code{mcron} (default: @var{mcron})
+@item @code{mcron} (default: @code{mcron}) (type: file-like)
The mcron package to use.
-@item @code{jobs}
+@item @code{jobs} (default: @code{()}) (type: list-of-gexps)
This is a list of gexps (@pxref{G-Expressions}), where each gexp
corresponds to an mcron job specification (@pxref{Syntax, mcron job
-specifications,, mcron, GNU@tie{}mcron}).
+specifications,, mcron,GNU@tie{}mcron}).
+
+@item @code{log?} (default: @code{#t}) (type: boolean)
+Log messages to standard output.
+
+@item @code{log-format} (default: @code{"~1@@*~a ~a: ~a~%"}) (type: string)
+@code{(ice-9 format)} format string for log messages. The default value
+produces messages like "@samp{@var{pid} @var{name}: @var{message}"}
+(@pxref{Invoking mcron, Invoking,, mcron,GNU@tie{}mcron}). Each message
+is also prefixed by a timestamp by GNU Shepherd.
+
@end table
@end deftp
-
+@c %end of fragment
@node Log Rotation
@subsection Log Rotation
@@ -41061,18 +41081,32 @@ jobs to run.
@end defvr
@deftp {Data Type} home-mcron-configuration
-Data type representing the configuration of mcron.
+Available @code{home-mcron-configuration} fields are:
+@c Auto-generated with (gnu home services mcron)'s
+@c generate-documentation procedure.
+@c %start of fragment
@table @asis
-@item @code{mcron} (default: @var{mcron})
+@item @code{mcron} (default: @code{mcron}) (type: file-like)
The mcron package to use.
-@item @code{jobs}
+@item @code{jobs} (default: @code{()}) (type: list-of-gexps)
This is a list of gexps (@pxref{G-Expressions}), where each gexp
corresponds to an mcron job specification (@pxref{Syntax, mcron job
-specifications,, mcron, GNU@tie{}mcron}).
+specifications,, mcron,GNU@tie{}mcron}).
+
+@item @code{log?} (default: @code{#t}) (type: boolean)
+Log messages to standard output.
+
+@item @code{log-format} (default: @code{"~1@@*~a ~a: ~a~%"}) (type: string)
+@code{(ice-9 format)} format string for log messages. The default value
+produces messages like "@samp{@var{pid} @var{name}: @var{message}"}
+(@pxref{Invoking mcron, Invoking,, mcron,GNU@tie{}mcron}). Each message
+is also prefixed by a timestamp by GNU Shepherd.
+
@end table
@end deftp
+@c %end of fragment
@node Power Management Home Services
@subsection Power Management Home Services
diff --git a/etc/guix-install.sh b/etc/guix-install.sh
index 88ca0e61ea..6bef21bb7e 100755
--- a/etc/guix-install.sh
+++ b/etc/guix-install.sh
@@ -633,7 +633,7 @@ main()
_msg "${INF}system is ${ARCH_OS}"
umask 0022
- tmp_path="$(mktemp -t -d guix.XXX)"
+ tmp_path="$(mktemp -t -d guix.XXXXXX)"
if [ -z "${GUIX_BINARY_FILE_NAME}" ]; then
guix_get_bin_list "${GNU_URL}"
diff --git a/etc/news.scm b/etc/news.scm
index fa962b1db8..a64572dfea 100644
--- a/etc/news.scm
+++ b/etc/news.scm
@@ -26,20 +26,42 @@
(channel-news
(version 0)
+ (entry (commit "788602b37ff42f730d4b7b569b0fb51465f147da")
+ (title
+ (en "New @option{--symlink} option for @command{guix shell}")
+ (de "Neue Option @option{--symlink} für @command{guix shell}")
+ (fr "Nouvelle option @option{--symlink} pour @command{guix shell}"))
+ (body
+ (en "The @command{guix shell} command has a new
+@option{--symlink} (or @option{-S}) option, to be used in conjunction with the
+@option{--container} (or @option{-C}) option to create a symbolic link inside
+the container. Run @command{info \"(guix) Invoking guix shell\"} for more
+information.")
+ (de "Der Befehl @command{guix shell} verfügt jetzt über eine neue
+Befehlszeilenoption @option{--symlink} (oder @option{-S}), die zusammen mit der
+Option @option{--container} (oder @option{-C}) benutzt werden kann, um eine
+symbolische Verknüpfung im Container anzulegen. Führen Sie
+@command{info \"(guix.de) Aufruf von guix shell\"} aus, um mehr zu erfahren.")
+ (fr "La commande @command{guix shell} dispose d'une nouvelle option,
+@option{--symlink} (ou @option{-S}), qui doit être utilisée en conjonction
+avec l'option @option{--container} (ou @option{-C}) pour créer un lien
+symbolique dans le conteneur. Lancer @command{info \"(guix.fr) Invoquer guix
+shell\"} pour plus d'informations.")))
+
(entry (commit "82a0a395d7051eab7b9f15ec4740d58c86413604")
(title
- (en "Linux-libre kernel updated to 6.0")
- (de "Linux-libre-Kernel wird auf 6.0 aktualisiert")
- (fr "Le noyau linux-libre est mis à jour vers la 6.0")
- (pt "Kernel linux-libre atualizado para 6.0"))
+ (en "Linux-libre kernel updated to 6.0")
+ (de "Linux-libre-Kernel wird auf 6.0 aktualisiert")
+ (fr "Le noyau linux-libre est mis à jour vers la 6.0")
+ (pt "Kernel linux-libre atualizado para 6.0"))
(body
- (en "The default version of the linux-libre kernel has been
+ (en "The default version of the linux-libre kernel has been
updated to the 6.0 release series.")
- (de "Der standardmäßig verwendete @code{linux-libre}-Kernel basiert
+ (de "Der standardmäßig verwendete @code{linux-libre}-Kernel basiert
jetzt auf der 6.0-Versionsreihe.")
- (fr "La version par défaut du noyau linux-libre est mise à jour
+ (fr "La version par défaut du noyau linux-libre est mise à jour
vers la série des 6.0.")
- (pt "A versão padrão do kernel linux-libre foi atualizada para a
+ (pt "A versão padrão do kernel linux-libre foi atualizada para a
série do kernel 6.0.")))
(entry (commit "400a7a4c80efbde1905ae98a298bbb5882d46a0d")
@@ -338,18 +360,18 @@ uma transformação, como por exemplo
(entry (commit "c188cf57f161c0c26e2d7c8516bd1ddd1492d686")
(title
- (en "Linux-libre kernel updated to 5.19")
- (de "Linux-libre-Kernel wird auf 5.19 aktualisiert")
- (fr "Le noyau linux-libre est mis à jour vers la 5.19")
- (pt "Kernel linux-libre atualizado para 5.19"))
+ (en "Linux-libre kernel updated to 5.19")
+ (de "Linux-libre-Kernel wird auf 5.19 aktualisiert")
+ (fr "Le noyau linux-libre est mis à jour vers la 5.19")
+ (pt "Kernel linux-libre atualizado para 5.19"))
(body
- (en "The default version of the linux-libre kernel has been
+ (en "The default version of the linux-libre kernel has been
updated to the 5.19 release series.")
- (de "Der standardmäßig verwendete @code{linux-libre}-Kernel basiert
+ (de "Der standardmäßig verwendete @code{linux-libre}-Kernel basiert
jetzt auf der 5.19-Versionsreihe.")
- (fr "La version par défaut du noyau linux-libre est mise à jour
+ (fr "La version par défaut du noyau linux-libre est mise à jour
vers la série des 5.19.")
- (pt "A versão padrão do kernel linux-libre foi atualizada para a
+ (pt "A versão padrão do kernel linux-libre foi atualizada para a
série do kernel 5.19.")))
(entry (commit "a15542d26df42dabdb5e2f76d150ae200230c3b0")
@@ -391,15 +413,15 @@ Execute @command{info \"(guix) Invoking guix style\"} para mais informações.")
(entry (commit "2ec7ab2610eb67e26dab52b671eb29e46f64ea0f")
(title
- (en "Linux-libre kernel updated to 5.18")
- (de "Linux-libre-Kernel wird auf 5.18 aktualisiert")
- (fr "Le noyau linux-libre est mis à jour vers la 5.18"))
+ (en "Linux-libre kernel updated to 5.18")
+ (de "Linux-libre-Kernel wird auf 5.18 aktualisiert")
+ (fr "Le noyau linux-libre est mis à jour vers la 5.18"))
(body
- (en "The default version of the linux-libre kernel has been
+ (en "The default version of the linux-libre kernel has been
updated to the 5.18 release series.")
- (de "Der standardmäßig verwendete @code{linux-libre}-Kernel basiert
+ (de "Der standardmäßig verwendete @code{linux-libre}-Kernel basiert
jetzt auf der 5.18-Versionsreihe.")
- (fr "La version par défaut du noyau linux-libre est mise à jour
+ (fr "La version par défaut du noyau linux-libre est mise à jour
vers la série des 5.18.")))
(entry (commit "bdf422176739b473add66eb8cac9fdd8c654f794")
@@ -531,11 +553,11 @@ Cela vient avec un nouveau système de construction pour paquets Elm---lancer
(de "Linux-libre-Kernel wird auf 5.17 aktualisiert")
(fr "Le noyau linux-libre est mis à jour vers la 5.17"))
(body
- (en "The default version of the linux-libre kernel has been
+ (en "The default version of the linux-libre kernel has been
updated to the 5.17 release series.")
- (de "Der standardmäßig verwendete @code{linux-libre}-Kernel basiert
+ (de "Der standardmäßig verwendete @code{linux-libre}-Kernel basiert
jetzt auf der 5.17-Versionsreihe.")
- (fr "La version par défaut du noyau linux-libre est mise à jour
+ (fr "La version par défaut du noyau linux-libre est mise à jour
vers la série des 5.17.")))
(entry (commit "c42b7baf13c7633b4512e94da7445299c57b247d")
diff --git a/gnu/build/install.scm b/gnu/build/install.scm
index f5c8407b89..33a9616c0d 100644
--- a/gnu/build/install.scm
+++ b/gnu/build/install.scm
@@ -1,6 +1,7 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2016 Chris Marusich <cmmarusich@gmail.com>
+;;; Copyright © 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -56,19 +57,24 @@ that the fonts, background images, etc. referred to by BOOTCFG are not GC'd."
(define* (evaluate-populate-directive directive target
#:key
(default-gid 0)
- (default-uid 0))
+ (default-uid 0)
+ (error-on-dangling-symlink? #t))
"Evaluate DIRECTIVE, an sexp describing a file or directory to create under
directory TARGET. DEFAULT-UID and DEFAULT-GID are the default UID and GID in
the context of the caller. If the directive matches those defaults then,
-'chown' won't be run."
+'chown' won't be run. When ERROR-ON-DANGLING-SYMLINK? is true, abort with an
+error when a dangling symlink would be created."
+ (define target* (if (string-suffix? "/" target)
+ target
+ (string-append target "/")))
(let loop ((directive directive))
(catch 'system-error
(lambda ()
(match directive
(('directory name)
- (mkdir-p (string-append target name)))
+ (mkdir-p (string-append target* name)))
(('directory name uid gid)
- (let ((dir (string-append target name)))
+ (let ((dir (string-append target* name)))
(mkdir-p dir)
;; If called from a context without "root" permissions, "chown"
;; to root will fail. In that case, do not try to run "chown"
@@ -78,27 +84,38 @@ the context of the caller. If the directive matches those defaults then,
(chown dir uid gid))))
(('directory name uid gid mode)
(loop `(directory ,name ,uid ,gid))
- (chmod (string-append target name) mode))
+ (chmod (string-append target* name) mode))
(('file name)
- (call-with-output-file (string-append target name)
+ (call-with-output-file (string-append target* name)
(const #t)))
(('file name (? string? content))
- (call-with-output-file (string-append target name)
+ (call-with-output-file (string-append target* name)
(lambda (port)
(display content port))))
((new '-> old)
- (let try ()
- (catch 'system-error
- (lambda ()
- (symlink old (string-append target new)))
- (lambda args
- ;; When doing 'guix system init' on the current '/', some
- ;; symlinks may already exists. Override them.
- (if (= EEXIST (system-error-errno args))
- (begin
- (delete-file (string-append target new))
- (try))
- (apply throw args))))))))
+ (let ((new* (string-append target* new)))
+ (let try ()
+ (catch 'system-error
+ (lambda ()
+ (when error-on-dangling-symlink?
+ ;; When the symbolic link points to a relative path,
+ ;; checking if its target exists must be done relatively
+ ;; to the link location.
+ (unless (if (string-prefix? "/" old)
+ (file-exists? old)
+ (with-directory-excursion (dirname new*)
+ (file-exists? old)))
+ (error (format #f "symlink `~a' points to nonexistent \
+file `~a'" new* old))))
+ (symlink old new*))
+ (lambda args
+ ;; When doing 'guix system init' on the current '/', some
+ ;; symlinks may already exists. Override them.
+ (if (= EEXIST (system-error-errno args))
+ (begin
+ (delete-file new*)
+ (try))
+ (apply throw args)))))))))
(lambda args
;; Usually we can only get here when installing to an existing root,
;; as with 'guix system init foo.scm /'.
@@ -142,7 +159,10 @@ STORE."
includes /etc, /var, /run, /bin/sh, etc., and all the symlinks to SYSTEM.
EXTRAS is a list of directives appended to the built-in directives to populate
TARGET."
- (for-each (cut evaluate-populate-directive <> target)
+ ;; It's expected that some symbolic link targets do not exist yet, so do not
+ ;; error on dangling links.
+ (for-each (cut evaluate-populate-directive <> target
+ #:error-on-dangling-symlink? #f)
(append (directives (%store-directory)) extras))
;; Add system generation 1.
diff --git a/gnu/build/marionette.scm b/gnu/build/marionette.scm
index f4b219e842..b8fba61d06 100644
--- a/gnu/build/marionette.scm
+++ b/gnu/build/marionette.scm
@@ -28,6 +28,7 @@
#:use-module (ice-9 popen)
#:use-module (ice-9 regex)
#:export (marionette?
+ marionette-pid
make-marionette
marionette-eval
wait-for-file
diff --git a/gnu/home/services/mcron.scm b/gnu/home/services/mcron.scm
index 0b3dbb810b..1d294a997c 100644
--- a/gnu/home/services/mcron.scm
+++ b/gnu/home/services/mcron.scm
@@ -1,6 +1,7 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2021 Andrew Tropin <andrew@trop.in>
;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
+;;; Copyright © 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -20,6 +21,7 @@
(define-module (gnu home services mcron)
#:use-module (gnu packages guile-xyz)
#:use-module (gnu home services)
+ #:use-module (gnu services configuration)
#:use-module (gnu services shepherd)
#:use-module (gnu home services shepherd)
#:use-module (guix records)
@@ -53,13 +55,23 @@
;;
;;; Code:
-(define-record-type* <home-mcron-configuration> home-mcron-configuration
- make-home-mcron-configuration
- home-mcron-configuration?
- (package home-mcron-configuration-package ; package
- (default mcron))
- (jobs home-mcron-configuration-jobs ; list of jobs
- (default '())))
+(define list-of-gexps?
+ (list-of gexp?))
+
+(define-configuration/no-serialization home-mcron-configuration
+ (mcron (file-like mcron) "The mcron package to use.")
+ (jobs
+ (list-of-gexps '())
+ "This is a list of gexps (@pxref{G-Expressions}), where each gexp
+corresponds to an mcron job specification (@pxref{Syntax, mcron job
+specifications,, mcron, GNU@tie{}mcron}).")
+ (log? (boolean #t) "Log messages to standard output.")
+ (log-format
+ (string "~1@*~a ~a: ~a~%")
+ "@code{(ice-9 format)} format string for log messages. The default value
+produces messages like \"@samp{@var{pid} @var{name}:
+@var{message}\"} (@pxref{Invoking mcron, Invoking,, mcron, GNU@tie{}mcron}).
+Each message is also prefixed by a timestamp by GNU Shepherd."))
(define job-files (@@ (gnu services mcron) job-files))
(define shepherd-schedule-action
@@ -69,19 +81,23 @@
(match-lambda
(($ <home-mcron-configuration> mcron '()) ; no jobs to run
'())
- (($ <home-mcron-configuration> mcron jobs)
+ (($ <home-mcron-configuration> mcron jobs log? log-format)
(let ((files (job-files mcron jobs)))
(list (shepherd-service
(documentation "User cron jobs.")
(provision '(mcron))
(modules `((srfi srfi-1)
(srfi srfi-26)
- (ice-9 popen) ; for the 'schedule' action
+ (ice-9 popen) ; for the 'schedule' action
(ice-9 rdelim)
(ice-9 match)
,@%default-modules))
(start #~(make-forkexec-constructor
- (list #$(file-append mcron "/bin/mcron") #$@files)
+ (list (string-append #$mcron "/bin/mcron")
+ #$@(if log?
+ #~("--log" "--log-format" #$log-format)
+ #~())
+ #$@files)
#:log-file (string-append
(or (getenv "XDG_LOG_HOME")
(format #f "~a/.local/var/log"
@@ -91,7 +107,7 @@
(actions
(list (shepherd-schedule-action mcron files)))))))))
-(define home-mcron-profile (compose list home-mcron-configuration-package))
+(define home-mcron-profile (compose list home-mcron-configuration-mcron))
(define (home-mcron-extend config jobs)
(home-mcron-configuration
@@ -113,3 +129,12 @@
(default-value (home-mcron-configuration))
(description
"Install and configure the GNU mcron cron job manager.")))
+
+
+;;;
+;;; Generate documentation.
+;;;
+(define (generate-doc)
+ (configuration->documentation 'home-mcron-configuration))
+
+;;; mcron.scm ends here
diff --git a/gnu/home/services/shells.scm b/gnu/home/services/shells.scm
index 172e58a9ff..3e346c3813 100644
--- a/gnu/home/services/shells.scm
+++ b/gnu/home/services/shells.scm
@@ -480,7 +480,7 @@ with text blocks from other extensions and the base service."))
(define (home-bash-extensions original-config extension-configs)
(match original-config
- (($ <home-bash-configuration> _ _ _ environment-variables aliases
+ (($ <home-bash-configuration> _ _ environment-variables aliases
bash-profile bashrc bash-logout)
(home-bash-configuration
(inherit original-config)
diff --git a/gnu/local.mk b/gnu/local.mk
index 71472f8410..b154caaaaa 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -977,6 +977,7 @@ dist_patch_DATA = \
%D%/packages/patches/clang-12.0-libc-search-path.patch \
%D%/packages/patches/clang-13.0-libc-search-path.patch \
%D%/packages/patches/clang-14.0-libc-search-path.patch \
+ %D%/packages/patches/clang-15.0-libc-search-path.patch \
%D%/packages/patches/clang-runtime-asan-build-fixes.patch \
%D%/packages/patches/clang-runtime-esan-build-fixes.patch \
%D%/packages/patches/clang-runtime-9-libsanitizer-mode-field.patch \
@@ -1195,7 +1196,6 @@ dist_patch_DATA = \
%D%/packages/patches/ghostscript-no-header-id.patch \
%D%/packages/patches/ghostscript-no-header-uuid.patch \
%D%/packages/patches/ghostscript-no-header-creationdate.patch \
- %D%/packages/patches/giara-fix-login.patch \
%D%/packages/patches/glib-appinfo-watch.patch \
%D%/packages/patches/glib-networking-gnutls-binding.patch \
%D%/packages/patches/glib-networking-32-bit-time.patch \
diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm
index ee730ac8e3..da9654d577 100644
--- a/gnu/packages/admin.scm
+++ b/gnu/packages/admin.scm
@@ -330,25 +330,14 @@ interface and is based on GNU Guile.")
(define-public shepherd-0.9
(package
(inherit shepherd)
- (version "0.9.2")
+ (version "0.9.3")
(source (origin
(method url-fetch)
(uri (string-append "mirror://gnu/shepherd/shepherd-"
version ".tar.gz"))
(sha256
(base32
- "0mcby3ygh3bpns44rb1vnk8bz2km4nlw092nrcgkm3nkqfmbp4p1"))
- (modules '((guix build utils)))
- (snippet
- ;; Avoid continuation barriers so (@ (fibers) sleep) can be
- ;; called from a service's 'stop' method
- '(substitute* "modules/shepherd/service.scm"
- (("call-with-blocked-asyncs") ;in 'stop' method
- "(lambda (thunk) (thunk))")
- (("\\(for-each-service\n") ;in 'shutdown-services'
- "((lambda (proc)
- (for-each proc
- (fold-services cons '())))\n")))))
+ "0qy2yq13xhf05an5ilz7grighdxicx56211yaarqq5qigiiybc32"))))
(arguments
(list #:configure-flags #~'("--localstatedir=/var")
#:make-flags #~'("GUILE_AUTO_COMPILE=0")
diff --git a/gnu/packages/audio.scm b/gnu/packages/audio.scm
index 937c9783fb..61e81f8c3d 100644
--- a/gnu/packages/audio.scm
+++ b/gnu/packages/audio.scm
@@ -615,6 +615,50 @@ attacks, performing pitch detection, tapping the beat and producing MIDI
streams from live audio.")
(license license:gpl3+)))
+(define-public dsp
+ (package
+ (name "dsp")
+ (version "1.9")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/bmc0/dsp")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0iksmianwig7w78hqip2a8yy6r63sv8cv9pis8qxny6w1xap6njb"))))
+ (build-system gnu-build-system)
+ (arguments
+ (list
+ #:tests? #false ;no tests
+ #:make-flags
+ #~(list (string-append "CC=" #$(cc-for-target)))
+ #:phases
+ #~(modify-phases %standard-phases
+ (replace 'configure
+ (lambda _
+ (invoke "sh" "configure"
+ (string-append "--prefix=" #$output)
+ "--disable-pulse"))))))
+ (inputs
+ (list alsa-lib
+ ao
+ ffmpeg
+ ladspa
+ libmad
+ libsndfile
+ fftw
+ fftwf
+ zita-convolver))
+ (native-inputs
+ (list libtool pkg-config))
+ (home-page "https://github.com/bmc0/dsp")
+ (synopsis "Audio processing program with an interactive mode")
+ (description
+ "dsp is an audio processing program with an interactive mode.")
+ (license license:isc)))
+
(define-public qm-dsp
(package
(name "qm-dsp")
diff --git a/gnu/packages/avr.scm b/gnu/packages/avr.scm
index 3cc5a6964e..a741f183d7 100644
--- a/gnu/packages/avr.scm
+++ b/gnu/packages/avr.scm
@@ -31,10 +31,12 @@
#:use-module (guix build-system gnu)
#:use-module (guix build-system trivial)
#:use-module (gnu packages)
+ #:use-module (gnu packages check)
#:use-module (gnu packages compression)
#:use-module (gnu packages cross-base)
#:use-module (gnu packages flashing-tools)
#:use-module (gnu packages gcc)
+ #:use-module (gnu packages llvm)
#:use-module (gnu packages vim))
(define-public avr-binutils
@@ -148,7 +150,7 @@ C++.")
(define-public microscheme
(package
(name "microscheme")
- (version "0.9.3")
+ (version "0.9.4")
(source
(origin
(method git-fetch)
@@ -156,7 +158,7 @@ C++.")
(url "https://github.com/ryansuchocki/microscheme")
(commit (string-append "v" version))))
(sha256
- (base32 "1r3ng4pw1s9yy1h5rafra1rq19d3vmb5pzbpcz1913wz22qdd976"))
+ (base32 "1bflwirpcd58bngbs6hgjfwxl894ni2gpdd4pj10pm2mjhyj5dgw"))
(file-name (git-file-name name version))))
(build-system gnu-build-system)
(arguments
@@ -168,7 +170,7 @@ C++.")
#:make-flags
(list (string-append "PREFIX=" (assoc-ref %outputs "out")))))
(native-inputs
- (list unzip xxd))
+ (list clang cppcheck unzip xxd))
(home-page "https://github.com/ryansuchocki/microscheme/")
(synopsis "Scheme subset for Atmel microcontrollers")
(description
diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm
index e411839043..6d7097c42c 100644
--- a/gnu/packages/bioinformatics.scm
+++ b/gnu/packages/bioinformatics.scm
@@ -12300,24 +12300,26 @@ interaction inference from scRNA-seq data.")
(define-public r-circus
(package
(name "r-circus")
- (version "0.1.5")
- (source
- (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://github.com/BIMSBbioinfo/ciRcus")
- (commit (string-append "v" version))))
- (file-name (git-file-name name version))
- (sha256
- (base32
- "0jhjn3ilb057hbf6yzrihj13ifxxs32y7nkby8l3lkm28dg4p97h"))))
+ (version "0.1.7")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/BIMSBbioinfo/ciRcus")
+ (commit version)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0d1jz7r81zbcy1gkppggkjmgjxyjhva69s3cdb01m3f0790m4fv0"))))
+ (properties `((upstream-name . "ciRcus")))
(build-system r-build-system)
(propagated-inputs
(list r-annotationdbi
r-annotationhub
+ r-biocgenerics
r-biomart
r-data-table
r-dbi
+ r-genomeinfodb
r-genomicfeatures
r-genomicranges
r-ggplot2
@@ -12325,6 +12327,7 @@ interaction inference from scRNA-seq data.")
r-iranges
r-rcolorbrewer
r-rmysql
+ r-rtracklayer
r-s4vectors
r-stringr
r-summarizedexperiment))
diff --git a/gnu/packages/check.scm b/gnu/packages/check.scm
index ec2545dbbf..c900a055d5 100644
--- a/gnu/packages/check.scm
+++ b/gnu/packages/check.scm
@@ -40,6 +40,7 @@
;;; Copyright © 2022 Maxime Devos <maximedevos@telenet.be>
;;; Copyright © 2022 David Elsing <david.elsing@posteo.net>
;;; Copyright © 2022 Sharlatan Hellseher <sharlatanus@gmail.com>
+;;; Copyright © 2022 jgart <jgart@dismail.de>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -2173,7 +2174,7 @@ instantly.")
much larger range of examples than you would ever want to write by hand. It’s
based on the Haskell library, Quickcheck, and is designed to integrate
seamlessly into your existing Python unit testing work flow.")
- (home-page "https://github.com/HypothesisWorks/hypothesis")
+ (home-page "https://hypothesis.works/")
(license license:mpl2.0)))
;;; TODO: Make the default python-hypothesis in the next rebuild cycle.
diff --git a/gnu/packages/chromium.scm b/gnu/packages/chromium.scm
index 8bfda2ebc5..e3deed573a 100644
--- a/gnu/packages/chromium.scm
+++ b/gnu/packages/chromium.scm
@@ -758,13 +758,6 @@
(setenv "AR" "llvm-ar") (setenv "NM" "llvm-nm")
(setenv "CC" "clang") (setenv "CXX" "clang++")
- ;; Disable compiler flags that require Clang 15.
- (substitute* "build/config/compiler/BUILD.gn"
- (("\"-Wno-unqualified-std-cast-call\"")
- "")
- (("\"-Wno-deprecated-builtins\",")
- ""))
-
;; TODO: pre-compile instead. Avoids a race condition.
(setenv "PYTHONDONTWRITEBYTECODE" "1")
@@ -888,10 +881,10 @@
'("24" "48" "64" "128" "256")))))))))
(native-inputs
(list bison
- clang-14
+ clang-15
gn
gperf
- lld-as-ld-wrapper
+ lld-as-ld-wrapper-15
ninja
node-lts
pkg-config
@@ -1028,7 +1021,8 @@ testing.")
(call-with-output-file exe
(lambda (port)
(format port "#!~a
-exec ~a --enable-features=UseOzonePlatform --ozone-platform=wayland $@"
+exec ~a --enable-features=UseOzonePlatform --ozone-platform=wayland \
+--enable-features=WebRTCPipeWireCapturer $@"
(string-append bash "/bin/bash")
(string-append chromium "/bin/chromium"))))
(chmod exe #o555)
diff --git a/gnu/packages/cpp.scm b/gnu/packages/cpp.scm
index c1e98b771d..210c76e482 100644
--- a/gnu/packages/cpp.scm
+++ b/gnu/packages/cpp.scm
@@ -1976,13 +1976,7 @@ std::wstring, etc).")
"-DCRC32C_BUILD_TESTS="
;; TODO: perhaps infer #:tests?
(if #$(%current-target-system)
- "OFF" "ON")))
- #:phases
- #~(modify-phases %standard-phases
- (add-after 'unpack 'make-reproducible
- (lambda _
- (substitute* "CMakeLists.txt"
- (("if\\(HAVE_SSE42\\)") "if(FALSE)")))))))
+ "OFF" "ON")))))
(native-inputs (list googletest))
(home-page "https://github.com/google/crc32c")
(synopsis "Cyclic redundancy check")
diff --git a/gnu/packages/crates-io.scm b/gnu/packages/crates-io.scm
index 1118ebbc35..792779a28f 100644
--- a/gnu/packages/crates-io.scm
+++ b/gnu/packages/crates-io.scm
@@ -23244,7 +23244,7 @@ getters and setters on fields.")
(define-public rust-gfa-0.10
(package
(name "rust-gfa")
- (version "0.10.0")
+ (version "0.10.1")
(source
(origin
(method url-fetch)
@@ -23253,7 +23253,7 @@ getters and setters on fields.")
(string-append name "-" version ".tar.gz"))
(sha256
(base32
- "1hadm6vfjwyqw41bqci18wb4wv80rydmrag7a5c02pdp1gid14fw"))))
+ "1x996rpfnflgi2j4dgaj5sdxdbf24zfm9d2ha0zy8aid0cd60cln"))))
(build-system cargo-build-system)
(arguments
`(#:cargo-inputs
diff --git a/gnu/packages/crypto.scm b/gnu/packages/crypto.scm
index e63ed011aa..821e78d55a 100644
--- a/gnu/packages/crypto.scm
+++ b/gnu/packages/crypto.scm
@@ -953,14 +953,14 @@ SHA256, SHA512, SHA3, AICH, ED2K, Tiger, DC++ TTH, BitTorrent BTIH, GOST R
(define-public botan
(package
(name "botan")
- (version "2.19.1")
+ (version "2.19.2")
(source (origin
(method url-fetch)
(uri (string-append "https://botan.randombit.net/releases/"
"Botan-" version ".tar.xz"))
(sha256
(base32
- "0q2mzzg0a40prp9gwjk7d9fn8kwj6z2x6h6mzlm0hr6sxz7h0vp2"))))
+ "0xad3fa96l6x3azxs2gbz5jfqm2drfv9y9idhf5wvdf62mvg3x9s"))))
(build-system gnu-build-system)
(arguments
(list
diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm
index a511a9ae17..c6f4dd7fba 100644
--- a/gnu/packages/databases.scm
+++ b/gnu/packages/databases.scm
@@ -4390,7 +4390,7 @@ algorithm implementations.")
"-DARROW_BUILD_STATIC=OFF")))
(inputs
`(("boost" ,boost)
- ("brotli" ,google-brotli)
+ ("brotli" ,brotli)
("double-conversion" ,double-conversion)
("snappy" ,snappy)
("gflags" ,gflags)
diff --git a/gnu/packages/dns.scm b/gnu/packages/dns.scm
index 64fcac351c..ce184aa8dd 100644
--- a/gnu/packages/dns.scm
+++ b/gnu/packages/dns.scm
@@ -333,14 +333,14 @@ and BOOTP/TFTP for network booting of diskless machines.")
;; When updating, check whether isc-dhcp's bundled copy should be as well.
;; The BIND release notes are available here:
;; https://www.isc.org/bind/
- (version "9.16.34")
+ (version "9.16.35")
(source
(origin
(method url-fetch)
(uri (string-append "https://ftp.isc.org/isc/bind9/" version
"/bind-" version ".tar.xz"))
(sha256
- (base32 "05ig8y20qksam7s466h15v6j2zgidn5nkbrk1d5c29nmypy2wgai"))
+ (base32 "0gkvilfhqwalcv69240v6j1p3hwj0j4fyzli18q5qil2y4brc59y"))
(patches
(search-patches "bind-re-add-attr-constructor-priority.patch"))))
(build-system gnu-build-system)
diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm
index dd90fa5132..fe0d9f1dc9 100644
--- a/gnu/packages/emacs-xyz.scm
+++ b/gnu/packages/emacs-xyz.scm
@@ -4773,8 +4773,6 @@ Stack Overflow, Super User, and other StackExchange sites.")
(base32
"0xsr6819qaad0y8rhfrf555c9w7cmgbgkf1a2svgbp7rhhnywl0a"))))
(build-system emacs-build-system)
- (propagated-inputs
- (list emacs-parent-mode))
(home-page "https://github.com/xFA25E/skempo")
(synopsis "Enhancements for skeleton/tempo + abbrev")
(description
@@ -5172,6 +5170,29 @@ tool for Emacs. Ecukes is not a complete clone of Cucumber and is not
intended to be.")
(license license:gpl3+)))
+(define-public emacs-ef-themes
+ (package
+ (name "emacs-ef-themes")
+ (version "0.9.0")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://git.sr.ht/~protesilaos/ef-themes")
+ (commit version)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "1h1xlcbcay8wlmhzv7b5h6vrvwdwkzc171aa0rfja2xds4ry9k0m"))))
+ (build-system emacs-build-system)
+ (home-page "https://git.sr.ht/~protesilaos/ef-themes")
+ (synopsis "Colorful and legible themes")
+ (description
+ "The Ef themes are a collection of light and dark themes for GNU Emacs
+whose goal is to provide colorful yet legible options for users who want
+something with a bit more flair than the Modus themes.")
+ (license license:gpl3+)))
+
(define-public emacs-espuds
(package
(name "emacs-espuds")
@@ -7076,14 +7097,14 @@ user.")
(define-public emacs-subed
(package
(name "emacs-subed")
- (version "1.0.19")
+ (version "1.0.21")
(source (origin
(method url-fetch)
(uri (string-append "https://elpa.nongnu.org/nongnu/subed-"
version ".tar"))
(sha256
(base32
- "1wgicb0lvnghhr3a1xndkaxhs1c9gc1ac5xwvxcsc9zpgzrlmcda"))))
+ "0l4xv56ab31li9l77x68jnpcn47xgj0gqjfs5diklr665vjmfqim"))))
(arguments
(list
#:tests? #t
@@ -13064,32 +13085,30 @@ sly-quickload command that prompts the user for a package to install.")
(license license:gpl3+))))
(define-public emacs-sly-asdf
- (let ((commit "3180921efdc19a2195960e1d601b2a6f31a6feea")
- (revision "5"))
- (package
- (name "emacs-sly-asdf")
- (version (git-version "0.1.0" revision commit))
- (home-page "https://github.com/mmgeorge/sly-asdf")
- (source
- (origin
- (method git-fetch)
- (uri (git-reference
- (url home-page)
- (commit commit)))
- (file-name (git-file-name name version))
- (sha256
- (base32
- "0gncp8xv33s4wx594bgd35vr1455bcggv1bg28qv75mhv41nzw97"))))
- (build-system emacs-build-system)
- (propagated-inputs
- (list emacs-sly emacs-popup))
- (arguments
- '(#:include (cons* "\\.lisp$" "\\.asd$" %default-include)))
- (synopsis "ASDF contrib for SLY")
- (description
- "@command{sly-asdf} is an external contrib for SLY that provides
+ (package
+ (name "emacs-sly-asdf")
+ (version "0.2.0")
+ (home-page "https://github.com/mmgeorge/sly-asdf")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url home-page)
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0gncp8xv33s4wx594bgd35vr1455bcggv1bg28qv75mhv41nzw97"))))
+ (build-system emacs-build-system)
+ (propagated-inputs
+ (list emacs-sly emacs-popup))
+ (arguments
+ '(#:include (cons* "\\.lisp$" "\\.asd$" %default-include)))
+ (synopsis "ASDF contrib for SLY")
+ (description
+ "@command{sly-asdf} is an external contrib for SLY that provides
additional support for working with ASDF projects.")
- (license license:gpl3+))))
+ (license license:gpl3+)))
(define-public emacs-sly-named-readtables
(let ((commit "a5a42674ccffa97ccd5e4e9742beaf3ea719931f")
@@ -15471,47 +15490,47 @@ abbreviation of the mode line displays (lighters) of minor modes.")
(license license:gpl3+))))
(define-public emacs-use-package
- (package
- (name "emacs-use-package")
- (version "2.4.1")
- (source (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://github.com/jwiegley/use-package")
- (commit version)))
- (file-name (git-file-name name version))
- (sha256
- (base32
- "088kl3bml0rs5bkfymgzr15ram9qvy66h1kaisrbkynh0yxvf8g9"))))
- (build-system emacs-build-system)
- (native-inputs
- (list texinfo))
- (propagated-inputs
- (list emacs-diminish))
- (arguments
- `(#:tests? #t
- #:test-command '("emacs" "--batch"
- "-l" "use-package-tests.el"
- "-f" "ert-run-tests-batch-and-exit")
- #:phases
- (modify-phases %standard-phases
- (add-before 'install 'install-manual
- (lambda* (#:key outputs #:allow-other-keys)
- (let* ((out (assoc-ref outputs "out"))
- (info-dir (string-append out "/share/info")))
- (mkdir-p info-dir)
- (install-file "use-package.info" info-dir)
- #t)))
- (add-before 'install-manual 'build-manual
- (lambda _
- (invoke "makeinfo" "use-package.texi")
- #t)))))
- (home-page "https://github.com/jwiegley/use-package")
- (synopsis "Declaration for simplifying your .emacs")
- (description "The use-package macro allows you to isolate package
+ ;; XXX: Upstream did not tag latest release. Using commit matching exact
+ ;; version bump.
+ (let ((commit "942617d26e11d80d879ff23d2a8b477bd074a734"))
+ (package
+ (name "emacs-use-package")
+ (version "2.4.4")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/jwiegley/use-package")
+ (commit commit)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "1zpf9xv65jg813k90x8g9k4lja896nqfh48pjinicmz1rn0rf51a"))))
+ (build-system emacs-build-system)
+ (arguments
+ (list
+ #:tests? #t
+ #:test-command #~(list "emacs" "--batch"
+ "-l" "use-package-tests.el"
+ "-f" "ert-run-tests-batch-and-exit")
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-before 'install 'install-manual
+ (lambda _
+ (let ((info-dir (string-append #$output "/share/info")))
+ (install-file "use-package.info" info-dir))))
+ (add-before 'install-manual 'build-manual
+ (lambda _
+ (invoke "makeinfo" "use-package.texi"))))))
+ (native-inputs
+ (list texinfo))
+ (propagated-inputs
+ (list emacs-diminish))
+ (home-page "https://github.com/jwiegley/use-package")
+ (synopsis "Declaration for simplifying your .emacs")
+ (description "The use-package macro allows you to isolate package
configuration in your @file{.emacs} file in a way that is both
performance-oriented and tidy.")
- (license license:gpl2+)))
+ (license license:gpl2+))))
(define-public emacs-leaf
(package
@@ -20734,8 +20753,8 @@ never confused by comments or @code{foo-bar} matching @code{foo}.")
(define-public emacs-crdt
;; XXX: Upstream does not always tag new releases. The commit below
;; corresponds exactly to latest version bump.
- (let ((commit "480f60fdda9e40848920fa460b59dfba23fa06e5")
- (version "0.3.3"))
+ (let ((commit "92a7c93a3b4cb4b40f133acd22c89a5fda5cdd30")
+ (version "0.3.4"))
(package
(name "emacs-crdt")
(version version)
@@ -20747,7 +20766,7 @@ never confused by comments or @code{foo-bar} matching @code{foo}.")
(commit commit)))
(file-name (git-file-name name version))
(sha256
- (base32 "10hb2xwv8ylkm4cla2q5l11r1m1s1j4ywiwvy9x5884gxvbpbbph"))))
+ (base32 "1vh4d15g62crm4vimc7lgr11ws68g25ylipnvqlrrkvl6qrz3fhj"))))
(build-system emacs-build-system)
(home-page "https://code.librehq.com/qhong/crdt.el")
(synopsis "Real-time collaborative editing environment")
@@ -33612,8 +33631,8 @@ by leveraging @code{emacs-consult} APIs.")
(define-public emacs-purs-mode
;; XXX: Upstream set no tag nor any Version keyword. Using 0 as the base
;; version.
- (let ((commit "d29f1021787a90d0fd3eb0af625958abb7f7506b")
- (revision "0"))
+ (let ((commit "16553383915cf453747a491715ed0427c107cc9e")
+ (revision "1"))
(package
(name "emacs-purs-mode")
(version (git-version "0" revision commit))
@@ -33626,7 +33645,7 @@ by leveraging @code{emacs-consult} APIs.")
(commit commit)))
(file-name (git-file-name name version))
(sha256
- (base32 "0r7219ysf3hsjnan30hidf8jamcqsz36pkcmnhknff0c6dpwbnpx"))))
+ (base32 "0174p0g38jd34jwpww7zgh48i3lkhqrnrxz8ca09idz4adri38z7"))))
(build-system emacs-build-system)
(home-page "https://github.com/PureFunctor/purs-mode/")
(synopsis "PureScript major mode for Emacs")
diff --git a/gnu/packages/freedesktop.scm b/gnu/packages/freedesktop.scm
index 8574864598..d74d6aa935 100644
--- a/gnu/packages/freedesktop.scm
+++ b/gnu/packages/freedesktop.scm
@@ -2161,14 +2161,14 @@ Python, that binds to the C library @code{uchardet} to increase performance.")
(define-public udiskie
(package
(name "udiskie")
- (version "2.3.3")
+ (version "2.4.2")
(source
(origin
(method url-fetch)
(uri (pypi-uri "udiskie" version))
(sha256
(base32
- "0sagdmsc5km32h3jvgj843p8bicrrgfz26qhl04ibxmas6725zr0"))))
+ "0z0gk8l6rv4np29kfdalmy4q3900005sxhjg0jz1aa8irdcsp1qz"))))
(build-system python-build-system)
(native-inputs
`(("asciidoc" ,asciidoc)
@@ -2195,8 +2195,7 @@ Python, that binds to the C library @code{uchardet} to increase performance.")
(let ((out (assoc-ref outputs "out"))
(gi-typelib-path (getenv "GI_TYPELIB_PATH")))
(wrap-program (string-append out "/bin/udiskie")
- `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))))
- #t)))))
+ `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path)))))))))
(home-page "https://github.com/coldfix/udiskie")
(synopsis "Automounter for removable media")
(description
diff --git a/gnu/packages/geo.scm b/gnu/packages/geo.scm
index ade53a503c..f8163b1e37 100644
--- a/gnu/packages/geo.scm
+++ b/gnu/packages/geo.scm
@@ -20,6 +20,7 @@
;;; Copyright © 2021, 2022 Nikolay Korotkiy <sikmir@disroot.org>
;;; Copyright © 2022 Roman Scherer <roman.scherer@burningswell.com>
;;; Copyright © 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2022 Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -114,6 +115,8 @@
#:use-module (gnu packages python-xyz)
#:use-module (gnu packages qt)
#:use-module (gnu packages readline)
+ #:use-module (gnu packages sdl)
+ #:use-module (gnu packages speech)
#:use-module (gnu packages swig)
#:use-module (gnu packages sqlite)
#:use-module (gnu packages textutils)
@@ -2770,3 +2773,106 @@ using third-party geocoders and other data sources.")
reconstructions of geological and paleogeographic features through geological
time. Interactively visualize vector, raster and volume data.")
(license license:gpl2+)))
+
+(define-public navit
+ (package
+ (name "navit")
+ (version "0.5.6")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/navit-gps/navit")
+ (commit (string-append "v" version))))
+ (sha256
+ (base32
+ "1jhlif0sc5m8wqb5j985g1xba2ki7b7mm14pkvzdghjd0q0gf15s"))
+ (file-name (git-file-name name version))))
+ (build-system cmake-build-system)
+ (arguments
+ (list
+ ;; There are no tests
+ #:tests? #f
+ ;; With -DSAMPLE_MAP=TRUE (the default), it tries to download a
+ ;; map during the build process.
+ #:configure-flags #~(list "-DSAMPLE_MAP=FALSE")
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after
+ 'unpack 'patch-navit-config
+ (lambda _
+ ;; For now this package only supports SDL, so if we keep
+ ;; the configuration as-is, Navit doesn't start.
+ (substitute*
+ "navit/navit_shipped.xml"
+ (("<graphics type=\"gtk_drawing_area\"/>")
+ "<graphics type=\"sdl\"/>"))
+ ;; Users are expected to be able to add XML files inside
+ ;; $NAVIT_SHAREDIR, however that directory is in the store.
+ (substitute*
+ "navit/navit_shipped.xml"
+ (("<xi:include href=\"\\$NAVIT_SHAREDIR/maps/\\*\\.xml\"/>")
+ "<xi:include href=\"$NAVIT_USER_DATADIR/maps/*.xml\"/>"))
+ ;; Navit also works without GPS but in that case there is
+ ;; no automatic zooming, so we need zoom buttons to be able
+ ;; to manually zoom in or out.
+ (substitute*
+ "navit/navit_shipped.xml"
+ (((string-append
+ "<osd enabled=\"no\" type=\"button\" x=\"-96\" y=\"-96\" "
+ "command=\"zoom_in()"))
+ (string-append
+ "<osd enabled=\"yes\" type=\"button\" x=\"-96\" y=\"-96\" "
+ "command=\"zoom_in()"))
+ (((string-append
+ "<osd enabled=\"no\" type=\"button\" x=\"0\" y=\"-96\" "
+ "command=\"zoom_out()"))
+ (string-append
+ "<osd enabled=\"yes\" type=\"button\" x=\"0\" y=\"-96\" "
+ "command=\"zoom_out()\" src=\"zoom_out.png\"/>")))))
+ (add-before
+ 'build 'set-cache
+ ;; During the build, svg icons are converted in different
+ ;; formats, and this needs XDG_CACHE_HOME to work.
+ (lambda _
+ (setenv "XDG_CACHE_HOME" "/tmp/xdg-cache"))))))
+ (inputs (list dbus-glib
+ espeak
+ freeglut
+ freeimage
+ freetype
+ glib
+ gettext-minimal
+ gpsd
+ gdk-pixbuf
+ imlib2
+ python
+ sdl
+ sdl-image))
+ (native-inputs (list fontconfig
+ (librsvg-for-system)
+ pkg-config))
+ (home-page "https://www.navit-project.org")
+ (synopsis "Car navigation system with routing engine that uses vector maps data")
+ (description "Navit is a car navigation system with a routing engine.
+
+It is meant to work with touchscreen devices, but it also works
+without a touchscreen. It also supports text to speech.
+
+It can be configured extensively through its own configuration file
+format. For instance we can configure the graphical interface, and
+which map data is to be displayed at which zoom level.
+
+It supports different routing profiles: bike, car, car_avoid_toll,
+car_pedantic, car_shortest, horse, pedestrian, truck.
+
+It can use gpsd or NMEA GPS directly to get position data. It also
+works without GPS: in this case users can also enter position data
+directly.
+
+It can also be used to log GPS data to files using the GPX or NMEA
+formats, or to replay NMEA data.
+
+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)))
diff --git a/gnu/packages/gnuzilla.scm b/gnu/packages/gnuzilla.scm
index e8059b1a0a..feb80d81a2 100644
--- a/gnu/packages/gnuzilla.scm
+++ b/gnu/packages/gnuzilla.scm
@@ -621,8 +621,8 @@ in C/C++.")
;; XXXX: Workaround 'snippet' limitations.
(define computed-origin-method (@@ (guix packages) computed-origin-method))
-(define %icecat-version "102.4.0-guix0-preview1")
-(define %icecat-build-id "20221019000000") ;must be of the form YYYYMMDDhhmmss
+(define %icecat-version "102.5.0-guix0-preview1")
+(define %icecat-build-id "20221115000000") ;must be of the form YYYYMMDDhhmmss
;; 'icecat-source' is a "computed" origin that generates an IceCat tarball
;; from the corresponding upstream Firefox ESR tarball, using the 'makeicecat'
@@ -644,11 +644,11 @@ in C/C++.")
"firefox-" upstream-firefox-version ".source.tar.xz"))
(sha256
(base32
- "0klh3lbm0zdmv90kmmpkzgn15pfjibr7zsjy3kvbzpql97fhv7z7"))))
+ "1n2pq165fxmvgcr5mv3hhaid2vn7lh3jg03lf13kz4c5295x8z81"))))
- (upstream-icecat-base-version "102.4.0") ; maybe older than base-version
+ (upstream-icecat-base-version "102.5.0") ; maybe older than base-version
;;(gnuzilla-commit (string-append "v" upstream-icecat-base-version))
- (gnuzilla-commit "8f1aa117ddca6e8cd0114265fb4ca9b5a927565a")
+ (gnuzilla-commit "a8848cb35e4e47a344d40596f72d82d57bf5a6f1")
(gnuzilla-source
(origin
(method git-fetch)
@@ -660,7 +660,7 @@ in C/C++.")
(string-take gnuzilla-commit 8)))
(sha256
(base32
- "0ryrn8ivm763swd0qbqhlgdwc2dj4xjd81d9i2r6hb7bsb4ky3y5"))))
+ "0d0brzi7wmg70kvi9p3g24cyya17bvg2djgjn64g14hpnalg8icw"))))
;; 'search-patch' returns either a valid file name or #f, so wrap it
;; in 'assume-valid-file-name' to avoid 'local-file' warnings.
@@ -1242,8 +1242,8 @@ standards of the IceCat project.")
(cpe-name . "firefox_esr")
(cpe-version . ,(first (string-split version #\-)))))))
-(define %icedove-build-id "20221104000000") ;must be of the form YYYYMMDDhhmmss
-(define %icedove-version "102.4.2")
+(define %icedove-build-id "20221115000000") ;must be of the form YYYYMMDDhhmmss
+(define %icedove-version "102.5.0")
;; Provides the "comm" folder which is inserted into the icecat source.
;; Avoids the duplication of Icecat's source tarball.
@@ -1252,11 +1252,11 @@ standards of the IceCat project.")
(method hg-fetch)
(uri (hg-reference
(url "https://hg.mozilla.org/releases/comm-esr102")
- (changeset "bece6c033f6b24b9c126598da7c6eb5bc2a48b14")))
+ (changeset "b6e9b5a1d1b53d26cfb7032ef2ff02203ab0486b")))
(file-name (string-append "thunderbird-" %icedove-version "-checkout"))
(sha256
(base32
- "1fsn5lg0c89rnsnljd48gq1z751sxf6zv2rv7wgnhifc45w4s80j"))))
+ "0i2w1ibaip8rlghrk5iaih14xnz5n19ag64qcdgjxic78mhnmm04"))))
(define-public icedove
(package
diff --git a/gnu/packages/guile-xyz.scm b/gnu/packages/guile-xyz.scm
index 5997a24577..1785fe0d58 100644
--- a/gnu/packages/guile-xyz.scm
+++ b/gnu/packages/guile-xyz.scm
@@ -2702,54 +2702,56 @@ is no support for parsing block and inline level HTML.")
(inputs (list guile-2.0))))
(define-public mcron
- (package
- (name "mcron")
- (version "1.2.1")
- (source (origin
- (method url-fetch)
- (uri (string-append "mirror://gnu/mcron/mcron-"
- version ".tar.gz"))
- (sha256
- (base32
- "0bkn235g2ia4f7ispr9d55c7bc18282r3qd8ldhh5q2kiin75zi0"))))
- (build-system gnu-build-system)
- (arguments
- '(#:phases (modify-phases %standard-phases
- (add-before 'check 'adjust-tests
- (lambda _
- (substitute* "tests/job-specifier.scm"
- ;; (getpw) fails with "entry not found" in the build
- ;; environment, so pass an argument.
- (("\\(getpw\\)")
- "(getpwnam (getuid))")
- ;; The build environment lacks an entry for root in
- ;; /etc/passwd.
- (("\\(getpw 0\\)")
- "(getpwnam \"nobody\")")
-
- ;; FIXME: Skip the 4 faulty tests (see above).
- (("\\(test-equal \"next-year\"" all)
- (string-append "(test-skip 4)\n" all)))
- #t)))))
- (native-inputs `(("pkg-config" ,pkg-config)
- ("tzdata" ,tzdata-for-tests)
- ("guile-native" ;for 'guild compile'
- ,@(assoc-ref (package-inputs this-package) "guile"))))
- (inputs (list guile-3.0))
- (home-page "https://www.gnu.org/software/mcron/")
- (synopsis "Run jobs at scheduled times")
- (description
- "GNU Mcron is a complete replacement for Vixie cron. It is used to run
+ ;; Use the latest commits, as interesting changes haven't been released yet,
+ ;; such as improved logging.
+ (let ((revision "0")
+ (commit "5fd0ccde5a4cff70299999f988e6b5166584814d"))
+ (package
+ (name "mcron")
+ (version (git-version "1.2.1" revision commit))
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://git.savannah.gnu.org/git/mcron.git")
+ (commit commit)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0jl2w67a5hkphzssdzq3q4jcwv2b174b11d3w5i3khxq2vhzd6kk"))))
+ (build-system gnu-build-system)
+ (arguments
+ (list
+ #:phases #~(modify-phases %standard-phases
+ (add-before 'check 'adjust-tests
+ (lambda _
+ (substitute* "tests/job-specifier.scm"
+ ;; (getpw) fails with "entry not found" in the build
+ ;; environment, so pass an argument.
+ (("\\(getpw\\)")
+ "(getpwnam (getuid))")
+ ;; The build environment lacks an entry for root in
+ ;; /etc/passwd.
+ (("\\(getpw 0\\)")
+ "(getpwnam \"nobody\")")
+ ;; FIXME: Skip the 4 faulty tests (see above).
+ (("\\(test-equal \"next-year\"" all)
+ (string-append "(test-skip 4)\n" all))))))))
+ (native-inputs (list autoconf
+ automake
+ guile-3.0 ;for 'guild compile'
+ help2man
+ pkg-config
+ tzdata-for-tests
+ texinfo))
+ (inputs (list guile-3.0))
+ (home-page "https://www.gnu.org/software/mcron/")
+ (synopsis "Run jobs at scheduled times")
+ (description
+ "GNU Mcron is a complete replacement for Vixie cron. It is used to run
tasks on a schedule, such as every hour or every Monday. Mcron is written in
Guile, so its configuration can be written in Scheme; the original cron
format is also supported.")
- (license license:gpl3+)))
-
-(define-public guile2.2-mcron
- (package
- (inherit mcron)
- (name "guile2.2-mcron")
- (inputs (list guile-2.2))))
+ (license license:gpl3+))))
(define-public guile-picture-language
(let ((commit "a1322bf11945465241ca5b742a70893f24156d12")
diff --git a/gnu/packages/image.scm b/gnu/packages/image.scm
index bbe03c64da..9e53b7483e 100644
--- a/gnu/packages/image.scm
+++ b/gnu/packages/image.scm
@@ -2278,7 +2278,7 @@ Format) file format decoder and encoder.")
openexr))
;; These are in Requires.private of libjxl.pc.
(propagated-inputs
- (list google-brotli google-highway))
+ (list brotli google-highway))
(home-page "https://github.com/libjxl/libjxl")
(synopsis "JPEG XL image format reference implementation")
(description "This package contains a reference implementation of JPEG XL
diff --git a/gnu/packages/lisp-xyz.scm b/gnu/packages/lisp-xyz.scm
index b647c1aa3d..45fcb108f0 100644
--- a/gnu/packages/lisp-xyz.scm
+++ b/gnu/packages/lisp-xyz.scm
@@ -8934,8 +8934,8 @@ doesn't support them.")
(sbcl-package->ecl-package sbcl-cl-interpol))
(define-public sbcl-symbol-munger
- (let ((commit "97598d4c3c53fd5da72ab78908fbd5d8c7a13416")
- (revision "1"))
+ (let ((commit "e96558e8315b8eef3822be713354787b2348b25e")
+ (revision "2"))
(package
(name "sbcl-symbol-munger")
(version (git-version "0.0.1" revision commit))
@@ -8945,10 +8945,10 @@ doesn't support them.")
(uri (git-reference
(url "https://github.com/AccelerationNet/symbol-munger")
(commit commit)))
- (file-name (git-file-name name version))
+ (file-name (git-file-name "cl-symbol-munger" version))
(sha256
(base32
- "0y8jywjy0ldyhp7bxf16fdvdd2qgqnd7nlhlqfpfnzxcqk4xy1km"))))
+ "16fshnxp9212503z1vjlmx5pafv14bzpihn486x1ljakqjigfnfz"))))
(build-system asdf-build-system/sbcl)
(inputs
`(("alexandria" ,sbcl-alexandria)
@@ -14717,6 +14717,37 @@ for debugging and profiling real world applications.")
(define-public ecl-supertrace
(sbcl-package->ecl-package sbcl-supertrace))
+(define-public sbcl-flamegraph
+ (let ((commit "1ed7a718eae88bd35e1649a1c716d46c59dc0a24")
+ (revision "0"))
+ (package
+ (name "sbcl-flamegraph")
+ (version (git-version "0.0.0" revision commit))
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ ;; This is a fork with fixes for latest SBCL.
+ (url "https://github.com/ruricolist/cl-flamegraph")
+ (commit commit)))
+ (file-name (git-file-name "cl-flamegraph" version))
+ (sha256
+ (base32 "1aj7hhvav9j9c66ssy11ry3p6xqb912yafi91g6sin6pdx84c2lw"))))
+ (build-system asdf-build-system/sbcl)
+ (inputs
+ (list sbcl-alexandria))
+ (home-page "https://github.com/40ants/cl-flamegraph")
+ (synopsis "Generate flamegraphs of Common Lisp code")
+ (description
+ "@code{cl-flamegraph} is a wrapper around SBCL's statistical profiler.
+It saves stack traces of profiled code in a form suitable for processing by
+the @command{flamegraph.pl} script, which is available in the Guix package
+@code{flamegraph}.")
+ (license license:bsd-3))))
+
+(define-public cl-flamegraph
+ (sbcl-package->cl-source-package sbcl-flamegraph))
+
(define-public sbcl-trivial-benchmark
(let ((commit "42d76733dd2e873471c6f1e27d39113293f7dd5c"))
(package
@@ -17296,6 +17327,42 @@ implementation, for example drawing calls of GUI applications.")
(define-public cl-trivial-main-thread
(sbcl-package->cl-source-package sbcl-trivial-main-thread))
+(define-public sbcl-moira
+ (let ((commit "21f1cfd5942fcaea2ed2e4f6055b2a5a39ac4c6e")
+ (revision "0"))
+ (package
+ (name "sbcl-moira")
+ (version (git-version "0.0.0" revision commit))
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/ruricolist/moira")
+ (commit commit)))
+ (file-name (git-file-name "cl-moira" version))
+ (sha256
+ (base32 "0r6hvq8j04y1i85f8jwhhafylgfrkg8c1z5746nsbv0v0348sf5h"))))
+ (build-system asdf-build-system/sbcl)
+ (inputs
+ (list sbcl-alexandria
+ sbcl-bordeaux-threads
+ sbcl-osicat
+ sbcl-serapeum
+ sbcl-trivial-features
+ sbcl-trivial-garbage))
+ (home-page "https://github.com/ruricolist/moira")
+ (synopsis "Monitor and restart background threads")
+ (description
+ "Moira is a library for monitoring and, if necessary, restarting
+long-running threads. In principle, it is like an in-Lisp process supervisor.")
+ (license license:expat))))
+
+(define-public cl-moira
+ (sbcl-package->cl-source-package sbcl-moira))
+
+(define-public ecl-moira
+ (sbcl-package->ecl-package sbcl-moira))
+
(define-public sbcl-cl-package-locks
(let ((commit "96a358ede7cef416d61d2f699e724fe1d9de602c")
(revision "1"))
@@ -19999,6 +20066,44 @@ libyaml.")
(define-public ecl-cl-yaml
(sbcl-package->ecl-package sbcl-cl-yaml))
+(define-public sbcl-clop
+ (let ((commit "c0c3fe7efa5ac95ba1644febfb2c2acab757fcda")
+ (revision "0"))
+ (package
+ (name "sbcl-clop")
+ ;; ASD file indicates 0.1.0, but changelog 1.0.1.
+ (version (git-version "1.0.1" revision commit))
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/sheepduke/clop")
+ (commit commit)))
+ (file-name (git-file-name "cl-clop" version))
+ (sha256
+ (base32 "1q7rlizr8gcbfz4a9660gdbw7d2zbld18akjpibg54j7jh5kb8gc"))))
+ (build-system asdf-build-system/sbcl)
+ (native-inputs
+ (list sbcl-fiveam))
+ (inputs
+ (list sbcl-alexandria
+ sbcl-cl-str
+ sbcl-esrap
+ sbcl-local-time
+ sbcl-parse-number))
+ (home-page "https://github.com/sheepduke/clop")
+ (synopsis "TOML parser for Common Lisp")
+ (description
+ "Clop is a Common Lisp library for parsing strings in the TOML
+configuration file format.")
+ (license license:expat))))
+
+(define-public cl-clop
+ (sbcl-package->cl-source-package sbcl-clop))
+
+(define-public ecl-clop
+ (sbcl-package->ecl-package sbcl-clop))
+
(define-public sbcl-linedit
(let ((commit "0561c97dfca2f5854fcc66558a567a9875ddcb8f")
(revision "1"))
@@ -20482,6 +20587,69 @@ command in Common Lisp.")
(define-public ecl-which
(sbcl-package->ecl-package sbcl-which))
+(define-public sbcl-wu-decimal
+ (let ((commit "5b348bdb32a0f83e80e17aa68cd51787ae8c8a45")
+ (revision "0"))
+ (package
+ (name "sbcl-wu-decimal")
+ (version (git-version "2.0.0" revision commit))
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/Wukix/wu-decimal")
+ (commit commit)))
+ (file-name (git-file-name "cl-wu-decimal" version))
+ (sha256
+ (base32 "1p7na4hic7297amwm4idfwkyx664ny8cdssncyra37pmv4wzp8dm"))))
+ (build-system asdf-build-system/sbcl)
+ (home-page "https://github.com/Wukix/wu-decimal")
+ (synopsis "Arbitrary-precision decimal arithmetic")
+ (description
+ "Wu-Decimal enables convenient, arbitrary-precision decimal arithmetic
+through a reader macro, @code{#$}, and an update to the @code{pprint} dispatch
+table. Wu-Decimal uses the CL rational type to store decimals, which enables
+numeric functions such as @code{+}, @code{-}, etc., to operate on decimal
+numbers in a natural way.")
+ (license license:bsd-2))))
+
+(define-public cl-wu-decimal
+ (sbcl-package->cl-source-package sbcl-wu-decimal))
+
+(define-public ecl-wu-decimal
+ (sbcl-package->ecl-package sbcl-wu-decimal))
+
+(define-public sbcl-infix-math
+ (let ((commit "f5155ae9709e518061ace79887d78f8e79c61cac")
+ (revision "0"))
+ (package
+ (name "sbcl-infix-math")
+ (version (git-version "0.0.0" revision commit))
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/ruricolist/infix-math")
+ (commit commit)))
+ (file-name (git-file-name "cl-infix-math" version))
+ (sha256
+ (base32 "1h6p254xl793wfq3qla5y95k6zimy477f8brblx6ran3rg3bydbg"))))
+ (build-system asdf-build-system/sbcl)
+ (inputs
+ (list sbcl-alexandria sbcl-parse-number sbcl-serapeum sbcl-wu-decimal))
+ (home-page "https://github.com/ruricolist/infix-math")
+ (synopsis "Extensible infix syntax for math in Common Lisp")
+ (description
+ "Infix-Math is a library that provides a special-purpose syntax for
+transcribing mathematical formulas into Lisp.")
+ (license license:expat))))
+
+(define-public cl-infix-math
+ (sbcl-package->cl-source-package sbcl-infix-math))
+
+(define-public ecl-infix-math
+ (sbcl-package->ecl-package sbcl-infix-math))
+
(define-public sbcl-cl-num-utils
(let ((commit "97a88cd34540acf52e872a82ebfef3da0a34fa12")
(revision "1"))
@@ -20665,6 +20833,42 @@ density, distribution and quantiles for these distributions.")
(define-public ecl-cl-random
(sbcl-package->ecl-package sbcl-cl-random))
+(define-public sbcl-random-sample
+ (let ((commit "46b70374ed796b84ea003e83c1db97b0caf97e22")
+ (revision "0"))
+ (package
+ (name "sbcl-random-sample")
+ (version (git-version "0.0.0" revision commit))
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/ruricolist/random-sample")
+ (commit commit)))
+ (file-name (git-file-name "cl-random-sample" version))
+ (sha256
+ (base32 "0nhgca6wf754wbg91h40gx7xq22rawg2pn6l7h02wv1jxac4q6nh"))))
+ (build-system asdf-build-system/sbcl)
+ (native-inputs
+ (list sbcl-fiveam))
+ (inputs
+ (list sbcl-alexandria
+ sbcl-infix-math
+ sbcl-named-readtables
+ sbcl-serapeum))
+ (home-page "https://github.com/ruricolist/random-sample")
+ (synopsis "Take a random sample from a sequence")
+ (description
+ "Random-Sample is a library for reliably taking a random sample from a
+sequence.")
+ (license license:expat))))
+
+(define-public cl-random-sample
+ (sbcl-package->cl-source-package sbcl-random-sample))
+
+(define-public ecl-random-sample
+ (sbcl-package->ecl-package sbcl-random-sample))
+
(define-public sbcl-mgl-gpr
(let ((commit "cb6ce51e2f87bf1d589f3703c13eea6e25780afe")
(revision "1"))
@@ -24751,6 +24955,45 @@ roman numeral given in the key.")
(define-public ecl-triads
(sbcl-package->ecl-package sbcl-triads))
+(define-public sbcl-closure-template
+ ;; There are no releases since 2015.
+ (let ((commit "f1983aa525045691e128027d2a2d74831c873d6e")
+ (revision "0"))
+ (package
+ (name "sbcl-closure-template")
+ (version (git-version "0.2.1" revision commit))
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/archimag/cl-closure-template")
+ (commit commit)))
+ (file-name (git-file-name "cl-closure-template" version))
+ (sha256
+ (base32 "16h0fs6bjjd4n9pbkwcprpgyj26vsw2akk3q08m7xmsmqi05dppv"))))
+ (build-system asdf-build-system/sbcl)
+ (native-inputs (list sbcl-lift))
+ (inputs
+ (list sbcl-alexandria
+ sbcl-babel
+ sbcl-closer-mop
+ sbcl-esrap
+ sbcl-iterate
+ sbcl-parse-number
+ sbcl-split-sequence))
+ (synopsis "Lisp implementation of Google Closure Templates")
+ (description
+ "This package provides a Common Lisp implementation of Google
+Closure Templates.")
+ (home-page "https://github.com/archimag/cl-closure-template/")
+ (license license:llgpl))))
+
+(define-public cl-closure-template
+ (sbcl-package->cl-source-package sbcl-closure-template))
+
+(define-public ecl-closure-template
+ (sbcl-package->ecl-package sbcl-closure-template))
+
(define-public sbcl-cl-morse
(package
(name "sbcl-cl-morse")
diff --git a/gnu/packages/llvm.scm b/gnu/packages/llvm.scm
index 324149116b..2b50b127c2 100644
--- a/gnu/packages/llvm.scm
+++ b/gnu/packages/llvm.scm
@@ -176,11 +176,14 @@ compiler. In LLVM this library is called \"compiler-rt\".")
(properties
(append `((release-monitoring-url
. ,%llvm-release-monitoring-url))
- (clang-properties (package-version llvm)))))
+ (clang-properties (package-version llvm))))
+ (legacy-build-shared-libs? #f))
"Produce Clang with dependencies on LLVM and CLANG-RUNTIME, and applying the
given PATCHES. When TOOLS-EXTRA is given, it must point to the
'clang-tools-extra' tarball, which contains code for 'clang-tidy', 'pp-trace',
-'modularize', and other tools."
+'modularize', and other tools. LEGACY-BUILD-SHARED-LIBS? is used to configure
+the package to use the legacy BUILD_SHARED_LIBS CMake option, which was used
+until LLVM/Clang 14."
(package
(name "clang")
(version (package-version llvm))
@@ -221,14 +224,17 @@ given PATCHES. When TOOLS-EXTRA is given, it must point to the
(string-append "-DC_INCLUDE_DIRS="
(assoc-ref %build-inputs "libc")
"/include")
- ,@(if (target-riscv64?)
- (list "-DLIBOMP_LIBFLAGS=-latomic"
- "-DCMAKE_SHARED_LINKER_FLAGS=-latomic")
- `()))
+ ,@(if (target-riscv64?)
+ (list "-DLIBOMP_LIBFLAGS=-latomic"
+ "-DCMAKE_SHARED_LINKER_FLAGS=-latomic")
+ `())
+ ,@(if legacy-build-shared-libs?
+ '()
+ (list "-DCLANG_LINK_CLANG_DYLIB=ON")))
,@(if (target-riscv64?)
- `(#:make-flags '("LDFLAGS=-latomic"))
- '())
+ `(#:make-flags '("LDFLAGS=-latomic"))
+ '())
;; Don't use '-g' during the build to save space.
#:build-type "Release"
@@ -247,9 +253,11 @@ given PATCHES. When TOOLS-EXTRA is given, it must point to the
(string-delete #\- (package-version llvm))
".src")
"tools/extra")
- ;; Build and link to shared libraries.
- (substitute* "cmake/modules/AddClang.cmake"
- (("BUILD_SHARED_LIBS") "True"))
+ ,@(if legacy-build-shared-libs?
+ ;; Build and link to shared libraries.
+ '((substitute* "cmake/modules/AddClang.cmake"
+ (("BUILD_SHARED_LIBS") "True")))
+ '())
#t))))
'())
(add-after 'unpack 'add-missing-triplets
@@ -323,6 +331,15 @@ given PATCHES. When TOOLS-EXTRA is given, it must point to the
(("@GLIBC_LIBDIR@")
(string-append libc "/lib"))))))
#t)))
+ ;; Awkwardly, multiple phases added after the same phase,
+ ;; e.g. unpack, get applied in the reverse order. In other
+ ;; words, adding 'change-directory last means it occurs
+ ;; first after the unpack phase.
+ ,@(if (version>=? version "14")
+ '((add-after 'unpack 'change-directory
+ (lambda _
+ (chdir "clang"))))
+ '())
,@(if (version>=? version "10")
`((add-after 'install 'adjust-cmake-file
(lambda* (#:key outputs #:allow-other-keys)
@@ -545,10 +562,12 @@ output), and Binutils.")
("libc-static" ,glibc "static")))))
(define %llvm-monorepo-hashes
- '(("14.0.6" . "14f8nlvnmdkp9a9a79wv67jbmafvabczhah8rwnqrgd5g3hfxxxx")))
+ '(("14.0.6" . "14f8nlvnmdkp9a9a79wv67jbmafvabczhah8rwnqrgd5g3hfxxxx")
+ ("15.0.4" . "0j5kx4s970qzcjr83kk6776zzjqfshl61x9fagqz8kjxcjbpg8cj")))
(define %llvm-patches
- '(("14.0.6" . ("clang-14.0-libc-search-path.patch"))))
+ '(("14.0.6" . ("clang-14.0-libc-search-path.patch"))
+ ("15.0.4" . ("clang-15.0-libc-search-path.patch"))))
(define (llvm-monorepo version)
(origin
@@ -560,20 +579,74 @@ output), and Binutils.")
(sha256 (base32 (assoc-ref %llvm-monorepo-hashes version)))
(patches (map search-patch (assoc-ref %llvm-patches version)))))
-(define-public llvm-14
+;;; TODO: Make the base llvm all other LLVM inherit from on core-updates.
+(define-public llvm-15
(package
(name "llvm")
- (version "14.0.6")
+ (version "15.0.4")
(source (llvm-monorepo version))
(build-system cmake-build-system)
(outputs '("out" "opt-viewer"))
- (native-inputs
- `(("python" ,python-wrapper)
- ("perl" ,perl)))
- (inputs
- (list libffi))
- (propagated-inputs
- (list zlib)) ;to use output from llvm-config
+ (arguments
+ (list
+ #:configure-flags
+ #~(list
+ ;; These options are required for cross-compiling LLVM according
+ ;; to <https://llvm.org/docs/HowToCrossCompileLLVM.html>.
+ #$@(if (%current-target-system)
+ #~((string-append "-DLLVM_TABLEGEN="
+ #+(file-append this-package
+ "/bin/llvm-tblgen"))
+ #$(string-append "-DLLVM_DEFAULT_TARGET_TRIPLE="
+ (%current-target-system))
+ #$(string-append "-DLLVM_TARGET_ARCH="
+ (system->llvm-target))
+ #$(string-append "-DLLVM_TARGETS_TO_BUILD="
+ (system->llvm-target)))
+ '())
+ ;; Note: sadly, the build system refuses the use of
+ ;; -DBUILD_SHARED_LIBS=ON and the large static archives are needed to
+ ;; build clang-runtime, so we cannot delete them.
+ "-DLLVM_BUILD_LLVM_DYLIB=ON"
+ "-DLLVM_LINK_LLVM_DYLIB=ON"
+ "-DLLVM_ENABLE_FFI=ON"
+ "-DLLVM_ENABLE_RTTI=ON" ;for some third-party utilities
+ "-DLLVM_INSTALL_UTILS=ON" ;needed for rustc
+ "-DLLVM_PARALLEL_LINK_JOBS=1") ;cater to smaller build machines
+ ;; Don't use '-g' during the build, to save space.
+ #:build-type "Release"
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'unpack 'change-directory
+ (lambda _
+ (chdir "llvm")))
+ (add-after 'install 'install-opt-viewer
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let* ((opt-viewer-share (string-append #$output:opt-viewer
+ "/share")))
+ (mkdir-p opt-viewer-share)
+ (rename-file (string-append #$output "/share/opt-viewer")
+ opt-viewer-share)))))))
+ (native-inputs (list python-wrapper perl))
+ (inputs (list libffi))
+ (propagated-inputs (list zlib)) ;to use output from llvm-config
+ (home-page "https://www.llvm.org")
+ (synopsis "Optimizing compiler infrastructure")
+ (description
+ "LLVM is a compiler infrastructure designed for compile-time, link-time,
+runtime, and idle-time optimization of programs from arbitrary programming
+languages. It currently supports compilation of C and C++ programs, using
+front-ends derived from GCC 4.0.1. A new front-end for the C family of
+languages is in development. The compiler infrastructure includes mirror sets
+of programming tools as well as libraries with equivalent functionality.")
+ (license license:asl2.0)
+ (properties `((release-monitoring-url . ,%llvm-release-monitoring-url)))))
+
+(define-public llvm-14
+ (package
+ (inherit llvm-15)
+ (version "14.0.6")
+ (source (llvm-monorepo version))
(arguments
(list
#:configure-flags
@@ -613,20 +686,13 @@ output), and Binutils.")
(mkdir-p opt-viewer-share-dir)
(rename-file (string-append out "/share/opt-viewer")
opt-viewer-dir)))))))
- (home-page "https://www.llvm.org")
- (synopsis "Optimizing compiler infrastructure")
- (description
- "LLVM is a compiler infrastructure designed for compile-time, link-time,
-runtime, and idle-time optimization of programs from arbitrary programming
-languages. It currently supports compilation of C and C++ programs, using
-front-ends derived from GCC 4.0.1. A new front-end for the C family of
-languages is in development. The compiler infrastructure includes mirror sets
-of programming tools as well as libraries with equivalent functionality.")
- (license license:asl2.0)
- (properties `((release-monitoring-url . ,%llvm-release-monitoring-url)))))
-(define-public clang-runtime-14
- (let ((template (clang-runtime-from-llvm llvm-14)))
+ (native-inputs
+ `(("python" ,python-wrapper)
+ ("perl" ,perl)))))
+
+(define-public clang-runtime-15
+ (let ((template (clang-runtime-from-llvm llvm-15)))
(package
(inherit template)
(arguments
@@ -635,23 +701,21 @@ of programming tools as well as libraries with equivalent functionality.")
#~(modify-phases #$phases
(add-after 'unpack 'change-directory
(lambda _
- (chdir "compiler-rt")))))))
+ (chdir "compiler-rt")))
+ (add-after 'install 'delete-static-libraries
+ ;; Reduce size from 33 MiB to 7.4 MiB.
+ (lambda _
+ (for-each delete-file
+ (find-files #$output "\\.a(\\.syms)?$"))))))))
(native-inputs
- `(;; FIXME: libfuzzer fails to build with GCC 10.
- ("gcc" ,gcc-11)
- ,@(package-native-inputs template))))))
+ (modify-inputs (package-native-inputs template)
+ (prepend gcc-12))) ;libfuzzer fails to build with GCC 11
+ (inputs
+ (modify-inputs (package-inputs template)
+ (append libffi))))))
-(define-public clang-14
- (let ((template
- (clang-from-llvm llvm-14 clang-runtime-14
- #:tools-extra
- (origin
- (method url-fetch)
- (uri (llvm-uri "clang-tools-extra"
- (package-version llvm-14)))
- (sha256
- (base32
- "0rhq4wkmvr369nkk059skzzw7jx6qhzqhmiwmqg4sp66avzviwvw"))))))
+(define-public clang-runtime-14
+ (let ((template (clang-runtime-from-llvm llvm-14)))
(package
(inherit template)
(arguments
@@ -660,50 +724,100 @@ of programming tools as well as libraries with equivalent functionality.")
#~(modify-phases #$phases
(add-after 'unpack 'change-directory
(lambda _
- (chdir "clang"))))))))))
+ (chdir "compiler-rt")))))))
+ (native-inputs
+ `(;; FIXME: libfuzzer fails to build with GCC 10.
+ ("gcc" ,gcc-11)
+ ,@(package-native-inputs template))))))
-(define-public libomp-14
+(define-public clang-15
+ (clang-from-llvm
+ llvm-15 clang-runtime-15
+ #:tools-extra
+ (origin
+ (method url-fetch)
+ (uri (llvm-uri "clang-tools-extra"
+ (package-version llvm-15)))
+ (sha256
+ (base32
+ "03adxlh84if9p53m6izjsql500rjza9rng8akab2pdqibgrg73rh")))))
+
+(define-public clang-14
+ (clang-from-llvm
+ llvm-14 clang-runtime-14
+ #:legacy-build-shared-libs? #t
+ #:tools-extra
+ (origin
+ (method url-fetch)
+ (uri (llvm-uri "clang-tools-extra"
+ (package-version llvm-14)))
+ (sha256
+ (base32
+ "0rhq4wkmvr369nkk059skzzw7jx6qhzqhmiwmqg4sp66avzviwvw")))))
+
+(define-public libomp-15
(package
(name "libomp")
- (version (package-version llvm-14))
- (source (origin
- (method url-fetch)
- (uri (llvm-uri "openmp" version))
- (sha256
- (base32
- "07zby3gwy5c8jssabrhjk3nsxlwipnm6sk4dsvck1l5d0br1ywsg"))
- (file-name (string-append "libomp-" version ".tar.xz"))))
+ (version (package-version llvm-15))
+ (source (llvm-monorepo version))
(build-system cmake-build-system)
;; XXX: Note this gets built with GCC because building with Clang itself
;; fails (missing <atomic>, even when libcxx is added as an input.)
(arguments
(list
- #:configure-flags #~(list "-DLIBOMP_USE_HWLOC=ON"
- "-DOPENMP_TEST_C_COMPILER=clang"
- "-DOPENMP_TEST_CXX_COMPILER=clang++")
- #:test-target "check-libomp"
- #:phases
- #~(modify-phases %standard-phases
- (add-after 'unpack 'chdir-to-source-and-install-license
- (lambda _
- (chdir #$(string-append "../openmp-" version ".src"))
- (install-file "LICENSE.TXT"
- (string-append #$output "/share/doc")))))))
- (native-inputs
- (list clang-14 llvm-14 perl pkg-config python))
- (inputs
- (list `(,hwloc "lib")))
+ #:configure-flags
+ #~(list "-DLIBOMP_USE_HWLOC=ON"
+ "-DOPENMP_TEST_C_COMPILER=clang"
+ "-DOPENMP_TEST_CXX_COMPILER=clang++")
+ #:test-target "check-libomp"
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'unpack 'chdir-to-source-and-install-license
+ (lambda _
+ (chdir "openmp")
+ (install-file "LICENSE.TXT"
+ (string-append #$output "/share/doc")))))))
+ (native-inputs (list clang-15 llvm-15 perl pkg-config python))
+ (inputs (list `(,hwloc "lib")))
(home-page "https://openmp.llvm.org")
(synopsis "OpenMP run-time support library")
- (description
- "This package provides the run-time support library developed by the LLVM
-project for the OpenMP multi-theaded programming extension. This package
-notably provides @file{libgomp.so}, which is has a binary interface compatible
-with that of libgomp, the GNU Offloading and Multi Processing Library.")
+ (description "This package provides the run-time support library developed
+by the LLVM project for the OpenMP multi-theaded programming extension. This
+package notably provides @file{libgomp.so}, which is has a binary interface
+compatible with that of libgomp, the GNU Offloading and Multi Processing
+Library.")
(properties `((release-monitoring-url . ,%llvm-release-monitoring-url)
(upstream-name . "openmp")))
(license license:expat)))
+(define-public clang-toolchain-15
+ (make-clang-toolchain clang-15 libomp-15))
+
+(define-public libomp-14
+ (package
+ (inherit libomp-15)
+ (version (package-version llvm-14))
+ (source (origin
+ (method url-fetch)
+ (uri (llvm-uri "openmp" version))
+ (sha256
+ (base32
+ "07zby3gwy5c8jssabrhjk3nsxlwipnm6sk4dsvck1l5d0br1ywsg"))
+ (file-name (string-append "libomp-" version ".tar.xz"))))
+ (arguments
+ (substitute-keyword-arguments (package-arguments libomp-15)
+ ((#:phases phases)
+ #~(modify-phases #$phases
+ (replace 'chdir-to-source-and-install-license
+ (lambda _
+ (chdir #$(string-append "../openmp-" version ".src"))
+ (install-file "LICENSE.TXT"
+ (string-append #$output "/share/doc"))))))))
+ (native-inputs
+ (modify-inputs (package-native-inputs libomp-15)
+ (replace "clang" clang-14)
+ (replace "llvm" llvm-14)))))
+
(define-public clang-toolchain-14
(make-clang-toolchain clang-14 libomp-14))
@@ -733,6 +847,7 @@ with that of libgomp, the GNU Offloading and Multi Processing Library.")
(define-public clang-13
(clang-from-llvm llvm-13 clang-runtime-13
"1j8pr5kk8iqyb4jds3yl7c6x672617h4ngkpl4575j7mk4nrwykq"
+ #:legacy-build-shared-libs? #t
#:patches '("clang-13.0-libc-search-path.patch")
#:tools-extra
(origin
@@ -847,6 +962,7 @@ with that of libgomp, the GNU Offloading and Multi Processing Library.")
(define-public clang-12
(clang-from-llvm llvm-12 clang-runtime-12
"0px4gl27az6cdz6adds89qzdwb1cqpjsfvrldbz9qvpmphrj34bf"
+ #:legacy-build-shared-libs? #t
#:patches '("clang-12.0-libc-search-path.patch")
#:tools-extra
(origin
@@ -901,6 +1017,7 @@ with that of libgomp, the GNU Offloading and Multi Processing Library.")
(define-public clang-11
(clang-from-llvm llvm-11 clang-runtime-11
"02ajkij85966vd150iy246mv16dsaph1kfi0y8wnncp8w6nar5hg"
+ #:legacy-build-shared-libs? #t
#:patches '("clang-11.0-libc-search-path.patch")
#:tools-extra
(origin
@@ -957,12 +1074,13 @@ with that of libgomp, the GNU Offloading and Multi Processing Library.")
(define-public clang-10
(clang-from-llvm llvm-10 clang-runtime-10
"091bvcny2lh32zy8f3m9viayyhb2zannrndni7325rl85cwgr6pr"
+ #:legacy-build-shared-libs? #t
#:patches '("clang-10.0-libc-search-path.patch")
#:tools-extra
(origin
(method url-fetch)
(uri (llvm-uri "clang-tools-extra"
- (package-version llvm-10)))
+ (package-version llvm-10)))
(sha256
(base32
"06n1yp638rh24xdxv9v2df0qajxbjz4w59b7dd4ky36drwmpi4yh")))))
@@ -1026,6 +1144,7 @@ with that of libgomp, the GNU Offloading and Multi Processing Library.")
(define-public clang-9
(clang-from-llvm llvm-9 clang-runtime-9
"0ls2h3iv4finqyflyhry21qhc9cm9ga7g1zq21020p065qmm2y2p"
+ #:legacy-build-shared-libs? #t
#:patches '("clang-9.0-libc-search-path.patch")))
(define-public libomp-9
@@ -1069,6 +1188,7 @@ with that of libgomp, the GNU Offloading and Multi Processing Library.")
(define-public clang-8
(clang-from-llvm llvm-8 clang-runtime-8
"0ihnbdl058gvl2wdy45p5am55bq8ifx8m9mhcsgj9ax8yxlzvvvh"
+ #:legacy-build-shared-libs? #t
#:patches '("clang-8.0-libc-search-path.patch")))
(define-public libomp-8
@@ -1111,6 +1231,7 @@ with that of libgomp, the GNU Offloading and Multi Processing Library.")
(define-public clang-7
(clang-from-llvm llvm-7 clang-runtime-7
"0vc4i87qwxnw9lci4ayws9spakg0z6w5w670snj9f8g5m9rc8zg9"
+ #:legacy-build-shared-libs? #t
#:patches '("clang-7.0-libc-search-path.patch")))
(define-public libomp-7
@@ -1152,6 +1273,7 @@ with that of libgomp, the GNU Offloading and Multi Processing Library.")
(define-public clang-6
(clang-from-llvm llvm-6 clang-runtime-6
"0rxn4rh7rrnsqbdgp4gzc8ishbkryhpl1kd3mpnxzpxxhla3y93w"
+ #:legacy-build-shared-libs? #t
#:patches '("clang-6.0-libc-search-path.patch")))
(define-public libomp-6
@@ -1213,6 +1335,7 @@ with that of libgomp, the GNU Offloading and Multi Processing Library.")
(define-public clang-3.9.1
(clang-from-llvm llvm-3.9.1 clang-runtime-3.9.1
"0qsyyb40iwifhhlx9a3drf8z6ni6zwyk3bvh0kx2gs6yjsxwxi76"
+ #:legacy-build-shared-libs? #t
#:patches '("clang-3.8-libc-search-path.patch")))
(define-public llvm-3.8
@@ -1239,6 +1362,7 @@ with that of libgomp, the GNU Offloading and Multi Processing Library.")
(define-public clang-3.8
(clang-from-llvm llvm-3.8 clang-runtime-3.8
"1prc72xmkgx8wrzmrr337776676nhsp1qd3mw2bvb22bzdnq7lsc"
+ #:legacy-build-shared-libs? #t
#:patches '("clang-3.8-libc-search-path.patch")))
(define-public llvm-3.7
@@ -1265,6 +1389,7 @@ with that of libgomp, the GNU Offloading and Multi Processing Library.")
(define-public clang-3.7
(clang-from-llvm llvm-3.7 clang-runtime-3.7
"0x065d0w9b51xvdjxwfzjxng0gzpbx45fgiaxpap45ragi61dqjn"
+ #:legacy-build-shared-libs? #t
#:patches '("clang-3.5-libc-search-path.patch")))
(define-public llvm-3.6
@@ -1324,6 +1449,7 @@ with that of libgomp, the GNU Offloading and Multi Processing Library.")
(define-public clang-3.5
(clang-from-llvm llvm-3.5 clang-runtime-3.5
"0846h8vn3zlc00jkmvrmy88gc6ql6014c02l4jv78fpvfigmgssg"
+ #:legacy-build-shared-libs? #t
#:patches '("clang-3.5-libc-search-path.patch")))
;; Default LLVM and Clang version.
@@ -1393,14 +1519,14 @@ with that of libgomp, the GNU Offloading and Multi Processing Library.")
(properties `((release-monitoring-url . ,%llvm-release-monitoring-url)))
(license license:asl2.0))) ;with LLVM exceptions
-(define-public lld-14
+(define-public lld-15
(package
(name "lld")
- (version "14.0.6")
+ (version "15.0.4")
(source (llvm-monorepo version))
(build-system cmake-build-system)
(inputs
- (list llvm-14))
+ (list llvm-15))
(arguments
'(#:build-type "Release"
;; TODO: Tests require the lit tool, which isn't installed by the LLVM
@@ -1416,6 +1542,14 @@ with that of libgomp, the GNU Offloading and Multi Processing Library.")
components which highly leverage existing libraries in the larger LLVM Project.")
(license license:asl2.0))) ; With LLVM exception
+(define-public lld-14
+ (package
+ (inherit lld-15)
+ (version "14.0.6")
+ (source (llvm-monorepo version))
+ (inputs
+ (list llvm-14))))
+
(define-public lld-13
(package
(inherit lld-14)
@@ -1491,6 +1625,9 @@ misuse of libraries outside of the store.")
(make-lld-wrapper lld))
;;; A LLD wrapper that can be used as a (near) drop-in replacement to GNU ld.
+(define-public lld-as-ld-wrapper-15
+ (make-lld-wrapper lld-15 #:lld-as-ld? #t))
+
(define-public lld-as-ld-wrapper
(make-lld-wrapper lld #:lld-as-ld? #t))
diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm
index 7279234f69..891b504a46 100644
--- a/gnu/packages/package-management.scm
+++ b/gnu/packages/package-management.scm
@@ -1007,7 +1007,7 @@ extracting, creating, and converting between formats.")
(define-public conda
(package
(name "conda")
- (version "4.10.3")
+ (version "22.9.0")
(source
(origin
(method git-fetch)
@@ -1017,17 +1017,16 @@ extracting, creating, and converting between formats.")
(file-name (git-file-name name version))
(sha256
(base32
- "1w4yy62bsvkybjvcm5fspck4ns5j16nplzpbx6bxv7zhx69pcp4n"))))
+ "16vz4vx311ry9w35mi5wna8p8n3abd6wdqrpqzjfdlwv7hcr44s4"))))
(build-system python-build-system)
(arguments
`(#:phases
(modify-phases %standard-phases
- (add-after 'unpack 'fix-permissions
+ ;; The default version of pytest does not support these options.
+ (add-after 'unpack 'use-older-pytest
(lambda _
- ;; This file is no longer writable after downloading with
- ;; 'git-fetch'
- (make-file-writable
- "tests/conda_env/support/saved-env/environment.yml")))
+ (substitute* "setup.cfg"
+ (("--xdoctest-.*") ""))))
(add-after 'unpack 'fix-ruamel-yaml-dependency
(lambda _
(substitute* "setup.py"
@@ -1042,8 +1041,7 @@ extracting, creating, and converting between formats.")
(substitute* "conda/core/initialize.py"
(("python_exe = join")
(format #f "python_exe = \"~a/bin/python\" #"
- python))))
- #t))
+ python))))))
(add-after 'unpack 'do-not-use-python-root-as-prefix
(lambda* (#:key inputs outputs #:allow-other-keys)
(let ((out (assoc-ref outputs "out"))
@@ -1066,45 +1064,50 @@ extracting, creating, and converting between formats.")
(("os.path.join\\(sys.prefix, bin_dir, exe\\)")
(format #f "\"~a/bin/conda\"" out))
(("'CONDA_EXE', sys.executable")
- (format #f "'CONDA_EXE', \"~a/bin/conda\"" out))))
- #t))
+ (format #f "'CONDA_EXE', \"~a/bin/conda\"" out))))))
(add-before 'build 'create-version-file
(lambda _
(with-output-to-file "conda/.version"
- (lambda () (display ,version)))
- #t))
+ (lambda () (display ,version)))))
(replace 'check
- (lambda _
- (setenv "HOME" "/tmp")
- (invoke "py.test" "-vv"
- "-k"
- (string-append
- "not integration"
- ;; This one reports a newer version of conda than
- ;; expected.
- " and not test_auto_update_conda"
- ;; This fails because the output directory is not a
- ;; Conda environment.
- " and not test_list"
- ;; This fails because we patched the default root
- ;; prefix.
- " and not test_default_target_is_root_prefix"
-
- ;; These fail because ...
- ;; TODO: conda patches its own shebang to
- ;; $conda-prefix/bin/python, which is obviously wrong.
- " and not test_run_returns_int"
- " and not test_run_returns_zero_errorlevel"
- " and not test_run_returns_nonzero_errorlevel"
-
- ;; TODO: I don't understand what this failure means
- " and not test_PrefixData_return_value_contract"
- ;; TODO: same here
- " and not test_install_1"
- ;; Not sure if this is really wrong. This fails because
- ;; /gnu/store/...python-conda-4.8.3/bin/python
- ;; is not /gnu/store/...python-wrapper-3.8.2/bin/python
- " and not test_make_entry_point"))))
+ (lambda* (#:key tests? #:allow-other-keys)
+ ;; These tests all require network access.
+ (for-each delete-file '("tests/cli/test_main_clean.py"
+ "tests/cli/test_main_rename.py"))
+ (when tests?
+ (setenv "HOME" "/tmp")
+ (invoke "py.test" "-vv"
+ "-k"
+ (string-append
+ "not integration"
+ ;; This one reports a newer version of conda than
+ ;; expected; conda-1.5.2-py27_0 instead of
+ ;; conda-1.3.5-py27_0.
+ " and not test_auto_update_conda"
+ ;; This fails because the output directory is not a
+ ;; Conda environment.
+ " and not test_list"
+ ;; This fails because we patched the default root
+ ;; prefix.
+ " and not test_default_target_is_root_prefix"
+ ;; This fails because of missing features in python-flaky.
+ " and not test_no_features"
+ ;; These fail because they require network access
+ " and not test_no_ssl"
+ " and not test_run_readonly_env"
+ " and not test_run_returns_int"
+ " and not test_run_returns_nonzero_errorlevel"
+ " and not test_run_returns_zero_errorlevel"
+ " and not test_run_uncaptured"
+
+ ;; TODO: I don't understand what this failure means
+ " and not test_PrefixData_return_value_contract"
+ ;; TODO: same here
+ " and not test_install_1"
+ ;; Not sure if this is really wrong. This fails because
+ ;; /gnu/store/...conda-22.9.0/bin/python
+ ;; is not /gnu/store/...python-wrapper-3.9.9/bin/python
+ " and not test_make_entry_point")))))
(add-after 'install 'init
;; This writes a whole bunch of shell initialization files to the
;; prefix directory. Many features of conda can only be used after
@@ -1119,8 +1122,10 @@ extracting, creating, and converting between formats.")
(list python-wrapper))
(propagated-inputs
(list python-anaconda-client
+ python-boto3
python-conda-package-handling
python-cytoolz
+ python-pluggy
python-pycosat
python-pytest
python-pyyaml
@@ -1131,7 +1136,10 @@ extracting, creating, and converting between formats.")
;; XXX: This is dragged in by libarchive and is needed at runtime.
zstd))
(native-inputs
- (list python-pytest-timeout))
+ (list python-coverage
+ python-flaky
+ python-pytest-timeout
+ python-pytest-xprocess))
(home-page "https://github.com/conda/conda")
(synopsis "Cross-platform, OS-agnostic, system-level binary package manager")
(description
diff --git a/gnu/packages/patches/clang-15.0-libc-search-path.patch b/gnu/packages/patches/clang-15.0-libc-search-path.patch
new file mode 100644
index 0000000000..20726859b2
--- /dev/null
+++ b/gnu/packages/patches/clang-15.0-libc-search-path.patch
@@ -0,0 +1,95 @@
+Clang attempts to guess file names based on the OS and distro (yes!),
+but unfortunately, that doesn't work for us.
+
+This patch makes it easy to insert libc's $libdir so that Clang passes the
+correct absolute file name of crt1.o etc. to 'ld'. It also disables all
+the distro-specific stuff and removes the hard-coded FHS directory names
+to make sure Clang also works on foreign distros.
+
+diff --git a/clang/lib/Driver/Distro.cpp b/clang/libDriver/Distro.cpp
+index 1898667..35de813 100644
+--- a/clang/lib/Driver/Distro.cpp
++++ b/clang/libDriver/Distro.cpp
+@@ -97,6 +97,10 @@ static Distro::DistroType DetectLsbRelease(llvm::vfs::FileSystem &VFS) {
+ }
+
+ static Distro::DistroType DetectDistro(llvm::vfs::FileSystem &VFS) {
++ // The compiler should always behave the same, even when used via Guix on a
++ // foreign distro.
++ return Distro::UnknownDistro;
++
+ Distro::DistroType Version = Distro::UnknownDistro;
+
+ // Newer freedesktop.org's compilant systemd-based systems
+diff --git a/clang/lib/Driver/ToolChains/Cuda.cpp b/clang/libDriver/ToolChains/Cuda.cpp
+index 7ad990d..e4da4d4 100644
+--- a/clang/lib/Driver/ToolChains/Cuda.cpp
++++ b/clang/libDriver/ToolChains/Cuda.cpp
+@@ -117,6 +117,9 @@ CudaInstallationDetector::CudaInstallationDetector(
+ const Driver &D, const llvm::Triple &HostTriple,
+ const llvm::opt::ArgList &Args)
+ : D(D) {
++ // Don't look for CUDA in /usr.
++ return;
++
+ struct Candidate {
+ std::string Path;
+ bool StrictChecking;
+diff --git a/clang/lib/Driver/ToolChains/Linux.cpp b/clang/libDriver/ToolChains/Linux.cpp
+index ceb1a98..9d7a14a 100644
+--- a/clang/lib/Driver/ToolChains/Linux.cpp
++++ b/clang/libDriver/ToolChains/Linux.cpp
+@@ -188,6 +188,10 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
+
+ Generic_GCC::PushPPaths(PPaths);
+
++ // Comment out the distro-specific tweaks so that they don't bite when
++ // using Guix on a foreign distro.
++#if 0
++
+ Distro Distro(D.getVFS(), Triple);
+
+ if (Distro.IsAlpineLinux() || Triple.isAndroid()) {
+@@ -256,6 +260,7 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
+
+ if (IsAndroid || Distro.IsOpenSUSE())
+ ExtraOpts.push_back("--enable-new-dtags");
++#endif
+
+ // The selection of paths to try here is designed to match the patterns which
+ // the GCC driver itself uses, as this is part of the GCC-compatible driver.
+@@ -276,6 +281,7 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
+ }
+ Generic_GCC::AddMultilibPaths(D, SysRoot, OSLibDir, MultiarchTriple, Paths);
+
++#if 0
+ addPathIfExists(D, concat(SysRoot, "/lib", MultiarchTriple), Paths);
+ addPathIfExists(D, concat(SysRoot, "/lib/..", OSLibDir), Paths);
+
+@@ -304,9 +310,11 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
+ addPathIfExists(D, concat(SysRoot, "/", OSLibDir, ABIName), Paths);
+ addPathIfExists(D, concat(SysRoot, "/usr", OSLibDir, ABIName), Paths);
+ }
++#endif
+
+ Generic_GCC::AddMultiarchPaths(D, SysRoot, OSLibDir, Paths);
+
++#if 0
+ // The deprecated -DLLVM_ENABLE_PROJECTS=libcxx configuration installs
+ // libc++.so in D.Dir+"/../lib/". Detect this path.
+ // TODO Remove once LLVM_ENABLE_PROJECTS=libcxx is unsupported.
+@@ -316,6 +324,14 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
+
+ addPathIfExists(D, concat(SysRoot, "/lib"), Paths);
+ addPathIfExists(D, concat(SysRoot, "/usr/lib"), Paths);
++#endif
++
++ // Add libc's lib/ directory to the search path, so that crt1.o, crti.o,
++ // and friends can be found.
++ addPathIfExists(D, "@GLIBC_LIBDIR@", Paths);
++
++ // Add GCC's lib/ directory so libstdc++.so can be found.
++ addPathIfExists(D, GCCInstallation.getParentLibPath(), Paths);
+ }
+
+ ToolChain::RuntimeLibType Linux::GetDefaultRuntimeLibType() const {
diff --git a/gnu/packages/patches/giara-fix-login.patch b/gnu/packages/patches/giara-fix-login.patch
deleted file mode 100644
index f15caaf559..0000000000
--- a/gnu/packages/patches/giara-fix-login.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From f4adc1f52d777cea3331b4acae0c3bdec4d0eb70 Mon Sep 17 00:00:00 2001
-From: Paper <paper@tilde.institute>
-Date: Fri, 12 Mar 2021 21:10:34 +0000
-Subject: [PATCH] fix login by removing everything after # from URL
-
----
- giara/__main__.py | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/giara/__main__.py b/giara/__main__.py
-index 10b9ae2..d235332 100644
---- a/giara/__main__.py
-+++ b/giara/__main__.py
-@@ -53,8 +53,9 @@ class GApplication(Gtk.Application):
- def open(self, app, files, *args):
- target = files[0].get_uri()
- print(target)
-+ code = target.split('=')[-1].split('#')[0]
- get_authorized_client(
-- reddit=self._unauth_reddit, code=target.split('=')[-1]
-+ reddit=self._unauth_reddit, code=code
- )
- self.continue_activate(self._unauth_reddit)
-
---
-GitLab
-
diff --git a/gnu/packages/python-web.scm b/gnu/packages/python-web.scm
index f6b4faf692..871062f697 100644
--- a/gnu/packages/python-web.scm
+++ b/gnu/packages/python-web.scm
@@ -222,13 +222,13 @@ reusable library for parsing, manipulating, and generating URIs.")
(define-public python-praw
(package
(name "python-praw")
- (version "7.5.0")
+ (version "7.6.1")
(source
(origin
(method url-fetch)
(uri (pypi-uri "praw" version))
(sha256
- (base32 "1nqcwz8r8xp4rfpy2i11x2fjga8fmmf6zw94xjk1h1yxgn1gq6zr"))))
+ (base32 "17pvdlcasr08p5hb1x7shjh8yvn621lzm0bvnwd3b1r1qpzrbz07"))))
(build-system python-build-system)
(arguments
`(#:phases
@@ -953,14 +953,14 @@ other HTTP libraries.")
(define-public httpie
(package
(name "httpie")
- (version "3.1.0")
+ (version "3.2.1")
(source
(origin
(method url-fetch)
(uri (pypi-uri "httpie" version))
(sha256
(base32
- "1npyfvrq0l56bil8rnpj78mav378mxx4zcqzq1jjx4aap1020jif"))))
+ "1v736y2h7lcyrnxs9y5sf4xwzgll7pc2s6r3ny929mm8lcn07h69"))))
(build-system python-build-system)
(arguments
;; The tests attempt to access external web servers, so we cannot run them.
@@ -973,6 +973,7 @@ other HTTP libraries.")
python-pysocks
python-charset-normalizer
python-defusedxml
+ python-rich
python-multidict))
(home-page "https://httpie.io")
(synopsis "cURL-like tool for humans")
diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
index 1758450c2f..e3d1ac05fa 100644
--- a/gnu/packages/python-xyz.scm
+++ b/gnu/packages/python-xyz.scm
@@ -439,7 +439,7 @@ easy logging and rotating to a console or a file.")
(invoke "pytest" "--cov=logbook" "-r" "s" "tests")))))))
(native-inputs
(list python-cython python-mock python-pytest python-pytest-cov
- python-google-brotli))
+ python-brotli))
(home-page "https://github.com/getlogbook/logbook")
(synopsis "Logbook is a logging replacement for Python")
(description
@@ -11284,14 +11284,22 @@ Python.")
(package
(inherit python-mistune)
(name "python-mistune-next")
- (version "2.0.0rc1")
+ (version "2.0.4")
(source (origin
(method url-fetch)
(uri (pypi-uri "mistune" version))
(sha256
(base32
- "1nd7iav1ixh9hlj4hxn6lmpava88d86ys8rqm30wgvr7gjlxnas5"))))
- (native-inputs (list python-nose))))
+ "024q9l6mgd37wa25w7dhskv1m3zsj5lf0w9cfyx7l9p2adhadq4y"))))
+ (arguments
+ (list
+ #:phases
+ #~(modify-phases %standard-phases
+ (replace 'check
+ (lambda* (#:key tests? #:allow-other-keys)
+ (when tests?
+ (invoke "pytest" "-vv")))))))
+ (native-inputs (list python-pytest))))
(define-public python-markdown
(package
diff --git a/gnu/packages/rust.scm b/gnu/packages/rust.scm
index c4bb7d5292..bfa5e1bc68 100644
--- a/gnu/packages/rust.scm
+++ b/gnu/packages/rust.scm
@@ -607,6 +607,40 @@ safety and thread safety guarantees.")
;; * error: unknown codegen option: `symbol-mangling-version`
rust-1.59 "1.60.0" "1drqr0a26x1rb2w3kj0i6abhgbs3jx5qqkrcwbwdlx7n3inq5ji0"))
+(define rust-1.61
+ (rust-bootstrapped-package
+ rust-1.60 "1.61.0" "1vfs05hkf9ilk19b2vahqn8l6k17pl9nc1ky9kgspaascx8l62xd"))
+
+(define rust-1.62
+ (rust-bootstrapped-package
+ rust-1.61 "1.62.1" "0gqkg34ic77dcvsz69qbdng6g3zfhl6hnhx7ha1mjkyrzipvxb3j"))
+
+(define rust-1.63
+ (rust-bootstrapped-package
+ rust-1.62 "1.63.0" "1l4rrbzhxv88pnfq94nbyb9m6lfnjwixma3mwjkmvvs2aqlq158z"))
+
+(define rust-1.64
+ (let ((base-rust
+ (rust-bootstrapped-package
+ rust-1.63 "1.64.0" "018j720b2n12slp4xk64jc6shkncd46d621qdyzh2a8s3r49zkdk")))
+ (package
+ (inherit base-rust)
+ (arguments
+ (substitute-keyword-arguments (package-arguments base-rust)
+ ((#:phases phases)
+ `(modify-phases ,phases
+ (replace 'patch-cargo-checksums
+ (lambda* _
+ (substitute* '("Cargo.lock"
+ "src/bootstrap/Cargo.lock")
+ (("(checksum = )\".*\"" all name)
+ (string-append name "\"" ,%cargo-reference-hash "\"")))
+ (generate-all-checksums "vendor"))))))))))
+
+(define rust-1.65
+ (rust-bootstrapped-package
+ rust-1.64 "1.65.0" "0f005kc0vl7qyy298f443i78ibz71hmmh820726bzskpyrkvna2q"))
+
;;; Note: Only the latest versions of Rust are supported and tested. The
;;; intermediate rusts are built for bootstrapping purposes and should not
;;; be relied upon. This is to ease maintenance and reduce the time
diff --git a/gnu/packages/shellutils.scm b/gnu/packages/shellutils.scm
index e70b9ef706..3fd98ecba8 100644
--- a/gnu/packages/shellutils.scm
+++ b/gnu/packages/shellutils.scm
@@ -369,7 +369,7 @@ between various shells or commands.")
(define-public trash-cli
(package
(name "trash-cli")
- (version "0.21.10.24")
+ (version "0.22.10.20")
(source
(origin
(method git-fetch)
@@ -379,37 +379,38 @@ between various shells or commands.")
(file-name (git-file-name name version))
(sha256
(base32
- "01is32lk6prwhajvlmgn3xs4fcpmiqivizcqkj9k80jx6mqjifzs"))))
+ "0hkn0hmwrag56g447ddqapib0s399a6b4a9wlliif6zmirxlww9n"))))
(build-system python-build-system)
(arguments
- `(#:phases
- (modify-phases %standard-phases
- (add-before 'build 'patch-path-constants
- (lambda* (#:key inputs #:allow-other-keys)
- (let ((libc (assoc-ref inputs "libc"))
- (coreutils (assoc-ref inputs "coreutils")))
- (substitute* "trashcli/list_mount_points.py"
- (("\"/lib/libc.so.6\".*")
- (string-append "\"" libc "/lib/libc.so.6\"\n"))
- (("\"df\"")
- (string-append "\"" coreutils "/bin/df\""))))))
- (add-before 'build 'fix-setup.py
- (lambda* (#:key outputs #:allow-other-keys)
- (let* ((out (assoc-ref outputs "out"))
- (bin (string-append out "/bin")))
- (mkdir-p bin)
- (substitute* "setup.py"
- (("add_script\\('")
- (string-append "add_script('" bin "/" ))))))
- ;; Whenever setup.py is invoked, scripts in out/bin/ are
- ;; replaced. Thus we cannot invoke setup.py for testing.
- ;; Upstream also uses pytest.
- (replace 'check
- (lambda* (#:key tests? #:allow-other-keys)
- (when tests?
- (invoke "pytest")))))))
+ (list #:phases
+ #~(modify-phases %standard-phases
+ (add-before 'build 'patch-path-constants
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let ((libc (search-input-file inputs "lib/libc.so.6"))
+ (df #$(file-append coreutils "/bin/df")))
+ (substitute* "trashcli/list_mount_points.py"
+ (("\"/lib/libc.so.6\".*")
+ (string-append "\"" libc "\"\n"))
+ (("\"df\"")
+ (string-append "\"" df "\""))))))
+ (add-before 'build 'fix-setup.py
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let ((bin (string-append #$output "/bin")))
+ (mkdir-p bin)
+ (substitute* "setup.py"
+ (("add_script\\('")
+ (string-append "add_script('" bin "/" ))))))
+ ;; Whenever setup.py is invoked, scripts in out/bin/ are
+ ;; replaced. Thus we cannot invoke setup.py for testing.
+ ;; Upstream also uses pytest.
+ (replace 'check
+ (lambda* (#:key tests? #:allow-other-keys)
+ (when tests?
+ (invoke "pytest")))))))
(native-inputs
(list python-pytest
+ python-parameterized
+ python-flexmock
python-mock
python-six))
(inputs (list coreutils))
diff --git a/gnu/packages/syndication.scm b/gnu/packages/syndication.scm
index 57f8b61502..506245fd17 100644
--- a/gnu/packages/syndication.scm
+++ b/gnu/packages/syndication.scm
@@ -164,7 +164,7 @@ cards.")
(define-public giara
(package
(name "giara")
- (version "0.3")
+ (version "1.0.1")
(source
(origin
(method git-fetch)
@@ -172,15 +172,17 @@ cards.")
(url "https://gitlab.gnome.org/World/giara")
(commit version)))
(file-name (git-file-name name version))
- ;; To fix authentication while adding accounts.
- (patches (search-patches "giara-fix-login.patch"))
(sha256
- (base32 "004qmkfrgd37axv0b6hfh6v7nx4pvy987k5yv4bmlmkj9sbqm6f9"))))
+ (base32 "00vmfghp9g8yzn2d1xjawz5a8bdwn1jl1k24mjaf4vlvdy4sg9l4"))))
(build-system meson-build-system)
(arguments
`(#:glib-or-gtk? #t
#:phases
(modify-phases %standard-phases
+ (add-after 'unpack 'skip-icon-cache
+ (lambda _
+ (substitute* "meson_post_install.py"
+ (("gtk-update-icon-cache") "true"))))
(add-after 'glib-or-gtk-wrap 'wrap-paths
(lambda* (#:key outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
@@ -193,31 +195,29 @@ cards.")
`("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH") ,lib))
`("GI_TYPELIB_PATH" ":" prefix (,(getenv "GI_TYPELIB_PATH"))))))))))
(native-inputs
- `(("gettext" ,gettext-minimal)
- ("glib:bin" ,glib "bin")
- ("gobject-introspection" ,gobject-introspection)
- ("gtk+:bin" ,gtk+ "bin")
- ("pkg-config" ,pkg-config)
- ("xmllint" ,libxml2)))
+ (list gettext-minimal
+ (list glib "bin")
+ gobject-introspection
+ (list gtk "bin")
+ pkg-config))
(inputs
- `(("glib" ,glib)
- ("gtk+" ,gtk+)
- ("gtksourceview" ,gtksourceview)
- ("libhandy" ,libhandy)
- ("python" ,python)
- ("python-beautifulsoup" ,python-beautifulsoup4)
- ("python-dateutil" ,python-dateutil)
- ("python-mistune" ,python-mistune)
- ("python-pillow" ,python-pillow)
- ("python-praw" ,python-praw)
- ("python-pycairo" ,python-pycairo)
- ("python-pygobject" ,python-pygobject)
- ("python-requests" ,python-requests)
- ("webkitgtk" ,webkitgtk-with-libsoup2)))
+ (list blueprint-compiler
+ glib
+ gtk
+ gtksourceview
+ libadwaita
+ python
+ python-beautifulsoup4
+ python-dateutil
+ python-mistune-next
+ python-pillow
+ python-praw
+ python-pygobject
+ python-requests))
(propagated-inputs
(list dconf))
(synopsis "Client for Reddit")
- (description "Giara is a reddit app, built with Python, GTK and Handy.")
+ (description "Giara is a reddit app, built with Python, GTK4 and libadwaita.")
(home-page "https://giara.gabmus.org/")
(license license:gpl3+)))
diff --git a/gnu/packages/vim.scm b/gnu/packages/vim.scm
index c35b74eec2..957f00a92e 100644
--- a/gnu/packages/vim.scm
+++ b/gnu/packages/vim.scm
@@ -692,7 +692,7 @@ are detected, the user is notified.")))
(define-public neovim
(package
(name "neovim")
- (version "0.8.0")
+ (version "0.8.1")
(source (origin
(method git-fetch)
(uri (git-reference
@@ -701,7 +701,7 @@ are detected, the user is notified.")))
(file-name (git-file-name name version))
(sha256
(base32
- "0hkd49wkxfi6k1xa92hdd4b9z356r32hbpr78z1cigcln1wr0z7j"))))
+ "08qyni2qg63ghxl50am97pajdhkp05s1cglis3mlvkxx3pvzkrli"))))
(build-system cmake-build-system)
(arguments
(list #:modules
diff --git a/gnu/services/configuration.scm b/gnu/services/configuration.scm
index 636c49ccba..dacfc52ba9 100644
--- a/gnu/services/configuration.scm
+++ b/gnu/services/configuration.scm
@@ -242,17 +242,17 @@ does not have a default value" field kind)))
stem
#,(id #'stem #'make- #'stem)
#,(id #'stem #'stem #'?)
- (%location #,(id #'stem #'stem #'-location)
- (default (and=> (current-source-location)
- source-properties->location))
- (innate))
#,@(map (lambda (name getter def)
#`(#,name #,getter (default #,def)
(sanitize
#,(id #'stem #'validate- #'stem #'- name))))
#'(field ...)
#'(field-getter ...)
- #'(field-default ...)))
+ #'(field-default ...))
+ (%location #,(id #'stem #'stem #'-location)
+ (default (and=> (current-source-location)
+ source-properties->location))
+ (innate)))
(define #,(id #'stem #'stem #'-fields)
(list (configuration-field
diff --git a/gnu/services/mcron.scm b/gnu/services/mcron.scm
index 23760ebda4..52332d6123 100644
--- a/gnu/services/mcron.scm
+++ b/gnu/services/mcron.scm
@@ -1,5 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -18,6 +19,7 @@
(define-module (gnu services mcron)
#:use-module (gnu services)
+ #:use-module (gnu services configuration)
#:use-module (gnu services shepherd)
#:use-module (gnu packages guile-xyz)
#:use-module (guix deprecation)
@@ -30,6 +32,8 @@
mcron-configuration?
mcron-configuration-mcron
mcron-configuration-jobs
+ mcron-configuration-log?
+ mcron-configuration-log-format
mcron-service-type))
@@ -48,13 +52,23 @@
;;;
;;; Code:
-(define-record-type* <mcron-configuration> mcron-configuration
- make-mcron-configuration
- mcron-configuration?
- (mcron mcron-configuration-mcron ;file-like
- (default mcron))
- (jobs mcron-configuration-jobs ;list of <mcron-job>
- (default '())))
+(define list-of-gexps?
+ (list-of gexp?))
+
+(define-configuration/no-serialization mcron-configuration
+ (mcron (file-like mcron) "The mcron package to use.")
+ (jobs
+ (list-of-gexps '())
+ "This is a list of gexps (@pxref{G-Expressions}), where each gexp
+corresponds to an mcron job specification (@pxref{Syntax, mcron job
+specifications,, mcron, GNU@tie{}mcron}).")
+ (log? (boolean #t) "Log messages to standard output.")
+ (log-format
+ (string "~1@*~a ~a: ~a~%")
+ "@code{(ice-9 format)} format string for log messages. The default value
+produces messages like \"@samp{@var{pid} @var{name}:
+@var{message}\"} (@pxref{Invoking mcron, Invoking,, mcron, GNU@tie{}mcron}).
+Each message is also prefixed by a timestamp by GNU Shepherd."))
(define (job-files mcron jobs)
"Return a list of file-like object for JOBS, a list of gexps."
@@ -124,21 +138,25 @@ files."
(define mcron-shepherd-services
(match-lambda
- (($ <mcron-configuration> mcron ()) ;nothing to do!
+ (($ <mcron-configuration> mcron ()) ;nothing to do!
'())
- (($ <mcron-configuration> mcron jobs)
+ (($ <mcron-configuration> mcron jobs log? log-format)
(let ((files (job-files mcron jobs)))
(list (shepherd-service
(provision '(mcron))
(requirement '(user-processes))
(modules `((srfi srfi-1)
(srfi srfi-26)
- (ice-9 popen) ;for the 'schedule' action
+ (ice-9 popen) ;for the 'schedule' action
(ice-9 rdelim)
(ice-9 match)
,@%default-modules))
(start #~(make-forkexec-constructor
- (list (string-append #$mcron "/bin/mcron") #$@files)
+ (list (string-append #$mcron "/bin/mcron")
+ #$@(if log?
+ #~("--log" "--log-format" #$log-format)
+ #~())
+ #$@files)
;; Disable auto-compilation of the job files and set a
;; sane value for 'PATH'.
@@ -172,4 +190,11 @@ files."
jobs)))))
(default-value (mcron-configuration)))) ;empty job list
+
+;;;
+;;; Generate documentation.
+;;;
+(define (generate-doc)
+ (configuration->documentation 'mcron-configuration))
+
;;; mcron.scm ends here
diff --git a/gnu/services/monitoring.scm b/gnu/services/monitoring.scm
index 9c8704092c..d6dc2c1e03 100644
--- a/gnu/services/monitoring.scm
+++ b/gnu/services/monitoring.scm
@@ -576,7 +576,7 @@ fastcgi_param PHP_VALUE \"post_max_size = 16M
(define (zabbix-front-end-nginx-extension config)
(match config
- (($ <zabbix-front-end-configuration> _ server nginx)
+ (($ <zabbix-front-end-configuration> server nginx)
(if (null? nginx)
(list
(nginx-server-configuration
@@ -622,8 +622,8 @@ create it manually.")
(define (zabbix-front-end-config config)
(match-record config <zabbix-front-end-configuration>
- (%location db-host db-port db-name db-user db-password db-secret-file
- zabbix-host zabbix-port)
+ (db-host db-port db-name db-user db-password db-secret-file
+ zabbix-host zabbix-port %location)
(mixed-text-file "zabbix.conf.php"
"\
<?php
diff --git a/gnu/services/version-control.scm b/gnu/services/version-control.scm
index b6b78e504e..86d40bdbe3 100644
--- a/gnu/services/version-control.scm
+++ b/gnu/services/version-control.scm
@@ -313,7 +313,7 @@ access to exported repositories under @file{/srv/git}."
(($ <gitolite-configuration> package user group home-directory
rc-file admin-pubkey)
;; User group and account to run Gitolite.
- (list (user-group (name user) (system? #t))
+ (list (user-group (name group) (system? #t))
(user-account
(name user)
(group group)
diff --git a/gnu/services/web.scm b/gnu/services/web.scm
index 2023119037..f337c90077 100644
--- a/gnu/services/web.scm
+++ b/gnu/services/web.scm
@@ -987,7 +987,7 @@ and the back-end of a Web service.")))
(define php-fpm-accounts
(match-lambda
- (($ <php-fpm-configuration> php socket user group socket-user socket-group _ _ _ _ _ _)
+ (($ <php-fpm-configuration> php socket user group socket-user socket-group)
`(,@(if (equal? group "php-fpm")
'()
(list (user-group (name "php-fpm") (system? #t))))
@@ -2143,24 +2143,23 @@ root=/srv/gemini
(stop #~(make-kill-destructor)))))))
(define agate-accounts
- (match-lambda
- (($ <agate-configuration> _ _ _ _ _
- _ _ _ _
- _ user group _)
- `(,@(if (equal? group "agate")
- '()
- (list (user-group (name "agate") (system? #t))))
- ,(user-group
- (name group)
- (system? #t))
- ,(user-account
- (name user)
- (group group)
- (supplementary-groups '("agate"))
- (system? #t)
- (comment "agate server user")
- (home-directory "/var/empty")
- (shell (file-append shadow "/sbin/nologin")))))))
+ (lambda (config)
+ (let ((group (agate-configuration-group config))
+ (user (agate-configuration-user config)))
+ `(,@(if (equal? group "agate")
+ '()
+ (list (user-group (name "agate") (system? #t))))
+ ,(user-group
+ (name group)
+ (system? #t))
+ ,(user-account
+ (name user)
+ (group group)
+ (supplementary-groups '("agate"))
+ (system? #t)
+ (comment "agate server user")
+ (home-directory "/var/empty")
+ (shell (file-append shadow "/sbin/nologin")))))))
(define agate-service-type
(service-type
diff --git a/gnu/tests/base.scm b/gnu/tests/base.scm
index 64cd6a911a..87518b4bfe 100644
--- a/gnu/tests/base.scm
+++ b/gnu/tests/base.scm
@@ -695,7 +695,13 @@ in a loop. See <http://bugs.gnu.org/26931>.")
;; Halt the system.
(marionette-eval '(system* "/run/current-system/profile/sbin/halt")
- marionette))
+ marionette)
+
+ (display "waiting for marionette to complete...")
+ (force-output)
+ (false-if-exception (waitpid (marionette-pid marionette)))
+ (display " done\n")
+ (force-output))
;; Remove the sockets used by the marionette above to avoid
;; EADDRINUSE.
diff --git a/guix/download.scm b/guix/download.scm
index 29a8f99034..2e9ecb43fc 100644
--- a/guix/download.scm
+++ b/guix/download.scm
@@ -97,7 +97,7 @@
"http://hackage.haskell.org/")
(savannah ; http://download0.savannah.gnu.org/mirmon/savannah/
"https://download.savannah.gnu.org/releases/"
- "https://nongnu.freemirror.org/nongnu/"
+ "https://de.freedif.org/savannah/"
"https://ftp.cc.uoc.gr/mirrors/nongnu.org/"
"http://ftp.twaren.net/Unix/NonGNU/" ; https appears unsupported
"https://mirror.csclub.uwaterloo.ca/nongnu/"
diff --git a/guix/gnu-maintenance.scm b/guix/gnu-maintenance.scm
index 3ba4b86a4f..1142c53d3d 100644
--- a/guix/gnu-maintenance.scm
+++ b/guix/gnu-maintenance.scm
@@ -687,9 +687,9 @@ GNOME packages; EMMS is included though, because its releases are on gnu.org."
(define %savannah-base
;; One of the Savannah mirrors listed at
- ;; <http://download0.savannah.gnu.org/mirmon/savannah/> that serves valid
+ ;; <https://download.savannah.gnu.org/mirmon/savannah/> that serves valid
;; HTML (unlike <https://download.savannah.nongnu.org/releases>.)
- "https://nongnu.freemirror.org/nongnu")
+ "https://de.freedif.org/savannah/")
(define (latest-savannah-release package)
"Return the latest release of PACKAGE."
diff --git a/guix/import/cran.scm b/guix/import/cran.scm
index 4106b96b40..278743d496 100644
--- a/guix/import/cran.scm
+++ b/guix/import/cran.scm
@@ -409,6 +409,7 @@ empty list when the FIELD cannot be found."
("fftw3" "fftw")
("tcl/tk" "tcl")
("booktabs" "texlive-booktabs")
+ ("freetype2" "freetype")
(_ sysname)))
(define cran-guix-name (cut guix-name "r-" <>))
diff --git a/guix/scripts/environment.scm b/guix/scripts/environment.scm
index de9bc8f98d..64597f6e9f 100644
--- a/guix/scripts/environment.scm
+++ b/guix/scripts/environment.scm
@@ -33,8 +33,10 @@
#:use-module ((guix gexp) #:select (lower-object))
#:use-module (guix scripts)
#:use-module (guix scripts build)
+ #:autoload (guix scripts pack) (symlink-spec-option-parser)
#:use-module (guix transformations)
#:autoload (ice-9 ftw) (scandir)
+ #:use-module (gnu build install)
#:autoload (gnu build linux-container) (call-with-container %namespaces
user-namespace-supported?
unprivileged-user-namespace-supported?
@@ -120,6 +122,9 @@ shell'."
--expose=SPEC for containers, expose read-only host file system
according to SPEC"))
(display (G_ "
+ -S, --symlink=SPEC for containers, add symlinks to the profile according
+ to SPEC, e.g. \"/usr/bin/env=bin/env\"."))
+ (display (G_ "
-v, --verbosity=LEVEL use the given verbosity LEVEL"))
(display (G_ "
--bootstrap use bootstrap binaries to build the environment")))
@@ -157,6 +162,7 @@ COMMAND or an interactive shell in that environment.\n"))
(define %default-options
`((system . ,(%current-system))
(substitutes? . #t)
+ (symlinks . ())
(offload? . #t)
(graft? . #t)
(print-build-trace? . #t)
@@ -256,6 +262,7 @@ use '--preserve' instead~%"))
(alist-cons 'file-system-mapping
(specification->file-system-mapping arg #f)
result)))
+ (option '(#\S "symlink") #t #f symlink-spec-option-parser)
(option '(#\r "root") #t #f
(lambda (opt name arg result)
(alist-cons 'gc-root arg result)))
@@ -672,7 +679,7 @@ regexps in WHITE-LIST."
(define* (launch-environment/container #:key command bash user user-mappings
profile manifest link-profile? network?
map-cwd? emulate-fhs? (setup-hook #f)
- (white-list '()))
+ (symlinks '()) (white-list '()))
"Run COMMAND within a container that features the software in PROFILE.
Environment variables are set according to the search paths of MANIFEST. The
global shell is BASH, a file name for a GNU Bash binary in the store. When
@@ -690,6 +697,9 @@ with the EMULATE-FHS? option.
LINK-PROFILE? creates a symbolic link from ~/.guix-profile to the
environment profile.
+SYMLINKS must be a list of (SOURCE -> TARGET) tuples denoting symlinks to be
+added to the container.
+
Preserve environment variables whose name matches the one of the regexps in
WHILE-LIST."
(define (optional-mapping->fs mapping)
@@ -797,6 +807,15 @@ WHILE-LIST."
(mkdir-p home-dir)
(setenv "HOME" home-dir)
+ ;; Create symlinks.
+ (let ((symlink->directives
+ (match-lambda
+ ((source '-> target)
+ `((directory ,(dirname source))
+ (,source -> ,(string-append profile "/" target)))))))
+ (for-each (cut evaluate-populate-directive <> ".")
+ (append-map symlink->directives symlinks)))
+
;; Call an additional setup procedure, if provided.
(when setup-hook
(setup-hook profile))
@@ -961,154 +980,158 @@ message if any test fails."
(category development)
(synopsis "spawn one-off software environments (deprecated)")
- (guix-environment* (parse-args args)))
+ (with-error-handling
+ (guix-environment* (parse-args args))))
(define (guix-environment* opts)
"Run the 'guix environment' command on OPTS, an alist resulting for
command-line option processing with 'parse-command-line'."
- (with-error-handling
- (let* ((pure? (assoc-ref opts 'pure))
- (container? (assoc-ref opts 'container?))
- (link-prof? (assoc-ref opts 'link-profile?))
- (network? (assoc-ref opts 'network?))
- (no-cwd? (assoc-ref opts 'no-cwd?))
- (emulate-fhs? (assoc-ref opts 'emulate-fhs?))
- (user (assoc-ref opts 'user))
- (bootstrap? (assoc-ref opts 'bootstrap?))
- (system (assoc-ref opts 'system))
- (profile (assoc-ref opts 'profile))
- (command (or (assoc-ref opts 'exec)
- ;; Spawn a shell if the user didn't specify
- ;; anything in particular.
- (if container?
- ;; The user's shell is likely not available
- ;; within the container.
- '("/bin/sh")
- (list %default-shell))))
- (mappings (pick-all opts 'file-system-mapping))
- (white-list (pick-all opts 'inherit-regexp)))
-
- (define store-needed?
- ;; Whether connecting to the daemon is needed.
- (or container? (not profile)))
-
- (define-syntax-rule (with-store/maybe store exp ...)
- ;; Evaluate EXP... with STORE bound to a connection, unless
- ;; STORE-NEEDED? is false, in which case STORE is bound to #f.
- (let ((proc (lambda (store) exp ...)))
- (if store-needed?
- (with-store s
- (set-build-options-from-command-line s opts)
- (with-build-handler (build-notifier #:use-substitutes?
- (assoc-ref opts 'substitutes?)
- #:verbosity
- (assoc-ref opts 'verbosity)
- #:dry-run?
- (assoc-ref opts 'dry-run?))
- (proc s)))
- (proc #f))))
-
- (when container? (assert-container-features))
-
- (when (and (not container?) link-prof?)
+ (let* ((pure? (assoc-ref opts 'pure))
+ (container? (assoc-ref opts 'container?))
+ (link-prof? (assoc-ref opts 'link-profile?))
+ (symlinks (assoc-ref opts 'symlinks))
+ (network? (assoc-ref opts 'network?))
+ (no-cwd? (assoc-ref opts 'no-cwd?))
+ (emulate-fhs? (assoc-ref opts 'emulate-fhs?))
+ (user (assoc-ref opts 'user))
+ (bootstrap? (assoc-ref opts 'bootstrap?))
+ (system (assoc-ref opts 'system))
+ (profile (assoc-ref opts 'profile))
+ (command (or (assoc-ref opts 'exec)
+ ;; Spawn a shell if the user didn't specify
+ ;; anything in particular.
+ (if container?
+ ;; The user's shell is likely not available
+ ;; within the container.
+ '("/bin/sh")
+ (list %default-shell))))
+ (mappings (pick-all opts 'file-system-mapping))
+ (white-list (pick-all opts 'inherit-regexp)))
+
+ (define store-needed?
+ ;; Whether connecting to the daemon is needed.
+ (or container? (not profile)))
+
+ (define-syntax-rule (with-store/maybe store exp ...)
+ ;; Evaluate EXP... with STORE bound to a connection, unless
+ ;; STORE-NEEDED? is false, in which case STORE is bound to #f.
+ (let ((proc (lambda (store) exp ...)))
+ (if store-needed?
+ (with-store s
+ (set-build-options-from-command-line s opts)
+ (with-build-handler (build-notifier #:use-substitutes?
+ (assoc-ref opts 'substitutes?)
+ #:verbosity
+ (assoc-ref opts 'verbosity)
+ #:dry-run?
+ (assoc-ref opts 'dry-run?))
+ (proc s)))
+ (proc #f))))
+
+ (when container? (assert-container-features))
+
+ (when (not container?)
+ (when link-prof?
(leave (G_ "'--link-profile' cannot be used without '--container'~%")))
- (when (and (not container?) user)
+ (when user
(leave (G_ "'--user' cannot be used without '--container'~%")))
- (when (and (not container?) no-cwd?)
+ (when no-cwd?
(leave (G_ "--no-cwd cannot be used without '--container'~%")))
- (when (and (not container?) emulate-fhs?)
+ (when emulate-fhs?
(leave (G_ "'--emulate-fhs' cannot be used without '--container~%'")))
-
-
- (with-store/maybe store
- (with-status-verbosity (assoc-ref opts 'verbosity)
- (define manifest-from-opts
- (options/resolve-packages store opts))
-
- (define manifest
- (if profile
- (profile-manifest profile)
- manifest-from-opts))
-
- (when (and profile
- (> (length (manifest-entries manifest-from-opts)) 0))
- (leave (G_ "'--profile' cannot be used with package options~%")))
-
- (when (null? (manifest-entries manifest))
- (warning (G_ "no packages specified; creating an empty environment~%")))
-
- ;; Use the bootstrap Guile when requested.
- (parameterize ((%graft? (assoc-ref opts 'graft?))
- (%guile-for-build
- (and store-needed?
- (package-derivation
- store
- (if bootstrap?
- %bootstrap-guile
- (default-guile))))))
- (run-with-store store
- ;; Containers need a Bourne shell at /bin/sh.
- (mlet* %store-monad ((bash (environment-bash container?
- bootstrap?
- system))
- (prof-drv (if profile
- (return #f)
- (manifest->derivation
- manifest system bootstrap?)))
- (profile -> (if profile
- (readlink* profile)
- (derivation->output-path prof-drv)))
- (gc-root -> (assoc-ref opts 'gc-root)))
-
- ;; First build the inputs. This is necessary even for
- ;; --search-paths. Additionally, we might need to build bash for
- ;; a container.
- (mbegin %store-monad
- (mwhen store-needed?
- (built-derivations (append
- (if prof-drv (list prof-drv) '())
- (if (derivation? bash) (list bash) '()))))
- (mwhen gc-root
- (register-gc-root profile gc-root))
-
- (mwhen (assoc-ref opts 'check?)
- (return
- (if container?
- (warning (G_ "'--check' is unnecessary \
+ (when (pair? symlinks)
+ (leave (G_ "'--symlink' cannot be used without '--container~%'"))))
+
+ (with-store/maybe store
+ (with-status-verbosity (assoc-ref opts 'verbosity)
+ (define manifest-from-opts
+ (options/resolve-packages store opts))
+
+ (define manifest
+ (if profile
+ (profile-manifest profile)
+ manifest-from-opts))
+
+ (when (and profile
+ (> (length (manifest-entries manifest-from-opts)) 0))
+ (leave (G_ "'--profile' cannot be used with package options~%")))
+
+ (when (null? (manifest-entries manifest))
+ (warning (G_ "no packages specified; creating an empty environment~%")))
+
+ ;; Use the bootstrap Guile when requested.
+ (parameterize ((%graft? (assoc-ref opts 'graft?))
+ (%guile-for-build
+ (and store-needed?
+ (package-derivation
+ store
+ (if bootstrap?
+ %bootstrap-guile
+ (default-guile))))))
+ (run-with-store store
+ ;; Containers need a Bourne shell at /bin/sh.
+ (mlet* %store-monad ((bash (environment-bash container?
+ bootstrap?
+ system))
+ (prof-drv (if profile
+ (return #f)
+ (manifest->derivation
+ manifest system bootstrap?)))
+ (profile -> (if profile
+ (readlink* profile)
+ (derivation->output-path prof-drv)))
+ (gc-root -> (assoc-ref opts 'gc-root)))
+
+ ;; First build the inputs. This is necessary even for
+ ;; --search-paths. Additionally, we might need to build bash for
+ ;; a container.
+ (mbegin %store-monad
+ (mwhen store-needed?
+ (built-derivations (append
+ (if prof-drv (list prof-drv) '())
+ (if (derivation? bash) (list bash) '()))))
+ (mwhen gc-root
+ (register-gc-root profile gc-root))
+
+ (mwhen (assoc-ref opts 'check?)
+ (return
+ (if container?
+ (warning (G_ "'--check' is unnecessary \
when using '--container'; doing nothing~%"))
- (validate-child-shell-environment profile manifest))))
-
- (cond
- ((assoc-ref opts 'search-paths)
- (show-search-paths profile manifest #:pure? pure?)
- (return #t))
- (container?
- (let ((bash-binary
- (if bootstrap?
- (derivation->output-path bash)
- (string-append (derivation->output-path bash)
- "/bin/sh"))))
- (launch-environment/container #:command command
- #:bash bash-binary
- #:user user
- #:user-mappings mappings
- #:profile profile
- #:manifest manifest
- #:white-list white-list
- #:link-profile? link-prof?
- #:network? network?
- #:map-cwd? (not no-cwd?)
- #:emulate-fhs? emulate-fhs?
- #:setup-hook
- (and emulate-fhs?
- setup-fhs))))
-
- (else
- (return
- (exit/status
- (launch-environment/fork command profile manifest
- #:white-list white-list
- #:pure? pure?))))))))))))))
+ (validate-child-shell-environment profile manifest))))
+
+ (cond
+ ((assoc-ref opts 'search-paths)
+ (show-search-paths profile manifest #:pure? pure?)
+ (return #t))
+ (container?
+ (let ((bash-binary
+ (if bootstrap?
+ (derivation->output-path bash)
+ (string-append (derivation->output-path bash)
+ "/bin/sh"))))
+ (launch-environment/container #:command command
+ #:bash bash-binary
+ #:user user
+ #:user-mappings mappings
+ #:profile profile
+ #:manifest manifest
+ #:white-list white-list
+ #:link-profile? link-prof?
+ #:network? network?
+ #:map-cwd? (not no-cwd?)
+ #:emulate-fhs? emulate-fhs?
+ #:symlinks symlinks
+ #:setup-hook
+ (and emulate-fhs?
+ setup-fhs))))
+
+ (else
+ (return
+ (exit/status
+ (launch-environment/fork command profile manifest
+ #:white-list white-list
+ #:pure? pure?)))))))))))))
;;; Local Variables:
;;; eval: (put 'with-store/maybe 'scheme-indent-function 1)
diff --git a/guix/scripts/pack.scm b/guix/scripts/pack.scm
index 06849e4761..f81b3e6501 100644
--- a/guix/scripts/pack.scm
+++ b/guix/scripts/pack.scm
@@ -42,6 +42,7 @@
#:use-module (guix profiles)
#:use-module (guix describe)
#:use-module (guix derivations)
+ #:use-module (guix diagnostics)
#:use-module (guix search-paths)
#:use-module (guix build-system gnu)
#:use-module (guix scripts build)
@@ -59,9 +60,12 @@
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-9)
#:use-module (srfi srfi-26)
+ #:use-module (srfi srfi-35)
#:use-module (srfi srfi-37)
#:use-module (ice-9 match)
- #:export (self-contained-tarball
+ #:export (symlink-spec-option-parser
+
+ self-contained-tarball
debian-archive
docker-image
squashfs-image
@@ -160,6 +164,36 @@ its source property."
((_) str)
((names ... _) (loop names))))))
+(define (symlink-spec-option-parser opt name arg result)
+ "A SRFI-37 option parser for the --symlink option. The symlink spec accepts
+the link file name as its left-hand side value and its target as its
+right-hand side value. The target must be a relative link."
+ ;; Note: Using 'string-split' allows us to handle empty
+ ;; TARGET (as in "/opt/guile=", meaning that /opt/guile is
+ ;; a symlink to the profile) correctly.
+ (match (string-split arg #\=)
+ ((source target)
+ (when (string-prefix? "/" target)
+ (raise-exception
+ (make-compound-condition
+ (formatted-message (G_ "symlink target is absolute: '~a'~%") target)
+ (condition
+ (&fix-hint (hint (format #f (G_ "The target of the symlink must be
+relative rather than absolute, as it is relative to the profile created.
+Perhaps the source and target components of the symlink spec were inverted?
+Below is a valid example, where the @file{/usr/bin/env} symbolic link is to
+target the profile's @file{bin/env} file:
+@example
+--symlink=/usr/bin/env=bin/env
+@end example"))))))))
+ (let ((symlinks (assoc-ref result 'symlinks)))
+ (alist-cons 'symlinks
+ `((,source -> ,target) ,@symlinks)
+ (alist-delete 'symlinks result eq?))))
+ (x
+ (leave (G_ "~a: invalid symlink specification~%")
+ arg))))
+
;;;
;;; Tarball format.
@@ -226,8 +260,9 @@ its source property."
`(,@(if (string=? parent "/")
'()
`((directory ,parent)))
- (,source
- -> ,(relative-file-name parent target)))))))
+ ;; Use a relative file name for compatibility with
+ ;; relocatable packs.
+ (,source -> ,(relative-file-name parent target)))))))
(define directives
;; Fully-qualified symlinks.
@@ -1208,20 +1243,7 @@ last resort for relocation."
(lambda (opt name arg result)
(alist-cons 'compressor (lookup-compressor arg)
result)))
- (option '(#\S "symlink") #t #f
- (lambda (opt name arg result)
- ;; Note: Using 'string-split' allows us to handle empty
- ;; TARGET (as in "/opt/guile=", meaning that /opt/guile is
- ;; a symlink to the profile) correctly.
- (match (string-split arg (char-set #\=))
- ((source target)
- (let ((symlinks (assoc-ref result 'symlinks)))
- (alist-cons 'symlinks
- `((,source -> ,target) ,@symlinks)
- (alist-delete 'symlinks result eq?))))
- (x
- (leave (G_ "~a: invalid symlink specification~%")
- arg)))))
+ (option '(#\S "symlink") #t #f symlink-spec-option-parser)
(option '("save-provenance") #f #f
(lambda (opt name arg result)
(alist-cons 'save-provenance? #t result)))
@@ -1321,74 +1343,74 @@ Create a bundle of PACKAGE.\n"))
(category development)
(synopsis "create application bundles")
- (define opts
- (parse-command-line args %options (list %default-options)))
-
- (define maybe-package-argument
- ;; Given an option pair, return a package, a package/output tuple, or #f.
- (match-lambda
- (('argument . spec)
- (call-with-values
- (lambda ()
- (specification->package+output spec))
- list))
- (('expression . exp)
- (read/eval-package-expression exp))
- (x #f)))
-
- (define (manifest-from-args store opts)
- (let* ((transform (options->transformation opts))
- (packages (map (match-lambda
- (((? package? package) output)
- (list (transform package) output))
- ((? package? package)
- (list (transform package) "out")))
- (reverse
- (filter-map maybe-package-argument opts))))
- (manifests (filter-map (match-lambda
- (('manifest . file) file)
- (_ #f))
- opts)))
- (define with-provenance
- (if (assoc-ref opts 'save-provenance?)
- (lambda (manifest)
- (map-manifest-entries
- (lambda (entry)
- (let ((entry (manifest-entry-with-provenance entry)))
- (unless (assq 'provenance (manifest-entry-properties entry))
- (warning (G_ "could not determine provenance of package ~a~%")
- (manifest-entry-name entry)))
- entry))
- manifest))
- identity))
-
- (with-provenance
- (cond
- ((and (not (null? manifests)) (not (null? packages)))
- (leave (G_ "both a manifest and a package list were given~%")))
- ((not (null? manifests))
- (concatenate-manifests
- (map (lambda (file)
- (let ((user-module (make-user-module
- '((guix profiles) (gnu)))))
- (load* file user-module)))
- manifests)))
- (else
- (packages->manifest packages))))))
-
- (define (process-file-arg opts name)
- ;; Validate that the file exists and return it as a <local-file> object,
- ;; else #f.
- (let ((value (assoc-ref opts name)))
- (match value
- ((and (? string?) (not (? file-exists?)))
- (leave (G_ "file provided with option ~a does not exist: ~a~%")
- (string-append "--" (symbol->string name)) value))
- ((? string?)
- (local-file value))
- (#f #f))))
-
(with-error-handling
+ (define opts
+ (parse-command-line args %options (list %default-options)))
+
+ (define maybe-package-argument
+ ;; Given an option pair, return a package, a package/output tuple, or #f.
+ (match-lambda
+ (('argument . spec)
+ (call-with-values
+ (lambda ()
+ (specification->package+output spec))
+ list))
+ (('expression . exp)
+ (read/eval-package-expression exp))
+ (x #f)))
+
+ (define (manifest-from-args store opts)
+ (let* ((transform (options->transformation opts))
+ (packages (map (match-lambda
+ (((? package? package) output)
+ (list (transform package) output))
+ ((? package? package)
+ (list (transform package) "out")))
+ (reverse
+ (filter-map maybe-package-argument opts))))
+ (manifests (filter-map (match-lambda
+ (('manifest . file) file)
+ (_ #f))
+ opts)))
+ (define with-provenance
+ (if (assoc-ref opts 'save-provenance?)
+ (lambda (manifest)
+ (map-manifest-entries
+ (lambda (entry)
+ (let ((entry (manifest-entry-with-provenance entry)))
+ (unless (assq 'provenance (manifest-entry-properties entry))
+ (warning (G_ "could not determine provenance of package ~a~%")
+ (manifest-entry-name entry)))
+ entry))
+ manifest))
+ identity))
+
+ (with-provenance
+ (cond
+ ((and (not (null? manifests)) (not (null? packages)))
+ (leave (G_ "both a manifest and a package list were given~%")))
+ ((not (null? manifests))
+ (concatenate-manifests
+ (map (lambda (file)
+ (let ((user-module (make-user-module
+ '((guix profiles) (gnu)))))
+ (load* file user-module)))
+ manifests)))
+ (else
+ (packages->manifest packages))))))
+
+ (define (process-file-arg opts name)
+ ;; Validate that the file exists and return it as a <local-file> object,
+ ;; else #f.
+ (let ((value (assoc-ref opts name)))
+ (match value
+ ((and (? string?) (not (? file-exists?)))
+ (leave (G_ "file provided with option ~a does not exist: ~a~%")
+ (string-append "--" (symbol->string name)) value))
+ ((? string?)
+ (local-file value))
+ (#f #f))))
+
(with-store store
(with-status-verbosity (assoc-ref opts 'verbosity)
;; Set the build options before we do anything else.
diff --git a/guix/scripts/shell.scm b/guix/scripts/shell.scm
index 7a379122ae..2fc1dc942a 100644
--- a/guix/scripts/shell.scm
+++ b/guix/scripts/shell.scm
@@ -534,43 +534,44 @@ concatenates MANIFESTS, a list of expressions."
(category development)
(synopsis "spawn one-off software environments")
- (define (cache-entries directory)
- (filter-map (match-lambda
- ((or "." "..") #f)
- (file (string-append directory "/" file)))
- (or (scandir directory) '())))
-
- (define* (entry-expiration file)
- ;; Return the time at which FILE, a cached profile, is considered expired.
- (match (false-if-exception (lstat file))
- (#f 0) ;FILE may have been deleted in the meantime
- (st (+ (stat:atime st) (* 60 60 24 7)))))
-
- (define opts
- (parse-args args))
-
- (define interactive?
- (not (assoc-ref opts 'exec)))
-
- (if (assoc-ref opts 'check?)
- (record-hint 'shell-check)
- (when (and interactive?
- (not (hint-given? 'shell-check))
- (not (assoc-ref opts 'container?))
- (not (assoc-ref opts 'search-paths)))
- (display-hint (G_ "Consider passing the @option{--check} option once
+ (with-error-handling
+ (define (cache-entries directory)
+ (filter-map (match-lambda
+ ((or "." "..") #f)
+ (file (string-append directory "/" file)))
+ (or (scandir directory) '())))
+
+ (define* (entry-expiration file)
+ ;; Return the time at which FILE, a cached profile, is considered expired.
+ (match (false-if-exception (lstat file))
+ (#f 0) ;FILE may have been deleted in the meantime
+ (st (+ (stat:atime st) (* 60 60 24 7)))))
+
+ (define opts
+ (parse-args args))
+
+ (define interactive?
+ (not (assoc-ref opts 'exec)))
+
+ (if (assoc-ref opts 'check?)
+ (record-hint 'shell-check)
+ (when (and interactive?
+ (not (hint-given? 'shell-check))
+ (not (assoc-ref opts 'container?))
+ (not (assoc-ref opts 'search-paths)))
+ (display-hint (G_ "Consider passing the @option{--check} option once
to make sure your shell does not clobber environment variables."))) )
- ;; Clean the cache in EXIT-HOOK so that (1) it happens after potential use
- ;; of cached profiles, and (2) cleanup actually happens, even when
- ;; 'guix-environment*' calls 'exit'.
- (add-hook! exit-hook
- (lambda _
- (maybe-remove-expired-cache-entries
- (%profile-cache-directory)
- cache-entries
- #:entry-expiration entry-expiration)))
-
- (if (assoc-ref opts 'export-manifest?)
- (export-manifest opts (current-output-port))
- (guix-environment* opts)))
+ ;; Clean the cache in EXIT-HOOK so that (1) it happens after potential use
+ ;; of cached profiles, and (2) cleanup actually happens, even when
+ ;; 'guix-environment*' calls 'exit'.
+ (add-hook! exit-hook
+ (lambda _
+ (maybe-remove-expired-cache-entries
+ (%profile-cache-directory)
+ cache-entries
+ #:entry-expiration entry-expiration)))
+
+ (if (assoc-ref opts 'export-manifest?)
+ (export-manifest opts (current-output-port))
+ (guix-environment* opts))))
diff --git a/tests/guix-environment-container.sh b/tests/guix-environment-container.sh
index fb2c19b193..0306fc1744 100644
--- a/tests/guix-environment-container.sh
+++ b/tests/guix-environment-container.sh
@@ -241,3 +241,15 @@ guix shell -CF --bootstrap guile-bootstrap glibc \
"glibc-for-fhs")
0
1))'
+
+# '--symlink' works.
+echo "TESTING SYMLINK IN CONTAINER"
+guix shell --bootstrap guile-bootstrap --container \
+ --symlink=/usr/bin/guile=bin/guile -- \
+ /usr/bin/guile --version
+
+# A dangling symlink causes the command to fail.
+! guix shell --bootstrap -CS /usr/bin/python=bin/python guile-bootstrap -- exit
+
+# An invalid symlink spec causes the command to fail.
+! guix shell --bootstrap -CS bin/guile=/usr/bin/guile guile-bootstrap -- exit
diff --git a/tests/guix-pack.sh b/tests/guix-pack.sh
index f19a0f754e..6fc9e3723b 100644
--- a/tests/guix-pack.sh
+++ b/tests/guix-pack.sh
@@ -103,7 +103,7 @@ fi
guix pack --dry-run --bootstrap -f docker guile-bootstrap
# Build a Docker image with a symlink.
-guix pack --dry-run --bootstrap -f docker -S /opt/gnu=/ guile-bootstrap
+guix pack --dry-run --bootstrap -f docker -S /opt/gnu= guile-bootstrap
# Build a tarball pack of cross-compiled software. Use coreutils because
# guile-bootstrap is not intended to be cross-compiled.
diff --git a/tests/guix-shell.sh b/tests/guix-shell.sh
index 9a6b055264..cb2b53466d 100644
--- a/tests/guix-shell.sh
+++ b/tests/guix-shell.sh
@@ -32,6 +32,9 @@ export XDG_CONFIG_HOME
guix shell --bootstrap --pure guile-bootstrap -- guile --version
+# '--symlink' can only be used with --container.
+! guix shell --bootstrap guile-bootstrap -S /dummy=bin/guile
+
# '--ad-hoc' is a thing of the past.
! guix shell --ad-hoc guile-bootstrap