me
/
guix
Archived
1
0
Fork 0

Merge remote-tracking branch 'origin/master' into core-updates

Conflicts:
	doc/guix.texi
	gnu/local.mk
	gnu/packages/admin.scm
	gnu/packages/base.scm
	gnu/packages/chromium.scm
	gnu/packages/compression.scm
	gnu/packages/databases.scm
	gnu/packages/diffoscope.scm
	gnu/packages/freedesktop.scm
	gnu/packages/gnome.scm
	gnu/packages/gnupg.scm
	gnu/packages/guile.scm
	gnu/packages/inkscape.scm
	gnu/packages/llvm.scm
	gnu/packages/openldap.scm
	gnu/packages/pciutils.scm
	gnu/packages/ruby.scm
	gnu/packages/samba.scm
	gnu/packages/sqlite.scm
	gnu/packages/statistics.scm
	gnu/packages/syndication.scm
	gnu/packages/tex.scm
	gnu/packages/tls.scm
	gnu/packages/version-control.scm
	gnu/packages/xml.scm
	guix/build-system/copy.scm
	guix/scripts/home.scm
master
Efraim Flashner 2023-01-30 11:33:18 +02:00
commit 4cf1acc7f3
No known key found for this signature in database
GPG Key ID: 41AAE7DCCA3D8351
740 changed files with 619028 additions and 314277 deletions

16
.editorconfig 100644
View File

@ -0,0 +1,16 @@
root = true
[*.{c,h,cpp,hpp,el,scm,ac,am,m4,po}{,.in}]
end_of_line = lf
insert_final_newline = true
charset = utf-8
trim_trailing_whitespace = true
[*.{c,h,cpp,hpp,ac,am,m4,el,scm}{,.in}]
max_line_length = 85
[*.{c,h,cpp,hpp,ac,m4,el,scm}{,.in}]
indent_style = space
[*.{c,h,cpp,hpp}{,.in}]
indent_size = 4

View File

@ -35,10 +35,8 @@
(;; primary: "295A F991 6F46 F8A1 34B0 29DA 8086 3842 F0FE D83B"
"76CE C6B1 7274 B465 C02D B3D9 E71A 3554 2C30 BAA5"
(name "dannym"))
("B3C0 DB4D AD73 BA5D 285E 19AE 5143 0234 CEFD 87C3"
(name "davexunit"))
("8CCB A7F5 52B9 CBEA E1FB 2915 8328 C747 0FF1 D807" ;FIXME: to be confirmed!
(name "davexunit (2nd)"))
("8CCB A7F5 52B9 CBEA E1FB 2915 8328 C747 0FF1 D807"
(name "dthompson"))
("A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351"
(name "efraim"))
(;; primary: "2453 02B1 BAB1 F867 FDCA 96BC 8F3F 861F 82EB 7A9A"
@ -92,6 +90,9 @@
(;; primary: "B68B DF22 73F9 DA0E 63C1 8A32 515B F416 9242 D600"
"C699 ED09 E51B CE89 FD1D A078 AAC7 E891 896B 568A"
(name "pgarlick"))
(;; primary: "7E9F 5BF6 1680 4367 127B 7A87 F9E6 9FB8 5A75 54F1"
"A420 7B56 C255 109F 2CB3 157E 4990 97AE 5EA8 15D9"
(name "podiki"))
("CD2D 5EAA A98C CB37 DA91 D6B0 5F58 1664 7F8B E551"
(name "raghavgururajan"))
("BCA6 89B6 3655 3801 C3C6 2150 197A 5888 235F ACAC"

10
.patman 100644
View File

@ -0,0 +1,10 @@
# This config file allows for Patchwork integration with
# https://patches.guix-patches.cbaines.net/.
[settings]
project: guix-patches
patchwork_url: https://patches.guix-patches.cbaines.net
add_signoff: False
get_maintainer_script: etc/teams.scm get-maintainer
# TODO: enable check_patch
check_patch: False

View File

@ -1,5 +1,5 @@
# GNU Guix --- Functional package management for GNU
# Copyright © 2012-2022 Ludovic Courtès <ludo@gnu.org>
# Copyright © 2012-2023 Ludovic Courtès <ludo@gnu.org>
# Copyright © 2013 Andreas Enge <andreas@enge.fr>
# Copyright © 2015, 2017 Alex Kost <alezost@gmail.com>
# Copyright © 2016, 2018 Mathieu Lirzin <mthl@gnu.org>
@ -167,6 +167,7 @@ MODULES = \
guix/build-system/maven.scm \
guix/build-system/node.scm \
guix/build-system/perl.scm \
guix/build-system/pyproject.scm \
guix/build-system/python.scm \
guix/build-system/renpy.scm \
guix/build-system/ocaml.scm \
@ -223,6 +224,7 @@ MODULES = \
guix/build/minetest-build-system.scm \
guix/build/node-build-system.scm \
guix/build/perl-build-system.scm \
guix/build/pyproject-build-system.scm \
guix/build/python-build-system.scm \
guix/build/ocaml-build-system.scm \
guix/build/qt-build-system.scm \
@ -236,6 +238,7 @@ MODULES = \
guix/build/waf-build-system.scm \
guix/build/haskell-build-system.scm \
guix/build/julia-build-system.scm \
guix/build/kconfig.scm \
guix/build/linux-module-build-system.scm \
guix/build/store-copy.scm \
guix/build/json.scm \
@ -287,6 +290,7 @@ MODULES = \
guix/import/print.scm \
guix/import/pypi.scm \
guix/import/stackage.scm \
guix/import/test.scm \
guix/import/texlive.scm \
guix/import/utils.scm \
guix/scripts.scm \
@ -398,10 +402,10 @@ AUX_FILES = \
gnu/packages/aux-files/chromium/master-preferences.json \
gnu/packages/aux-files/emacs/guix-emacs.el \
gnu/packages/aux-files/guix.vim \
gnu/packages/aux-files/linux-libre/5.19-arm.conf \
gnu/packages/aux-files/linux-libre/5.19-arm64.conf \
gnu/packages/aux-files/linux-libre/5.19-i686.conf \
gnu/packages/aux-files/linux-libre/5.19-x86_64.conf \
gnu/packages/aux-files/linux-libre/6.1-arm.conf \
gnu/packages/aux-files/linux-libre/6.1-arm64.conf \
gnu/packages/aux-files/linux-libre/6.1-i686.conf \
gnu/packages/aux-files/linux-libre/6.1-x86_64.conf \
gnu/packages/aux-files/linux-libre/5.15-arm.conf \
gnu/packages/aux-files/linux-libre/5.15-arm64.conf \
gnu/packages/aux-files/linux-libre/5.15-i686.conf \
@ -421,10 +425,9 @@ AUX_FILES = \
gnu/packages/aux-files/linux-libre/4.14-arm.conf \
gnu/packages/aux-files/linux-libre/4.14-i686.conf \
gnu/packages/aux-files/linux-libre/4.14-x86_64.conf \
gnu/packages/aux-files/linux-libre/4.9-i686.conf \
gnu/packages/aux-files/linux-libre/4.9-x86_64.conf \
gnu/packages/aux-files/pack-audit.c \
gnu/packages/aux-files/python/sanity-check.py \
gnu/packages/aux-files/python/sanity-check-next.py \
gnu/packages/aux-files/python/sitecustomize.py \
gnu/packages/aux-files/renpy/renpy.in \
gnu/packages/aux-files/run-in-namespace.c
@ -438,6 +441,8 @@ EXAMPLES = \
gnu/system/examples/desktop.tmpl \
gnu/system/examples/lightweight-desktop.tmpl \
gnu/system/examples/docker-image.tmpl \
gnu/system/examples/raspberry-pi-64.tmpl \
gnu/system/examples/raspberry-pi-64-nfs-root.tmpl \
gnu/system/examples/vm-image.tmpl
GOBJECTS = $(MODULES:%.scm=%.go) guix/config.go $(dist_noinst_DATA:%.scm=%.go)
@ -590,6 +595,7 @@ SH_TESTS = \
tests/guix-authenticate.sh \
tests/guix-environment.sh \
tests/guix-environment-container.sh \
tests/guix-refresh.sh \
tests/guix-shell.sh \
tests/guix-shell-export-manifest.sh \
tests/guix-graph.sh \
@ -659,49 +665,50 @@ 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 \
CODE-OF-CONDUCT \
HACKING \
ROADMAP \
TODO \
bootstrap \
build-aux/build-self.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-NEWS.scm \
build-aux/update-guix-package.scm \
doc/build.scm \
etc/disarchive-manifest.scm \
etc/guix-install.sh \
etc/historical-authorizations \
etc/news.scm \
etc/kernels-manifest.scm \
etc/release-manifest.scm \
etc/source-manifest.scm \
etc/system-tests.scm \
etc/time-travel-manifest.scm \
etc/historical-authorizations \
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/compile-as-derivation.scm \
build-aux/convert-xref.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 \
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
@ -750,20 +757,35 @@ endef
# in <https://issues.guix.gnu.org/48963>. Each 'eval' call below creates a
# 'make-*-go' phony target that builds the corresponding subset.
MODULES_CORE = guix.scm $(filter-out guix/scripts/%,$(filter guix/%,$(MODULES)))
MODULES_PACKAGES = $(filter gnu/packages/%,$(MODULES))
MODULES_SYSTEM = gnu.scm $(filter-out gnu/packages/%,$(filter gnu/%,$(MODULES)))
MODULES_CLI = $(filter guix/scripts/%,$(MODULES))
MODULES_PO = guix/build/po.scm
first_half := \
gnu/packages/a% gnu/packages/b% gnu/packages/c% gnu/packages/d% \
gnu/packages/e% gnu/packages/f% gnu/packages/g% gnu/packages/h% \
gnu/packages/i% gnu/packages/j% gnu/packages/k% gnu/packages/l%
MODULES_CORE := guix.scm $(filter-out guix/scripts/%,$(filter guix/%,$(MODULES)))
MODULES_PACKAGES1 := $(filter $(first_half),$(MODULES))
MODULES_PACKAGES2 := $(filter-out $(first_half),$(filter gnu/packages/%,$(MODULES)))
MODULES_PACKAGES := $(MODULES_PACKAGES1) $(MODULES_PACKAGES2)
MODULES_SYSTEM := gnu.scm $(filter-out gnu/packages/%,$(filter gnu/%,$(MODULES)))
MODULES_CLI := $(filter guix/scripts/%,$(MODULES))
MODULES_PO := guix/build/po.scm
$(eval $(call guile-compilation-rule,make-core-go, \
$(MODULES_CORE) guix/config.scm $(dist_noinst_DATA), \
0))
.PHONY: make-core-go
$(eval $(call guile-compilation-rule,make-packages-go, \
$(MODULES_PACKAGES) make-core-go, \
$(eval $(call guile-compilation-rule,make-packages1-go, \
$(MODULES_PACKAGES1) make-core-go, \
$(words $(MODULES_CORE))))
.PHONY: make-packages1-go
$(eval $(call guile-compilation-rule,make-packages2-go, \
$(MODULES_PACKAGES2) make-core-go make-packages1-go, \
$(words $(MODULES_CORE) $(MODULES_PACKAGES1))))
.PHONY: make-packages2-go
make-packages-go: make-packages1-go make-packages2-go
.PHONY: make-packages-go
$(eval $(call guile-compilation-rule,make-system-go, \
@ -986,7 +1008,7 @@ release: dist-with-updated-version all
-v1 --no-grafts --fallback
# Generate the ISO installation images.
for system in $(GUIX_SYSTEM_SUPPORTED_SYSTEMS) ; do \
GUIX_DISPLAYED_VERSION="`git describe --match=v* | sed -'es/^v//v'`" ; \
GUIX_DISPLAYED_VERSION="`git describe --match=v* | sed -'es/^v//'`" ; \
image=`$(top_builddir)/pre-inst-env \
guix system image -t iso9660 \
--label="GUIX_$${system}_$(VERSION)" \
@ -1002,7 +1024,7 @@ release: dist-with-updated-version all
done
# Generate the VM images.
for system in $(GUIX_SYSTEM_VM_SYSTEMS) ; do \
GUIX_DISPLAYED_VERSION="`git describe --match=v* | sed -'es/^v//v'`" ; \
GUIX_DISPLAYED_VERSION="`git describe --match=v* | sed -'es/^v//'`" ; \
image=`$(top_builddir)/pre-inst-env \
guix system image -t qcow2 $(GUIX_SYSTEM_VM_IMAGE_FLAGS) \
--save-provenance \

52
NEWS
View File

@ -31,7 +31,10 @@ Please send Guix bug reports to bug-guix@gnu.org.
*** New updater (see guix refresh): generic-git
*** 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
*** --with-source option now applied recursively
*** Align tabular data output by commands like guix package --list-available
*** Improved guix import go importer via a new PEG parser
*** Improved Software Heritage downloader
@ -43,12 +46,14 @@ Please send Guix bug reports to bug-guix@gnu.org.
** Distribution
*** The installation script can now enable local substitute servers discovery
*** The installation script can now customize the Bash prompt for Guix
*** More control over boot-time file system checks and repairs
*** XFS file systems can be created by the installer and mounted by label/UUID
*** New interface for declaring swap space
*** GNOME is now at version 42
*** TeX Live is now at version 2021
*** Multiple TeX Live trees can now be used via GUIX_TEXMF
*** Python modules are searched in GUIX_PYTHONPATH instead of PYTHONPATH
*** Python is now faster thanks to being built with optimizations
*** The Rust bootstrap now starts from 1.54 instead of 1.19
*** Most Python 2 packages have been removed
@ -71,11 +76,32 @@ Please send Guix bug reports to bug-guix@gnu.org.
*** The installer now has a crash dump upload mechanism
*** Emacs now supports native compilation
*** GRUB bootloader now supports chain-loading
*** The GNU Shepherd was upgraded to 0.9.2
*** The GNU Shepherd was upgraded to 0.9.3
*** 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
*** Chromium extensions are now built in a deterministic fashion
*** The rsync service lets you specify individual “modules”
*** New services
anonip, bitmask, fail2ban, gitile, greetd, jami, lightdm, log-cleanup,
nar-herder, opendht, rasdaemon, samba, seatd, strongswan, wsdd
*** 5311 new packages
*** 6573 package updates
Noteworthy updates:
bash 5.1.8, binutils 2.37, clojure 1.11.1, cups 2.3.3op2, emacs 28.2,
enlightenment 0.25.4, gcc-toolchain 12.2.0, gdb 12.1, ghc 8.10.7,
gimp 2.10.32, glibc 2.33, gnome 42.4, gnupg 2.2.32, go 1.19.1, guile 3.0.8,
icecat 102.5.0-guix0-preview1, icedtea 3.19.0, inkscape 1.2.1, julia 1.6.7,
libreoffice 7.4.3.2, linux-libre 6.0.10, ocaml 4.14.0, octave 7.2.0,
openjdk 18, perl 5.34.0, python2 2.7.18, python 3.9.9, racket 8.7,
rust 1.60.0, r 4.2.2, sbcl 2.2.10, shepherd 0.9.3, xorg-server 21.1.4
** Programming interfaces
*** Package input fields can now plain package lists
*** Package input fields can now be plain package lists
*** G-expressions can now be used in build phases
*** New modify-inputs macro to ease customizing a list of package inputs
*** New this-package-input and this-package-native-input macros
@ -85,7 +111,7 @@ Please send Guix bug reports to bug-guix@gnu.org.
*** texlive-union is now deprecated in favor of texlive-updmap.cfg
*** New (guix cpu) module
*** New (guix least-authority) module
*** New (guix plaform) module
*** New (guix platform) module
*** New (guix read-print) module
It provides a comment-preserving reader and a comment-preserving
@ -96,11 +122,14 @@ pretty-printer smarter than (ice-9 pretty-print).
This build system lets you build Guix instances from channel specifications,
similar to how 'guix time-machine' would do it, as regular packages.
*** New pyproject-build-system
This is an extension of python-build-system with support for PEP-517 and
pyproject.toml files. It may eventually get merged back into
python-build-system.
*** New elm-build-system
*** New rebar-build-system
*** New services
anonip, bitmask, fail2ban, gitile, greetd, jami, lightdm, log-cleanup,
nar-herder, opendht, rasdaemon, seatd, strongswan
** Noteworthy bug fixes
*** Fall back to Software Heritage when cloning a channel
@ -115,7 +144,6 @@ nar-herder, opendht, rasdaemon, seatd, strongswan
(<https://issues.guix.gnu.org/51425>)
*** Fonts can now be discovered in any profile via XDG_DATA_DIRS
(<https://issues.guix.gnu.org/31403>)
*** Python modules are searched in GUIX_PYTHONPATH instead of PYTHONPATH
*** Various Python reproducibility fixes
*** The installer now supports MSDOS disk labels on UEFI systems
(<https://issues.guix.gnu.org/47889>)
@ -123,10 +151,10 @@ nar-herder, opendht, rasdaemon, seatd, strongswan
(<https://issues.guix.gnu.org/48419>)
*** The installer no longer crashes when deleting a free space partition
*** Emacs handles major upgrades better without a re-login
(<https://bugs.gnu.org/47458>)
(<https://issues.guix.gnu.org/47458>)
*** The bootloader configuration now accepts multiple targets
(<https://issues.guix.gnu.org/40997>.)
*** A file system mount point is always created when create? is true
(<https://issues.guix.gnu.org/40997>)
*** File system mount point is always created when create? is true
(<https://issues.guix.gnu.org/40158>)
*** Build the man database only if man-db is in the profile
*** gdk-pixbuf now discovers pixbuf loaders via a search path
@ -137,10 +165,12 @@ nar-herder, opendht, rasdaemon, seatd, strongswan
(https://issues.guix.gnu.org/38838)
*** chfn can now change the user's full name
(https://issues.guix.gnu.org/52539)
*** Gnome settings Bluetooth panel is now working
*** GNOME Settings Bluetooth panel is now working
(https://issues.guix.gnu.org/32166)
*** Inferiors are now caching store connections
(https://issues.guix.gnu.org/48007)
*** Retry downloads when a substitute has become unavailable
(https://issues.guix.gnu.org/57978)
*** The installer doesn't segfault when removing an extended partition
*** The installer doesn't ship an older Guix revision
(https://issues.guix.gnu.org/53210)

View File

@ -66,7 +66,7 @@
(define %manual-languages
;; Available translations for the 'guix-manual' text domain.
'("de" "en" "es" "fr" "ru" "zh_CN"))
'("de" "en" "es" "fr" "pt_BR" "ru" "zh_CN"))
(define %cookbook-languages
;; Available translations for the 'guix-cookbook' text domain.

View File

@ -786,12 +786,29 @@ for instance, the module python-dateutil is packaged under the names
starts with @code{py} (e.g.@: @code{pytz}), we keep it and prefix it as
described above.
@quotation Note
Currently there are two different build systems for Python packages in Guix:
@var{python-build-system} and @var{pyproject-build-system}. For the
longest time, Python packages were built from an informally specified
@file{setup.py} file. That worked amazingly well, considering Python's
success, but was difficult to build tooling around. As a result, a host
of alternative build systems emerged and the community eventually settled on a
@url{https://peps.python.org/pep-0517/, formal standard} for specifying build
requirements. @var{pyproject-build-system} is Guix's implementation of this
standard. It is considered ``experimental'' in that it does not yet support
all the various PEP-517 @emph{build backends}, but you are encouraged to try
it for new Python packages and report any problems. It will eventually be
deprecated and merged into @var{python-build-system}.
@end quotation
@subsubsection Specifying Dependencies
@cindex inputs, for Python packages
Dependency information for Python packages is usually available in the
package source tree, with varying degrees of accuracy: in the
@file{setup.py} file, in @file{requirements.txt}, or in @file{tox.ini}.
@file{pyproject.toml} file, the @file{setup.py} file, in
@file{requirements.txt}, or in @file{tox.ini} (the latter mostly for
test dependencies).
Your mission, when writing a recipe for a Python package, is to map
these dependencies to the appropriate type of ``input'' (@pxref{package
@ -802,10 +819,12 @@ following check list to determine which dependency goes where.
@itemize
@item
We currently package Python 2 with @code{setuptools} and @code{pip}
installed like Python 3.4 has per default. Thus you don't need to
specify either of these as an input. @command{guix lint} will warn you
if you do.
We currently package Python with @code{setuptools} and @code{pip}
installed per default. This is about to change, and users are encouraged
to use @code{python-toolchain} if they want a build environment for Python.
@command{guix lint} will warn if @code{setuptools} or @code{pip} are
added as native-inputs because they are generally not necessary.
@item
Python dependencies required at run time go into
@ -814,9 +833,10 @@ Python dependencies required at run time go into
@file{requirements.txt} file.
@item
Python packages required only at build time---e.g., those listed with
the @code{setup_requires} keyword in @file{setup.py}---or only for
testing---e.g., those in @code{tests_require}---go into
Python packages required only at build time---e.g., those listed under
@code{build-system.requires} in @file{pyproject.toml} or with the
@code{setup_requires} keyword in @file{setup.py}---or dependencies only
for testing---e.g., those in @code{tests_require} or @file{tox.ini}---go into
@code{native-inputs}. The rationale is that (1) they do not need to be
propagated because they are not needed at run time, and (2) in a
cross-compilation context, it's the ``native'' input that we'd want.
@ -1069,11 +1089,16 @@ and then to browse them ``by hand'' using @code{car}, @code{cdr},
notably the fact that it is hard to read, error-prone, and a hindrance
to proper type error reports.
@findex define-record-type*
@findex match-record
@cindex pattern matching
Guix code should define appropriate data types (for instance, using
@code{define-record-type*}) rather than abuse lists. In addition, it
should use pattern matching, via Guiles @code{(ice-9 match)} module,
especially when matching lists (@pxref{Pattern Matching,,, guile, GNU
Guile Reference Manual}).
Guile Reference Manual}); pattern matching for records is better done
using @code{match-record} from @code{(guix records)}, which, unlike
@code{match}, verifies field names at macro-expansion time.
@node Formatting Code
@subsection Formatting Code
@ -1138,8 +1163,8 @@ This mailing list is backed by a Debbugs instance, which allows us to
keep track of submissions (@pxref{Tracking Bugs and Patches}). Each
message sent to that mailing list gets a new tracking number assigned;
people can then follow up on the submission by sending email to
@code{@var{NNN}@@debbugs.gnu.org}, where @var{NNN} is the tracking
number (@pxref{Sending a Patch Series}).
@code{@var{ISSUE_NUMBER}@@debbugs.gnu.org}, where @var{ISSUE_NUMBER} is
the tracking number (@pxref{Sending a Patch Series}).
Please write commit logs in the ChangeLog format (@pxref{Change Logs,,,
standards, GNU Coding Standards}); you can check the commit history for
@ -1149,15 +1174,6 @@ Before submitting a patch that adds or modifies a package definition,
please run through this check list:
@enumerate
@cindex @code{git format-patch}
@cindex @code{git-format-patch}
@item
When generating your patches with @code{git format-patch} or @code{git
send-email}, we recommend using the option @code{--base=}, perhaps with
the value @code{auto}. This option adds a note to the patch stating
which commit the patch is based on. This helps reviewers understand how
to apply and review your patches.
@item
If the authors of the packaged software provide a cryptographic
signature for the release tarball, make an effort to verify the
@ -1341,12 +1357,13 @@ guix pull --url=/path/to/your/checkout --profile=/tmp/guix.master
When posting a patch to the mailing list, use @samp{[PATCH] @dots{}} as
a subject, if your patch is to be applied on a branch other than
@code{master}, say @code{core-updates}, specify it in the subject like
@samp{[PATCH core-updates] @dots{}}. You may use your email client or
the @command{git send-email} command (@pxref{Sending a Patch Series}).
We prefer to get patches in plain text messages, either inline or as
MIME attachments. You are advised to pay attention if your email client
changes anything like line breaks or indentation which could potentially
break the patches.
@samp{[PATCH core-updates] @dots{}}.
You may use your email client or the @command{git send-email} command
(@pxref{Sending a Patch Series}). We prefer to get patches in plain
text messages, either inline or as MIME attachments. You are advised to
pay attention if your email client changes anything like line breaks or
indentation which could potentially break the patches.
Expect some delay when you submit your very first patch to
@email{guix-patches@@gnu.org}. You have to wait until you get an
@ -1354,7 +1371,7 @@ acknowledgement with the assigned tracking number. Future acknowledgements
should not be delayed.
When a bug is resolved, please close the thread by sending an email to
@email{@var{NNN}-done@@debbugs.gnu.org}.
@email{@var{ISSUE_NUMBER}-done@@debbugs.gnu.org}.
@node Configuring Git
@subsection Configuring Git
@ -1392,26 +1409,152 @@ git config --local format.thread shallow
git config --local sendemail.thread no
@end example
@unnumberedsubsec Sending a Patch Series
@anchor{Sending a Patch Series}
@node Sending a Patch Series
@subsection Sending a Patch Series
@cindex patch series
@cindex @code{git send-email}
@cindex @code{git format-patch}
When sending a patch series (e.g., using @code{git send-email}), please
first send one message to @email{guix-patches@@gnu.org}, and then send
subsequent patches to @email{@var{NNN}@@debbugs.gnu.org} to make sure
they are kept together. See
@uref{https://debbugs.gnu.org/Advanced.html, the Debbugs documentation}
for more information. You can install @command{git send-email} with
@command{guix install git:send-email}.
@c Debbugs bug: https://debbugs.gnu.org/db/15/15361.html
@unnumberedsubsubsec Single Patches
@anchor{Single Patches}
The @command{git send-email} command is the best way to send both single
patches and patch series (@pxref{Multiple Patches}) to the Guix mailing
list. Sending patches as email attachments may make them difficult to
review in some mail clients, and @command{git diff} does not store commit
metadata.
To maximize the chances that you patch series is reviewed, the preferred
submission way is to use the @code{etc/teams.scm} script to notify the
appropriate team members (@pxref{Teams}).
@quotation Note
The @command{git send-email} command is provided by the @code{send-email}
output of the @code{git} package, i.e. @code{git:send-email}.
@end quotation
@unnumberedsubsec Teams
@anchor{Teams}
The following command will create a patch email from the latest commit,
open it in your @var{EDITOR} or @var{VISUAL} for editing, and send it to
the Guix mailing list to be reviewed and merged:
@example
$ git send-email -1 -a --base=auto --to=guix-patches@@gnu.org
@end example
@quotation Tip
To add a prefix to the subject of your patch, you may use the
@option{--subject-prefix} option. The Guix project uses this to
specify that the patch is intended for a branch or repository
other than the @code{master} branch of
@url{https://git.savannah.gnu.org/cgit/guix.git}.
@example
git send-email -1 -a --base=auto \
--subject-prefix='PATCH core-updates' \
--to=guix-patches@@gnu.org
@end example
@end quotation
The patch email contains a three-dash separator line after the commit
message. You may ``annotate'' the patch with explanatory text by adding
it under this line. If you do not wish to annotate the email, you may
drop the @option{-a} flag (which is short for @option{--annotate}).
The @option{--base=auto} flag automatically adds a note at the bottom
of the patch of the commit it was based on, making it easier for
maintainers to rebase and merge your patch.
If you need to send a revised patch, don't resend it like this or send
a ``fix'' patch to be applied on top of the last one; instead, use
@command{git commit -a} or @url{https://git-rebase.io, @command{git rebase}}
to modify the commit, and use the @email{@var{ISSUE_NUMBER}@@debbugs.gnu.org}
address and the @option{-v} flag with @command{git send-email}.
@example
$ git commit -a
$ git send-email -1 -a --base=auto -v@var{REVISION} \
--to=@var{ISSUE_NUMBER}@@debbugs.gnu.org
@end example
@quotation Note
Due to an apparent bug in @command{git send-email},
@option{-v @var{REVISION}} (with the space) will not work; you
@emph{must} use @option{-v@var{REVISION}}.
@end quotation
You can find out @var{ISSUE_NUMBER} either by searching on the mumi
interface at @url{issues.guix.gnu.org} for the name of your patch or
reading the acknowledgement email sent automatically by Debbugs in
reply to incoming bugs and patches, which contains the bug number.
@unnumberedsubsubsec Notifying Teams
@anchor{Notifying Teams}
@cindex teams
The @file{etc/teams.scm} script may be used to notify all those who
may be interested in your patch of its existence (@pxref{Teams}).
Use @command{etc/teams.scm list-teams} to display all the teams,
decide which team(s) your patch relates to, and use
@command{etc/teams.scm cc} to output various @command{git send-email}
flags which will notify the appropriate team members, or use
@command{etc/teams.scm cc-members} to detect the appropriate teams
automatically.
@unnumberedsubsubsec Multiple Patches
@anchor{Multiple Patches}
@cindex cover letter
While @command{git send-email} alone will suffice for a single
patch, an unfortunate flaw in Debbugs means you need to be more
careful when sending multiple patches: if you send them all to the
@email{guix-patches@@gnu.org} address, a new issue will be created
for each patch!
When sending a series of patches, it's best to send a Git ``cover
letter'' first, to give reviewers an overview of the patch series.
We can create a directory called @file{outgoing} containing both
our patch series and a cover letter called @file{0000-cover-letter.patch}
with @command{git format-patch}.
@example
$ git format-patch -@var{NUMBER_COMMITS} -o outgoing \
--cover-letter --base=auto
@end example
We can now send @emph{just} the cover letter to the
@email{guix-patches@@gnu.org} address, which will create an issue
that we can send the rest of the patches to.
@example
$ git send-email outgoing/0000-cover-letter.patch -a \
--to=guix-patches@@gnu.org \
$(etc/teams.scm cc-members ...)
$ rm outgoing/0000-cover-letter.patch # we don't want to resend it!
@end example
Ensure you edit the email to add an appropriate subject line and
blurb before sending it. Note the automatically generated shortlog
and diffstat below the blurb.
Once the Debbugs mailer has replied to your cover letter email, you
can send the actual patches to the newly-created issue address.
@example
$ git send-email outgoing/*.patch \
--to=@var{ISSUE_NUMBER}@@debbugs.gnu.org \
$(etc/teams.scm cc-members ...)
$ rm -rf outgoing # we don't need these anymore
@end example
Thankfully, this @command{git format-patch} dance is not necessary
to send an amended patch series, since an issue already exists for
the patchset.
@example
$ git send-email -@var{NUMBER_COMMITS} \
-v@var{REVISION} --base=auto \
--to @var{ISSUE_NUMBER}@@debbugs.gnu.org
@end example
If need be, you may use @option{--cover-letter -a} to send another cover
letter, e.g. for explaining what's changed since the last revision, and
these changes are necessary.
@node Teams
@subsection Teams
@cindex teams
There are several teams mentoring different parts of the Guix source
@ -1435,7 +1578,7 @@ You can run the following command to have the @code{Mentors} team put in
CC of a patch series:
@example
$ git send-email --to XXX@@debbugs.gnu.org $(./etc/teams.scm cc mentors) *.patch
$ git send-email --to @var{ISSUE_NUMBER}@@debbugs.gnu.org $(./etc/teams.scm cc mentors) *.patch
@end example
The appropriate team or teams can also be inferred from the modified
@ -1444,7 +1587,7 @@ current Git repository to review, you can run:
@example
$ guix shell -D guix
[env]$ git send-email --to XXX@@debbugs.gnu.org $(./etc/teams.scm cc-members HEAD~2 HEAD) *.patch
[env]$ git send-email --to @var{ISSUE_NUMBER}@@debbugs.gnu.org $(./etc/teams.scm cc-members HEAD~2 HEAD) *.patch
@end example
@node Tracking Bugs and Patches
@ -1687,23 +1830,27 @@ It additionally calls @code{make check-channel-news} to be sure
@subsection Commit Policy
If you get commit access, please make sure to follow
the policy below (discussions of the policy can take place on
If you get commit access, please make sure to follow the policy below
(discussions of the policy can take place on
@email{guix-devel@@gnu.org}).
Non-trivial patches should always be posted to
@email{guix-patches@@gnu.org} (trivial patches include fixing typos,
etc.). This mailing list fills the patch-tracking database
(@pxref{Tracking Bugs and Patches}).
Changes should be posted to @email{guix-patches@@gnu.org}. This mailing
list fills the patch-tracking database (@pxref{Tracking Bugs and
Patches}). It also allows patches to be picked up and tested by the
quality assurance tooling; the result of that testing eventually shows
up on the dashboard at
@indicateurl{https://qa.guix.gnu.org/issue/@var{ISSUE_NUMBER}}, where
@var{ISSUE_NUMBER} is the number assigned by the issue tracker. Leave
time for a review, without committing anything (@pxref{Submitting
Patches}). If you didnt receive any reply after one week (two weeks
for more significant changes), and if you're confident, it's OK to
commit.
For patches that just add a new package, and a simple one, it's OK to
commit, if you're confident (which means you successfully built it in a
chroot setup, and have done a reasonable copyright and license
auditing). Likewise for package upgrades, except upgrades that trigger
a lot of rebuilds (for example, upgrading GnuTLS or GLib). We have a
mailing list for commit notifications (@email{guix-commits@@gnu.org}),
so people can notice. Before pushing your changes, make sure to run
@code{git pull --rebase}.
As an exception, some changes considered ``trivial'' or ``obvious'' may
be pushed directly. This includes changes to fix typos and reverting
commits that caused immediate problems. This is subject to being
adjusted, allowing individuals to commit directly on non-controversial
changes on parts theyre familiar with.
When pushing a commit on behalf of somebody else, please add a
@code{Signed-off-by} line at the end of the commit log message---e.g.,
@ -1718,14 +1865,6 @@ right before pushing:
make check-channel-news
@end example
For anything else, please post to @email{guix-patches@@gnu.org} and
leave time for a review, without committing anything (@pxref{Submitting
Patches}). If you didnt receive any reply after two weeks, and if
you're confident, it's OK to commit.
That last part is subject to being adjusted, allowing individuals to commit
directly on non-controversial changes on parts theyre familiar with.
@subsection Addressing Issues
Peer review (@pxref{Submitting Patches}) and tools such as

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,7 @@
# htmlxref.cnf - reference file for free Texinfo manuals on the web.
# Modified by Ludovic Courtès <ludo@gnu.org> for the GNU Guix manual.
htmlxrefversion=2022-08-04.13; # UTC
htmlxrefversion=2022-12-18.15; # UTC
# Copyright 2010-2020, 2022 Free Software Foundation, Inc.
#
@ -409,6 +409,8 @@ GUILE_GNOME = ${GS}/guile-gnome/docs
guile-gtk node ${GS}/guile-gtk/docs/guile-gtk/
guile-netlink mono https://git.lepiller.eu/guile-netlink/manual/manual.html
guile-rpc mono ${GS}/guile-rpc/manual/guile-rpc.html
guile-rpc node ${GS}/guile-rpc/manual/html_node/
@ -420,6 +422,8 @@ GUIX = ${GUIX_ROOT}/manual
guix.es node ${GUIX}/es/html_node/
guix.fr mono ${GUIX}/fr/guix.fr.html
guix.fr node ${GUIX}/fr/html_node/
guix.pt_BR mono ${GUIX}/pt-br/guix.pt_BR.html
guix.pt_BR node ${GUIX}/pt-br/html_node/
guix.ru mono ${GUIX}/ru/guix.ru.html
guix.ru node ${GUIX}/ru/html_node/
guix.zh_CN mono ${GUIX}/zh-cn/guix.zh_CN.html
@ -428,10 +432,12 @@ GUIX = ${GUIX_ROOT}/manual
guix node ${GUIX}/en/html_node/
GUIX_COOKBOOK = ${GUIX_ROOT}/cookbook
guix-cookbook.de mono ${GUIX_COOKBOOK}/de/guix-cookbook.html
guix-cookbook.de mono ${GUIX_COOKBOOK}/de/guix-cookbook.de.html
guix-cookbook.de node ${GUIX_COOKBOOK}/de/html_node/
guix-cookbook.fr mono ${GUIX_COOKBOOK}/fr/guix-cookbook.html
guix-cookbook.fr mono ${GUIX_COOKBOOK}/fr/guix-cookbook.fr.html
guix-cookbook.fr node ${GUIX_COOKBOOK}/fr/html_node/
guix-cookbook.sk mono ${GUIX_COOKBOOK}/sk/guix-cookbook.sk.html
guix-cookbook.sk node ${GUIX_COOKBOOK}/sk/html_node/
guix-cookbook mono ${GUIX_COOKBOOK}/en/guix-cookbook.html
guix-cookbook node ${GUIX_COOKBOOK}/en/html_node/

View File

@ -179,19 +179,31 @@ sub_commands_mans = \
$(srcdir)/%D%/guix-archive.1 \
$(srcdir)/%D%/guix-build.1 \
$(srcdir)/%D%/guix-challenge.1 \
$(srcdir)/%D%/guix-container.1 \
$(srcdir)/%D%/guix-copy.1 \
$(srcdir)/%D%/guix-deploy.1 \
$(srcdir)/%D%/guix-describe.1 \
$(srcdir)/%D%/guix-download.1 \
$(srcdir)/%D%/guix-edit.1 \
$(srcdir)/%D%/guix-environment.1 \
$(srcdir)/%D%/guix-gc.1 \
$(srcdir)/%D%/guix-git.1 \
$(srcdir)/%D%/guix-graph.1 \
$(srcdir)/%D%/guix-hash.1 \
$(srcdir)/%D%/guix-home.1 \
$(srcdir)/%D%/guix-import.1 \
$(srcdir)/%D%/guix-lint.1 \
$(srcdir)/%D%/guix-offload.1 \
$(srcdir)/%D%/guix-pack.1 \
$(srcdir)/%D%/guix-package.1 \
$(srcdir)/%D%/guix-processes.1 \
$(srcdir)/%D%/guix-publish.1 \
$(srcdir)/%D%/guix-pull.1 \
$(srcdir)/%D%/guix-refresh.1 \
$(srcdir)/%D%/guix-repl.1 \
$(srcdir)/%D%/guix-shell.1 \
$(srcdir)/%D%/guix-size.1 \
$(srcdir)/%D%/guix-style.1 \
$(srcdir)/%D%/guix-system.1 \
$(srcdir)/%D%/guix-time-machine.1 \
$(srcdir)/%D%/guix-weather.1

View File

@ -1,6 +1,6 @@
; -*- lisp -*-
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2018, 2022 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2020 Daniel Brooks <db48x@db48x.net>
;;; Copyright © 2020 Marius Bakke <marius@gnu.org>
;;;
@ -37,11 +37,13 @@
(block guix_daemon
;; Require existing types
(typeattributeset cil_gen_require init_t)
(typeattributeset cil_gen_require tmp_t)
(typeattributeset cil_gen_require nscd_var_run_t)
(typeattributeset cil_gen_require var_log_t)
(typeattributeset cil_gen_require domain)
(typeattributeset cil_gen_require init_t)
(typeattributeset cil_gen_require init_var_run_t)
(typeattributeset cil_gen_require nscd_var_run_t)
(typeattributeset cil_gen_require system_dbusd_var_run_t)
(typeattributeset cil_gen_require tmp_t)
(typeattributeset cil_gen_require var_log_t)
;; Declare own types
(type guix_daemon_t)
@ -92,6 +94,9 @@
(allow init_t
guix_store_content_t
(file (open read execute)))
(allow init_t
guix_profiles_t
(dir (setattr)))
;; guix-daemon needs to know the names of users
(allow guix_daemon_t
@ -284,6 +289,14 @@
guix_store_content_t
(sock_file (create getattr setattr unlink write)))
;; Access to run state directories
(allow guix_daemon_t
system_dbusd_var_run_t
(dir (search)))
(allow guix_daemon_t
init_var_run_t
(dir (search)))
;; Access to configuration files and directories
(allow guix_daemon_t
guix_daemon_conf_t
@ -447,6 +460,8 @@
any (unconfined_u object_r guix_store_content_t (low low)))
(filecon "@prefix@/bin/guix-daemon"
file (system_u object_r guix_daemon_exec_t (low low)))
(filecon "@guix_localstatedir@/guix/profiles/per-user/[^/]+/current-guix/bin/guix-daemon"
file (system_u object_r guix_daemon_exec_t (low low)))
(filecon "@storedir@/.+-(guix-.+|profile)/bin/guix-daemon"
file (system_u object_r guix_daemon_exec_t (low low)))
(filecon "@storedir@/[a-z0-9]+-guix-daemon"

View File

@ -9,10 +9,16 @@ Description=Build daemon for GNU Guix
ExecStart=@localstatedir@/guix/profiles/per-user/root/current-guix/bin/guix-daemon \
--build-users-group=guixbuild --discover=no
Environment='GUIX_LOCPATH=@localstatedir@/guix/profiles/per-user/root/guix-profile/lib/locale' LC_ALL=en_US.utf8
RemainAfterExit=yes
StandardOutput=syslog
StandardError=syslog
# Work around a nasty systemd feature that kills the entire process tree
# (including the daemon!) if any child, such as cc1plus, runs out of memory.
OOMPolicy=continue
# Despite the name, this is rate-limited: a broken daemon will eventually fail.
Restart=always
# See <https://lists.gnu.org/archive/html/guix-devel/2016-04/msg00608.html>.
# Some package builds (for example, go@1.8.1) may require even more than
# 1024 tasks.

View File

@ -3,13 +3,14 @@
# Copyright © 2017 sharlatan <sharlatanus@gmail.com>
# Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
# Copyright © 2018 Efraim Flashner <efraim@flashner.co.il>
# Copyright © 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
# Copyright © 20192020, 2022 Tobias Geerinckx-Rice <me@tobias.gr>
# Copyright © 2020 Morgan Smith <Morgan.J.Smith@outlook.com>
# Copyright © 2020 Simon Tournier <zimon.toutoune@gmail.com>
# Copyright © 2020 Daniel Brooks <db48x@db48x.net>
# Copyright © 2021 Jakub Kądziołka <kuba@kadziolka.net>
# Copyright © 2021 Chris Marusich <cmmarusich@gmail.com>
# Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
# Copyright © 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
# Copyright © 2022 Prafulla Giri <prafulla.giri@protonmail.com>
#
# This file is part of GNU Guix.
#
@ -33,7 +34,7 @@ then
exec bash "$0" "$@"
fi
set -e
set -eo pipefail
[ "$UID" -eq 0 ] || { echo "This script must be run as root."; exit 1; }
@ -52,6 +53,7 @@ REQUIRE=(
"chmod"
"uname"
"groupadd"
"useradd"
"tail"
"tr"
"xz"
@ -92,17 +94,20 @@ _debug()
fi
}
# Return true if user answered yes, false otherwise.
die()
{
_err "${ERR}$*"
exit 1
}
# Return true if user answered yes, false otherwise. The prompt is
# yes-biased, that is, when the user simply enter newline, it is equivalent to
# answering "yes".
# $1: The prompt question.
prompt_yes_no() {
while true; do
read -rp "$1 " yn
case $yn in
[Yy]*) return 0;;
[Nn]*) return 1;;
*) _msg "Please answer yes or no."
esac
done
local -l yn
read -rp "$1 [Y/n]" yn
[[ ! $yn || $yn = y || $yn = yes ]] || return 1
}
chk_require()
@ -116,10 +121,8 @@ chk_require()
command -v "$c" &>/dev/null || warn+=("$c")
done
[ "${#warn}" -ne 0 ] &&
{ _err "${ERR}Missing commands: ${warn[*]}.";
return 1; }
[ "${#warn}" -ne 0 ] && die "Missing commands: ${warn[*]}."
_msg "${PAS}verification of required commands completed"
}
@ -134,21 +137,27 @@ chk_gpg_keyring()
gpg_key_id=${GPG_SIGNING_KEYS[$user_id]}
# Without --dry-run this command will create a ~/.gnupg owned by root on
# systems where gpg has never been used, causing errors and confusion.
if ! gpg --dry-run --list-keys "$gpg_key_id" >/dev/null 2>&1; then
if prompt_yes_no "${INF}The following OpenPGP public key is \
if gpg --dry-run --list-keys "$gpg_key_id" >/dev/null 2>&1; then
continue
fi
if prompt_yes_no "${INF}The following OpenPGP public key is \
required to verify the Guix binary signature: $gpg_key_id.
Would you like me to fetch it for you? (yes/no)"; then
wget "https://sv.gnu.org/people/viewgpg.php?user_id=$user_id" \
--no-verbose -O- | gpg --import -
else
_err "${ERR}Missing OpenPGP public key ($gpg_key_id).
Would you like me to fetch it for you?"; then
# Use a reasonable time-out here so users don't report silent
# freezes when Savannah goes out to lunch, as has happened.
if wget "https://sv.gnu.org/people/viewgpg.php?user_id=$user_id" \
--timeout=30 --no-verbose -O- | gpg --import -; then
continue
fi
fi
# If we reach this point, the key is (still) missing. Report further
# missing keys, if any, but then abort the installation.
_err "${ERR}Missing OpenPGP public key ($gpg_key_id).
Fetch it with this command:
wget \"https://sv.gnu.org/people/viewgpg.php?user_id=$user_id\" -O - | \
sudo -i gpg --import -"
exit_flag=yes
fi
fi
exit_flag=yes
done
if [ "$exit_flag" = yes ]; then
exit 1
@ -220,8 +229,7 @@ chk_sys_arch()
local arch=powerpc64le
;;
*)
_err "${ERR}Unsupported CPU type: ${arch}"
exit 1
die "Unsupported CPU type: ${arch}"
esac
case "$os" in
@ -229,8 +237,7 @@ chk_sys_arch()
local os=linux
;;
*)
_err "${ERR}Your operation system (${os}) is not supported."
exit 1
die "Your operation system (${os}) is not supported."
esac
ARCH_OS="${arch}-${os}"
@ -254,7 +261,7 @@ chk_sys_nscd()
configure_substitute_discovery() {
if grep -q -- '--discover=no' "$1" && \
prompt_yes_no "Would you like the Guix daemon to automatically \
discover substitute servers on the local network? (yes/no)"; then
discover substitute servers on the local network?"; then
sed -i 's/--discover=no/--discover=yes/' "$1"
fi
}
@ -285,8 +292,7 @@ guix_get_bin_list()
if [[ "${#bin_ver_ls}" -ne "0" ]]; then
_msg "${PAS}Release for your system: ${default_ver}"
else
_err "${ERR}Could not obtain list of Guix releases."
exit 1
die "Could not obtain list of Guix releases."
fi
# Use default to download according to the list and local ARCH_OS.
@ -311,8 +317,7 @@ guix_get_bin()
"${url}/${bin_ver}.tar.xz" "${url}/${bin_ver}.tar.xz.sig"; then
_msg "${PAS}download completed."
else
_err "${ERR}could not download ${url}/${bin_ver}.tar.xz."
exit 1
die "could not download ${url}/${bin_ver}.tar.xz."
fi
pushd "${dl_path}" >/dev/null
@ -320,8 +325,7 @@ guix_get_bin()
_msg "${PAS}Signature is valid."
popd >/dev/null
else
_err "${ERR}could not verify the signature."
exit 1
die "could not verify the signature."
fi
}
@ -333,8 +337,7 @@ sys_create_store()
_debug "--- [ ${FUNCNAME[0]} ] ---"
if [[ -e "/var/guix" || -e "/gnu" ]]; then
_err "${ERR}A previous Guix installation was found. Refusing to overwrite."
exit 1
die "A previous Guix installation was found. Refusing to overwrite."
fi
cd "$tmp_path"
@ -488,14 +491,22 @@ sys_enable_guix_daemon()
}
sys_authorize_build_farms()
{ # authorize the public key of the build farm
{ # authorize the public key(s) of the build farm(s)
local hosts=(
ci.guix.gnu.org
bordeaux.guix.gnu.org
)
if prompt_yes_no "Permit downloading pre-built package binaries from the \
project's build farm? (yes/no)"; then
guix archive --authorize \
< ~root/.config/guix/current/share/guix/ci.guix.gnu.org.pub \
&& _msg "${PAS}Authorized public key for ci.guix.gnu.org"
else
_msg "${INF}Skipped authorizing build farm public keys"
project's build farms?"; then
for host in "${hosts[@]}"; do
local key=~root/.config/guix/current/share/guix/$host.pub
[ -f "$key" ] \
&& guix archive --authorize < "$key" \
&& _msg "${PAS}Authorized public key for $host"
done
else
_msg "${INF}Skipped authorizing build farm public keys"
fi
}
@ -503,7 +514,7 @@ sys_create_init_profile()
{ # Define for better desktop integration
# This will not take effect until the next shell or desktop session!
[ -d "/etc/profile.d" ] || mkdir /etc/profile.d # Just in case
cat <<"EOF" > /etc/profile.d/guix.sh
cat <<"EOF" > /etc/profile.d/zzz-guix.sh
# Explicitly initialize XDG base directory variables to ease compatibility
# with Guix System: see <https://issues.guix.gnu.org/56050#3>.
export XDG_DATA_HOME="${XDG_DATA_HOME:-$HOME/.local/share}"
@ -532,9 +543,6 @@ GUIX_LOCPATH="$GUIX_PROFILE/lib/locale"
export GUIX_LOCPATH
[ -f "$GUIX_PROFILE/etc/profile" ] && . "$GUIX_PROFILE/etc/profile"
# set XDG_DATA_DIRS to include Guix installations
export XDG_DATA_DIRS="$GUIX_PROFILE/share:$XDG_DATA_DIRS"
EOF
}
@ -557,9 +565,28 @@ sys_create_shell_completion()
_msg "${PAS}installed shell completion"
}
sys_customize_bashrc()
{
prompt_yes_no "Customize users Bash shell prompt for Guix?" || return
for bashrc in /home/*/.bashrc /root/.bashrc; do
test -f "$bashrc" || continue
grep -Fq '$GUIX_ENVIRONMENT' "$bashrc" && continue
cp "${bashrc}" "${bashrc}.bak"
echo '
# Automatically added by the Guix install script.
if [ -n "$GUIX_ENVIRONMENT" ]; then
if [[ $PS1 =~ (.*)"\\$" ]]; then
PS1="${BASH_REMATCH[1]} [env]\\\$ "
fi
fi
' >> "$bashrc"
done
_msg "${PAS}Bash shell prompt successfully customized for Guix"
}
welcome()
{
local char
cat<<"EOF"
░░░ ░░░
░░▒▒░░░░░░░░░ ░░░░░░░░░▒▒░░
@ -585,8 +612,18 @@ This script installs GNU Guix on your system
https://www.gnu.org/software/guix/
EOF
echo -n "Press return to continue..."
read -r
# Don't use read -p here! It won't display when run non-interactively.
echo -n "Press return to continue..."$'\r'
if ! read -r char; then
echo
die "Can't read standard input. Hint: don't pipe scripts into a shell."
fi
if [ "$char" ]; then
echo
echo "...that ($char) was not a return!"
_msg "${WAR}Use newlines to automate installation, e.g.: yes '' | ${0##*/}"
_msg "${WAR}Any other method is unsupported and likely to break in future."
fi
}
main()
@ -606,7 +643,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}"
@ -626,6 +663,7 @@ main()
sys_authorize_build_farms
sys_create_init_profile
sys_create_shell_completion
sys_customize_bashrc
_msg "${INF}cleaning up ${tmp_path}"
rm -r "${tmp_path}"

View File

@ -11,10 +11,12 @@ After=guix-daemon.service
[Service]
ExecStart=@localstatedir@/guix/profiles/per-user/root/current-guix/bin/guix publish --user=nobody --port=8181
Environment='GUIX_LOCPATH=@localstatedir@/guix/profiles/per-user/root/guix-profile/lib/locale' LC_ALL=en_US.utf8
RemainAfterExit=yes
StandardOutput=syslog
StandardError=syslog
# Despite the name, this is rate-limited: a broken daemon will eventually fail.
Restart=always
# See <https://lists.gnu.org/archive/html/guix-devel/2016-04/msg00608.html>.
TasksMax=1024

View File

@ -0,0 +1,35 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2022 Leo Famulari <leo@famulari.name>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
;;; This file returns a manifest of packages related to linux-libre.
;;; Simplistically, it selects packages whose names begin with "linux-libre".
;;; It is used to assist continuous integration of the kernel packages.
(use-modules (guix packages)
(guix profiles)
(gnu packages))
(manifest
(map package->manifest-entry
(fold-packages
(lambda (package lst)
(if (string-prefix? "linux-libre"
(package-name package))
(cons package lst)
lst))
'())))

View File

@ -1,12 +1,12 @@
;; GNU Guix news, for use by 'guix pull'.
;;
;; Copyright © 2019-2022 Ludovic Courtès <ludo@gnu.org>
;; Copyright © 2019-2023 Ludovic Courtès <ludo@gnu.org>
;; Copyright © 20192021 Tobias Geerinckx-Rice <me@tobias.gr>
;; Copyright © 2019, 2020 Miguel Ángel Arruga Vivas <rosen644835@gmail.com>
;; Copyright © 2019, 2020 Konrad Hinsen <konrad.hinsen@fastmail.net>
;; Copyright © 2019, 2020, 2021 Julien Lepiller <julien@lepiller.eu>
;; Copyright © 20192022 Florian Pelz <pelzflorian@pelzflorian.de>
;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
;; Copyright © 20192023 Florian Pelz <pelzflorian@pelzflorian.de>
;; Copyright © 2020, 2022 Marius Bakke <marius@gnu.org>
;; Copyright © 2020, 2021 Mathieu Othacehe <m.othacehe@gmail.com>
;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
;; Copyright © 2020, 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
@ -25,11 +25,344 @@
(channel-news
(version 0)
(entry (commit "137b91f03bbb7f1df71cf10c4f79ae57fbcea400")
(title
(en "New @option{--with-version} package transformation option")
(de "Neue Paketumwandlungsoption @option{--with-version}")
(fr "Nouvelle option de transformation @option{--with-version}"))
(body
(en "The new @option{--with-version} package transformation option
generalizes @option{--with-latest}: it gets the specified upstream release of
a package and uses it instead of the currently-packaged version.
For example, the command below would spawn GNOME Clocks built against GTK
4.7.0, skipping its test suite:
@example
guix shell gnome-clocks --with-version=gtk=4.7.0 \\
--without-tests=gtk -- gnome-clocks
@end example
Run @command{info \"(guix) Package Transformation Options\"} for more info.")
(de "Die neue Paketumwandlungsoption @option{--with-version}
verallgemeinert @option{--with-latest}: Mit ihr kann man angeben, welche
vom Anbieter veröffentlichte Version man anstelle der derzeit im Paket
vorgegebenen haben möchte.
Zum Beispiel kann mit folgendem Befehl ein für die GTK-Version 4.7.0
erstelltes GNOME Clocks aufgerufen werden, wobei der Testkatalog dafür
übersprungen wird.
@example
guix shell gnome-clocks --with-version=gtk=4.7.0 \\
--without-tests=gtk -- gnome-clocks
@end example
Führen Sie für mehr Informationen @command{info \"(guix.de)
Paketumwandlungsoptionen\"} aus.")
(fr "La nouvelle option de transformation de paquets
@option{--with-version} généralise @option{--with-latest} : elle permet de
spécifier quelle version amont d'un logiciel utiliser à la place de celle
actuellement fournie.
Par exemple, la commande ci-dessous démarre GNOME Clocks construit avec GTK
4.7.0, sans lancer sa suite de tests :
@example
guix shell gnome-clocks --with-version=gtk=4.7.0 \\
--without-tests=gtk -- gnome-clocks
@end example
Voir @command{info \"(guix.fr) Options de transformation de paquets\"} pour
plus de détails.")))
(entry (commit "9ea37eb9f5329c213757bbfe5d9241cde8433858")
(title
(en "Linux-libre 6.0 removed due to end of upstream support")
(de "Linux-libre 6.0 wurde entfernt"))
(body
(en "The linux-libre 6.0 kernel series has reached the end of
its life, and no longer supported upstream. For this
reason, it has been removed from GNU Guix.")
(de "Vom Kernel @code{linux-libre} wird die 6.0-Versionsreihe keine
Unterstützung von dessen Anbieter mehr erfahren (end of life). Daher ist es
aus GNU Guix entfernt worden.")))
(entry (commit "ce8a34bc9ab89f31f107383ba791954864aed372")
(title
(en "Linux-libre kernel updated to 6.1")
(de "Linux-libre-Kernel wird auf 6.1 aktualisiert")
(fr "Le noyau linux-libre est mis à jour vers la 6.1")
(pt "Kernel linux-libre atualizado para 6.1"))
(body
(en "The default version of the linux-libre kernel has been updated to
the 6.1 release series.")
(de "Der standardmäßig verwendete @code{linux-libre}-Kernel basiert
jetzt auf der 6.1-Versionsreihe.")
(fr "La version par défaut du noyau linux-libre est mise à jour
vers la série des 6.1.")
(pt "A versão padrão do kernel linux-libre foi atualizada para a
série do kernel 6.1.")))
(entry (commit "064c5b7e450f9f6d55cfcd0ec2bc9e96ee0b2958")
(title
(en "Linux-libre 4.9 removed due to end of upstream support")
(de "Linux-libre 4.9 wurde entfernt"))
(body
(en "The linux-libre 4.9 kernel series has reach the end of its life,
and is no longer supported upstream. For this reason, it has been removed from
GNU Guix.")
(de "Vom Kernel @code{linux-libre} wird die 4.9-Versionsreihe keine
Unterstützung von dessen Anbieter mehr erfahren (end of life). Daher ist es
aus GNU Guix entfernt worden.")))
(entry (commit "dfc6957a5af7d179d4618eb19d4f555c519bc6f2")
(title
(en "New @code{customize-linux} procedure")
(de "Neue Prozedur @code{customize-linux}")
(fr "Nouvelle procédure @code{customize-linux}"))
(body
(en "The @code{(gnu packages linux)} module includes a new
@code{customize-linux} procedure, which should now be used instead of
replacing the @samp{\"kconfig\"} native input of a @code{linux-libre}-derived
package, as the kernel config file is no longer provided as a native
input.")
(de "Das Modul @code{(gnu packages linux)} enthält eine neue Prozedur
@code{customize-linux}, die von nun an für angepasste Linux-Pakete benutzt
werden sollte. Die native Eingabe @samp{\"kconfig\"} eines von
@code{linux-libre} abgeleiteten Pakets zu ersetzen, funktioniert nicht mehr,
weil die Kernel-Konfigurationsdatei nicht mehr als native Eingabe vorliegt.")
(fr "Le module @code{(gnu packages linux)} inclut une nouvelle
procédure @code{customize-linux}, qui devrait maintenant être utilisée au lieu
de remplacer l'entrée native @samp{\"kconfig\"} d'un paquet dérivé de
@code{linux-libre}, car le fichier de configuration du noyau n'est plus fourni
en tant qu'entrée native.")))
(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"))
(body
(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
jetzt auf der 6.0-Versionsreihe.")
(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
série do kernel 6.0.")))
(entry (commit "400a7a4c80efbde1905ae98a298bbb5882d46a0d")
(title
(en "New build system for Python packages")
(de "Neues Erstellungssystem für Python-Pakete")
(fr "Nouveau système de construction pour les paquets Python")
(pt "Novo sistema de compilação para pacotes Python"))
(body
(en "A new @var{pyproject-build-system} has been added. This
is a redesign of @var{python-build-system} with support for @dfn{PEP 517}
and @file{pyproject.toml} files. It also has built-in support for various
test frameworks such as @command{pytest} and @code{nosetests}.
There is a complementary @code{python-toolchain} package that comes with
updated versions of @command{pip}, @command{setuptools} and others.
The build system will eventually be merged into @var{python-build-system}
but you are encouraged to use it for packages in the @code{guix} channel.
Third party channels may want to wait until the API is stable (see the
Guix manual for caveats).
Despite the name, @var{pyproject-build-system} also works with the
``legacy'' @file{setup.py} format.")
(de "Ein neues Erstellungssystem @var{pyproject-build-system} ist
verfügbar. Es ist eine Neuauflage des @var{python-build-system}, die
@dfn{PEP 517} und @file{pyproject.toml}-Dateien unterstützt. Auch wurde
Unterstützung für Testrahmen wie @command{pytest} und @code{nosetests}
eingebaut.
Ergänzend gibt es ein Paket @code{python-toolchain} mit aktualisierten Versionen
von @command{pip}, @command{setuptools} und mehr.
Das Erstellungssystem wird in Zukunft Teil von @var{python-build-system} werden,
aber wir würden es begrüßen, wenn Sie es für Pakete auf dem @code{guix}-Kanal
verwenden würden. Drittanbieterkanäle warten vielleicht lieber auf eine
stabile Programmierschnittstelle (siehe die im Guix-Handbuch genannten
Einschränkungen).
Trotz dem Namen funktioniert @var{pyproject-build-system} auch mit dem alten
@file{setup.py}-Format.")
(fr "Un nouveau système de construction, @var{pyproject-build-system},
a été ajouté. Il s'agit d'une refonte du @var{python-build-system} qui rajoute
la prise en charge de @dfn{PEP 517} et des fichiers @file{pyproject.toml}.
Il intègre aussi la prise en charge de divers cadriciels de test comme
@command{pytest} ou @code{nosetests}.
Un paquet supplémentaire @code{python-toolchain} fournit des versions à jour
de @command{pip}, @command{setuptools} et autres.
Le système de construction finira par être intégré au @var{python-build-system}
mais nous vous encourageons à l'utiliser pour les paquets du canal @code{guix}.
Les canaux tiers devraient attendre que l'API se stabilise (voir le manuel de
Guix pour les mises en garde).
Contrairement à ce qu'indique son nom, @var{pyproject-build-system} fonctionne
aussi avec « l'ancien » format @file{setup.py}.")
(pt "Um novo sistema de compilação chamado @var{pyproject-build-system}
foi adicionado. É um redesign do @var{python-build-system} com suporte à
@dfn{PEP 517} e a arquivos @file{pyproject.toml}. Ele também inclui suporte a
vários frameworks de teste tais como @command{pytest} e @code{nosetests}.
Há um pacote complementar @code{python-toolchain} que contém versões
atualizadas do @command{pip}, @command{setuptools} e outros.
O sistema de compilação será eventualmente incorporado ao
@var{python-build-system}, mas encorajamos você a usá-lo para pacotes no canal
@code{guix}. Canais de terceiros podem querer esperar até a API se
estabilizar (veja o manual do Guix para ressalvas).
Apesar do nome, o @var{pyproject-build-system} também funciona com o formato
legado do @file{setup.py}.")))
(entry (commit "c7ba5f38b80433b040d3946b8fc0b1e8621ba30a")
(title
(en "New @option{--emulate-fhs} option for @command{guix shell}")
(de "Neue Option @option{--emulate-fhs} für @command{guix shell}")
(fr "Nouvelle option @option{--emulate-fhs} pour @command{guix shell}")
(pt "Nova opção @option{--emulate-fhs} para o @command{guix shell}"))
(body
(en "The @command{guix shell} command has a new
@option{--emulate-fhs} (or @option{-F}) option. Combined with
@option{--container} (or @option{-C}), it emulates the file and directory
layout specified by the Filesystem Hierarchy Standard (FHS), providing
@file{/bin}, @file{/lib}, etc. within the container.
For example, the following command runs @file{/bin/ls} within such a
container:
@example
guix shell -CF coreutils -- /bin/ls
@end example
Run @command{info \"(guix) Invoking guix shell\"} for more information.")
(de "Der Befehl @command{guix shell} verfügt jetzt über eine neue
Befehlszeilenoption @option{--emulate-fhs} (oder @option{-F}). Zusammen mit
@option{--container} (oder @option{-C}) kann so die Datei- und
Verzeichnisstruktur, die im @i{Filesystem Hierarchy Standard} (FHS) vorgegeben
wird, nachgebildet werden. Das heißt, in der Container-Umgebung gibt es
@file{/bin}, @file{/lib} und so weiter.
Zum Beispiel wird folgender Befehl @file{/bin/ls} in einem solchen Container
ausführen:
@example
guix shell -CF coreutils -- /bin/ls
@end example
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{--emulate-fhs} (ou @option{-F}). Avec @option{--container} (ou
@option{-C}), elle permet d'imiter la disposition des fichiers et répertoires
spécifiée par le @i{Filesystem Hierarchy Standard} (FHS) en fournissant
@file{/bin}, @file{/lib}, etc. dans le conteneur.
Par exemple, la commande ci-dessous lance @file{/bin/ls} dans un tel
conteneur :
@example
guix shell -CF coreutils -- /bin/ls
@end example
Lancer @command{info \"(guix.fr) Invoquer guix shell\"} pour plus
d'informations.")
(pt "O comando @command{guix shell} tem uma nova opção
@option{--emulate-fhs} (ou @option{-F}). Combinada com
@option{--container} (ou @option{-C}), ela emula o layout de arquivos e
diretórios especificado pelo Padrão de Hierarquia do Sistema de
Arquivos (Filesystem Hierarchy Standard FHS), provendo @file{/bin},
@file{/lib}, etc. dentro do contêiner.
Por exemplo, o comando seguinte executa @file{/bin/ls} dentro de um contêiner
desse tipo:
@example
guix shell -CF coreutils -- /bin/ls
@end example
Execute @command{info \"(guix) Invoking guix shell\"} para mais informações.")))
(entry (commit "28ade1bab207974cce6a014e7187968511fc5526")
(title
(en "@option{--with-source} is now recursive")
(de "@option{--with-source} ist jetzt rekursiv")
(fr "@option{--with-source} est dorénavant récursive")
(pt "@option{--with-source} agora é recursiva"))
(body
(en "The @option{--with-source} package transformation option now
uses the specified source for all matching packages, including dependencies.
This option is useful for all package maintainers, developers, and, in
general, all users who want Guix to facilitate their rights to modify their
software and share their changes.
Run @command{info \"(guix) Package Transformation Options\"} for more
info.")
(de "Die Paketumwandlungsoption @option{--with-source} wird jetzt den
angegebenen Quellcode für sämtliche passende Pakete benutzen, Abhängigkeiten
eingeschlossen. Die Option hilft Paketbetreuern, Entwicklern und allgemein allen
Nutzern, die Guix benutzen, das Recht, ihre Software anzupassen und
Änderungen zu teilen, leichter auszuüben.
Führen Sie für mehr Informationen @command{info \"(guix.de)
Paketumwandlungsoptionen\"} aus.")
(fr "L'option de transformation de paquet @option{--with-source}
s'applique désormais à tous les paquets correspondant, y compris les
dépendances. Cette option est utile pour les personnes qui maintiennent un
logiciel, en développent un ou, plus généralement, pour toute personne qui
souhaite que Guix facilite l'exercice de ses droits à modifier le logiciel et
à partager ses changements.
Lancer @command{info \"(guix.fr) Options de transformation de paquets\"} pour
plus d'informations.")
(pt "A opção de transformação de pacote @option{--with-source} agora
usa a fonte especificada para todos os pacotes correspondentes, incluindo
dependências. Essa opção é útil para todos os mantenedores de pacotes,
desenvolvedores e usuários em geral que querem que o Guix facilite seu direito
de modificar seu software e compartilhar suas mudanças.
Execute @command{info \"(guix) Package Transformation Options\"} para mais
informações.")))
(entry (commit "a13f5ead0265cf0fe11e60150547c09dfc8c45b0")
(title
(en "Guix System image creation is now documented")
(de "Es gibt eine Dokumentation, wie Sie Guix-System-Abbilder („Images“) erzeugen")
(fr "La création d'images pour Guix System est à présent documentée"))
(fr "La création d'images pour Guix System est à présent documentée")
(pt "A criação de imagens do Guix System agora está documentada"))
(body
(en "The Guix System image API that allows you to create customized
system images and turn them into actual bootable images is now documented in
@ -45,12 +378,18 @@ zu bringen.")
permettant de créer des images personnalisées et de les transformer en images
amorçables est désormais documentée dans le chapitre @code{Création d'images
système}. Cette interface devrait être particulièrement utile aux personnes
qui essaient de faire fonctionner Guix sur de nouvelles machines.")))
qui essaient de faire fonctionner Guix sur de nouvelles machines.")
(pt "A API de imagens do Guix System que permite criar imagens de
sistema customizadas e torná-las inicializáveis agora está documentada no
capítulo @code{Creating System Images} da documentação do Guix. Isso é
particularmente útil para pessoas tentando portar o Guix System para um novo
hardware.")))
(entry (commit "c8112f3bd95269ce4aca12dedbfe61bb6b37acae")
(title
(en "WSL system images support")
(de "WSL-Systemabbilder werden unterstützt")
(fr "Support pour les images système WSL"))
(fr "Support pour les images système WSL")
(pt "Suporte a imagens de sistema WSL"))
(body
(en "The @command{guix system image} command can now generate system
images for the Windows Subsystem for Linux. To get started, you can for
@ -81,6 +420,16 @@ exemple lancer la commande suivante depuis un répertoire de sources Guix :
et importer l'image obtenue de cette manière :
@command{wsl --import Guix ./guix ./wsl2-image.tar.gz}
@command{wsl -d Guix}.")
(pt "Agora o comando @command{guix system image} pode gerar imagens
de sistema para o Subsistema do Windows para Linux. Para começar, você pode
por exemplo rodar a partir de um checkout do repositório do Guix:
@command{guix system image gnu/system/images/wsl2.scm},
e importar a imagem resultante da seguinte maneira:
@command{wsl --import Guix ./guix ./wsl2-image.tar.gz}
@command{wsl -d Guix}.")))
(entry (commit "11a06d1e49f4d50d6789e05bbf35e2e145ff7838")
@ -124,18 +473,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")
@ -177,15 +526,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")
@ -317,11 +666,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")

View File

@ -51,18 +51,17 @@ TARGET."
"openssh" "emacs" "vim" "python" "guile" "guix")))
(define %base-packages/armhf
;; XXX: Relax requirements for armhf-linux for lack of enough build power.
(map (lambda (package)
(if (string=? (package-name package) "emacs")
(specification->package "emacs-no-x")
package))
%base-packages))
;; The guix package doesn't build natively on armhf due to Guile memory
;; issues compiling the package modules
(remove (lambda (package)
(string=? (package-name package) "guix"))
%base-packages))
(define %base-packages/hurd
;; XXX: For now we are less demanding of "i586-gnu".
(map specification->package
'("coreutils" "grep" "findutils" "gawk" "make"
"gcc-toolchain" "tar" "xz")))
#;"gcc-toolchain" "tar" "xz")))
(define %system-packages
;; Key packages proposed by the Guix System installer.
@ -112,8 +111,6 @@ TARGET."
(cond ((string=? system "i586-gnu")
%base-packages/hurd)
((string=? system "armhf-linux")
;; FIXME: Drop special case when ci.guix.gnu.org
;; has more ARMv7 build power.
%base-packages/armhf)
((string=? system "powerpc64le-linux")
;; FIXME: Drop 'bootstrap-tarballs' until

View File

@ -1,118 +1,158 @@
-*- mode: lisp-data -*-
text-mode :when (and (fboundp 'git-commit-mode) (git-commit-mode))
text-mode :when (and (fboundp 'git-commit-mode) git-commit-mode)
(add\
"gnu: Add "
(p
(with-temp-buffer
(magit-git-wash #'magit-diff-wash-diffs
"diff" "--staged")
(goto-char (point-min))
(when (re-search-forward "\\+(define-public \\(\\S-+\\)" nil 'noerror)
(match-string-no-properties 1)))
var ) "." n n
"* " (car (magit-staged-files)) " (" (s var ) "): New variable.")
(add\ "gnu: Add "
(p (with-temp-buffer
(magit-git-wash #'magit-diff-wash-diffs
"diff" "--staged")
(goto-char (point-min))
(when (re-search-forward "\\+(define-public \\(\\S-+\\)"
nil 'noerror)
(match-string-no-properties 1)))
var)
"." n n
"* " (p (or (car (magit-staged-files)) ""))
" (" (s var ) "): New variable.")
(remove\
"gnu: Remove "
(p (with-temp-buffer
(magit-git-wash #'magit-diff-wash-diffs
"diff" "--staged")
(goto-char (point-min))
(when (re-search-forward "\\-(define-public \\(\\S-+\\)" nil 'noerror)
(match-string-no-properties 1)))
var) "." n n
"* " (car (magit-staged-files)) " (" (s var) "): Delete variable.")
(remove\ "gnu: Remove "
(p (with-temp-buffer
(magit-git-wash #'magit-diff-wash-diffs
"diff" "--staged")
(goto-char (point-min))
(when (re-search-forward "\\-(define-public \\(\\S-+\\)"
nil 'noerror)
(match-string-no-properties 1)))
var)
"." n n
"* " (p (or (car (magit-staged-files)) ""))
" (" (s var) "): Delete variable.")
(rename\
"gnu: "
(p (with-temp-buffer
(magit-git-wash #'magit-diff-wash-diffs
"diff" "--staged")
(beginning-of-buffer)
(when (search-forward "-(define-public " nil 'noerror)
(thing-at-point 'sexp 'no-properties)))
prev-var)
": Rename package to "
(p (with-temp-buffer
(magit-git-wash #'magit-diff-wash-diffs
"diff" "--staged")
(beginning-of-buffer)
(when (search-forward "+(define-public " nil 'noerror)
(thing-at-point 'sexp 'no-properties)))
new-var) "." n n
"* " (car (magit-staged-files)) " (" (s prev-var) "): Define in terms of" n
"'deprecated-package'." n
"(" (s new-var) "): New variable, formerly known as \"" (s prev-var) "\".")
(rename\ "gnu: "
(p (with-temp-buffer
(magit-git-wash #'magit-diff-wash-diffs
"diff" "--staged")
(beginning-of-buffer)
(when (search-forward "-(define-public " nil 'noerror)
(thing-at-point 'sexp 'no-properties)))
prev-var)
": Rename package to "
(p (with-temp-buffer
(magit-git-wash #'magit-diff-wash-diffs
"diff" "--staged")
(beginning-of-buffer)
(when (search-forward "+(define-public " nil 'noerror)
(thing-at-point 'sexp 'no-properties)))
new-var)
"." n n
"* " (p (or (car (magit-staged-files)) "")) " (" (s prev-var) "): "
"Define in terms of" n
"'deprecated-package'." n
"(" (s new-var) "): New variable, formerly known as \""
(s prev-var) "\".")
(update\
"gnu: "
(p (with-temp-buffer
(magit-git-wash #'magit-diff-wash-diffs
"diff" "--staged")
(goto-char (point-min))
(when (re-search-forward "^[ ]*(define-public \\(\\S-+\\)" nil 'noerror)
(match-string-no-properties 1)))
var)
": Update to "
(p (with-temp-buffer
(magit-git-wash #'magit-diff-wash-diffs
"diff" "--staged")
(goto-char (point-min))
(search-forward "name" nil 'noerror)
(search-forward "+" nil 'noerror) ; first change
(when (and (search-forward "version " nil 'noerror)
(looking-at-p "\""))
(let ((end (save-excursion (search-forward "\")" nil 'noerror))))
(when end
(forward-char)
(buffer-substring-no-properties (point) (- end 2))))))
version) "." n n
"* " (car (magit-staged-files)) " (" (s var) "): Update to " (s version) "."
(mapconcat (lambda (file) (concat "* " file)) (cdr (magit-staged-files))) n)
(update\ "gnu: "
(p (with-temp-buffer
(magit-git-wash #'magit-diff-wash-diffs
"diff" "--staged")
(goto-char (point-min))
(when (re-search-forward "^[ ]*(define-public \\(\\S-+\\)"
nil 'noerror)
(match-string-no-properties 1)))
var)
": Update to "
(p (with-temp-buffer
(magit-git-wash #'magit-diff-wash-diffs
"diff" "--staged")
(goto-char (point-min))
(search-forward "name" nil 'noerror)
(search-forward "+" nil 'noerror) ; first change
(when (and (search-forward "version " nil 'noerror)
(looking-at-p "\""))
(let ((end (save-excursion (search-forward "\")"
nil 'noerror))))
(when end
(forward-char)
(buffer-substring-no-properties (point) (- end 2))))))
version)
"." n n
"* " (p (or (car (magit-staged-files)) "")) " (" (s var) "): "
"Update to " (s version) "." n
(mapconcat (lambda (file) (concat "* " file))
(cdr (magit-staged-files))
"\n"))
(addcl\
"gnu: Add cl-"
(p (replace-regexp-in-string
"^cl-" "" (with-temp-buffer
(magit-git-wash #'magit-diff-wash-diffs
"diff" "--staged")
(beginning-of-buffer)
(when (search-forward "+(define-public " nil 'noerror)
(replace-regexp-in-string
"^sbcl-" ""
(thing-at-point 'sexp 'no-properties)))))
var) "." n n
"* " (car (magit-staged-files))
" (cl-" (s var) ", ecl-" (s var) ", sbcl-" (s var) "): New variables.")
(addcl\ "gnu: Add cl-"
(p (replace-regexp-in-string
"^cl-" "" (with-temp-buffer
(magit-git-wash #'magit-diff-wash-diffs
"diff" "--staged")
(beginning-of-buffer)
(when (search-forward "+(define-public " nil 'noerror)
(replace-regexp-in-string
"^sbcl-" ""
(thing-at-point 'sexp 'no-properties)))))
var)
"." n n
"* " (p (or (car (magit-staged-files)) ""))
" (cl-" (s var)
", ecl-" (s var)
", sbcl-" (s var) "): New variables.")
(https\
"gnu: "
(p (with-temp-buffer
(magit-git-wash #'magit-diff-wash-diffs
"diff" "--staged")
(goto-char (point-min))
(when (re-search-forward "^[ ]*(define-public \\(\\S-+\\)" nil 'noerror)
(match-string-no-properties 1)))
var)
": Use HTTPS home page." n n
"* " (car (magit-staged-files)) " (" (s var) ")[home-page]: Use HTTPS." n
(mapconcat (lambda (file) (concat "* " file)) (cdr (magit-staged-files))) n)
(https\ "gnu: "
(p (with-temp-buffer
(magit-git-wash #'magit-diff-wash-diffs
"diff" "--staged")
(goto-char (point-min))
(when (re-search-forward "^[ ]*(define-public \\(\\S-+\\)"
nil 'noerror)
(match-string-no-properties 1)))
var)
": Use HTTPS home page." n n
"* " (p (or (car (magit-staged-files)) ""))
" (" (s var) ")[home-page]: Use HTTPS."
n
(mapconcat (lambda (file) (concat "* " file))
(cdr (magit-staged-files))
"\n"))
(move\
"gnu: "
(p (with-temp-buffer
(magit-git-wash #'magit-diff-wash-diffs
"diff" "--staged")
(goto-char (point-min))
(when (re-search-forward "\\-(define-public \\(\\S-+\\)" nil 'noerror)
(match-string-no-properties 1)))
var)
": Move to "
(concat "("
(string-replace "\.scm" ""
(string-replace "/" " " (car (magit-staged-files))))
").") n
n "* " (car (magit-staged-files)) " (" (s var) "): Move from here…"
n "* " (cadr (magit-staged-files)) " (" (s var) "): …to here.")
(move\ "gnu: "
(p (with-temp-buffer
(magit-git-wash #'magit-diff-wash-diffs
"diff" "--staged")
(goto-char (point-min))
(when (re-search-forward "\\-(define-public \\(\\S-+\\)"
nil 'noerror)
(match-string-no-properties 1)))
var)
": Move to ("
(p (with-temp-buffer
(magit-git-wash #'magit-diff-wash-diffs
"diff" "--staged")
(goto-char (point-min))
(when (and
(re-search-forward "\\+(define-public \\(\\S-+\\)"
nil 'noerror)
(re-search-backward "modified[ ]*\\(\\S-+\\)"
nil 'noerror))
(string-replace
"\.scm" ""
(string-replace "/" " "
(match-string-no-properties 1)))))
new-module)
")." n
n
"* " (p (with-temp-buffer
(magit-git-wash #'magit-diff-wash-diffs
"diff" "--staged")
(goto-char (point-min))
(when (and
(re-search-forward "\\-(define-public \\(\\S-+\\)"
nil 'noerror)
(re-search-backward "modified[ ]*\\(\\S-+\\)"
nil 'noerror))
(match-string-no-properties 1)))
source)
" (" (s var) "): Move from here…" n
"* " (concat (string-replace " " "/" new-module) ".scm")
" (" (s var) "): …to here.")

View File

@ -0,0 +1,9 @@
# -*- mode: snippet -*-
# name: guix-vc-commit-message-add-package
# key: add
# --
gnu: Add ${1:`(when (string-match "\\+(define-public \\(\\S-+\\)" vc-patch-string)
(match-string-no-properties 1 vc-patch-string))`}.
* `(car (log-edit-files))` ($1): New variable.
`(mapconcat (lambda (file) (concat "* " file)) (cdr (log-edit-files)) "\n")`

View File

@ -0,0 +1,9 @@
# -*- mode: snippet -*-
# name: guix-vc-commit-message-remove-package
# key: remove
# --
gnu: Remove ${1:`(when (string-match "\\-(define-public \\(\\S-+\\)" vc-patch-string)
(match-string-no-properties 1 vc-patch-string))`}.
* `(car (log-edit-files))` ($1): Delete variable.
`(mapconcat (lambda (file) (concat "* " file)) (cdr (log-edit-files)) "\n")`

View File

@ -0,0 +1,14 @@
# -*- mode: snippet -*-
# name: guix-vc-commit-message-rename-package
# key: rename
# --
gnu: ${1:`(when (string-match "\\-(define-public \\(\\S-+\\)" vc-patch-string)
(match-string-no-properties 1 vc-patch-string))
`}: Rename package to ${2:`
(when (string-match "\\+(define-public \\(\\S-+\\)" vc-patch-string)
(match-string-no-properties 1 vc-patch-string))`}.
* `(car (log-edit-files))` ($1): Define in terms of
'deprecated-package'.
($2): New variable, formerly known as "$1".
`(mapconcat (lambda (file) (concat "* " file)) (cdr (log-edit-files)) "\n")`

View File

@ -0,0 +1,12 @@
# -*- mode: snippet -*-
# name: guix-vc-commit-message-update-package
# key: update
# --
gnu: ${1:`(when (string-match "^[ ]*(define-public \\(\\S-+\\)" vc-patch-string)
(match-string-no-properties 1 vc-patch-string))`}: Update to ${2:`
(when (string-match "^\\+[ ]*(version \"\\(.*\\)\"" vc-patch-string)
(match-string-no-properties 1 vc-patch-string))`}.
* `(car (log-edit-files))` ($1): Update to $2.$0
`(mapconcat (lambda (file) (concat "* " file)) (cdr (log-edit-files)) "\n")`

View File

@ -0,0 +1,9 @@
# -*- mode: snippet -*-
# name: guix-vc-commit-message-use-https-home-page
# key: https
# --
gnu: ${1:`(when (string-match "^[ ]*(define-public \\(\\S-+\\)" vc-patch-string)
(match-string-no-properties 1 vc-patch-string))`}: Use HTTPS home page URI.
* `(car (log-edit-files))` ($1)[home-page]: Use HTTPS URI.
`(mapconcat (lambda (file) (concat "* " file)) (cdr (log-edit-files)) "\n")`

View File

@ -5,6 +5,7 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2022 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2022 Mathieu Othacehe <othacehe@gnu.org>
;;; Copyright © 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@ -34,6 +35,7 @@
(ice-9 format)
(ice-9 regex)
(ice-9 match)
(ice-9 rdelim)
(guix ui)
(git))
@ -100,6 +102,8 @@
(make-regexp "^gnu/packages/python(-.+|)\\.scm$")
"gnu/packages/sphinx.scm"
"gnu/packages/tryton.scm"
"guix/build/pyproject-build-system.scm"
"guix/build-system/pyproject.scm"
"guix/build/python-build-system.scm"
"guix/build-system/python.scm"
"guix/import/pypi.scm"
@ -129,13 +133,23 @@ the haskell-build-system."
#:name "R team"
#:description
"The R language, CRAN and Bioconductor repositories, the \"cran\" importer,
and the r-build-system."))
and the r-build-system."
#:scope (list "gnu/packages/bioconductor.scm"
"gnu/packages/cran.scm"
"guix/build/r-build-system.scm"
"guix/build-system/r.scm"
"guix/import/cran.scm"
"guix/scripts/import/cran.scm"
"tests/cran.scm")))
(define-team julia
(team 'julia
#:name "Julia team"
#:description
"The Julia language, Julia packages, and the julia-build-system."))
"The Julia language, Julia packages, and the julia-build-system."
#:scope (list (make-regexp "^gnu/packages/julia(-.+|)\\.scm$")
"guix/build/julia-build-system.scm"
"guix/build-system/julia.scm")))
(define-team ocaml
(team 'ocaml
@ -175,7 +189,14 @@ and the maven-build-system."
(define-team science
(team 'science
#:name "Science team"))
#:name "Science team"
#:description "The main science disciplines and fields related
packages (e.g. Astronomy, Chemistry, Math, Physics etc.)"
#:scope (list "gnu/packages/algebra.scm"
"gnu/packages/astronomy.scm"
"gnu/packages/geo.scm"
"gnu/packages/chemestry.scm"
"gnu/packages/maths.scm")))
(define-team emacs
(team 'emacs
@ -185,7 +206,10 @@ ecosystem."
#:scope (list (make-regexp "^gnu/packages/emacs(-.+|)\\.scm$")
"guix/build/emacs-build-system.scm"
"guix/build/emacs-utils.scm"
"guix/build-system/emacs.scm")))
"guix/build-system/emacs.scm"
"guix/import/elpa.scm"
"guix/scripts/import/elpa.scm"
"tests/elpa.scm")))
(define-team lisp
(team 'lisp
@ -200,11 +224,23 @@ asdf-build-system."
(define-team ruby
(team 'ruby
#:name "Ruby team"))
#:name "Ruby team"
#:scope (list "gnu/packages/ruby.scm"
"guix/build/ruby-build-system.scm"
"guix/build-system/ruby.scm"
"guix/import/gem.scm"
"guix/scripts/import/gem.scm"
"tests/gem.scm")))
(define-team go
(team 'go
#:name "Go team"))
#:name "Go team"
#:scope (list "gnu/packages/golang.scm"
"guix/build/go-build-system.scm"
"guix/build-system/go.scm"
"guix/import/go.scm"
"guix/scripts/import/go.scm"
"tests/go.scm")))
(define-team embedded-bootstrap
(team 'embedded-bootstrap
@ -212,11 +248,23 @@ asdf-build-system."
(define-team rust
(team 'rust
#:name "Rust"))
#:name "Rust"
#:scope (list (make-regexp "^gnu/packages/(crates|rust)(-.+|)\\.scm$")
"guix/build/cargo-build-system.scm"
"guix/build/cargo-utils.scm"
"guix/build-system/cargo.scm"
"guix/import/crate.scm"
"guix/scripts/import/crate.scm"
"tests/crate.scm")))
(define-team kernel
(team 'kernel
#:name "Linux-libre kernel team"))
#:name "Linux-libre kernel team"
#:scope (list "gnu/build/linux-modules.scm"
"gnu/packages/linux.scm"
"gnu/tests/linux-modules.scm"
"guix/build/linux-module-build-system.scm"
"guix/build-system/linux-module.scm")))
(define-team core
(team 'core
@ -314,19 +362,35 @@ asdf-build-system."
"gnu/packages/motti.scm"
"guix/build/minetest-build-system.scm")))
(define-team localization
(team 'localization
#:name "Localization (l10n) team"
#:description
"Localization of your system to specific languages."
#:scope (list "gnu/packages/anthy.scm"
"gnu/packages/fcitx5.scm"
"gnu/packages/fcitx.scm"
"gnu/packages/fonts.scm"
"gnu/packages/ibus.scm")))
(define-team translations
(team 'translations
#:name "Translations"))
#:name "Translations"
#:scope (list "etc/news.scm"
(make-regexp "^po/"))))
(define-team installer
(team 'installer
#:name "Installer script and system installer"
#:scope
(list (make-regexp "^guix/installer(\\.scm$|/)"))))
#:scope (list (make-regexp "^gnu/installer(\\.scm$|/)"))))
(define-team home
(team 'home
#:name "Team for \"Guix Home\""))
#:name "Team for \"Guix Home\""
#:scope (list (make-regexp "^(gnu|guix/scripts)/home(\\.scm$|/)")
"tests/guix-home.sh"
"tests/home-import.scm"
"tests/home-services.scm")))
(define-team mentors
(team 'mentors
@ -339,7 +403,8 @@ asdf-build-system."
#:name "Mozilla"
#:description
"Taking care about Icecat and Icedove, built from Mozilla Firefox
and Thunderbird."))
and Thunderbird."
#:scope (list "gnu/packages/gnuzilla.scm")))
(define-team racket
(team 'racket
@ -347,13 +412,18 @@ and Thunderbird."))
#:description
"The Racket language and Racket-based languages, Racket packages,
Racket's variant of Chez Scheme, and development of a Racket build system and
importer."))
importer."
#:scope (list "gnu/packages/chez.scm"
"gnu/packages/racket.scm")))
(define-team reproduciblebuilds
(team 'reproduciblebuilds
#:name "Reproducible Builds team"
#:description
"Reproducible Builds tooling and issues that affect any guix packages."
#:scope (list "gnu/packages/diffoscope.scm")))
(define-member (person "Thiago Jung Bauermann"
"bauermann@kolabnow.com")
embedded-bootstrap translations)
(define-member (person "Eric Bavier"
"bavier@posteo.net")
science)
@ -374,6 +444,10 @@ importer."))
"andreas@enge.fr")
science)
(define-member (person "Tobias Geerinckx-Rice"
"me@tobias.gr")
core kernel mentors)
(define-member (person "Björn Höfling"
"bjoern.hoefling@bjoernhoefling.de")
java)
@ -434,6 +508,26 @@ importer."))
"dev@jpoiret.xyz")
core installer)
(define-member (person "("
"paren@disroot.org")
home mentors)
(define-member (person "Simon Tournier"
"zimon.toutoune@gmail.com")
julia core mentors)
(define-member (person "Raghav Gururajan"
"rg@raghavgururajan.name")
mentors)
(define-member (person "宋文武"
"iyzsong@envs.net")
games localization)
(define-member (person "Vagrant Cascadian"
"vagrant@reproducible-builds.org")
reproduciblebuilds)
(define (find-team name)
(or (hash-ref %teams (string->symbol name))
@ -476,14 +570,16 @@ TEAMS when a patch is received by Debbugs."
prefix
(person-name member)
(person-email member)))
(team-members team)))
(sort
(team-members team)
(lambda (m1 m2) (string<? (person-name m1) (person-name m2))))))
(define (list-teams)
"Print all teams, their scope and their members."
(define port* (current-output-port))
(define width* (%text-width))
(hash-for-each
(lambda (key team)
(for-each
(lambda (team)
(format port*
"\
id: ~a
@ -504,7 +600,11 @@ description: ~a
(scope (format #f "scope: ~{~s ~}~%" scope))))
(list-members team port* "+ ")
(newline))
%teams))
(sort
(hash-map->list (lambda (key value) value) %teams)
(lambda (team1 team2)
(string<? (symbol->string (team-id team1))
(symbol->string (team-id team2)))))))
(define (diff-revisions rev-start rev-end)
@ -532,14 +632,38 @@ and REV-END, two git revision strings."
(const 0))
files))
(define (git-patch->commit-id file)
"Parse the commit ID from the first line of FILE, a patch produced with git."
(call-with-input-file file
(lambda (port)
(let ((m (string-match "^From ([0-9a-f]{40})" (read-line port))))
(unless m
(error "invalid patch file:" file))
(match:substring m 1)))))
(define (git-patch->revisions file)
"Return the start and end revisions of FILE, a patch file produced with git."
(let* ((rev-end (git-patch->commit-id file))
(rev-start (string-append rev-end "^")))
(list rev-start rev-end)))
(define (main . args)
(match args
(("cc" . team-names)
(apply cc (map find-team team-names)))
(("cc-members" patch-file)
(unless (file-exists? patch-file)
(error "patch file does not exist:" patch-file))
(apply main "cc-members" (git-patch->revisions patch-file)))
(("cc-members" rev-start rev-end)
(apply cc (find-team-by-scope
(diff-revisions rev-start rev-end))))
(("get-maintainer" patch-file)
(apply main "list-members"
(map (compose symbol->string team-id)
(find-team-by-scope (apply diff-revisions
(git-patch->revisions patch-file))))))
(("list-teams" . args)
(list-teams))
(("list-members" . team-names)
@ -549,6 +673,18 @@ and REV-END, two git revision strings."
team-names))
(anything
(format (current-error-port)
"Usage: etc/teams.scm <command> [<args>]~%"))))
"Usage: etc/teams.scm <command> [<args>]
Commands:
cc <team-name>
get git send-email flags for cc-ing <team-name>
cc-members <start> <end> | patch
cc teams related to files changed between revisions or in a patch file
list-teams
list teams and their members
list-members <team-name>
list members belonging to <team-name>
get-maintainer <patch>
compatibility mode with Linux get_maintainer.pl~%"))))
(apply main (cdr (command-line)))

View File

@ -322,26 +322,22 @@ instead~%")))
(force %bootloaders))
(leave (G_ "~a: no such bootloader~%") name)))
(define (efi-bootloader-profile files bootloader-package hooks)
"Creates a profile with BOOTLOADER-PACKAGE and a directory collection/ with
links to additional FILES from the store. This collection is meant to be used
by the bootloader installer.
(define (efi-bootloader-profile packages files hooks)
"Creates a profile from the lists of PACKAGES and FILES from the store.
This profile is meant to be used by the bootloader-installer.
FILES is a list of file or directory names from the store, which will be
symlinked into the collection/ directory. If a directory name ends with '/',
then the directory content instead of the directory itself will be symlinked
into the collection/ directory.
symlinked into the profile. If a directory name ends with '/', then the
directory content instead of the directory itself will be symlinked into the
profile.
FILES may contain file like objects produced by functions like plain-file,
FILES may contain file like objects produced by procedures like plain-file,
local-file, etc., or package contents produced with file-append.
HOOKS lists additional hook functions to modify the profile."
(define (bootloader-collection manifest)
(define (efi-bootloader-profile-hook manifest)
(define build
(with-imported-modules '((guix build utils)
(ice-9 ftw)
(srfi srfi-1)
(srfi srfi-26))
(with-imported-modules '((guix build utils))
#~(begin
(use-modules ((guix build utils)
#:select (mkdir-p strip-store-file-name))
@ -365,8 +361,7 @@ HOOKS lists additional hook functions to modify the profile."
(define (name-is-store-entry? name)
"Return #t if NAME is a direct store entry and nothing inside."
(not (string-index (strip-store-file-name name) #\/)))
(let* ((collection (string-append #$output "/collection"))
(files '#$files)
(let* ((files '#$files)
(directories (filter name-ends-with-/? files))
(names-from-directories
(append-map (lambda (directory)
@ -374,11 +369,11 @@ HOOKS lists additional hook functions to modify the profile."
directories))
(names (append names-from-directories
(remove name-ends-with-/? files))))
(mkdir-p collection)
(mkdir-p #$output)
(if (every file-exists? names)
(begin
(for-each (lambda (name)
(symlink-to name collection
(symlink-to name #$output
(if (name-is-store-entry? name)
strip-store-file-name
basename)))
@ -386,57 +381,63 @@ HOOKS lists additional hook functions to modify the profile."
#t)
#f)))))
(gexp->derivation "bootloader-collection"
(gexp->derivation "efi-bootloader-profile"
build
#:local-build? #t
#:substitutable? #f
#:properties
`((type . profile-hook)
(hook . bootloader-collection))))
(hook . efi-bootloader-profile-hook))))
(profile (content (packages->manifest (list bootloader-package)))
(name "bootloader-profile")
(hooks (append (list bootloader-collection) hooks))
(profile (content (packages->manifest packages))
(name "efi-bootloader-profile")
(hooks (cons efi-bootloader-profile-hook hooks))
(locales? #f)
(allow-collisions? #f)
(relative-symlinks? #f)))
(define* (efi-bootloader-chain files
final-bootloader
(define* (efi-bootloader-chain final-bootloader
#:key
(packages '())
(files '())
(hooks '())
installer)
"Define a bootloader chain with FINAL-BOOTLOADER as the final bootloader and
certain directories and files from the store given in the list of FILES.
installer
disk-image-installer)
"Define a chain of bootloaders with the FINAL-BOOTLOADER, optional PACKAGES,
and optional directories and files from the store given in the list of FILES.
FILES may contain file like objects produced by functions like plain-file,
local-file, etc., or package contents produced with file-append. They will be
collected inside a directory collection/ inside a generated bootloader profile,
which will be passed to the INSTALLER.
The package of the FINAL-BOOTLOADER and all PACKAGES and FILES will be placed
in an efi-bootloader-profile, which will be passed to the INSTALLER.
FILES may contain file-like objects produced by procedures like plain-file,
local-file, etc., or package contents produced with file-append.
If a directory name in FILES ends with '/', then the directory content instead
of the directory itself will be symlinked into the collection/ directory.
of the directory itself will be symlinked into the efi-bootloader-profile.
The procedures in the HOOKS list can be used to further modify the bootloader
profile. It is possible to pass a single function instead of a list.
If the INSTALLER argument is used, then this function will be called to install
the bootloader. Otherwise the installer of the FINAL-BOOTLOADER will be called."
(let* ((final-installer (or installer
(bootloader-installer final-bootloader)))
(profile (efi-bootloader-profile files
(bootloader-package final-bootloader)
(if (list? hooks)
hooks
(list hooks)))))
(bootloader
(inherit final-bootloader)
(package profile)
(installer
#~(lambda (bootloader target mount-point)
(#$final-installer bootloader target mount-point)
(copy-recursively
(string-append bootloader "/collection")
(string-append mount-point target)
#:follow-symlinks? #t
#:log (%make-void-port "w")))))))
If the INSTALLER argument is used, then this gexp procedure will be called to
install the efi-bootloader-profile. Otherwise the installer of the
FINAL-BOOTLOADER will be called.
If the DISK-IMAGE-INSTALLER is used, then this gexp procedure will be called
to install the efi-bootloader-profile into a disk image. Otherwise the
disk-image-installer of the FINAL-BOOTLOADER will be called."
(bootloader
(inherit final-bootloader)
(name "efi-bootloader-chain")
(package
(efi-bootloader-profile (cons (bootloader-package final-bootloader)
packages)
files
(if (list? hooks)
hooks
(list hooks))))
(installer
(or installer
(bootloader-installer final-bootloader)))
(disk-image-installer
(or disk-image-installer
(bootloader-disk-image-installer final-bootloader)))))

View File

@ -53,13 +53,14 @@
grub-theme-gfxmode
install-grub-efi-removable
install-grub-efi-netboot
make-grub-efi-netboot-installer
grub-bootloader
grub-efi-bootloader
grub-efi-removable-bootloader
grub-efi32-bootloader
grub-efi-netboot-bootloader
grub-efi-netboot-removable-bootloader
grub-mkrescue-bootloader
grub-minimal-bootloader
@ -353,7 +354,7 @@ code."
((or #f (? string?))
#~(format #f "search --file --set ~a" #$file)))))
(define* (grub-configuration-file config entries
(define* (make-grub-configuration grub config entries
#:key
(locale #f)
(system (%current-system))
@ -391,7 +392,7 @@ when booting a root file system on a Btrfs subvolume."
;; DEVICE-MOUNT-POINT is not "/", meaning that the store is on a
;; separate partition.
;; When BTRFS-SUBVOLUME-FILE-NAME is defined, prepend it the linux and
;; When STORE-DIRECTORY-PREFIX is defined, prepend it the linux and
;; initrd paths, to allow booting from a Btrfs subvolume.
#~(format port "menuentry ~s {
~a
@ -453,9 +454,7 @@ menuentry ~s {
(define locale-config
(let* ((entry (first all-entries))
(device (menu-entry-device entry))
(mount-point (menu-entry-device-mount-point entry))
(bootloader (bootloader-configuration-bootloader config))
(grub (bootloader-package bootloader)))
(mount-point (menu-entry-device-mount-point entry)))
#~(let ((locale #$(and locale
(locale-definition-source
(locale-name->definition locale))))
@ -481,8 +480,6 @@ set lang=~a~%"
(define keyboard-layout-config
(let* ((layout (bootloader-configuration-keyboard-layout config))
(grub (bootloader-package
(bootloader-configuration-bootloader config)))
(keymap* (and layout
(keyboard-layout-file layout #:grub grub)))
(entry (first all-entries))
@ -533,6 +530,16 @@ fi~%"))))
#:options '(#:local-build? #t
#:substitutable? #f)))
(define (grub-configuration-file config . args)
(let* ((bootloader (bootloader-configuration-bootloader config))
(grub (bootloader-package bootloader)))
(apply make-grub-configuration grub config args)))
(define (grub-efi-configuration-file . args)
(apply make-grub-configuration grub-efi args))
(define grub-cfg "/boot/grub/grub.cfg")
;;;
@ -674,42 +681,31 @@ fi~%"))))
((target-arm?) "--target=arm-efi"))
"--efi-directory" target-esp)))))
(define (install-grub-efi-netboot subdir)
"Define a grub-efi-netboot bootloader installer for installation in SUBDIR,
which is usually efi/Guix or efi/boot."
(let* ((system (string-split (nix-system->gnu-triplet
(or (%current-target-system)
(%current-system)))
#\-))
(arch (first system))
(boot-efi-link (match system
;; These are the supportend systems and the names
;; defined by the UEFI standard for removable media.
(("i686" _ ...) "/bootia32.efi")
(("x86_64" _ ...) "/bootx64.efi")
(("arm" _ ...) "/bootarm.efi")
(("aarch64" _ ...) "/bootaa64.efi")
(("riscv" _ ...) "/bootriscv32.efi")
(("riscv64" _ ...) "/bootriscv64.efi")
;; Other systems are not supported, although defined.
;; (("riscv128" _ ...) "/bootriscv128.efi")
;; (("ia64" _ ...) "/bootia64.efi")
((_ ...) #f)))
(core-efi (string-append
;; This is the arch dependent file name of GRUB, e.g.
;; i368-efi/core.efi or arm64-efi/core.efi.
(match arch
("i686" "i386")
("aarch64" "arm64")
("riscv" "riscv32")
(_ arch))
"-efi/core.efi")))
(with-imported-modules
'((guix build union))
#~(lambda (bootloader target mount-point)
"Install the BOOTLOADER, which must be the package grub, as e.g.
bootx64.efi or bootaa64.efi into SUBDIR, which is usually efi/Guix or efi/boot,
below the directory TARGET for the system whose root is mounted at MOUNT-POINT.
(define* (make-grub-efi-netboot-installer grub-efi grub-cfg subdir)
"Make a bootloader-installer for a grub-efi-netboot bootloader, which expects
its files in SUBDIR and its configuration file in GRUB-CFG.
As a grub-efi-netboot package is already pre-installed by 'grub-mknetdir', the
installer basically copies all files from the bootloader-package (or profile)
into the bootloader-target directory.
Additionally for network booting over TFTP, two relative symlinks to the store
and to the GRUB-CFG file are necessary. Due to this a TFTP root directory must
not be located on a FAT file-system.
If the bootloader-target does not support symlinks, then it is assumed to be a
kind of EFI System Partition (ESP). In this case an intermediate configuration
file is created with the help of GRUB-EFI to load the GRUB-CFG.
The installer is usable for any efi-bootloader-chain, which prepares the
bootloader-profile in a way ready for copying.
The installer does not manipulate the system's 'UEFI Boot Manager'.
The returned installer accepts the BOOTLOADER, TARGET and MOUNT-POINT
arguments. Its job is to copy the BOOTLOADER, which must be a pre-installed
grub-efi-netboot package with a SUBDIR like efi/boot or efi/Guix, below the
directory TARGET for the system whose root is mounted at MOUNT-POINT.
MOUNT-POINT is the last argument in 'guix system init /etc/config.scm mnt/point'
or '/' for other 'guix system' commands.
@ -719,17 +715,19 @@ bootloader-configuration in:
(operating-system
(bootloader (bootloader-configuration
(targets '(\"/boot\"))
(targets '(\"/boot/efi\"))
))
)
TARGET is required to be an absolute directory name, usually mounted via NFS,
and finally needs to be provided by a TFTP server as the TFTP root directory.
and finally needs to be provided by a TFTP server as
the TFTP root directory.
Usually the installer will be used to prepare network booting over TFTP. Then
GRUB will load tftp://server/SUBDIR/grub.cfg and this file will instruct it to
load more files from the store like tftp://server/gnu/store/-linux/Image.
To make this possible two symlinks will be created. The first symlink points
To make this possible two symlinks are created. The first symlink points
relatively form MOUNT-POINT/TARGET/SUBDIR/grub.cfg to
MOUNT-POINT/boot/grub/grub.cfg, and the second symlink points relatively from
MOUNT-POINT/TARGET/%store-prefix to MOUNT-POINT/%store-prefix.
@ -739,34 +737,80 @@ paths on the TFTP server side are unknown.
It is also important to note that both symlinks will point outside the TFTP root
directory and that the TARGET/%store-prefix symlink makes the whole store
accessible via TFTP. Possibly the TFTP server must be configured
to allow accesses outside its TFTP root directory. This may need to be
considered for security aspects."
(use-modules ((guix build union) #:select (symlink-relative)))
(let* ((net-dir (string-append mount-point target "/"))
(sub-dir (string-append net-dir #$subdir "/"))
(store (string-append mount-point (%store-prefix)))
(store-link (string-append net-dir (%store-prefix)))
(grub-cfg (string-append mount-point "/boot/grub/grub.cfg"))
(grub-cfg-link (string-append sub-dir (basename grub-cfg)))
(boot-efi-link (string-append sub-dir #$boot-efi-link)))
;; Prepare the symlink to the store.
(mkdir-p (dirname store-link))
(false-if-exception (delete-file store-link))
(symlink-relative store store-link)
;; Prepare the symlink to the grub.cfg, which points into the store.
(mkdir-p (dirname grub-cfg-link))
(false-if-exception (delete-file grub-cfg-link))
(symlink-relative grub-cfg grub-cfg-link)
;; Install GRUB, which refers to the grub.cfg, with support for
;; encrypted partitions,
(setenv "GRUB_ENABLE_CRYPTODISK" "y")
(invoke/quiet (string-append bootloader "/bin/grub-mknetdir")
(string-append "--net-directory=" net-dir)
(string-append "--subdir=" #$subdir))
;; Prepare the bootloader symlink, which points to core.efi of GRUB.
(false-if-exception (delete-file boot-efi-link))
(symlink #$core-efi boot-efi-link))))))
accessible via TFTP. Possibly the TFTP server must be configured to allow
accesses outside its TFTP root directory. This all may need to be considered
for security aspects. It is advised to disable any TFTP write access!
The installer can also be used to prepare booting from local storage, if the
underlying file-system, like FAT on an EFI System Partition (ESP), does not
support symlinks. In this case the MOUNT-POINT/TARGET/SUBDIR/grub.cfg will be
created with the help of GRUB-EFI to load the /boot/grub/grub.cfg file. A
symlink to the store is not needed in this case."
(with-imported-modules '((guix build union))
#~(lambda (bootloader target mount-point)
;; In context of a disk image creation TARGET will be #f and an
;; installer is expected to do necessary installations on MOUNT-POINT,
;; which will become the root file system. If TARGET is #f, this
;; installer has nothing to do, as it only cares about the EFI System
;; Partition (ESP).
(when target
(use-modules ((guix build union) #:select (symlink-relative))
(ice-9 popen)
(ice-9 rdelim))
(let* ((mount-point/target (string-append mount-point target "/"))
;; When installing Guix, it is common to mount TARGET below
;; MOUNT-POINT rather than the root directory.
(bootloader-target (if (file-exists? mount-point/target)
mount-point/target
target))
(store (string-append mount-point (%store-prefix)))
(store-link (string-append bootloader-target (%store-prefix)))
(grub-cfg (string-append mount-point #$grub-cfg))
(grub-cfg-link (string-append bootloader-target
#$subdir "/"
(basename grub-cfg))))
;; Copy the bootloader into the bootloader-target directory.
;; Should we beforehand recursively delete any existing file?
(copy-recursively bootloader bootloader-target
#:follow-symlinks? #t
#:log (%make-void-port "w"))
;; For TFTP we need to install additional relative symlinks.
;; If we install on an EFI System Partition (ESP) or some other FAT
;; file-system, then symlinks cannot be created and are not needed.
;; Therefore we ignore exceptions when trying.
;; Prepare the symlink to the grub.cfg.
(mkdir-p (dirname grub-cfg-link))
(false-if-exception (delete-file grub-cfg-link))
(if (unspecified?
(false-if-exception (symlink-relative grub-cfg grub-cfg-link)))
;; Symlinks are supported.
(begin
;; Prepare the symlink to the store.
(mkdir-p (dirname store-link))
(false-if-exception (delete-file store-link))
(symlink-relative store store-link))
;; Creating symlinks does not seem to be supported. Probably
;; an ESP is used. Add a script to search and load the actual
;; grub.cfg.
(let* ((probe #$(file-append grub-efi "/sbin/grub-probe"))
(port (open-pipe* OPEN_READ probe "--target=fs_uuid"
grub-cfg))
(search-root
(match (read-line port)
((? eof-object?)
;; There is no UUID available. As a fallback search
;; everywhere for the grub.cfg.
(string-append "search --file --set " #$grub-cfg))
(fs-uuid
;; The UUID to load the grub.cfg from is known.
(string-append "search --fs-uuid --set " fs-uuid))))
(load-grub-cfg (string-append "configfile " #$grub-cfg)))
(close-pipe port)
(with-output-to-file grub-cfg-link
(lambda ()
(display (string-join (list search-root
load-grub-cfg)
"\n")))))))))))
@ -784,7 +828,7 @@ considered for security aspects."
(package grub)
(installer install-grub)
(disk-image-installer install-grub-disk-image)
(configuration-file "/boot/grub/grub.cfg")
(configuration-file grub-cfg)
(configuration-file-generator grub-configuration-file)))
(define grub-minimal-bootloader
@ -794,11 +838,12 @@ considered for security aspects."
(define grub-efi-bootloader
(bootloader
(inherit grub-bootloader)
(name 'grub-efi)
(package grub-efi)
(installer install-grub-efi)
(disk-image-installer #f)
(name 'grub-efi)
(package grub-efi)))
(configuration-file grub-cfg)
(configuration-file-generator grub-configuration-file)))
(define grub-efi-removable-bootloader
(bootloader
@ -813,11 +858,22 @@ considered for security aspects."
(name 'grub-efi32)
(package grub-efi32)))
(define grub-efi-netboot-bootloader
(define (make-grub-efi-netboot-bootloader name subdir)
(bootloader
(inherit grub-efi-bootloader)
(name 'grub-efi-netboot-bootloader)
(installer (install-grub-efi-netboot "efi/Guix"))))
(name name)
(package (make-grub-efi-netboot (symbol->string name) subdir))
(installer (make-grub-efi-netboot-installer grub-efi grub-cfg subdir))
(disk-image-installer #f)
(configuration-file grub-cfg)
(configuration-file-generator grub-efi-configuration-file)))
(define grub-efi-netboot-bootloader
(make-grub-efi-netboot-bootloader 'grub-efi-netboot-bootloader
"efi/Guix"))
(define grub-efi-netboot-removable-bootloader
(make-grub-efi-netboot-bootloader 'grub-efi-netboot-removable-bootloader
"efi/boot"))
(define grub-mkrescue-bootloader
(bootloader

View File

@ -3,6 +3,7 @@
;;; Copyright © 2017, 2019 Mathieu Othacehe <m.othacehe@gmail.com>
;;; Copyright © 2020 Julien Lepiller <julien@lepiller.eu>
;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@ -42,6 +43,7 @@
u-boot-puma-rk3399-bootloader
u-boot-rock64-rk3328-bootloader
u-boot-rockpro64-rk3399-bootloader
u-boot-ts7970-q-2g-1000mhz-c-bootloader
u-boot-wandboard-bootloader))
(define install-u-boot
@ -127,6 +129,12 @@
(define install-pinebook-pro-rk3399-u-boot install-rockpro64-rk3399-u-boot)
(define install-u-boot-ts7970-q-2g-1000mhz-c-u-boot
#~(lambda (bootloader device mount-point)
(let ((u-boot.imx (string-append bootloader "/libexec/u-boot.imx"))
(install-dir (string-append mount-point "/boot")))
(install-file u-boot.imx install-dir))))
;;;
@ -255,3 +263,13 @@
(inherit u-boot-bootloader)
(package u-boot-pinebook-pro-rk3399)
(disk-image-installer install-pinebook-pro-rk3399-u-boot)))
(define u-boot-ts7970-q-2g-1000mhz-c-bootloader
;; This bootloader doesn't really need to be installed, as it is read from
;; an SPI memory chip, not the SD card. It is copied to /boot/u-boot.imx
;; for convenience and should be manually flashed at the U-Boot prompt.
(bootloader
(inherit u-boot-bootloader)
(package u-boot-ts7970-q-2g-1000mhz-c)
(installer install-u-boot-ts7970-q-2g-1000mhz-c-u-boot)
(disk-image-installer #f)))

View File

@ -363,9 +363,14 @@ second element is the name it should appear at, such as:
"Tell the kernel to look for device firmware under DIRECTORY. This
mechanism bypasses udev: it allows Linux to handle firmware loading directly
by itself, without having to resort to a \"user helper\"."
(call-with-output-file "/sys/module/firmware_class/parameters/path"
(lambda (port)
(display directory port))))
;; If the kernel was built without firmware loading support, this file
;; does not exist. Do nothing in that case.
(let ((firmware-path "/sys/module/firmware_class/parameters/path"))
(when (file-exists? firmware-path)
(call-with-output-file firmware-path
(lambda (port)
(display directory port))))))
(define (activate-ptrace-attach)
"Allow users to PTRACE_ATTACH their own processes.

View File

@ -899,6 +899,10 @@ caught and lead to a warning and #f as the result."
(format (current-error-port)
"warning: failed to read from device '~a'~%" device)
#f)
((= EMEDIUMTYPE errno) ;inaccessible, like DRBD secondaries
(format (current-error-port)
"warning: failed to open device '~a'~%" device)
#f)
(else
(apply throw args))))))))
@ -1123,7 +1127,7 @@ corresponds to the symbols listed in FLAGS."
(('read-only rest ...)
(logior MS_RDONLY (loop rest)))
(('bind-mount rest ...)
(logior MS_BIND (loop rest)))
(logior MS_REC (logior MS_BIND (loop rest))))
(('no-suid rest ...)
(logior MS_NOSUID (loop rest)))
(('no-dev rest ...)
@ -1132,6 +1136,8 @@ corresponds to the symbols listed in FLAGS."
(logior MS_NOEXEC (loop rest)))
(('no-atime rest ...)
(logior MS_NOATIME (loop rest)))
(('no-diratime rest ...)
(logior MS_NODIRATIME (loop rest)))
(('strict-atime rest ...)
(logior MS_STRICTATIME (loop rest)))
(('lazy-time rest ...)

View File

@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2020, 2021 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2020-2022 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
;;;
;;; This file is part of GNU Guix.
@ -127,6 +127,9 @@ set."
(define (translated? file-name)
"Return true if a translator is installed on FILE-NAME."
;; On GNU/Hurd, 'getxattr' in glibc opens the file without O_NOTRANS, and
;; then, for "gnu.translator", it calls 'file_get_translator', resulting in
;; EOPNOTSUPP (conversely, 'showtrans' opens the file with O_NOTRANS).
(if (string-contains %host-type "linux-gnu")
(passive-translator-xattr? file-name)
(passive-translator-installed? file-name)))
@ -191,7 +194,7 @@ set."
("proc" ("/hurd/procfs" "--stat-mode=444"))))
(define devices
'(("dev/full" ("/hurd/null" "--full") #o666)
`(("dev/full" ("/hurd/null" "--full") #o666)
("dev/null" ("/hurd/null") #o666)
("dev/random" ("/hurd/random" "--seed-file" "/var/lib/random-seed")
#o644)
@ -210,31 +213,34 @@ set."
;; 'fd_to_filename' in libc expects it.
("dev/fd" ("/hurd/magic" "--directory" "fd") #o555)
("dev/tty1" ("/hurd/term" "/dev/tty1" "hurdio" "/dev/vcs/1/console")
#o666)
("dev/tty2" ("/hurd/term" "/dev/tty2" "hurdio" "/dev/vcs/2/console")
#o666)
("dev/tty3" ("/hurd/term" "/dev/tty3" "hurdio" "/dev/vcs/3/console")
#o666)
;; Create a number of ttys; syslogd writes to tty12 by default.
;; FIXME: Creating /dev/tty12 leads the console client to switch to
;; tty12 when syslogd starts, which is confusing for users. Thus, do
;; not create tty12.
,@(map (lambda (n)
(let ((n (number->string n)))
`(,(string-append "dev/tty" n)
("/hurd/term" ,(string-append "/dev/tty" n)
"hurdio" ,(string-append "/dev/vcs/" n "/console"))
#o666)))
(iota 11 1))
("dev/ptyp0" ("/hurd/term" "/dev/ptyp0" "pty-master" "/dev/ttyp0")
#o666)
("dev/ptyp1" ("/hurd/term" "/dev/ptyp1" "pty-master" "/dev/ttyp1")
#o666)
("dev/ptyp2" ("/hurd/term" "/dev/ptyp2" "pty-master" "/dev/ttyp2")
#o666)
,@(append-map (lambda (n)
(let ((n (number->string n)))
`((,(string-append "dev/ptyp" n)
("/hurd/term" ,(string-append "/dev/ptyp" n)
"pty-master" ,(string-append "/dev/ttyp" n))
#o666)
("dev/ttyp0" ("/hurd/term" "/dev/ttyp0" "pty-slave" "/dev/ptyp0")
#o666)
("dev/ttyp1" ("/hurd/term" "/dev/ttyp1" "pty-slave" "/dev/ptyp1")
#o666)
("dev/ttyp2" ("/hurd/term" "/dev/ttyp2" "pty-slave" "/dev/ptyp2")
#o666)))
(,(string-append "dev/ttyp" n)
("/hurd/term" ,(string-append "/dev/ttyp" n)
"pty-slave" ,(string-append "/dev/ptyp" n))
#o666))))
(iota 10 0))))
(for-each scope-set-translator servers)
(mkdir* "dev/vcs/1")
(mkdir* "dev/vcs/2")
(mkdir* "dev/vcs/2")
(rename-file (scope "dev/console") (scope "dev/console-"))
(for-each scope-set-translator devices)

View File

@ -111,7 +111,10 @@ turn doesn't take any constant overhead into account, force a 1-MiB minimum."
(if (eq? size 'guess)
(estimate-partition-size root)
size))
(if (member 'esp flags) (list "-S" "1024") '()))
;; u-boot in particular needs the formatted block
;; size and the physical block size to be equal.
;; TODO: What about 4k blocks?
(if (member 'esp flags) (list "-S" "512") '()))
(for-each (lambda (file)
(unless (member file '("." ".."))
(invoke "mcopy" "-bsp" "-i" target

View File

@ -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 © 2013-2020, 2022 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.
@ -262,12 +282,31 @@ disk."
(mount "/.rw-store" (%store-directory) "" MS_MOVE)
(rmdir "/.rw-store")))
(define (umount* directory)
"Unmount DIRECTORY, but retry a few times upon EBUSY."
(let loop ((attempts 5))
(catch 'system-error
(lambda ()
(umount directory))
(lambda args
(if (and (= EBUSY (system-error-errno args))
(> attempts 0))
(begin
(sleep 1)
(loop (- attempts 1)))
(apply throw args))))))
(define (unmount-cow-store target backing-directory)
"Unmount copy-on-write store."
(let ((tmp-dir "/remove"))
(mkdir-p tmp-dir)
(mount (%store-directory) tmp-dir "" MS_MOVE)
(umount tmp-dir)
;; We might get EBUSY at this point, possibly because of lingering
;; processes with open file descriptors. Use 'umount*' to retry upon
;; EBUSY, leaving a bit of time. See <https://issues.guix.gnu.org/59884>.
(umount* tmp-dir)
(rmdir tmp-dir)
(delete-file-recursively
(string-append target backing-directory))))

View File

@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2014, 2016, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2014, 2016, 2018, 2019, 2022 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
;;; Copyright © 2018 Danny Milosavljevic <dannym@scratchpost.org>
;;;
@ -28,6 +28,7 @@
#:use-module (rnrs io ports)
#:use-module (rnrs bytevectors)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-9 gnu)
#:use-module (srfi srfi-11)
#:use-module (srfi srfi-26)
#:use-module (ice-9 ftw)
@ -50,6 +51,17 @@
load-linux-module*
load-linux-modules-from-directory
pci-devices
pci-device?
pci-device-vendor
pci-device-id
pci-device-class
pci-device-module-alias
storage-pci-device?
network-pci-device?
display-pci-device?
load-pci-device-database
current-module-debugging-port
device-module-aliases
@ -429,6 +441,127 @@ key such as 'MAJOR or 'DEVTYPE and each cdr is the corresponding value."
(line
(loop (cons (key=value->pair line) result))))))
;; PCI device known to the Linux kernel.
(define-immutable-record-type <pci-device>
(pci-device vendor device class module-alias)
pci-device?
(vendor pci-device-vendor) ;integer
(device pci-device-id) ;integer
(class pci-device-class) ;integer
(module-alias pci-device-module-alias)) ;string | #f
(define (pci-device-class-predicate mask bits)
(lambda (device)
"Return true if DEVICE has the chosen class."
(= (logand mask (pci-device-class device)) bits)))
(define storage-pci-device? ;"Mass storage controller" class
(pci-device-class-predicate #xff0000 #x010000))
(define network-pci-device? ;"Network controller" class
(pci-device-class-predicate #xff0000 #x020000))
(define display-pci-device? ;"Display controller" class
(pci-device-class-predicate #xff0000 #x030000))
(define (pci-devices)
"Return the list of PCI devices of the system (<pci-device> records)."
(define (read-hex port)
(let ((line (read-line port)))
(and (string? line)
(string-prefix? "0x" line)
(string->number (string-drop line 2) 16))))
(filter-map (lambda (directory)
(define properties
(call-with-input-file (string-append directory "/uevent")
read-uevent))
(define vendor
(call-with-input-file (string-append directory "/vendor")
read-hex))
(define device
(call-with-input-file (string-append directory "/device")
read-hex))
(define class
(call-with-input-file (string-append directory "/class")
read-hex))
(pci-device vendor device class
(assq-ref properties 'MODALIAS)))
(find-files "/sys/bus/pci/devices"
#:stat lstat)))
(define (read-pci-device-database port)
"Parse the 'pci.ids' database that ships with the pciutils package and is
maintained at <https://pci-ids.ucw.cz/>."
(define (comment? str)
(string-prefix? "#" (string-trim str)))
(define (blank? str)
(string-null? (string-trim-both str)))
(define (device? str)
(eqv? #\tab (string-ref str 0)))
(define (subvendor? str)
(string-prefix? "\t\t" str))
(define (class? str)
(string-prefix? "C " str))
(define (parse-id-line str)
(let* ((str (string-trim-both str))
(space (string-index str char-set:whitespace)))
(values (string->number (string-take str space) 16)
(string-trim (string-drop str (+ 1 space))))))
(define (finish vendor vendor-id devices table)
(fold (lambda (device table)
(match device
((device-id . name)
(vhash-consv (logior (ash vendor-id 16) device-id)
(cons vendor name)
table))))
table
devices))
(let loop ((table vlist-null)
(vendor-id #f)
(vendor #f)
(devices '()))
(match (read-line port)
((? eof-object?)
(let ((table (if (and vendor vendor-id)
(finish vendor vendor-id devices table)
table)))
(lambda (vendor device)
(match (vhash-assv (logior (ash vendor 16) device) table)
(#f
(values #f #f))
((_ . (vendor . name))
(values vendor name))))))
((? comment?)
(loop table vendor-id vendor devices))
((? blank?)
(loop table vendor-id vendor devices))
((? subvendor?) ;currently ignored
(loop table vendor-id vendor devices))
((? class?) ;currently ignored
(loop table vendor-id vendor devices))
((? device? line)
(let-values (((id name) (parse-id-line line)))
(loop table vendor-id vendor
(if (and vendor-id vendor) ;class or device?
(alist-cons id name devices)
devices))))
(line
(let ((table (if (and vendor vendor-id)
(finish vendor vendor-id devices table)
table)))
(let-values (((vendor-id vendor) (parse-id-line line)))
(loop table vendor-id vendor '())))))))
(define (load-pci-device-database file)
"Read the 'pci.ids' database at FILE (get it from the pciutils package or
from <https://pci-ids.ucw.cz/>) and return a lookup procedure that takes a PCI
vendor ID and a device ID (two integers) and returns the vendor name and
device name as two values."
(let ((port (open-file file "r0")))
(call-with-gzip-input-port port
read-pci-device-database)))
(define (device-module-aliases device)
"Return the list of module aliases required by DEVICE, a /dev file name, as
in this example:

View File

@ -22,18 +22,19 @@
#:use-module (srfi srfi-9)
#:use-module (srfi srfi-26)
#:use-module (srfi srfi-64)
#:use-module (srfi srfi-71)
#:use-module (rnrs io ports)
#:use-module (ice-9 match)
#:use-module (ice-9 popen)
#:use-module (ice-9 regex)
#:export (marionette?
marionette-pid
make-marionette
marionette-eval
wait-for-file
wait-for-tcp-port
wait-for-unix-socket
marionette-control
marionette-screen-text
wait-for-screen-text
%qwerty-us-keystrokes
marionette-type
@ -312,40 +313,61 @@ Monitor\")."
(define* (marionette-screen-text marionette #:key (ocr "ocrad"))
"Take a screenshot of MARIONETTE, perform optical character
recognition (OCR), and return the text read from the screen as a string. Do
this by invoking OCR, which should be the file name of GNU Ocrad's
@command{ocrad} or Tesseract OCR's @command{tesseract} command."
recognition (OCR), and return the text read from the screen as a string, along
the screen dump image used. Do this by invoking OCR, which should be the file
name of GNU Ocrad's@command{ocrad} or Tesseract OCR's @command{tesseract}
command. The screen dump image returned as the second value should be deleted
if it is not needed."
(define image (string-append (tmpnam) ".ppm"))
;; Use the QEMU Monitor to save an image of the screen to the host.
(marionette-control (string-append "screendump " image) marionette)
;; Process it via the OCR.
(cond
((string-contains ocr "ocrad")
(invoke-ocrad-ocr image #:ocrad ocr))
(values (invoke-ocrad-ocr image #:ocrad ocr) image))
((string-contains ocr "tesseract")
(invoke-tesseract-ocr image #:tesseract ocr))
(values (invoke-tesseract-ocr image #:tesseract ocr) image))
(else (error "unsupported ocr command"))))
(define* (wait-for-screen-text marionette predicate
#:key
(ocr "ocrad")
(timeout 30))
(timeout 30)
pre-action
post-action)
"Wait for TIMEOUT seconds or until the screen text on MARIONETTE matches
PREDICATE, whichever comes first. Raise an error when TIMEOUT is exceeded."
PREDICATE, whichever comes first. Raise an error when TIMEOUT is exceeded.
The error contains the recognized text along the preserved file name of the
screen dump, which is relative to the current working directory. If
PRE-ACTION is provided, it should be a thunk to call before each OCR attempt.
Likewise for POST-ACTION, except it runs at the end of a successful OCR."
(define start
(car (gettimeofday)))
(define end
(+ start timeout))
(let loop ((last-text #f))
(let loop ((last-text #f)
(last-screendump #f))
(if (> (car (gettimeofday)) end)
(error "'wait-for-screen-text' timeout" 'ocr-text: last-text)
(let ((text (marionette-screen-text marionette #:ocr ocr)))
(or (predicate text)
(begin
(sleep 1)
(loop text)))))))
(let ((screendump-backup (string-drop last-screendump 5)))
;; Move the file from /tmp/fileXXXXXX.pmm to the current working
;; directory, so that it is preserved in the test derivation output.
(copy-file last-screendump screendump-backup)
(delete-file last-screendump)
(error "'wait-for-screen-text' timeout"
'ocr-text: last-text
'screendump: screendump-backup))
(let* ((_ (and (procedure? pre-action) (pre-action)))
(text screendump (marionette-screen-text marionette #:ocr ocr))
(_ (and (procedure? post-action) (post-action)))
(result (predicate text)))
(cond (result
(delete-file screendump)
result)
(else
(sleep 1)
(loop text screendump)))))))
(define %qwerty-us-keystrokes
;; Maps "special" characters to their keystrokes.
@ -367,8 +389,10 @@ PREDICATE, whichever comes first. Raise an error when TIMEOUT is exceeded."
(#\> . "shift-dot")
(#\. . "dot")
(#\, . "comma")
(#\: . "shift-semicolon")
(#\; . "semicolon")
(#\' . "apostrophe")
(#\! . "shift-1")
(#\" . "shift-apostrophe")
(#\` . "grave_accent")
(#\bs . "backspace")

View File

@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012-2021 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2012-2022 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2017, 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2018, 2019 Clément Lassieur <clement@lassieur.org>
;;; Copyright © 2020 Julien Lepiller <julien@lepiller.eu>
@ -25,7 +25,6 @@
#:use-module (guix config)
#:autoload (guix describe) (package-channels)
#:use-module (guix store)
#:use-module (guix grafts)
#:use-module (guix profiles)
#:use-module (guix packages)
#:autoload (guix transformations) (tunable-package? tuned-package)
@ -38,6 +37,7 @@
#:use-module ((guix licenses)
#:select (gpl3+ license? license-name))
#:use-module ((guix utils) #:select (%current-system))
#:use-module ((guix scripts system) #:select (read-operating-system))
#:use-module ((guix scripts pack)
#:select (self-contained-tarball))
#:use-module (gnu bootloader)
@ -251,7 +251,7 @@ otherwise use the IMAGE name."
(drv (run-with-store store
(mbegin %store-monad
(set-guile-for-build (default-guile))
(lower-object (system-image image))))))
(lower-object (system-image image) system)))))
(parameterize ((%graft? #f))
(derivation->job name drv))))

View File

@ -1,6 +1,7 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2021 Andrew Tropin <andrew@trop.in>
;;; Copyright © 2021-2023 Andrew Tropin <andrew@trop.in>
;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
;;; Copyright © 2022-2023 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@ -33,6 +34,7 @@
#:use-module (guix i18n)
#:use-module (guix modules)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-9)
#:use-module (ice-9 match)
#:use-module (ice-9 vlist)
@ -47,6 +49,10 @@
home-run-on-change-service-type
home-provenance-service-type
literal-string
literal-string?
literal-string-value
environment-variable-shell-definitions
home-files-directory
xdg-configuration-files-directory
@ -171,32 +177,52 @@ packages, configuration files, activation script, and so on.")))
configuration files that the user has declared in their
@code{home-environment} record.")))
;; Representation of a literal string.
(define-record-type <literal-string>
(literal-string str)
literal-string?
(str literal-string-value))
(define (environment-variable-shell-definitions variables)
"Return a gexp that evaluates to a list of POSIX shell statements defining
VARIABLES, a list of environment variable name/value pairs. The returned code
ensures variable values are properly quoted."
#~(let ((shell-quote
(lambda (value)
;; Double-quote VALUE, leaving dollar sign as is.
(let ((quoted (list->string
(string-fold-right
#~(let* ((quote-string
(lambda (value quoted-chars)
(list->string (string-fold-right
(lambda (chr lst)
(case chr
((#\" #\\)
(append (list chr #\\) lst))
(else (cons chr lst))))
(if (memq chr quoted-chars)
(append (list #\\ chr) lst)
(cons chr lst)))
'()
value))))
(string-append "\"" quoted "\"")))))
(shell-double-quote
(lambda (value)
;; Double-quote VALUE, leaving dollar sign as is.
(string-append "\"" (quote-string value '(#\" #\\))
"\"")))
(shell-single-quote
(lambda (value)
;; Single-quote VALUE to enter a literal string.
(string-append "'" (quote-string value '(#\'))
"'"))))
(string-append
#$@(map (match-lambda
((key . #f)
"")
((key . #t)
#~(string-append "export " #$key "\n"))
((key . value)
((key . (or (? string? value)
(? file-like? value)
(? gexp? value)))
#~(string-append "export " #$key "="
(shell-quote #$value) "\n")))
(shell-double-quote #$value)
"\n"))
((key . (? literal-string? value))
#~(string-append "export " #$key "="
(shell-single-quote
#$(literal-string-value value))
"\n")))
variables))))
(define (environment-variables->setup-environment-script vars)
@ -313,7 +339,7 @@ directory containing FILES."
(extend append)
(default-value '())
(description "Files that will be put in
@file{~~/.guix-home/files}, and further processed during activation.")))
@file{~/.guix-home/files}, and further processed during activation.")))
(define xdg-configuration-files-directory ".config")
@ -334,7 +360,7 @@ directory containing FILES."
(extend append)
(default-value '())
(description "Files that will be put in
@file{~~/.guix-home/files/.config}, and further processed during activation.")))
@file{~/.guix-home/files/.config}, and further processed during activation.")))
(define xdg-data-files-directory ".local/share")
@ -355,7 +381,7 @@ directory containing FILES."
(extend append)
(default-value '())
(description "Files that will be put in
@file{~~/.guix-home/files/.local/share}, and further processed during
@file{~/.guix-home/files/.local/share}, and further processed during
activation.")))

View File

@ -1,5 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2022 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2022 ( <paren@disroot.org>
;;;
;;; This file is part of GNU Guix.
;;;
@ -20,6 +21,7 @@
#:use-module (gnu home services)
#:use-module (gnu home services shepherd)
#:use-module (gnu services configuration)
#:autoload (gnu packages glib) (dbus)
#:autoload (gnu packages xdisorg) (redshift)
#:use-module (guix records)
#:use-module (guix gexp)
@ -27,8 +29,10 @@
#:use-module (ice-9 match)
#:export (home-redshift-configuration
home-redshift-configuration?
home-redshift-service-type
home-redshift-service-type))
home-dbus-configuration
home-dbus-service-type))
;;;
@ -161,7 +165,8 @@ format."))
(start #~(make-forkexec-constructor
(list #$(file-append redshift "/bin/redshift")
"-c" #$config-file)))
(stop #~(make-kill-destructor)))))
(stop #~(make-kill-destructor))
(actions (list (shepherd-configuration-action config-file))))))
(define home-redshift-service-type
(service-type
@ -172,3 +177,52 @@ format."))
(description
"Run Redshift, a program that adjusts the color temperature of display
according to time of day.")))
;;;
;;; D-Bus.
;;;
(define-record-type* <home-dbus-configuration>
home-dbus-configuration make-home-dbus-configuration
home-dbus-configuration?
(dbus home-dbus-dbus ;file-like
(default dbus)))
(define (home-dbus-shepherd-services config)
(list (shepherd-service
(documentation "Run the D-Bus daemon in session-specific mode.")
(provision '(dbus))
(start #~(make-forkexec-constructor
(list #$(file-append (home-dbus-dbus config)
"/bin/dbus-daemon")
"--nofork" "--session"
(format #f "--address=unix:path=~a/bus"
(or (getenv "XDG_RUNTIME_DIR")
(format #f "/run/user/~a"
(getuid)))))
#:environment-variables
(cons "DBUS_VERBOSE=1"
(default-environment-variables))
#:log-file
(format #f "~a/dbus.log"
(or (getenv "XDG_LOG_HOME")
(format #f "~a/.local/var/log"
(getenv "HOME"))))))
(stop #~(make-kill-destructor)))))
(define (home-dbus-environment-variables config)
'(("DBUS_SESSION_BUS_ADDRESS"
. "unix:path=${XDG_RUNTIME_DIR:-/run/user/$UID}/bus")))
(define home-dbus-service-type
(service-type
(name 'home-dbus)
(extensions
(list (service-extension home-shepherd-service-type
home-dbus-shepherd-services)
(service-extension home-environment-variables-service-type
home-dbus-environment-variables)))
(default-value (home-dbus-configuration))
(description
"Run the session-specific D-Bus inter-process message bus.")))

View File

@ -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,45 +55,59 @@
;;
;;; 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
(@@ (gnu services mcron) shepherd-schedule-action))
(define home-mcron-shepherd-services
(match-lambda
(($ <home-mcron-configuration> mcron '()) ; no jobs to run
'())
(($ <home-mcron-configuration> mcron jobs)
(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 rdelim)
(ice-9 match)
,@%default-modules))
(start #~(make-forkexec-constructor
(list #$(file-append mcron "/bin/mcron") #$@files)
#:log-file (string-append
(or (getenv "XDG_LOG_HOME")
(format #f "~a/.local/var/log"
(getenv "HOME")))
"/mcron.log")))
(stop #~(make-kill-destructor))
(actions
(list (shepherd-schedule-action mcron files)))))))))
(define (home-mcron-shepherd-services config)
(match-record config <home-mcron-configuration>
(mcron jobs log? log-format)
(if (null? jobs)
'() ;no jobs to run
(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 rdelim)
(ice-9 match)
,@%default-modules))
(start #~(make-forkexec-constructor
(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"
(getenv "HOME")))
"/mcron.log")))
(stop #~(make-kill-destructor))
(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

View File

@ -0,0 +1,145 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2022 ( <paren@disroot.org>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify
;;; it under the terms of the GNU General Public License as published by
;;; the Free Software Foundation, either version 3 of the License, or
;;; (at your option) any later version.
;;;
;;; GNU Guix is distributed in the hope that it will be useful,
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
(define-module (gnu home services pm)
#:use-module (guix gexp)
#:use-module (guix packages)
#:use-module (guix records)
#:use-module (gnu home services)
#:use-module (gnu home services shepherd)
#:use-module (gnu packages monitoring)
#:use-module (gnu services shepherd)
#:export (home-batsignal-configuration
home-batsignal-service-type))
;;;
;;; batsignal
;;;
;;; Daemon for running commands and displaying notifications on
;;; battery events.
;;;
(define-record-type* <home-batsignal-configuration>
home-batsignal-configuration make-home-batsignal-configuration
home-batsignal-configuration?
(warning-level batsignal-warning-level ;integer
(default 15))
(warning-message batsignal-warning-message ;string | #f
(default #f))
(critical-level batsignal-critical-level ;integer
(default 5))
(critical-message batsignal-critical-message ;string | #f
(default #f))
(danger-level batsignal-danger-level ;integer
(default 2))
(danger-command batsignal-danger-command ;file-like | string | #f
(default #f))
(full-level batsignal-full-level ;integer | #f
(default #f))
(full-message batsignal-full-message ;string | #f
(default #f))
(batteries batsignal-batteries ;list of string
(default '()))
(poll-delay batsignal-poll-delay ;integer
(default 60))
(icon batsignal-icon ;file-like | #f
(default #f))
(notifications? batsignal-notifications? ;boolean
(default #t))
(notifications-expire? batsignal-notifications-expire? ;boolean
(default #f))
(notification-command batsignal-notification-command ;string | #f
(default #f))
(ignore-missing? batsignal-ignore-missing? ;boolean
(default #f)))
(define (home-batsignal-shepherd-services config)
(let ((warning-level (batsignal-warning-level config))
(warning-message (batsignal-warning-message config))
(critical-level (batsignal-critical-level config))
(critical-message (batsignal-critical-message config))
(danger-level (batsignal-danger-level config))
(danger-command (batsignal-danger-command config))
(full-level (batsignal-full-level config))
(full-message (batsignal-full-message config))
(batteries (batsignal-batteries config))
(poll-delay (batsignal-poll-delay config))
(icon (batsignal-icon config))
(notifications? (batsignal-notifications? config))
(notifications-expire? (batsignal-notifications-expire? config))
(notification-command (batsignal-notification-command config))
(ignore-missing? (batsignal-ignore-missing? config)))
(list (shepherd-service
(provision '(batsignal))
(documentation "Run the batsignal battery-watching daemon.")
(start #~(make-forkexec-constructor
(append (list #$(file-append batsignal "/bin/batsignal")
"-w" (number->string #$warning-level)
"-c" (number->string #$critical-level)
"-d" (number->string #$danger-level)
"-m" (number->string #$poll-delay))
(if #$warning-message
(list "-W" #$warning-message)
(list))
(if #$critical-message
(list "-C" #$critical-message)
(list))
(if #$danger-command
(list "-D" #$danger-command)
(list))
(if #$full-level
(list "-f" (number->string #$full-level))
(list))
(if #$full-message
(list "-F" #$full-message)
(list))
(if (null? (list #$@batteries))
(list)
(list "-n" (string-join (list #$@batteries) ",")))
(if #$icon
(list "-I" #$icon)
(list))
(if #$notifications?
(list)
(list "-N"))
(if #$notifications-expire?
(list "-e")
(list))
(if #$notification-command
(list "-M" #$notification-command)
(list))
(if #$ignore-missing?
(list "-i")
(list)))
#:log-file (string-append
(or (getenv "XDG_LOG_HOME")
(format #f "~a/.local/var/log"
(getenv "HOME")))
"/batsignal.log")))
(stop #~(make-kill-destructor))))))
(define home-batsignal-service-type
(service-type
(name 'home-batsignal)
(extensions
(list (service-extension home-shepherd-service-type
home-batsignal-shepherd-services)))
(default-value (home-batsignal-configuration))
(description
"Run batsignal, a battery watching and notification daemon.")))

View File

@ -19,12 +19,14 @@
(define-module (gnu home services shells)
#:use-module (gnu services configuration)
#:autoload (gnu system shadow) (%default-bashrc)
#:use-module (gnu home services utils)
#:use-module (gnu home services)
#:use-module (gnu packages shells)
#:use-module (gnu packages bash)
#:use-module (guix gexp)
#:use-module (guix packages)
#:use-module (guix records)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-26)
#:use-module (ice-9 match)
@ -369,43 +371,6 @@ Used for executing user's commands at the exit of login shell. It
won't be read in some cases (if the shell terminates by exec'ing
another process for example)."))
;; TODO: Use value from (gnu system shadow)
(define guix-bashrc
"\
# Bash initialization for interactive non-login shells and
# for remote shells (info \"(bash) Bash Startup Files\").
# Export 'SHELL' to child processes. Programs such as 'screen'
# honor it and otherwise use /bin/sh.
export SHELL
if [[ $- != *i* ]]
then
# We are being invoked from a non-interactive shell. If this
# is an SSH session (as in \"ssh host command\"), source
# /etc/profile so we get PATH and other essential variables.
[[ -n \"$SSH_CLIENT\" ]] && source /etc/profile
# Don't do anything else.
return
fi
# Source the system-wide file.
if [[ -e /etc/bashrc ]]; then
source /etc/bashrc
fi
# Adjust the prompt depending on whether we're in 'guix environment'.
if [ -n \"$GUIX_ENVIRONMENT\" ]
then
PS1='\\u@\\h \\w [env]\\$ '
else
PS1='\\u@\\h \\w\\$ '
fi
alias ls='ls -p --color=auto'
alias ll='ls -l'
alias grep='grep --color=auto'\n")
(define (add-bash-configuration config)
(define (filter-fields field)
(filter-configuration-fields home-bash-configuration-fields
@ -442,13 +407,23 @@ if [ -f ~/.profile ]; then source ~/.profile; fi
# Honor per-interactive-shell startup file
if [ -f ~/.bashrc ]; then source ~/.bashrc; fi
"
;; The host distro might provide a bad 'PS1' default--e.g., not taking
;; $GUIX_ENVIRONMENT into account. Provide a good default here when
;; asked to. The default can be overridden below via
;; 'environment-variables'.
(if (home-bash-configuration-guix-defaults? config)
"PS1='\\u@\\h \\w${GUIX_ENVIRONMENT:+ [env]}\\$ '\n"
"")
(serialize-field 'bash-profile)
(serialize-field 'environment-variables)))
,@(list (file-if-not-empty
'bashrc
(if (home-bash-configuration-guix-defaults? config)
(list (serialize-field 'aliases) guix-bashrc)
(list (serialize-field 'aliases)
(plain-file-content %default-bashrc))
(list (serialize-field 'aliases))))
(file-if-not-empty 'bash-logout)))))
@ -479,31 +454,30 @@ with text blocks from other extensions and the base service.")
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
bash-profile bashrc bash-logout)
(home-bash-configuration
(inherit original-config)
(environment-variables
(append environment-variables
(append-map
home-bash-extension-environment-variables extension-configs)))
(aliases
(append aliases
(append-map
home-bash-extension-aliases extension-configs)))
(bash-profile
(append bash-profile
(append-map
home-bash-extension-bash-profile extension-configs)))
(bashrc
(append bashrc
(append-map
home-bash-extension-bashrc extension-configs)))
(bash-logout
(append bash-logout
(append-map
home-bash-extension-bash-logout extension-configs)))))))
(match-record original-config <home-bash-configuration>
(environment-variables aliases bash-profile bashrc bash-logout)
(home-bash-configuration
(inherit original-config)
(environment-variables
(append environment-variables
(append-map
home-bash-extension-environment-variables extension-configs)))
(aliases
(append aliases
(append-map
home-bash-extension-aliases extension-configs)))
(bash-profile
(append bash-profile
(append-map
home-bash-extension-bash-profile extension-configs)))
(bashrc
(append bashrc
(append-map
home-bash-extension-bashrc extension-configs)))
(bash-logout
(append bash-logout
(append-map
home-bash-extension-bash-logout extension-configs))))))
(define home-bash-service-type
(service-type (name 'home-bash)

View File

@ -45,7 +45,8 @@
shepherd-service-auto-start?
shepherd-service-modules
shepherd-action))
shepherd-action
shepherd-configuration-action))
(define-record-type* <home-shepherd-configuration>
home-shepherd-configuration make-home-shepherd-configuration

View File

@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2021 Andrew Tropin <andrew@trop.in>
;;; Copyright © 2021, 2022 Andrew Tropin <andrew@trop.in>
;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
;;;
;;; This file is part of GNU Guix.
@ -35,10 +35,24 @@
#:export (home-xdg-base-directories-service-type
home-xdg-base-directories-configuration
home-xdg-base-directories-configuration?
home-xdg-base-directories-configuration-cache-home
home-xdg-base-directories-configuration-config-home
home-xdg-base-directories-configuration-data-home
home-xdg-base-directories-configuration-state-home
home-xdg-base-directories-configuration-log-home
home-xdg-base-directories-configuration-runtime-dir
home-xdg-user-directories-service-type
home-xdg-user-directories-configuration
home-xdg-user-directories-configuration?
home-xdg-user-directories-configuration-desktop
home-xdg-user-directories-configuration-documents
home-xdg-user-directories-configuration-download
home-xdg-user-directories-configuration-music
home-xdg-user-directories-configuration-pictures
home-xdg-user-directories-configuration-publicshare
home-xdg-user-directories-configuration-templates
home-xdg-user-directories-configuration-videos
xdg-desktop-action
xdg-desktop-entry
@ -106,22 +120,25 @@ services more consistent."))
home-xdg-base-directories-configuration-fields))
(define (ensure-xdg-base-dirs-on-activation config)
#~(map (lambda (xdg-base-dir-variable)
((@ (guix build utils) mkdir-p)
(getenv
xdg-base-dir-variable)))
'#$(filter-map
(lambda (field)
(let ((variable
(string-append
"XDG_"
(object->snake-case-string
(configuration-field-name field) 'upper))))
;; XDG_RUNTIME_DIR shouldn't be created during activation
;; and will be provided by elogind or other service.
(and (not (string=? "XDG_RUNTIME_DIR" variable))
variable)))
home-xdg-base-directories-configuration-fields)))
(with-imported-modules '((guix build utils))
#~(begin
(use-modules (guix build utils))
(map (lambda (xdg-base-dir-variable)
(mkdir-p
(getenv
xdg-base-dir-variable)))
'#$(filter-map
(lambda (field)
(let ((variable
(string-append
"XDG_"
(object->snake-case-string
(configuration-field-name field) 'upper))))
;; XDG_RUNTIME_DIR shouldn't be created during activation
;; and will be provided by elogind or other service.
(and (not (string=? "XDG_RUNTIME_DIR" variable))
variable)))
home-xdg-base-directories-configuration-fields)))))
(define (last-extension-or-cfg config extensions)
"Picks configuration value from last provided extension. If there
@ -231,6 +248,8 @@ pre-populated content.")
home-activation-service-type
home-xdg-user-directories-activation-service)))
(default-value (home-xdg-user-directories-configuration))
(compose identity)
(extend last-extension-or-cfg)
(description "Configure XDG user directories. To
disable a directory, point it to the $HOME.")))
@ -383,25 +402,25 @@ configuration."
(define (serialize-alist config)
(generic-serialize-alist append format-config config))
(define (serialize-xdg-desktop-action action)
(match action
(($ <xdg-desktop-action> action name config)
`(,(format #f "[Desktop Action ~a]\n"
(string-capitalize (maybe-object->string action)))
,(format #f "Name=~a\n" name)
,@(serialize-alist config)))))
(define (serialize-xdg-desktop-action desktop-action)
(match-record desktop-action <xdg-desktop-action>
(action name config)
`(,(format #f "[Desktop Action ~a]\n"
(string-capitalize (maybe-object->string action)))
,(format #f "Name=~a\n" name)
,@(serialize-alist config))))
(match entry
(($ <xdg-desktop-entry> file name type config actions)
(list (if (string-suffix? file ".desktop")
file
(string-append file ".desktop"))
`("[Desktop Entry]\n"
,(format #f "Name=~a\n" name)
,(format #f "Type=~a\n"
(string-capitalize (symbol->string type)))
,@(serialize-alist config)
,@(append-map serialize-xdg-desktop-action actions))))))
(match-record entry <xdg-desktop-entry>
(file name type config actions)
(list (if (string-suffix? file ".desktop")
file
(string-append file ".desktop"))
`("[Desktop Entry]\n"
,(format #f "Name=~a\n" name)
,(format #f "Type=~a\n"
(string-capitalize (symbol->string type)))
,@(serialize-alist config)
,@(append-map serialize-xdg-desktop-action actions)))))
(define-configuration home-xdg-mime-applications-configuration
(added

View File

@ -27,6 +27,8 @@
#:use-module (guix utils)
#:use-module (guix ui)
#:use-module ((guix self) #:select (make-config.scm))
#:use-module (guix describe)
#:use-module (guix channels)
#:use-module (guix packages)
#:use-module (guix git-download)
#:use-module (gnu installer utils)
@ -46,11 +48,13 @@
#:use-module (gnu packages nano)
#:use-module (gnu packages ncurses)
#:use-module (gnu packages package-management)
#:use-module (gnu packages pciutils)
#:use-module (gnu packages tls)
#:use-module (gnu packages xorg)
#:use-module (gnu system locale)
#:use-module (ice-9 match)
#:use-module (srfi srfi-1)
#:use-module (web uri)
#:export (installer-program))
(define module-to-import?
@ -226,7 +230,9 @@ selected keymap."
(id 'welcome)
(compute (lambda _
((installer-welcome-page current-installer)
#$(local-file "installer/aux-files/logo.txt")))))
#$(local-file "installer/aux-files/logo.txt")
#:pci-database
#$(file-append pciutils "/share/hwdata/pci.ids.gz")))))
;; Ask the user to select a timezone under glibc format.
(installer-step
@ -312,6 +318,25 @@ selected keymap."
((installer-final-page current-installer)
result prev-steps))))))))
(define (provenance-sexp)
"Return an sexp representing the currently-used channels, for logging
purposes."
(match (match (current-channels)
(() (and=> (repository->guix-channel (dirname (current-filename)))
list))
(channels channels))
(#f
(warning (G_ "cannot determine installer provenance~%"))
'unknown)
((channels ...)
(map (lambda (channel)
(let* ((uri (string->uri (channel-url channel)))
(url (if (or (not uri) (eq? 'file (uri-scheme uri)))
"local checkout"
(channel-url channel))))
`(channel ,(channel-name channel) ,url ,(channel-commit channel))))
channels))))
(define (installer-program)
"Return a file-like object that runs the given INSTALLER."
(define init-gettext
@ -358,7 +383,9 @@ selected keymap."
(with-extensions (list guile-gcrypt guile-newt
guile-parted guile-bytestructures
guile-json-3 guile-git guile-webutils
guix gnutls)
guile-gnutls
guile-zlib ;for (gnu build linux-modules)
(current-guix))
(with-imported-modules `(,@(source-module-closure
`(,@modules
(gnu services herd)
@ -389,6 +416,12 @@ selected keymap."
(ice-9 match)
(ice-9 textual-ports))
;; Enable core dump generation.
(setrlimit 'core #f #f)
(call-with-output-file "/proc/sys/kernel/core_pattern"
(lambda (port)
(format port %core-dump)))
;; Initialize gettext support so that installers can use
;; (guix i18n) module.
#$init-gettext
@ -418,6 +451,9 @@ selected keymap."
(define current-installer newt-installer)
(define steps (#$steps current-installer))
(installer-log-line "installer provenance: ~s"
'#$(provenance-sexp))
(dynamic-wind
(installer-init current-installer)
(lambda ()
@ -447,11 +483,21 @@ selected keymap."
key args)
(define dump-dir
(prepare-dump key args #:result %current-result))
(define user-abort?
(match args
(((? user-abort-error? obj)) #t)
(_ #f)))
(define action
((installer-exit-error current-installer)
(get-string-all
(open-input-file
(string-append dump-dir "/installer-backtrace")))))
(if user-abort?
'dump
((installer-exit-error current-installer)
(get-string-all
(open-input-file
(string-append dump-dir
"/installer-backtrace"))))))
(match action
('dump
(let* ((dump-files

View File

@ -28,13 +28,17 @@
#:use-module (web http)
#:use-module (web response)
#:use-module (webutils multipart)
#:export (prepare-dump
#:export (%core-dump
prepare-dump
make-dump
send-dump-report))
;; The installer crash dump type.
(define %dump-type "installer-dump")
;; The core dump file.
(define %core-dump "/tmp/installer-core-dump")
(define (result->list result)
"Return the alist for the given RESULT."
(hash-map->list (lambda (k v)
@ -66,6 +70,10 @@ RESULT is the installer result hash table. Returns the created directory path."
;; syslog
(copy-file "/var/log/messages" "syslog")
;; core dump
(when (file-exists? %core-dump)
(copy-file %core-dump "core-dump"))
;; dmesg
(let ((pipe (open-pipe* OPEN_READ "dmesg")))
(call-with-output-file "dmesg"

View File

@ -1,6 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2018, 2020 Mathieu Othacehe <m.othacehe@gmail.com>
;;; Copyright © 2019, 2020 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2019, 2020, 2022 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@ -114,6 +114,8 @@ it can interact with the rest of the system."
;; Catch SIGINT and kill the container process.
(sigaction SIGINT
(lambda (signum)
;: FIXME: Use of SIGKILL prevents the dynamic-wind exit handler of
;; THUNK to run.
(false-if-exception
(kill pid SIGKILL))))
@ -196,14 +198,16 @@ or #f. Return #t on success and #f on failure."
;; the loaded cow-store locale files will prevent umounting.
(install-locale locale)
;; Save the database, so that it can be restored once the
;; cow-store is umounted.
;; Stop the daemon and save the database, so that it can be
;; restored once the cow-store is umounted.
(stop-service 'guix-daemon)
(copy-file database-file saved-database)
(installer-log-line "mounting copy-on-write store")
(mount-cow-store (%installer-target-dir) backing-directory))
(lambda ()
;; We need to drag the guix-daemon to the container MNT
;; namespace, so that it can operate on the cow-store.
(stop-service 'guix-daemon)
(start-service 'guix-daemon (list (number->string (getpid))))
(setvbuf (current-output-port) 'none)
@ -211,13 +215,27 @@ or #f. Return #t on success and #f on failure."
(setenv "PATH" "/run/current-system/profile/bin/")
(set! ret (run-command install-command)))
(set! ret (run-command install-command #:tty? #t)))
(lambda ()
;; Restart guix-daemon so that it does no keep the MNT namespace
;; Stop guix-daemon so that it does no keep the MNT namespace
;; alive.
(restart-service 'guix-daemon)
(stop-service 'guix-daemon)
;; Restore the database and restart it. As part of restoring the
;; database, remove the WAL and shm files in case they were left
;; behind after guix-daemon was stopped. Failing to do so,
;; sqlite might behave as if transactions that appear in the WAL
;; file were committed. (See <https://www.sqlite.org/wal.html>.)
(installer-log-line "restoring store database from '~a'"
saved-database)
(copy-file saved-database database-file)
(for-each (lambda (suffix)
(false-if-exception
(delete-file (string-append database-file suffix))))
'("-wal" "-shm"))
(start-service 'guix-daemon)
;; Finally umount the cow-store and exit the container.
(installer-log-line "unmounting copy-on-write store")
(unmount-cow-store (%installer-target-dir) backing-directory)
(assert-exit ret))))))))

View File

@ -0,0 +1,90 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2022 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
(define-module (gnu installer hardware)
#:use-module (gnu build linux-modules)
#:use-module (guix i18n)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-71)
#:export (unsupported-pci-device?
pci-device-description))
(define %unsupported-linux-modules
;; List of Linux modules that are useless without non-free firmware.
;;
;; Currently only drivers for PCI devices are listed. USB devices such as
;; "btintel" would require support to list USB devices and read the USB
;; device ID database. Punt for now as this is usually less critical.
;;
;; This list is currently manually maintained based on information on
;; non-free firmware available from
;; <https://packages.debian.org/search?keywords=firmware&searchon=names&suite=stable&section=all>.
'(;; WiFi.
"brcmfmac"
"ipw2100"
"ipw2200"
"iwlwifi"
"mwl8k"
"rtl8188ee"
"rtl818x_pci"
"rtl8192ce"
"rtl8192de"
"rtl8192ee"
;; Ethernet.
"bnx2"
"bnx2x"
"liquidio"
;; Graphics.
"amdgpu"
"radeon"
;; Multimedia.
"ivtv"))
(define unsupported-pci-device?
;; Arrange to load the module alias database only once.
(let ((aliases (delay (known-module-aliases))))
(lambda (device)
"Return true if DEVICE is known to not be supported by free software."
(any (lambda (module)
(member module %unsupported-linux-modules))
(matching-modules (pci-device-module-alias device)
(force aliases))))))
(define (pci-device-description pci-database)
"Return a procedure that, given a PCI device, returns a string describing
it."
(define (with-fallback lookup)
(lambda (vendor-id id)
(let ((vendor name (lookup vendor-id id)))
(values (or vendor (number->string vendor-id 16))
(or name (number->string id 16))))))
(define pci-lookup
(with-fallback (load-pci-device-database pci-database)))
(lambda (device)
(let ((vendor name (pci-lookup (pci-device-vendor device)
(pci-device-id device))))
(if (network-pci-device? device)
;; TRANSLATORS: The two placeholders are the manufacturer
;; and name of a PCI device.
(format #f (G_ "~a ~a (networking device)")
vendor name)
(string-append vendor " " name)))))

View File

@ -62,6 +62,9 @@
(clear-screen))
(define (exit-error error)
;; Newt may be suspended in the context of the "install-system"
;; procedure. Resume it unconditionnally.
(newt-resume)
(newt-set-color COLORSET-ROOT "white" "red")
(define action
(run-textbox-page
@ -113,11 +116,7 @@ report it by email to ~a.") uploaded-name %guix-bug-report-address)
(define command-output "")
(define (line-accumulator line)
(set! command-output
(string-append/shared command-output line "\n")))
(define displayed-command
(string-join
(map (lambda (s) (string-append "\"" s "\"")) args)
" "))
(string-append/shared command-output line)))
(define result (run-external-command-with-line-hooks (list line-accumulator)
args))
(define exit-val (status:exit-val result))
@ -173,8 +172,8 @@ report it by email to ~a.") uploaded-name %guix-bug-report-address)
(define (timezone-page zonetab)
(run-timezone-page zonetab))
(define (welcome-page logo)
(run-welcome-page logo))
(define* (welcome-page logo #:key pci-database)
(run-welcome-page logo #:pci-database pci-database))
(define (menu-page steps)
(run-menu-page steps))

View File

@ -80,16 +80,20 @@ press the button to reboot.")))
(define (run-install-failed-page)
(match (current-clients)
(()
(match (choice-window
(match (ternary-window
(G_ "Installation failed")
(G_ "Resume")
(G_ "Restart the installer")
(G_ "Report the failure")
(G_ "The final system installation step failed. You can resume from \
a specific step, or restart the installer."))
(1 (abort-to-prompt 'installer-step 'abort))
(2
;; Keep going, the installer will be restarted later on.
#t)))
#t)
(3 (raise
(condition
(&user-abort-error))))))
(_
(send-to-clients '(installation-failure))
#t)))

View File

@ -115,6 +115,11 @@ network devices were found. Do you want to continue anyway?"))
(define (wait-service-online)
"Display a newt scale until connman detects an Internet access. Do
FULL-VALUE tentatives, spaced by 1 second."
(define (url-alive? url)
(false-if-exception
(= (response-code (http-request url))
200)))
(define (ci-available?)
(dynamic-wind
(lambda ()
@ -122,10 +127,8 @@ FULL-VALUE tentatives, spaced by 1 second."
(lambda _ #f))
(alarm 3))
(lambda ()
(false-if-exception
(= (response-code
(http-request "https://ci.guix.gnu.org"))
200)))
(or (url-alive? "https://ci.guix.gnu.org")
(url-alive? "https://bordeaux.guix.gnu.org")))
(lambda ()
(alarm 0))))

View File

@ -1,6 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2018 Mathieu Othacehe <m.othacehe@gmail.com>
;;; Copyright © 2019, 2020 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2019, 2020, 2022 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2019 Tobias Geerinckx-Rice <me@tobias.gr>
;;;
;;; This file is part of GNU Guix.
@ -278,12 +278,12 @@ input box, such as FLAG-PASSWORD."
(destroy-form-and-pop form)
input))))))))
(define (run-error-page text title)
"Run a page to inform the user of an error. The page contains the given TEXT
to explain the error and an \"OK\" button to acknowledge the error. The title
of the page is set to TITLE."
(define* (run-error-page text title #:key (width 40))
"Run a page to inform the user of an error. The page is WIDTH column wide
and contains the given TEXT to explain the error and an \"OK\" button to
acknowledge the error. The title of the page is set to TITLE."
(let* ((text-box
(make-reflowed-textbox -1 -1 text 40
(make-reflowed-textbox -1 -1 text width
#:flags FLAG-BORDER))
(grid (make-grid 1 2))
(ok-button (make-button -1 -1 "OK"))

View File

@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2018, 2019 Mathieu Othacehe <m.othacehe@gmail.com>
;;; Copyright © 2018, 2019, 2022 Mathieu Othacehe <m.othacehe@gmail.com>
;;; Copyright © 2019, 2020 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2020 Tobias Geerinckx-Rice <me@tobias.gr>
;;;
@ -92,17 +92,31 @@ disk. The installation device as well as the small devices are filtered.")
(device (car result)))
device))
(define (run-label-confirmation-page callback)
(lambda (item)
(match (current-clients)
(()
(and (run-confirmation-page
(format #f (G_ "This will create a new ~a partition table, \
all data on disk will be lost, are you sure you want to proceed?") item)
(G_ "Format disk?")
#:exit-button-procedure callback)
item))
(_ item))))
(define (run-label-page button-text button-callback)
"Run a page asking the user to select a partition table label."
;; Force the GPT label if UEFI is supported.
(if (efi-installation?)
"gpt"
((run-label-confirmation-page button-callback) "gpt")
(run-listbox-selection-page
#:info-text (G_ "Select a new partition table type. \
Be careful, all data on the disk will be lost.")
#:title (G_ "Partition table")
#:listbox-items '("msdos" "gpt")
#:listbox-item->text identity
#:listbox-callback-procedure
(run-label-confirmation-page button-callback)
#:button-text button-text
#:button-callback-procedure button-callback)))

View File

@ -28,7 +28,7 @@
(match (current-clients)
(()
(case (choice-window
(G_ "Substitute server discovery.")
(G_ "Substitute server discovery")
(G_ "Enable") (G_ "Disable")
(G_ " By turning this option on, you allow Guix to fetch \
substitutes (pre-built binaries) during installation from servers \

View File

@ -1,6 +1,7 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2018 Mathieu Othacehe <m.othacehe@gmail.com>
;;; Copyright © 2020 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2020, 2022 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2022 Florian Pelz <pelzflorian@pelzflorian.de>
;;;
;;; This file is part of GNU Guix.
;;;
@ -17,6 +18,11 @@
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
(define-module (gnu installer newt welcome)
#:use-module ((gnu build linux-modules)
#:select (modules-loaded
pci-devices))
#:use-module (gnu installer dump)
#:use-module (gnu installer hardware)
#:use-module (gnu installer steps)
#:use-module (gnu installer utils)
#:use-module (gnu installer newt page)
@ -26,6 +32,8 @@
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-34)
#:use-module (srfi srfi-35)
#:use-module (srfi srfi-71)
#:use-module (ice-9 format)
#:use-module (ice-9 match)
#:use-module (ice-9 receive)
#:use-module (newt)
@ -117,10 +125,52 @@ we want this page to occupy all the screen space available."
(lambda ()
(destroy-form-and-pop form))))))
(define (run-welcome-page logo)
(define (check-hardware-support pci-database)
"Warn about unsupported devices."
(when (member "uvesafb" (modules-loaded))
(run-error-page (G_ "\
This may be a false alarm, but possibly your graphics hardware does not
work well with only free software. Expect trouble. If after installation,
the system does not boot, perhaps you will need to add nomodeset to the
kernel arguments and need to configure the uvesafb kernel module.")
(G_ "Pre-install warning")))
(let ((devices (pci-devices)))
(match (filter unsupported-pci-device? devices)
(() ;no unsupported device
#t)
(unsupported
(run-error-page (format #f (G_ "\
Devices not supported by free software were found on your computer:
~{ - ~a~%~}
Unfortunately, it means those devices will not be usable.
To address it, we recommend choosing hardware that respects your freedom as a \
user--hardware for which free drivers and firmware exist. See \"Hardware \
Considerations\" in the manual for more information.")
(map (pci-device-description pci-database)
unsupported))
(G_ "Hardware support warning")
#:width 76)))))
(define* (run-welcome-page logo #:key pci-database)
"Run a welcome page with the given textual LOGO displayed at the center of
the page. Ask the user to choose between manual installation, graphical
installation and reboot."
(when (file-exists? %core-dump)
(match (choice-window
(G_ "Previous installation failed")
(G_ "Continue")
(G_ "Report the failure")
(G_ "It seems that the previous installation exited unexpectedly \
and generated a core dump. Do you want to continue or to report the failure \
first?"))
(1 #t)
(2 (raise
(condition
(&user-abort-error))))))
(run-menu-page
(G_ "GNU Guix install")
(G_ "Welcome to GNU Guix system installer!
@ -134,14 +184,16 @@ Documentation is accessible at any time by pressing Ctrl-Alt-F2.")
#:listbox-items
`((,(G_ "Graphical install using a terminal based interface")
.
,(const #t))
,(lambda ()
(check-hardware-support pci-database)))
(,(G_ "Install using the shell based process")
.
,(lambda ()
(check-hardware-support pci-database)
;; Switch to TTY3, where a root shell is available for shell based
;; install. The other root TTY's would have been ok too.
(system* "chvt" "3")
(run-welcome-page logo)))
(run-welcome-page logo #:pci-database pci-database)))
(,(G_ "Reboot")
.
,(lambda ()

View File

@ -319,6 +319,25 @@ PARTED-OBJECT field equals PARTITION, return #f if not found."
partition))
user-partitions))
(define (read-partition-uuid/retry file-name)
"Call READ-PARTITION-UUID with 5 retries spaced by 1 second. This is useful
if the partition table is updated by the kernel at the time this function is
called, causing the underlying /dev to be absent."
(define max-retries 5)
(let loop ((retry max-retries))
(catch #t
(lambda ()
(read-partition-uuid file-name))
(lambda _
(if (> retry 0)
(begin
(sleep 1)
(loop (- retry 1)))
(error
(format #f (G_ "Could not open ~a after ~a retries~%.")
file-name max-retries)))))))
;;
;; Devices
@ -360,12 +379,44 @@ fail. See rereadpt function in wipefs.c of util-linux for an explanation."
(define %min-device-size
(* 2 GIBIBYTE-SIZE)) ;2GiB
(define (mapped-device? device)
"Return #true if DEVICE is a mapped device, false otherwise."
(string-prefix? "/dev/dm-" device))
;; TODO: Use DM_TABLE_DEPS ioctl instead of dmsetup.
(define (mapped-device-parent-partition device)
"Return the parent partition path of the mapped DEVICE."
(let* ((command `("dmsetup" "deps" ,device "-o" "devname"))
(parent #f)
(handler
(lambda (input)
;; We are parsing an output that should look like:
;; 1 dependencies : (sda2)
(let ((result
(string-match "\\(([^\\)]+)\\)"
(get-string-all input))))
(and result
(set! parent
(format #f "/dev/~a"
(match:substring result 1))))))))
(run-external-command-with-handler handler command)
parent))
(define (eligible-devices)
"Return all the available devices except the install device and the devices
which are smaller than %MIN-DEVICE-SIZE."
(define the-installer-root-partition-path
(installer-root-partition-path))
(let ((root (installer-root-partition-path)))
(cond
((mapped-device? root)
;; If the partition is a mapped device (/dev/dm-X), locate the parent
;; partition. It is the case when Ventoy is used to host the
;; installation image.
(let ((parent (mapped-device-parent-partition root)))
(installer-log-line "mapped device ~a -> ~a" parent root)
parent))
(else root))))
(define (small-device? device)
(let ((length (device-length device))
@ -1108,7 +1159,7 @@ Return #t if all the statements are valid."
(need-formatting?
(user-partition-need-formatting? user-partition)))
(or need-formatting?
(read-partition-uuid file-name)
(read-partition-uuid/retry file-name)
(raise
(condition
(&cannot-read-uuid

View File

@ -89,7 +89,7 @@
(partition-page installer-partition-page)
;; procedure void -> void
(services-page installer-services-page)
;; procedure (logo) -> void
;; procedure (logo #:pci-database) -> void
(welcome-page installer-welcome-page)
;; procedure (menu-proc) -> void
(parameters-menu installer-parameters-menu)

View File

@ -159,25 +159,32 @@
(base (if desktop?
'%desktop-services
'%base-services))
(heading (list (vertical-space 1)
(comment (G_ "\
(service-heading (list (vertical-space 1)
(comment (G_ "\
;; Below is the list of system services. To search for available
;; services, run 'guix system search KEYWORD' in a terminal.\n")))))
;; services, run 'guix system search KEYWORD' in a terminal.\n"))))
(package-heading (list (vertical-space 1)
(comment (G_ "\
;; Packages installed system-wide. Users can also install packages
;; under their own account: use 'guix search KEYWORD' to search
;; for packages and 'guix install PACKAGE' to install a package.\n")))))
(if (null? snippets)
`(,@(if (null? packages)
'()
`((packages (append (list ,@packages)
`(,@package-heading
(packages (append (list ,@packages)
%base-packages))))
,@heading
,@service-heading
(services ,base))
`(,@(if (null? packages)
'()
`((packages (append (list ,@packages)
`(,@package-heading
(packages (append (list ,@packages)
%base-packages))))
,@heading
,@service-heading
(services (append (list ,@snippets
,@(if desktop?

View File

@ -28,7 +28,10 @@
#:use-module (srfi srfi-34)
#:use-module (srfi srfi-35)
#:use-module (rnrs io ports)
#:export (<installer-step>
#:export (&user-abort-error
user-abort-error?
<installer-step>
installer-step
make-installer-step
installer-step?
@ -50,6 +53,9 @@
%current-result))
(define-condition-type &user-abort-error &error
user-abort-error?)
;; Hash table storing the step results. Use it only for logging and debug
;; purposes.
(define %current-result (make-hash-table))

View File

@ -1,6 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2018, 2020 Mathieu Othacehe <m.othacehe@gmail.com>
;;; Copyright © 2019, 2020 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2019, 2020, 2022 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@ -20,6 +20,7 @@
(define-module (gnu installer utils)
#:use-module (gnu services herd)
#:use-module (guix utils)
#:use-module ((guix build syscalls) #:select (openpty login-tty))
#:use-module (guix build utils)
#:use-module (guix i18n)
#:use-module (srfi srfi-1)
@ -45,6 +46,7 @@
nearest-exact-integer
read-percentage
run-external-command-with-handler
run-external-command-with-handler/tty
run-external-command-with-line-hooks
run-command
run-command-in-installer
@ -124,26 +126,58 @@ the child process as returned by waitpid."
(close-port input)
(close-pipe dummy-pipe)))
(define (run-external-command-with-line-hooks line-hooks command)
(define (run-external-command-with-handler/tty handler command)
"Run command specified by the list COMMAND in a child operating in a
pseudoterminal with output handler HANDLER. HANDLER is a procedure taking an
input port, to which the command will write its standard output and error.
Returns the integer status value of the child process as returned by waitpid."
(define-values (controller inferior)
(openpty))
(match (primitive-fork)
(0
(catch #t
(lambda ()
(close-fdes controller)
(login-tty inferior)
(apply execlp (car command) command))
(lambda _
(primitive-exit 127))))
(pid
(close-fdes inferior)
(let* ((port (fdopen controller "r0"))
(result (false-if-exception
(handler port))))
(close-port port)
(cdr (waitpid pid))))))
(define* (run-external-command-with-line-hooks line-hooks command
#:key (tty? #false))
"Run command specified by the list COMMAND in a child, processing each
output line with the procedures in LINE-HOOKS. Returns the integer status
value of the child process as returned by waitpid."
output line with the procedures in LINE-HOOKS. If TTY is set to #true, the
COMMAND will be run in a pseudoterminal. Returns the integer status value of
the child process as returned by waitpid."
(define (handler input)
(and
(and=> (get-line input)
;; Lines for progress bars etc. end in \r; treat is as a line ending so
;; those lines are printed right away.
(and=> (read-delimited "\r\n" input 'concat)
(lambda (line)
(if (eof-object? line)
#f
(begin (for-each (lambda (f) (f line))
(append line-hooks
%default-installer-line-hooks))
%default-installer-line-hooks))
#t))))
(handler input)))
(run-external-command-with-handler handler command))
(if tty?
(run-external-command-with-handler/tty handler command)
(run-external-command-with-handler handler command)))
(define* (run-command command)
(define* (run-command command #:key (tty? #f))
"Run COMMAND, a list of strings. Return true if COMMAND exited
successfully, #f otherwise."
successfully, #f otherwise. If TTY is set to #true, the COMMAND will be run
in a pseudoterminal."
(define (pause)
(format #t (G_ "Press Enter to continue.~%"))
(send-to-clients '(pause))
@ -154,8 +188,8 @@ successfully, #f otherwise."
(installer-log-line "running command ~s" command)
(define result (run-external-command-with-line-hooks
(list %display-line-hook)
command))
(list display) command
#:tty? tty?))
(define exit-val (status:exit-val result))
(define term-sig (status:term-sig result))
(define stop-sig (status:stop-sig result))
@ -232,7 +266,10 @@ values."
(or port (%make-void-port "w")))))
(define (%syslog-line-hook line)
(format (syslog-port) "installer[~d]: ~a~%" (getpid) line))
(let ((line (if (string-suffix? "\r" line)
(string-append (string-drop-right line 1) "\n")
line)))
(format (syslog-port) "installer[~d]: ~a" (getpid) line)))
(define-syntax syslog
(lambda (s)
@ -261,11 +298,7 @@ values."
port)))
(define (%installer-log-line-hook line)
(format (installer-log-port) "~a~%" line))
(define (%display-line-hook line)
(display line)
(newline))
(display line (installer-log-port)))
(define %default-installer-line-hooks
(list %syslog-line-hook
@ -277,9 +310,10 @@ values."
(syntax-case s ()
((_ fmt args ...)
(string? (syntax->datum #'fmt))
#'(let ((formatted (format #f fmt args ...)))
(for-each (lambda (f) (f formatted))
%default-installer-line-hooks))))))
(with-syntax ((fmt (string-append (syntax->datum #'fmt) "\n")))
#'(let ((formatted (format #f fmt args ...)))
(for-each (lambda (f) (f formatted))
%default-installer-line-hooks)))))))
;;;

View File

@ -7,7 +7,7 @@
# Copyright © 2016, 2017, 2018 Kei Kebreau <kkebreau@posteo.net>
# Copyright © 2016, 2017 Rene Saavedra <rennes@openmailbox.org>
# Copyright © 2016 Adonay "adfeno" Felipe Nogueira <https://libreplanet.org/wiki/User:Adfeno> <adfeno@openmailbox.org>
# Copyright © 2016, 2017, 2018, 2019, 2020, 2021, 2022 Ricardo Wurmus <rekado@elephly.net>
# Copyright © 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023 Ricardo Wurmus <rekado@elephly.net>
# Copyright © 2016 Ben Woodcroft <donttrustben@gmail.com>
# Copyright © 2016, 2017, 2018, 2019 Alex Vong <alexvong1995@gmail.com>
# Copyright © 2016, 2017, 2018, 2019, 2020, 2021, 2022 Efraim Flashner <efraim@flashner.co.il>
@ -19,7 +19,7 @@
# Copyright © 2018 Amirouche Boubekki <amirouche@hypermove.net>
# Copyright © 2018, 2019, 2020, 2021, 2022 Oleg Pykhalov <go.wigust@gmail.com>
# Copyright © 2018 Stefan Stefanović <stefanx2ovic@gmail.com>
# Copyright © 2018, 2020, 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
# Copyright © 2018, 2020, 2021, 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
# Copyright © 2019, 2020, 2021, 2022 Guillaume Le Vaillant <glv@posteo.net>
# Copyright © 2019, 2020 John Soo <jsoo1@asu.edu>
# Copyright © 2019 Jonathan Brielmaier <jonathan.brielmaier@web.de>
@ -54,6 +54,8 @@
# Copyright © 2022 muradm <mail@muradm.net>
# Copyright © 2022 Hilton Chain <hako@ultrarare.space>
# Copyright © 2022 Alex Griffin <a@ajgrf.com>
# Copyright © 2022 ( <paren@disroot.org>
# Copyright © 2022 jgart <jgart@dismail.de>
#
# This file is part of GNU Guix.
#
@ -89,6 +91,7 @@ GNU_SYSTEM_MODULES = \
%D%/home/services/symlink-manager.scm \
%D%/home/services/fontutils.scm \
%D%/home/services/guix.scm \
%D%/home/services/pm.scm \
%D%/home/services/shells.scm \
%D%/home/services/shepherd.scm \
%D%/home/services/ssh.scm \
@ -113,6 +116,7 @@ GNU_SYSTEM_MODULES = \
%D%/packages/anthy.scm \
%D%/packages/antivirus.scm \
%D%/packages/apl.scm \
%D%/packages/apparmor.scm \
%D%/packages/apr.scm \
%D%/packages/arcan.scm \
%D%/packages/aspell.scm \
@ -310,6 +314,7 @@ GNU_SYSTEM_MODULES = \
%D%/packages/haxe.scm \
%D%/packages/heads.scm \
%D%/packages/hexedit.scm \
%D%/packages/high-availability.scm \
%D%/packages/hugs.scm \
%D%/packages/hunspell.scm \
%D%/packages/hurd.scm \
@ -333,9 +338,11 @@ GNU_SYSTEM_MODULES = \
%D%/packages/iso-codes.scm \
%D%/packages/jami.scm \
%D%/packages/java.scm \
%D%/packages/java-bootstrap.scm \
%D%/packages/java-compression.scm \
%D%/packages/java-graphics.scm \
%D%/packages/java-maths.scm \
%D%/packages/java-xml.scm \
%D%/packages/javascript.scm \
%D%/packages/jemalloc.scm \
%D%/packages/jrnl.scm \
@ -503,6 +510,7 @@ GNU_SYSTEM_MODULES = \
%D%/packages/pure.scm \
%D%/packages/purescript.scm \
%D%/packages/pv.scm \
%D%/packages/pypy.scm \
%D%/packages/python.scm \
%D%/packages/python-build.scm \
%D%/packages/python-check.scm \
@ -576,6 +584,7 @@ GNU_SYSTEM_MODULES = \
%D%/packages/stenography.scm \
%D%/packages/storage.scm \
%D%/packages/suckless.scm \
%D%/packages/sugar.scm \
%D%/packages/swig.scm \
%D%/packages/sync.scm \
%D%/packages/syncthing.scm \
@ -636,6 +645,7 @@ GNU_SYSTEM_MODULES = \
%D%/packages/xorg.scm \
%D%/packages/xfce.scm \
%D%/packages/zig.scm \
%D%/packages/zig-xyz.scm \
%D%/packages/zile.scm \
%D%/packages/zwave.scm \
\
@ -665,6 +675,7 @@ GNU_SYSTEM_MODULES = \
%D%/services/guix.scm \
%D%/services/hurd.scm \
%D%/services/kerberos.scm \
%D%/services/ldap.scm \
%D%/services/lightdm.scm \
%D%/services/linux.scm \
%D%/services/lirc.scm \
@ -693,6 +704,7 @@ GNU_SYSTEM_MODULES = \
%D%/services/sysctl.scm \
%D%/services/telephony.scm \
%D%/services/version-control.scm \
%D%/services/vnc.scm \
%D%/services/vpn.scm \
%D%/services/web.scm \
%D%/services/xorg.scm \
@ -753,6 +765,7 @@ GNU_SYSTEM_MODULES = \
%D%/tests/docker.scm \
%D%/tests/file-sharing.scm \
%D%/tests/ganeti.scm \
%D%/tests/gdm.scm \
%D%/tests/guix.scm \
%D%/tests/monitoring.scm \
%D%/tests/nfs.scm \
@ -774,6 +787,7 @@ GNU_SYSTEM_MODULES = \
%D%/tests/telephony.scm \
%D%/tests/version-control.scm \
%D%/tests/virtualization.scm \
%D%/tests/vnc.scm \
%D%/tests/web.scm
INSTALLER_MODULES = \
@ -781,6 +795,7 @@ INSTALLER_MODULES = \
%D%/installer/connman.scm \
%D%/installer/dump.scm \
%D%/installer/final.scm \
%D%/installer/hardware.scm \
%D%/installer/hostname.scm \
%D%/installer/keymap.scm \
%D%/installer/locale.scm \
@ -923,6 +938,7 @@ dist_patch_DATA = \
%D%/packages/patches/bsd-games-prevent-name-collisions.patch \
%D%/packages/patches/bsd-games-stdio.h.patch \
%D%/packages/patches/beancount-disable-googleapis-fonts.patch \
%D%/packages/patches/bees-beesd-honor-destdir-on-installation.patch \
%D%/packages/patches/beignet-correct-file-names.patch \
%D%/packages/patches/bidiv-update-fribidi.patch \
%D%/packages/patches/binutils-boot-2.20.1a.patch \
@ -949,8 +965,6 @@ dist_patch_DATA = \
%D%/packages/patches/cdrkit-libre-cross-compile.patch \
%D%/packages/patches/cdrtools-3.01-mkisofs-isoinfo.patch \
%D%/packages/patches/ceph-disable-cpu-optimizations.patch \
%D%/packages/patches/ceph-boost-compat.patch \
%D%/packages/patches/ceph-rocksdb-compat.patch \
%D%/packages/patches/chmlib-inttypes.patch \
%D%/packages/patches/cl-asdf-config-directories.patch \
%D%/packages/patches/clamav-config-llvm-libs.patch \
@ -967,6 +981,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 \
@ -993,6 +1008,7 @@ dist_patch_DATA = \
%D%/packages/patches/cpuinfo-system-libraries.patch \
%D%/packages/patches/cpulimit-with-glib-2.32.patch \
%D%/packages/patches/crawl-upgrade-saves.patch \
%D%/packages/patches/crc32c-unbundle-googletest.patch \
%D%/packages/patches/crda-optional-gcrypt.patch \
%D%/packages/patches/clucene-contribs-lib.patch \
%D%/packages/patches/cube-nocheck.patch \
@ -1014,7 +1030,6 @@ dist_patch_DATA = \
%D%/packages/patches/desmume-gcc6-fixes.patch \
%D%/packages/patches/desmume-gcc7-fixes.patch \
%D%/packages/patches/dfu-programmer-fix-libusb.patch \
%D%/packages/patches/diffoscope-fix-llvm-test.patch \
%D%/packages/patches/diffutils-fix-signal-processing.patch \
%D%/packages/patches/dkimproxy-add-ipv6-support.patch \
%D%/packages/patches/docbook-xsl-nonrecursive-string-subst.patch \
@ -1026,9 +1041,6 @@ dist_patch_DATA = \
%D%/packages/patches/dstat-skip-devices-without-io.patch \
%D%/packages/patches/dvd+rw-tools-add-include.patch \
%D%/packages/patches/dynaconf-unvendor-deps.patch \
%D%/packages/patches/ecl-16-format-directive-limit.patch \
%D%/packages/patches/ecl-16-ignore-stderr-write-error.patch \
%D%/packages/patches/ecl-16-libffi.patch \
%D%/packages/patches/efibootmgr-remove-extra-decl.patch \
%D%/packages/patches/efivar-211.patch \
%D%/packages/patches/eigen-fix-strict-aliasing-bug.patch \
@ -1046,8 +1058,8 @@ dist_patch_DATA = \
%D%/packages/patches/emacs-json-reformat-fix-tests.patch \
%D%/packages/patches/emacs-helpful-fix-docstring-test.patch \
%D%/packages/patches/emacs-highlight-stages-add-gexp.patch \
%D%/packages/patches/emacs-libgit-use-system-libgit2.patch \
%D%/packages/patches/emacs-lispy-fix-thread-last-test.patch \
%D%/packages/patches/emacs-native-comp-driver-options.patch \
%D%/packages/patches/emacs-polymode-fix-lexical-variable-error.patch \
%D%/packages/patches/emacs-source-date-epoch.patch \
%D%/packages/patches/emacs-telega-path-placeholder.patch \
@ -1093,12 +1105,14 @@ dist_patch_DATA = \
%D%/packages/patches/firebird-riscv64-support-pt1.patch \
%D%/packages/patches/firebird-riscv64-support-pt2.patch \
%D%/packages/patches/flann-cmake-3.11.patch \
%D%/packages/patches/flashrom-fix-building-on-aarch64.patch \
%D%/packages/patches/flatpak-fix-path.patch \
%D%/packages/patches/flatpak-unset-gdk-pixbuf-for-sandbox.patch \
%D%/packages/patches/fontconfig-cache-ignore-mtime.patch \
%D%/packages/patches/foobillard++-pkg-config.patch \
%D%/packages/patches/foomatic-filters-CVE-2015-8327.patch \
%D%/packages/patches/foomatic-filters-CVE-2015-8560.patch \
%D%/packages/patches/fp16-implicit-double.patch \
%D%/packages/patches/fp16-system-libraries.patch \
%D%/packages/patches/fpc-reproducibility.patch \
%D%/packages/patches/freedink-engine-fix-sdl-hints.patch \
@ -1168,10 +1182,11 @@ dist_patch_DATA = \
%D%/packages/patches/gdm-wayland-session-wrapper-from-env.patch \
%D%/packages/patches/gdm-pass-gdk-pixbuf-loader-env.patch \
%D%/packages/patches/geeqie-clutter.patch \
%D%/packages/patches/gemmi-fix-pegtl-usage.patch \
%D%/packages/patches/gemmi-fix-sajson-types.patch \
%D%/packages/patches/genimage-mke2fs-test.patch \
%D%/packages/patches/geoclue-config.patch \
%D%/packages/patches/gettext-libunicode-update.patch \
%D%/packages/patches/ghc-4.patch \
%D%/packages/patches/ghc-8.0-fall-back-to-madv_dontneed.patch \
%D%/packages/patches/ghc-testsuite-dlopen-pie.patch \
%D%/packages/patches/ghc-testsuite-grep-compat.patch \
@ -1179,7 +1194,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 \
@ -1249,6 +1263,7 @@ dist_patch_DATA = \
%D%/packages/patches/guile-1.8-cpp-4.5.patch \
%D%/packages/patches/guile-2.2-skip-oom-test.patch \
%D%/packages/patches/guile-2.2-skip-so-test.patch \
%D%/packages/patches/guile-cross-compilation.patch \
%D%/packages/patches/guile-default-utf8.patch \
%D%/packages/patches/guile-2.2-default-utf8.patch \
%D%/packages/patches/guile-relocatable.patch \
@ -1256,16 +1271,15 @@ dist_patch_DATA = \
%D%/packages/patches/guile-linux-syscalls.patch \
%D%/packages/patches/guile-3.0-linux-syscalls.patch \
%D%/packages/patches/guile-ac-d-bus-fix-tests.patch \
%D%/packages/patches/guile-cross-compilation.patch \
%D%/packages/patches/guile-fibers-destroy-peer-schedulers.patch \
%D%/packages/patches/guile-fibers-epoll-instance-is-dead.patch \
%D%/packages/patches/guile-fibers-fd-finalizer-leak.patch \
%D%/packages/patches/guile-fibers-wait-for-io-readiness.patch \
%D%/packages/patches/guile-gdbm-ffi-support-gdbm-1.14.patch \
%D%/packages/patches/guile-git-adjust-for-libgit2-1.2.0.patch \
%D%/packages/patches/guile-present-coding.patch \
%D%/packages/patches/guile-rsvg-pkgconfig.patch \
%D%/packages/patches/guile-emacs-fix-configure.patch \
%D%/packages/patches/guile-email-fix-tests.patch \
%D%/packages/patches/gtk2-fix-builder-test.patch \
%D%/packages/patches/gtk2-respect-GUIX_GTK2_PATH.patch \
%D%/packages/patches/gtk2-respect-GUIX_GTK2_IM_MODULE_FILE.patch \
@ -1301,7 +1315,6 @@ dist_patch_DATA = \
%D%/packages/patches/i7z-gcc-10.patch \
%D%/packages/patches/icecat-makeicecat.patch \
%D%/packages/patches/icecat-avoid-bundled-libraries.patch \
%D%/packages/patches/icecat-use-older-reveal-hidden-html.patch \
%D%/packages/patches/icecat-use-system-graphite2+harfbuzz.patch \
%D%/packages/patches/icecat-use-system-media-libs.patch \
%D%/packages/patches/icedtea-7-hotspot-aarch64-use-c++98.patch \
@ -1324,7 +1337,8 @@ dist_patch_DATA = \
%D%/packages/patches/irrlicht-link-against-needed-libs.patch \
%D%/packages/patches/isl-0.11.1-aarch64-support.patch \
%D%/packages/patches/itk-snap-alt-glibc-compat.patch \
%D%/packages/patches/jami-fix-crash-on-block-contact.patch \
%D%/packages/patches/jami-disable-integration-tests.patch \
%D%/packages/patches/jami-libjami-headers-search.patch \
%D%/packages/patches/jamvm-1.5.1-aarch64-support.patch \
%D%/packages/patches/jamvm-1.5.1-armv7-support.patch \
%D%/packages/patches/jamvm-2.0.0-aarch64-support.patch \
@ -1349,8 +1363,7 @@ dist_patch_DATA = \
%D%/packages/patches/json-c-0.13-CVE-2020-12762.patch \
%D%/packages/patches/json-c-0.12-CVE-2020-12762.patch \
%D%/packages/patches/julia-SOURCE_DATE_EPOCH-mtime.patch \
%D%/packages/patches/julia-tracker-16-compat.patch \
%D%/packages/patches/julia-allow-parallel-build.patch \
%D%/packages/patches/libgeotiff-fix-tests-with-proj-9.1.1.patch \
%D%/packages/patches/libobjc2-unbundle-robin-map.patch \
%D%/packages/patches/librime-fix-build-with-gcc10.patch \
%D%/packages/patches/libvirt-add-install-prefix.patch \
@ -1359,6 +1372,8 @@ dist_patch_DATA = \
%D%/packages/patches/lightdm-vncserver-check.patch \
%D%/packages/patches/lightdm-vnc-color-depth.patch \
%D%/packages/patches/localed-xorg-keyboard.patch \
%D%/packages/patches/kcontacts-incorrect-country-name.patch \
%D%/packages/patches/kde-cli-tools-delay-mime-db.patch \
%D%/packages/patches/kdiagram-Fix-missing-link-libraries.patch \
%D%/packages/patches/kiki-level-selection-crash.patch \
%D%/packages/patches/kiki-makefile.patch \
@ -1375,9 +1390,8 @@ dist_patch_DATA = \
%D%/packages/patches/kobodeluxe-manpage-minus-not-hyphen.patch \
%D%/packages/patches/kobodeluxe-midicon-segmentation-fault.patch \
%D%/packages/patches/kobodeluxe-graphics-window-signed-char.patch \
%D%/packages/patches/kodi-increase-test-timeout.patch \
%D%/packages/patches/kodi-set-libcurl-ssl-parameters.patch \
%D%/packages/patches/kodi-skip-test-449.patch \
%D%/packages/patches/kwayland-skip-flaky-test.patch \
%D%/packages/patches/laby-make-install.patch \
%D%/packages/patches/ldns-drill-examples.patch \
%D%/packages/patches/leela-zero-gtest.patch \
@ -1411,6 +1425,7 @@ dist_patch_DATA = \
%D%/packages/patches/libofa-ftbfs-2.diff \
%D%/packages/patches/libotr-test-auth-fix.patch \
%D%/packages/patches/libksieve-Fix-missing-link-libraries.patch \
%D%/packages/patches/libksysguard-qdiriterator-follow-symlinks.patch \
%D%/packages/patches/libmad-armv7-thumb-pt1.patch \
%D%/packages/patches/libmad-armv7-thumb-pt2.patch \
%D%/packages/patches/libmad-length-check.patch \
@ -1435,7 +1450,6 @@ dist_patch_DATA = \
%D%/packages/patches/libtommath-fix-linkage.patch \
%D%/packages/patches/libtool-grep-compat.patch \
%D%/packages/patches/libtool-skip-tests2.patch \
%D%/packages/patches/libunwind-julia-fix-GCC10-fno-common.patch \
%D%/packages/patches/libusb-0.1-disable-tests.patch \
%D%/packages/patches/libusb-for-axoloti.patch \
%D%/packages/patches/libutils-add-includes.patch \
@ -1452,7 +1466,8 @@ dist_patch_DATA = \
%D%/packages/patches/lierolibre-remove-arch-warning.patch \
%D%/packages/patches/lierolibre-try-building-other-arch.patch \
%D%/packages/patches/linbox-fix-pkgconfig.patch \
%D%/packages/patches/linphone-desktop-without-sdk.patch \
%D%/packages/patches/linphone-desktop-without-sdk.patch \
%D%/packages/patches/linux-libre-infodocs-target.patch \
%D%/packages/patches/linux-libre-support-for-Pinebook-Pro.patch \
%D%/packages/patches/linux-pam-no-setfsuid.patch \
%D%/packages/patches/linux-pam-unix_chkpwd.patch \
@ -1480,7 +1495,6 @@ dist_patch_DATA = \
%D%/packages/patches/lua-liblua-so.patch \
%D%/packages/patches/lua-5.4-pkgconfig.patch \
%D%/packages/patches/lua-5.4-liblua-so.patch \
%D%/packages/patches/luajit-no_ldconfig.patch \
%D%/packages/patches/luit-posix.patch \
%D%/packages/patches/lvm2-static-link.patch \
%D%/packages/patches/mailutils-variable-lookup.patch \
@ -1502,6 +1516,7 @@ dist_patch_DATA = \
%D%/packages/patches/libmemcached-build-with-gcc7.patch \
%D%/packages/patches/libmhash-hmac-fix-uaf.patch \
%D%/packages/patches/libsigrokdecode-python3.9-fix.patch \
%D%/packages/patches/memtest86+-build-reproducibly.patch \
%D%/packages/patches/mercurial-hg-extension-path.patch \
%D%/packages/patches/mercurial-openssl-compat.patch \
%D%/packages/patches/mesa-opencl-all-targets.patch \
@ -1509,6 +1524,8 @@ dist_patch_DATA = \
%D%/packages/patches/mhash-keygen-test-segfault.patch \
%D%/packages/patches/mia-fix-boost-headers.patch \
%D%/packages/patches/mia-vtk9.patch \
%D%/packages/patches/mia-vtk92.patch \
%D%/packages/patches/mia-vtk-version.patch \
%D%/packages/patches/mingw-w64-6.0.0-gcc.patch \
%D%/packages/patches/mingw-w64-dlltool-temp-prefix.patch \
%D%/packages/patches/mingw-w64-reproducible-gendef.patch \
@ -1525,12 +1542,12 @@ dist_patch_DATA = \
%D%/packages/patches/monero-use-system-miniupnpc.patch \
%D%/packages/patches/mosaicatcher-unbundle-htslib.patch \
%D%/packages/patches/mrrescue-support-love-11.patch \
%D%/packages/patches/mrustc-riscv64-support.patch \
%D%/packages/patches/mtools-mformat-uninitialized.patch \
%D%/packages/patches/mupen64plus-ui-console-notice.patch \
%D%/packages/patches/mupen64plus-video-z64-glew-correct-path.patch \
%D%/packages/patches/musl-cross-locale.patch \
%D%/packages/patches/mutt-store-references.patch \
%D%/packages/patches/nautilus-extension-search-path.patch \
%D%/packages/patches/ncompress-fix-softlinks.patch \
%D%/packages/patches/ncftp-reproducible.patch \
%D%/packages/patches/netcdf-date-time.patch \
@ -1557,6 +1574,7 @@ dist_patch_DATA = \
%D%/packages/patches/nvi-dbpagesize-binpower.patch \
%D%/packages/patches/nvi-db4.patch \
%D%/packages/patches/nyacc-binary-literals.patch \
%D%/packages/patches/oath-toolkit-xmlsec-compat.patch \
%D%/packages/patches/obs-modules-location.patch \
%D%/packages/patches/ocaml-dose3-add-unix-dependency.patch \
%D%/packages/patches/ocaml-dose3-Fix-for-ocaml-4.06.patch \
@ -1570,6 +1588,7 @@ dist_patch_DATA = \
%D%/packages/patches/onnx-use-system-googletest.patch \
%D%/packages/patches/onnx-shared-libraries.patch \
%D%/packages/patches/onnx-skip-model-downloads.patch \
%D%/packages/patches/openbios-gcc-warnings.patch \
%D%/packages/patches/openboardview-use-system-imgui.patch \
%D%/packages/patches/openboardview-use-system-utf8.patch \
%D%/packages/patches/openbox-python3.patch \
@ -1601,12 +1620,16 @@ dist_patch_DATA = \
%D%/packages/patches/pango-skip-libthai-test.patch \
%D%/packages/patches/password-store-tree-compat.patch \
%D%/packages/patches/plasma-framework-fix-KF5PlasmaMacros.cmake.patch \
%D%/packages/patches/pocketfft-cpp-prefer-preprocessor-if.patch \
%D%/packages/patches/pokerth-boost.patch \
%D%/packages/patches/ppsspp-disable-upgrade-and-gold.patch \
%D%/packages/patches/pthreadpool-system-libraries.patch \
%D%/packages/patches/python-chai-drop-python2.patch \
%D%/packages/patches/python-louvain-fix-test.patch \
%D%/packages/patches/python-random2-getrandbits-test.patch \
%D%/packages/patches/python-poppler-qt5-fix-build.patch \
%D%/packages/patches/python-pypdf-annotate-tests-appropriately.patch \
%D%/packages/patches/python-telingo-fix-comparison.patch \
%D%/packages/patches/python-w3lib-fix-test-failure.patch \
%D%/packages/patches/sdcc-disable-non-free-code.patch \
%D%/packages/patches/sdl-pango-api_additions.patch \
@ -1639,7 +1662,6 @@ dist_patch_DATA = \
%D%/packages/patches/phoronix-test-suite-fsdg.patch \
%D%/packages/patches/php-bug-74093-test.patch \
%D%/packages/patches/php-curl-compat.patch \
%D%/packages/patches/picard-fix-id3-rename-test.patch \
%D%/packages/patches/picprog-non-intel-support.patch \
%D%/packages/patches/pidgin-add-search-path.patch \
%D%/packages/patches/pinball-system-ltdl.patch \
@ -1659,11 +1681,11 @@ dist_patch_DATA = \
%D%/packages/patches/procmail-ambiguous-getline-debian.patch \
%D%/packages/patches/procmail-CVE-2014-3618.patch \
%D%/packages/patches/procmail-CVE-2017-16844.patch \
%D%/packages/patches/protobuf-fix-build-on-32bit.patch \
%D%/packages/patches/psm-arch.patch \
%D%/packages/patches/psm-disable-memory-stats.patch \
%D%/packages/patches/psm-ldflags.patch \
%D%/packages/patches/psm-repro.patch \
%D%/packages/patches/public-inbox-fix-spawn-test.patch \
%D%/packages/patches/pulseaudio-fix-mult-test.patch \
%D%/packages/patches/pulseaudio-longer-test-timeout.patch \
%D%/packages/patches/pulseview-qt515-compat.patch \
@ -1685,7 +1707,7 @@ dist_patch_DATA = \
%D%/packages/patches/python-3-search-paths.patch \
%D%/packages/patches/python-3-fix-tests.patch \
%D%/packages/patches/python-3-hurd-configure.patch \
%D%/packages/patches/python-apsw-3.39.2.1-test-fix.patch \
%D%/packages/patches/python-afdko-suppress-copyright-test.patch \
%D%/packages/patches/python-aionotify-0.2.0-py3.8.patch \
%D%/packages/patches/python-argcomplete-1.11.1-fish31.patch \
%D%/packages/patches/python-cross-compile.patch \
@ -1695,7 +1717,6 @@ dist_patch_DATA = \
%D%/packages/patches/python-docopt-pytest6-compat.patch \
%D%/packages/patches/python-execnet-read-only-fix.patch \
%D%/packages/patches/python-fixtures-remove-monkeypatch-test.patch \
%D%/packages/patches/python-flask-restful-werkzeug-compat.patch \
%D%/packages/patches/python-ipython-documentation-chars.patch \
%D%/packages/patches/python-ipython-documentation-repro.patch \
%D%/packages/patches/python-keras-integration-test.patch \
@ -1725,8 +1746,6 @@ dist_patch_DATA = \
%D%/packages/patches/python-robotframework-atest.patch \
%D%/packages/patches/python-robotframework-source-date-epoch.patch \
%D%/packages/patches/python-robotframework-sshlibrary-rf5-compat.patch \
%D%/packages/patches/python-seaborn-kde-test.patch \
%D%/packages/patches/python-seaborn-2690.patch \
%D%/packages/patches/python-unittest2-python3-compat.patch \
%D%/packages/patches/python-unittest2-remove-argparse.patch \
%D%/packages/patches/python-versioneer-guix-support.patch \
@ -1747,6 +1766,8 @@ dist_patch_DATA = \
%D%/packages/patches/quagga-reproducible-build.patch \
%D%/packages/patches/quickswitch-fix-dmenu-check.patch \
%D%/packages/patches/qtwayland-gcc-11.patch \
%D%/packages/patches/qtwayland-dont-recreate-callbacks.patch \
%D%/packages/patches/qtwayland-cleanup-callbacks.patch \
%D%/packages/patches/qtwebkit-pbutils-include.patch \
%D%/packages/patches/qtwebkit-fix-building-with-bison-3.7.patch \
%D%/packages/patches/qtwebkit-fix-building-with-python-3.9.patch \
@ -1769,26 +1790,28 @@ dist_patch_DATA = \
%D%/packages/patches/ripperx-missing-file.patch \
%D%/packages/patches/rpcbind-CVE-2017-8779.patch \
%D%/packages/patches/rtags-separate-rct.patch \
%D%/packages/patches/racket-backport-8.6-zuo.patch \
%D%/packages/patches/racket-backport-8.7-pkg-strip.patch \
%D%/packages/patches/racket-chez-scheme-bin-sh.patch \
%D%/packages/patches/racket-rktio-bin-sh.patch \
%D%/packages/patches/racket-zuo-bin-sh.patch \
%D%/packages/patches/remake-impure-dirs.patch \
%D%/packages/patches/restic-0.9.6-fix-tests-for-go1.15.patch \
%D%/packages/patches/retroarch-LIBRETRO_DIRECTORY.patch \
%D%/packages/patches/r-mixedpower-r2power.patch \
%D%/packages/patches/rnp-add-version.cmake.patch \
%D%/packages/patches/rnp-disable-ruby-rnp-tests.patch \
%D%/packages/patches/rnp-unbundle-googletest.patch \
%D%/packages/patches/rocm-comgr-3.1.0-dependencies.patch \
%D%/packages/patches/rocm-opencl-runtime-4.3-noclinfo.patch \
%D%/packages/patches/rocm-opencl-runtime-4.3-noopencl.patch \
%D%/packages/patches/ruby-hydra-minimal-no-byebug.patch \
%D%/packages/patches/rocm-comgr-3.1.0-dependencies.patch \
%D%/packages/patches/rocm-opencl-runtime-4.3-noclinfo.patch \
%D%/packages/patches/rocm-opencl-runtime-4.3-noopencl.patch \
%D%/packages/patches/rottlog-direntry.patch \
%D%/packages/patches/ruby-hydra-minimal-no-byebug.patch \
%D%/packages/patches/ruby-anystyle-data-immutable-install.patch \
%D%/packages/patches/ruby-anystyle-fix-dictionary-populate.patch \
%D%/packages/patches/ruby-latex-decode-fix-test.patch \
%D%/packages/patches/ruby-mustache-1.1.1-fix-race-condition-tests.patch \
%D%/packages/patches/ruby-sanitize-system-libxml.patch \
%D%/packages/patches/rustc-1.54.0-src.patch \
%D%/packages/patches/rust-1.64-fix-riscv64-bootstrap.patch \
%D%/packages/patches/rust-adblock-ignore-live-tests.patch \
%D%/packages/patches/i3status-rust-enable-unstable-features.patch \
%D%/packages/patches/rust-ndarray-remove-blas-src-dep.patch \
@ -1797,8 +1820,8 @@ dist_patch_DATA = \
%D%/packages/patches/rust-nettle-disable-vendor.patch \
%D%/packages/patches/rust-nettle-sys-disable-vendor.patch \
%D%/packages/patches/rust-openssl-sys-no-vendor.patch \
%D%/packages/patches/rust-shell2batch-lint-fix.patch \
%D%/packages/patches/rust-wl-clipboard-rs-newer-wl.patch \
%D%/packages/patches/rw-igraph-0.10.patch \
%D%/packages/patches/sbc-fix-build-non-x86.patch \
%D%/packages/patches/sbcl-aserve-add-HTML-5-elements.patch \
%D%/packages/patches/sbcl-aserve-fix-rfe12668.patch \
@ -1808,8 +1831,6 @@ dist_patch_DATA = \
%D%/packages/patches/scalapack-gcc-10-compilation.patch \
%D%/packages/patches/scheme48-tests.patch \
%D%/packages/patches/scons-test-environment.patch \
%D%/packages/patches/scotch-build-parallelism.patch \
%D%/packages/patches/scotch-integer-declarations.patch \
%D%/packages/patches/screen-hurd-path-max.patch \
%D%/packages/patches/sdl-libx11-1.6.patch \
%D%/packages/patches/seed-webkit.patch \
@ -1833,9 +1854,10 @@ dist_patch_DATA = \
%D%/packages/patches/snappy-add-O2-flag-in-CmakeLists.txt.patch \
%D%/packages/patches/snappy-add-inline-for-GCC.patch \
%D%/packages/patches/source-highlight-gcc-compat.patch \
%D%/packages/patches/spectre-meltdown-checker-externalize-fwdb.patch \
%D%/packages/patches/spectre-meltdown-checker-find-kernel.patch \
%D%/packages/patches/sphinxbase-fix-doxygen.patch \
%D%/packages/patches/spice-vdagent-glib-2.68.patch \
%D%/packages/patches/sssd-optional-systemd.patch \
%D%/packages/patches/sssd-system-directories.patch \
%D%/packages/patches/steghide-fixes.patch \
%D%/packages/patches/suitesparse-mongoose-cmake.patch \
@ -1857,7 +1879,6 @@ dist_patch_DATA = \
%D%/packages/patches/tao-fix-parser-types.patch \
%D%/packages/patches/tar-remove-wholesparse-check.patch \
%D%/packages/patches/tar-skip-unreliable-tests.patch \
%D%/packages/patches/tbb-fix-test-on-aarch64.patch \
%D%/packages/patches/tbb-other-arches.patch \
%D%/packages/patches/tclxml-3.2-install.patch \
%D%/packages/patches/tcsh-fix-autotest.patch \
@ -1865,13 +1886,14 @@ dist_patch_DATA = \
%D%/packages/patches/tensorflow-c-api-fix.patch \
%D%/packages/patches/texinfo-headings-single.patch \
%D%/packages/patches/texinfo-5-perl-compat.patch \
%D%/packages/patches/telegram-desktop-allow-disable-libtgvoip.patch \
%D%/packages/patches/telegram-purple-adjust-test.patch \
%D%/packages/patches/texi2html-document-encoding.patch \
%D%/packages/patches/texi2html-i18n.patch \
%D%/packages/patches/texlive-hyph-utf8-no-byebug.patch \
%D%/packages/patches/thefuck-test-environ.patch \
%D%/packages/patches/tidy-CVE-2015-5522+5523.patch \
%D%/packages/patches/timescaledb-flaky-test.patch \
%D%/packages/patches/timewarrior-time-sensitive-tests.patch \
%D%/packages/patches/tinyxml-use-stl.patch \
%D%/packages/patches/tipp10-disable-downloader.patch \
%D%/packages/patches/tipp10-fix-compiling.patch \
@ -1880,8 +1902,8 @@ dist_patch_DATA = \
%D%/packages/patches/tk-find-library.patch \
%D%/packages/patches/tla2tools-build-xml.patch \
%D%/packages/patches/tlf-support-hamlib-4.2+.patch \
gnu/packages/patches/tootle-glib-object-naming.patch \
gnu/packages/patches/tootle-reason-phrase.patch \
%D%/packages/patches/tootle-glib-object-naming.patch \
%D%/packages/patches/tootle-reason-phrase.patch \
%D%/packages/patches/transcode-ffmpeg.patch \
%D%/packages/patches/transfig-gcc10-fno-common.patch \
%D%/packages/patches/transmission-honor-localedir.patch \
@ -1894,11 +1916,14 @@ dist_patch_DATA = \
%D%/packages/patches/tuxpaint-stamps-path.patch \
%D%/packages/patches/twinkle-bcg729.patch \
%D%/packages/patches/u-boot-allow-disabling-openssl.patch \
%D%/packages/patches/u-boot-infodocs-target.patch \
%D%/packages/patches/u-boot-patman-guix-integration.patch \
%D%/packages/patches/u-boot-nintendo-nes-serial.patch \
%D%/packages/patches/u-boot-rockchip-inno-usb.patch \
%D%/packages/patches/u-boot-sifive-prevent-reloc-initrd-fdt.patch \
%D%/packages/patches/u-boot-rk3399-enable-emmc-phy.patch \
%D%/packages/patches/ucx-tcp-iface-ioctl.patch \
%D%/packages/patches/ultrastar-deluxe-no-freesans.patch \
%D%/packages/patches/ungoogled-chromium-extension-search-path.patch \
%D%/packages/patches/ungoogled-chromium-ffmpeg-compat.patch \
%D%/packages/patches/ungoogled-chromium-RUNPATH.patch \
@ -1940,7 +1965,6 @@ dist_patch_DATA = \
%D%/packages/patches/unzip-zipbomb-part2.patch \
%D%/packages/patches/unzip-zipbomb-part3.patch \
%D%/packages/patches/unzip-32bit-zipbomb-fix.patch \
%D%/packages/patches/upx-CVE-2021-20285.patch \
%D%/packages/patches/ustr-fix-build-with-gcc-5.patch \
%D%/packages/patches/util-linux-tests.patch \
%D%/packages/patches/valgrind-enable-arm.patch \
@ -1955,13 +1979,16 @@ dist_patch_DATA = \
%D%/packages/patches/vsearch-unbundle-cityhash.patch \
%D%/packages/patches/vte-CVE-2012-2738-pt1.patch \
%D%/packages/patches/vte-CVE-2012-2738-pt2.patch \
%D%/packages/patches/vtk-fix-freetypetools-build-failure.patch \
%D%/packages/patches/vtk-7-gcc-10-compat.patch \
%D%/packages/patches/vtk-7-hdf5-compat.patch \
%D%/packages/patches/vtk-7-python-compat.patch \
%D%/packages/patches/wacomtablet-add-missing-includes.patch \
%D%/packages/patches/wacomtablet-qt5.15.patch \
%D%/packages/patches/warsow-qfusion-fix-bool-return-type.patch \
%D%/packages/patches/wdl-link-libs-and-fix-jnetlib.patch \
%D%/packages/patches/webkitgtk-adjust-bubblewrap-paths.patch \
%D%/packages/patches/webrtc-audio-processing-big-endian.patch \
%D%/packages/patches/webrtc-for-telegram-desktop-fix-gcc12-cstdint.patch \
%D%/packages/patches/websocketpp-fix-for-cmake-3.15.patch \
%D%/packages/patches/widelands-add-missing-map-include.patch \
%D%/packages/patches/widelands-system-wide_minizip.patch \

View File

@ -2,6 +2,7 @@
;;; Copyright © 2019 Jakob L. Kreuze <zerodaysfordays@sdf.org>
;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re>
;;; Copyright © 2022 Matthew James Kraai <kraai@ftbfs.org>
;;; Copyright © 2022 Ricardo Wurmus <rekado@elephly.net>
;;;
;;; This file is part of GNU Guix.
;;;
@ -22,6 +23,7 @@
#:use-module (gnu machine ssh)
#:use-module (gnu machine)
#:use-module (gnu services)
#:use-module (gnu services base)
#:use-module (gnu services networking)
#:use-module (gnu system)
#:use-module (gnu system pam)
@ -34,7 +36,9 @@
#:use-module (guix records)
#:use-module (guix ssh)
#:use-module (guix store)
#:use-module (ice-9 format)
#:use-module (ice-9 iconv)
#:use-module (ice-9 string-fun)
#:use-module (json)
#:use-module (rnrs bytevectors)
#:use-module (srfi srfi-1)
@ -188,18 +192,66 @@ an environment type of 'digital-ocean-environment-type'."
;;; System deployment.
;;;
;; XXX Copied from (gnu services base)
(define* (ip+netmask->cidr ip netmask #:optional (family AF_INET))
"Return the CIDR notation (a string) for @var{ip} and @var{netmask}, two
@var{family} address strings, where @var{family} is @code{AF_INET} or
@code{AF_INET6}."
(let* ((netmask (inet-pton family netmask))
(bits (logcount netmask)))
(string-append ip "/" (number->string bits))))
;; The following script was adapted from the guide available at
;; <https://wiki.pantherx.org/Installation-digital-ocean/>.
(define (guix-infect network)
"Given NETWORK, an alist describing the Droplet's public IPv4 network
interface, return a Bash script that will install the Guix system."
(define os
`(operating-system
(host-name "gnu-bootstrap")
(timezone "Etc/UTC")
(bootloader (bootloader-configuration
(bootloader grub-bootloader)
(targets '("/dev/vda"))
(terminal-outputs '(console))))
(file-systems (cons (file-system
(mount-point "/")
(device "/dev/vda1")
(type "ext4"))
%base-file-systems))
(services
(append (list (service static-networking-service-type
(list (static-networking
(addresses
(list (network-address
(device "eth0")
(value ,(ip+netmask->cidr
(assoc-ref network "ip_address")
(assoc-ref network "netmask"))))))
(routes
(list (network-route
(destination "default")
(gateway ,(assoc-ref network "gateway")))))
(name-servers '("84.200.69.80" "84.200.70.40")))))
(simple-service 'guile-load-path-in-global-env
session-environment-service-type
`(("GUILE_LOAD_PATH"
. "/run/current-system/profile/share/guile/site/3.0")
("GUILE_LOAD_COMPILED_PATH"
. ,(string-append "/run/current-system/profile/lib/guile/3.0/site-ccache:"
"/run/current-system/profile/share/guile/site/3.0"))))
(service openssh-service-type
(openssh-configuration
(log-level 'debug)
(permit-root-login 'prohibit-password))))
%base-services))))
(format #f "#!/bin/bash
apt-get update
apt-get install xz-utils -y
wget https://ftp.gnu.org/gnu/guix/guix-binary-1.0.1.x86_64-linux.tar.xz
wget -nv https://ci.guix.gnu.org/search/latest/archive?query=spec:tarball+status:success+system:x86_64-linux+guix-binary.tar.xz -O guix-binary-nightly.x86_64-linux.tar.xz
cd /tmp
tar --warning=no-timestamp -xf ~~/guix-binary-1.0.1.x86_64-linux.tar.xz
tar --warning=no-timestamp -xf ~~/guix-binary-nightly.x86_64-linux.tar.xz
mv var/guix /var/ && mv gnu /
mkdir -p ~~root/.config/guix
ln -sf /var/guix/profiles/per-user/root/current-guix ~~root/.config/guix/current
@ -229,37 +281,9 @@ export GUIX_LOCPATH=\"$HOME/.guix-profile/lib/locale\"
guix package -i openssl
cat > /etc/bootstrap-config.scm << EOF
(use-modules (gnu))
(use-service-modules networking ssh)
(use-service-modules base networking ssh)
(operating-system
(host-name \"gnu-bootstrap\")
(timezone \"Etc/UTC\")
(bootloader (bootloader-configuration
(bootloader grub-bootloader)
(targets '(\"/dev/vda\"))
(terminal-outputs '(console))))
(file-systems (cons (file-system
(mount-point \"/\")
(device \"/dev/vda1\")
(type \"ext4\"))
%base-file-systems))
(services
(append (list (static-networking-service \"eth0\" \"~a\"
#:netmask \"~a\"
#:gateway \"~a\"
#:name-servers '(\"84.200.69.80\" \"84.200.70.40\"))
(simple-service 'guile-load-path-in-global-env
session-environment-service-type
\\`((\"GUILE_LOAD_PATH\"
. \"/run/current-system/profile/share/guile/site/2.2\")
(\"GUILE_LOAD_COMPILED_PATH\"
. ,(string-append \"/run/current-system/profile/lib/guile/2.2/site-ccache:\"
\"/run/current-system/profile/share/guile/site/2.2\"))))
(service openssh-service-type
(openssh-configuration
(log-level 'debug)
(permit-root-login 'prohibit-password))))
%base-services)))
~a
EOF
# guix pull
guix system build /etc/bootstrap-config.scm
@ -268,9 +292,9 @@ mv /etc /old-etc
mkdir /etc
cp -r /old-etc/{passwd,group,shadow,gshadow,mtab,guix,bootstrap-config.scm} /etc/
guix system reconfigure /etc/bootstrap-config.scm"
(assoc-ref network "ip_address")
(assoc-ref network "netmask")
(assoc-ref network "gateway")))
;; Escape the bare backtick to avoid having it interpreted by Bash.
(string-replace-substring
(format #f "~y" os) "`" "\\`")))
(define (machine-wait-until-available machine)
"Block until the initial Debian image has been installed on the droplet
@ -301,18 +325,26 @@ named DROPLET-NAME."
configuration for the public IPv4 network described by the alist NETWORK."
(operating-system
(inherit (machine-operating-system target))
(services (cons* (static-networking-service "eth0"
(assoc-ref network "ip_address")
#:netmask (assoc-ref network "netmask")
#:gateway (assoc-ref network "gateway")
#:name-servers '("84.200.69.80" "84.200.70.40"))
(services (cons* (service static-networking-service-type
(list (static-networking
(addresses
(list (network-address
(device "eth0")
(value (ip+netmask->cidr
(assoc-ref network "ip_address")
(assoc-ref network "netmask"))))))
(routes
(list (network-route
(destination "default")
(gateway (assoc-ref network "gateway")))))
(name-servers '("84.200.69.80" "84.200.70.40")))))
(simple-service 'guile-load-path-in-global-env
session-environment-service-type
`(("GUILE_LOAD_PATH"
. "/run/current-system/profile/share/guile/site/2.2")
. "/run/current-system/profile/share/guile/site/3.0")
("GUILE_LOAD_COMPILED_PATH"
. ,(string-append "/run/current-system/profile/lib/guile/2.2/site-ccache:"
"/run/current-system/profile/share/guile/site/2.2"))))
. ,(string-append "/run/current-system/profile/lib/guile/3.0/site-ccache:"
"/run/current-system/profile/share/guile/site/3.0"))))
(operating-system-user-services
(machine-operating-system target))))))

View File

@ -42,6 +42,7 @@
#:use-module ((guix inferior)
#:select (inferior-exception?
inferior-exception-arguments))
#:use-module ((guix platform) #:select (systems))
#:use-module (gcrypt pk-crypto)
#:use-module (ice-9 format)
#:use-module (ice-9 match)
@ -86,7 +87,8 @@
machine-ssh-configuration?
this-machine-ssh-configuration
(host-name machine-ssh-configuration-host-name) ; string
(system machine-ssh-configuration-system) ; string
(system machine-ssh-configuration-system ; string
(sanitize validate-system-type))
(build-locally? machine-ssh-configuration-build-locally? ; boolean
(default #t))
(authorize? machine-ssh-configuration-authorize? ; boolean
@ -109,6 +111,32 @@
(host-key machine-ssh-configuration-host-key ; #f | string
(default #f)))
(define-with-syntax-properties (validate-system-type (value properties))
;; Raise an error if VALUE is not a valid system type.
(unless (string? value)
(raise (make-compound-condition
(condition
(&error-location
(location (source-properties->location properties))))
(formatted-message
(G_ "~a: invalid system type; must be a string")
value))))
(unless (member value (systems))
(raise (apply make-compound-condition
(condition
(&error-location
(location (source-properties->location properties))))
(formatted-message (G_ "~a: unknown system type") value)
(let ((closest (string-closest value (systems)
#:threshold 5)))
(if closest
(list (condition
(&fix-hint
(hint (format #f (G_ "Did you mean @code{~a}?")
closest)))))
'())))))
value)
(define (open-machine-ssh-session config)
"Open an SSH session for CONFIG, a <machine-ssh-configuration> record."
(let ((host-name (machine-ssh-configuration-host-name config))
@ -466,7 +494,7 @@ environment type of 'managed-host."
(machine-configuration machine))
(unless (file-exists? %public-key-file)
(raise (formatted-message (G_ "no signing key '~a'. \
have you run 'guix archive --generate-key?'")
Have you run 'guix archive --generate-key'?")
%public-key-file)))
(remote-authorize-signing-key (call-with-input-file %public-key-file
(lambda (port)

View File

@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012-2020, 2022 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2012-2020, 2022-2023 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2013 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
;;; Copyright © 2016, 2017 Alex Kost <alezost@gmail.com>
@ -38,6 +38,7 @@
#:use-module (ice-9 vlist)
#:use-module (ice-9 match)
#:use-module (ice-9 binary-ports)
#:autoload (rnrs bytevectors) (bytevector?)
#:autoload (system base compile) (compile)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-26)
@ -442,10 +443,15 @@ reducing the memory footprint."
(lambda (port)
;; Store the cache as a '.go' file. This makes loading fast and reduces
;; heap usage since some of the static data is directly mmapped.
(put-bytevector port
(compile `'(,@exp)
#:to 'bytecode
#:opts '(#:to-file? #t)))))
(match (compile `'(,@exp)
#:to 'bytecode
#:opts '(#:to-file? #t))
((? bytevector? bv)
(put-bytevector port bv))
(proc
;; In Guile 3.0.9, the linker can return a procedure instead of a
;; bytevector. Adjust to that.
(proc port)))))
cache-file)

View File

@ -339,7 +339,7 @@ assistant for graphic designers, who need to select individual pixels.")
(synopsis "Bridge for espeak and speakup")
(description
"Espeakup is a bridge between the speakup driver implemented in
the Linux kernel and the espeak-ng text to speach synthesizer.
the Linux kernel and the espeak-ng text to speech synthesizer.
In order for this package to work, you need to have the following
kernel modules built:
@itemize @bullet
@ -348,4 +348,4 @@ CONFIG_SPEAKUP=m
@item
CONFIG_SPEAKUP_SOFT=m
@end itemize")
(home-page "ttps://github.com/linux-speakup/espeakup")))
(home-page "https://github.com/linux-speakup/espeakup")))

View File

@ -35,7 +35,7 @@
;;; Copyright © 2020, 2021, 2022 Michael Rohleder <mike@rohleder.de>
;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
;;; Copyright © 2020 Morgan Smith <Morgan.J.Smith@outlook.com>
;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 2021 Zheng Junjie <873216071@qq.com>
;;; Copyright © 2021 Stefan Reichör <stefan@xsteve.at>
;;; Copyright © 2021 qblade <qblade@protonmail.com>
@ -43,7 +43,6 @@
;;; Copyright © 2021 David Larsson <david.larsson@selfhosted.xyz>
;;; Copyright © 2021 WinterHound <winterhound@yandex.com>
;;; Copyright © 2021 Brice Waegeneire <brice@waegenei.re>
;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
;;; Copyright © 2021 muradm <mail@muradm.net>
;;; Copyright © 2021 pineapples <guixuser6392@protonmail.com>
@ -51,6 +50,11 @@
;;; Copyright © 2021 Artyom V. Poptsov <poptsov.artyom@gmail.com>
;;; Copyright © 2022 Wamm K. D. <jaft.r@outlook.com>
;;; Copyright © 2022 Roman Riabenko <roman@riabenko.com>
;;; Copyright © 2022 Petr Hodina <phodina@protonmail.com>
;;; Copyright © 2022 Andreas Rammhold <andreas@rammhold.de>
;;; Copyright © 2022 ( <paren@disroot.org>
;;; Copyright © 2022 Matthew James Kraai <kraai@ftbfs.org>
;;; Copyright © 2022 jgart <jgart@dismail.de>
;;;
;;; This file is part of GNU Guix.
;;;
@ -97,6 +101,7 @@
#:use-module (gnu packages c)
#:use-module (gnu packages check)
#:use-module (gnu packages compression)
#:use-module (gnu packages crates-graphics)
#:use-module (gnu packages crates-io)
#:use-module (gnu packages cross-base)
#:use-module (gnu packages crypto)
@ -107,6 +112,7 @@
#:use-module (gnu packages elf)
#:use-module (gnu packages file)
#:use-module (gnu packages flex)
#:use-module (gnu packages fonts)
#:use-module (gnu packages freedesktop)
#:use-module (gnu packages gawk)
#:use-module (gnu packages gettext)
@ -322,25 +328,14 @@ interface and is based on GNU Guile.")
(define-public shepherd-0.9
(package
(inherit shepherd-0.8)
(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")
@ -360,9 +355,12 @@ interface and is based on GNU Guile.")
(this-package-input "guile-fibers")
"/lib/guile/3.0/site-ccache"))))))
#~%standard-phases)))
(native-inputs (list pkg-config guile-3.0
;; Note: Use 'guile-3.0-latest' to address the continuation-related memory
;; leak reported at <https://issues.guix.gnu.org/58631>.
(native-inputs (list pkg-config guile-3.0-latest
guile-fibers-1.1)) ;for cross-compilation
(inputs (list guile-3.0 guile-fibers-1.1))))
(inputs (list guile-3.0-latest guile-fibers-1.1))))
(define-public shepherd shepherd-0.9)
@ -696,6 +694,76 @@ console.")
;; This package uses a modified version of the "ISC License".
(license (license:non-copyleft "file://LICENSE")))))
(define-public btop
(package
(name "btop")
(version "1.2.13")
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/aristocratos/btop")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32
"0aggzlxyfp213rknpbhkn8wbgzcnz181dyh9m2awz72w705axy8p"))))
(build-system gnu-build-system)
(arguments
(list #:tests? #f ;no test suite
#:make-flags #~(list (string-append "PREFIX=" #$output))
#:phases #~(modify-phases %standard-phases
(delete 'configure))))
(home-page "https://github.com/aristocratos/btop")
(synopsis "Resource monitor")
(description "Btop++ provides unified monitoring of CPU, memory, network
and processes.")
(license license:asl2.0)))
(define-public smem
(package
(name "smem")
(version "1.5")
(source (origin
(method url-fetch)
(uri (string-append "https://selenic.com/repo/smem/archive/"
version ".tar.bz2"))
(file-name
(string-append name "-" version ".tar.bz2"))
(sha256
(base32
"19ibv1byxf2b68186ysrgrhy5shkc5mc69abark1h18yigp3j34m"))))
(build-system gnu-build-system)
(arguments
(list #:tests? #f ; There is no test suite.
#:make-flags #~(list "smemcap")
#:phases
#~(modify-phases %standard-phases
(delete 'configure)
(replace 'build
(lambda _
(let* ((system #$(cond ((target-x86?) "X86")
((target-arm?) "ARM")
((target-powerpc?) "POWER")
(else "CROSS_FINGERS"))))
(format #t "Building for ~a~%" system)
(invoke #$(cc-for-target) "-o" "smemcap" "smemcap.c"
"-g" "-Wall" "-D" system))))
(replace 'install
(lambda _
(let ((bin (string-append #$output "/bin"))
(man1 (string-append #$output "/share/man/man8")))
(install-file "smemcap" bin)
(install-file "smem" bin)
(mkdir-p man1)
(copy-file "smem.8" (string-append man1 "/smem.8"))))))))
(native-inputs (list python-minimal-wrapper))
(home-page "https://www.selenic.com/smem/")
(synopsis "Memory reporting tool")
(description
"This package provides a command line tool that can give numerous reports
on memory usage on GNU/Linux systems.")
(license license:gpl2+)))
(define-public htop
(package
(name "htop")
@ -1097,7 +1165,7 @@ would need and has several interesting built-in capabilities.")
(define-public netcat-openbsd
(package
(name "netcat-openbsd")
(version "1.218-5")
(version "1.219-1")
(source (origin
(method git-fetch)
(uri (git-reference
@ -1106,7 +1174,7 @@ would need and has several interesting built-in capabilities.")
(file-name (git-file-name name version))
(sha256
(base32
"0hpbmz9m2q22a6qgbn9590z2x96xgffim8g0m1v47mariz3pqhlc"))))
"1fhrmnbdl6bgsjk02vi78zy9i486mmniymbbbhdkzl8zfjbjkpxc"))))
(build-system gnu-build-system)
(arguments
`(#:tests? #f ; no test suite
@ -1331,14 +1399,14 @@ connection alive.")
bind-release-version)))
(package
(name "isc-dhcp")
(version "4.4.3")
(version "4.4.3-P1")
(source (origin
(method url-fetch)
(uri (string-append "https://ftp.isc.org/isc/dhcp/"
version "/dhcp-" version ".tar.gz"))
(sha256
(base32
"062q2g8cj2zv0zv22x6pg21m21bdlscxkg3li0ac0pm0qasccghf"))))
"1ivkvhhvqxap6c51cli7pa6xn76ngxri1zbl45ishz4ranxidi0a"))))
(build-system gnu-build-system)
(arguments
`(#:parallel-build? #f
@ -1432,6 +1500,7 @@ connection alive.")
(libexec (string-append out "/libexec"))
(coreutils (assoc-ref inputs "coreutils*"))
(inetutils (assoc-ref inputs "inetutils"))
(grep (assoc-ref inputs "grep*"))
(net-tools (assoc-ref inputs "net-tools"))
(sed (assoc-ref inputs "sed*")))
(substitute* "client/scripts/linux"
@ -1448,7 +1517,7 @@ connection alive.")
,(map (lambda (dir)
(string-append dir "/bin:"
dir "/sbin"))
(list inetutils net-tools coreutils sed))))))))))
(list inetutils net-tools coreutils grep sed))))))))))
(native-inputs
(list config perl file))
@ -1472,6 +1541,7 @@ connection alive.")
"1zsszgxs9043dfpxb6xs1iwk9jg7nxkl5pbawj8dlshnxkkzp3hd"))))
("coreutils*" ,coreutils)
("grep*" ,grep)
("sed*" ,sed)))
(home-page "https://www.isc.org/dhcp/")
@ -1479,7 +1549,10 @@ connection alive.")
(description
"ISC's Dynamic Host Configuration Protocol (DHCP) distribution provides a
reference implementation of all aspects of DHCP, through a suite of DHCP
tools: server, client, and relay agent.")
tools: server, client, and relay agent.
This software is @emph{end-of-life}! ISC does not intend to issue any further
maintenance releases.")
(license license:mpl2.0)
(properties '((cpe-name . "dhcp"))))))
@ -1515,6 +1588,39 @@ periodically and when requested by a node sending a Router Solicitation
message. These messages are required for IPv6 stateless autoconfiguration.")
(license (license:non-copyleft "file://COPYRIGHT"))))
(define-public ndppd
(package
(name "ndppd")
(version "0.2.5")
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/DanielAdolfsson/ndppd")
(commit version)))
(file-name (git-file-name name version))
(sha256
(base32 "0niri5q9qyyyw5lmjpxk19pv3v4srjvmvyd5k6ks99mvqczjx9c0"))))
(build-system gnu-build-system)
(arguments
(list #:tests? #f ; There are no tests
#:make-flags #~(list (string-append "PREFIX=" #$output))
#:phases
#~(modify-phases %standard-phases
(delete 'configure)
(add-after 'unpack 'fix-paths
(lambda _
(substitute* "Makefile"
(("/bin/gzip") "gzip")))))))
(synopsis "NDP Proxy Daemon")
(description
"The Neighbor Discovery Protocol Proxy Daemon (ndppd) proxies some IPv6
NDP messages between interfaces to allow IPv6 routing between machines that
are in the same network but not on the same local link. It currently only
supports Neighbor Solicitation and Neighbor Advertisement messages.")
(home-page "https://github.com/DanielAdolfsson/ndppd")
(license license:gpl3+)))
(define-public libpcap
(package
(name "libpcap")
@ -1689,7 +1795,7 @@ over ssh connections.")
(define-public realmd
(package
(name "realmd")
(version "0.17.0")
(version "0.17.1")
(source
(origin
(method git-fetch)
@ -1698,8 +1804,7 @@ over ssh connections.")
(commit version)))
(file-name (git-file-name name version))
(sha256
(base32
"1c6q2a86kk2f1akzc36nh52hfwsmmc0mbp6ayyjxj4zsyk9zx5bf"))))
(base32 "063cf4jkpfj548a7dxmffrpbh3j413nq3zy1zzj20lcfffnnaqwn"))))
(build-system gnu-build-system)
(arguments
`(#:configure-flags '("--with-systemd-unit-dir=no"
@ -1784,66 +1889,61 @@ at once based on a Perl regular expression.")
(base32
"0751mb9l2f0jrk3vj6q8ilanifd121dliwk0c34g8k0dlzsv3kd7"))
(modules '((guix build utils)))
(patches (search-patches "rottlog-direntry.patch"))
(snippet
'(begin
(substitute* "Makefile.in"
(("-o \\$\\{LOG_OWN\\} -g \\$\\{LOG_GROUP\\}")
;; Don't try to chown root.
"")
;; Delete outdated Autotools build system files.
(for-each delete-file
(list "Makefile.in"
"config.guess"
"config.sub"
"configure"
"depcomp"
"install-sh"
"mdate-sh"
"missing"
"mkinstalldirs"
"texinfo.tex"))
(substitute* "Makefile.am"
(("mkdir -p \\$\\(ROTT_STATDIR\\)")
;; Don't attempt to create /var/lib/rottlog.
"true"))
#t))))
"true"))))))
(build-system gnu-build-system)
(arguments
`(#:configure-flags (list "ROTT_ETCDIR=/etc/rottlog" ;rc file location
"--localstatedir=/var")
;; Install example config files in OUT/etc.
#:make-flags (list (string-append "ROTT_ETCDIR="
(assoc-ref %outputs "out")
"/etc"))
#:phases (modify-phases %standard-phases
(add-after 'unpack 'patch-paths
(lambda* (#:key inputs #:allow-other-keys)
(substitute* "rc/rc"
(("/usr/sbin/sendmail")
(search-input-file inputs "/bin/mail")))
#t))
(add-after 'unpack 'fix-configure
(lambda* (#:key inputs native-inputs #:allow-other-keys)
;; Replace outdated config.sub and config.guess:
(for-each (lambda (file)
(install-file
(string-append
(assoc-ref
(or native-inputs inputs) "automake")
"/share/automake-"
,(version-major+minor
(package-version automake))
"/" file) "."))
'("config.sub" "config.guess"))
#t))
(add-after 'build 'set-packdir
(lambda _
;; Set a default location for archived logs.
(substitute* "rc/rc"
(("packdir=\"\"")
"packdir=\"/var/log\""))
#t))
(add-before 'install 'tweak-rc-weekly
(lambda* (#:key inputs #:allow-other-keys)
(substitute* "rc/weekly"
(("/bin/kill")
(search-input-file inputs "/bin/kill"))
(("syslogd\\.pid")
;; The file is called 'syslog.pid' (no 'd').
"syslog.pid"))))
(add-after 'install 'install-info
(lambda _
(invoke "make" "install-info"))))))
(native-inputs (list texinfo automake util-linux)) ; for 'cal'
(list
#:configure-flags #~(list "ROTT_ETCDIR=/etc/rottlog" ;rc file location
"--localstatedir=/var")
;; Install example config files in OUT/etc.
#:make-flags #~(list (string-append "ROTT_ETCDIR=" #$output "/etc")
;; Avoid the default -o root -g root arguments,
;; which fail due to not running as root.
"INSTALL_RC=install"
"INSTALL_SCRIPT=install")
#:phases
#~(modify-phases %standard-phases
(add-after 'unpack 'patch-paths
(lambda* (#:key inputs #:allow-other-keys)
(substitute* "rc/rc"
(("/usr/sbin/sendmail")
(search-input-file inputs "/bin/mail")))))
(add-after 'build 'set-packdir
(lambda _
;; Set a default location for archived logs.
(substitute* "rc/rc"
(("packdir=\"\"")
"packdir=\"/var/log\""))))
(add-before 'install 'tweak-rc-weekly
(lambda* (#:key inputs #:allow-other-keys)
(substitute* "rc/weekly"
(("/bin/kill")
(search-input-file inputs "/bin/kill"))
(("syslogd\\.pid")
;; The file is called 'syslog.pid' (no 'd').
"syslog.pid"))))
(add-after 'install 'install-info
(lambda _
(invoke "make" "install-info"))))))
(native-inputs (list autoconf automake texinfo util-linux)) ; for 'cal'
(inputs (list coreutils mailutils))
(home-page "https://www.gnu.org/software/rottlog/")
(synopsis "Log rotation and management")
@ -1858,7 +1958,7 @@ system administrator.")
(define-public sudo
(package
(name "sudo")
(version "1.9.11p3")
(version "1.9.12p2")
(source (origin
(method url-fetch)
(uri
@ -1868,7 +1968,7 @@ system administrator.")
version ".tar.gz")))
(sha256
(base32
"0w0z9w4vnhjsc4jjghi6wlyv4v055hsy38ncb67p08b7yp9fg1s6"))
"0fc55axh2hfd8hn66dpmyrrgb0gf0nz71zpaygkrpp8x1ypb385r"))
(modules '((guix build utils)))
(snippet
'(begin
@ -2115,14 +2215,16 @@ command.")
(substitute-keyword-arguments (package-arguments wpa-supplicant-minimal)
((#:phases phases)
`(modify-phases ,phases
(add-after 'configure 'configure-for-dbus
(add-after 'configure 'set-config-options
(lambda _
(let ((port (open-file ".config" "al")))
;; Enable Opportunistic Wireless Encryption (OWE) and D-Bus
;; support.
(display "
CONFIG_OWE=y
CONFIG_CTRL_IFACE_DBUS_NEW=y
CONFIG_CTRL_IFACE_DBUS_INTRO=y\n" port)
(close-port port))
#t))
(close-port port))))
(add-after 'install-documentation 'install-dbus-conf
(lambda* (#:key outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
@ -2496,14 +2598,14 @@ characters can be replaced as well, as can UTF-8 characters.")
(define-public tree
(package
(name "tree")
(version "2.0.4")
(version "2.1.0")
(source (origin
(method url-fetch)
(uri (string-append
"https://mama.indstate.edu/users/ice/tree/src/tree-"
version ".tgz"))
(sha256
(base32 "0x7s9wxvf83fw4qah16kapswl2277pybw3d514zrlms9g0cr5smh"))))
(base32 "1xmbxgx72w7ddjlqsx1yys076hp3h7ll968bhdmdrc7jpwswaq01"))))
(build-system gnu-build-system)
(arguments
(list
@ -2762,7 +2864,7 @@ sys.argv[0] = re.sub(r'\\.([^/]*)-real$', r'\\1', sys.argv[0])
(list openssh
openssl
python-mock
python-pycrypto
python-pycryptodome
python-pytest
python-pytest-forked
python-pytest-mock
@ -3170,13 +3272,13 @@ platform-specific methods.")
(package
(name "audit")
(home-page "https://people.redhat.com/sgrubb/audit/")
(version "3.0.8")
(version "3.0.9")
(source (origin
(method url-fetch)
(uri (string-append home-page "audit-" version ".tar.gz"))
(sha256
(base32
"04w9m9ffvi58z11i344wa1hji9ba68cdklrkizhiwf39mnwxkx5m"))))
"0y5w8pl91xapi49ih1pw7h48lac201cj7fm89hkklmzi9m2715gx"))))
(build-system gnu-build-system)
(arguments
`(#:configure-flags (list "--with-python=no"
@ -3336,7 +3438,7 @@ throughput (in the same interval).")
(define-public thefuck
(package
(name "thefuck")
(version "3.31")
(version "3.32")
(source
(origin
(method git-fetch)
@ -3345,7 +3447,7 @@ throughput (in the same interval).")
(commit version)))
(file-name (git-file-name name version))
(sha256
(base32 "05h60gxky57nalc2hdkpg8wqyg16432x9gcb9wnwblplk98998kq"))
(base32 "18ipa1bm6q1n5drbi8i65726hhqhl1g41390lfqrc11hkbvv443d"))
(patches (search-patches "thefuck-test-environ.patch"))))
(build-system python-build-system)
(arguments
@ -3809,13 +3911,13 @@ you are running, what theme or icon set you are using, etc.")
(define-public hyfetch
(package
(name "hyfetch")
(version "1.4.1")
(version "1.4.4")
(source
(origin
(method url-fetch)
(uri (pypi-uri "HyFetch" version))
(sha256
(base32 "18s8r63aqyah34vbahccgkiqw4008i2w5kvhqd9s8bdd4yvsrn4n"))))
(base32 "1k3pcl16y2czkk7wd79yk0w1kqpi4fp8h8szhjs5ywwy20nqmms8"))))
(build-system python-build-system)
(inputs (list python-hypy-utils python-typing-extensions))
(arguments `(#:phases (modify-phases %standard-phases
@ -3975,14 +4077,14 @@ information tool.")
(define-public nnn
(package
(name "nnn")
(version "4.6")
(version "4.7")
(source
(origin
(method url-fetch)
(uri (string-append "https://github.com/jarun/nnn/releases/download/v"
version "/nnn-v" version ".tar.gz"))
(sha256
(base32 "0gvyvynw957yirvc1aj65flzni7niaj5bvyk82ka5dfgi2dazb0m"))))
(base32 "0dbm54m3iv8hzar38dsfxh77z4mlpjj649ga82s0wwms4vlrm5pg"))))
(build-system gnu-build-system)
(inputs
(list ncurses readline))
@ -4010,7 +4112,7 @@ hard-coded.")
(define-public thermald
(package
(name "thermald")
(version "2.4.7")
(version "2.5.1")
(source
(origin
(method git-fetch)
@ -4019,7 +4121,7 @@ hard-coded.")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32 "1n0ih86bkm09bzhjl7hllxkl4gzcxvzsznbwi8dx87ragsjlix6n"))))
(base32 "06p1154w3n4lm0nq8fdsr6ksxl8shrc9z8yz0sbviss9afpawxcg"))))
(build-system gnu-build-system)
(arguments
`(#:configure-flags
@ -4199,7 +4301,7 @@ Python loading in HPC environments.")
(let ((real-name "inxi"))
(package
(name "inxi-minimal")
(version "3.3.20-1")
(version "3.3.24-1")
(source
(origin
(method git-fetch)
@ -4208,12 +4310,12 @@ Python loading in HPC environments.")
(commit version)))
(file-name (git-file-name real-name version))
(sha256
(base32 "182lczpa217gpzn58nfdzjbbinp3bw9lbm1x9lck1mkdmqklgl2a"))))
(base32 "1nai43251r791qvc1c4hhvcaa6hq7zcjlww7k3ip7br6zgxqjaxm"))))
(build-system trivial-build-system)
(inputs
`(("bash" ,bash-minimal)
("perl" ,perl)
("procps" ,procps)))
(list bash-minimal
perl
procps))
(native-inputs
(list gzip))
(arguments
@ -4223,10 +4325,14 @@ Python loading in HPC environments.")
(use-modules (guix build utils)
(ice-9 match)
(srfi srfi-26))
(setenv "PATH" (string-append
(assoc-ref %build-inputs "bash") "/bin" ":"
(assoc-ref %build-inputs "gzip") "/bin" ":"
(assoc-ref %build-inputs "perl") "/bin" ":"))
(setenv "PATH" (string-join
(map (lambda (file)
(dirname (search-input-file %build-inputs
file)))
(list "bin/bash"
"bin/gzip"
"bin/perl"))
":"))
(copy-recursively (assoc-ref %build-inputs "source")
,(string-append real-name "-" version))
(with-directory-excursion ,(string-append real-name "-" version)
@ -4562,52 +4668,54 @@ tcpdump and snoop.")
(sha256
(base32 "0832nh2qf9pisgwnbgx6hkylx5d7i416l19y3ly4ifv7k1p7mxqa"))))
(build-system gnu-build-system)
(arguments
(list
#:configure-flags
#~(list (string-append "--with-slibdir=" #$output "/lib")
(string-append "--with-ssbindir=" #$output "/sbin"))
#:phases
#~(modify-phases %standard-phases
(add-after 'unpack 'patch-file-names
(lambda* (#:key inputs outputs #:allow-other-keys)
(let ((out (assoc-ref outputs "out")))
(substitute* "src/mtcrypt.c"
(("\"(mount|umount)\";" _ command)
(format #f "\"~a\";"
(search-input-file inputs
(string-append "bin/" command))))
(("\"(fsck)\"," _ command)
(format #f "\"~a\","
(search-input-file inputs
(string-append "sbin/" command)))))
(substitute* "src/rdconf1.c"
(("\"(mount|umount)\", \"" _ command)
(format #f "\"~a\", \""
(search-input-file inputs
(string-append "bin/" command))))
(("\"(fsck)\", \"" _ command)
(format #f "\"~a\", \""
(search-input-file inputs
(string-append "sbin/" command))))
(("\"pmvarrun\", \"")
(format #f "\"~a/sbin/pmvarrun\", \"" out)))))))))
(native-inputs
(list perl pkg-config))
(inputs
`(("cryptsetup" ,cryptsetup)
("libhx" ,libhx)
("libxml2" ,libxml2)
("linux-pam" ,linux-pam)
("lvm2" ,lvm2)
("openssl" ,openssl)
("pcre2" ,pcre2)
("libmount" ,util-linux "lib")
("util-linux" ,util-linux)))
(arguments
`(#:configure-flags
(list (string-append "--with-slibdir=" %output "/lib")
(string-append "--with-ssbindir=" %output "/sbin"))
#:phases
(modify-phases %standard-phases
(add-after 'unpack 'fix-program-paths
(lambda* (#:key inputs outputs #:allow-other-keys)
(let ((util-linux (assoc-ref inputs "util-linux"))
(out (assoc-ref outputs "out")))
(substitute* "src/mtcrypt.c"
(("\"mount\";")
(string-append "\"" util-linux "/bin/mount\";"))
(("\"umount\";")
(string-append "\"" util-linux "/bin/umount\";"))
(("\"fsck\",")
(string-append "\"" util-linux "/sbin/fsck\",")))
(substitute* "src/rdconf1.c"
(("\"mount\", \"")
(string-append "\"" util-linux "/bin/mount\", \""))
(("\"umount\", \"")
(string-append "\"" util-linux "/bin/umount\", \""))
(("\"fsck\", \"")
(string-append "\"" util-linux "/sbin/fsck\", \""))
(("\"pmvarrun\", \"")
(string-append "\"" out "/sbin/pmvarrun\", \""))))
#t)))))
(home-page "http://pam-mount.sourceforge.net")
(list cryptsetup
libhx
libxml2
linux-pam
lvm2
openssl
pcre2
`(,util-linux "lib")
util-linux))
(home-page "https://inai.de/projects/pam_mount/")
(synopsis "PAM module to mount volumes for a user session")
(description
"Pam-mount is a PAM module that can mount volumes when a user logs in.
It supports mounting local filesystems of any kind the normal mount utility
supports. It can also mount encrypted LUKS volumes using the password
supplied by the user when logging in.")
"Pam-mount is a PAM module to mount volumes when a user logs in.
It can mount all local file systems supported by @command{mount}, as well as
LUKS volumes encrypted with the user's log-in password.")
(license (list license:gpl2+ license:lgpl2.1+))))
(define-public jc
@ -4741,7 +4849,7 @@ entries, providing commands to add, remove, comment, and search.")
(define-public nmrpflash
(package
(name "nmrpflash")
(version "0.9.16")
(version "0.9.19")
(source
(origin
(method git-fetch)
@ -4750,7 +4858,7 @@ entries, providing commands to add, remove, comment, and search.")
(url "https://github.com/jclehner/nmrpflash")
(commit (string-append "v" version))))
(sha256
(base32 "0gp66l3a2wznjnlc2ljs8g38mfrf1b9a0qcfxqg2bczmfxnrsynj"))
(base32 "02r2z3mnbj8dfka7adw1l76zq1jh1l13mmkns93c54ychs44jz3d"))
(file-name (git-file-name name version))))
(build-system gnu-build-system)
(native-inputs
@ -4769,7 +4877,7 @@ entries, providing commands to add, remove, comment, and search.")
(lambda* (#:key outputs #:allow-other-keys)
(mkdir-p (string-append (assoc-ref outputs "out") "/bin")))))))
(home-page "https://github.com/jclehner/nmrpflash")
(synopsis "Netgear unbrick utility")
(synopsis "Reflash (``unbrick'') Netgear devices with corrupted firmware")
(description "This package provides a utility to flash a new firmware
image to a Netgear device. It has been tested on Netgear EX2700, EX6120,
EX6150v2, DNG3700v2, R6100, R6220, R7000, D7000, WNR3500, R6400, R6800,
@ -5143,7 +5251,7 @@ it won't take longer to install 15 machines than it would to install just 2.")
(native-inputs
`(("linux-pam" ,linux-pam)
("scdoc" ,scdoc)))
(synopsis "minimal and flexible login manager daemon")
(synopsis "Minimal and flexible login manager daemon")
(description
"greetd is a minimal and flexible login manager daemon
that makes no assumptions about what you want to launch.
@ -5171,20 +5279,86 @@ then it can be a greeter.")
"#define CONFIGFILE \"/etc/security/greetd_pam_mount.conf.xml\"\n")
(("pam_mount_config") "greetd_pam_mount_config")
(("pam_mount_system_authtok") "greetd_pam_mount_system_authtok"))))))))
(synopsis "pam-mount specifically compiled for use with greetd")
(synopsis "PAM module to mount volumes for a user session (greetd variant)")
(description
"Pam-mount is a PAM module that can mount volumes when a user logs in.
It supports mounting local filesystems of any kind the normal mount utility
supports. It can also mount encrypted LUKS volumes using the password
supplied by the user when logging in.
"Pam-mount is a PAM module to mount volumes when a user logs in.
It can mount all local file systems supported by @command{mount}, as well as
LUKS volumes encrypted with the user's log-in password.
This package inherits pam-mount in the way that it is compiled specifically
for use with greetd daemon. It uses different configuration location and
name space for storing data in PAM.
This package inherits pam-mount but is compiled specifically for use with
the @command{greetd} log-in manager. It uses a different configuration
location and PAM name space from the original.
greetd-pam-mount is used in configuration of greetd to provide
auto-(mounting/unmounting) of XDG_RUNTIME_DIR in the way that it will not
interfere with default pam-mount configuration.")))
This allows greetd-pam-mount to auto-(un)mount @env{XDG_RUNTIME_DIR} without
interfering with any pam-mount configuration.")))
(define-public wlgreet
(package
(name "wlgreet")
(version "0.4")
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://git.sr.ht/~kennylevinsen/wlgreet")
(commit version)))
(file-name (git-file-name name version))
(sha256
(base32
"00grp63n9nrgqls3knxfv9wjbc7p0jwr7i2vzxy750dz85gi2kzn"))))
(build-system cargo-build-system)
(arguments
(list #:cargo-inputs
`(("rust-chrono" ,rust-chrono-0.4)
("rust-getopts" ,rust-getopts-0.2)
("rust-greetd-ipc" ,rust-greetd-ipc-0.8)
("rust-lazy-static" ,rust-lazy-static-1)
("rust-memmap2" ,rust-memmap2-0.3)
("rust-nix" ,rust-nix-0.15)
("rust-os-pipe" ,rust-os-pipe-0.8)
("rust-rusttype" ,rust-rusttype-0.7)
("rust-serde" ,rust-serde-1)
("rust-smithay-client-toolkit"
,rust-smithay-client-toolkit-0.15)
("rust-toml" ,rust-toml-0.5)
("rust-wayland-client" ,rust-wayland-client-0.29)
("rust-wayland-protocols" ,rust-wayland-protocols-0.29)
("rust-xml-rs" ,rust-xml-rs-0.8))
#:phases
#~(modify-phases %standard-phases
(add-after 'unpack 'remove-bundled-fonts
(lambda _
(delete-file-recursively "fonts")))
(add-after 'remove-bundled-fonts 'fix-font-references
(lambda* (#:key inputs #:allow-other-keys)
(substitute* "src/draw.rs"
(("\\.\\./fonts/dejavu/DejaVuSansMono\\.ttf" _)
(search-input-file
inputs
"share/fonts/truetype/DejaVuSansMono.ttf"))
(("\\.\\./fonts/Roboto-Regular\\.ttf" _)
(search-input-file
inputs
"share/fonts/truetype/Roboto-Regular.ttf")))))
(add-after 'configure 'fix-library-references
(lambda* (#:key inputs vendor-dir #:allow-other-keys)
(substitute* (find-files vendor-dir "\\.rs$")
(("lib(wayland-.*|xkbcommon)\\.so" so-file)
(search-input-file
inputs
(string-append "lib/" so-file)))))))))
(inputs
(list font-dejavu
font-google-roboto
libxkbcommon
wayland))
(home-page "https://git.sr.ht/~kennylevinsen/wlgreet")
(synopsis "Bare-bones Wayland-based greeter for @command{greetd}")
(description
"@command{wlgreet} provides a @command{greetd} greeter
that runs on a Wayland compositor such as @command{sway}. It
is implemented with pure Wayland APIs, so it does not depend
on a GUI toolkit.")
(license license:gpl3)))
(define-public libseat
(package
@ -5487,3 +5661,89 @@ mechanisms if you really want to protect services.")
several hosts in succession or in parallel. It can also be used to copy a
file or files to several hosts.")
(license license:gpl3+)))
(define-public doctl
(package
(name "doctl")
(version "1.92.0")
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/digitalocean/doctl")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32
"0n8xajr9s0y7a43is24q0f9nznmr2sjhlhgg9fpyx4s4nr3s5yqw"))))
(build-system go-build-system)
(arguments
(list #:import-path "github.com/digitalocean/doctl/cmd/doctl"
#:unpack-path "github.com/digitalocean/doctl"
#:go go-1.19
#:build-flags
#~(list (string-append "-ldflags=-X github.com/digitalocean/doctl.Label=release"
" -X github.com/digitalocean/doctl.Major="
(car (string-split #$version #\.))
" -X github.com/digitalocean/doctl.Minor="
(cadr (string-split #$version #\.))
" -X github.com/digitalocean/doctl.Patch="
(caddr (string-split #$version #\.))))
#:install-source? #f
#:phases
#~(modify-phases %standard-phases
(add-after 'install 'install-completions
(lambda _
(define (install-completion shell file)
(let ((file (string-append #$output file)))
(mkdir-p (dirname file))
(with-output-to-file file
(lambda _
(invoke (string-append #$output "/bin/doctl")
"completion" shell)))))
(install-completion "bash" "/etc/bash_completion.d/doctl")
(install-completion "fish"
"/etc/fish/completions/doctl.fish")
(install-completion "zsh"
"/etc/zsh/site-functions/_doctl"))))))
(home-page "https://github.com/digitalocean/doctl")
(synopsis "Command line client for DigitalOcean")
(description
"@code{doctl} provides a unified command line interface to the DigitalOcean API.")
(license license:asl2.0)))
(define-public du-dust
(package
(name "du-dust")
(version "0.8.3")
(source (origin
(method url-fetch)
(uri (crate-uri "du-dust" version))
(file-name (string-append name "-" version ".tar.gz"))
(sha256
(base32
"1daif13rdd7wb8m5fbp6zif5b8znqcvmkxrjpp2w2famsp36sahx"))))
(build-system cargo-build-system)
(arguments
`(#:cargo-inputs (("rust-ansi-term" ,rust-ansi-term-0.12)
("rust-clap" ,rust-clap-3)
("rust-clap" ,rust-clap-3)
("rust-clap-complete" ,rust-clap-complete-3)
("rust-config-file" ,rust-config-file-0.2)
("rust-directories" ,rust-directories-4)
("rust-lscolors" ,rust-lscolors-0.7)
("rust-rayon" ,rust-rayon-1)
("rust-regex" ,rust-regex-1)
("rust-serde" ,rust-serde-1)
("rust-stfu8" ,rust-stfu8-0.2)
("rust-sysinfo" ,rust-sysinfo-0.15)
("rust-terminal-size" ,rust-terminal-size-0.1)
("rust-thousands" ,rust-thousands-0.2)
("rust-unicode-width" ,rust-unicode-width-0.1)
("rust-winapi-util" ,rust-winapi-util-0.1))
#:cargo-development-inputs (("rust-assert-cmd" ,rust-assert-cmd-1)
("rust-tempfile" ,rust-tempfile-3))))
(home-page "https://github.com/bootandy/dust")
(synopsis "Graphical disk usage analyzer")
(description "This package provides a graphical disk usage analyzer in
text mode.")
(license license:asl2.0)))

View File

@ -64,8 +64,7 @@
(base32
"1yl2cpaqiv1g4nq9v0xfj1vd5faz55k4541vz6hsffvcxgn9nmc5"))))
(build-system cmake-build-system)
(native-inputs
(list fmt googletest))
(native-inputs (list fmt-8 googletest))
(synopsis "C++ port of ZXing")
(description "ZXing-CPP is a barcode scanning library.")
(home-page "https://github.com/nu-book/zxing-cpp")

View File

@ -1,7 +1,7 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2022 Andreas Enge <andreas@enge.fr>
;;; Copyright © 2013, 2015, 2017, 2018, 2021 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2016-2022 Nicolas Goaziou <mail@nicolasgoaziou.fr>
;;; Copyright © 2016-2023 Nicolas Goaziou <mail@nicolasgoaziou.fr>
;;; Copyright © 2014, 2018 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2016, 2018, 2019, 2021 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2017, 2020-2022 Efraim Flashner <efraim@flashner.co.il>
@ -14,6 +14,7 @@
;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
;;; Copyright © 2020, 2021 Vinicius Monego <monego@posteo.net>
;;; Copyright © 2021 Lars-Dominik Braun <ldb@leibniz-psychology.org>
;;; Copyright © 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@ -106,24 +107,26 @@ multiplication routines such as ToomCook and the FFT.")
(define-public gf2x
(package
(name "gf2x")
(version "1.2")
(source (origin
(method url-fetch)
(uri (string-append
"https://gforge.inria.fr/frs/download.php/file/36934/gf2x-"
version ".tar.gz"))
(sha256
(base32
"0d6vh1mxskvv3bxl6byp7gxxw3zzpkldrxnyajhnl05m0gx7yhk1"))))
(build-system gnu-build-system)
(synopsis "Arithmetic of polynomials over binary finite fields")
(description
"The gf2x library provides arithmetic of polynomials over finite fields
(name "gf2x")
(version "1.3.0")
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://gitlab.inria.fr/gf2x/gf2x")
(commit (string-append name "-" version))))
(file-name (git-file-name name version))
(sha256
(base32
"04g5jg0i4vz46b4w2dvbmahwzi3k6b8g515mfw7im1inc78s14id"))))
(build-system gnu-build-system)
(native-inputs (list autoconf automake libtool))
(synopsis "Arithmetic of polynomials over binary finite fields")
(description
"The gf2x library provides arithmetic of polynomials over finite fields
of characteristic 2. It implements the multiplication, squaring and
greatest common divisor operations.")
(license license:gpl3+)
(home-page "https://gforge.inria.fr/projects/gf2x/")))
(home-page "https://gitlab.inria.fr/gf2x/gf2x")
(license license:gpl3+)))
(define-public cm
(package
@ -221,7 +224,7 @@ the real span of the lattice.")
(define-public pari-gp
(package
(name "pari-gp")
(version "2.15.0")
(version "2.15.2")
(source (origin
(method url-fetch)
(uri (string-append
@ -229,7 +232,7 @@ the real span of the lattice.")
version ".tar.gz"))
(sha256
(base32
"11anfn2lmixi83208p8qxjhwkrrad9s2qqfrl3wy9m0n1lg8ax74"))))
"1pg0przhb3cgyn0rwkx2mx7a7fpy6bxxl72bk98pca723q8jhimh"))))
(build-system gnu-build-system)
(native-inputs (list (texlive-updmap.cfg
(list texlive-amsfonts))))
@ -324,7 +327,7 @@ precision.")
(define-public giac
(package
(name "giac")
(version "1.9.0-21")
(version "1.9.0-37")
(source
(origin
(method url-fetch)
@ -336,7 +339,7 @@ precision.")
"~parisse/debian/dists/stable/main/source/"
"giac_" version ".tar.gz"))
(sha256
(base32 "1zh7bf0ag4vbyyj5n8lbvy2ivp0kshms40ra5lq1ff035rpx230j"))))
(base32 "0ch18wp6b3nr0zg31961rxng2mbw5mj76s00jf5qz7jdxl65s27n"))))
(build-system gnu-build-system)
(arguments
(list
@ -352,9 +355,10 @@ precision.")
(find-files "doc" "^Makefile"))
(("/bin/cp") (which "cp")))))
(add-after 'unpack 'disable-failing-test
;; FIXME: Test failing. Not sure why.
;; FIXME: Tests failing. Not sure why.
(lambda _
(substitute* "check/Makefile.in"
(("chk_fhan4") "")
(("chk_fhan11") ""))))
(add-after 'install 'fix-doc
(lambda _
@ -460,7 +464,9 @@ GCDs, factoring, solving linear systems, and evaluating special
functions. In addition, FLINT provides various low-level routines for
fast arithmetic.")
(license license:lgpl2.1+)
(home-page "http://flintlib.org/")))
(home-page "http://flintlib.org/")
(properties
'((release-monitoring-url . "http://flintlib.org/downloads.html")))))
(define-public arb
(package
@ -629,35 +635,42 @@ geometry and singularity theory.")
(define-public gmp-ecm
(package
(name "gmp-ecm")
(version "7.0.4")
(source (origin
(method url-fetch)
(uri
(let ((hash "00c4c691a1ef8605b65bdf794a71539d"))
(string-append "https://gitlab.inria.fr/zimmerma/ecm/"
"uploads/" hash "/ecm-" version
".tar.gz")))
(sha256 (base32
"0hxs24c2m3mh0nq1zz63z3sb7dhy1rilg2s1igwwcb26x3pb7xqc"))))
(build-system gnu-build-system)
(inputs
(list gmp))
(arguments
`(#:configure-flags '("--enable-shared"
;; Disable specific assembly routines, which depend
;; on the subarchitecture of the build machine,
;; and use gmp instead.
"--disable-asm-redc")))
(synopsis "Integer factorization library using the elliptic curve method")
(description
"GMP-ECM factors integers using the elliptic curve method (ECM) as well
(name "gmp-ecm")
(version "7.0.5")
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://gitlab.inria.fr/zimmerma/ecm")
(commit (string-append "git-" version))))
(file-name (git-file-name name version))
(sha256
(base32
"013sfsd5kyh7phhf4namcdndpcp2jnibzxf10f4g89qabr8av63m"))))
(build-system gnu-build-system)
(inputs
(list gmp))
(arguments
(list
#:configure-flags #~(list "--enable-shared"
;; Disable specific assembly routines, which
;; depend on the subarchitecture of the build
;; machine, and use gmp instead.
"--disable-asm-redc")
#:phases #~(modify-phases %standard-phases
(add-after 'unpack 'patch-paths
(lambda _
(substitute* "test.ecm"
(("/bin/rm") (which "rm"))))))))
(native-inputs (list autoconf automake libtool))
(synopsis "Integer factorization library using the elliptic curve method")
(description
"GMP-ECM factors integers using the elliptic curve method (ECM) as well
as the P-1 and P+1 algorithms. It provides a library and a stand-alone
binary.")
;; Most files are under lgpl3+, but some are under gpl3+ or gpl2+,
;; so the combined work is under gpl3+.
(license license:gpl3+)
(home-page "http://ecm.gforge.inria.fr/")))
(home-page "https://gitlab.inria.fr/zimmerma/ecm")
;; Most files are under lgpl3+, but some are under gpl3+ or gpl2+, so the
;; combined work is under gpl3+.
(license license:gpl3+)))
(define-public bc
(package
@ -1393,42 +1406,45 @@ objects.")
(define-public gappa
(package
(name "gappa")
(version "1.4.0")
(source (origin
(method url-fetch)
(uri (string-append "https://gappa.gitlabpages.inria.fr/releases/"
"gappa-" version ".tar.gz"))
(sha256
(base32
"12x42z901pr05ldmparqdi8sq9s7fxbavhzk2dbq3l6hy247dwbb"))))
(build-system gnu-build-system)
(inputs
(list boost gmp mpfr))
(arguments
`(#:phases
(modify-phases %standard-phases
(add-after 'unpack 'patch-remake-shell
(lambda _
(substitute* "remake.cpp"
(("/bin/sh") (which "sh")))
#t))
(replace 'build
(lambda _ (invoke "./remake" "-s" "-d")))
(replace 'install
(lambda _ (invoke "./remake" "-s" "-d" "install")))
(replace 'check
(lambda _ (invoke "./remake" "check"))))))
(home-page "http://gappa.gforge.inria.fr/")
(synopsis "Proof generator for arithmetic properties")
(description "Gappa is a tool intended to help verifying and formally
(name "gappa")
(version "1.4.1")
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://gitlab.inria.fr/gappa/gappa")
(commit (string-append name "-" version))))
(file-name (git-file-name name version))
(sha256
(base32
"0vfggzilc0gicrhqypmlx30ccrdkmyg22zzn46988c28xi9rcicj"))))
(build-system gnu-build-system)
(arguments
(list #:phases
#~(modify-phases %standard-phases
(add-after 'unpack 'patch-remake-shell
(lambda _
(substitute* "remake.cpp"
(("/bin/sh") (which "sh")))))
(replace 'build
(lambda _ (invoke "./remake" "-s" "-d")))
(replace 'install
(lambda _ (invoke "./remake" "-s" "-d" "install")))
(replace 'check
(lambda* (#:key tests? #:allow-other-keys)
(when tests?
(invoke "./remake" "check")))))))
(native-inputs (list autoconf automake bison flex libtool))
(inputs (list boost gmp mpfr))
(home-page "https://gitlab.inria.fr/gappa/gappa")
(synopsis "Proof generator for arithmetic properties")
(description "Gappa is a tool intended to help verifying and formally
proving properties on numerical programs dealing with floating-point or
fixed-point arithmetic. It has been used to write robust floating-point
filters for CGAL and it is used to certify elementary functions in CRlibm.
While Gappa is intended to be used directly, it can also act as a backend
prover for the Why3 software verification platform or as an automatic tactic
for the Coq proof assistant.")
(license (list license:gpl3+ license:cecill)))) ; either/or
(license (list license:gpl3+ license:cecill)))) ; either/or
(define-public givaro
(package

View File

@ -872,7 +872,7 @@ algorithm.")
("libpng" ,libpng)))
(home-page "https://developer.android.com/studio/command-line/etc1tool.html")
(synopsis "Encode and decode PNG images to resp. from the ETC1 compression
standard.")
standard")
(description
"@command{etc1} is a command line utility that lets you encode PNG images
to the ETC1 compression standard and decode ETC1 compressed images back to

View File

@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2015, 2017 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2015, 2017, 2023 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 20182021 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2019 Pkill -9 <pkill9@runbox.com>
;;; Copyright © 2020, 2021, 2022 Vinicius Monego <monego@posteo.net>
@ -23,6 +23,7 @@
(define-module (gnu packages animation)
#:use-module (guix packages)
#:use-module (guix download)
#:use-module (guix gexp)
#:use-module (guix git-download)
#:use-module (guix utils)
#:use-module ((guix licenses) #:prefix license:)
@ -92,7 +93,7 @@ rendering vector based animations and art in realtime.")
(license license:expat)))
;; ETL, synfig, and Synfig Studio are updated in tandem.
(define synfig-version "1.2.2")
(define synfig-version "1.4.4")
(define-public etl
(package
@ -100,12 +101,15 @@ rendering vector based animations and art in realtime.")
(version synfig-version)
(source (origin
(method url-fetch)
(uri (string-append "mirror://sourceforge/synfig/releases/"
version "/source/ETL-" version ".tar.gz"))
(uri (string-append "https://github.com/synfig/synfig"
"/releases/download/v" version
"/ETL-" version ".tar.gz"))
(sha256
(base32
"12sd8pz8l5xcxcmapkvih3brihdhdb6xmxisr9a415lydid9rh8d"))))
"1jnahpxvrdxrll7b7av3zxabm5j3nlz6m3vg4sib2278v1wf91yc"))))
(build-system gnu-build-system)
(inputs (list glibmm-2.64))
(native-inputs (list pkg-config))
(home-page "https://www.synfig.org")
(synopsis "Extended C++ template library")
(description
@ -120,68 +124,37 @@ C++ @dfn{Standard Template Library} (STL).")
(version synfig-version)
(source (origin
(method url-fetch)
(uri (string-append "mirror://sourceforge/synfig/releases/"
version "/source/synfig-" version
".tar.gz"))
(uri (string-append "https://github.com/synfig/synfig"
"/releases/download/v" version
"/synfig-" version ".tar.gz"))
(sha256
(base32
"1vy27kl68sbg41sfasa58k3p2nc1xfalvzk3k9gich9h90rpnpsz"))))
"01kgfmjfjk5y0v9ldmxzc8zzvbiaakz7nzg4hkj24gj3j6h8566d"))))
(build-system gnu-build-system)
(arguments
`(#:configure-flags
;; The Boost library path is taken from the value of BOOST_LDFLAGS.
(list (string-append "BOOST_LDFLAGS=-L"
(assoc-ref %build-inputs "boost")
"/lib"))
#:phases
(modify-phases %standard-phases
(add-after 'unpack 'fix-boost-build-error
;; A chain of Boost headers leads to this error: "make_array" is
;; not a member of "boost::serialization". This can be avoided by
;; loading the "array_wrapper" header first.
(lambda _
(substitute* "src/synfig/valuenodes/valuenode_dynamic.cpp"
(("#include <boost/numeric/odeint/integrate/integrate.hpp>" match)
(string-append
"#include <boost/serialization/array_wrapper.hpp>\n" match)))
#t))
(add-after 'unpack 'adapt-to-libxml++-changes
(lambda _
(substitute* "configure"
(("libxml\\+\\+-2\\.6") "libxml++-3.0"))
(substitute* (append (find-files "src/modules/" "\\.cpp$")
(find-files "src/synfig/" "\\.(cpp|h)$"))
(("add_child\\(") "add_child_element(")
(("get_child_text\\(") "get_first_child_text(")
(("set_child_text\\(") "set_first_child_text(")
(("remove_child\\(") "remove_node("))
(substitute* "src/modules/mod_svg/svg_parser.cpp"
(("xmlpp::Node::NodeList") "xmlpp::Node::const_NodeList"))
#t)))))
(inputs
`(("boost" ,boost)
("ffmpeg" ,ffmpeg)
("libdv" ,libdv)
("libjpeg" ,libjpeg-turbo)
("libpng" ,libpng)
("libmng" ,libmng)
("zlib" ,zlib)))
;; synfig.pc lists the following as required: Magick++ freetype2
;; fontconfig fftw OpenEXR ETL glibmm-2.4 giomm-2.4 libxml++-3.0 sigc++-2.0
;; cairo pango pangocairo mlt++
(list boost
libdv
libjpeg-turbo
libpng
libmng
zlib))
;; synfig.pc lists the following as required: Magick++ libavcodec
;; libavformat libswscale freetype2 fontconfig OpenEXR ETL glibmm-2.4
;; giomm-2.4 libxml++-2.6 sigc++-2.0 cairo fftw3 pango pangocairo mlt++
(propagated-inputs
`(("cairo" ,cairo)
("etl" ,etl)
("fftw" ,fftw)
("fontconfig" ,fontconfig)
("freetype" ,freetype)
("glibmm" ,glibmm)
("imagemagick" ,imagemagick)
("libxml++" ,libxml++)
("libsigc++" ,libsigc++)
("mlt" ,mlt-6)
("openexr" ,openexr-2)
("pango" ,pango)))
(list cairo
etl
ffmpeg-4
fftw
fontconfig
freetype
glibmm-2.64
imagemagick
libxml++-2
libsigc++
mlt-6
openexr-2
pango))
(native-inputs
(list intltool pkg-config))
(home-page "https://www.synfig.org")
@ -198,32 +171,24 @@ for tweening, preventing the need to hand-draw each frame.")
(version synfig-version)
(source (origin
(method url-fetch)
(uri (string-append "mirror://sourceforge/synfig/releases/"
version "/source/synfigstudio-" version
".tar.gz"))
(uri (string-append "https://github.com/synfig/synfig"
"/releases/download/v" version
"/synfigstudio-" version ".tar.gz"))
(sha256
(base32
"1ql92kh9z8w2j9yi3pr7hn7wh2r2j35xynwv9xlwyd7niackgykn"))
(modules '((guix build utils)))
(snippet
'(begin
(substitute* "src/synfigapp/pluginmanager.cpp"
(("xmlpp::Node\\* n =") "const xmlpp::Node* n =")
(("xmlpp::Node::NodeList") "xmlpp::Node::const_NodeList"))
#t))))
"07xjgs1qw0rwpihpcspj92rzwy5zizi86l9x2x7w6sysrj0wd4w8"))))
(build-system gnu-build-system)
(arguments
`(#:phases
(modify-phases %standard-phases
;; This fixes the file chooser crash that happens with GTK 3.
(add-after 'install 'wrap-program
(lambda* (#:key inputs outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
(gtk (assoc-ref inputs "gtk+"))
(gtk-share (string-append gtk "/share")))
(wrap-program (string-append out "/bin/synfigstudio")
`("XDG_DATA_DIRS" ":" prefix (,gtk-share)))
#t))))))
(list
#:phases
#~(modify-phases %standard-phases
;; This fixes the file chooser crash that happens with GTK 3.
(add-after 'install 'wrap-program
(lambda* (#:key inputs #:allow-other-keys)
(let* ((gtk (assoc-ref inputs "gtk+"))
(gtk-share (string-append gtk "/share")))
(wrap-program (string-append #$output "/bin/synfigstudio")
`("XDG_DATA_DIRS" ":" prefix (,gtk-share)))))))))
(inputs
(list gtkmm-3 gtk+ libsigc++ synfig))
(native-inputs
@ -325,7 +290,7 @@ audio or video backends, ensuring good performance.")
(define-public lightspark
(package
(name "lightspark")
(version "0.8.6")
(version "0.8.6.1")
(source
(origin
(method git-fetch)
@ -334,7 +299,7 @@ audio or video backends, ensuring good performance.")
(commit version)))
(file-name (git-file-name name version))
(sha256
(base32 "0v7d7vwb0xqkk3v8dyks0wyk52ga57v5lg93y74v1d2wh7spmmzw"))))
(base32 "1a78l9na01pd7a77r9n8lqih893s54rllpjvrx72sh0yyal1q3gz"))))
(build-system cmake-build-system)
(arguments
`(#:tests? #f ;requires Adobe Flex SDK, see README.tests
@ -559,7 +524,7 @@ stacking and changing parameters in SWFs.
@item
@command{swfstrings} Scans SWFs for text data.
@item
@command{swfdump} Prints out various informations about SWFs.
@command{swfdump} Prints out various information about SWFs.
@item
@command{jpeg2swf} Takes one or more JPEG pictures and generates a SWF
@ -579,14 +544,14 @@ slideshow from them.
@command{font2swf} Converts font files (TTF, Type1) to SWF.
@item
@command{swfbbox} Allows to read out, optimize and readjust SWF bounding boxes.
@command{swfbbox} reads out, optimizes and readjusts SWF bounding boxes.
@item
@command{swfc} A tool for creating SWF files from simple script files. Supports
both ActionScript 2.0 aand 3.0.
@item
@command{swfextract} Allows to extract Movieclips, Sounds, Images etc. from SWF
@command{swfextract} extracts Movieclips, Sounds, Images etc. from SWF
files.
@item

View File

@ -45,14 +45,14 @@
(define-public clamav
(package
(name "clamav")
(version "0.103.6")
(version "0.103.7")
(source (origin
(method url-fetch)
(uri (string-append "https://www.clamav.net/downloads/production/"
"clamav-" version ".tar.gz"))
(sha256
(base32
"0cxsv5m9pqxxb56qd7hlj11pwmdgm07s3msh3hxk47czq4yjx8da"))
"0l3yn4dl4zgpq2qmj29kkd0fksyy1icr0rpp3fyvbcqcc0gw6d0y"))
(modules '((guix build utils)))
(snippet
'(begin

View File

@ -0,0 +1,202 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2022 Hilton Chain <hako@ultrarare.space>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
(define-module (gnu packages apparmor)
#:use-module ((guix licenses) #:prefix license:)
#:use-module (gnu packages autotools)
#:use-module (gnu packages base)
#:use-module (gnu packages bison)
#:use-module (gnu packages dejagnu)
#:use-module (gnu packages flex)
#:use-module (gnu packages gawk)
#:use-module (gnu packages gettext)
#:use-module (gnu packages linux)
#:use-module (gnu packages perl)
#:use-module (gnu packages pkg-config)
#:use-module (gnu packages python)
#:use-module (gnu packages python-xyz)
#:use-module (gnu packages ruby)
#:use-module (gnu packages swig)
#:use-module (guix build-system gnu)
#:use-module (guix gexp)
#:use-module (guix git-download)
#:use-module (guix packages)
#:use-module (guix utils))
(define-public libapparmor
(package
(name "libapparmor")
(version "3.1.2")
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://gitlab.com/apparmor/apparmor")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32
"1h77a7ww0rxfv5nsi1iy4fffklxdr2vq6r7kdsqm15yysglhbjyi"))))
(build-system gnu-build-system)
(arguments
(list #:configure-flags
#~(list (string-append "LDFLAGS=-Wl,-rpath=" #$output "/lib")
"--with-perl" "--with-python" "--with-ruby")
#:phases
#~(modify-phases %standard-phases
(add-after 'unpack 'fix-paths
(lambda* (#:key inputs #:allow-other-keys)
(for-each patch-shebang
'("common/list_af_names.sh"
"common/list_capabilities.sh"))
(for-each (lambda (file)
(substitute* file
(("/usr") "")
(("/bin/\\<(pod2man|pod2html|podchecker|prove)\\>" path)
(search-input-file inputs path))
(("/include/linux/capability.h" path)
(search-input-file inputs path))))
'("common/Make-po.rules"
"common/Make.rules"
"binutils/Makefile"
"parser/Makefile"
"parser/tst/Makefile"
"profiles/Makefile"
"utils/Makefile"
"utils/python-tools-setup.py"
"utils/vim/Makefile"))))
(add-after 'fix-paths 'change-directory
(lambda _
(chdir "libraries/libapparmor"))))))
(native-inputs
(list autoconf
automake
bison
dejagnu
flex
libtool
perl
python-minimal
ruby
swig
which))
(home-page "https://apparmor.net")
(synopsis "Linux kernel security module")
(description
"AppArmor is an effective and easy-to-use Linux application security
system.
AppArmor proactively protects the operating system and applications from
external or internal threats, even zero-day attacks, by enforcing good
behavior and preventing both known and unknown application flaws from being
exploited.
AppArmor supplements the traditional Unix discretionary access control (DAC)
model by providing mandatory access control (MAC). It has been included in
the mainline Linux kernel since version 2.6.36 and its development has been
supported by Canonical since 2009.")
(license license:lgpl2.1)
(supported-systems (filter (lambda (system)
(string-suffix? "-linux" system))
%supported-systems))))
(define-public apparmor
(let ((base libapparmor))
(package
(inherit base)
(name "apparmor")
(arguments
(append
(list #:make-flags
#~(list (string-append "CC=" #$(cc-for-target))
(string-append "DESTDIR=" #$output)
"USE_SYSTEM=1"
;; No need to run the linter
"PYFLAKES=true"))
(substitute-keyword-arguments (package-arguments base)
((#:phases phases)
#~(modify-phases #$phases
(delete 'configure)
;; apparmor-binutils
(replace 'change-directory
(lambda _
(chdir "binutils")))
;; apparmor-parser
(add-after 'install 'chdir-parser
(lambda _
(chdir "../parser")))
(add-after 'chdir-parser 'patch-source-shebangs-parser
(assoc-ref %standard-phases 'patch-source-shebangs))
(add-after 'patch-source-shebangs-parser 'build-parser
(assoc-ref %standard-phases 'build))
(add-after 'build-parser 'check-parser
(assoc-ref %standard-phases 'check))
(add-after 'check-parser 'install-parser
(assoc-ref %standard-phases 'install))
;; apparmor-utils
;; FIXME: Tests required Python library from this package
;; (itself).
(add-after 'install-parser 'chdir-utils
(lambda _
(chdir "../utils")
;; Fix paths to installed policygroups and templates for
;; easyprof.
(substitute* "easyprof/easyprof.conf"
(("/usr") #$output))))
(add-after 'chdir-utils 'build-utils
(assoc-ref %standard-phases 'build))
(add-after 'build-utils 'install-utils
(assoc-ref %standard-phases 'install))
;; apparmor-profiles
;; FIXME: Tests need an AppArmor-enabled system.
(add-after 'install-utils 'chdir-profiles
(lambda _
(chdir "../profiles")))
(add-after 'chdir-profiles 'build-profiles
(assoc-ref %standard-phases 'build))
(add-after 'check-build 'install-profiles
(assoc-ref %standard-phases 'install)))))))
(propagated-inputs
(list libapparmor))
;; Python module `readline' needed
(native-inputs
(list bison flex gettext-minimal perl python which))
(license license:gpl2))))
(define-public pam-apparmor
(let ((base apparmor))
(package
(inherit base)
(name "pam-apparmor")
(arguments
(append
(list #:tests? #f) ;no tests
(substitute-keyword-arguments (package-arguments base)
((#:phases phases)
#~(modify-phases #$phases
(delete 'chdir-parser)
(delete 'chdir-utils)
(delete 'chdir-profiles)
(replace 'change-directory
(lambda _
(chdir "changehat/pam_apparmor"))))))))
(native-inputs (list pkg-config perl which))
(inputs (list libapparmor linux-pam))
(license license:bsd-3))))

View File

@ -123,7 +123,7 @@
(files '("share/arcan/scripts")))))
(inputs
`(("apr" ,apr)
("ffmpeg" ,ffmpeg)
("ffmpeg" ,ffmpeg-4)
("freetype" ,freetype)
("glib" ,glib)
("glu" ,glu)

View File

@ -161,6 +161,13 @@ dictionaries, including personal ones.")
(base32
"1svls9p7rsfi3hs0afh0cssj006qb4v1ik2yzqgj8hm10c6as2sm")))
(define-public aspell-dict-bn
(aspell-dictionary "bn" "Bengali"
#:version "0.01.1-1"
#:sha256
(base32
"1nc02jd67iggirwxnhdvlvaqm0xfyks35c4psszzj3dhzv29qgxh")))
(define-public aspell-dict-ca
(let ((version "2.5.0")
(sha256
@ -310,6 +317,14 @@ dictionaries, including personal ones.")
(base32
"0w2k5l5rbqpliripgqwiqixz5ghnjf7i9ggbrc4ly4vy1ia10rmc")))
(define-public aspell-dict-nb
(aspell-dictionary "nb" "Norwegian Bokmål"
#:version "0.50.1-2"
#:prefix "aspell-"
#:sha256
(base32
"1xvns7dwx2sc0msldj7r2hv0426913rg3dpnkxlrvnsyrxzjpbpc")))
(define-public aspell-dict-pl
(aspell-dictionary "pl" "Polish"
#:version "0.51-0"
@ -370,124 +385,6 @@ dictionaries, including personal ones.")
(base32
"0gb8j9iy1acdl11jq76idgc2lbc1rq3w04favn8cyh55d1v8phsk")))
;;;
;;; Hunspell packages made from the Aspell word lists.
;;;
(define* (aspell-word-list language synopsis
#:optional
(nick (string-map (lambda (chr)
(if (char=? #\_ chr)
#\-
chr))
(string-downcase language))))
(package
(name (string-append "hunspell-dict-" nick))
(version "2018.04.16")
(source (origin
(method url-fetch)
(uri (string-append
"mirror://sourceforge/wordlist/SCOWL/"
version "/scowl-" version ".tar.gz"))
(sha256
(base32
"11lkrnhwrf5mvrrq45k4mads3n9aswgac8dc25ba61c75alxb5rs"))))
(native-inputs
(list tar gzip perl aspell))
(build-system gnu-build-system)
(arguments
`(#:phases
(modify-phases %standard-phases
(add-after 'unpack 'make-reproducible
(lambda _
(substitute* "speller/README_en.txt.sh"
(("\\bdate\\b") ""))))
(delete 'configure)
(delete 'check)
(replace 'build
(lambda _
(substitute* "speller/make-hunspell-dict"
(("zip -9 .*$")
"return\n"))
(mkdir "speller/hunspell")
;; XXX: This actually builds all the dictionary variants.
(invoke "make" "-C" "speller" "hunspell")))
(replace 'install
(lambda* (#:key outputs #:allow-other-keys)
(let* ((out (assoc-ref %outputs "out"))
(hunspell (string-append out "/share/hunspell"))
(myspell (string-append out "/share/myspell"))
(doc (string-append out "/share/doc/"
,name))
(dot-dic ,(string-append "speller/" language ".dic")))
(mkdir-p myspell)
;; Usually there's only a 'LANGUAGE.dic' file, but for the "en"
;; dictionary, there no 'en.dic'. Instead, there's a set of
;; 'en*.dic' files, hence the 'find-files' call below.
(if (file-exists? dot-dic)
(install-file dot-dic hunspell)
(for-each (lambda (dic)
(install-file dic hunspell))
(find-files "speller"
,(string-append language ".*\\.dic$"))))
;; Install affix files corresponding to installed dictionaries
(for-each (lambda (dic)
(install-file (string-append
"speller/" (basename dic ".dic") ".aff")
hunspell))
(find-files hunspell ".*\\.dic$"))
(symlink hunspell (string-append myspell "/dicts"))
(for-each (lambda (file)
(install-file file doc))
(find-files "."
"^(Copyright|.*\\.(txt|org|md))$"))
#t))))))
(synopsis synopsis)
(description
"This package provides a dictionary for the Hunspell spell-checking
library.")
(home-page "http://wordlist.aspell.net/")
(license (non-copyleft "file://Copyright"
"Word lists come from several sources, all
under permissive licensing terms. See the 'Copyright' file."))))
(define-syntax define-word-list-dictionary
(syntax-rules (synopsis)
((_ name language (synopsis text))
(define-public name
(aspell-word-list language text)))
((_ name language nick (synopsis text))
(define-public name
(aspell-word-list language text nick)))))
(define-word-list-dictionary hunspell-dict-en
"en"
(synopsis "Hunspell dictionary for English"))
(define-word-list-dictionary hunspell-dict-en-au
"en_AU"
(synopsis "Hunspell dictionary for Australian English"))
(define-word-list-dictionary hunspell-dict-en-ca
"en_CA"
(synopsis "Hunspell dictionary for Canadian English"))
(define-word-list-dictionary hunspell-dict-en-gb
"en_GB-ise" "en-gb"
(synopsis "Hunspell dictionary for British English, with -ise endings"))
(define-word-list-dictionary hunspell-dict-en-gb-ize
"en_GB-ize"
(synopsis "Hunspell dictionary for British English, with -ize endings"))
(define-word-list-dictionary hunspell-dict-en-us
"en_US"
(synopsis "Hunspell dictionary for United States English"))
(define-public ispell
(package
(name "ispell")

View File

@ -12,6 +12,7 @@
;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
;;; Copyright © 2022 Felix Gruber <felgru@posteo.net>
;;; Copyright © 2022 Andy Tai <atai@atai.org>
;;;
;;; This file is part of GNU Guix.
;;;
@ -132,19 +133,21 @@ debugging information in STABS, DWARF 2, and CodeView 8 formats.")
(define-public lightning
(package
(name "lightning")
(version "2.1.3")
(version "2.2.0")
(source (origin
(method url-fetch)
(uri (string-append "mirror://gnu/lightning/lightning-"
version ".tar.gz"))
(sha256
(base32
"1jgxbq2cm51dzi3zhz38mmgwdcgs328mfl8iviw8dxn6dn36p1gd"))))
"03kwvn00qggys203vpzb2kq2asy0ql7x84ajk05a62yg3kzq8faf"))))
(build-system gnu-build-system)
(native-inputs (list zlib))
(arguments
;; Some tests fail when run in parallel.
`(#:parallel-tests? #f))
`(#:configure-flags
(list "--disable-static")
;; Some tests fail when run in parallel.
#:parallel-tests? #f))
(synopsis "Library for generating assembly code at runtime")
(description
"GNU Lightning is a library that generates assembly language code at

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2015-2023 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
;;; Copyright © 2015 Alex Kost <alezost@gmail.com>
@ -8,16 +8,16 @@
;;; Copyright © 2016, 2017 Alex Griffin <a@ajgrf.com>
;;; Copyright © 2016 Nikita <nikita@n0.is>
;;; Copyright © 2016 Lukas Gradl <lgradl@openmailbox.org>
;;; Copyright © 20162022 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 20162023 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2018, 2020 Oleg Pykhalov <go.wigust@gmail.com>
;;; Copyright © 2018 okapi <okapi@firemail.cc>
;;; Copyright © 2018, 2020, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 2018 Clément Lassieur <clement@lassieur.org>
;;; Copyright © 2018 Brett Gilio <brettg@gnu.org>
;;; Copyright © 2018, 2019 Marius Bakke <mbakke@fastmail.com>
;;; Copyright © 2018, 2019, 2022 Marius Bakke <marius@gnu.org>
;;; Copyright © 2018, 2021 Thorsten Wilms <t_w_@freenet.de>
;;; Copyright © 2018 Eric Bavier <bavier@member.fsf.org>
;;; Copyright © 2018 Brendan Tildesley <mail@brendan.scot>
;;; Copyright © 2018, 2022 Brendan Tildesley <mail@brendan.scot>
;;; Copyright © 2019, 2021 Pierre Langlois <pierre.langlois@gmx.com>
;;; Copyright © 2019, 2021 Leo Famulari <leo@famulari.name>
;;; Copyright © 2019 Rutger Helling <rhelling@mykolab.com>
@ -39,6 +39,8 @@
;;; Copyright © 2022 Arjan Adriaanse <arjan@adriaan.se>
;;; Copyright © 2022 Juliana Sims <jtsims@protonmail.com>
;;; Copyright © 2022 Simon Streit <simon@netpanic.org>
;;; Copyright © 2022 Andy Tai <atai@atai.org>
;;; Copyright © 2023 Sergiu Ivanov <sivanov@colimite.fr>
;;;
;;; This file is part of GNU Guix.
;;;
@ -145,7 +147,8 @@
#:use-module (guix packages)
#:use-module (guix utils)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-26))
#:use-module (srfi srfi-26)
#:use-module (ice-9 match))
(define-public opensles
(package
@ -236,7 +239,7 @@ promoting the market for advanced audio.")
("openal" ,openal)))
(synopsis "Software Synthesizer")
(description "WildMIDI is a simple software midi player which has a core
softsynth library that can be use with other applications.")
softsynth library that can be used with other applications.")
(home-page "https://www.mindwerks.net/projects/wildmidi/")
(license
(list
@ -366,7 +369,12 @@ Linux kernel.")
"07857vdkak306d9s5g6fhmjyxk7vijzjhkmqb15s7ihfxx9lx8xb"))))
(build-system cmake-build-system)
(arguments
'(#:tests? #f)) ; no check target
'(#:tests? #f ;no check target
;; XXX: Building with '-fsanitize=undefined' leads to embedded C++ STL
;; header file names in libgme.so, meaning that libgme retains a
;; reference to GCC. Disable UBSAN to avoid that.
#:configure-flags '("-DENABLE_UBSAN=OFF")))
(home-page "https://bitbucket.org/mpyne/game-music-emu")
(synopsis "Video game music file playback library")
(description
@ -470,31 +478,6 @@ by MusicIP.")
(home-page "https://code.google.com/archive/p/musicip-libofa/")
(license license:gpl2+)))
(define-public faac
(package
(name "faac")
(version "1.30")
(source
(origin
(method url-fetch)
(uri
(string-append "mirror://sourceforge/faac/faac-src"
"/faac-" version "/faac-1_30.tar.gz"))
(sha256
(base32 "1lmj0dib3mjp84jhxc5ddvydkzzhb0gfrdh3ikcidjlcb378ghxd"))))
(build-system gnu-build-system)
(native-inputs
(list autoconf automake libtool pkg-config))
(synopsis "Freeware Advanced Audio Coder")
(description "FAAC is an MPEG-4 and MPEG-2 AAC encoder.")
(home-page "https://www.audiocoding.com/faac.html")
(license
(list
;; ISO MPEG-4 reference code.
license:gpl2+
;; Others.
license:lgpl2.0+))))
(define-public libtimidity
(package
(name "libtimidity")
@ -622,7 +605,11 @@ Filter) modules follow the convention of 1V / Octave.")
"--enable-samplerate"
"--enable-avcodec")))
(inputs
(list jack-1 libsndfile libsamplerate fftwf ffmpeg)) ; for libavcodec
(list jack-1
libsndfile
libsamplerate
ffmpeg-4 ;for libavcodec
fftwf))
(native-inputs
(list pkg-config))
(home-page "https://aubio.org/")
@ -634,6 +621,100 @@ 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")
(version "1.7.1")
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/c4dm/qm-dsp")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32
"1vkb1xr2hjcaw88gig7rknlwsx01lm0w94d2z0rk5vz9ih4fslvv"))))
(build-system gnu-build-system)
(arguments
(list
#:make-flags
#~(list #$(string-append "-f" "build/"
(match (or (%current-target-system)
(%current-system))
("x86_64-linux" "linux/Makefile.linux64")
("i686-linux" "linux/Makefile.linux32")
(target
(if (string-suffix? "-mingw32" target)
"mingw32/Makefile.mingw32"
"general/Makefile.inc"))))
(string-append "CC=" #$(cc-for-target)))
#:phases
#~(modify-phases %standard-phases
(delete 'configure) ;no configure script
(replace 'install
(lambda* (#:key outputs #:allow-other-keys)
(let* ((lib (string-append #$output "/lib"))
(include (string-append #$output "/include")))
(install-file "libqm-dsp.a" lib)
(mkdir-p include)
(for-each (lambda (file)
(unless (or (string-prefix? "./build" file)
(string-prefix? "./include" file))
(install-file file (string-append include "/"
(dirname file)))))
(find-files "." "\\.h$"))))))
#:test-target "tests"))
(home-page "https://code.soundsoftware.ac.uk/projects/qm-dsp")
(synopsis "C++ library of functions for DSP and Music Informatics purposes")
(description
"QM-DSP is a C++ library of functions for DSP and Music Informatics
purposes developed at Queen Mary, University of London.")
(license license:gpl2+)))
(define (ardour-rpath-phase major-version)
`(lambda* (#:key outputs #:allow-other-keys)
(let ((libdir (string-append (assoc-ref outputs "out")
@ -647,13 +728,12 @@ streams from live audio.")
libdir "/engines" ":"
libdir "/panners" ":"
libdir "/surfaces" ":"
libdir "/vamp" "\"]"))))
#t))
libdir "/vamp" "\"]"))))))
(define-public ardour
(package
(name "ardour")
(version "6.9")
(version "7.2")
(source (origin
(method git-fetch)
(uri (git-reference
@ -667,19 +747,19 @@ streams from live audio.")
"libs/ardour/revision.cc"
(lambda (port)
(format port ,(string-append "#include \"ardour/revision.h\"
namespace ARDOUR { const char* revision = \"" version "\" ; const char* date = \"\"; }"))
#t)))
namespace ARDOUR { const char* revision = \"" version "\" ; const char* date = \"\"; }")))))
(sha256
(base32
"0vlcbd70y0an881zv87kc3akmaiz4w7whsy3yaiiqqjww35jg1mm"))
"1gv0wkzyx59lbnaf5iz9yva4akrd2zkhsmdk8wda3wz06zmk4w1r"))
(file-name (string-append name "-" version))))
(build-system waf-build-system)
(arguments
`(#:configure-flags '("--cxx11" ; required by gtkmm
`(#:configure-flags '("--cxx11" ; required by gtkmm
"--optimize"
"--no-phone-home" ; don't contact ardour.org
"--freedesktop" ; build .desktop file
"--test") ; build unit tests
"--no-phone-home" ; don't contact ardour.org
"--freedesktop" ; build .desktop file
"--test" ; build unit tests
"--use-external-libs") ; use system libraries
#:phases
(modify-phases %standard-phases
(add-after 'unpack 'set-rpath-in-LDFLAGS
@ -704,8 +784,11 @@ namespace ARDOUR { const char* revision = \"" version "\" ; const char* date = \
(string-append share "/applications/"))
(install-file (string-append "build/gtk2_ardour/ardour"
ver ".appdata.xml")
(string-append share "/appdata/")))
#t)))
(string-append share "/appdata/")))))
(add-after 'install 'install-man-page
(lambda* (#:key outputs #:allow-other-keys)
(install-file "ardour.1" (string-append (assoc-ref outputs "out")
"/share/man/man1")))))
#:test-target "test"))
(inputs
(list alsa-lib
@ -719,13 +802,17 @@ namespace ARDOUR { const char* revision = \"" version "\" ; const char* date = \
fftw
fftwf
flac
fluidsynth
glibmm
gtkmm-2
hicolor-icon-theme
hidapi
jack-1
libarchive
libart-lgpl
libgnomecanvasmm
liblo
libltc
libogg
libsamplerate
libsndfile
@ -740,6 +827,7 @@ namespace ARDOUR { const char* revision = \"" version "\" ; const char* date = \
pangomm
python-rdflib
pulseaudio
qm-dsp
readline
redland
rubberband
@ -751,11 +839,11 @@ namespace ARDOUR { const char* revision = \"" version "\" ; const char* date = \
taglib
vamp))
(native-inputs
`(("cppunit" ,cppunit)
("gettext" ,gettext-minimal)
("itstool" ,itstool)
("perl" ,perl)
("pkg-config" ,pkg-config)))
(list cppunit
gettext-minimal
itstool
perl
pkg-config))
(home-page "https://ardour.org")
(synopsis "Digital audio workstation")
(description
@ -767,19 +855,16 @@ engineers, musicians, soundtrack editors and composers.")
(define-public audacity
(package
(name "audacity")
(version "3.1.3")
(version "3.2.3")
(source
(origin
;; If built from the release tag, Audacity will describe itself
;; as an "Alpha test version" and suggest to users that they use
;; the "latest stable released version".
(method url-fetch)
(uri (string-append "https://github.com/audacity/audacity/releases/download/"
"Audacity-" version "/audacity-" version
"-source.tar.gz"))
(method git-fetch)
(uri (git-reference
(url "https://github.com/audacity/audacity")
(commit (string-append "Audacity-" version))))
(file-name (git-file-name name version))
(sha256
(base32
"189agx11361k9j958s6q5bngnnfx0rwaf0dwbjxy6fwvsb1wv3px"))
(base32 "0wg75fblxlnrn5kqvg0w1fi2pwdkn1nd6vgya3sad84l3ki7wpyh"))
(patches (search-patches "audacity-ffmpeg-fallback.patch"))
(modules '((guix build utils)))
(snippet
@ -803,20 +888,19 @@ engineers, musicians, soundtrack editors and composers.")
#t))))
(build-system cmake-build-system)
(inputs
(list wxwidgets-3.1
(list wxwidgets
gtk+
alsa-lib
jack-1
expat
lame
linux-libre-headers
flac
ffmpeg
libid3tag
libjpeg-turbo
libmad
;;("libsbsms" ,libsbsms) ;bundled version is modified
libsndfile
mpg123
soundtouch
soxr ;replaces libsamplerate
sqlite
@ -827,24 +911,32 @@ engineers, musicians, soundtrack editors and composers.")
lilv ;for lv2
suil ;for lv2
portaudio
portmidi))
portmidi
wavpack))
(native-inputs
`(("autoconf" ,autoconf)
("automake" ,automake)
("gettext" ,gettext-minimal) ;for msgfmt
("libtool" ,libtool)
("pkg-config" ,pkg-config)
("python" ,python)
("which" ,which)))
(list autoconf
automake
gettext-minimal ;for msgfmt
libtool
pkg-config
python
which))
(arguments
`(#:configure-flags
(list
"-Daudacity_conan_enabled=off"
"-Daudacity_lib_preference=system"
;; Disable support for VST 3 SDK, which is not yet in Guix (and has
;; a dubious licensing agreement despite GPL code).
"-Daudacity_has_vst3=off"
;; TODO: enable this flag once we've packaged all dependencies
;; "-Daudacity_obey_system_dependencies=on"
;; disable crash reports, updates, ..., anything that phones home
"-Daudacity_has_networking=off")
"-Daudacity_has_networking=off"
;; When building from Git — even from a release tag — this is undefined,
;; and Audacity assumes that is is an alpha version and includes debug
;; symbols and extra code. Force level 2, release.
"-DAUDACITY_BUILD_LEVEL=2")
#:imported-modules ((guix build glib-or-gtk-build-system)
,@%cmake-build-system-modules)
#:modules
@ -862,24 +954,20 @@ engineers, musicians, soundtrack editors and composers.")
"CMAKE_BUILD_WITH_INSTALL_RPATH TRUE")
(("CMAKE_INSTALL_RPATH_USE_LINK_PATH [A-Z]*")
"CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE"))
(substitute* "libraries/image-compiler/CMakeLists.txt"
(("PROPERTIES")
;; This scripts needs to run during build, make sure it finds
;; the required libraries.
"PROPERTIES BUILD_WITH_INSTALL_RPATH FALSE"))
(substitute* "src/CMakeLists.txt"
;; Despite the name, this script breaks rpath. Don't run it.
(("install.*linux/fix_rpath\\.cmake.*")
"")
(("-Wl,--disable-new-dtags") "-Wl,--enable-new-dtags"))))
(add-after 'unpack 'comment-out-revision-ident
(lambda _
(substitute* "src/CMakeLists.txt"
(("file\\( TOUCH \".*RevisionIdent\\.h\" \\)" directive)
(string-append "# " directive)))
(substitute* "src/AboutDialog.cpp"
(("(.*RevisionIdent\\.h.*)" include-line)
(string-append "// " include-line)))))
(add-after 'unpack 'use-upstream-headers
(lambda* (#:key inputs #:allow-other-keys)
(substitute* '("libraries/lib-files/FileNames.cpp")
(("\"/usr/include/linux/magic.h\"") "<linux/magic.h>"))))
(add-after 'install 'delete-gratuitous-script
(lambda* (#:key outputs #:allow-other-keys)
(delete-file (string-append (assoc-ref outputs "out")
"/audacity"))))
(add-after 'wrap-program 'glib-or-gtk-wrap
(assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap)))
;; The test suite is not "well exercised" according to the developers,
@ -1121,6 +1209,39 @@ guitar amplification and a small range of classic effects, signal processors and
generators of mostly elementary and occasionally exotic nature.")
(license license:gpl3+)))
(define-public iir
(package
(name "iir")
(version "1.9.4")
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/berndporr/iir1")
(commit version)))
(file-name (git-file-name name version))
(sha256
(base32 "1fqxn0qlvykpk9hiliivmkjjcz3g1bp83yd0zfm82r14abkjbj2g"))))
(build-system cmake-build-system)
(arguments
(list
#:phases
#~(modify-phases %standard-phases
(add-after 'install 'delete-static-library
(lambda* (#:key outputs #:allow-other-keys)
(let ((out (assoc-ref outputs "out")))
(delete-file (string-append out "/lib/libiir_static.a"))))))))
(home-page "https://berndporr.github.io/iir1/")
(synopsis
"Real-time C++ @acronym{IIR, infinite impulse response} filter library")
(description
"This C++ library implements the Butterworth, RBJ, and Chebychev
@acronym{IIR, infinite impulse response} filters. Samples are processed one by
one, in real time. It can easily import coefficients generated with Python
(@code{scipy}). It also avoids memory leaks by allocating memory at compile
time, using templates, instead of calling @code{malloc()} or @code{new}.")
(license license:expat)))
(define-public infamous-plugins
(package
(name "infamous-plugins")
@ -1400,7 +1521,7 @@ object library.")
(define-public csound
(package
(name "csound")
(version "6.14.0")
(version "6.16.2")
(source
(origin
(method git-fetch)
@ -1409,7 +1530,7 @@ object library.")
(commit version)))
(file-name (git-file-name name version))
(sha256
(base32 "1sr9knfhbm2m0wpkjq2l5n471vnl51wy4p6j4m95zqybimzb4s2j"))))
(base32 "1lgasyk8j4cl9178vci1dph63nks3cgwhf8y1d04z9dc8gg15dyn"))))
(build-system cmake-build-system)
(native-inputs
(list bison flex gettext-minimal zlib))
@ -2245,6 +2366,8 @@ especially for creating reverb effects. It supports impulse responses with 1,
2 or 4 channels, in any soundfile format supported by libsndfile.")
(license license:gpl2+)))
;; Packages depending on JACK should always prefer jack-2.
;; JACK1 is provided for legacy applications
(define-public jack-1
(package
(name "jack")
@ -2290,9 +2413,8 @@ synchronous execution of all clients, and low latency operation.")
;; licensed under the LGPL in order to allow for proprietary usage.
(license (list license:gpl2+ license:lgpl2.1+))))
;; Packages depending on JACK should always prefer jack-1. Both jack-1 and
;; jack-2 implement the same API. JACK2 is provided primarily as a client
;; program for users who might benefit from the D-BUS features.
;; Packages depending on JACK should always prefer jack-2. Both jack-1 and
;; jack-2 implement the same API.
(define-public jack-2
(package
(inherit jack-1)
@ -2344,20 +2466,102 @@ synchronous execution of all clients, and low latency operation.")
;; Most files are under GPLv2+, but some headers are under LGPLv2.1+
(license (list license:gpl2+ license:lgpl2.1+))))
(define-public jack-example-tools
(package
(name "jack-example-tools")
(version "3")
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/jackaudio/jack-example-tools")
(commit version)))
(file-name (git-file-name name version))
(sha256
(base32
"0x684clxqib1bq3zvvrqlh7hb3arb1bf672xyx1jbwv76dcmm5mh"))))
(build-system meson-build-system)
(inputs
(list alsa-lib
jack-2
libsndfile
opus
readline))
(native-inputs
(list pkg-config))
(home-page "https://github.com/jackaudio/jack-example-tools")
(synopsis "Tools for JACK connections")
(description "This package provides tools for managing JACK connections
and testing or configuring the JACK session. Tools include @code{jack_lsp},
@code{jack_connect}, and @code{jack_transport}.")
;; Most files are under GPLv2+, but zalsa is GPLv3+.
(license (list license:gpl2+ license:gpl3+))))
(define-public jacktrip
(package
(name "jacktrip")
(version "1.6.8")
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/jacktrip/jacktrip/")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32 "0719ng799kingv0y9yk07bvnmprk25c09ph3yaia5dhapg0jz17m"))))
(build-system gnu-build-system)
(arguments
(list
#:phases
'(modify-phases %standard-phases
(replace 'configure
(lambda* (#:key outputs #:allow-other-keys)
(invoke "qmake"
(string-append "PREFIX="
(assoc-ref outputs "out"))
"-config" "novs"
"-config" "noupdater"
"jacktrip.pro"))))))
(inputs
(list jack-2
python
python-jinja2
python-pyyaml
qtbase-5
rtaudio))
(native-inputs
(list pkg-config qtbase-5)) ;for qmake
(home-page "https://jacktrip.github.io/jacktrip/")
(synopsis "Multi-machine audio system for network music performance")
(description
"JackTrip is a multi-machine audio system used for network music
performance over the Internet. It supports any number of channels (as many as
the computer/network can handle) of bidirectional, high quality, uncompressed
audio signal streaming.")
(license (list license:gpl3+ license:lgpl3 license:expat))))
(define-public jalv
(package
(name "jalv")
(version "1.6.6")
(version "1.6.8")
(source (origin
(method url-fetch)
(uri (string-append "https://download.drobilla.net/jalv-"
version ".tar.bz2"))
version ".tar.xz"))
(sha256
(base32
"05lycfq0f06zjp5xqvzjz9hx9kmqx72yng1lghh76hv63dw43lcj"))))
(build-system waf-build-system)
"1q8mzjv577vdi64s47gd4pg0ydzxvs32cwrb1d64v90f52qpgbpd"))))
(build-system meson-build-system)
(arguments
`(#:tests? #f)) ; no check target
`(#:tests? #f ; no check target
#:phases
(modify-phases %standard-phases
(add-before 'configure 'build-PIC
;; The default -fPIE #errors when combined with our Qt packages.
;; Work around the broken meson.build script clobbering c_args.
(lambda _
(substitute* "meson.build"
(("'-DZIX_STATIC'" match)
(string-append match ", '-fPIC'"))))))))
(inputs
(list lv2
lilv
@ -2600,14 +2804,13 @@ compensation, (de)interleaving, and byte-swapping
(define-public python-pyaudio
(package
(name "python-pyaudio")
(version "0.2.11")
(version "0.2.12")
(source
(origin
(method url-fetch)
(uri (pypi-uri "PyAudio" version))
(sha256
(base32
"0x7vdsigm7xgvyg3shd3lj113m8zqj2pxmrgdyj66kmnw0qdxgwk"))))
(base32 "17pvc27pn2xbisbq7nibhidyw8h2kyms7g2xbyx7nlxwfbdzbpam"))))
(build-system python-build-system)
(inputs
(list portaudio))
@ -2617,6 +2820,38 @@ compensation, (de)interleaving, and byte-swapping
cross-platform audio input/output stream library.")
(license license:expat)))
(define-public python-pulsectl
(package
(name "python-pulsectl")
(version "22.3.2")
(source (origin
(method url-fetch)
(uri (pypi-uri "pulsectl" version))
(sha256
(base32
"115ha1cwpd2r84ssnxdbr59hgs0jbx0lz3xpqli64kmxxqf4w5yc"))))
(build-system python-build-system)
(inputs (list pulseaudio))
(arguments
`(#:tests? #f ; tests try to communicate with PulseAudio
#:phases
(modify-phases %standard-phases
(add-after 'unpack 'patch-path
(lambda* (#:key inputs #:allow-other-keys)
(substitute* "pulsectl/_pulsectl.py"
(("libpulse.so.0")
(string-append (search-input-file inputs "/lib/libpulse.so.0")))))))))
(home-page "https://github.com/mk-fg/python-pulse-control")
(synopsis
"Python bindings for mixer-like controls in PulseAudio")
(description
"This package provides a Python high-level interface and ctypes-based
bindings for PulseAudio (libpulse), to use in simple synchronous code.
This wrapper is mostly for mixer-like controls and introspection-related
operations, as opposed to e.g. submitting sound samples to play and
player-like clients.")
(license license:expat)))
(define-public python-pyliblo
(package
(name "python-pyliblo")
@ -2997,6 +3232,8 @@ including air absorption, occlusion, and environmental reverb, are available
through the EFX extension. It also facilitates streaming audio, multi-channel
buffers, and audio capture.")
(home-page "https://openal-soft.org/")
(properties
'((upstream-name . "openal-soft")))
(license license:lgpl2.0+)))
(define-public freealut
@ -3088,19 +3325,23 @@ different audio devices such as ALSA or PulseAudio.")
(define-public qjackctl
(package
(name "qjackctl")
(version "0.9.7")
(version "0.9.8")
(source (origin
(method url-fetch)
(uri (string-append "mirror://sourceforge/qjackctl/qjackctl/"
version "/qjackctl-" version ".tar.gz"))
(sha256
(base32
"104hfvr15v8cbkzil8slrqj48y3fl7lx060alj80q1sjh5hl6j2j"))))
"1rvxgxd7bbv7yazcpw3ily0jlra8ms5c0kkf7cybgivahw59zk87"))))
(build-system cmake-build-system)
(arguments
'(#:tests? #f)) ; no check target
(inputs
(list jack-1 alsa-lib portaudio qtbase-5 qtx11extras))
(list alsa-lib
jack-1
portaudio
qtbase-5
qtsvg-5))
(native-inputs
(list pkg-config qttools-5))
(home-page "https://qjackctl.sourceforge.io/")
@ -3587,7 +3828,8 @@ analysis plugins or audio feature extraction plugins.")
(symlink
(search-input-file inputs
(string-append "/share/automake-"
,(package-version automake)
,(version-major+minor
(package-version automake))
"/ar-lib"))
"ar-lib")
#t)))))
@ -4315,7 +4557,7 @@ simplified, although really accurate, measuring tools.")
,home-page))
#t))))
(build-system gnu-build-system)
(inputs (list ffmpeg sox))
(inputs (list ffmpeg-4 sox))
(synopsis "Tool to adjust loudness of media files")
(description
"BS1770GAIN is a loudness scanner compliant with ITU-R BS.1770 and its
@ -4701,7 +4943,7 @@ representations.")
(define-public cava
(package
(name "cava")
(version "0.7.4")
(version "0.8.3")
(source (origin
(method git-fetch)
(uri (git-reference
@ -4710,15 +4952,7 @@ representations.")
(file-name (git-file-name name version))
(sha256
(base32
"1mziklmqifhnb4kg9ia2r56r8wjn6xp40bkpf484hsgqvnrccl86"))
(modules '((guix build utils)))
(snippet
#~(begin
(delete-file-recursively "iniparser")
(substitute* "configure.ac"
(("AC_CONFIG_FILES\\(iniparser/Makefile\\)") ""))
(substitute* "Makefile.am"
(("SUBDIRS = iniparser") ""))))))
"0v0l6al3ygj6lq224ddffb1f10yv4218k7l82hbba8d7dj2rc67b"))))
(build-system gnu-build-system)
(native-inputs (list autoconf automake libtool))
(inputs (list fftw ncurses pulseaudio iniparser))
@ -4748,7 +4982,7 @@ representations.")
(string-append #$output
"/share/doc/examples")))
(find-files "example_files")))))))
(home-page "https://karlstav.github.io/cava/")
(home-page "https://github.com/karlstav/cava")
(synopsis "Console audio visualizer for ALSA, MPD, and PulseAudio")
(description "C.A.V.A. is a bar audio spectrum visualizer for the terminal
using ALSA, MPD, PulseAudio, or a FIFO buffer as its input.")
@ -4816,10 +5050,41 @@ library supports sample rates up to 96 kHz and up to eight channels (7.1
(license (license:fsf-free "https://github.com/mstorsjo/fdk-aac/blob/master/NOTICE"
"https://www.gnu.org/licenses/license-list.html#fdk"))))
(define-public libfreeaptx
(package
(name "libfreeaptx")
(version "0.1.1")
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/iamthehorker/libfreeaptx")
(commit version)))
(file-name (git-file-name name version))
(sha256
(base32
"1fm5041nd08yzg0m9474g0943lb3x54zmn59b53nhvxan8x22ibq"))))
(build-system gnu-build-system)
(arguments
(list #:tests? #f ;no tests.
#:make-flags
#~(list
(string-append "PREFIX=" #$output)
(string-append "LDFLAGS=" "-Wl,-rpath=" #$output "/lib")
(string-append "CC=" #$(cc-for-target)))
#:phases
#~(modify-phases %standard-phases
(delete 'configure))))
(home-page "https://github.com/iamthehorker/libfreeaptx")
(synopsis "aptX codec library")
(description "libfreeaptx is an implementation of the Audio Processing
Technology codecs aptX and aptX HD, mainly intended for use with an A2DP
bluetooth profile.")
(license license:lgpl2.1+)))
(define-public libopenshot-audio
(package
(name "libopenshot-audio")
(version "0.2.2")
(version "0.3.0")
(source (origin
(method git-fetch)
(uri (git-reference
@ -4828,7 +5093,7 @@ library supports sample rates up to 96 kHz and up to eight channels (7.1
(file-name (git-file-name name version))
(sha256
(base32
"03dygh85riljk7dpn5a5a0d22a2kz45fs13gzwqgnbzzr1k17p2y"))))
"1y3apyn71ysks88bv71knjvk832imnbpbb8mgib3q9b8pvdmjw3g"))))
(build-system cmake-build-system)
(inputs
(list alsa-lib
@ -4854,7 +5119,7 @@ library.")
(define-public faudio
(package
(name "faudio")
(version "21.10")
(version "22.11")
(source
(origin
(method git-fetch)
@ -4863,7 +5128,7 @@ library.")
(commit version)))
(file-name (git-file-name name version))
(sha256
(base32 "0l9bicg8v1shsyq9k48zh4wv5kwfs6lfjmm9blzd13xrgmhd07w2"))))
(base32 "0jdfslxgzysqy0r3nfbsyj6dz0n36fncbsczm9zznxv5phic7g87"))))
(arguments
'(#:tests? #f ; No tests.
#:configure-flags '("-DGSTREAMER=ON")))
@ -4942,7 +5207,7 @@ stream to one or more IceCast and/or ShoutCast servers.")
(define-public libltc
(package
(name "libltc")
(version "1.3.1")
(version "1.3.2")
(source
(origin
(method url-fetch)
@ -4950,8 +5215,7 @@ stream to one or more IceCast and/or ShoutCast servers.")
(string-append "https://github.com/x42/libltc/releases/download/v"
version "/libltc-" version ".tar.gz"))
(sha256
(base32
"173h9dgmain3nyrwk6q2d7yl4fnh4vacag4s2p01n5b7nyrkxrjh"))))
(base32 "0j8j7cnw02arh8122d13bwkps1c0mi2xqq55gyi2bs91dk6l4v8a"))))
(build-system gnu-build-system)
(arguments
`(#:parallel-tests? #f)) ;tests fail otherwise
@ -5843,7 +6107,7 @@ and DSD streams.")
(define-public qpwgraph
(package
(name "qpwgraph")
(version "0.3.5")
(version "0.3.9")
(source (origin
(method git-fetch)
(uri (git-reference
@ -5852,12 +6116,12 @@ and DSD streams.")
(file-name (git-file-name name version))
(sha256
(base32
"01f4zabn22dp0yl7szxck6gkbayk1p5iqajfgzls7mdkba7515b6"))))
"1zdqgn2a139bazazbccpb65zn7qdynndwm9mafq54nkpa7n7lri8"))))
(build-system cmake-build-system)
(arguments (list #:tests? #f)) ;; no tests
(inputs (list alsa-lib
libxkbcommon
pipewire-0.3
pipewire
qtbase
qtsvg))
(native-inputs (list pkg-config))

View File

@ -43,6 +43,7 @@
(method url-fetch)
(uri (string-append "https://download.savannah.nongnu.org/releases/"
name "/" name "-" version ".tar.gz"))
(patches (search-patches "oath-toolkit-xmlsec-compat.patch"))
(sha256
(base32 "1aa620k05lsw3l3slkp2mzma40q3p9wginspn9zk8digiz7dzv9n"))))
(build-system gnu-build-system)
@ -93,7 +94,7 @@ data.")
(define-public oauth2l
(package
(name "oauth2l")
(version "1.2.2")
(version "1.3.0")
(source
(origin
(method git-fetch)
@ -102,7 +103,7 @@ data.")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32 "0a9x0b31ybyjg0k7923xw6zr6crm0kigcn8g6hyr228nbvw35r8w"))))
(base32 "0010870xdhf0aysrs2vhl3yxd4gh87qp7mjpyp7qy1n2rz55pgbc"))))
(build-system go-build-system)
(arguments
'(#:import-path "github.com/google/oauth2l"))

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,99 @@
# -*- coding: utf-8 -*-
# GNU Guix --- Functional package management for GNU
# Copyright © 2021, 2022 Lars-Dominik Braun <lars@6xq.net>
#
# This file is part of GNU Guix.
#
# GNU Guix is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or (at
# your option) any later version.
#
# GNU Guix is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
# This version adds a small change to accommodate missing python-setuptools.
# TODO: Merge with sanity-check.py in the next core-updates cycle.
from __future__ import print_function # Python 2 support.
import importlib
import sys
import traceback
try:
import pkg_resources
except ImportError:
print('Warning: Skipping, because python-setuptools are not available.')
sys.exit(0)
try:
from importlib.machinery import PathFinder
except ImportError:
PathFinder = None
ret = 0
# Only check site-packages installed by this package, but not dependencies
# (which pkg_resources.working_set would include). Path supplied via argv.
ws = pkg_resources.find_distributions(sys.argv[1])
for dist in ws:
print('validating', repr(dist.project_name), dist.location)
try:
print('...checking requirements: ', end='')
req = str(dist.as_requirement())
# dist.activate() is not enough to actually check requirements, we
# have to .require() it.
pkg_resources.require(req)
print('OK')
except Exception as e:
print('ERROR:', req, repr(e))
ret = 1
continue
# Try to load top level modules. This should not have any side-effects.
try:
metalines = dist.get_metadata_lines('top_level.txt')
except (KeyError, EnvironmentError):
# distutils (i.e. #:use-setuptools? #f) will not install any metadata.
# This file is also missing for packages built using a PEP 517 builder
# such as poetry.
print('WARNING: cannot determine top-level modules')
continue
for name in metalines:
# Only available on Python 3.
if PathFinder and PathFinder.find_spec(name) is None:
# Ignore unavailable modules, often C modules, which were not
# installed at the top-level. Cannot use ModuleNotFoundError,
# because it is raised by failed imports too.
continue
try:
print('...trying to load module', name, end=': ')
importlib.import_module(name)
print('OK')
except Exception:
print('ERROR:')
traceback.print_exc(file=sys.stdout)
ret = 1
# Try to load entry points of console scripts too, making sure they
# work. They should be removed if they don't. Other groups may not be
# safe, as they can depend on optional packages.
for group, v in dist.get_entry_map().items():
if group not in {'console_scripts', 'gui_scripts'}:
continue
for name, ep in v.items():
try:
print('...trying to load endpoint', group, name, end=': ')
ep.load()
print('OK')
except Exception:
print('ERROR:')
traceback.print_exc(file=sys.stdout)
ret = 1
sys.exit(ret)

View File

@ -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

View File

@ -33,11 +33,11 @@
#:use-module (gnu packages flashing-tools)
#:use-module (gnu packages java)
#:use-module (gnu packages java-graphics)
#:use-module (gnu packages java-xml)
#:use-module (gnu packages libusb)
#:use-module (gnu packages pkg-config)
#:use-module (gnu packages textutils)
#:use-module (gnu packages version-control)
#:use-module (gnu packages xml))
#:use-module (gnu packages version-control))
;; XXX The patch does not apply to libusb 1.0.24.
;; See https://github.com/axoloti/axoloti/issues/464
@ -98,8 +98,6 @@
(srfi srfi-26)
(ice-9 match)
(ice-9 regex))
#:imported-modules ((guix build syscalls)
,@%gnu-build-system-modules)
#:phases
(modify-phases %standard-phases
(add-after 'unpack 'patch-paths
@ -232,7 +230,6 @@ runtime.")
(sxml xpath)
(sxml transform))
#:imported-modules ((guix build ant-build-system)
(guix build syscalls)
,@%gnu-build-system-modules)
#:phases
(modify-phases %standard-phases
@ -390,7 +387,6 @@ patcher application.")))
(sxml xpath)
(sxml transform))
#:imported-modules ((guix build ant-build-system)
(guix build syscalls)
,@%gnu-build-system-modules)
#:phases
(modify-phases %standard-phases

View File

@ -15,7 +15,7 @@
;;; Copyright © 2019 Alex Vong <alexvong1995@gmail.com>
;;; Copyright © 2019, 2022 Marius Bakke <marius@gnu.org>
;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
;;; Copyright © 2020 Nicolas Goaziou <mail@nicolasgoaziou.fr>
;;; Copyright © 2020, 2022 Nicolas Goaziou <mail@nicolasgoaziou.fr>
;;; Copyright © 2020 Marcin Karpezo <sirmacik@wioo.waw.pl>
;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
;;; Copyright © 2021 Timothy Sample <samplet@ngyro.com>
@ -323,7 +323,8 @@ reading and writing archives compressed using various compression filters such
as gzip and bzip2. The library is inherently stream-oriented; readers
serially iterate through the archive, writers serially add things to the
archive. In particular, note that there is currently no built-in support for
random access nor for in-place modification.")
random access nor for in-place modification. This package provides the
@command{bsdcat}, @command{bsdcpio} and @command{bsdtar} commands.")
(license license:bsd-2)))
(define-public rdup
@ -513,7 +514,7 @@ rdiff-backup is easy to use and settings have sensible defaults.")
(define-public rsnapshot
(package
(name "rsnapshot")
(version "1.4.4")
(version "1.4.5")
(source
(origin
(method url-fetch)
@ -521,7 +522,7 @@ rdiff-backup is easy to use and settings have sensible defaults.")
"https://github.com/rsnapshot/rsnapshot/releases/download/"
version "/rsnapshot-" version ".tar.gz"))
(sha256
(base32 "0yc5k2fhm54ypxgm1fsaf8vrg5b7qbvbsqk371n6baf592vprjy1"))))
(base32 "0hl2ncld0xkwlnv1cqjmmnld2nlp65alkkdacs11wl95r80mxdqh"))))
(build-system gnu-build-system)
(arguments
`(#:phases
@ -623,117 +624,114 @@ detection, and lossless compression.")
(define-public borg
(package
(name "borg")
(version "1.2.1")
(version "1.2.3")
(source
(origin
(method url-fetch)
(uri (pypi-uri "borgbackup" version))
(sha256
(base32 "0cy6chpa053rlvy4448vf9klb5v0v1vq3l76gqa3mcrwjb8y574z"))
(base32 "11b7jqv9sw22a9512b270d12k3mrcgmmcaimh6bgm5iwcgw1h973"))
(modules '((guix build utils)))
(snippet
'(begin
;; Delete files generated by Cython. We used to have a regex
;; that created the list of generated files but Borg has
;; added new non-generated C files that cause the regex to
;; generate the wrong list.
(for-each delete-file
'("src/borg/algorithms/checksums.c"
"src/borg/chunker.c"
"src/borg/compress.c"
"src/borg/crypto/low_level.c"
"src/borg/hashindex.c"
"src/borg/item.c"
"src/borg/platform/darwin.c"
"src/borg/platform/freebsd.c"
"src/borg/platform/linux.c"
"src/borg/platform/posix.c"
"src/borg/platform/syncfilerange.c"
"src/borg/platform/windows.c"))
;; Remove bundled shared libraries.
(with-directory-excursion "src/borg/algorithms"
(for-each delete-file-recursively
(list "lz4" "xxh64" "zstd")))
#t))))
#~(begin
;; Delete files generated by Cython. We used to have a regex that
;; created the list of generated files but Borg has added new
;; non-generated C files that cause the regex to generate the
;; wrong list.
(for-each delete-file
'("src/borg/algorithms/checksums.c"
"src/borg/chunker.c"
"src/borg/compress.c"
"src/borg/crypto/low_level.c"
"src/borg/hashindex.c"
"src/borg/item.c"
"src/borg/platform/darwin.c"
"src/borg/platform/freebsd.c"
"src/borg/platform/linux.c"
"src/borg/platform/posix.c"
"src/borg/platform/syncfilerange.c"
"src/borg/platform/windows.c"))
;; Remove bundled shared libraries.
(with-directory-excursion "src/borg/algorithms"
(for-each delete-file-recursively
(list "lz4" "xxh64" "zstd")))))))
(build-system python-build-system)
(arguments
`(#:modules ((srfi srfi-26) ; for cut
(list
#:modules '((srfi srfi-26) ; for cut
(guix build utils)
(guix build python-build-system))
#:phases
(modify-phases %standard-phases
(add-after 'unpack 'set-env
(lambda* (#:key inputs #:allow-other-keys)
(let ((openssl (assoc-ref inputs "openssl"))
(lz4 (assoc-ref inputs "lz4"))
(xxhash (assoc-ref inputs "xxhash"))
(zstd (assoc-ref inputs "zstd")))
(setenv "BORG_OPENSSL_PREFIX" openssl)
(setenv "BORG_LIBLZ4_PREFIX" lz4)
(setenv "BORG_LIBXXHASH_PREFIX" xxhash)
(setenv "BORG_LIBZSTD_PREFIX" zstd)
(setenv "PYTHON_EGG_CACHE" "/tmp")
;; The test 'test_return_codes[python]' fails when
;; HOME=/homeless-shelter.
(setenv "HOME" "/tmp")
#t)))
;; The tests need to be run after Borg is installed.
(delete 'check)
(add-after 'install 'check
(lambda* (#:key inputs outputs tests? #:allow-other-keys)
(when tests?
;; Make the installed package available for the test suite.
(add-installed-pythonpath inputs outputs)
;; The tests should be run in an empty directory.
(mkdir-p "tests")
(with-directory-excursion "tests"
(invoke "py.test" "-v" "--pyargs" "borg.testsuite" "-k"
(string-append
;; These tests need to write to '/var'.
"not test_get_cache_dir "
"and not test_get_config_dir "
"and not test_get_keys_dir "
"and not test_get_security_dir "
;; These tests assume there is a root user in '/etc/passwd'.
"and not test_access_acl "
"and not test_default_acl "
"and not test_get_item_uid_gid "
"and not test_non_ascii_acl "
"and not test_create_content_from_command "
"and not test_create_content_from_command_with_failed_command "
"and not test_create_stdin "
;; We don't need to run benchmarks
"and not benchmark "
;; These tests assume the kernel supports FUSE.
"and not test_fuse "
"and not test_fuse_allow_damaged_files "
"and not test_mount_hardlinks "
"and not test_readonly_mount "
"and not test_fuse_versions_view "
"and not test_migrate_lock_alive"))))))
(add-after 'install 'install-doc
(lambda* (#:key inputs outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
(man (string-append out "/share/man/man1"))
(misc (string-append out "/share/borg/misc")))
(for-each (cut install-file <> misc)
'("docs/misc/create_chunker-params.txt"
"docs/misc/borg-data-flow.png"
"docs/misc/internals-picture.txt"
"docs/misc/prune-example.txt"))
(copy-recursively "docs/man" man))))
(add-after 'install-docs 'install-shell-completions
(lambda* (#:key outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
(etc (string-append out "/etc"))
(share (string-append out "/share")))
(with-directory-excursion "scripts/shell_completions"
(install-file "bash/borg"
(string-append etc "/bash_completion.d"))
(install-file "zsh/_borg"
(string-append share "/zsh/site-functions"))
(install-file "fish/borg.fish"
(string-append share "/fish/vendor_completions.d")))))))))
#:phases
#~(modify-phases %standard-phases
(add-after 'unpack 'set-env
(lambda* (#:key inputs #:allow-other-keys)
(let ((openssl #$(this-package-input "openssl"))
(lz4 #$(this-package-input "lz4"))
(xxhash #$(this-package-input "xxhash"))
(zstd #$(this-package-input "zstd")))
(setenv "BORG_OPENSSL_PREFIX" openssl)
(setenv "BORG_LIBLZ4_PREFIX" lz4)
(setenv "BORG_LIBXXHASH_PREFIX" xxhash)
(setenv "BORG_LIBZSTD_PREFIX" zstd)
(setenv "PYTHON_EGG_CACHE" "/tmp")
;; The test 'test_return_codes[python]' fails when
;; HOME=/homeless-shelter.
(setenv "HOME" "/tmp"))))
;; The tests need to be run after Borg is installed.
(delete 'check)
(add-after 'install 'check
(lambda* (#:key inputs outputs tests? #:allow-other-keys)
(when tests?
;; Make the installed package available for the test suite.
(add-installed-pythonpath inputs outputs)
;; The tests should be run in an empty directory.
(mkdir-p "tests")
(with-directory-excursion "tests"
(invoke "py.test" "-v" "--pyargs" "borg.testsuite" "-k"
(string-append
;; These tests need to write to '/var'.
"not test_get_cache_dir "
"and not test_get_config_dir "
"and not test_get_keys_dir "
"and not test_get_security_dir "
;; These tests assume there is a root user in '/etc/passwd'.
"and not test_access_acl "
"and not test_default_acl "
"and not test_get_item_uid_gid "
"and not test_non_ascii_acl "
"and not test_create_content_from_command "
"and not test_create_content_from_command_with_failed_command "
"and not test_create_stdin "
;; We don't need to run benchmarks
"and not benchmark "
;; These tests assume the kernel supports FUSE.
"and not test_fuse "
"and not test_fuse_allow_damaged_files "
"and not test_mount_hardlinks "
"and not test_readonly_mount "
"and not test_fuse_versions_view "
"and not test_migrate_lock_alive"))))))
(add-after 'install 'install-doc
(lambda _
(let ((man (string-append #$output "/share/man/man1"))
(misc (string-append #$output "/share/borg/misc")))
(for-each (cut install-file <> misc)
'("docs/misc/create_chunker-params.txt"
"docs/misc/borg-data-flow.png"
"docs/misc/internals-picture.txt"
"docs/misc/prune-example.txt"))
(copy-recursively "docs/man" man))))
(add-after 'install-docs 'install-shell-completions
(lambda _
(let ((etc (string-append #$output "/etc"))
(share (string-append #$output "/share")))
(with-directory-excursion "scripts/shell_completions"
(install-file "bash/borg"
(string-append etc "/bash_completion.d"))
(install-file "zsh/_borg"
(string-append share "/zsh/site-functions"))
(install-file "fish/borg.fish"
(string-append share "/fish/vendor_completions.d")))))))))
(native-inputs
(list python-cython python-dateutil python-setuptools-scm python-pytest))
(inputs
@ -745,8 +743,8 @@ detection, and lossless compression.")
;; FUSE 3 isn't working well, so we stick with FUSE 2 for now:
;; <https://issues.guix.gnu.org/53407>
python-llfuse
`(,zstd "lib")
xxhash))
xxhash
`(,zstd "lib")))
(synopsis "Deduplicated, encrypted, authenticated and compressed backups")
(description "Borg is a deduplicating backup program. Optionally, it
supports compression and authenticated encryption. The main goal of Borg is to
@ -1029,7 +1027,7 @@ precious backup space.
(arguments
`(#:tests? #f)) ;no test
(inputs
(list lzo libressl protobuf xz zlib))
(list lzo libressl protobuf-3.6 xz zlib))
(home-page "http://zbackup.org")
(synopsis "Versatile deduplicating backup tool")
(description
@ -1081,14 +1079,14 @@ interactive mode.")
(define-public btrbk
(package
(name "btrbk")
(version "0.32.2")
(version "0.32.5")
(source (origin
(method url-fetch)
(uri (string-append "https://digint.ch/download/btrbk/releases/"
"btrbk-" version ".tar.xz"))
(sha256
(base32
"0gi0j09fm4pgw3dq0z27lkpyvrs3ssyqg9b46v5ba794z63w753z"))))
"1d4zqf5klad55gdzzldipsjrhpprixzjmn03g66df5h2d28l1zpi"))))
(build-system gnu-build-system)
(arguments
(list

View File

@ -21,6 +21,7 @@
;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 2022 zamfofex <zamfofex@twdb.moe>
;;; Copyright © 2022 John Kehayias <john.kehayias@protonmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@ -130,7 +131,22 @@ command-line arguments, multiple languages, and so on.")
(substitute* (list (string-append bin "/egrep")
(string-append bin "/fgrep"))
(("^exec grep")
(string-append "exec " bin "/grep")))))))))
(string-append "exec " bin "/grep"))))))
,@(if (hurd-target?)
'((add-before 'check 'skip-triple-backref-test
(lambda _
;; This test is marked as malfunctioning on glibc systems
;; due to
;; <https://sourceware.org/bugzilla/show_bug.cgi?id=11053>
;; and it triggers a segfault with glibc 2.33 on GNU/Hurd.
;; Skip it.
(substitute* "tests/triple-backref"
(("^warn_" all)
(string-append "exit 77\n" all))))))
'()))
#:make-flags ,(if (hurd-target?)
''("XFAIL_TESTS=test-perror2 equiv-classes") ;XXX
''())))
(synopsis "Print lines matching a pattern")
(description
"grep is a tool for finding text inside files. Text is found by
@ -169,6 +185,10 @@ including, for example, recursive directory searching.")
" CONFIG_HEADER='$(CONFIG_HEADER)'\t\t\\\n")))))
(modules '((guix build utils)))))
(build-system gnu-build-system)
(arguments
`(#:make-flags ,(if (hurd-target?)
''("XFAIL_TESTS=test-perror2")
''())))
(synopsis "Stream editor")
(native-inputs (list perl)) ;for tests
(description
@ -209,6 +229,8 @@ implementation offers several extensions over the standard utility.")
",!concatenated incremental archives (renames)"
",!renamed directory containing subdirectories"
",!renamed subdirectories"
",!chained renames"
",!Directory"
"'")))
'())
#:phases (modify-phases %standard-phases
@ -280,6 +302,10 @@ differences.")
"1v4g8gi0lgakqa7iix8s4fq7lq6l92vw3rjd9wfd2rhjng8xggd6"))
(patches (search-patches "diffutils-fix-signal-processing.patch"))))
(build-system gnu-build-system)
(arguments
`(#:make-flags ,(if (hurd-target?)
''("XFAIL_TESTS=test-perror2 large-subopt")
''())))
(native-inputs (list perl))
(synopsis "Comparing and merging files")
(description
@ -314,7 +340,10 @@ interactive means to merge two files.")
(substitute* '("tests/xargs/verbose-quote.sh"
"tests/find/exec-plus-last-file.sh")
(("#!/bin/sh")
(string-append "#!" (which "sh")))))))))
(string-append "#!" (which "sh")))))))
#:make-flags ,(if (hurd-target?)
''("XFAIL_TESTS=test-perror2")
''())))
(synopsis "Operating on files matching given criteria")
(description
"Findutils supplies the basic file directory searching utilities of the
@ -367,12 +396,18 @@ used to apply commands with arbitrarily long arguments.")
" tests/misc/nice.sh"
" tests/misc/pwd-long.sh"
" tests/split/fail.sh"
;; /hurd/fifo issue:
;; <https://issues.guix.gnu.org/58803>.
" tests/df/unreadable.sh"
;; Gnulib tests.
" test-fdutimensat"
" test-futimens"
" test-linkat"
" test-perror2"
" test-renameat"
" test-renameatu"
" test-tls"
" test-utimensat")))
'())
#:phases (modify-phases %standard-phases
@ -391,7 +426,13 @@ used to apply commands with arbitrarily long arguments.")
,@(if (hurd-target?)
'((substitute* "Makefile.in"
;; this test hangs
(("^ *tests/misc/timeout-group.sh.*") "")))
(("^ *tests/misc/timeout-group.sh.*") ""))
(substitute* "gnulib-tests/Makefile.in"
;; This test sometimes fails and sometimes
;; passes, but it does this consistently, so
;; there might be some environmental factor
;; here
((" test-tls\\$\\(EXEEXT\\) ") " ")))
'())
(substitute* "Makefile.in"
;; fails on filesystems where inotify cannot be used,
@ -975,6 +1016,20 @@ with the Linux kernel.")
(license lgpl2.0+)
(home-page "https://www.gnu.org/software/libc/")))
;; Define a variation of glibc which uses the default /etc/ld.so.cache, useful
;; in FHS containers.
(define-public glibc-for-fhs
(hidden-package
(package/inherit glibc
(name "glibc-for-fhs")
(source (origin (inherit (package-source glibc))
;; Remove Guix's patch to read ld.so.cache from /gnu/store
;; directories, re-enabling the default /etc/ld.so.cache
;; behavior.
(patches
(delete (search-patch "glibc-dl-cache.patch")
(origin-patches (package-source glibc)))))))))
;; Below are old libc versions, which we use mostly to build locale data in
;; the old format (which the new libc cannot cope with.)
(define-public glibc-2.32

View File

@ -466,8 +466,7 @@ you to call routines in shared libraries from within Bash.")
(lambda _
(substitute* "ble.pp"
(("PATH=/bin:/usr/bin readlink")
(search-input-file %build-inputs
"/bin/readlink")))))
"readlink"))))
(delete 'configure) ;no configure
(add-before 'check 'use-LANG-for-tests
(lambda _

View File

@ -27,8 +27,8 @@
#:use-module (gnu packages)
#:use-module (gnu packages compression)
#:use-module (gnu packages java)
#:use-module (gnu packages textutils)
#:use-module (gnu packages xml))
#:use-module (gnu packages java-xml)
#:use-module (gnu packages textutils))
(define-public java-w3c-smil-3.0
(package

View File

@ -11,6 +11,7 @@
;;; Copyright © 2020, 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 2020 Greg Hogan <code@greghogan.com>
;;; Copyright © 2021 Arun Isaac <arunisaac@systemreboot.net>
;;; Copyright © 2022 Tomasz Jeneralczyk <tj@schwi.pl>
;;;
;;; This file is part of GNU Guix.
;;;
@ -36,6 +37,7 @@
#:use-module (guix build-system cmake)
#:use-module (guix build-system gnu)
#:use-module (guix build-system python)
#:use-module (guix build-system meson)
#:use-module (gnu packages)
#:use-module (gnu packages autotools)
#:use-module (gnu packages base)
@ -46,6 +48,9 @@
#:use-module (gnu packages databases)
#:use-module (gnu packages docbook)
#:use-module (gnu packages kde-frameworks)
#:use-module (gnu packages freedesktop)
#:use-module (gnu packages gl)
#:use-module (gnu packages graphics)
#:use-module (gnu packages linux)
#:use-module (gnu packages lua)
#:use-module (gnu packages maths)
@ -60,6 +65,8 @@
#:use-module (gnu packages python-web)
#:use-module (gnu packages python-xyz)
#:use-module (gnu packages qt)
#:use-module (gnu packages vulkan)
#:use-module (gnu packages xorg)
#:use-module (gnu packages xml)
#:use-module (ice-9 match))
@ -72,14 +79,14 @@
(define-public fio
(package
(name "fio")
(version "3.31")
(version "3.33")
(source (origin
(method url-fetch)
(uri (string-append "https://brick.kernel.dk/snaps/"
"fio-" version ".tar.bz2"))
(sha256
(base32
"03x0n18f2wsyjh6qv57kvgqcwga54rzngwzr6fzlrjsalqw7mxlp"))))
"083c1w8jqkvyw7wcy69142inlikzmk1k78mk973rnqdp3a7798qb"))))
(build-system gnu-build-system)
(arguments
(list #:modules
@ -693,3 +700,46 @@ user-provided Lua scripts.
@item
@end itemize")
(license license:gpl2+)))
(define-public vkmark
;; The only ever release is tagged "2017.08" and as its name suggests
;; it was back in the august of 2017. That version no longer compiles
;; due to changes in APIs of its libraries.
;; Latest commit on the other hand seems to be fully working on xcb
;; and wayland backends.
(let ((commit "30d2cd37f0566589d90914501fc7c51a4e51f559")
(revision "0"))
(package
(name "vkmark")
(version (git-version "2017.08" revision commit))
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/vkmark/vkmark")
(commit commit)))
(file-name (git-file-name name version))
(sha256
(base32
"0w0n080sb67s7dbxqi71h0vhm6dccs78rqjnxx9x524jp4jh9b7x"))))
(build-system meson-build-system)
(native-inputs (list pkg-config))
;; The kms backend currently will not compile because of upstream issues.
;; So I omitted this backend's dependiencies. A fix has been proposed
;; on another branch, but it has not been merged yet.
;; See https://github.com/vkmark/vkmark/issues/33
(inputs
(list vulkan-loader
vulkan-headers
glm
assimp
libxcb
xcb-util-wm
wayland-protocols
wayland))
(home-page "https://github.com/vkmark/vkmark")
(synopsis "Extensible benchmarking suite for Vulkan")
(description
"vkmark offers a suite of scenes that can be used to measure various
aspects of Vulkan performance. The way in which each scene is rendered is
configurable through a set of options.")
(license license:lgpl2.1+))))

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -313,7 +313,8 @@ or false to signal an error."
(%current-system))))
"Return the name of Glibc's dynamic linker for SYSTEM."
;; See the 'SYSDEP_KNOWN_INTERPRETER_NAMES' cpp macro in libc.
(let ((platform (lookup-platform-by-system system)))
(let ((platform (false-if-platform-not-found
(lookup-platform-by-system system))))
(cond
((platform? platform)
(platform-glibc-dynamic-linker platform))

View File

@ -1,5 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2022 Christopher Rodriguez <yewscion@gmail.com>
;;; Copyright © 2022 Liliana Marie Prikler <liliana.prikler@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@ -32,7 +33,6 @@
#:use-module (gnu packages pkg-config)
#:use-module (gnu packages llvm)
#:use-module (gnu packages java)
#:use-module (gnu packages linux)
#:use-module (gnu packages compression))
(define-public dbqn
@ -54,7 +54,6 @@
(arguments
(list
#:imported-modules `(,@%gnu-build-system-modules
(guix build syscalls)
(guix build ant-build-system))
#:modules `((guix build gnu-build-system)
((guix build ant-build-system)
@ -92,9 +91,8 @@
(dest-jar (string-append out "/share/java")))
(mkdir-p dest-bin)
(mkdir-p dest-jar)
(copy-recursively "BQN"
(string-append dest-bin
"/dbqn"))
(rename-file "BQN" "dbqn")
(install-file "dbqn" dest-bin)
(install-file "BQN.jar" dest-jar)
(substitute* (string-append dest-bin "/dbqn")
(("BQN.jar")
@ -114,7 +112,7 @@ the same author.")
;; Aside from dbqn above, the main bqn repository is used by other
;; implementations as a "known good" set of sources. CBQN uses dbqn to
;; generate an intermediate bytecode for its own compilation.
(let ((commit "e219af48401473a7bac49bdd8b89d69082cf5dd8"))
(let ((commit "71ce36141aaacfa714edca2e408ca522a3bc5554"))
(origin
(method git-fetch)
(uri (git-reference
@ -122,14 +120,14 @@ the same author.")
(commit commit)))
(file-name (git-file-name "bqn-sources" commit))
(sha256
(base32 "0r6pa9lscl2395g4xlvmg90vpdsjzhin4f1r0s7brymmpvmns2yc")))))
(base32 "060a3r5m7hynzxj4iz1av2kj5jf8w3j8yswzzx9wkx31rdrsiv2c")))))
(define cbqn-bootstrap
(let* ((revision "1")
(commit "9c1cbdc99863b1da0116df61cd832137b196dc5c"))
(let* ((revision "2")
(commit "66584ce1491d300746963b8ed17170348b2a03e6"))
(package
(name "cbqn-bootstrap")
(version (git-version "0" "1" commit))
(version (git-version "0" revision commit))
(source (origin
(method git-fetch)
(uri (git-reference
@ -138,25 +136,27 @@ the same author.")
(file-name (git-file-name name version))
(sha256
(base32
"0w38fhwf20drkyijy6nfnhmc5g5gw0zmzgmy1q605x57znlj85a2"))))
"13gg96aa56b8k08bjvv8i0f5nxrah2sij7g6pg7i21fdv08rd9iv"))))
(build-system gnu-build-system)
(arguments
(list #:tests? #f ;skipping tests for bootstrap
#:phases #~(modify-phases %standard-phases
(delete 'configure)
(add-before 'build 'generate-bytecode
(lambda* (#:key inputs #:allow-other-keys)
(system (string-append #+dbqn
"/bin/dbqn ./genRuntime "
#+bqn-sources))))
(replace 'install
(lambda* (#:key outputs #:allow-other-keys)
(mkdir-p (string-append #$output "/bin"))
(chmod "BQN" #o755)
(copy-recursively "BQN"
(string-append #$output
"/bin/bqn")))))))
(native-inputs (list dbqn clang-toolchain bqn-sources))
(list
#:tests? #f ; skipping tests for bootstrap
#:make-flags #~(list (string-append "CC=" #$(cc-for-target)))
#:phases
#~(modify-phases %standard-phases
(delete 'configure)
(add-before 'build 'generate-bytecode
(lambda* (#:key inputs #:allow-other-keys)
(system (string-append #+dbqn
"/bin/dbqn ./genRuntime "
#+bqn-sources))))
(replace 'install
(lambda* (#:key outputs #:allow-other-keys)
(mkdir-p (string-append #$output "/bin"))
(chmod "BQN" #o755)
(rename-file "BQN" "bqn")
(install-file "bqn" (string-append #$output "/bin")))))))
(native-inputs (list dbqn bqn-sources))
(inputs (list icedtea-8 libffi))
(synopsis "BQN implementation in C")
(description "This package provides the reference implementation of
@ -165,60 +165,42 @@ by APL.")
(home-page "https://mlochbaum.github.io/BQN/")
(license license:gpl3))))
(define singeli-sources
(let ((commit "fd17b144483549dbd2bcf23e3a37a09219171a99"))
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/mlochbaum/Singeli")
(commit commit)))
(file-name (git-file-name "singeli-sources" commit))
(sha256
(base32 "1rr4l7ijzcg25n2igi1mzya6qllh5wsrf3m5i429rlgwv1fwvfji")))))
(define-public cbqn
(package
(inherit cbqn-bootstrap)
(name "cbqn")
(outputs '("out" "lib"))
(arguments
(list #:make-flags '(list "shared-o3" "o3n-singeli")
#:phases #~(modify-phases %standard-phases
(delete 'configure)
(add-before 'build 'link-singeli
(lambda* (#:key inputs #:allow-other-keys)
(symlink #+singeli-sources "Singeli")))
(add-before 'build 'generate-bytecode
(lambda* (#:key inputs #:allow-other-keys)
(system (string-append #+dbqn
"/bin/dbqn ./genRuntime "
#+bqn-sources))))
(replace 'check
(lambda* (#:key inputs tests? #:allow-other-keys)
(when tests?
(system (string-append "./BQN -M 1000 \""
#+bqn-sources
"/test/this.bqn\""))
(map (lambda (x)
(system (string-append "./BQN ./test/" x
".bqn")))
'("cmp" "equal" "copy" "random"))
(system "make -C test/ffi"))))
(replace 'install
(lambda* (#:key outputs #:allow-other-keys)
(let* ((bin (string-append (assoc-ref outputs
"out")
"/bin"))
(lib (string-append (assoc-ref outputs
"lib")
"/lib")))
(mkdir-p bin)
(copy-recursively "BQN"
(string-append bin "/bqn"))
(install-file "libcbqn.so" lib)))))))
(substitute-keyword-arguments (strip-keyword-arguments
(list #:tests?)
(package-arguments cbqn-bootstrap))
((#:make-flags flags #~(list))
#~(cons* "shared-o3" "o3" #$flags))
((#:phases phases #~%standard-phases)
#~(modify-phases #$phases
(replace 'check
(lambda* (#:key inputs tests? #:allow-other-keys)
(when tests?
(system (string-append "./BQN -M 1000 \""
#+bqn-sources
"/test/this.bqn\""))
(map (lambda (x)
(system (string-append "./BQN ./test/" x
".bqn")))
'("cmp" "equal" "copy" "random"))
(system "make -C test/ffi"))))
(replace 'install
(lambda* (#:key outputs #:allow-other-keys)
(let* ((bin (string-append (assoc-ref outputs "out")
"/bin"))
(lib (string-append (assoc-ref outputs "lib")
"/lib")))
(mkdir-p bin)
(rename-file "BQN" "bqn")
(install-file "bqn" bin)
(install-file "libcbqn.so" lib))))))))
(native-inputs (list dbqn
bqn-sources
singeli-sources
libffi
clang-toolchain
linux-libre-headers))))
libffi))
(properties
`((tunable? . #t)))))

View File

@ -51,7 +51,7 @@ supported content to the Kodi media center.")
(define ublock-origin
(package
(name "ublock-origin")
(version "1.44.2")
(version "1.45.2")
(home-page "https://github.com/gorhill/uBlock")
(source (origin
(method git-fetch)
@ -62,7 +62,7 @@ supported content to the Kodi media center.")
(file-name (git-file-name name version))
(sha256
(base32
"0hci19wv5sj4vph8k24bmcz7q74y1adyykwijqyga4p7h68jklw1"))))
"0dz1rcphm8cbc2qdd41ahbsqskmqcf2ja6zx0vq0dswnakpc3lyd"))))
(build-system gnu-build-system)
(outputs '("xpi" "firefox" "chromium"))
(arguments

View File

@ -14,6 +14,7 @@
;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2021 qblade <qblade@protonmail.com>
;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 2022 Juliana Sims <jtsims@protonmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@ -31,6 +32,7 @@
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
(define-module (gnu packages build-tools)
#:use-module (ice-9 optargs)
#:use-module ((guix licenses) #:prefix license:)
#:use-module (guix utils)
#:use-module (guix packages)
@ -38,20 +40,28 @@
#:use-module (guix download)
#:use-module (guix git-download)
#:use-module (guix build-system cmake)
#:use-module (guix build-system copy)
#:use-module (guix modules)
#:use-module (gnu packages)
#:use-module (gnu packages adns)
#:use-module (gnu packages autotools)
#:use-module (gnu packages base)
#:use-module (gnu packages bash)
#:use-module (gnu packages check)
#:use-module (gnu packages code)
#:use-module (gnu packages compression)
#:use-module (gnu packages cpp)
#:use-module (gnu packages cppi)
#:use-module (gnu packages elf)
#:use-module (gnu packages gcc)
#:use-module (gnu packages linux)
#:use-module (gnu packages lisp)
#:use-module (gnu packages logging)
#:use-module (gnu packages lua)
#:use-module (gnu packages ninja)
#:use-module (gnu packages package-management)
#:use-module (gnu packages pcre)
#:use-module (gnu packages perl)
#:use-module (gnu packages pkg-config)
#:use-module (gnu packages pretty-print)
#:use-module (gnu packages protobuf)
@ -64,6 +74,7 @@
#:use-module (gnu packages rpc)
#:use-module (gnu packages sqlite)
#:use-module (gnu packages tls)
#:use-module (gnu packages unicode)
#:use-module (gnu packages version-control)
#:use-module (guix build-system gnu)
#:use-module (guix build-system python))
@ -134,13 +145,13 @@ makes a few sacrifices to acquire fast full and incremental build times.")
(invoke "ctest")))))))
(inputs
`(("c-ares" ,c-ares)
("fmt" ,fmt)
("fmt" ,fmt-8)
("grpc" ,grpc)
("json-modern-cxx" ,json-modern-cxx)
("protobuf" ,protobuf)
("python" ,python-wrapper)
("re2" ,re2)
("spdlog" ,spdlog)))
("spdlog" ,spdlog-1.10)))
(native-inputs
`(("abseil-cpp" ,abseil-cpp)
("googletest" ,googletest)
@ -203,8 +214,8 @@ programs and other files depend.")
(license license:bsd-3)))
(define-public gn
(let ((commit "e327ffdc503815916db2543ec000226a8df45163")
(revision "1819")) ;as returned by `git describe`, used below
(let ((commit "1c4151ff5c1d6fbf7fa800b8d4bb34d3abc03a41")
(revision "2072")) ;as returned by `git describe`, used below
(package
(name "gn")
(version (git-version "0.0" revision commit))
@ -214,49 +225,56 @@ programs and other files depend.")
(uri (git-reference (url home-page) (commit commit)))
(sha256
(base32
"0kvlfj3www84zp1vmxh76x8fdjm9hyk8lkh2vdsidafpmm75fphr"))
"02621c9nqpr4pwcapy31x36l5kbyd0vdgd0wdaxj5p8hrxk67d6b"))
(file-name (git-file-name name version))))
(build-system gnu-build-system)
(arguments
`(#:phases (modify-phases %standard-phases
(add-before 'configure 'set-build-environment
(lambda _
(setenv "CC" "gcc") (setenv "CXX" "g++")
(setenv "AR" "ar")))
(replace 'configure
(lambda _
(invoke "python" "build/gen.py"
"--no-last-commit-position")))
(add-after 'configure 'create-last-commit-position
(lambda _
;; Create "last_commit_position.h" to avoid a dependency
;; on 'git' (and the checkout..).
(call-with-output-file "out/last_commit_position.h"
(lambda (port)
(format port
(string-append
"#define LAST_COMMIT_POSITION_NUM ~a\n"
"#define LAST_COMMIT_POSITION \"~a (~a)\"\n")
,revision ,revision ,(string-take commit 8))))))
(replace 'build
(lambda _
(invoke "ninja" "-C" "out" "gn"
"-j" (number->string (parallel-job-count)))))
(replace 'check
(lambda* (#:key tests? #:allow-other-keys)
(if tests?
(begin
(invoke "ninja" "-C" "out" "gn_unittests"
"-j" (number->string (parallel-job-count)))
(invoke "./out/gn_unittests"))
(format #t "test suite not run~%"))))
(replace 'install
(lambda* (#:key outputs #:allow-other-keys)
(let ((out (assoc-ref outputs "out")))
(install-file "out/gn" (string-append out "/bin"))))))))
(list #:phases
#~(modify-phases %standard-phases
(add-before 'configure 'set-build-environment
(lambda _
(setenv "CC" "gcc")
(setenv "CXX" "g++")
(setenv "AR" "ar")))
(replace 'configure
(lambda _
(invoke "python" "build/gen.py"
"--no-last-commit-position")))
(add-after 'configure 'create-last-commit-position
(lambda _
;; Mimic GenerateLastCommitPosition from gen.py.
(call-with-output-file "out/last_commit_position.h"
(lambda (port)
(format port
"// Generated by Guix.
#ifndef OUT_LAST_COMMIT_POSITION_H_
#define OUT_LAST_COMMIT_POSITION_H_
#define LAST_COMMIT_POSITION_NUM ~a
#define LAST_COMMIT_POSITION \"~a (~a)\"
#endif // OUT_LAST_COMMIT_POSITION_H_
"
#$revision #$revision
#$(string-take commit 12))))))
(replace 'build
(lambda _
(invoke "ninja" "-C" "out" "gn"
"-j" (number->string (parallel-job-count)))))
(replace 'check
(lambda* (#:key tests? #:allow-other-keys)
(if tests?
(begin
(invoke "ninja" "-C" "out" "gn_unittests"
"-j" (number->string (parallel-job-count)))
(invoke "./out/gn_unittests"))
(format #t "test suite not run~%"))))
(replace 'install
(lambda _
(install-file "out/gn" (string-append #$output "/bin")))))))
(native-inputs
`(("ninja" ,ninja)
("python" ,python-wrapper)))
(list ninja python-wrapper))
(synopsis "Generate Ninja build files")
(description
"GN is a tool that collects information about a project from @file{.gn}
@ -762,3 +780,227 @@ Build has features such as:
@item Extensible language/compiler framework.
@end itemize")
(license license:gpl2+)))
(define-public genie
(let ((commit "b139103697bbb62db895e4cc7bfe202bcff4ff25")
(revision "0"))
(package
(name "genie")
(version (git-version "1167" revision commit))
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/bkaradzic/genie")
(commit commit)))
(file-name (git-file-name name version))
(sha256
(base32
"16plshzkyjjzpfcxnwjskrs7i4gg0qn92h2k0rbfl4a79fgmwvwv"))))
(build-system gnu-build-system)
(arguments
(list #:phases #~(modify-phases %standard-phases
(delete 'configure)
(replace 'install
(lambda _
(install-file "bin/linux/genie"
(string-append #$output "/bin")))))
#:tests? #f)) ;no tests
(home-page "https://github.com/bkaradzic/genie")
(synopsis "Project generator")
(description
"GENie generates projects from Lua scripts, making it easy to apply the
same settings to multiple projects. It supports generating projects using GNU
Makefiles, JSON Compilation Database, and experimentally Ninja.")
(license license:bsd-3))))
(define*-public (gnulib-checkout #:key
version
(revision "1")
commit
hash)
"Return as a package the exact gnulib checkout."
(package
(name "gnulib")
(version (git-version version revision commit))
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://git.savannah.gnu.org/git/gnulib.git/")
(commit commit)))
(file-name (git-file-name name version))
(sha256 hash)
(snippet
(with-imported-modules (source-module-closure '((guix build utils)))
#~(begin
(use-modules (guix build utils)
(ice-9 ftw)
(ice-9 rdelim))
;; .c, .h and .gperf files whose first line is /* DO NOT EDIT!
;; GENERATED AUTOMATICALLY! */ are generated automatically based
;; on the unicode database. Since we replace the unicode
;; database with our own, we need to regenerate them. So, they
;; are removed from the source. They are sprinkled all over the
;; place unfortunately, so we cant exclude whole directories.
(let ((generated-automatically?
(lambda (filename . unused)
(and (or (string-suffix? ".c" filename)
(string-suffix? ".h" filename)
(string-suffix? ".gperf" filename))
(call-with-input-file filename
(lambda (port)
(let ((first-line (read-line port)))
(equal?
first-line
"/* DO NOT EDIT! GENERATED AUTOMATICALLY! */"))))))))
(for-each delete-file (find-files (getcwd) generated-automatically?)))
;; Other files are copied from UCD.
(for-each delete-file
'("tests/unigbrk/GraphemeBreakTest.txt"
"tests/uninorm/NormalizationTest.txt"
"tests/uniname/UnicodeData.txt"
"tests/uniname/NameAliases.txt"
;; FIXME: tests/uniname/HangulSyllableNames.txt
;; seems like a UCD file but it is not distributed
;; with UCD.
"tests/uniwbrk/WordBreakTest.txt")))))))
(build-system copy-build-system)
(arguments
(list
#:install-plan
#~'(("./gnulib-tool" "bin/")
("." "src/gnulib" #:exclude-regexp ("\\.git.*")))
#:modules '((ice-9 match)
(guix build utils)
(guix build copy-build-system)
((guix build gnu-build-system) #:prefix gnu:))
#:phases
#~(modify-phases %standard-phases
(add-before 'install 'check
(assoc-ref gnu:%standard-phases 'check))
(add-before 'check 'fix-tests
(lambda _
(substitute* "Makefile"
(("-f maint.mk syntax-check")
"_gl-Makefile=yes -f maint.mk syntax-check"))
(invoke "git" "init")
(invoke "git" "config" "user.name" "Guix")
(invoke "git" "config" "user.email" "guix@localhost")
(invoke "git" "add" ".")
;; Syntax checks are only run against committed files.
(invoke "git" "commit" "-m" "Prepare for tests.")))
(add-before 'check 'disable-failing-tests
(lambda _
(substitute* "cfg.mk"
(("local-checks-to-skip =")
;; sc_copyright_check fails because the fake commit date may
;; be later than the copyright year.
"local-checks-to-skip = \\
sc_Wundef_boolean \\
sc_copyright_check \\
sc_file_system \\
sc_indent \\
sc_keep_gnulib_texi_files_mostly_ascii \\
sc_prohibit_assert_without_use \\
sc_prohibit_close_stream_without_use \\
sc_prohibit_defined_have_decl_tests \\
sc_prohibit_doubled_word \\
sc_prohibit_empty_lines_at_EOF \\
sc_prohibit_intprops_without_use \\
sc_prohibit_openat_without_use \\
sc_prohibit_test_minus_ao \\
sc_unportable_grep_q"))
(substitute* "Makefile"
(("sc_check_(sym_list|copyright)" rule)
(string-append "disabled_check_" rule))
(("sc_cpp_indent_check")
"disabled_cpp_indent_check")
(("sc_prefer_ac_check_funcs_once")
"disabled_prefer_ac_check_funcs_once")
(("sc_prohibit_(AC_LIBOBJ_in_m4|leading_TABs)" rule)
(string-append "disabled_prohibit_" rule)))))
(add-before 'check 'regenerate-unicode
(lambda* (#:key inputs #:allow-other-keys)
(define (find-ucd-file name)
(search-input-file inputs (string-append "share/ucd/" name)))
(define (find-ucd-files . names)
(map find-ucd-file names))
(with-directory-excursion "lib"
;; See the compile-command buffer-local variable in
;; lib/gen-uni-tables.c
(invoke "gcc" "-O" "-Wall" "gen-uni-tables.c"
"-Iunictype" "-o" "gen-uni-tables")
(apply invoke
"./gen-uni-tables"
(append
(find-ucd-files "UnicodeData.txt"
"PropList.txt"
"DerivedCoreProperties.txt"
"emoji/emoji-data.txt"
"ArabicShaping.txt"
"Scripts.txt"
"Blocks.txt")
(list
#$(origin
(method url-fetch)
(uri (string-append
"https://www.unicode.org/Public/"
"3.0-Update1/PropList-3.0.1.txt"))
(sha256
(base32
"0k6wyijyzdl5g3nibcwfm898kfydx1pqaz28v7fdvnzdvd5fz7lh"))))
(find-ucd-files "EastAsianWidth.txt"
"LineBreak.txt"
"auxiliary/WordBreakProperty.txt"
"auxiliary/GraphemeBreakProperty.txt"
"CompositionExclusions.txt"
"SpecialCasing.txt"
"CaseFolding.txt")
(list #$(package-version (this-package-native-input "ucd")))))
(invoke "clisp" "-C" "uniname/gen-uninames.lisp"
(find-ucd-file "UnicodeData.txt")
"uniname/uninames.h"
(find-ucd-file "NameAliases.txt"))
(for-each
(match-lambda
((ucd-file . directory)
(copy-file (find-ucd-file ucd-file)
(string-append "../tests/" directory "/"
(basename ucd-file)))))
'(("NameAliases.txt" . "uniname")
("UnicodeData.txt" . "uniname")
("NormalizationTest.txt" . "uninorm")
("auxiliary/GraphemeBreakTest.txt" . "unigbrk")
("auxiliary/WordBreakTest.txt" . "uniwbrk")))
(delete-file "gen-uni-tables")))))))
(inputs ;; Shebangs for some auxiliary build files.
(list python perl clisp))
(native-inputs
(list
python perl clisp
;; Unicode data:
ucd-next
;; Programs for the tests:
cppi indent git autoconf))
(home-page "https://www.gnu.org/software/gnulib/")
(synopsis "Source files to share among distributions")
(description
"Gnulib is a central location for common infrastructure needed by GNU
packages. It provides a wide variety of functionality, e.g., portability
across many systems, working with Unicode strings, cryptographic computation,
and much more. The code is intended to be shared at the level of source
files, rather than being a standalone library that is distributed, built, and
installed. The included @command{gnulib-tool} script helps with using Gnulib
code in other packages. Gnulib also includes copies of licensing and
maintenance-related files, for convenience.")
(native-search-paths
(list (search-path-specification
(variable "GNULIB_SRCDIR")
(files (list "src/gnulib")))))
(license (list license:lgpl2.0+ license:gpl3+))))
(define-public gnulib
(gnulib-checkout
#:version "2022-12-31"
#:commit "875461ffdf58ac04677957b4ae4160465b83b940"
#:hash (base32 "0bf7a6wdns9c5wwv60qfcn9llg0j6jz5ryd2qgsqqx2i6xkmp77c")))

View File

@ -35,7 +35,7 @@
(define-public busybox
(package
(name "busybox")
(version "1.34.1")
(version "1.35.0")
(source (origin
(method url-fetch)
(uri (string-append
@ -43,7 +43,7 @@
version ".tar.bz2"))
(sha256
(base32
"0jfm9fik7nv4w21zqdg830pddgkdjmplmna9yjn9ck1lwn4vsps1"))))
"1556hfgw32xf226dd138gfq0z1zf4r3f8naa9wrqld2sqd2b5vps"))))
(build-system gnu-build-system)
(arguments
(list #:phases

View File

@ -41,6 +41,7 @@
#:use-module (guix download)
#:use-module (guix git-download)
#:use-module (guix build-system cmake)
#:use-module (guix build-system copy)
#:use-module (guix build-system gnu)
#:use-module (guix build-system python)
#:use-module (guix build-system trivial)
@ -55,6 +56,7 @@
#:use-module (gnu packages perl)
#:use-module (gnu packages texinfo)
#:use-module (gnu packages guile)
#:use-module (gnu packages llvm)
#:use-module (gnu packages lua)
#:use-module (gnu packages multiprecision)
#:use-module (gnu packages pcre)
@ -67,6 +69,45 @@
#:use-module (gnu packages web)
#:use-module (gnu packages xml))
(define-public c-intro-and-ref
(let ((revision "0")
(commit "f88559678feeb1391a0e9c7cf060c4429ef22ffc"))
(package
(name "c-intro-and-ref")
(version (git-version "0.0.0" revision commit))
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://git.savannah.gnu.org/git/c-intro-and-ref.git")
(commit commit)))
(file-name (git-file-name name version))
(sha256
(base32
"0c08h8k7wkn5lw0jqnnaayx55d3vf1q11pgsixfw31i58rnwa5y2"))))
(build-system copy-build-system)
(arguments
(list #:phases #~(modify-phases %standard-phases
(add-after 'unpack 'build
(lambda* (#:key parallel-build? #:allow-other-keys)
(substitute* "Makefile"
(("makeinfo c.texi")
"makeinfo --no-split c.texi"))
(invoke "make" "c.info" "c.html"
"-j" (number->string
(if parallel-build?
(parallel-job-count)
1))))))
#:install-plan ''(("c.info" "share/info/")
("c.html" "share/doc/"))))
(native-inputs (list texinfo))
(home-page "https://www.gnu.org/")
(synopsis "GNU C Language Intro and Reference")
(description "This manual explains the C language for use with the GNU
Compiler Collection (GCC) on the GNU/Linux system and other systems. We refer
to this dialect as GNU C. If you already know C, you can use this as a
reference manual.")
(license license:fdl1.3+))))
(define-public cproc
(let ((commit "70fe9ef1810cc6c05bde9eb0970363c35fa7e802")
(revision "1"))
@ -384,14 +425,14 @@ whose behaviour is inconsistent across *NIX flavours.")
(define-public libhx
(package
(name "libhx")
(version "4.3")
(version "4.9")
(source
(origin
(method url-fetch)
(uri (string-append "https://inai.de/files/libhx/"
"libHX-" version ".tar.xz"))
(sha256
(base32 "06zkzaya6j3vaafz80qcgn5qcri047003bhmjisv5sbikcw97jqy"))))
(base32 "16rwp8b2j8l0m27rffvb7ma350r79l611sa135hzfywkdli2bqh2"))))
(build-system gnu-build-system)
(home-page "https://inai.de/projects/libhx/")
(synopsis "C library with common data structures and functions")
@ -719,7 +760,7 @@ portability.")
(define-public byacc
(package
(name "byacc")
(version "20220128")
(version "20221106")
(source (origin
(method url-fetch)
(uri (string-append
@ -727,7 +768,7 @@ portability.")
version ".tgz"))
(sha256
(base32
"173l5pdzgqk2ld6lf0ablii0iiw07sry2vrjfrm4wc99qmf81ha2"))))
"04lxggjarbidfq8ba5q6kwgqys4lhidbnz8gf3vrrb5wgcibx6d8"))))
(build-system gnu-build-system)
(home-page "https://invisible-island.net/byacc/byacc.html")
(synopsis "Berkeley Yacc LALR parser generator")
@ -1087,7 +1128,7 @@ Telemetry Transport (MQTT) publish-subscribe messaging protocol.")
(define-public mimalloc
(package
(name "mimalloc")
(version "2.0.6")
(version "2.0.9")
(source (origin
(method git-fetch)
(uri (git-reference
@ -1096,7 +1137,7 @@ Telemetry Transport (MQTT) publish-subscribe messaging protocol.")
(file-name (git-file-name name version))
(sha256
(base32
"05x2dl3zimflfj91ns3vrphmzpdlyyr230p9adqgfds101f16qmv"))))
"19w0i28p6knjd192rrcw1ayc3x0qp6rcm48cwkls4kwn8fng81fj"))))
(build-system cmake-build-system)
(arguments
`(#:build-type "Release"))
@ -1126,6 +1167,7 @@ Telemetry Transport (MQTT) publish-subscribe messaging protocol.")
("ppc64" => "ppc64")
("ppc" => "ppc")
("s390x" => "s390x")
("riscv64" => "riscv64")
("sparc64" => "sparcv9"))))
(define-public ck
@ -1182,6 +1224,82 @@ performance concurrent systems developed in C99+.")
(license (list license:bsd-2 ;everything except...
license:asl2.0)))) ;src/ck_hp.c
(define-public tinydir
(package
(name "tinydir")
(version "1.2.5")
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/cxong/tinydir")
(commit version)))
(file-name (git-file-name name version))
(sha256
(base32
"1nprgdfx4i8wzc1idw6chan4fjfa75b5ll8kghdc0q2278pny259"))
(patches (search-patches "tinydir-fix-cbehave-test.patch"))
(modules '((guix build utils)))
(snippet '(delete-file-recursively "tests/cbehave"))))
(build-system cmake-build-system)
(arguments
(list
#:phases
#~(modify-phases %standard-phases
(add-after 'unpack 'path-cmake
(lambda _
(substitute* "tests/CMakeLists.txt"
(("^include_dir.*cbehave.*")
(string-append "include_directories("#$cbehave "/include)"))
(("^add_subdir.*cbeha.*") ""))))
(add-before 'configure 'chdir
(lambda _
(chdir "tests")))
(replace 'install
(lambda _
(install-file "../tinydir.h"
(string-append #$output "/include")))))))
(native-inputs (list cbehave))
(home-page "https://github.com/cxong/tinydir")
(synopsis "List directories programmatically")
(description "@code{tinydir} is a header-only C wrapper for listing
directory contents.")
(license license:bsd-2)))
(define-public libdispatch
(package
(name "libdispatch")
(version "5.7")
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/apple/swift-corelibs-libdispatch")
(commit (string-append "swift-" version "-RELEASE"))))
(file-name (git-file-name name version))
(sha256
(base32
"0skg1azbhbg7y0ql2a5sx6lmfip8l1rajqm95zzf9xv45n4dg9nn"))))
(build-system cmake-build-system)
(arguments
(list #:phases
#~(modify-phases %standard-phases
;; Use Clang instead of GCC.
(add-before 'configure 'prepare-build-environment
(lambda _
(setenv "AR" "llvm-ar")
(setenv "NM" "llvm-nm")
(setenv "CC" "clang")
(setenv "CXX" "clang++"))))))
(native-inputs (list clang llvm))
(home-page "https://apple.github.io/swift-corelibs-libdispatch/")
(synopsis "Concurrent code execution on multicore hardware")
(description
"Grand Central Dispatch (GCD or libdispatch) implements a concurrency model
wherein program tasks are divided into work items. These can be run
sequentially or in parallel, with optional synchronization in between, and GCD
will take care of dispatching tasks to available cores.")
(license license:asl2.0)))
(define-public utf8-h
;; The latest tag is used as there is no release.
(let ((commit "500d4ea9f4c3449e5243c088d8af8700f7189734")

Some files were not shown because too many files have changed in this diff Show More