forked from tribes/guix
Compare commits
59 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| aa34d4d28d | |||
| 6110751b53 | |||
| a8509d8d43 | |||
| 0961807915 | |||
| fb5d04d363 | |||
| 771b866c55 | |||
| a0178d34f5 | |||
| 21fcced608 | |||
| abff6f0fac | |||
| 63d26e81ee | |||
| b507a0e38c | |||
| 80dc6ad4a8 | |||
| ed2d4d52dd | |||
| 7418a20074 | |||
| 945ad48cd8 | |||
| 3a0fcaa0fe | |||
| 8a154c2915 | |||
| 9562a2eb61 | |||
| dde0291476 | |||
| 566982bc71 | |||
| 7a65beff0f | |||
| 3ab48ed6cd | |||
| b39c4e18f2 | |||
| a33afba4f1 | |||
| 626e619590 | |||
| 76c4646beb | |||
| ca3780835f | |||
| 3a3e62cc56 | |||
| 6b0704339d | |||
| b1b41a23f4 | |||
| 6e71e71952 | |||
| 214b77b5e7 | |||
| ace6723946 | |||
| f40b0fa8e6 | |||
| 74009c4cf0 | |||
| 5b0ce3393b | |||
| e61fe664a4 | |||
| af66a9510f | |||
| c47f3fc135 | |||
| 72b7ea416b | |||
| b37ab28401 | |||
| 2e4808465d | |||
| 0f583f60f8 | |||
| 82c0f34c7e | |||
| 66072a00d7 | |||
| 10cf742cbc | |||
| f13049f3a8 | |||
| f995f710e8 | |||
| a23789bbbd | |||
| 283d4960a4 | |||
| ce5026b9f4 | |||
| 78789cb6e2 | |||
| 668384d160 | |||
| 522a48a228 | |||
| 92b02d0c18 | |||
| 185709221d | |||
| 0084f0054f | |||
| 9bf205e5a0 | |||
| 6fd7f161d7 |
@@ -1,6 +1,7 @@
|
||||
*.eps
|
||||
*.go
|
||||
*.log
|
||||
*.mo
|
||||
*.pdf
|
||||
*.png
|
||||
*.tar.xz
|
||||
@@ -147,6 +148,7 @@ stamp-h[0-9]
|
||||
tmp
|
||||
/doc/os-config-lightweight-desktop.texi
|
||||
/nix/scripts/download
|
||||
/.tarball-version
|
||||
/.version
|
||||
/doc/stamp-*
|
||||
/gnu/packages/bootstrap
|
||||
|
||||
+30
-77
@@ -740,9 +740,9 @@ guix-binary.%.tar.xz:
|
||||
cp "$$tarball" "$@.tmp" ; mv "$@.tmp" "$@"
|
||||
|
||||
|
||||
# The dependency on doc-po-update is to generate the .pot files, which are not
|
||||
# checked in.
|
||||
dist: doc-po-update
|
||||
# The dependency on doc-pot-update is to generate the .pot files, which are
|
||||
# not checked in.
|
||||
dist: doc-pot-update
|
||||
|
||||
dist-hook: gen-ChangeLog gen-AUTHORS gen-tarball-version
|
||||
dist-hook: assert-no-store-file-names
|
||||
@@ -840,7 +840,6 @@ system_flags = $(foreach system,$(1),-s $(system))
|
||||
# XXX: Depend on 'dist' rather than 'distcheck' to work around the Gettext
|
||||
# issue described at <https://savannah.gnu.org/bugs/index.php?51027>.
|
||||
release: dist-with-updated-version all
|
||||
cd po; git checkout .
|
||||
@if ! git diff-index --quiet HEAD; then \
|
||||
echo "There are uncommitted changes; stopping." >&2 ; \
|
||||
exit 1 ; \
|
||||
@@ -886,9 +885,9 @@ release: dist-with-updated-version all
|
||||
echo "failed to produced Guix installation image for $$system" >&2 ; \
|
||||
exit 1 ; \
|
||||
fi ; \
|
||||
xz < "$$image" > "$(releasedir)/$(GUIX_SYSTEM_IMAGE_BASE).$$system.iso.xz.tmp" ; \
|
||||
mv "$(releasedir)/$(GUIX_SYSTEM_IMAGE_BASE).$$system.iso.xz.tmp" \
|
||||
"$(releasedir)/$(GUIX_SYSTEM_IMAGE_BASE).$$system.iso.xz" ; \
|
||||
cp "$$image" "$(releasedir)/$(GUIX_SYSTEM_IMAGE_BASE).$$system.iso.tmp" ; \
|
||||
mv "$(releasedir)/$(GUIX_SYSTEM_IMAGE_BASE).$$system.iso.tmp" \
|
||||
"$(releasedir)/$(GUIX_SYSTEM_IMAGE_BASE).$$system.iso" ; \
|
||||
done
|
||||
# Generate the VM images.
|
||||
for system in $(GUIX_SYSTEM_VM_SYSTEMS) ; do \
|
||||
@@ -901,9 +900,7 @@ release: dist-with-updated-version all
|
||||
echo "failed to produced Guix VM image for $$system" >&2 ; \
|
||||
exit 1 ; \
|
||||
fi ; \
|
||||
xz < "$$image" > "$(releasedir)/$(GUIX_SYSTEM_VM_IMAGE_BASE).$$system.qcow2.xz.tmp" ; \
|
||||
mv "$(releasedir)/$(GUIX_SYSTEM_VM_IMAGE_BASE).$$system.qcow2.xz.tmp" \
|
||||
"$(releasedir)/$(GUIX_SYSTEM_VM_IMAGE_BASE).$$system.qcow2.xz" ; \
|
||||
cp "$$image" "$(releasedir)/$(GUIX_SYSTEM_VM_IMAGE_BASE).$$system.qcow2"; \
|
||||
done
|
||||
@echo
|
||||
@echo "Congratulations! All the release files are now in $(releasedir)."
|
||||
@@ -971,76 +968,32 @@ cuirass-jobs: $(GOBJECTS)
|
||||
|
||||
# Downloading up-to-date PO files.
|
||||
|
||||
# make-download-po-rule DOMAIN DIRECTORY [FILE-NAME-PREFIX]
|
||||
define make-download-po-rule
|
||||
WEBLATE_REPO = https://framagit.org/tyreunom/guix-translations
|
||||
|
||||
download-po.$(1):
|
||||
if [ -f "$(top_srcdir)/$(2)/LINGUAS" ]; then \
|
||||
LINGUAS="`grep -v '^[[:blank:]]*#' < $(top_srcdir)/$(2)/LINGUAS`" ; \
|
||||
else \
|
||||
LINGUAS="`(cd $(top_srcdir)/$(2); \
|
||||
for i in *.po; do echo $$$$i; done) | cut -d . -f 2`" ; \
|
||||
fi ; \
|
||||
for lang in $$$$LINGUAS; do \
|
||||
if wget -nv -O "$(top_srcdir)/$(2)/$(3)$$$$lang.po.tmp" \
|
||||
"https://translate.fedoraproject.org/api/translations/guix/$(1)/$$$$lang/file/" ; \
|
||||
then \
|
||||
msgfilter --no-wrap -i "$(top_srcdir)/$(2)/$(3)$$$$lang.po.tmp" \
|
||||
cat > "$(top_srcdir)/$(2)/$(3)$$$$lang.po.tmp2" ; \
|
||||
rm "$(top_srcdir)/$(2)/$(3)$$$$lang.po.tmp" ; \
|
||||
mv "$(top_srcdir)/$(2)/$(3)$$$$lang.po"{.tmp2,} ; \
|
||||
else \
|
||||
rm "$(top_srcdir)/$(2)/$(3)$$$$lang.po.tmp" ; \
|
||||
fi ; \
|
||||
done
|
||||
|
||||
.PHONY: download-po.$(1)
|
||||
|
||||
endef
|
||||
|
||||
# Checking po files for issues. This is useful to run after downloading new
|
||||
# po files.
|
||||
|
||||
# make-check-po-rule DOMAIN DIRECTORY [FILE-NAME-PREFIX]
|
||||
define make-check-po-rule
|
||||
|
||||
check-po.$(1):
|
||||
if [ -f "$(top_srcdir)/$(2)/LINGUAS" ]; then \
|
||||
LINGUAS="`grep -v '^[[:blank:]]*#' < $(top_srcdir)/$(2)/LINGUAS`" ; \
|
||||
else \
|
||||
LINGUAS="`(cd $(top_srcdir)/$(2); \
|
||||
for i in *.po; do echo $$$$i; done) | cut -d . -f 2`" ; \
|
||||
fi ; \
|
||||
for lang in $$$$LINGUAS; do \
|
||||
if [ -f "$(top_srcdir)/$(2)/$(3)$$$$lang.po" ]; \
|
||||
then \
|
||||
if ! msgfmt -c "$(top_srcdir)/$(2)/$(3)$$$$lang.po" ; \
|
||||
then \
|
||||
exit 1 ; \
|
||||
fi ; \
|
||||
fi ; \
|
||||
done
|
||||
|
||||
.PHONY: check-po.$(1)
|
||||
|
||||
endef
|
||||
|
||||
$(eval $(call make-download-po-rule,documentation-cookbook,po/doc,guix-cookbook.))
|
||||
$(eval $(call make-download-po-rule,documentation-manual,po/doc,guix-manual.))
|
||||
$(eval $(call make-download-po-rule,guix,po/guix))
|
||||
$(eval $(call make-download-po-rule,packages,po/packages))
|
||||
|
||||
$(eval $(call make-check-po-rule,documentation-cookbook,po/doc,guix-cookbook.))
|
||||
$(eval $(call make-check-po-rule,documentation-manual,po/doc,guix-manual.))
|
||||
$(eval $(call make-check-po-rule,guix,po/guix))
|
||||
$(eval $(call make-check-po-rule,packages,po/packages))
|
||||
|
||||
download-po: $(foreach domain,guix packages documentation-manual documentation-cookbook,download-po.$(domain))
|
||||
# Shallow clone the Git repository behind Weblate and copy files from it if
|
||||
# they contain at least one translation, and they are well-formed (Scheme
|
||||
# format only), warn otherwise. Copied files are converted to a canonical
|
||||
# form.
|
||||
download-po:
|
||||
dir=$$(mktemp -d); \
|
||||
git clone --depth 1 "$(WEBLATE_REPO)" "$$dir/translations"; \
|
||||
for domain in po/doc po/guix po/packages; do \
|
||||
for po in "$$dir/translations/$$domain"/*.po; do \
|
||||
translated=$$(LANG=en_US.UTF-8 msgfmt --statistics "$$po" 2>&1 | cut -f1 -d' '); \
|
||||
target=$$(basename "$$po"); \
|
||||
target="$$domain/$$target"; \
|
||||
if msgfmt -c "$$po" && [ "$$translated" != "0" ]; then \
|
||||
msgfilter --no-wrap -i "$$po" cat > "$$po".tmp; \
|
||||
mv "$$po".tmp "$$target"; \
|
||||
echo "copied $$target."; \
|
||||
else \
|
||||
echo "WARN: $$target ($$translated translated messages) was not added/updated."; \
|
||||
fi; \
|
||||
done; \
|
||||
done; \
|
||||
rm -rf "$$dir"
|
||||
.PHONY: download-po
|
||||
|
||||
check-po: $(foreach domain,guix packages documentation-manual documentation-cookbook,check-po.$(domain))
|
||||
.PHONY: check-po
|
||||
|
||||
## -------------- ##
|
||||
## Silent rules. ##
|
||||
## -------------- ##
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
#+TITLE: Guix NEWS – history of user-visible changes
|
||||
#+STARTUP: content hidestars
|
||||
|
||||
Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
|
||||
Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
|
||||
Copyright © 2016, 2017, 2018 Ricardo Wurmus <rekado@elephly.net>
|
||||
|
||||
Copying and distribution of this file, with or without modification,
|
||||
@@ -11,6 +11,137 @@ Copyright © 2016, 2017, 2018 Ricardo Wurmus <rekado@elephly.net>
|
||||
|
||||
Please send Guix bug reports to bug-guix@gnu.org.
|
||||
|
||||
* Changes in 1.3.0 (since 1.2.0)
|
||||
|
||||
** Package management
|
||||
|
||||
*** POWER9 (powerpc64le-linux) is now supported as a technology preview
|
||||
*** New ‘--export-manifest’ and ‘--export-channels’ options of ‘guix package’
|
||||
*** New ‘--profile’ option for ‘guix environment’
|
||||
*** New ‘--discover’ option of ‘guix-daemon’, for local substitute discovery
|
||||
*** New ‘--advertise’ option of ‘guix publish’
|
||||
*** New ‘--with-patch’ and ‘--with-latest’ package transformation options
|
||||
*** ‘guix system image’ supersedes the ‘disk-image’ and ‘vm-image’ sub-commands
|
||||
*** ‘--verbosity=1’ no longer displays download URLs
|
||||
*** ‘guix publish -C’ now supports zstd compression via Guile-zstd
|
||||
*** ‘guix-daemon’ now supports zstd substitutes, which decompress faster
|
||||
*** New ‘guix import go’ command, to import Go packages
|
||||
*** ‘guix import opam’ now supports Coq packages and has a ‘--repo’ option
|
||||
*** ‘guix import crate’ now honors semantic versioning (“semver”)
|
||||
*** ‘guix import nix’ has been removed
|
||||
*** New updaters (see ‘guix refresh’): ‘sourceforge’ and ‘generic-html’
|
||||
*** Substitute installation has been optimized
|
||||
*** ‘guix’ commands suggest alternative sub-commands or options upon typos
|
||||
*** Offloading no longer requires ‘guile’ to be in $PATH on build machines
|
||||
*** ‘GUIX_EXTENSIONS_PATH’ is honored when looking for extensions such as GWL
|
||||
*** New ‘--format’ option for ‘guix processes’
|
||||
*** ‘guix upgrade’ can now be passed several regexps
|
||||
|
||||
** Distribution
|
||||
|
||||
*** The Guix System demonstration VM now supports the SPICE protocol
|
||||
*** The installation script can now run in a fully automated manner
|
||||
*** ‘qemu-binfmt-service-type’ now relies on statically-linked QEMU
|
||||
*** ‘sysctl-service-type’ enables Linux protected hardlinks/symlinks by default
|
||||
*** ‘%base-services’ now includes a default ‘sysctl-service-type’ instance
|
||||
*** Linux Logical Volumne Manager (LVM) now supported, via ‘lvm-device-mapping’
|
||||
*** ‘guix system init’ has been optimized
|
||||
*** ‘guix system’ warns when users/groups appear more than once
|
||||
*** ‘guix system image -t rock64-raw’ produces images for Rock64 devices
|
||||
*** ‘herd discover guix-daemon on’ turns on substitute server discovery
|
||||
*** Default initrd now supports bcachefs
|
||||
*** CUPS service includes ‘brlaser’ extension by default
|
||||
*** “lp” group is no longer included in ‘%base-groups’
|
||||
*** New ‘--graph-backend’ option for ‘guix system {extension,shepherd}-graph’
|
||||
*** New services
|
||||
|
||||
agate, cuirass-remote-worker, ipfs, keepalived, laminar, radicale, syncthing,
|
||||
transmission-daemon, wireguard, xorg-server
|
||||
|
||||
*** 2009 new packages
|
||||
|
||||
*** 3100 package updates
|
||||
|
||||
Noteworthy updates:
|
||||
emacs 27.2, gcc-toolchain 10.3.0, ghc 8.8.3, glibc 2.31, gnome 3.34.5,
|
||||
gnupg 2.2.27, go 1.14.15, guile 3.0.5, icecat 78.10.0-guix0-preview1,
|
||||
icedtea 3.7.0, inkscape 1.0.2, julia 1.5.3, libreoffice 6.4.7.2,
|
||||
linux-libre 5.11.15, ocaml 4.11.1, octave 6.2.0, openjdk 14.0,
|
||||
python 3.8.2, racket 8.0, rust 1.51.0, r 4.0.4, sbcl 2.1.3, xfce 4.16.0,
|
||||
xorg-server 1.20.10
|
||||
|
||||
** Programming interfaces
|
||||
|
||||
*** New ‘channel-with-substitutes-available’ procedure in (guix channels)
|
||||
*** New modules (guix substitutes), (guix narinfo), and (guix avahi)
|
||||
*** <image> records can be passed to ‘guix system image’
|
||||
*** New (guix ipfs) module to interact with an IPFS gateway
|
||||
|
||||
** Noteworthy bug fixes
|
||||
|
||||
*** Risk of local privilege escalation via guix-daemon fixed
|
||||
(<https://issues.guix.gnu.org/47229>, CVE-2021-27851)
|
||||
*** Setuid programs on Guix System are no longer setgid root
|
||||
(<https://issues.guix.gnu.org/46395>)
|
||||
*** Risk of local privilege escalation during reconfigure fixed
|
||||
(<https://issues.guix.gnu.org/47584>)
|
||||
*** Grafting recognizes UTF-16 and UTF-32 store references
|
||||
(<https://issues.guix.gnu.org/33848>)
|
||||
*** (guix git) honors HTTP/HTTPS proxy settings for Git submodules
|
||||
(<https://issues.guix.gnu.org/44593>)
|
||||
*** Fix ‘guix substitute’ crash when interleaving lzip and gzip
|
||||
(<https://issues.guix.gnu.org/46967>)
|
||||
*** Fix GnuTLS memory corruption when used from Guile
|
||||
(<https://issues.guix.gnu.org/46330>)
|
||||
*** Update GnuTLS to 3.6.15, addressing a time-dependent test failure
|
||||
(<https://issues.guix.gnu.org/44559>)
|
||||
*** Booted system is fully protected from garbage collection
|
||||
(<https://issues.guix.gnu.org/46767>)
|
||||
*** Add MSDOS disk label support on UEFI systems
|
||||
(<https://issues.guix.gnu.org/47889>)
|
||||
*** Installer’s kmscon no longer uses up 100% CPU
|
||||
(<https://issues.guix.gnu.org/39341>)
|
||||
*** Git checkouts can be updated to the remote’s default HEAD
|
||||
(<https://issues.guix.gnu.org/45187>)
|
||||
*** ‘guix pull’ correctly displays early builds and downloads
|
||||
(<https://issues.guix.gnu.org/41930>)
|
||||
*** Fix OpenRC init scripts for ‘guix-daemon’
|
||||
(<https://issues.guix.gnu.org/46871>)
|
||||
*** Activate system when switching generations
|
||||
(<https://issues.guix.gnu.org/38884>)
|
||||
*** ‘guix environment -C’ preserves original mount flags
|
||||
(<https://issues.guix.gnu.org/46292>)
|
||||
*** Remove duplicates in profile transactions
|
||||
(<https://issues.guix.gnu.org/23874>)
|
||||
*** Fix sound problems with ALSA plugins on foreign distros
|
||||
(<https://issues.guix.gnu.org/40832>)
|
||||
|
||||
** Native language support
|
||||
|
||||
*** Updated translations of the manual
|
||||
|
||||
The manual is fully translated into French and German, 90% translated into
|
||||
Spanish, and has preliminary translations into Chinese, Brazilian Portuguese,
|
||||
and Russian.
|
||||
|
||||
*** Update translations of the cookbook
|
||||
|
||||
The cookbook is fully translated in French and German and has a preliminary
|
||||
translation into Korean.
|
||||
|
||||
*** Updated translations of messages
|
||||
|
||||
This version of Guix is fully translated in French, German, and Slovak; it has
|
||||
good translation into Brazilian Portuguese and Spanish, and preliminary
|
||||
translations in a dozen other languages.
|
||||
|
||||
*** Translations now hosted on Fedora’s Weblate instance
|
||||
|
||||
Translations are now handled at
|
||||
<https://translate.fedoraproject.org/projects/guix/guix/> (thanks, Fedora!).
|
||||
You can join to help improve translations in your native language of messages,
|
||||
documentation, package descriptions, and the web site.
|
||||
|
||||
* Changes in 1.2.0 (since 1.1.0)
|
||||
|
||||
** Package management
|
||||
|
||||
@@ -62,7 +62,7 @@ Please email <help-guix@gnu.org> for questions and <bug-guix@gnu.org> for bug
|
||||
reports; email <gnu-system-discuss@gnu.org> for general issues regarding the
|
||||
GNU system.
|
||||
|
||||
Join #guix on irc.freenode.net.
|
||||
Join #guix on irc.libera.chat.
|
||||
|
||||
* Guix & Nix
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ There will be a few 0.x releases by then to give the new features more
|
||||
exposure and testing.
|
||||
|
||||
You're welcome to discuss this road map on guix-devel@gnu.org or #guix on
|
||||
Freenode!
|
||||
the Libera Chat IRC network!
|
||||
|
||||
* Features scheduled for 1.0
|
||||
|
||||
|
||||
@@ -166,16 +166,22 @@ paragraph."
|
||||
(string-append data-directory "/packages-"
|
||||
version ".txt"))
|
||||
|
||||
(define (package<? p1 p2)
|
||||
(string<? (package-full-name p1) (package-full-name p2)))
|
||||
|
||||
(let-values (((previous-version new-version)
|
||||
(call-with-input-file news-file NEWS->versions)))
|
||||
(format (current-error-port) "Updating NEWS for ~a to ~a...~%"
|
||||
previous-version new-version)
|
||||
(let* ((old (call-with-input-file (package-file previous-version)
|
||||
read))
|
||||
(new (fold-packages (lambda (p r)
|
||||
(alist-cons (package-name p) (package-version p)
|
||||
r))
|
||||
'())))
|
||||
(all-packages/sorted (sort (fold-packages (lambda (p r)
|
||||
(cons p r))
|
||||
'())
|
||||
package<?))
|
||||
(new (map (lambda (p)
|
||||
(cons (package-name p) (package-version p)))
|
||||
all-packages/sorted)))
|
||||
(call-with-output-file (package-file new-version)
|
||||
(lambda (port)
|
||||
(pretty-print new port)))
|
||||
|
||||
+1
-1
@@ -21,7 +21,7 @@ dnl For the C++ code. This must be used early.
|
||||
AC_USE_SYSTEM_EXTENSIONS
|
||||
|
||||
AM_GNU_GETTEXT([external])
|
||||
AM_GNU_GETTEXT_VERSION([0.18.1])
|
||||
AM_GNU_GETTEXT_VERSION([0.19.1])
|
||||
|
||||
GUIX_SYSTEM_TYPE
|
||||
GUIX_ASSERT_SUPPORTED_SYSTEM
|
||||
|
||||
+1
-1
@@ -948,7 +948,7 @@ from SOURCE."
|
||||
(div
|
||||
(ul
|
||||
(li (a (@ (href "html_node"))
|
||||
"HTML, with one page per node"))
|
||||
"HTML, with a separate page per node"))
|
||||
(li (a (@ (href
|
||||
,(string-append
|
||||
#$manual
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
This project is a cooperative effort, and we need your help to make it
|
||||
grow! Please get in touch with us on @email{guix-devel@@gnu.org} and
|
||||
@code{#guix} on the Freenode IRC network. We welcome ideas, bug
|
||||
@code{#guix} on the Libera Chat IRC network. We welcome ideas, bug
|
||||
reports, patches, and anything that may be helpful to the project. We
|
||||
particularly welcome help on packaging (@pxref{Packaging Guidelines}).
|
||||
|
||||
|
||||
+7
-31
@@ -10,8 +10,8 @@
|
||||
@include version.texi
|
||||
|
||||
@c Identifier of the OpenPGP key used to sign tarballs and such.
|
||||
@set OPENPGP-SIGNING-KEY-ID 3CE464558A84FDC69DB40CFB090B11993D9AEBB5
|
||||
@set OPENPGP-SIGNING-KEY-URL https://sv.gnu.org/people/viewgpg.php?user_id=15145
|
||||
@set OPENPGP-SIGNING-KEY-ID 27D586A4F8900854329FF09F1260E46482E63562
|
||||
@set OPENPGP-SIGNING-KEY-URL https://sv.gnu.org/people/viewgpg.php?user_id=127547
|
||||
|
||||
@c Base URL for downloads.
|
||||
@set BASE-URL https://ftp.gnu.org/gnu/guix
|
||||
@@ -2099,7 +2099,7 @@ about their support in GNU/Linux.
|
||||
|
||||
An ISO-9660 installation image that can be written to a USB stick or
|
||||
burnt to a DVD can be downloaded from
|
||||
@indicateurl{@value{BASE-URL}/guix-system-install-@value{VERSION}.x86_64-linux.iso.xz},
|
||||
@indicateurl{@value{BASE-URL}/guix-system-install-@value{VERSION}.x86_64-linux.iso},
|
||||
where you can replace @code{x86_64-linux} with one of:
|
||||
|
||||
@table @code
|
||||
@@ -2115,8 +2115,8 @@ Make sure to download the associated @file{.sig} file and to verify the
|
||||
authenticity of the image against it, along these lines:
|
||||
|
||||
@example
|
||||
$ wget @value{BASE-URL}/guix-system-install-@value{VERSION}.x86_64-linux.iso.xz.sig
|
||||
$ gpg --verify guix-system-install-@value{VERSION}.x86_64-linux.iso.xz.sig
|
||||
$ wget @value{BASE-URL}/guix-system-install-@value{VERSION}.x86_64-linux.iso.sig
|
||||
$ gpg --verify guix-system-install-@value{VERSION}.x86_64-linux.iso.sig
|
||||
@end example
|
||||
|
||||
If that command fails because you do not have the required public key,
|
||||
@@ -2140,17 +2140,6 @@ It is meant to be copied @emph{as is} to a large-enough USB stick or DVD.
|
||||
|
||||
@unnumberedsubsec Copying to a USB Stick
|
||||
|
||||
To copy the image to a USB stick, follow these steps:
|
||||
|
||||
@enumerate
|
||||
@item
|
||||
Decompress the image using the @command{xz} command:
|
||||
|
||||
@example
|
||||
xz -d guix-system-install-@value{VERSION}.x86_64-linux.iso.xz
|
||||
@end example
|
||||
|
||||
@item
|
||||
Insert a USB stick of 1@tie{}GiB or more into your machine, and determine
|
||||
its device name. Assuming that the USB stick is known as @file{/dev/sdX},
|
||||
copy the image with:
|
||||
@@ -2161,21 +2150,9 @@ sync
|
||||
@end example
|
||||
|
||||
Access to @file{/dev/sdX} usually requires root privileges.
|
||||
@end enumerate
|
||||
|
||||
@unnumberedsubsec Burning on a DVD
|
||||
|
||||
To copy the image to a DVD, follow these steps:
|
||||
|
||||
@enumerate
|
||||
@item
|
||||
Decompress the image using the @command{xz} command:
|
||||
|
||||
@example
|
||||
xz -d guix-system-install-@value{VERSION}.x86_64-linux.iso.xz
|
||||
@end example
|
||||
|
||||
@item
|
||||
Insert a blank DVD into your machine, and determine
|
||||
its device name. Assuming that the DVD drive is known as @file{/dev/srX},
|
||||
copy the image with:
|
||||
@@ -2185,7 +2162,6 @@ growisofs -dvd-compat -Z /dev/srX=guix-system-install-@value{VERSION}.x86_64-lin
|
||||
@end example
|
||||
|
||||
Access to @file{/dev/srX} usually requires root privileges.
|
||||
@end enumerate
|
||||
|
||||
@unnumberedsubsec Booting
|
||||
|
||||
@@ -2651,7 +2627,7 @@ root's login shell, you'll need to @command{guix pull} separately.
|
||||
@end quotation
|
||||
|
||||
Now, @pxref{Getting Started}, and
|
||||
join us on @code{#guix} on the Freenode IRC network or on
|
||||
join us on @code{#guix} on the Libera Chat IRC network or on
|
||||
@email{guix-devel@@gnu.org} to share your experience!
|
||||
|
||||
|
||||
@@ -33515,7 +33491,7 @@ Whether or not the droplet should be created with IPv6 networking.
|
||||
@cindex virtual machine
|
||||
To run Guix in a virtual machine (VM), one can use the pre-built Guix VM image
|
||||
distributed at
|
||||
@url{@value{BASE-URL}/guix-system-vm-image-@value{VERSION}.x86_64-linux.xz}.
|
||||
@url{@value{BASE-URL}/guix-system-vm-image-@value{VERSION}.x86_64-linux.qcow2}.
|
||||
This image is a compressed image in QCOW format. You will first need to
|
||||
decompress with @command{xz -d}, and then you can pass it to an emulator such
|
||||
as QEMU (see below for details).
|
||||
|
||||
+15
-13
@@ -4,7 +4,7 @@
|
||||
# Copyright © 2013 Andreas Enge <andreas@enge.fr>
|
||||
# Copyright © 2016 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
|
||||
# Copyright © 2016, 2018 Mathieu Lirzin <mthl@gnu.org>
|
||||
# Copyright © 2018 Julien Lepiller <julien@lepiller.eu>
|
||||
# Copyright © 2018, 2021 Julien Lepiller <julien@lepiller.eu>
|
||||
#
|
||||
# This file is part of GNU Guix.
|
||||
#
|
||||
@@ -21,6 +21,16 @@
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# If adding a language, update the following variables, and info_TEXINFOS.
|
||||
MANUAL_LANGUAGES = de es fa fr it ko pt_BR ru sk zh_CN
|
||||
COOKBOOK_LANGUAGES = de fa fr ko zh_Hans
|
||||
|
||||
# Arg1: A list of languages codes.
|
||||
# Arg2: The file name stem.
|
||||
lang_to_texinfo = $(foreach lang,$(1),%D%/$(2).$(lang).texi)
|
||||
|
||||
# Automake does not understand GNU Make non-standard extensions,
|
||||
# unfortunately, so we cannot use the above patsubst-based function here.
|
||||
info_TEXINFOS = %D%/guix.texi \
|
||||
%D%/guix.de.texi \
|
||||
%D%/guix.es.texi \
|
||||
@@ -70,18 +80,10 @@ OS_CONFIG_EXAMPLES_TEXI = \
|
||||
%D%/os-config-desktop.texi \
|
||||
%D%/os-config-lightweight-desktop.texi
|
||||
|
||||
TRANSLATED_INFO = \
|
||||
%D%/guix.de.texi \
|
||||
%D%/guix.es.texi \
|
||||
%D%/guix.fr.texi \
|
||||
%D%/guix.ru.texi \
|
||||
%D%/guix.zh_CN.texi \
|
||||
%D%/contributing.de.texi \
|
||||
%D%/contributing.es.texi \
|
||||
%D%/contributing.fr.texi \
|
||||
%D%/contributing.ru.texi \
|
||||
%D%/contributing.zh_CN.texi \
|
||||
%D%/guix-cookbook.de.texi
|
||||
TRANSLATED_INFO = \
|
||||
$(call lang_to_texinfo,$(MANUAL_LANGUAGES),guix) \
|
||||
$(call lang_to_texinfo,$(MANUAL_LANGUAGES),contributing) \
|
||||
$(call lang_to_texinfo,$(COOKBOOK_LANGUAGES),guix-cookbook)
|
||||
|
||||
# Bundle this file so that makeinfo finds it in out-of-source-tree builds.
|
||||
BUILT_SOURCES += $(OS_CONFIG_EXAMPLES_TEXI) $(TRANSLATED_INFO)
|
||||
|
||||
+92
-68
@@ -9,6 +9,7 @@
|
||||
# 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>
|
||||
#
|
||||
# This file is part of GNU Guix.
|
||||
#
|
||||
@@ -64,12 +65,12 @@ INF="[ INFO ] "
|
||||
DEBUG=0
|
||||
GNU_URL="https://ftp.gnu.org/gnu/guix/"
|
||||
#GNU_URL="https://alpha.gnu.org/gnu/guix/"
|
||||
OPENPGP_SIGNING_KEY_ID="3CE464558A84FDC69DB40CFB090B11993D9AEBB5"
|
||||
|
||||
# This script needs to know where root's home directory is. However, we
|
||||
# cannot simply use the HOME environment variable, since there is no guarantee
|
||||
# that it points to root's home directory.
|
||||
ROOT_HOME="$(echo ~root)"
|
||||
# The following associative array holds set of GPG keys used to sign the
|
||||
# releases, keyed by their corresponding Savannah user ID.
|
||||
declare -A GPG_SIGNING_KEYS
|
||||
GPG_SIGNING_KEYS[15145]=3CE464558A84FDC69DB40CFB090B11993D9AEBB5 # ludo
|
||||
GPG_SIGNING_KEYS[127547]=27D586A4F8900854329FF09F1260E46482E63562 # maxim
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
#+UTILITIES
|
||||
@@ -91,13 +92,25 @@ _debug()
|
||||
fi
|
||||
}
|
||||
|
||||
# Return true if user answered yes, false otherwise.
|
||||
# $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
|
||||
}
|
||||
|
||||
chk_require()
|
||||
{ # Check that every required command is available.
|
||||
declare -a warn
|
||||
local c
|
||||
|
||||
_debug "--- [ $FUNCNAME ] ---"
|
||||
_debug "--- [ ${FUNCNAME[0]} ] ---"
|
||||
|
||||
for c in "$@"; do
|
||||
command -v "$c" &>/dev/null || warn+=("$c")
|
||||
@@ -112,29 +125,44 @@ chk_require()
|
||||
|
||||
chk_gpg_keyring()
|
||||
{ # Check whether the Guix release signing public key is present.
|
||||
_debug "--- [ $FUNCNAME ] ---"
|
||||
_debug "--- [ ${FUNCNAME[0]} ] ---"
|
||||
local user_id
|
||||
local gpg_key_id
|
||||
local exit_flag
|
||||
|
||||
# Without --dry-run this command will create a ~/.gnupg owned by root on
|
||||
# systems where gpg has never been used, causing errors and confusion.
|
||||
gpg --dry-run --list-keys ${OPENPGP_SIGNING_KEY_ID} >/dev/null 2>&1 || (
|
||||
_err "${ERR}Missing OpenPGP public key. Fetch it with this command:"
|
||||
echo " wget 'https://sv.gnu.org/people/viewgpg.php?user_id=15145' -qO - | sudo -i gpg --import -"
|
||||
for user_id in "${!GPG_SIGNING_KEYS[@]}"; do
|
||||
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 \
|
||||
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" \
|
||||
-qO - | gpg --import -
|
||||
else
|
||||
_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\" -qO - | \
|
||||
sudo -i gpg --import -"
|
||||
exit_flag=yes
|
||||
fi
|
||||
fi
|
||||
done
|
||||
if [ "$exit_flag" = yes ]; then
|
||||
exit 1
|
||||
)
|
||||
fi
|
||||
}
|
||||
|
||||
chk_term()
|
||||
{ # Check for ANSI terminal for color printing.
|
||||
local ansi_term
|
||||
|
||||
if [ -t 2 ]; then
|
||||
if [ "${TERM+set}" = 'set' ]; then
|
||||
case "$TERM" in
|
||||
xterm*|rxvt*|urxvt*|linux*|vt*|eterm*|screen*)
|
||||
ansi_term=true
|
||||
;;
|
||||
*)
|
||||
ansi_term=false
|
||||
ERR="[ FAIL ] "
|
||||
PAS="[ PASS ] "
|
||||
;;
|
||||
@@ -231,7 +259,7 @@ guix_get_bin_list()
|
||||
local latest_ver
|
||||
local default_ver
|
||||
|
||||
_debug "--- [ $FUNCNAME ] ---"
|
||||
_debug "--- [ ${FUNCNAME[0]} ] ---"
|
||||
|
||||
# Filter only version and architecture
|
||||
bin_ver_ls=("$(wget -qO- "$gnu_url" \
|
||||
@@ -260,25 +288,25 @@ guix_get_bin()
|
||||
local url="$1"
|
||||
local bin_ver="$2"
|
||||
local dl_path="$3"
|
||||
local wget_args=()
|
||||
|
||||
_debug "--- [ $FUNCNAME ] ---"
|
||||
_debug "--- [ ${FUNCNAME[0]} ] ---"
|
||||
|
||||
_msg "${INF}Downloading Guix release archive"
|
||||
|
||||
wget --help | grep -q '\--show-progress' && \
|
||||
_PROGRESS_OPT="-q --show-progress" || _PROGRESS_OPT=""
|
||||
wget $_PROGRESS_OPT -P "$dl_path" "${url}/${bin_ver}.tar.xz" "${url}/${bin_ver}.tar.xz.sig"
|
||||
wget --help | grep -q '\--show-progress' \
|
||||
&& wget_args=("-q" "--show-progress")
|
||||
|
||||
if [[ "$?" -eq 0 ]]; then
|
||||
_msg "${PAS}download completed."
|
||||
if wget "${wget_args[@]}" -P "$dl_path" \
|
||||
"${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
|
||||
fi
|
||||
|
||||
pushd "${dl_path}" >/dev/null
|
||||
gpg --verify "${bin_ver}.tar.xz.sig" >/dev/null 2>&1
|
||||
if [[ "$?" -eq 0 ]]; then
|
||||
if gpg --verify "${bin_ver}.tar.xz.sig" >/dev/null 2>&1; then
|
||||
_msg "${PAS}Signature is valid."
|
||||
popd >/dev/null
|
||||
else
|
||||
@@ -292,45 +320,44 @@ sys_create_store()
|
||||
local pkg="$1"
|
||||
local tmp_path="$2"
|
||||
|
||||
_debug "--- [ $FUNCNAME ] ---"
|
||||
|
||||
cd "$tmp_path"
|
||||
tar --extract \
|
||||
--file "$pkg" &&
|
||||
_msg "${PAS}unpacked archive"
|
||||
_debug "--- [ ${FUNCNAME[0]} ] ---"
|
||||
|
||||
if [[ -e "/var/guix" || -e "/gnu" ]]; then
|
||||
_err "${ERR}A previous Guix installation was found. Refusing to overwrite."
|
||||
exit 1
|
||||
else
|
||||
_msg "${INF}Installing /var/guix and /gnu..."
|
||||
mv "${tmp_path}/var/guix" /var/
|
||||
mv "${tmp_path}/gnu" /
|
||||
fi
|
||||
|
||||
_msg "${INF}Linking the root user's profile"
|
||||
mkdir -p "${ROOT_HOME}/.config/guix"
|
||||
ln -sf /var/guix/profiles/per-user/root/current-guix \
|
||||
"${ROOT_HOME}/.config/guix/current"
|
||||
cd "$tmp_path"
|
||||
tar --extract --file "$pkg" && _msg "${PAS}unpacked archive"
|
||||
|
||||
GUIX_PROFILE="${ROOT_HOME}/.config/guix/current"
|
||||
_msg "${INF}Installing /var/guix and /gnu..."
|
||||
mv "${tmp_path}/var/guix" /var/
|
||||
mv "${tmp_path}/gnu" /
|
||||
|
||||
_msg "${INF}Linking the root user's profile"
|
||||
mkdir -p "~root/.config/guix"
|
||||
ln -sf /var/guix/profiles/per-user/root/current-guix \
|
||||
"~root/.config/guix/current"
|
||||
|
||||
GUIX_PROFILE="~root/.config/guix/current"
|
||||
# shellcheck disable=SC1090
|
||||
source "${GUIX_PROFILE}/etc/profile"
|
||||
_msg "${PAS}activated root profile at ${ROOT_HOME}/.config/guix/current"
|
||||
_msg "${PAS}activated root profile at ${GUIX_PROFILE}"
|
||||
}
|
||||
|
||||
sys_create_build_user()
|
||||
{ # Create the group and user accounts for build users.
|
||||
|
||||
_debug "--- [ $FUNCNAME ] ---"
|
||||
_debug "--- [ ${FUNCNAME[0]} ] ---"
|
||||
|
||||
if [ $(getent group guixbuild) ]; then
|
||||
if getent group guixbuild > /dev/null; then
|
||||
_msg "${INF}group guixbuild exists"
|
||||
else
|
||||
groupadd --system guixbuild
|
||||
_msg "${PAS}group <guixbuild> created"
|
||||
fi
|
||||
|
||||
if [ $(getent group kvm) ]; then
|
||||
if getent group kvm > /dev/null; then
|
||||
_msg "${INF}group kvm exists and build users will be added to it"
|
||||
local KVMGROUP=,kvm
|
||||
fi
|
||||
@@ -359,7 +386,7 @@ sys_enable_guix_daemon()
|
||||
local local_bin
|
||||
local var_guix
|
||||
|
||||
_debug "--- [ $FUNCNAME ] ---"
|
||||
_debug "--- [ ${FUNCNAME[0]} ] ---"
|
||||
|
||||
info_path="/usr/local/share/info"
|
||||
local_bin="/usr/local/bin"
|
||||
@@ -368,7 +395,7 @@ sys_enable_guix_daemon()
|
||||
case "$INIT_SYS" in
|
||||
upstart)
|
||||
{ initctl reload-configuration;
|
||||
cp "${ROOT_HOME}/.config/guix/current/lib/upstart/system/guix-daemon.conf" \
|
||||
cp "~root/.config/guix/current/lib/upstart/system/guix-daemon.conf" \
|
||||
/etc/init/ &&
|
||||
start guix-daemon; } &&
|
||||
_msg "${PAS}enabled Guix daemon via upstart"
|
||||
@@ -377,15 +404,15 @@ sys_enable_guix_daemon()
|
||||
{ # systemd .mount units must be named after the target directory.
|
||||
# Here we assume a hard-coded name of /gnu/store.
|
||||
# XXX Work around <https://issues.guix.gnu.org/41356> until next release.
|
||||
if [ -f "${ROOT_HOME}/.config/guix/current/lib/systemd/system/gnu-store.mount" ]; then
|
||||
cp "${ROOT_HOME}/.config/guix/current/lib/systemd/system/gnu-store.mount" \
|
||||
if [ -f "~root/.config/guix/current/lib/systemd/system/gnu-store.mount" ]; then
|
||||
cp "~root/.config/guix/current/lib/systemd/system/gnu-store.mount" \
|
||||
/etc/systemd/system/;
|
||||
chmod 664 /etc/systemd/system/gnu-store.mount;
|
||||
systemctl daemon-reload &&
|
||||
systemctl enable gnu-store.mount;
|
||||
fi
|
||||
|
||||
cp "${ROOT_HOME}/.config/guix/current/lib/systemd/system/guix-daemon.service" \
|
||||
cp "~root/.config/guix/current/lib/systemd/system/guix-daemon.service" \
|
||||
/etc/systemd/system/;
|
||||
chmod 664 /etc/systemd/system/guix-daemon.service;
|
||||
|
||||
@@ -406,7 +433,7 @@ sys_enable_guix_daemon()
|
||||
;;
|
||||
sysv-init)
|
||||
{ mkdir -p /etc/init.d;
|
||||
cp "${ROOT_HOME}/.config/guix/current/etc/init.d/guix-daemon" \
|
||||
cp "~root/.config/guix/current/etc/init.d/guix-daemon" \
|
||||
/etc/init.d/guix-daemon;
|
||||
chmod 775 /etc/init.d/guix-daemon;
|
||||
|
||||
@@ -417,7 +444,7 @@ sys_enable_guix_daemon()
|
||||
;;
|
||||
openrc)
|
||||
{ mkdir -p /etc/init.d;
|
||||
cp "${ROOT_HOME}/.config/guix/current/etc/openrc/guix-daemon" \
|
||||
cp "~root/.config/guix/current/etc/openrc/guix-daemon" \
|
||||
/etc/init.d/guix-daemon;
|
||||
chmod 775 /etc/init.d/guix-daemon;
|
||||
|
||||
@@ -427,7 +454,7 @@ sys_enable_guix_daemon()
|
||||
;;
|
||||
NA|*)
|
||||
_msg "${ERR}unsupported init system; run the daemon manually:"
|
||||
echo " ${ROOT_HOME}/.config/guix/current/bin/guix-daemon --build-users-group=guixbuild"
|
||||
echo " ~root/.config/guix/current/bin/guix-daemon --build-users-group=guixbuild"
|
||||
;;
|
||||
esac
|
||||
|
||||
@@ -444,21 +471,18 @@ sys_enable_guix_daemon()
|
||||
|
||||
sys_authorize_build_farms()
|
||||
{ # authorize the public key of the build farm
|
||||
while true; do
|
||||
read -p "Permit downloading pre-built package binaries from the project's build farm? (yes/no) " yn
|
||||
case $yn in
|
||||
[Yy]*) guix archive --authorize < "${ROOT_HOME}/.config/guix/current/share/guix/ci.guix.gnu.org.pub" &&
|
||||
_msg "${PAS}Authorized public key for ci.guix.gnu.org";
|
||||
break;;
|
||||
[Nn]*) _msg "${INF}Skipped authorizing build farm public keys"
|
||||
break;;
|
||||
*) _msg "Please answer yes or no.";
|
||||
esac
|
||||
done
|
||||
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"
|
||||
fi
|
||||
}
|
||||
|
||||
sys_create_init_profile()
|
||||
{ # Create /etc/profile.d/guix.sh for better desktop integration
|
||||
{ # 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
|
||||
@@ -532,7 +556,7 @@ This script installs GNU Guix on your system
|
||||
https://www.gnu.org/software/guix/
|
||||
EOF
|
||||
echo -n "Press return to continue..."
|
||||
read -r ANSWER
|
||||
read -r
|
||||
}
|
||||
|
||||
main()
|
||||
@@ -562,8 +586,8 @@ main()
|
||||
if ! [[ $GUIX_BINARY_FILE_NAME =~ $ARCH_OS ]]; then
|
||||
_err "$ARCH_OS not in ${GUIX_BINARY_FILE_NAME}; aborting"
|
||||
fi
|
||||
_msg "Using manually provided binary ${GUIX_BINARY_FILE_NAME}"
|
||||
GUIX_BINARY_FILE_NAME=$(realpath $GUIX_BINARY_FILE_NAME)
|
||||
_msg "${INF}Using manually provided binary ${GUIX_BINARY_FILE_NAME}"
|
||||
GUIX_BINARY_FILE_NAME=$(realpath "$GUIX_BINARY_FILE_NAME")
|
||||
fi
|
||||
|
||||
sys_create_store "${GUIX_BINARY_FILE_NAME}" "${tmp_path}"
|
||||
|
||||
+60
-34
@@ -66,9 +66,14 @@
|
||||
#:use-module (srfi srfi-1)
|
||||
#:use-module (srfi srfi-26)
|
||||
#:use-module (ice-9 match)
|
||||
#:export (%core-packages
|
||||
#:export (derivation->job
|
||||
image->job
|
||||
|
||||
%core-packages
|
||||
%cross-targets
|
||||
channel-source->package
|
||||
|
||||
arguments->systems
|
||||
cuirass-jobs))
|
||||
|
||||
;;; Commentary:
|
||||
@@ -87,6 +92,9 @@ MAX-SILENT-TIME and TIMEOUT are build options passed to the daemon when
|
||||
building the derivation."
|
||||
`((#:job-name . ,name)
|
||||
(#:derivation . ,(derivation-file-name drv))
|
||||
(#:inputs . ,(map (compose derivation-file-name
|
||||
derivation-input-derivation)
|
||||
(derivation-inputs drv)))
|
||||
(#:outputs . ,(filter-map
|
||||
(lambda (res)
|
||||
(match res
|
||||
@@ -232,43 +240,48 @@ SYSTEM."
|
||||
(define (hours hours)
|
||||
(* 3600 hours))
|
||||
|
||||
(define* (image->job store image
|
||||
#:key name system)
|
||||
"Return the job for IMAGE on SYSTEM. If NAME is passed, use it as job name,
|
||||
otherwise use the IMAGE name."
|
||||
(let* ((image-name (or name
|
||||
(symbol->string (image-name image))))
|
||||
(name (string-append image-name "." system))
|
||||
(drv (run-with-store store
|
||||
(mbegin %store-monad
|
||||
(set-guile-for-build (default-guile))
|
||||
(lower-object (system-image image))))))
|
||||
(parameterize ((%graft? #f))
|
||||
(derivation->job name drv))))
|
||||
|
||||
(define (image-jobs store system)
|
||||
"Return a list of jobs that build images for SYSTEM."
|
||||
(define (->job name drv)
|
||||
(let ((name (string-append name "." system)))
|
||||
(parameterize ((%graft? #f))
|
||||
(derivation->job name drv))))
|
||||
|
||||
(define (build-image image)
|
||||
(run-with-store store
|
||||
(mbegin %store-monad
|
||||
(set-guile-for-build (default-guile))
|
||||
(lower-object (system-image image)))))
|
||||
|
||||
(define MiB
|
||||
(expt 2 20))
|
||||
|
||||
(if (member system %guix-system-supported-systems)
|
||||
`(,(->job "usb-image"
|
||||
(build-image
|
||||
(image
|
||||
(inherit efi-disk-image)
|
||||
(operating-system installation-os))))
|
||||
,(->job "iso9660-image"
|
||||
(build-image
|
||||
(image
|
||||
(inherit (image-with-label
|
||||
iso9660-image
|
||||
(string-append "GUIX_" system "_"
|
||||
(if (> (string-length %guix-version) 7)
|
||||
(substring %guix-version 0 7)
|
||||
%guix-version))))
|
||||
(operating-system installation-os))))
|
||||
`(,(image->job store
|
||||
(image
|
||||
(inherit efi-disk-image)
|
||||
(operating-system installation-os))
|
||||
#:name "usb-image"
|
||||
#:system system)
|
||||
,(image->job
|
||||
store
|
||||
(image
|
||||
(inherit (image-with-label
|
||||
iso9660-image
|
||||
(string-append "GUIX_" system "_"
|
||||
(if (> (string-length %guix-version) 7)
|
||||
(substring %guix-version 0 7)
|
||||
%guix-version))))
|
||||
(operating-system installation-os))
|
||||
#:name "iso9660-image"
|
||||
#:system system)
|
||||
;; Only cross-compile Guix System images from x86_64-linux for now.
|
||||
,@(if (string=? system "x86_64-linux")
|
||||
(map (lambda (image)
|
||||
(->job (symbol->string (image-name image))
|
||||
(build-image image)))
|
||||
(map (cut image->job store <>
|
||||
#:system system)
|
||||
%guix-system-images)
|
||||
'()))
|
||||
'()))
|
||||
@@ -435,6 +448,13 @@ valid."
|
||||
load-manifest)
|
||||
manifests))))
|
||||
|
||||
(define (arguments->systems arguments)
|
||||
"Return the systems list from ARGUMENTS."
|
||||
(match (assoc-ref arguments 'systems)
|
||||
(#f %cuirass-supported-systems)
|
||||
((lst ...) lst)
|
||||
((? string? str) (call-with-input-string str read))))
|
||||
|
||||
|
||||
;;;
|
||||
;;; Cuirass entry point.
|
||||
@@ -446,10 +466,7 @@ valid."
|
||||
(assoc-ref arguments 'subset))
|
||||
|
||||
(define systems
|
||||
(match (assoc-ref arguments 'systems)
|
||||
(#f %cuirass-supported-systems)
|
||||
((lst ...) lst)
|
||||
((? string? str) (call-with-input-string str read))))
|
||||
(arguments->systems arguments))
|
||||
|
||||
(define channels
|
||||
(let ((channels (assq-ref arguments 'channels)))
|
||||
@@ -514,6 +531,15 @@ valid."
|
||||
('tarball
|
||||
;; Build Guix tarball only.
|
||||
(tarball-jobs store system))
|
||||
(('custom . modules)
|
||||
;; Build custom modules jobs only.
|
||||
(append-map
|
||||
(lambda (module)
|
||||
(let ((proc (module-ref
|
||||
(resolve-interface module)
|
||||
'cuirass-jobs)))
|
||||
(proc store arguments)))
|
||||
modules))
|
||||
(('channels . channels)
|
||||
;; Build only the packages from CHANNELS.
|
||||
(let ((all (all-packages)))
|
||||
|
||||
@@ -856,6 +856,9 @@ Guile's foreign function interface.")
|
||||
(home-page "https://notabug.org/guile-zlib/guile-zlib")
|
||||
(license license:gpl3+)))
|
||||
|
||||
(define-public guile2.2-zlib
|
||||
(package-for-guile-2.2 guile-zlib))
|
||||
|
||||
(define-public guile-lzlib
|
||||
(package
|
||||
(name "guile-lzlib")
|
||||
@@ -892,6 +895,9 @@ pure Scheme by using Guile's foreign function interface.")
|
||||
(home-page "https://notabug.org/guile-lzlib/guile-lzlib")
|
||||
(license license:gpl3+)))
|
||||
|
||||
(define-public guile2.2-lzlib
|
||||
(package-for-guile-2.2 guile-lzlib))
|
||||
|
||||
(define-public guile-zstd
|
||||
(package
|
||||
(name "guile-zstd")
|
||||
|
||||
+61
-23
@@ -2,7 +2,7 @@
|
||||
;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ricardo Wurmus <rekado@elephly.net>
|
||||
;;; Copyright © 2016 Leo Famulari <leo@famulari.name>
|
||||
;;; Copyright © 2016, 2017 Roel Janssen <roel@gnu.org>
|
||||
;;; Copyright © 2017, 2019 Carlo Zancanaro <carlo@zancanaro.id.au>
|
||||
;;; Copyright © 2017, 2019, 2021 Carlo Zancanaro <carlo@zancanaro.id.au>
|
||||
;;; Copyright © 2017-2020 Julien Lepiller <julien@lepiller.eu>
|
||||
;;; Copyright © 2017 Thomas Danckaert <post@thomasdanckaert.be>
|
||||
;;; Copyright © 2016, 2017, 2018 Alex Vong <alexvong1995@gmail.com>
|
||||
@@ -1749,6 +1749,9 @@ IcedTea build harness.")
|
||||
((guix build ant-build-system)
|
||||
(guix build syscalls)
|
||||
,@%gnu-build-system-modules)
|
||||
|
||||
#:disallowed-references ((,icedtea-7 "jdk"))
|
||||
|
||||
,@(substitute-keyword-arguments (package-arguments icedtea-7)
|
||||
((#:modules modules)
|
||||
`((guix build utils)
|
||||
@@ -1792,12 +1795,21 @@ new Date();"))
|
||||
(add-after 'unpack 'patch-jni-libs
|
||||
;; Hardcode dynamically loaded libraries.
|
||||
(lambda _
|
||||
(let* ((library-path (search-path-as-string->list
|
||||
(getenv "LIBRARY_PATH")))
|
||||
(define remove
|
||||
(@ (srfi srfi-1) remove))
|
||||
|
||||
(define (icedtea-or-openjdk? path)
|
||||
(or (string-contains path "openjdk")
|
||||
(string-contains path "icedtea")))
|
||||
|
||||
(let* ((library-path (remove icedtea-or-openjdk?
|
||||
(search-path-as-string->list
|
||||
(getenv "LIBRARY_PATH"))))
|
||||
(find-library (lambda (name)
|
||||
(search-path
|
||||
library-path
|
||||
(string-append "lib" name ".so")))))
|
||||
(or (search-path
|
||||
library-path
|
||||
(string-append "lib" name ".so"))
|
||||
(string-append "lib" name ".so")))))
|
||||
(for-each
|
||||
(lambda (file)
|
||||
(catch 'decoding-error
|
||||
@@ -1805,9 +1817,9 @@ new Date();"))
|
||||
(substitute* file
|
||||
(("VERSIONED_JNI_LIB_NAME\\(\"(.*)\", \"(.*)\"\\)"
|
||||
_ name version)
|
||||
(format #f "\"~a\"" (find-library name)))
|
||||
(string-append "\"" (find-library name) "\""))
|
||||
(("JNI_LIB_NAME\\(\"(.*)\"\\)" _ name)
|
||||
(format #f "\"~a\"" (find-library name)))))
|
||||
(string-append "\"" (find-library name) "\""))))
|
||||
(lambda _
|
||||
;; Those are safe to skip.
|
||||
(format (current-error-port)
|
||||
@@ -1893,6 +1905,9 @@ new Date();"))
|
||||
#:imported-modules
|
||||
((guix build syscalls)
|
||||
,@%gnu-build-system-modules)
|
||||
|
||||
#:disallowed-references (,icedtea-8 (,icedtea-8 "jdk"))
|
||||
|
||||
#:phases
|
||||
(modify-phases %standard-phases
|
||||
(add-after 'patch-source-shebangs 'fix-java-shebangs
|
||||
@@ -1931,12 +1946,21 @@ new Date();"))
|
||||
(add-after 'unpack 'patch-jni-libs
|
||||
;; Hardcode dynamically loaded libraries.
|
||||
(lambda _
|
||||
(let* ((library-path (search-path-as-string->list
|
||||
(getenv "LIBRARY_PATH")))
|
||||
(define remove
|
||||
(@ (srfi srfi-1) remove))
|
||||
|
||||
(define (icedtea-or-openjdk? path)
|
||||
(or (string-contains path "openjdk")
|
||||
(string-contains path "icedtea")))
|
||||
|
||||
(let* ((library-path (remove icedtea-or-openjdk?
|
||||
(search-path-as-string->list
|
||||
(getenv "LIBRARY_PATH"))))
|
||||
(find-library (lambda (name)
|
||||
(search-path
|
||||
library-path
|
||||
(string-append "lib" name ".so")))))
|
||||
(or (search-path
|
||||
library-path
|
||||
(string-append "lib" name ".so"))
|
||||
(string-append "lib" name ".so")))))
|
||||
(for-each
|
||||
(lambda (file)
|
||||
(catch 'decoding-error
|
||||
@@ -1944,9 +1968,9 @@ new Date();"))
|
||||
(substitute* file
|
||||
(("VERSIONED_JNI_LIB_NAME\\(\"(.*)\", \"(.*)\"\\)"
|
||||
_ name version)
|
||||
(format #f "\"~a\"" (find-library name)))
|
||||
(string-append "\"" (find-library name) "\""))
|
||||
(("JNI_LIB_NAME\\(\"(.*)\"\\)" _ name)
|
||||
(format #f "\"~a\"" (find-library name)))))
|
||||
(string-append "\"" (find-library name) "\""))))
|
||||
(lambda _
|
||||
;; Those are safe to skip.
|
||||
(format (current-error-port)
|
||||
@@ -2079,7 +2103,9 @@ new Date();"))
|
||||
"--with-libjpeg=system"
|
||||
"--with-native-debug-symbols=zipped"
|
||||
(string-append "--prefix=" (assoc-ref outputs "out")))
|
||||
#t))))))
|
||||
#t))))
|
||||
((#:disallowed-references _ '())
|
||||
`(,openjdk9 (,openjdk9 "jdk")))))
|
||||
(native-inputs
|
||||
`(("openjdk9" ,openjdk9)
|
||||
("openjdk9:jdk" ,openjdk9 "jdk")
|
||||
@@ -2109,6 +2135,9 @@ new Date();"))
|
||||
(arguments
|
||||
`(#:imported-modules ((guix build syscalls)
|
||||
,@%gnu-build-system-modules)
|
||||
|
||||
#:disallowed-references (,openjdk10 (,openjdk10 "jdk"))
|
||||
|
||||
#:tests? #f; requires jtreg
|
||||
;; TODO package jtreg
|
||||
#:configure-flags
|
||||
@@ -2139,12 +2168,21 @@ new Date();"))
|
||||
(add-after 'unpack 'patch-jni-libs
|
||||
;; Hardcode dynamically loaded libraries.
|
||||
(lambda _
|
||||
(let* ((library-path (search-path-as-string->list
|
||||
(getenv "LIBRARY_PATH")))
|
||||
(define remove
|
||||
(@ (srfi srfi-1) remove))
|
||||
|
||||
(define (icedtea-or-openjdk? path)
|
||||
(or (string-contains path "openjdk")
|
||||
(string-contains path "icedtea")))
|
||||
|
||||
(let* ((library-path (remove icedtea-or-openjdk?
|
||||
(search-path-as-string->list
|
||||
(getenv "LIBRARY_PATH"))))
|
||||
(find-library (lambda (name)
|
||||
(search-path
|
||||
library-path
|
||||
(string-append "lib" name ".so")))))
|
||||
(or (search-path
|
||||
library-path
|
||||
(string-append "lib" name ".so"))
|
||||
(string-append "lib" name ".so")))))
|
||||
(for-each
|
||||
(lambda (file)
|
||||
(catch 'decoding-error
|
||||
@@ -2152,9 +2190,9 @@ new Date();"))
|
||||
(substitute* file
|
||||
(("VERSIONED_JNI_LIB_NAME\\(\"(.*)\", \"(.*)\"\\)"
|
||||
_ name version)
|
||||
(format #f "\"~a\"" (find-library name)))
|
||||
(string-append "\"" (find-library name) "\""))
|
||||
(("JNI_LIB_NAME\\(\"(.*)\"\\)" _ name)
|
||||
(format #f "\"~a\"" (find-library name)))))
|
||||
(string-append "\"" (find-library name) "\""))))
|
||||
(lambda _
|
||||
;; Those are safe to skip.
|
||||
(format (current-error-port)
|
||||
|
||||
@@ -131,9 +131,9 @@
|
||||
;; Latest version of Guix, which may or may not correspond to a release.
|
||||
;; Note: the 'update-guix-package.scm' script expects this definition to
|
||||
;; start precisely like this.
|
||||
(let ((version "1.2.0")
|
||||
(commit "4dff6ecde85eec473ab231cf75f51e98e8aca1e9")
|
||||
(revision 21))
|
||||
(let ((version "1.3.0")
|
||||
(commit "771b866c55e5f992df60f6c32f5fdd78b64e17f6")
|
||||
(revision 1))
|
||||
(package
|
||||
(name "guix")
|
||||
|
||||
@@ -149,7 +149,7 @@
|
||||
(commit commit)))
|
||||
(sha256
|
||||
(base32
|
||||
"1n16j7rb4n4pjmp8ck5g206rphmzxii2mbyz1nk4qk70zc3mwszq"))
|
||||
"0w8w05w6v3lc6478vfw67jzn0hbd9nsncpx9i9ch1lck53r8vs44"))
|
||||
(file-name (string-append "guix-" version "-checkout"))))
|
||||
(build-system gnu-build-system)
|
||||
(arguments
|
||||
@@ -261,11 +261,9 @@ $(prefix)/etc/openrc\n")))
|
||||
(intern (assoc-ref inputs "boot-guile") #f)
|
||||
|
||||
;; On x86_64 some tests need the i686 Guile.
|
||||
,@(if (and (not (%current-target-system))
|
||||
(string=? (%current-system)
|
||||
"x86_64-linux"))
|
||||
'((intern (assoc-ref inputs "boot-guile/i686") #f))
|
||||
'())
|
||||
(when (and (not target)
|
||||
(string=? system "x86_64-linux"))
|
||||
(intern (assoc-ref inputs "boot-guile/i686") #f))
|
||||
|
||||
;; Copy the bootstrap executables.
|
||||
(for-each (lambda (input)
|
||||
@@ -299,9 +297,8 @@ $(prefix)/etc/openrc\n")))
|
||||
;; Make sure the 'guix' command finds GnuTLS,
|
||||
;; Guile-JSON, and Guile-Git automatically.
|
||||
(let* ((out (assoc-ref outputs "out"))
|
||||
(guile ,@(if (%current-target-system)
|
||||
'((assoc-ref native-inputs "guile"))
|
||||
'((assoc-ref inputs "guile"))))
|
||||
(guile (assoc-ref (or native-inputs inputs)
|
||||
"guile"))
|
||||
(avahi (assoc-ref inputs "guile-avahi"))
|
||||
(gcrypt (assoc-ref inputs "guile-gcrypt"))
|
||||
(guile-lib (assoc-ref inputs "guile-lib"))
|
||||
@@ -317,40 +314,45 @@ $(prefix)/etc/openrc\n")))
|
||||
(gnutls (assoc-ref inputs "gnutls"))
|
||||
(locales (assoc-ref inputs "glibc-utf8-locales"))
|
||||
(deps (list gcrypt json sqlite gnutls git
|
||||
bs ssh zlib lzlib zstd))
|
||||
(deps* ,@(if (%current-target-system)
|
||||
'(deps)
|
||||
'((cons avahi deps))))
|
||||
bs ssh zlib lzlib zstd guile-lib))
|
||||
(deps* (if avahi (cons avahi deps) deps))
|
||||
(effective
|
||||
(read-line
|
||||
(open-pipe* OPEN_READ
|
||||
(string-append guile "/bin/guile")
|
||||
"-c" "(display (effective-version))")))
|
||||
(path (string-join
|
||||
(map (cut string-append <>
|
||||
"/share/guile/site/"
|
||||
effective)
|
||||
(delete #f deps*))
|
||||
":"))
|
||||
(gopath (string-join
|
||||
(map (cut string-append <>
|
||||
"/lib/guile/" effective
|
||||
"/site-ccache")
|
||||
(delete #f deps*))
|
||||
":"))
|
||||
(path (map (cut string-append <>
|
||||
"/share/guile/site/"
|
||||
effective)
|
||||
(delete #f deps*)))
|
||||
(gopath (map (cut string-append <>
|
||||
"/lib/guile/" effective
|
||||
"/site-ccache")
|
||||
(delete #f deps*)))
|
||||
(locpath (string-append locales "/lib/locale")))
|
||||
|
||||
(wrap-program (string-append out "/bin/guix")
|
||||
`("GUILE_LOAD_PATH" ":" prefix (,path))
|
||||
`("GUILE_LOAD_COMPILED_PATH" ":" prefix (,gopath))
|
||||
`("GUIX_LOCPATH" ":" suffix (,locpath)))
|
||||
|
||||
(when target
|
||||
;; XXX Touching wrap-program rebuilds world
|
||||
(let ((bash (assoc-ref inputs "bash")))
|
||||
(substitute* (string-append out "/bin/guix")
|
||||
(("^#!.*/bash") (string-append "#! " bash "/bin/bash")))))
|
||||
#t)))
|
||||
;; Modify 'guix' directly instead of using
|
||||
;; 'wrap-program'. This avoids the indirection
|
||||
;; through Bash, which in turn avoids getting Bash's
|
||||
;; own locale warnings.
|
||||
(substitute* (string-append out "/bin/guix")
|
||||
(("!#")
|
||||
(string-append
|
||||
"!#\n\n"
|
||||
(object->string
|
||||
`(set! %load-path (append ',path %load-path)))
|
||||
"\n"
|
||||
(object->string
|
||||
`(set! %load-compiled-path
|
||||
(append ',gopath %load-compiled-path)))
|
||||
"\n"
|
||||
(object->string
|
||||
`(let ((path (getenv "GUIX_LOCPATH")))
|
||||
(setenv "GUIX_LOCPATH"
|
||||
(if path
|
||||
(string-append path ":" ,locpath)
|
||||
,locpath))))
|
||||
"\n\n"))))))
|
||||
|
||||
;; The 'guix' executable has 'OUT/libexec/guix/guile' as
|
||||
;; its shebang; that should remain unchanged, thus remove
|
||||
@@ -405,8 +407,7 @@ $(prefix)/etc/openrc\n")))
|
||||
`(("boot-guile/i686" ,(bootstrap-guile-origin "i686-linux")))
|
||||
'())
|
||||
,@(if (%current-target-system)
|
||||
`(("bash" ,bash-minimal)
|
||||
("xz" ,xz))
|
||||
`(("xz" ,xz))
|
||||
'())
|
||||
|
||||
;; Tests also rely on these bootstrap executables.
|
||||
@@ -523,12 +524,16 @@ the Nix package manager.")
|
||||
("gnutls" ,guile2.2-gnutls)
|
||||
("guile-gcrypt" ,guile2.2-gcrypt)
|
||||
("guile-json" ,guile2.2-json)
|
||||
("guile-lib" ,guile2.2-lib)
|
||||
("guile-sqlite3" ,guile2.2-sqlite3)
|
||||
("guile-ssh" ,guile2.2-ssh)
|
||||
("guile-git" ,guile2.2-git)
|
||||
("guile-zlib" ,guile2.2-zlib)
|
||||
("guile-lzlib" ,guile2.2-lzlib)
|
||||
,@(fold alist-delete (package-native-inputs guix)
|
||||
'("guile" "gnutls" "guile-gcrypt" "guile-json"
|
||||
"guile-sqlite3" "guile-ssh" "guile-git"))))
|
||||
"guile-lib" "guile-sqlite3" "guile-ssh" "guile-git"
|
||||
"guile-zlib" "guile-lzlib"))))
|
||||
(inputs
|
||||
`(("guile" ,guile-2.2)
|
||||
,@(alist-delete "guile" (package-inputs guix))))
|
||||
@@ -536,9 +541,12 @@ the Nix package manager.")
|
||||
`(("gnutls" ,gnutls)
|
||||
("guile-gcrypt" ,guile2.2-gcrypt)
|
||||
("guile-json" ,guile2.2-json)
|
||||
("guile-lib" ,guile2.2-lib)
|
||||
("guile-sqlite3" ,guile2.2-sqlite3)
|
||||
("guile-ssh" ,guile2.2-ssh)
|
||||
("guile-git" ,guile2.2-git)))))
|
||||
("guile-git" ,guile2.2-git)
|
||||
("guile-zlib" ,guile2.2-zlib)
|
||||
("guile-lzlib" ,guile2.2-lzlib)))))
|
||||
|
||||
(define-public guile3.0-guix
|
||||
(deprecated-package "guile3.0-guix" guix))
|
||||
|
||||
+19
-7
@@ -261,7 +261,7 @@ Internet and from a wide variety of machine architectures.")
|
||||
(define-public spice-vdagent
|
||||
(package
|
||||
(name "spice-vdagent")
|
||||
(version "0.20.0")
|
||||
(version "0.21.0")
|
||||
(source (origin
|
||||
(method url-fetch)
|
||||
(uri (string-append
|
||||
@@ -269,11 +269,14 @@ Internet and from a wide variety of machine architectures.")
|
||||
"spice-vdagent-" version ".tar.bz2"))
|
||||
(sha256
|
||||
(base32
|
||||
"0n9k2kna2gd1zi6jv45zsp2jlv439nz5l5jjijirxqaycwi74srf"))))
|
||||
"0n8jlc1pv6mkry161y656b1nk9hhhminjq6nymzmmyjl7k95ymzx"))))
|
||||
(build-system gnu-build-system)
|
||||
(arguments
|
||||
`(#:configure-flags
|
||||
'("--localstatedir=/var")
|
||||
;; The test-session-info test fails for unknown reasons (see:
|
||||
;; https://gitlab.freedesktop.org/spice/linux/vd_agent/-/issues/24).
|
||||
#:make-flags '("XFAIL_TESTS=tests/test-session-info")
|
||||
#:phases
|
||||
(modify-phases %standard-phases
|
||||
(add-after 'unpack 'patch-makefile.in
|
||||
@@ -281,19 +284,27 @@ Internet and from a wide variety of machine architectures.")
|
||||
(substitute* "Makefile.in"
|
||||
(((string-append "\\$\\(mkdir_p\\) \\$\\(DESTDIR\\)"
|
||||
"\\$\\(localstatedir\\)/run/spice-vdagentd"))
|
||||
"-$(mkdir_p) $(DESTDIR)$(localstatedir)/run/spice-vdagentd"))
|
||||
#t))
|
||||
"-$(mkdir_p) $(DESTDIR)$(localstatedir)/run/spice-vdagentd"))))
|
||||
(add-after 'unpack 'patch-spice-vdagent.desktop
|
||||
(lambda* (#:key outputs #:allow-other-keys)
|
||||
(substitute* "data/spice-vdagent.desktop"
|
||||
(("Exec=/usr/bin/spice-vdagent")
|
||||
(string-append "Exec=" (assoc-ref outputs "out")
|
||||
"/bin/spice-vdagent")))
|
||||
#t)))))
|
||||
"/bin/spice-vdagent")))))
|
||||
(add-after 'unpack 'fix-test-termination
|
||||
(lambda _
|
||||
;; The termination tests depend on finding the socket file name
|
||||
;; in the spice-vdagent command line it launched, but by default
|
||||
;; ps truncates its output, which causes the test to fail (see:
|
||||
;; https://gitlab.freedesktop.org/spice/linux/vd_agent/-/merge_requests/36).
|
||||
(substitute* "tests/test-termination.c"
|
||||
(("ps -ef")
|
||||
"ps -efww")))))))
|
||||
(inputs
|
||||
`(("alsa-lib" ,alsa-lib)
|
||||
("dbus" ,dbus)
|
||||
("glib" ,glib)
|
||||
("gtk+" ,gtk+)
|
||||
("libdrm" ,libdrm)
|
||||
("libpciaccess" ,libpciaccess)
|
||||
("libx11" ,libx11)
|
||||
@@ -303,7 +314,8 @@ Internet and from a wide variety of machine architectures.")
|
||||
("libxrandr" ,libxrandr)
|
||||
("spice-protocol" ,spice-protocol)))
|
||||
(native-inputs
|
||||
`(("pkg-config" ,pkg-config)))
|
||||
`(("pkg-config" ,pkg-config)
|
||||
("procps" ,procps))) ;tests use 'ps'
|
||||
(synopsis "Spice agent for Linux")
|
||||
(description "Spice-vdagent enables sharing the clipboard and guest display
|
||||
resolution scaling on graphical console window resize.")
|
||||
|
||||
@@ -756,6 +756,10 @@ allows you to shut down the computer from Xfce.")
|
||||
("upower" ,upower) ;; TODO needs upower-glib
|
||||
("python" ,python) ;; for xfce4-compose-mail
|
||||
("xf86-input-libinput" ,xf86-input-libinput)))
|
||||
(propagated-inputs
|
||||
;; Some operations, such as changing icon themes, require these schemas
|
||||
;; to be in the search path.
|
||||
`(("gsettings-desktop-schemas" ,gsettings-desktop-schemas)))
|
||||
(home-page "https://www.xfce.org/")
|
||||
(synopsis "Xfce settings manager")
|
||||
(description
|
||||
|
||||
+23
-22
@@ -34,41 +34,42 @@
|
||||
(spice-vdagent spice-vdagent-configuration-spice-vdagent
|
||||
(default spice-vdagent)))
|
||||
|
||||
(define (spice-vdagent-activation config)
|
||||
"Return the activation gexp for CONFIG."
|
||||
#~(begin
|
||||
(use-modules (guix build utils))
|
||||
(mkdir-p "/var/run/spice-vdagentd")))
|
||||
|
||||
(define (spice-vdagent-shepherd-service config)
|
||||
"Return a <shepherd-service> for spice-vdagentd with CONFIG."
|
||||
(define spice-vdagent (spice-vdagent-configuration-spice-vdagent config))
|
||||
|
||||
(define spice-vdagentd-command
|
||||
(list
|
||||
(file-append spice-vdagent "/sbin/spice-vdagentd")
|
||||
"-x"))
|
||||
(file-append spice-vdagent "/sbin/spice-vdagentd")
|
||||
"-x"))
|
||||
|
||||
(list
|
||||
(shepherd-service
|
||||
(documentation "Spice vdagentd service")
|
||||
(requirement '(udev))
|
||||
(provision '(spice-vdagentd))
|
||||
(start #~(make-forkexec-constructor '#$spice-vdagentd-command))
|
||||
(stop #~(make-kill-destructor)))))
|
||||
(shepherd-service
|
||||
(documentation "Spice vdagentd service")
|
||||
(requirement '(dbus-system))
|
||||
(provision '(spice-vdagentd))
|
||||
(start #~(lambda args
|
||||
;; spice-vdagentd supports being activated upon the client
|
||||
;; connecting to its socket; when not using such feature, the
|
||||
;; socket should not exist before vdagentd creates it itself.
|
||||
(mkdir-p "/run/spice-vdagentd")
|
||||
(false-if-exception
|
||||
(delete-file "/run/spice-vdagentd/spice-vdagent-sock"))
|
||||
(fork+exec-command '#$spice-vdagentd-command)))
|
||||
(stop #~(make-kill-destructor)))))
|
||||
|
||||
(define spice-vdagent-profile
|
||||
(compose list spice-vdagent-configuration-spice-vdagent))
|
||||
|
||||
(define spice-vdagent-service-type
|
||||
(service-type (name 'spice-vdagent)
|
||||
(extensions
|
||||
(list (service-extension shepherd-root-service-type
|
||||
spice-vdagent-shepherd-service)
|
||||
(service-extension activation-service-type
|
||||
spice-vdagent-activation)
|
||||
(service-extension profile-service-type
|
||||
spice-vdagent-profile)))))
|
||||
(service-type
|
||||
(name 'spice-vdagent)
|
||||
(default-value (spice-vdagent-configuration))
|
||||
(extensions
|
||||
(list (service-extension shepherd-root-service-type
|
||||
spice-vdagent-shepherd-service)
|
||||
(service-extension profile-service-type
|
||||
spice-vdagent-profile)))))
|
||||
|
||||
(define* (spice-vdagent-service
|
||||
#:optional (config (spice-vdagent-configuration)))
|
||||
|
||||
@@ -62,6 +62,7 @@
|
||||
#:use-module (gnu packages package-management)
|
||||
#:use-module (gnu packages pciutils)
|
||||
#:use-module (gnu packages texinfo)
|
||||
#:use-module (gnu packages wget)
|
||||
#:use-module (gnu packages zile)
|
||||
#:use-module (gnu services)
|
||||
#:use-module (gnu services shepherd)
|
||||
@@ -806,6 +807,7 @@ of PROVENANCE-SERVICE-TYPE to its services."
|
||||
;; Default set of networking packages.
|
||||
(list inetutils isc-dhcp
|
||||
iproute
|
||||
wget
|
||||
;; wireless-tools is deprecated in favor of iw, but it's still what
|
||||
;; many people are familiar with, so keep it around.
|
||||
iw wireless-tools))
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
;;
|
||||
|
||||
(use-modules (gnu) (guix) (srfi srfi-1))
|
||||
(use-service-modules desktop networking ssh xorg)
|
||||
(use-service-modules desktop mcron networking spice ssh xorg)
|
||||
(use-package-modules bootloaders certs fonts nvi
|
||||
package-management wget xorg)
|
||||
|
||||
@@ -24,6 +24,18 @@ Run '\x1b[1;37minfo guix\x1b[0m' to browse documentation.
|
||||
accounts.\x1b[0m
|
||||
"))
|
||||
|
||||
;;; XXX: Xfce does not implement what is needed for the SPICE dynamic
|
||||
;;; resolution to work (see:
|
||||
;;; https://gitlab.xfce.org/xfce/xfce4-settings/-/issues/142). Workaround it
|
||||
;;; by manually invoking xrandr every second.
|
||||
(define auto-update-resolution-crutch
|
||||
#~(job '(next-second)
|
||||
(lambda ()
|
||||
(setenv "DISPLAY" ":0.0")
|
||||
(setenv "XAUTHORITY" "/home/guest/.Xauthority")
|
||||
(execl (string-append #$xrandr "/bin/xrandr") "xrandr" "-s" "0"))
|
||||
#:user "guest"))
|
||||
|
||||
(operating-system
|
||||
(host-name "gnu")
|
||||
(timezone "Etc/UTC")
|
||||
@@ -75,11 +87,23 @@ root ALL=(ALL) ALL
|
||||
(default-user "guest")
|
||||
(xorg-configuration
|
||||
(xorg-configuration
|
||||
;; The QXL virtual GPU driver is added to provide
|
||||
;; a better SPICE experience.
|
||||
(modules (cons xf86-video-qxl
|
||||
%default-xorg-modules))
|
||||
(keyboard-layout keyboard-layout)))))
|
||||
|
||||
;; Uncomment the line below to add an SSH server.
|
||||
;;(service openssh-service-type)
|
||||
|
||||
;; Add support for the SPICE protocol, which enables dynamic
|
||||
;; resizing of the guest screen resolution, clipboard
|
||||
;; integration with the host, etc.
|
||||
(service spice-vdagent-service-type)
|
||||
|
||||
(simple-service 'cron-jobs mcron-service-type
|
||||
(list auto-update-resolution-crutch))
|
||||
|
||||
;; Use the DHCP client service rather than NetworkManager.
|
||||
(service dhcp-client-service-type))
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2014, 2015, 2016, 2017, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
|
||||
;;; Copyright © 2014, 2015, 2016, 2017, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
|
||||
;;; Copyright © 2018 Mark H Weaver <mhw@netris.org>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
@@ -148,7 +148,7 @@ data format changes between libc versions."
|
||||
(define %default-locale-libcs
|
||||
;; The libcs for which we build locales by default.
|
||||
;; List the previous and current libc to ease transition.
|
||||
(list glibc-2.29 glibc))
|
||||
(list glibc))
|
||||
|
||||
(define %default-locale-definitions
|
||||
;; Arbitrary set of locales that are built by default. They are here mostly
|
||||
|
||||
+13
-4
@@ -122,15 +122,24 @@ lives in, or the empty list if this is not applicable."
|
||||
(mlambda ()
|
||||
"Return the list of channels currently available, including the 'guix'
|
||||
channel. Return the empty list if this information is missing."
|
||||
(define (build-time-metadata)
|
||||
(match (channel-metadata)
|
||||
(#f '())
|
||||
(sexp (or (and=> (sexp->channel sexp 'guix) list) '()))))
|
||||
|
||||
(match (current-profile-entries)
|
||||
(()
|
||||
;; As a fallback, if we're not running from a profile, use 'guix'
|
||||
;; channel metadata from (guix config).
|
||||
(match (channel-metadata)
|
||||
(#f '())
|
||||
(sexp (or (and=> (sexp->channel sexp 'guix) list) '()))))
|
||||
(build-time-metadata))
|
||||
(entries
|
||||
(filter-map manifest-entry-channel entries)))))
|
||||
(match (filter-map manifest-entry-channel entries)
|
||||
(()
|
||||
;; This profile lacks provenance metadata, so fall back to
|
||||
;; build-time metadata as returned by 'channel-metadata'.
|
||||
(build-time-metadata))
|
||||
(lst
|
||||
lst))))))
|
||||
|
||||
(define (package-path-entries)
|
||||
"Return two values: the list of package path entries to be added to the
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
|
||||
;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
@@ -233,6 +233,10 @@ etc."
|
||||
(make-location file (+ line 1) col)))
|
||||
(#f
|
||||
#f)
|
||||
(#(file line column)
|
||||
;; Guile >= 3.0.6 uses vectors instead of alists internally, which can be
|
||||
;; seen in the arguments to 'syntax-error' exceptions.
|
||||
(location file (+ 1 line) column))
|
||||
(_
|
||||
(let ((file (assq-ref loc 'filename))
|
||||
(line (assq-ref loc 'line))
|
||||
|
||||
@@ -301,4 +301,11 @@ text. The hyperlink links to a web view of COMMIT, when available."
|
||||
(channels
|
||||
(display-profile-info #f format channels))))
|
||||
(profile
|
||||
(display-profile-info (canonicalize-profile profile) format))))))
|
||||
;; For the current profile, resort to 'current-channels', which has a
|
||||
;; fallback to metadata from (guix config) in case PROFILE lacks it.
|
||||
(let ((channels (if (and (current-profile)
|
||||
(string=? profile (current-profile)))
|
||||
(current-channels)
|
||||
(profile-channels profile))))
|
||||
(display-profile-info (canonicalize-profile profile)
|
||||
format channels)))))))
|
||||
|
||||
+14
-6
@@ -147,12 +147,20 @@
|
||||
url
|
||||
(string-append url "/")))
|
||||
|
||||
;; XXX: Work around a bug in Guile 3.0.2 where #:verify-certificate? would
|
||||
;; be ignored (<https://bugs.gnu.org/40486>).
|
||||
(define* (http-get* uri #:rest rest)
|
||||
(apply http-request uri #:method 'GET rest))
|
||||
(define* (http-post* uri #:rest rest)
|
||||
(apply http-request uri #:method 'POST rest))
|
||||
(cond-expand
|
||||
(guile-3
|
||||
;; XXX: Work around a bug in Guile 3.0.2 where #:verify-certificate? would
|
||||
;; be ignored (<https://bugs.gnu.org/40486>).
|
||||
(define* (http-get* uri #:rest rest)
|
||||
(apply http-request uri #:method 'GET rest))
|
||||
(define* (http-post* uri #:rest rest)
|
||||
(apply http-request uri #:method 'POST rest)))
|
||||
(else ;Guile 2.2
|
||||
;; Guile 2.2 did not have #:verify-certificate? so ignore it.
|
||||
(define* (http-get* uri #:key verify-certificate? streaming?)
|
||||
(http-request uri #:method 'GET #:streaming? streaming?))
|
||||
(define* (http-post* uri #:key verify-certificate? streaming?)
|
||||
(http-request uri #:method 'POST #:streaming? streaming?))))
|
||||
|
||||
(define %date-regexp
|
||||
;; Match strings like "2014-11-17T22:09:38+01:00" or
|
||||
|
||||
+6
-4
@@ -376,12 +376,14 @@ ARGS is the list of arguments received by the 'throw' handler."
|
||||
(('system-error . rest)
|
||||
(let ((err (system-error-errno args)))
|
||||
(report-error (G_ "failed to load '~a': ~a~%") file (strerror err))))
|
||||
(('read-error "scm_i_lreadparen" message _ ...)
|
||||
(('read-error _ message args ...)
|
||||
;; Guile's missing-paren messages are obscure so we make them more
|
||||
;; intelligible here.
|
||||
(if (string-suffix? "end of file" message)
|
||||
(let ((location (string-drop-right message
|
||||
(string-length "end of file"))))
|
||||
(if (or (string-suffix? "end of file" message) ;Guile < 3.0.6
|
||||
(and (string-contains message "unexpected end of input")
|
||||
(member '(#\)) args)))
|
||||
(let ((location (string-take message
|
||||
(+ 2 (string-contains message ": ")))))
|
||||
(format (current-error-port) (G_ "~amissing closing parenthesis~%")
|
||||
location))
|
||||
(apply throw args)))
|
||||
|
||||
@@ -7,7 +7,7 @@ msgstr ""
|
||||
"Project-Id-Version: guix manual checkout\n"
|
||||
"Report-Msgid-Bugs-To: bug-guix@gnu.org\n"
|
||||
"POT-Creation-Date: 2021-01-25 00:00+0100\n"
|
||||
"PO-Revision-Date: 2021-02-19 10:40+0000\n"
|
||||
"PO-Revision-Date: 2021-05-03 02:58+0000\n"
|
||||
"Last-Translator: Soheil Khanalipur <soheil@disroot.org>\n"
|
||||
"Language-Team: Persian <https://translate.fedoraproject.org/projects/guix/documentation-cookbook/fa/>\n"
|
||||
"Language: fa\n"
|
||||
@@ -15,7 +15,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 4.4.2\n"
|
||||
"X-Generator: Weblate 4.6.1\n"
|
||||
|
||||
#. type: Plain text
|
||||
#: guix-git/doc/guix-cookbook.texi:7
|
||||
@@ -154,7 +154,7 @@ msgstr ""
|
||||
#. type: menuentry
|
||||
#: guix-git/doc/guix-cookbook.texi:74
|
||||
msgid "Thanks!"
|
||||
msgstr "سپاس"
|
||||
msgstr "سِپاس!"
|
||||
|
||||
#. type: appendix
|
||||
#: guix-git/doc/guix-cookbook.texi:74 guix-git/doc/guix-cookbook.texi:2941
|
||||
|
||||
+463
-145
File diff suppressed because it is too large
Load Diff
@@ -71,7 +71,7 @@ msgstr "GNU Guix 개발자"
|
||||
#: guix-git/doc/guix-cookbook.texi:48
|
||||
#, no-wrap
|
||||
msgid "Top"
|
||||
msgstr "Top"
|
||||
msgstr "정상"
|
||||
|
||||
#. type: Plain text
|
||||
#: guix-git/doc/guix-cookbook.texi:55
|
||||
|
||||
+10690
-10716
File diff suppressed because it is too large
Load Diff
+10785
-11561
File diff suppressed because it is too large
Load Diff
+10670
-10734
File diff suppressed because it is too large
Load Diff
+10691
-10719
File diff suppressed because it is too large
Load Diff
+10666
-10730
File diff suppressed because it is too large
Load Diff
+10667
-10731
File diff suppressed because it is too large
Load Diff
+10665
-10728
File diff suppressed because it is too large
Load Diff
+10679
-11789
File diff suppressed because it is too large
Load Diff
+10713
-10774
File diff suppressed because it is too large
Load Diff
+10678
-11461
File diff suppressed because it is too large
Load Diff
+2
-21
@@ -47,32 +47,13 @@ POT_OPTIONS = \
|
||||
--copyright-holder "the authors of Guix (msgids)" \
|
||||
--msgid-bugs-address "bug-guix@gnu.org"
|
||||
|
||||
# make-download-po-files-rule PO_FILES POT_FILE_INPUT
|
||||
define make-update-po-files-rule
|
||||
$(1): $(2)
|
||||
@if ! [ -f "$$@" ]; then \
|
||||
echo "File $$po_file does not exist. If you are a translator, \
|
||||
you can create it with 'msginit'." 1>&2; \
|
||||
exit 1; \
|
||||
fi && \
|
||||
lang=$$$$(echo $$@ | $(SED) -E 's|.*\.([^.]*)\.po$$$$|\1|') && \
|
||||
echo $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) \
|
||||
--lang=$$$${lang} "$$@" "$$<" && \
|
||||
$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$$$${lang} "$$@" "$$<"
|
||||
endef
|
||||
|
||||
%D%/%.pot: $(srcdir)/doc/%.texi
|
||||
$(AM_V_PO4A)$(PO4A_UPDATEPO) -M UTF-8 -f texinfo -m "$<" \
|
||||
-p "$@" $(POT_OPTIONS) && \
|
||||
touch $@
|
||||
|
||||
%D%/guix-manual.pot: %D%/guix.pot %D%/contributing.pot
|
||||
msgcat $< > $@
|
||||
|
||||
$(eval $(call make-update-po-files-rule,$(DOC_PO_FILES),%D%/guix-manual.pot))
|
||||
$(eval $(call make-update-po-files-rule,\
|
||||
$(DOC_COOKBOOK_PO_FILES),%D%/guix-cookbook.pot))
|
||||
msgcat $^ > $@
|
||||
|
||||
doc-pot-update: %D%/guix-manual.pot %D%/guix-cookbook.pot
|
||||
doc-po-update: $(DOC_PO_FILES) $(DOC_COOKBOOK_PO_FILES)
|
||||
.PHONY: doc-pot-update doc-po-update
|
||||
.PHONY: doc-pot-update
|
||||
|
||||
@@ -12,9 +12,11 @@ hu
|
||||
it
|
||||
ko
|
||||
nl
|
||||
oc
|
||||
pl
|
||||
pt_BR
|
||||
ru
|
||||
si
|
||||
sk
|
||||
sr
|
||||
sv
|
||||
|
||||
@@ -26,3 +26,8 @@ EXTRA_LOCALE_CATEGORIES =
|
||||
# "make distcheck -j4".
|
||||
# See <https://lists.gnu.org/archive/html/bug-gettext/2014-08/msg00005.html>.
|
||||
DIST_DEPENDS_ON_UPDATE_PO = no
|
||||
|
||||
# Ignore the timestamp of the .pot file, as .po files are updated by
|
||||
# `make download-po` only. This ensures po files are not modified on the
|
||||
# first `make` invocation.
|
||||
PO_DEPENDS_ON_POT = no
|
||||
|
||||
+283
-279
File diff suppressed because it is too large
Load Diff
+294
-285
File diff suppressed because it is too large
Load Diff
+292
-283
File diff suppressed because it is too large
Load Diff
+283
-279
File diff suppressed because it is too large
Load Diff
+294
-285
File diff suppressed because it is too large
Load Diff
+295
-284
File diff suppressed because it is too large
Load Diff
+283
-279
File diff suppressed because it is too large
Load Diff
+289
-285
File diff suppressed because it is too large
Load Diff
+289
-285
File diff suppressed because it is too large
Load Diff
+701
-540
File diff suppressed because it is too large
Load Diff
+6628
File diff suppressed because it is too large
Load Diff
+317
-312
File diff suppressed because it is too large
Load Diff
+811
-1096
File diff suppressed because it is too large
Load Diff
+298
-295
File diff suppressed because it is too large
Load Diff
+6628
File diff suppressed because it is too large
Load Diff
+321
-310
File diff suppressed because it is too large
Load Diff
+283
-279
File diff suppressed because it is too large
Load Diff
+283
-279
File diff suppressed because it is too large
Load Diff
+294
-285
File diff suppressed because it is too large
Load Diff
+283
-279
File diff suppressed because it is too large
Load Diff
+283
-279
File diff suppressed because it is too large
Load Diff
@@ -10,6 +10,8 @@ fa
|
||||
fr
|
||||
hu
|
||||
ko
|
||||
nl
|
||||
oc
|
||||
pl
|
||||
pt_BR
|
||||
sk
|
||||
|
||||
@@ -22,3 +22,8 @@ EXTRA_LOCALE_CATEGORIES =
|
||||
# "make distcheck -j4".
|
||||
# See <https://lists.gnu.org/archive/html/bug-gettext/2014-08/msg00005.html>.
|
||||
DIST_DEPENDS_ON_UPDATE_PO = no
|
||||
|
||||
# Ignore the timestamp of the .pot file, as .po files are updated by
|
||||
# `make download-po` only. This ensures po files are not modified on the
|
||||
# first `make` invocation.
|
||||
PO_DEPENDS_ON_POT = no
|
||||
|
||||
+584
-556
File diff suppressed because it is too large
Load Diff
+584
-556
File diff suppressed because it is too large
Load Diff
+584
-556
File diff suppressed because it is too large
Load Diff
+584
-556
File diff suppressed because it is too large
Load Diff
+584
-556
File diff suppressed because it is too large
Load Diff
+584
-556
File diff suppressed because it is too large
Load Diff
+584
-556
File diff suppressed because it is too large
Load Diff
+20927
File diff suppressed because it is too large
Load Diff
+20916
File diff suppressed because it is too large
Load Diff
+584
-556
File diff suppressed because it is too large
Load Diff
+584
-556
File diff suppressed because it is too large
Load Diff
+590
-558
File diff suppressed because it is too large
Load Diff
+584
-556
File diff suppressed because it is too large
Load Diff
+584
-556
File diff suppressed because it is too large
Load Diff
@@ -459,7 +459,7 @@ if guix package --bootstrap -n -m "$module_dir/manifest.scm" \
|
||||
then false
|
||||
else
|
||||
cat "$module_dir/stderr"
|
||||
grep "manifest.scm:[1-3]:.*wonderful-package.*: unbound variable" \
|
||||
grep "manifest.scm:[1-4]:.*wonderful-package.*: unbound variable" \
|
||||
"$module_dir/stderr"
|
||||
fi
|
||||
|
||||
|
||||
@@ -51,6 +51,7 @@ then
|
||||
# This must not succeed.
|
||||
exit 1
|
||||
else
|
||||
cat "$errorfile"
|
||||
grep "$tmpfile:2:3:.*missing.* initializers" "$errorfile"
|
||||
fi
|
||||
|
||||
@@ -66,7 +67,12 @@ then
|
||||
# This must not succeed.
|
||||
exit 1
|
||||
else
|
||||
grep "$tmpfile:4:1: missing closing paren" "$errorfile"
|
||||
cat "$errorfile"
|
||||
|
||||
# Guile 3.0.6 gets line/column numbers for 'read-error' wrong
|
||||
# (zero-indexed): <https://bugs.gnu.org/48089>.
|
||||
grep "$tmpfile:4:1: missing closing paren" "$errorfile" || \
|
||||
grep "$tmpfile:3:0: missing closing paren" "$errorfile"
|
||||
fi
|
||||
|
||||
|
||||
|
||||
+14
-4
@@ -1,5 +1,5 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
|
||||
;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
@@ -29,6 +29,16 @@
|
||||
(module-use! module (resolve-interface '(guix records)))
|
||||
module))
|
||||
|
||||
(define (location-alist loc)
|
||||
;; Return a location alist. In Guile < 3.0.6, LOC is always an alist, but
|
||||
;; starting with 3.0.6, LOC is a vector (at least when it comes from
|
||||
;; 'syntax-error' exceptions), hence this conversion.
|
||||
(match loc
|
||||
(#(file line column)
|
||||
`((line . ,line) (column . ,column)
|
||||
(filename . ,file)))
|
||||
(_ loc)))
|
||||
|
||||
|
||||
(test-begin "records")
|
||||
|
||||
@@ -298,7 +308,7 @@
|
||||
(pk 'expected-loc
|
||||
`((line . ,(- (assq-ref loc 'line) 1))
|
||||
,@(alist-delete 'line loc)))
|
||||
(pk 'actual-loc location)))))))
|
||||
(pk 'actual-loc (location-alist location))))))))
|
||||
|
||||
(test-assert "define-record-type* & wrong field specifier, identifier"
|
||||
(let ((exp '(begin
|
||||
@@ -325,7 +335,7 @@
|
||||
(pk 'expected-loc
|
||||
`((line . ,(- (assq-ref loc 'line) 2))
|
||||
,@(alist-delete 'line loc)))
|
||||
(pk 'actual-loc location)))))))
|
||||
(pk 'actual-loc (location-alist location))))))))
|
||||
|
||||
(test-assert "define-record-type* & missing initializers"
|
||||
(catch 'syntax-error
|
||||
@@ -396,7 +406,7 @@
|
||||
(pk 'expected-loc
|
||||
`((line . ,(- (assq-ref loc 'line) 1))
|
||||
,@(alist-delete 'line loc)))
|
||||
(pk 'actual-loc location)))))))
|
||||
(pk 'actual-loc (location-alist location))))))))
|
||||
|
||||
(test-assert "ABI checks"
|
||||
(let ((module (test-module)))
|
||||
|
||||
Reference in New Issue
Block a user