# GNU Guix --- Functional package management for GNU
-# Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
+# Copyright © 2012-2022 Ludovic Courtès <ludo@gnu.org>
# Copyright © 2013 Andreas Enge <andreas@enge.fr>
# Copyright © 2015, 2017 Alex Kost <alezost@gmail.com>
# Copyright © 2016, 2018 Mathieu Lirzin <mthl@gnu.org>
# Copyright © 2018 Alex Vong <alexvong1995@gmail.com>
# Copyright © 2019 Efraim Flashner <efraim@flashner.co.il>
# Copyright © 2021 Chris Marusich <cmmarusich@gmail.com>
+# Copyright © 2021 Andrew Tropin <andrew@trop.in>
#
# This file is part of GNU Guix.
#
guix/base64.scm \
guix/ci.scm \
guix/cpio.scm \
+ guix/cpu.scm \
guix/deprecation.scm \
guix/docker.scm \
guix/records.scm \
guix/discovery.scm \
guix/android-repo-download.scm \
guix/bzr-download.scm \
+ guix/extracting-download.scm \
guix/git-download.scm \
guix/hg-download.scm \
+ guix/hash.scm \
guix/swh.scm \
guix/monads.scm \
guix/monad-repl.scm \
guix/build-system/go.scm \
guix/build-system/meson.scm \
guix/build-system/minify.scm \
+ guix/build-system/minetest.scm \
guix/build-system/asdf.scm \
guix/build-system/copy.scm \
guix/build-system/glib-or-gtk.scm \
guix/build/gnu-dist.scm \
guix/build/guile-build-system.scm \
guix/build/maven-build-system.scm \
+ guix/build/minetest-build-system.scm \
guix/build/node-build-system.scm \
guix/build/perl-build-system.scm \
guix/build/python-build-system.scm \
guix/build/linux-module-build-system.scm \
guix/build/store-copy.scm \
guix/build/json.scm \
+ guix/build/pack.scm \
guix/build/utils.scm \
guix/build/union.scm \
guix/build/profiles.scm \
guix/build/emacs-utils.scm \
guix/build/java-utils.scm \
guix/build/lisp-utils.scm \
+ guix/build/meson-configuration.scm \
guix/build/maven/java.scm \
guix/build/maven/plugin.scm \
guix/build/maven/pom.scm \
guix/import/egg.scm \
guix/import/elpa.scm \
guix/import/gem.scm \
+ guix/import/git.scm \
guix/import/github.scm \
guix/import/gnome.scm \
guix/import/gnu.scm \
guix/import/json.scm \
guix/import/kde.scm \
guix/import/launchpad.scm \
+ guix/import/minetest.scm \
guix/import/opam.scm \
guix/import/print.scm \
guix/import/pypi.scm \
guix/scripts/refresh.scm \
guix/scripts/repl.scm \
guix/scripts/describe.scm \
+ guix/scripts/style.scm \
guix/scripts/system.scm \
guix/scripts/system/search.scm \
guix/scripts/system/reconfigure.scm \
+ guix/scripts/home.scm \
+ guix/scripts/home/import.scm \
guix/scripts/lint.scm \
guix/scripts/challenge.scm \
guix/scripts/import/crate.scm \
guix/scripts/import/go.scm \
guix/scripts/import/hackage.scm \
guix/scripts/import/json.scm \
+ guix/scripts/import/minetest.scm \
guix/scripts/import/opam.scm \
guix/scripts/import/pypi.scm \
guix/scripts/import/stackage.scm \
guix/scripts/import/texlive.scm \
guix/scripts/environment.scm \
+ guix/scripts/shell.scm \
guix/scripts/publish.scm \
guix/scripts/edit.scm \
guix/scripts/size.scm \
gnu/packages/aux-files/chromium/master-preferences.json \
gnu/packages/aux-files/emacs/guix-emacs.el \
gnu/packages/aux-files/guix.vim \
- gnu/packages/aux-files/linux-libre/5.12-arm.conf \
- gnu/packages/aux-files/linux-libre/5.12-arm64.conf \
- gnu/packages/aux-files/linux-libre/5.12-i686.conf \
- gnu/packages/aux-files/linux-libre/5.12-x86_64.conf \
+ gnu/packages/aux-files/linux-libre/5.17-arm.conf \
+ gnu/packages/aux-files/linux-libre/5.17-arm64.conf \
+ gnu/packages/aux-files/linux-libre/5.17-i686.conf \
+ gnu/packages/aux-files/linux-libre/5.17-x86_64.conf \
+ gnu/packages/aux-files/linux-libre/5.15-arm.conf \
+ gnu/packages/aux-files/linux-libre/5.15-arm64.conf \
+ gnu/packages/aux-files/linux-libre/5.15-i686.conf \
+ gnu/packages/aux-files/linux-libre/5.15-x86_64.conf \
gnu/packages/aux-files/linux-libre/5.10-arm.conf \
gnu/packages/aux-files/linux-libre/5.10-arm64.conf \
gnu/packages/aux-files/linux-libre/5.10-i686.conf \
gnu/packages/aux-files/pack-audit.c \
gnu/packages/aux-files/python/sanity-check.py \
gnu/packages/aux-files/python/sitecustomize.py \
+ gnu/packages/aux-files/renpy/renpy.in \
gnu/packages/aux-files/run-in-namespace.c
# Templates, examples.
tests/graph.scm \
tests/gremlin.scm \
tests/hackage.scm \
+ tests/home-import.scm \
+ tests/http-client.scm \
+ tests/import-git.scm \
+ tests/import-github.scm \
tests/import-utils.scm \
tests/inferior.scm \
tests/lint.scm \
+ tests/minetest.scm \
tests/modules.scm \
tests/monads.scm \
tests/nar.scm \
tests/services/file-sharing.scm \
tests/services/configuration.scm \
tests/services/linux.scm \
+ tests/services/telephony.scm \
tests/sets.scm \
tests/size.scm \
tests/status.scm \
tests/swh.scm \
tests/syscalls.scm \
tests/system.scm \
+ tests/style.scm \
tests/texlive.scm \
tests/transformations.scm \
tests/ui.scm \
if HAVE_GUILE_LIB
SCM_TESTS += tests/go.scm
+else
+EXTRA_DIST += tests/go.scm
endif
if BUILD_DAEMON_OFFLOAD
tests/guix-package-aliases.sh \
tests/guix-package-net.sh \
tests/guix-system.sh \
+ tests/guix-home.sh \
tests/guix-archive.sh \
tests/guix-authenticate.sh \
tests/guix-environment.sh \
tests/guix-environment-container.sh \
+ tests/guix-shell.sh \
+ tests/guix-shell-export-manifest.sh \
tests/guix-graph.sh \
tests/guix-describe.sh \
tests/guix-repl.sh \
dist_pkgdata_DATA = \
etc/substitutes/berlin.guix.gnu.org.pub \
etc/substitutes/ci.guix.gnu.org.pub \
- etc/substitutes/ci.guix.info.pub
+ etc/substitutes/ci.guix.info.pub \
+ etc/substitutes/bordeaux.guix.gnu.org.pub
# Bash completion file.
dist_bashcompletion_DATA = etc/completion/bash/guix \
.guix-authorizations \
.guix-channel \
scripts/guix.in \
+ etc/disarchive-manifest.scm \
etc/guix-install.sh \
etc/news.scm \
etc/release-manifest.scm \
+ etc/source-manifest.scm \
etc/system-tests.scm \
etc/historical-authorizations \
build-aux/build-self.scm \
build-aux/check-final-inputs-self-contained.scm \
build-aux/check-channel-news.scm \
build-aux/compile-as-derivation.scm \
+ build-aux/convert-xref.scm \
build-aux/generate-authors.scm \
build-aux/test-driver.scm \
build-aux/update-guix-package.scm \
build-aux/update-NEWS.scm \
tests/test.drv \
- tests/signing-key.pub \
- tests/signing-key.sec \
tests/cve-sample.json \
- tests/civodul.key \
- tests/rsa.key \
- tests/dsa.key \
- tests/ed25519.key \
- tests/ed25519.sec \
- tests/ed25519bis.key \
- tests/ed25519bis.sec \
+ tests/keys/signing-key.pub \
+ tests/keys/signing-key.sec \
+ tests/keys/civodul.pub \
+ tests/keys/rsa.pub \
+ tests/keys/dsa.pub \
+ tests/keys/ed25519.pub \
+ tests/keys/ed25519.sec \
+ tests/keys/ed25519-2.pub \
+ tests/keys/ed25519-2.sec \
+ tests/keys/ed25519-3.pub \
+ tests/keys/ed25519-3.sec \
build-aux/config.rpath \
bootstrap \
doc/build.scm \
# the whole thing. Likewise, set 'XDG_CACHE_HOME' to avoid loading possibly
# stale files from ~/.cache/guile/ccache.
%.go: make-go ; @:
-make-go: $(MODULES) guix/config.scm $(dist_noinst_DATA)
- $(AM_V_at)echo "Compiling Scheme modules..." ; \
- unset GUILE_LOAD_COMPILED_PATH ; \
- XDG_CACHE_HOME=/nowhere \
- host=$(host) srcdir="$(top_srcdir)" \
- $(top_builddir)/pre-inst-env \
- $(GUILE) -L "$(top_builddir)" -L "$(top_srcdir)" \
- --no-auto-compile \
- -s "$(top_srcdir)"/build-aux/compile-all.scm $^
+make-go: make-core-go make-packages-go make-system-go make-cli-go
+
+# Define a rule to build a subset of the .go files.
+define guile-compilation-rule
+
+$(1): $(2)
+ $(AM_V_at)echo "Compiling Scheme modules..." ; \
+ unset GUILE_LOAD_COMPILED_PATH ; \
+ XDG_CACHE_HOME=/nowhere \
+ host=$(host) srcdir="$(top_srcdir)" \
+ $(top_builddir)/pre-inst-env \
+ $(GUILE) -L "$(top_builddir)" -L "$(top_srcdir)" \
+ --no-auto-compile \
+ -s "$(top_srcdir)"/build-aux/compile-all.scm \
+ --total $(words $(MODULES)) \
+ --completed $(3) \
+ $$(filter %.scm,$$^)
+
+endef
+
+# Split compilation in several steps, each of which building a subset of
+# $(MODULES). The main goal is to reduce peak memory consumption, as reported
+# in <https://issues.guix.gnu.org/48963>. Each 'eval' call below creates a
+# 'make-*-go' phony target that builds the corresponding subset.
+
+MODULES_CORE = guix.scm $(filter-out guix/scripts/%,$(filter guix/%,$(MODULES)))
+MODULES_PACKAGES = $(filter gnu/packages/%,$(MODULES))
+MODULES_SYSTEM = gnu.scm $(filter-out gnu/packages/%,$(filter gnu/%,$(MODULES)))
+MODULES_CLI = $(filter guix/scripts/%,$(MODULES))
+MODULES_PO = guix/build/po.scm
+
+$(eval $(call guile-compilation-rule,make-core-go, \
+ $(MODULES_CORE) guix/config.scm $(dist_noinst_DATA), \
+ 0))
+.PHONY: make-core-go
+
+$(eval $(call guile-compilation-rule,make-packages-go, \
+ $(MODULES_PACKAGES) make-core-go, \
+ $(words $(MODULES_CORE))))
+.PHONY: make-packages-go
+
+$(eval $(call guile-compilation-rule,make-system-go, \
+ $(MODULES_SYSTEM) make-packages-go make-core-go, \
+ $(words $(MODULES_CORE) $(MODULES_PACKAGES))))
+.PHONY: make-system-go
+
+$(eval $(call guile-compilation-rule,make-cli-go, \
+ $(MODULES_CLI) make-system-go make-packages-go make-core-go, \
+ $(words $(MODULES_CORE) $(MODULES_PACKAGES) $(MODULES_SYSTEM))))
+.PHONY: make-cli-go
+
+$(eval $(call guile-compilation-rule,guix/build/po.go, \
+ $(MODULES_PO), \
+ 0))
SUFFIXES = .go
--system=$$system --fallback \
gnu/system/install.scm` ; \
if [ ! -f "$$image" ] ; then \
- echo "failed to produced Guix installation image for $$system" >&2 ; \
+ echo "failed to produce Guix installation image for $$system" >&2 ; \
exit 1 ; \
fi ; \
cp "$$image" "$(releasedir)/$(GUIX_SYSTEM_IMAGE_BASE).$$system.iso.tmp" ; \
--system=$$system --fallback \
gnu/system/examples/vm-image.tmpl` ; \
if [ ! -f "$$image" ] ; then \
- echo "failed to produced Guix VM image for $$system" >&2 ; \
+ echo "failed to produce Guix VM image for $$system" >&2 ; \
exit 1 ; \
fi ; \
cp "$$image" "$(releasedir)/$(GUIX_SYSTEM_VM_IMAGE_BASE).$$system.qcow2"; \
exit 1 ; \
fi
-# Make sure important substitutes are available.
+# Make sure important substitutes are available. Check only the primary
+# server so that '--display-missing' doesn't print two lists.
assert-binaries-available: $(GOBJECTS)
$(AM_V_at)$(top_builddir)/pre-inst-env \
guix weather -m "$(top_srcdir)/etc/release-manifest.scm" \
+ --substitute-urls="https://ci.guix.gnu.org" \
--display-missing
# Make sure the final inputs don't refer to bootstrap tools.
# form.
download-po:
dir=$$(mktemp -d); \
- git clone --depth 1 "$(WEBLATE_REPO)" "$$dir/translations"; \
+ 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' '); \
+ untranslated=$$(LANG=en_US.UTF-8 msgfmt --statistics "$$po" 2>&1 | rev | cut -f3 -d' ' | rev); \
+ untranslated=$${untranslated:-0}; \
+ total=$$(($$translated+$$untranslated)); \
target=$$(basename "$$po"); \
target="$$domain/$$target"; \
- if msgfmt -c "$$po" && [ "$$translated" != "0" ]; then \
+ msgfmt -c "$$po"; \
+ if msgfmt -c "$$po" && [ "$$translated" != "0" ] && ([ "$$domain" != "po/doc" ] || [ "$$translated" -gt $$(($$total/10)) ] || [ -f $$target ]); 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."; \
+ echo "WARN: $$target ($$translated translated messages ($$((translated/total*100))%)) was not added/updated."; \
fi; \
done; \
done; \
+ for po in po/doc/*.po; do \
+ translated=$$(LANG=en_US.UTF-8 msgfmt --statistics "$$po" 2>&1 | cut -f1 -d' '); \
+ untranslated=$$(LANG=en_US.UTF-8 msgfmt --statistics "$$po" 2>&1 | rev | cut -f3 -d' ' | rev); \
+ untranslated=$${untranslated:-0}; \
+ total=$$(($$translated + $$untranslated)); \
+ if [ "$$translated" -lt "$$(($$total/20))" ]; then \
+ echo "WARN: $$po was removed because it is below the 5% threshold: $$((translated/total*100))%"; \
+ rm $$po; \
+ fi; \
+ done; \
rm -rf "$$dir"
.PHONY: download-po