mirror of
https://git.savannah.gnu.org/git/guix.git
synced 2026-07-12 00:54:08 +02:00
Compare commits
39 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 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 |
@@ -147,6 +147,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,89 @@ 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’
|
||||
|
||||
** Distribution
|
||||
|
||||
*** ‘qemu-binfmt-service-type’ now relies on statically-linked QEMU
|
||||
*** ‘guix system init’ has been optimized
|
||||
*** New ‘--graph-backend’ option for ‘guix system {extension,shepherd}-graph’
|
||||
|
||||
** 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>)
|
||||
|
||||
** 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
|
||||
|
||||
+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
|
||||
|
||||
+6
-30
@@ -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
|
||||
|
||||
@@ -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}"
|
||||
|
||||
@@ -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.0rc1")
|
||||
(commit "6fd7f161d7cd6248e99e9ba44424b162d443cd61")
|
||||
(revision 1))
|
||||
(package
|
||||
(name "guix")
|
||||
|
||||
@@ -149,7 +149,7 @@
|
||||
(commit commit)))
|
||||
(sha256
|
||||
(base32
|
||||
"1n16j7rb4n4pjmp8ck5g206rphmzxii2mbyz1nk4qk70zc3mwszq"))
|
||||
"0b92w6lqp4h75dds3fbxdp5shvfpkcdin809f8v94l4a2fbxkais"))
|
||||
(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 networking spice ssh xorg)
|
||||
(use-package-modules bootloaders certs fonts nvi
|
||||
package-management wget xorg)
|
||||
|
||||
@@ -75,11 +75,20 @@ 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)
|
||||
|
||||
;; 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
|
||||
|
||||
+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
|
||||
|
||||
+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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user