unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
* [bug#70169] [PATCH 0/7] Reproducible `make dist' tarball in defiance of Autotools and Gettext
@ 2024-04-03 19:08 Janneke Nieuwenhuizen
  2024-04-03 19:11 ` [bug#70169] [PATCH 1/7] maint: Cater for running `make dist' from a worktree Janneke Nieuwenhuizen
                   ` (9 more replies)
  0 siblings, 10 replies; 66+ messages in thread
From: Janneke Nieuwenhuizen @ 2024-04-03 19:08 UTC (permalink / raw)
  To: 70169

Hi,

The recent XZ-utils <https://www.openwall.com/lists/oss-security/2024/03/29/4>
debacle inspired me to resurrect and finish my patch set for creating a
reproducible source tarball for Guix, i.e., finally have `make dist' be
reproducible (when run from Git).  I've been using a version of these patches
in simpler projects for some years now and stole one from Timothy Samplet's
Gash project.

Autotools and Gettext still make it harder than necessary to do reproducible
(responsible?) computing, which is especially sad given the fact that the
Reproducible Builds project recently had their 10th birthday
<https://reproducible-builds.org/_lfs/presentations/2023-05-27-R-B-the-first-10-years/#/>.

Gettext tooling embeds timestamps found in the file-system, fails to respect
SOURCE_DATE_EPOCH, and lacks options like `--pot-creation-date' so that we
have to resort to SED to fixup.  The caching of all sorts of information, in
separate build stages, also doesn't help.

To create a reproducible source tarball, having a reproducible build
environment is a prerequitite, so this would have to be recorded too.
Using this patch set, I created a tarball doing something like

--8<---------------cut here---------------start------------->8---
guix pull --commit=1dbe492b993a7629df3b35146ce0272b52913776
guix shell
bootstrap && ./configure --localstatedir=/var --sysconfdir=/etc && make dist
guix hash guix-1.3.0.57425-80a228.tar.gz
0mk59ay5k2dxmjni9fx4i8qyfhvlgxbhqzsjpg2pbw381nskkxbj
--8<---------------cut here---------------end--------------->8---

and I've uploaded it to

    https://lilypond.org/janneke/guix/guix-1.3.0.57425-80a228.tar.gz

Who can reproduce it...and WDYT?

(I've also pushed this patch set to `wip-tarball', as a slight difference
may already produce another tarball).

Greetings,
Janneke

Janneke Nieuwenhuizen (6):
  maint: Cater for running `make dist' from a worktree.
  maint: Use reproducible timestamps and name for tarball.
  maint: Help help2man generate reproducible man-pages.
  maint: Generate 'doc/version-LANG.texi' reproducibly.
  maint: Use reproducible Git timestamp for POT-Creation-Date.
  maint: Ensure generated file reproducibility for dist.

Timothy Sample (1):
  maint: Generate 'doc/version.texi' reproducibly.

 Makefile.am     | 18 ++++++++++++++---
 doc/local.mk    | 54 +++++++++++++++++++++++++++++++++++++++++++++++++
 po/doc/local.mk | 16 +++++++++++----
 3 files changed, 81 insertions(+), 7 deletions(-)


base-commit: df64d48e6f9f648044aa5279c045b8d6f7bee604
-- 
2.41.0





^ permalink raw reply	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH 1/7] maint: Cater for running `make dist' from a worktree.
  2024-04-03 19:08 [bug#70169] [PATCH 0/7] Reproducible `make dist' tarball in defiance of Autotools and Gettext Janneke Nieuwenhuizen
@ 2024-04-03 19:11 ` Janneke Nieuwenhuizen
  2024-04-03 19:11 ` [bug#70169] [PATCH 2/7] maint: Use reproducible timestamps and name for tarball Janneke Nieuwenhuizen
                   ` (8 subsequent siblings)
  9 siblings, 0 replies; 66+ messages in thread
From: Janneke Nieuwenhuizen @ 2024-04-03 19:11 UTC (permalink / raw)
  To: 70169

* Makefile.am (gen-ChangeLog): Check for existance of `.git', rather than it
being a directory.
(gen-AUTHORS): Likewise.

Change-Id: I1b7f8cc147084c1804deb7be9d36e5eeda2599cb
---
 Makefile.am | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/Makefile.am b/Makefile.am
index 1c5688ac13..2b5e145095 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -972,7 +972,7 @@ gen-tarball-version:
 	echo $(VERSION) > "$(distdir)/.tarball-version"
 
 gen-ChangeLog:
-	$(AM_V_GEN)if test -d .git; then		\
+	$(AM_V_GEN)if test -e .git; then		\
 	  $(top_srcdir)/build-aux/gitlog-to-changelog	\
 	    > $(distdir)/ChangeLog.tmp;			\
 	  rm -f $(distdir)/ChangeLog;			\
@@ -980,7 +980,7 @@ gen-ChangeLog:
 	fi
 
 gen-AUTHORS:
-	$(AM_V_GEN)if test -d .git; then			\
+	$(AM_V_GEN)if test -e .git; then			\
 	  rm -f "$(distdir)/AUTHORS";				\
 	  $(top_builddir)/pre-inst-env "$(GUILE)"		\
 	    "$(top_srcdir)/build-aux/generate-authors.scm"	\
-- 
2.41.0





^ permalink raw reply related	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH 2/7] maint: Use reproducible timestamps and name for tarball.
  2024-04-03 19:08 [bug#70169] [PATCH 0/7] Reproducible `make dist' tarball in defiance of Autotools and Gettext Janneke Nieuwenhuizen
  2024-04-03 19:11 ` [bug#70169] [PATCH 1/7] maint: Cater for running `make dist' from a worktree Janneke Nieuwenhuizen
@ 2024-04-03 19:11 ` Janneke Nieuwenhuizen
  2024-04-03 20:45   ` Ludovic Courtès
  2024-04-03 19:11 ` [bug#70169] [PATCH 3/7] maint: Generate 'doc/version.texi' reproducibly Janneke Nieuwenhuizen
                   ` (7 subsequent siblings)
  9 siblings, 1 reply; 66+ messages in thread
From: Janneke Nieuwenhuizen @ 2024-04-03 19:11 UTC (permalink / raw)
  To: 70169

* Makefile.am (gen-tarball-version): Add reproducible timestamp to tarball.
(am__tar): Use it in new variable, overriding the Automake default.
(GZIP_ENV): New variable, overriding the Automake default.

Change-Id: Iea5c2f80eaf24b2f2d80e651c73c348231de8d63
---
 Makefile.am | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/Makefile.am b/Makefile.am
index 2b5e145095..c33d69ed9f 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -7,7 +7,7 @@
 # Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 # Copyright © 2017 Leo Famulari <leo@famulari.name>
 # Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
-# Copyright © 2017, 2020, 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
+# Copyright © 2017, 2020, 2023, 2024 Janneke Nieuwenhuizen <janneke@gnu.org>
 # Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net>
 # Copyright © 2018 Nikita <nikita@n0.is>
 # Copyright © 2018 Julien Lepiller <julien@lepiller.eu>
@@ -970,6 +970,7 @@ $(top_srcdir)/.version: config.status
 
 gen-tarball-version:
 	echo $(VERSION) > "$(distdir)/.tarball-version"
+	git show HEAD --format=%ct --no-patch > $(distdir)/.tarball-timestamp
 
 gen-ChangeLog:
 	$(AM_V_GEN)if test -e .git; then		\
@@ -1002,6 +1003,17 @@ dist-with-updated-version:
 # Release management.
 #
 
+# Reproducible tarball
+GZIP_ENV = --no-name
+# Be friendly to Debian; avoid using EPOCH
+am__tar = $${TAR-tar}				\
+ --sort=name					\
+ --mode=go=rX,u+rw,a-s				\
+ --mtime=@$$(cat "$$tardir"/.tarball-timestamp)	\
+ --owner=0 --group=0 --numeric-owner		\
+ -cf -						\
+ "$$tardir"
+
 releasedir = release-$(PACKAGE_VERSION)
 
 PACKAGE_FULL_TARNAME = $(PACKAGE_TARNAME)-$(PACKAGE_VERSION)
-- 
2.41.0





^ permalink raw reply related	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH 3/7] maint: Generate 'doc/version.texi' reproducibly.
  2024-04-03 19:08 [bug#70169] [PATCH 0/7] Reproducible `make dist' tarball in defiance of Autotools and Gettext Janneke Nieuwenhuizen
  2024-04-03 19:11 ` [bug#70169] [PATCH 1/7] maint: Cater for running `make dist' from a worktree Janneke Nieuwenhuizen
  2024-04-03 19:11 ` [bug#70169] [PATCH 2/7] maint: Use reproducible timestamps and name for tarball Janneke Nieuwenhuizen
@ 2024-04-03 19:11 ` Janneke Nieuwenhuizen
  2024-04-03 19:11 ` [bug#70169] [PATCH 4/7] maint: Help help2man generate reproducible man-pages Janneke Nieuwenhuizen
                   ` (6 subsequent siblings)
  9 siblings, 0 replies; 66+ messages in thread
From: Janneke Nieuwenhuizen @ 2024-04-03 19:11 UTC (permalink / raw)
  To: 70169; +Cc: Timothy Sample

From: Timothy Sample <samplet@ngyro.com>

* doc/local.mk ($(srcdir)/doc/stamp-vti): New rule (overriding one provided
by Automake).

Co-authored-by: Janneke Nieuwenhuizen <janneke@gnu.org>

Change-Id: If44965e9a3ecfb45865c58ee7a558951be8d15ae
---
 doc/local.mk | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/doc/local.mk b/doc/local.mk
index 8df003b891..4c8c852657 100644
--- a/doc/local.mk
+++ b/doc/local.mk
@@ -5,6 +5,7 @@
 # Copyright © 2016 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
 # Copyright © 2016, 2018 Mathieu Lirzin <mthl@gnu.org>
 # Copyright © 2018, 2021 Julien Lepiller <julien@lepiller.eu>
+# Copyright © 2019 Timothy Sample <samplet@ngyro.com>
 #
 # This file is part of GNU Guix.
 #
@@ -247,3 +248,22 @@ $(srcdir)/%D%/guix-daemon.1: guix-daemon$(EXEEXT)
 
 endif
 endif
+
+# Reproducible tarball
+
+# Generate 'version.texi' reproducibly using metadata from Git rather
+# than using metadata from the filesystem.
+override $(srcdir)/doc/stamp-vti: $(srcdir)/doc/guix.texi $(top_srcdir)/configure
+	$(AM_V_GEN)set -e						\
+	export LC_ALL=C;						\
+	export TZ=UTC0;							\
+	timestamp=$$(git log --pretty=format:%ct -n1 -- $< 2>/dev/null	\
+		|| echo $(SOURCE_DATE_EPOCH))				\
+	dmy=$$(date --date="@$$timestamp" "+%-d %B %Y");		\
+	my=$$(date --date="@$$timestamp" "+%B %Y");			\
+	{ echo "@set UPDATED $$dmy";					\
+	  echo "@set UPDATED-MONTH $$my";				\
+	  echo "@set EDITION $(VERSION)";				\
+	  echo "@set VERSION $(VERSION)"; } > $@-t;			\
+	mv $@-t $@
+	@cp $@ $(srcdir)/doc/version.texi
-- 
2.41.0





^ permalink raw reply related	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH 4/7] maint: Help help2man generate reproducible man-pages.
  2024-04-03 19:08 [bug#70169] [PATCH 0/7] Reproducible `make dist' tarball in defiance of Autotools and Gettext Janneke Nieuwenhuizen
                   ` (2 preceding siblings ...)
  2024-04-03 19:11 ` [bug#70169] [PATCH 3/7] maint: Generate 'doc/version.texi' reproducibly Janneke Nieuwenhuizen
@ 2024-04-03 19:11 ` Janneke Nieuwenhuizen
  2024-04-03 19:11 ` [bug#70169] [PATCH 5/7] maint: Generate 'doc/version-LANG.texi' reproducibly Janneke Nieuwenhuizen
                   ` (5 subsequent siblings)
  9 siblings, 0 replies; 66+ messages in thread
From: Janneke Nieuwenhuizen @ 2024-04-03 19:11 UTC (permalink / raw)
  To: 70169

* doc/local.mk (SOURCE_DATE_EPOCH): New exported variable.

Change-Id: I6636693695d5502657f1475d93d31949e0b0b39d
---
 doc/local.mk | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/doc/local.mk b/doc/local.mk
index 4c8c852657..99a7e84361 100644
--- a/doc/local.mk
+++ b/doc/local.mk
@@ -224,6 +224,9 @@ gen_man =						\
   $(HELP2MANFLAGS)
 
 HELP2MANFLAGS = --source=GNU --info-page=$(PACKAGE_TARNAME)
+# help2man reproducibility
+SOURCE_DATE_EPOCH = $(shell git show HEAD --format=%ct --no-patch 2>/dev/null || echo 0)
+export SOURCE_DATE_EPOCH
 
 $(srcdir)/%D%/guix.1: scripts/guix.in $(sub_commands_mans)
 	-$(AM_V_HELP2MAN)$(gen_man) --output="$@" `basename "$@" .1`
-- 
2.41.0





^ permalink raw reply related	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH 5/7] maint: Generate 'doc/version-LANG.texi' reproducibly.
  2024-04-03 19:08 [bug#70169] [PATCH 0/7] Reproducible `make dist' tarball in defiance of Autotools and Gettext Janneke Nieuwenhuizen
                   ` (3 preceding siblings ...)
  2024-04-03 19:11 ` [bug#70169] [PATCH 4/7] maint: Help help2man generate reproducible man-pages Janneke Nieuwenhuizen
@ 2024-04-03 19:11 ` Janneke Nieuwenhuizen
  2024-04-03 20:25   ` Ludovic Courtès
  2024-04-03 20:39   ` Ludovic Courtès
  2024-04-03 19:11 ` [bug#70169] [PATCH 6/7] maint: Use reproducible Git timestamp for POT-Creation-Date Janneke Nieuwenhuizen
                   ` (4 subsequent siblings)
  9 siblings, 2 replies; 66+ messages in thread
From: Janneke Nieuwenhuizen @ 2024-04-03 19:11 UTC (permalink / raw)
  To: 70169

* doc/local.mk ($(srcdir)/doc/stamp-vti): Change rule into...
(version.texi-from-git): ...this new function.  Call it with vti,guix.texi,;
and for all MANUAL_LANGUAGES with $(i),po/doc/guix-manual.$(lang).po,
-$(lang.po).

Change-Id: Ia8df618178066cad320eecea0299337224e23a73
---
 doc/local.mk | 42 ++++++++++++++++++++++++++----------------
 1 file changed, 26 insertions(+), 16 deletions(-)

diff --git a/doc/local.mk b/doc/local.mk
index 99a7e84361..893c99e1b1 100644
--- a/doc/local.mk
+++ b/doc/local.mk
@@ -6,6 +6,7 @@
 # Copyright © 2016, 2018 Mathieu Lirzin <mthl@gnu.org>
 # Copyright © 2018, 2021 Julien Lepiller <julien@lepiller.eu>
 # Copyright © 2019 Timothy Sample <samplet@ngyro.com>
+# Copyright © 2024 Janneke Nieuwenhuizen <janneke@gnu.org>
 #
 # This file is part of GNU Guix.
 #
@@ -254,19 +255,28 @@ endif
 
 # Reproducible tarball
 
-# Generate 'version.texi' reproducibly using metadata from Git rather
-# than using metadata from the filesystem.
-override $(srcdir)/doc/stamp-vti: $(srcdir)/doc/guix.texi $(top_srcdir)/configure
-	$(AM_V_GEN)set -e						\
-	export LC_ALL=C;						\
-	export TZ=UTC0;							\
-	timestamp=$$(git log --pretty=format:%ct -n1 -- $< 2>/dev/null	\
-		|| echo $(SOURCE_DATE_EPOCH))				\
-	dmy=$$(date --date="@$$timestamp" "+%-d %B %Y");		\
-	my=$$(date --date="@$$timestamp" "+%B %Y");			\
-	{ echo "@set UPDATED $$dmy";					\
-	  echo "@set UPDATED-MONTH $$my";				\
-	  echo "@set EDITION $(VERSION)";				\
-	  echo "@set VERSION $(VERSION)"; } > $@-t;			\
-	mv $@-t $@
-	@cp $@ $(srcdir)/doc/version.texi
+# Define a rule to build `version[LANG].texi' reproducibly using metadata from
+# Git rather than using metadata from the filesystem.
+define version.texi-from-git
+override $(srcdir)/doc/stamp-$(1): $(srcdir)/$(2) $(top_srcdir)/configure
+	$$(AM_V_GEN)set -e					\
+	export LC_ALL=C;					\
+	export TZ=UTC0;						\
+	timestamp=$$$$(git log --pretty=format:%ct -n1 -- $$<	\
+		2>/dev/null					\
+		|| echo $$(SOURCE_DATE_EPOCH))			\
+	dmy=$$$$(date --date="@$$$$timestamp" "+%-d %B %Y");	\
+	my=$$$$(date --date="@$$$$timestamp" "+%B %Y");		\
+	{ echo "@set UPDATED $$$$dmy";				\
+	  echo "@set UPDATED-MONTH $$$$my";			\
+	  echo "@set EDITION $$$(VERSION)";			\
+	  echo "@set VERSION $$$(VERSION)"; } > $$@-t;
+	mv $$@-t $$@
+	cp -p $$@ $$(srcdir)/doc/version$(3).texi
+endef
+
+i:=0
+$(eval $(call version.texi-from-git,vti,doc/guix.texi,))
+$(foreach lang, $(MANUAL_LANGUAGES),				\
+	$(eval i=$(shell echo $$(($(i)+1))))			\
+	$(eval $(call version.texi-from-git,$(i),po/doc/guix-manual.$(lang).po,-$(lang))))
-- 
2.41.0





^ permalink raw reply related	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH 6/7] maint: Use reproducible Git timestamp for POT-Creation-Date.
  2024-04-03 19:08 [bug#70169] [PATCH 0/7] Reproducible `make dist' tarball in defiance of Autotools and Gettext Janneke Nieuwenhuizen
                   ` (4 preceding siblings ...)
  2024-04-03 19:11 ` [bug#70169] [PATCH 5/7] maint: Generate 'doc/version-LANG.texi' reproducibly Janneke Nieuwenhuizen
@ 2024-04-03 19:11 ` Janneke Nieuwenhuizen
  2024-04-03 20:26   ` Ludovic Courtès
  2024-04-03 19:11 ` [bug#70169] [PATCH 7/7] maint: Ensure generated file reproducibility for dist Janneke Nieuwenhuizen
                   ` (3 subsequent siblings)
  9 siblings, 1 reply; 66+ messages in thread
From: Janneke Nieuwenhuizen @ 2024-04-03 19:11 UTC (permalink / raw)
  To: 70169; +Cc: Florian Pelz, Julien Lepiller

* po/doc/local.mk (%D%/%.pot): Replace POT-Creation-Date using timestamp from
Git.
(%D%/guix-manual.pot): Likewise.

Change-Id: I1b7f8cc147084c1804deb7be9d36e5eeda2599cb
---
 po/doc/local.mk | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/po/doc/local.mk b/po/doc/local.mk
index dd6ba30133..f68d67ec02 100644
--- a/po/doc/local.mk
+++ b/po/doc/local.mk
@@ -1,6 +1,7 @@
 # GNU Guix --- Functional package management for GNU
 # Copyright © 2018 Julien Lepiller <julien@lepiller.eu>
 # Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+# Copyright © 2024 Janneke Nieuwenhuizen <janneke@gnu.org>
 #
 # This file is part of GNU Guix.
 #
@@ -44,12 +45,19 @@ POT_OPTIONS = \
 	--msgid-bugs-address "bug-guix@gnu.org"
 
 %D%/%.pot: $(srcdir)/doc/%.texi
-	$(AM_V_PO4A)$(PO4A_UPDATEPO) -M UTF-8 -f texinfo -m "$<" \
-	   -p "$@" $(POT_OPTIONS) && \
-	touch $@
+	$(AM_V_PO4A)$(PO4A_UPDATEPO) -M UTF-8 -f texinfo -m "$<"	\
+	   -p "$@-t" $(POT_OPTIONS)
+	date=$$(git log --pretty=format:%ci -n 1 -- $< 2>/dev/null	\
+		|| echo $(SOURCE_DATE_EPOCH))				\
+	sed -ri -e "s,^(.POT-Creation-Date: )[^\]*,\1$$date," $@-t
+	mv $@-t $@
 
 %D%/guix-manual.pot: %D%/guix.pot %D%/contributing.pot
-	msgcat $^ > $@
+	msgcat $^ > $@-t
+	date=$$(git log --pretty=format:%ci -n 1 -- $< 2>/dev/null	\
+		|| echo $(SOURCE_DATE_EPOCH))				\
+	sed -ri "s,^(.POT-Creation-Date: )[^\]*,\1$$date," $@-t
+	mv $@-t $@
 
 doc-pot-update: %D%/guix-manual.pot %D%/guix-cookbook.pot
 .PHONY: doc-pot-update
-- 
2.41.0





^ permalink raw reply related	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH 7/7] maint: Ensure generated file reproducibility for dist.
  2024-04-03 19:08 [bug#70169] [PATCH 0/7] Reproducible `make dist' tarball in defiance of Autotools and Gettext Janneke Nieuwenhuizen
                   ` (5 preceding siblings ...)
  2024-04-03 19:11 ` [bug#70169] [PATCH 6/7] maint: Use reproducible Git timestamp for POT-Creation-Date Janneke Nieuwenhuizen
@ 2024-04-03 19:11 ` Janneke Nieuwenhuizen
  2024-04-03 20:57 ` [bug#70169] [PATCH 0/7] Reproducible `make dist' tarball in defiance of Autotools and Gettext Ludovic Courtès
                   ` (2 subsequent siblings)
  9 siblings, 0 replies; 66+ messages in thread
From: Janneke Nieuwenhuizen @ 2024-04-03 19:11 UTC (permalink / raw)
  To: 70169

* doc/local.mk (override $(srcdir)/doc/stamp-vti): New target override.
(doc-clean, man-clean): New targets.
(auto-clean): Depend on it in new target.
(DIST_CONFIGURE_FLAGS): New variable.
(dist-hook): Use them.

Change-Id: I7b8a3d9ef1e4a4eddb7c329a2c27f481a451b84b
---
 doc/local.mk | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/doc/local.mk b/doc/local.mk
index 893c99e1b1..a8e59bb7e6 100644
--- a/doc/local.mk
+++ b/doc/local.mk
@@ -280,3 +280,24 @@ $(eval $(call version.texi-from-git,vti,doc/guix.texi,))
 $(foreach lang, $(MANUAL_LANGUAGES),				\
 	$(eval i=$(shell echo $$(($(i)+1))))			\
 	$(eval $(call version.texi-from-git,$(i),po/doc/guix-manual.$(lang).po,-$(lang))))
+
+DIST_CONFIGURE_FLAGS =				\
+  --localstatedir=/var				\
+  --sysconfdir=/etc
+
+dist: auto-clean
+auto-clean: maintainer-clean-vti doc-clean man-clean
+	rm -f ABOUT-NLS INSTALL
+	rm -f aclocal.m4 configure libtool Makefile.in
+	git clean -fdx -- build-aux
+	./bootstrap
+	./configure $(DIST_CONFIGURE_FLAGS)
+
+doc-clean:
+	rm -f $(srcdir)/doc/stamp*
+	rm -f $(DOT_FILES:%.dot=%.png)
+	rm -f $(filter-out %D%/guix.texi %D%/guix-cookbook.texi, $(info_TEXINFOS))
+	rm -f $(srcdir)/po/doc/*.pot $(srcdir)/po/guix/*.pot $(srcdir)/po/packages/*.pot
+
+man-clean:
+	rm -f $(srcdir)/doc/*.1
-- 
2.41.0





^ permalink raw reply related	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH 5/7] maint: Generate 'doc/version-LANG.texi' reproducibly.
  2024-04-03 19:11 ` [bug#70169] [PATCH 5/7] maint: Generate 'doc/version-LANG.texi' reproducibly Janneke Nieuwenhuizen
@ 2024-04-03 20:25   ` Ludovic Courtès
  2024-04-03 20:33     ` Janneke Nieuwenhuizen
  2024-04-03 20:39   ` Ludovic Courtès
  1 sibling, 1 reply; 66+ messages in thread
From: Ludovic Courtès @ 2024-04-03 20:25 UTC (permalink / raw)
  To: Janneke Nieuwenhuizen; +Cc: 70169

Janneke Nieuwenhuizen <janneke@gnu.org> skribis:

> +# Define a rule to build `version[LANG].texi' reproducibly using metadata from
> +# Git rather than using metadata from the filesystem.
> +define version.texi-from-git
> +override $(srcdir)/doc/stamp-$(1): $(srcdir)/$(2) $(top_srcdir)/configure
> +	$$(AM_V_GEN)set -e					\
> +	export LC_ALL=C;					\
> +	export TZ=UTC0;						\
> +	timestamp=$$$$(git log --pretty=format:%ct -n1 -- $$<	\
> +		2>/dev/null					\
> +		|| echo $$(SOURCE_DATE_EPOCH))			\
> +	dmy=$$$$(date --date="@$$$$timestamp" "+%-d %B %Y");	\
> +	my=$$$$(date --date="@$$$$timestamp" "+%B %Y");		\
> +	{ echo "@set UPDATED $$$$dmy";				\
> +	  echo "@set UPDATED-MONTH $$$$my";			\
> +	  echo "@set EDITION $$$(VERSION)";			\
> +	  echo "@set VERSION $$$(VERSION)"; } > $$@-t;
> +	mv $$@-t $$@
> +	cp -p $$@ $$(srcdir)/doc/version$(3).texi
> +endef
> +
> +i:=0
> +$(eval $(call version.texi-from-git,vti,doc/guix.texi,))
> +$(foreach lang, $(MANUAL_LANGUAGES),				\
> +	$(eval i=$(shell echo $$(($(i)+1))))			\
> +	$(eval $(call version.texi-from-git,$(i),po/doc/guix-manual.$(lang).po,-$(lang))))

Maybe we could drop ‘i’ and instead create ‘samp-fr’, ‘stamp-de’, and so
on?  That is, ‘version.texi-from-git’ would take 2 arguments instead of 3.

(That’s really a minor issue though.)

Ludo’.




^ permalink raw reply	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH 6/7] maint: Use reproducible Git timestamp for POT-Creation-Date.
  2024-04-03 19:11 ` [bug#70169] [PATCH 6/7] maint: Use reproducible Git timestamp for POT-Creation-Date Janneke Nieuwenhuizen
@ 2024-04-03 20:26   ` Ludovic Courtès
  2024-04-03 20:36     ` Janneke Nieuwenhuizen
  2024-04-04  5:12     ` Janneke Nieuwenhuizen
  0 siblings, 2 replies; 66+ messages in thread
From: Ludovic Courtès @ 2024-04-03 20:26 UTC (permalink / raw)
  To: Janneke Nieuwenhuizen; +Cc: Julien Lepiller, 70169, Florian Pelz

Janneke Nieuwenhuizen <janneke@gnu.org> skribis:

> +	date=$$(git log --pretty=format:%ci -n 1 -- $< 2>/dev/null	\
> +		|| echo $(SOURCE_DATE_EPOCH))				\
> +	sed -ri -e "s,^(.POT-Creation-Date: )[^\]*,\1$$date," $@-t
> +	mv $@-t $@

Nitpick: I'd use double quotes to avoid bad surprises:

  date="$$(git log …)"
  …
  mv "$@-t" "$@"




^ permalink raw reply	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH 5/7] maint: Generate 'doc/version-LANG.texi' reproducibly.
  2024-04-03 20:25   ` Ludovic Courtès
@ 2024-04-03 20:33     ` Janneke Nieuwenhuizen
  2024-04-08  9:26       ` Ludovic Courtès
  0 siblings, 1 reply; 66+ messages in thread
From: Janneke Nieuwenhuizen @ 2024-04-03 20:33 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: 70169

Ludovic Courtès writes:

> Janneke Nieuwenhuizen <janneke@gnu.org> skribis:
>
>> +$(eval $(call version.texi-from-git,vti,doc/guix.texi,))
>> +$(foreach lang, $(MANUAL_LANGUAGES),				\
>> +	$(eval i=$(shell echo $$(($(i)+1))))			\
>> +	$(eval $(call version.texi-from-git,$(i),po/doc/guix-manual.$(lang).po,-$(lang))))
>
> Maybe we could drop ‘i’ and instead create ‘samp-fr’, ‘stamp-de’, and so
> on?  That is, ‘version.texi-from-git’ would take 2 arguments instead of 3.

I don't think so, or, I wouldn't know how to do that.  The stamp-N is
created by Automake's magic.  They are distributed together with the
version-LANG.texi files.

If Automake would have used stamp-LANG, this would have been much
easier, we could probably have used stem (%) instead of this hairy
function.

> (That’s really a minor issue though.)

Ok, but if it's somehow possible, I agree it would be nice.

Greetings,
Janneke

-- 
Janneke Nieuwenhuizen <janneke@gnu.org>  | GNU LilyPond https://LilyPond.org
Freelance IT https://www.JoyOfSource.com | Avatar® https://AvatarAcademy.com




^ permalink raw reply	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH 6/7] maint: Use reproducible Git timestamp for POT-Creation-Date.
  2024-04-03 20:26   ` Ludovic Courtès
@ 2024-04-03 20:36     ` Janneke Nieuwenhuizen
  2024-04-04  5:12     ` Janneke Nieuwenhuizen
  1 sibling, 0 replies; 66+ messages in thread
From: Janneke Nieuwenhuizen @ 2024-04-03 20:36 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: Julien Lepiller, 70169, Florian Pelz

Ludovic Courtès writes:

> Janneke Nieuwenhuizen <janneke@gnu.org> skribis:
>
>> +	date=$$(git log --pretty=format:%ci -n 1 -- $< 2>/dev/null	\
>> +		|| echo $(SOURCE_DATE_EPOCH))				\
>> +	sed -ri -e "s,^(.POT-Creation-Date: )[^\]*,\1$$date," $@-t
>> +	mv $@-t $@
>
> Nitpick: I'd use double quotes to avoid bad surprises:
>
>   date="$$(git log …)"
>   …
>   mv "$@-t" "$@"

Makes sense, thanks.




^ permalink raw reply	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH 5/7] maint: Generate 'doc/version-LANG.texi' reproducibly.
  2024-04-03 19:11 ` [bug#70169] [PATCH 5/7] maint: Generate 'doc/version-LANG.texi' reproducibly Janneke Nieuwenhuizen
  2024-04-03 20:25   ` Ludovic Courtès
@ 2024-04-03 20:39   ` Ludovic Courtès
  2024-04-03 20:43     ` Janneke Nieuwenhuizen
  1 sibling, 1 reply; 66+ messages in thread
From: Ludovic Courtès @ 2024-04-03 20:39 UTC (permalink / raw)
  To: Janneke Nieuwenhuizen; +Cc: 70169

Janneke Nieuwenhuizen <janneke@gnu.org> skribis:

> * doc/local.mk ($(srcdir)/doc/stamp-vti): Change rule into...
> (version.texi-from-git): ...this new function.  Call it with vti,guix.texi,;
> and for all MANUAL_LANGUAGES with $(i),po/doc/guix-manual.$(lang).po,
> -$(lang.po).
>
> Change-Id: Ia8df618178066cad320eecea0299337224e23a73

[...]

> +i:=0
> +$(eval $(call version.texi-from-git,vti,doc/guix.texi,))
> +$(foreach lang, $(MANUAL_LANGUAGES),				\
> +	$(eval i=$(shell echo $$(($(i)+1))))			\
> +	$(eval $(call version.texi-from-git,$(i),po/doc/guix-manual.$(lang).po,-$(lang))))

Also, not sure why but I get this:

--8<---------------cut here---------------start------------->8---
make[2]: Entering directory '/home/ludo/src/guix'
Makefile:7389: warning: overriding recipe for target 'doc/stamp-vti'
Makefile:5111: warning: ignoring old recipe for target 'doc/stamp-vti'
Makefile:7390: warning: overriding recipe for target 'override'
Makefile:7389: warning: ignoring old recipe for target 'override'
Makefile:7390: warning: overriding recipe for target 'doc/stamp-1'
Makefile:5176: warning: ignoring old recipe for target 'doc/stamp-1'
[…]
--8<---------------cut here---------------end--------------->8---

Ludo’.




^ permalink raw reply	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH 5/7] maint: Generate 'doc/version-LANG.texi' reproducibly.
  2024-04-03 20:39   ` Ludovic Courtès
@ 2024-04-03 20:43     ` Janneke Nieuwenhuizen
  0 siblings, 0 replies; 66+ messages in thread
From: Janneke Nieuwenhuizen @ 2024-04-03 20:43 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: Timothy Sample, 70169

Ludovic Courtès writes:

[cc: Timothy Samplet who created an early version of this patch]

> Janneke Nieuwenhuizen <janneke@gnu.org> skribis:
>
>> * doc/local.mk ($(srcdir)/doc/stamp-vti): Change rule into...
>> (version.texi-from-git): ...this new function.  Call it with vti,guix.texi,;
>> and for all MANUAL_LANGUAGES with $(i),po/doc/guix-manual.$(lang).po,
>> -$(lang.po).
>>
>> Change-Id: Ia8df618178066cad320eecea0299337224e23a73
>
> [...]
>
>> +i:=0
>> +$(eval $(call version.texi-from-git,vti,doc/guix.texi,))
>> +$(foreach lang, $(MANUAL_LANGUAGES),				\
>> +	$(eval i=$(shell echo $$(($(i)+1))))			\
>> +	$(eval $(call version.texi-from-git,$(i),po/doc/guix-manual.$(lang).po,-$(lang))))
>
> Also, not sure why but I get this:
>
> make[2]: Entering directory '/home/ludo/src/guix'
> Makefile:7389: warning: overriding recipe for target 'doc/stamp-vti'
> Makefile:5111: warning: ignoring old recipe for target 'doc/stamp-vti'
> Makefile:7390: warning: overriding recipe for target 'override'
> Makefile:7389: warning: ignoring old recipe for target 'override'
> Makefile:7390: warning: overriding recipe for target 'doc/stamp-1'
> Makefile:5176: warning: ignoring old recipe for target 'doc/stamp-1'
> […]

Yes, sadly that's expected, and couldn't figure out how to avoid this.
Any ideas would be greatly appreciated.  Automake will just create those
targets, and it seems we must override exactly those.  May Timothy has
an idea?





^ permalink raw reply	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH 2/7] maint: Use reproducible timestamps and name for tarball.
  2024-04-03 19:11 ` [bug#70169] [PATCH 2/7] maint: Use reproducible timestamps and name for tarball Janneke Nieuwenhuizen
@ 2024-04-03 20:45   ` Ludovic Courtès
  2024-04-03 20:49     ` Janneke Nieuwenhuizen
  0 siblings, 1 reply; 66+ messages in thread
From: Ludovic Courtès @ 2024-04-03 20:45 UTC (permalink / raw)
  To: Janneke Nieuwenhuizen; +Cc: 70169

Janneke Nieuwenhuizen <janneke@gnu.org> skribis:

> +# Reproducible tarball
> +GZIP_ENV = --no-name

Looks like Automake can feel the defiance:

--8<---------------cut here---------------start------------->8---
Makefile.am:1007: warning: user variable 'GZIP_ENV' defined here ...
/gnu/store/lynhxxaygrbw0z05bwsc5c3i5r5qdv38-automake-1.16.5/share/automake-1.16/am/distdir.am: ... overrides Automake variable 'GZIP_ENV' defined here
--8<---------------cut here---------------end--------------->8---

Probably nothing to worry about, though IWBN if we could silence it.

Ludo’.




^ permalink raw reply	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH 2/7] maint: Use reproducible timestamps and name for tarball.
  2024-04-03 20:45   ` Ludovic Courtès
@ 2024-04-03 20:49     ` Janneke Nieuwenhuizen
  0 siblings, 0 replies; 66+ messages in thread
From: Janneke Nieuwenhuizen @ 2024-04-03 20:49 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: 70169

Ludovic Courtès writes:

> Janneke Nieuwenhuizen <janneke@gnu.org> skribis:
>
>> +# Reproducible tarball
>> +GZIP_ENV = --no-name

Hmm, should we add `--best' here too?

> Looks like Automake can feel the defiance:
>
> Makefile.am:1007: warning: user variable 'GZIP_ENV' defined here ...
> /gnu/store/lynhxxaygrbw0z05bwsc5c3i5r5qdv38-automake-1.16.5/share/automake-1.16/am/distdir.am: ... overrides Automake variable 'GZIP_ENV' defined here
>
> Probably nothing to worry about, though IWBN if we could silence it.

Yes, indeed... (Help! :)

Janneke




^ permalink raw reply	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH 0/7] Reproducible `make dist' tarball in defiance of Autotools and Gettext
  2024-04-03 19:08 [bug#70169] [PATCH 0/7] Reproducible `make dist' tarball in defiance of Autotools and Gettext Janneke Nieuwenhuizen
                   ` (6 preceding siblings ...)
  2024-04-03 19:11 ` [bug#70169] [PATCH 7/7] maint: Ensure generated file reproducibility for dist Janneke Nieuwenhuizen
@ 2024-04-03 20:57 ` Ludovic Courtès
  2024-04-03 21:04   ` Janneke Nieuwenhuizen
  2024-04-06 21:17 ` [bug#70169] [PATCH v2 00/12] " Janneke Nieuwenhuizen
  2024-04-08 18:46 ` [bug#70169] [PATCH v3 00/13] Reproducible `make dist' tarball in defiance of Autotools and Gettext Janneke Nieuwenhuizen
  9 siblings, 1 reply; 66+ messages in thread
From: Ludovic Courtès @ 2024-04-03 20:57 UTC (permalink / raw)
  To: Janneke Nieuwenhuizen; +Cc: 70169

Hi!

Janneke Nieuwenhuizen <janneke@gnu.org> skribis:

> The recent XZ-utils <https://www.openwall.com/lists/oss-security/2024/03/29/4>
> debacle inspired me to resurrect and finish my patch set for creating a
> reproducible source tarball for Guix, i.e., finally have `make dist' be
> reproducible (when run from Git).  I've been using a version of these patches
> in simpler projects for some years now and stole one from Timothy Samplet's
> Gash project.

Yay, kudos to you and Timothy!

> Autotools and Gettext still make it harder than necessary to do reproducible
> (responsible?) computing, which is especially sad given the fact that the
> Reproducible Builds project recently had their 10th birthday
> <https://reproducible-builds.org/_lfs/presentations/2023-05-27-R-B-the-first-10-years/#/>.
>
> Gettext tooling embeds timestamps found in the file-system, fails to respect
> SOURCE_DATE_EPOCH, and lacks options like `--pot-creation-date' so that we
> have to resort to SED to fixup.  The caching of all sorts of information, in
> separate build stages, also doesn't help.

Sadness indeed.  Hopefully things will improve in the coming weeks, now
that there’s an impetus.

> To create a reproducible source tarball, having a reproducible build
> environment is a prerequitite, so this would have to be recorded too.
> Using this patch set, I created a tarball doing something like
>
> guix pull --commit=1dbe492b993a7629df3b35146ce0272b52913776
> guix shell
> bootstrap && ./configure --localstatedir=/var --sysconfdir=/etc && make dist
> guix hash guix-1.3.0.57425-80a228.tar.gz
> 0mk59ay5k2dxmjni9fx4i8qyfhvlgxbhqzsjpg2pbw381nskkxbj

I applied the whole series on top of
df64d48e6f9f648044aa5279c045b8d6f7bee604 (the ‘base-commit’ at the
bottom of your message).  Thus I got the same content as you but with a
different commit ID.

“make dist” gave me guix-1.3.0.57425-9f4a4a.tar.gz.  The name indeed
corresponds to the tip of my tree:

--8<---------------cut here---------------start------------->8---
$ guix hash guix-1.3.0.57425-9f4a4a.tar.gz
0z3c4f8g6rsi9n0j8cwzwvw4bc59srg6bl3jj8yi60hbr9vrz5ql
$ git log |head
commit 9f4a4adfa778b281b794b61014e06dad98b6c945
Author: Janneke Nieuwenhuizen <janneke@gnu.org>
Date:   Wed Apr 3 21:11:09 2024 +0200

    maint: Ensure generated file reproducibility for dist.
    
    * doc/local.mk (override $(srcdir)/doc/stamp-vti): New target override.
    (doc-clean, man-clean): New targets.
    (auto-clean): Depend on it in new target.
    (DIST_CONFIGURE_FLAGS): New variable.
--8<---------------cut here---------------end--------------->8---

But as a result, I get a different hash, and since the directory in the
tarball has a different name, ‘diffoscope’ isn’t very helpful.

There’s at least one relevant difference in the gzip metadata:

--8<---------------cut here---------------start------------->8---
--- guix-1.3.0.57425-9f4a4a.tar.gz
+++ /tmp/guix-1.3.0.57425-80a228.tar.gz
├── filetype from file(1)
│ @@ -1 +1 @@
│ -gzip compressed data, from Unix, original size modulo 2^32 208138240 gzip compressed data, rese
rved method, ASCII, extra field, encrypted, from FAT filesystem (MS-DOS, OS/2, NT)
│ +gzip compressed data, from Unix, original size modulo 2^32 222504960 gzip compressed data, rese
rved method, ASCII, has CRC, was "", has comment, encrypted, from FAT filesystem (MS-DOS, OS/2, NT
--8<---------------cut here---------------end--------------->8---

(Your tarball has a CRC and comment, mine doesn’t.)

Maybe we’ll have to iterate once you’ve pushed a first version, so we
can truly build the same thing.  Or we should push the branch somewhere
(or use the one from <https://data.qa.guix.gnu.org/> once it’s been
created).

Thanks!

Ludo’.




^ permalink raw reply	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH 0/7] Reproducible `make dist' tarball in defiance of Autotools and Gettext
  2024-04-03 20:57 ` [bug#70169] [PATCH 0/7] Reproducible `make dist' tarball in defiance of Autotools and Gettext Ludovic Courtès
@ 2024-04-03 21:04   ` Janneke Nieuwenhuizen
  2024-04-03 21:28     ` Ludovic Courtès
  0 siblings, 1 reply; 66+ messages in thread
From: Janneke Nieuwenhuizen @ 2024-04-03 21:04 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: 70169

Ludovic Courtès writes:

Hello,

> Janneke Nieuwenhuizen <janneke@gnu.org> skribis:
>
>> The recent XZ-utils <https://www.openwall.com/lists/oss-security/2024/03/29/4>
>> debacle inspired me to resurrect and finish my patch set for creating a
>> reproducible source tarball for Guix, i.e., finally have `make dist' be
>> reproducible (when run from Git).  I've been using a version of these patches
>> in simpler projects for some years now and stole one from Timothy Samplet's
>> Gash project.
>
> Yay, kudos to you and Timothy!

\o/

>> Autotools and Gettext still make it harder than necessary to do reproducible
>> (responsible?) computing, which is especially sad given the fact that the
>> Reproducible Builds project recently had their 10th birthday
>> <https://reproducible-builds.org/_lfs/presentations/2023-05-27-R-B-the-first-10-years/#/>.
>>
>> Gettext tooling embeds timestamps found in the file-system, fails to respect
>> SOURCE_DATE_EPOCH, and lacks options like `--pot-creation-date' so that we
>> have to resort to SED to fixup.  The caching of all sorts of information, in
>> separate build stages, also doesn't help.
>
> Sadness indeed.  Hopefully things will improve in the coming weeks, now
> that there’s an impetus.

Yes, that would be nice.  With more people joining the effort, it could
be fixed brilliantly, in no time :)

>> To create a reproducible source tarball, having a reproducible build
>> environment is a prerequitite, so this would have to be recorded too.
>> Using this patch set, I created a tarball doing something like
>>
>> guix pull --commit=1dbe492b993a7629df3b35146ce0272b52913776
>> guix shell
>> bootstrap && ./configure --localstatedir=/var --sysconfdir=/etc && make dist
>> guix hash guix-1.3.0.57425-80a228.tar.gz
>> 0mk59ay5k2dxmjni9fx4i8qyfhvlgxbhqzsjpg2pbw381nskkxbj
>
> I applied the whole series on top of
> df64d48e6f9f648044aa5279c045b8d6f7bee604 (the ‘base-commit’ at the
> bottom of your message).  Thus I got the same content as you but with a
> different commit ID.

Yeah..., that's why I pushed `wip-tarball'.  We even look at the
committer's timestamp (not author, as that could be quite old).

> “make dist” gave me guix-1.3.0.57425-9f4a4a.tar.gz.  The name indeed
> corresponds to the tip of my tree:

[..]

> But as a result, I get a different hash, and since the directory in the
> tarball has a different name, ‘diffoscope’ isn’t very helpful.
>
> There’s at least one relevant difference in the gzip metadata:
>
> --- guix-1.3.0.57425-9f4a4a.tar.gz
> +++ /tmp/guix-1.3.0.57425-80a228.tar.gz
> ├── filetype from file(1)
> │ @@ -1 +1 @@
> │ -gzip compressed data, from Unix, original size modulo 2^32 208138240 gzip compressed data, rese
> rved method, ASCII, extra field, encrypted, from FAT filesystem (MS-DOS, OS/2, NT)
> │ +gzip compressed data, from Unix, original size modulo 2^32 222504960 gzip compressed data, rese
> rved method, ASCII, has CRC, was "", has comment, encrypted, from FAT filesystem (MS-DOS, OS/2, NT
>
>
> (Your tarball has a CRC and comment, mine doesn’t.)

I believe this is a red herring.  I saw this all day whenever one file
had a difference...

> Maybe we’ll have to iterate once you’ve pushed a first version, so we
> can truly build the same thing.  Or we should push the branch somewhere

I boldly pushed `origin/wip-tarball', you may try that :)

Be sure to git diff between your tip and origin/wip-tarball to ascertain
I didn't place easter eggs (just kidding).

> (or use the one from <https://data.qa.guix.gnu.org/> once it’s been
> created).

Thanks a lot for trying!

Greetings,
Janneke




^ permalink raw reply	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH 0/7] Reproducible `make dist' tarball in defiance of Autotools and Gettext
  2024-04-03 21:04   ` Janneke Nieuwenhuizen
@ 2024-04-03 21:28     ` Ludovic Courtès
  2024-04-06 21:16       ` Janneke Nieuwenhuizen
  0 siblings, 1 reply; 66+ messages in thread
From: Ludovic Courtès @ 2024-04-03 21:28 UTC (permalink / raw)
  To: Janneke Nieuwenhuizen; +Cc: 70169

Janneke Nieuwenhuizen <janneke@gnu.org> skribis:

> I boldly pushed `origin/wip-tarball', you may try that :)

Silly me. 🤦

First try: I wasn’t running in a UTF-8 locale (in ‘guix shell -CP’) so I
got things like this:

--8<---------------cut here---------------start------------->8---
│ ├── guix-1.3.0.57425-80a228/AUTHORS
│ │ @@ -9,35 +9,35 @@
│ │  
│ │   10255     Ricardo Wurmus <rekado@elephly.net>
│ │    7293     Nicolas Goaziou <mail@nicolasgoaziou.fr>
│ │    5991     Efraim Flashner <efraim@flashner.co.il>
│ │    4033     Maxim Cournoyer <maxim.cournoyer@gmail.com>
│ │    3124     Tobias Geerinckx-Rice <me@tobias.gr>
│ │    2356     Marius Bakke <marius@gnu.org>
│ │ -  2306     Ludovic Court??s <ludo@gnu.org>
│ │ +  2306     Ludovic Courtès <ludo@gnu.org>
--8<---------------cut here---------------end--------------->8---

Then there’s prolly a timezone issue with the generated ChangeLog:

--8<---------------cut here---------------start------------->8---
│ │ -2024-02-19  Troy Figiel  <troy@troyfigiel.com>
│ │ +2024-02-20  Troy Figiel  <troy@troyfigiel.com>
│ │  
│ │     gnu: Add go-github-com-coocood-freecache.
│ │     * gnu/packages/golang-xyz.scm (go-github-com-coocood-freecache): New variable.
--8<---------------cut here---------------end--------------->8---

The best thing to do is probably to drop ‘ChangeLog’ generation (maybe
‘AUTHORS’ too) and just add a text inviting users to check the Git log.

Then I must have stale ‘help2man’ byproducts:

--8<---------------cut here---------------start------------->8---
│ ├── guix-1.3.0.57425-80a228/doc/guix-challenge.1
│ │ @@ -1,11 +1,11 @@
│ │  .\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.49.2.
│ │  .TH GUIX "1" "April 2024" "GNU" "User Commands"
│ │  .SH NAME
│ │ -guix \- manual page for guix challenge (GNU Guix) 1.3.0.51884-370f8f3
│ │ +guix \- manual page for guix challenge (GNU Guix) 1.3.0.57425-80a228
--8<---------------cut here---------------end--------------->8---

Lots of differences in Info files:

--8<---------------cut here---------------start------------->8---
│ ├── guix-1.3.0.57425-80a228/doc/guix-cookbook.fr.info
│ │┄ xxd not available in path. Falling back to Python hexlify.
│ │ @@ -1,6 +1,8216 @@
│ │  5468697320697320677569782d636f6f6b626f6f6b2e66722e696e666f2c2070
│ │  726f6475636564206279206d616b65696e666f2076657273696f6e20362e3820
│ │ -66726f6d0a677569782d636f6f6b626f6f6b2e66722e746578692e0a0a0a1f0a
│ │ -546167205461626c653a0a1f0a456e6420546167205461626c650a0a1f0a4c6f
│ │ -63616c205661726961626c65733a0a636f64696e673a207574662d380a456e64
│ │ -3a0a
│ │ +66726f6d0a677569782d636f6f6b626f6f6b2e66722e746578692e0a0a436f70
│ │ +79726967687420c2a920323031392c2032303232205269636172646f20577572
│ │ +6d75730a436f7079726967687420c2a920323031392045667261696d20466c61
│ │ +73686e65720a436f7079726967687420c2a9203230313920506965727265204e
--8<---------------cut here---------------end--------------->8---

Something with PO files not being regenerated (?):

--8<---------------cut here---------------start------------->8---
│ ├── guix-1.3.0.57425-80a228/po/packages/en@boldquot.po
│ │ @@ -1,11 +1,11 @@
│ │  # English translations for guix package.
│ │ -# Copyright (C) 2020 the authors of Guix (msgids)
│ │ +# Copyright (C) 2024 the authors of Guix (msgids)
│ │  # This file is distributed under the same license as the guix package.
│ │ -# Automatically generated, 2020.
│ │ +# Automatically generated, 2024.
│ │  #
│ │  # All this catalog "translates" are quotation characters.
│ │  # The msgids must be ASCII and therefore cannot contain real quotation
│ │  # characters, only substitutes like grave accent (0x60), apostrophe (0x27)
│ │  # and double quote (0x22). These substitutes look strange; see
│ │  # http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
│ │  #
│ │ @@ -26,118 +26,85 @@
│ │  # transliterated to 0x22.
│ │  #
│ │  # This catalog furthermore displays the text between the quotation marks in
│ │  # bold face, assuming the VT100/XTerm escape sequences.
│ │  #
│ │  msgid ""
│ │  msgstr ""
│ │ -"Project-Id-Version: guix 1.2.0\n"
│ │ +"Project-Id-Version: guix 1.3.0.57419-5a2b40\n"
│ │  "Report-Msgid-Bugs-To: bug-guix@gnu.org\n"
│ │ -"POT-Creation-Date: 2020-11-22 20:33+0100\n"
│ │ -"PO-Revision-Date: 2020-11-22 20:33+0100\n"
│ │ +"POT-Creation-Date: 2024-04-03 09:04+0200\n"
│ │ +"PO-Revision-Date: 2024-04-03 09:04+0200\n"
--8<---------------cut here---------------end--------------->8---

and possibly a timezone issue for POT files:

--8<---------------cut here---------------start------------->8---
│ ├── guix-1.3.0.57425-80a228/po/packages/guix-packages.pot
│ │ @@ -4,15 +4,15 @@
│ │  # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
│ │  #
│ │  #, fuzzy
│ │  msgid ""
│ │  msgstr ""
│ │  "Project-Id-Version: guix 1.3.0.57425-80a228\n"
│ │  "Report-Msgid-Bugs-To: bug-guix@gnu.org\n"
│ │ -"POT-Creation-Date: 2024-04-03 21:14+0000\n"
│ │ +"POT-Creation-Date: 2024-04-03 20:56+0200\n"
│ │  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
--8<---------------cut here---------------end--------------->8---

Note that in ‘guix shell -CP’ I had no TZ and LC_* variable set and
/etc/timezone is missing.

That’s it for today!

Ludo’.




^ permalink raw reply	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH 6/7] maint: Use reproducible Git timestamp for POT-Creation-Date.
  2024-04-03 20:26   ` Ludovic Courtès
  2024-04-03 20:36     ` Janneke Nieuwenhuizen
@ 2024-04-04  5:12     ` Janneke Nieuwenhuizen
  1 sibling, 0 replies; 66+ messages in thread
From: Janneke Nieuwenhuizen @ 2024-04-04  5:12 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: Julien Lepiller, 70169, Florian Pelz

Ludovic Courtès writes:

> Janneke Nieuwenhuizen <janneke@gnu.org> skribis:
>
>> +	date=$$(git log --pretty=format:%ci -n 1 -- $< 2>/dev/null	\
>> +		|| echo $(SOURCE_DATE_EPOCH))				\
>> +	sed -ri -e "s,^(.POT-Creation-Date: )[^\]*,\1$$date," $@-t
>> +	mv $@-t $@
>
> Nitpick: I'd use double quotes to avoid bad surprises:
>
>   date="$$(git log …)"
>   …
>   mv "$@-t" "$@"

Makes sense, thanks.




^ permalink raw reply	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH 0/7] Reproducible `make dist' tarball in defiance of Autotools and Gettext
  2024-04-03 21:28     ` Ludovic Courtès
@ 2024-04-06 21:16       ` Janneke Nieuwenhuizen
  0 siblings, 0 replies; 66+ messages in thread
From: Janneke Nieuwenhuizen @ 2024-04-06 21:16 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: 70169

Ludovic Courtès writes:

Hello!

> Janneke Nieuwenhuizen <janneke@gnu.org> skribis:
>
>> I boldly pushed `origin/wip-tarball', you may try that :)
>
> Silly me. 🤦

Yeah, when you see it, it's obvious :)

> First try: I wasn’t running in a UTF-8 locale (in ‘guix shell -CP’) so I
> got things like this:
>
> │ ├── guix-1.3.0.57425-80a228/AUTHORS
[..]
> │ │ -  2306     Ludovic Court??s <ludo@gnu.org>
> │ │ +  2306     Ludovic Courtès <ludo@gnu.org>

Ah, not good.

> Then there’s prolly a timezone issue with the generated ChangeLog:
>
> │ │ -2024-02-19  Troy Figiel  <troy@troyfigiel.com>
> │ │ +2024-02-20  Troy Figiel  <troy@troyfigiel.com>
> │ │  
> │ │     gnu: Add go-github-com-coocood-freecache.
> │ │     * gnu/packages/golang-xyz.scm (go-github-com-coocood-freecache): New variable.

Yes!

> The best thing to do is probably to drop ‘ChangeLog’ generation (maybe
> ‘AUTHORS’ too) and just add a text inviting users to check the Git log.

I think AUTHORS and ChangeLog are amongst the simplest of our worries.
Setting TZ=UTC0 and LC_ALL=en_US.UTF-8 should address these.

> Then I must have stale ‘help2man’ byproducts:
>
> │ ├── guix-1.3.0.57425-80a228/doc/guix-challenge.1
> │ │ @@ -1,11 +1,11 @@
> │ │  .\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.49.2.
> │ │  .TH GUIX "1" "April 2024" "GNU" "User Commands"
> │ │  .SH NAME
> │ │ -guix \- manual page for guix challenge (GNU Guix) 1.3.0.51884-370f8f3
> │ │ +guix \- manual page for guix challenge (GNU Guix) 1.3.0.57425-80a228

That looks like a dependency or parallelism problem.  I made the
auto-clean dependency more strict and clean even more Autotools caching.

> Lots of differences in Info files:
> │ ├── guix-1.3.0.57425-80a228/doc/guix-cookbook.fr.info
> │ │┄ xxd not available in path. Falling back to Python hexlify.
> │ │ @@ -1,6 +1,8216 @@

Yeah, there's also something with the (building of) the cookbooks.  I'm
hoping the strict auto-clean dependency fixes this too.

> Something with PO files not being regenerated (?):
>
> │ ├── guix-1.3.0.57425-80a228/po/packages/en@boldquot.po
> │ │ @@ -1,11 +1,11 @@
> │ │  # English translations for guix package.
> │ │ -# Copyright (C) 2020 the authors of Guix (msgids)
> │ │ +# Copyright (C) 2024 the authors of Guix (msgids)

Hmm.  I've added a naive xgettext.scm wrapper to take care of this.

> Note that in ‘guix shell -CP’ I had no TZ and LC_* variable set and
> /etc/timezone is missing.

Okay, thanks for the hint.  "Of course", you'll have to use something
like

    guix shell -CP -m manifest.scm fontconfig font-ghostscript \
        graphviz imagemagick texlive-bin

to make it succeed now.  When running in a container from a worktree
you'll also have to expose the master .git directory.

I fixed some image generation rules that would silently fail without
graphviz or imagemagic, or when fonts cannot be found.

> That’s it for today!

Thanks, find a V2 soon.

Greetings,
Janneke

-- 
Janneke Nieuwenhuizen <janneke@gnu.org>  | GNU LilyPond https://LilyPond.org
Freelance IT https://www.JoyOfSource.com | Avatar® https://AvatarAcademy.com




^ permalink raw reply	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH v2 00/12] Reproducible `make dist' tarball in defiance of Autotools and Gettext
  2024-04-03 19:08 [bug#70169] [PATCH 0/7] Reproducible `make dist' tarball in defiance of Autotools and Gettext Janneke Nieuwenhuizen
                   ` (7 preceding siblings ...)
  2024-04-03 20:57 ` [bug#70169] [PATCH 0/7] Reproducible `make dist' tarball in defiance of Autotools and Gettext Ludovic Courtès
@ 2024-04-06 21:17 ` Janneke Nieuwenhuizen
  2024-04-06 21:17   ` [bug#70169] [PATCH v2 01/12] maint: Cater for running `make dist' from a worktree Janneke Nieuwenhuizen
                     ` (12 more replies)
  2024-04-08 18:46 ` [bug#70169] [PATCH v3 00/13] Reproducible `make dist' tarball in defiance of Autotools and Gettext Janneke Nieuwenhuizen
  9 siblings, 13 replies; 66+ messages in thread
From: Janneke Nieuwenhuizen @ 2024-04-06 21:17 UTC (permalink / raw)
  To: 70169

Thanks for your support and to all who helped testing!

V2 brings

  * Use `override' with GZIP_ENV and am__tar to avoid warnings,
  * Add --best to GZIP_ENV (i.e., keep using --best),
  * Generate AUTHORS and ChangeLog reproducibly by setting TZ and LC_ALL,
  * Use double quotes for file-name variables in amended pot rules,
  * Generate POT files reproducibly using a new, naive xgettext.scm script,
  * Remove %%CreationDate from generated EPS files,
  * Reset CreationDate in generated PDF files,
  * Fix dist -> auto-clean -> doc-pot-update dependency,
  * Remove more Autotools caches (.am*, m4/, po/),
  * Document the expected override warnings for stamp-vti, stamp-N, and
  * A toplevel assert that Autotools cache is up-to-date with Git HEAD.

I have reset wip-tarball and uploaded
<https://lilypond.org/janneke/guix/guix-1.3.0.57430-933766.tar.gz>.

--8<---------------cut here---------------start------------->8---
guix hash guix-1.3.0.57430-933766.tar.gz 
01v37vp7hcsfbjsrl22wb01aw6incrxn905rmg54l1svz351nri0
--8<---------------cut here---------------end--------------->8---

Note that you'll need an environment with something like

--8<---------------cut here---------------start------------->8---
guix shell -CP -m manifest.scm fontconfig font-ghostscript graphviz \
    imagemagick texlive-bin
--8<---------------cut here---------------end--------------->8---

Phew!  Almost starting to wonder why didn't I name the initial patch series `A
somewhat more reproducible tarball...' ;)

Greetings,
Janneke

Janneke Nieuwenhuizen (11):
  maint: Cater for running `make dist' from a worktree.
  maint: Use reproducible timestamps and name for tarball.
  maint: Help help2man generate reproducible man-pages.
  maint: Generate AUTHORS and ChangeLog reproducibly.
  maint: Generate 'doc/version-LANG.texi' reproducibly.
  maint: Use xgettext.scm wrapper to create .PO files reproducibly.
  maint: Use reproducible Git timestamp for POT-Creation-Date.
  maint: Remove %%CreationDate from generated EPS files
  maint: Avoid PNG and PDF generation to fail silently.
  maint: Reset CreationDate metadata on generated PDFs.
  maint: Ensure generated file reproducibility for dist.

Timothy Sample (1):
  maint: Generate 'doc/version.texi' reproducibly.

 Makefile.am            | 51 ++++++++++++++++++++---
 build-aux/xgettext.scm | 87 +++++++++++++++++++++++++++++++++++++++
 doc/local.mk           | 92 ++++++++++++++++++++++++++++++++++++++----
 po/doc/local.mk        | 16 ++++++--
 po/guix/Makevars       |  7 +++-
 po/packages/Makevars   | 10 ++++-
 6 files changed, 242 insertions(+), 21 deletions(-)
 create mode 100755 build-aux/xgettext.scm


base-commit: df64d48e6f9f648044aa5279c045b8d6f7bee604
-- 
2.41.0





^ permalink raw reply	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH v2 01/12] maint: Cater for running `make dist' from a worktree.
  2024-04-06 21:17 ` [bug#70169] [PATCH v2 00/12] " Janneke Nieuwenhuizen
@ 2024-04-06 21:17   ` Janneke Nieuwenhuizen
  2024-04-06 21:17   ` [bug#70169] [PATCH v2 02/12] maint: Use reproducible timestamps and name for tarball Janneke Nieuwenhuizen
                     ` (11 subsequent siblings)
  12 siblings, 0 replies; 66+ messages in thread
From: Janneke Nieuwenhuizen @ 2024-04-06 21:17 UTC (permalink / raw)
  To: 70169

* Makefile.am (gen-ChangeLog): Check for existance of `.git', rather than it
being a directory.
(gen-AUTHORS): Likewise.

Change-Id: I1b7f8cc147084c1804deb7be9d36e5eeda2599cb
---
 Makefile.am | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/Makefile.am b/Makefile.am
index 1c5688ac13..2b5e145095 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -972,7 +972,7 @@ gen-tarball-version:
 	echo $(VERSION) > "$(distdir)/.tarball-version"
 
 gen-ChangeLog:
-	$(AM_V_GEN)if test -d .git; then		\
+	$(AM_V_GEN)if test -e .git; then		\
 	  $(top_srcdir)/build-aux/gitlog-to-changelog	\
 	    > $(distdir)/ChangeLog.tmp;			\
 	  rm -f $(distdir)/ChangeLog;			\
@@ -980,7 +980,7 @@ gen-ChangeLog:
 	fi
 
 gen-AUTHORS:
-	$(AM_V_GEN)if test -d .git; then			\
+	$(AM_V_GEN)if test -e .git; then			\
 	  rm -f "$(distdir)/AUTHORS";				\
 	  $(top_builddir)/pre-inst-env "$(GUILE)"		\
 	    "$(top_srcdir)/build-aux/generate-authors.scm"	\
-- 
2.41.0





^ permalink raw reply related	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH v2 02/12] maint: Use reproducible timestamps and name for tarball.
  2024-04-06 21:17 ` [bug#70169] [PATCH v2 00/12] " Janneke Nieuwenhuizen
  2024-04-06 21:17   ` [bug#70169] [PATCH v2 01/12] maint: Cater for running `make dist' from a worktree Janneke Nieuwenhuizen
@ 2024-04-06 21:17   ` Janneke Nieuwenhuizen
  2024-04-06 21:17   ` [bug#70169] [PATCH v2 03/12] maint: Generate 'doc/version.texi' reproducibly Janneke Nieuwenhuizen
                     ` (10 subsequent siblings)
  12 siblings, 0 replies; 66+ messages in thread
From: Janneke Nieuwenhuizen @ 2024-04-06 21:17 UTC (permalink / raw)
  To: 70169

* Makefile.am (gen-tarball-version): Add reproducible timestamp to tarball.
(am__tar): Use it in new variable, overriding the Automake default.
(GZIP_ENV): New variable, overriding the Automake default.
---
 Makefile.am | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/Makefile.am b/Makefile.am
index 2b5e145095..a5e49bc406 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -7,7 +7,7 @@
 # Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 # Copyright © 2017 Leo Famulari <leo@famulari.name>
 # Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
-# Copyright © 2017, 2020, 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
+# Copyright © 2017, 2020, 2023, 2024 Janneke Nieuwenhuizen <janneke@gnu.org>
 # Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net>
 # Copyright © 2018 Nikita <nikita@n0.is>
 # Copyright © 2018 Julien Lepiller <julien@lepiller.eu>
@@ -970,6 +970,7 @@ $(top_srcdir)/.version: config.status
 
 gen-tarball-version:
 	echo $(VERSION) > "$(distdir)/.tarball-version"
+	git show HEAD --format=%ct --no-patch > $(distdir)/.tarball-timestamp
 
 gen-ChangeLog:
 	$(AM_V_GEN)if test -e .git; then		\
@@ -1002,6 +1003,17 @@ dist-with-updated-version:
 # Release management.
 #
 
+# Reproducible tarball
+override GZIP_ENV = --best --no-name
+# Be friendly to Debian; avoid using EPOCH
+override am__tar = $${TAR-tar}			\
+ --sort=name					\
+ --mode=go=rX,u+rw,a-s				\
+ --mtime=@$$(cat "$$tardir"/.tarball-timestamp)	\
+ --owner=0 --group=0 --numeric-owner		\
+ -cf -						\
+ "$$tardir"
+
 releasedir = release-$(PACKAGE_VERSION)
 
 PACKAGE_FULL_TARNAME = $(PACKAGE_TARNAME)-$(PACKAGE_VERSION)
-- 
2.41.0





^ permalink raw reply related	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH v2 03/12] maint: Generate 'doc/version.texi' reproducibly.
  2024-04-06 21:17 ` [bug#70169] [PATCH v2 00/12] " Janneke Nieuwenhuizen
  2024-04-06 21:17   ` [bug#70169] [PATCH v2 01/12] maint: Cater for running `make dist' from a worktree Janneke Nieuwenhuizen
  2024-04-06 21:17   ` [bug#70169] [PATCH v2 02/12] maint: Use reproducible timestamps and name for tarball Janneke Nieuwenhuizen
@ 2024-04-06 21:17   ` Janneke Nieuwenhuizen
  2024-04-06 21:17   ` [bug#70169] [PATCH v2 04/12] maint: Help help2man generate reproducible man-pages Janneke Nieuwenhuizen
                     ` (9 subsequent siblings)
  12 siblings, 0 replies; 66+ messages in thread
From: Janneke Nieuwenhuizen @ 2024-04-06 21:17 UTC (permalink / raw)
  To: 70169; +Cc: Timothy Sample

From: Timothy Sample <samplet@ngyro.com>

* doc/local.mk ($(srcdir)/doc/stamp-vti): New rule (overriding one provided
by Automake).

Co-authored-by: Janneke Nieuwenhuizen <janneke@gnu.org>

Change-Id: If44965e9a3ecfb45865c58ee7a558951be8d15ae
---
 doc/local.mk | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/doc/local.mk b/doc/local.mk
index 8df003b891..5f014b9c3d 100644
--- a/doc/local.mk
+++ b/doc/local.mk
@@ -5,6 +5,7 @@
 # Copyright © 2016 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
 # Copyright © 2016, 2018 Mathieu Lirzin <mthl@gnu.org>
 # Copyright © 2018, 2021 Julien Lepiller <julien@lepiller.eu>
+# Copyright © 2019 Timothy Sample <samplet@ngyro.com>
 #
 # This file is part of GNU Guix.
 #
@@ -247,3 +248,22 @@ $(srcdir)/%D%/guix-daemon.1: guix-daemon$(EXEEXT)
 
 endif
 endif
+
+# Reproducible tarball
+
+# Generate 'version.texi' reproducibly using metadata from Git rather
+# than using metadata from the filesystem.
+$(srcdir)/doc/stamp-vti: $(srcdir)/doc/guix.texi $(top_srcdir)/configure
+	$(AM_V_GEN)set -e						\
+	export LC_ALL=C;						\
+	export TZ=UTC0;							\
+	timestamp=$$(git log --pretty=format:%ct -n1 -- $< 2>/dev/null	\
+		|| echo $(SOURCE_DATE_EPOCH))				\
+	dmy=$$(date --date="@$$timestamp" "+%-d %B %Y");		\
+	my=$$(date --date="@$$timestamp" "+%B %Y");			\
+	{ echo "@set UPDATED $$dmy";					\
+	  echo "@set UPDATED-MONTH $$my";				\
+	  echo "@set EDITION $(VERSION)";				\
+	  echo "@set VERSION $(VERSION)"; } > $@-t;			\
+	mv $@-t $@
+	@cp $@ $(srcdir)/doc/version.texi
-- 
2.41.0





^ permalink raw reply related	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH v2 04/12] maint: Help help2man generate reproducible man-pages.
  2024-04-06 21:17 ` [bug#70169] [PATCH v2 00/12] " Janneke Nieuwenhuizen
                     ` (2 preceding siblings ...)
  2024-04-06 21:17   ` [bug#70169] [PATCH v2 03/12] maint: Generate 'doc/version.texi' reproducibly Janneke Nieuwenhuizen
@ 2024-04-06 21:17   ` Janneke Nieuwenhuizen
  2024-04-07 13:54     ` pelzflorian (Florian Pelz)
  2024-04-06 21:17   ` [bug#70169] [PATCH v2 05/12] maint: Generate AUTHORS and ChangeLog reproducibly Janneke Nieuwenhuizen
                     ` (8 subsequent siblings)
  12 siblings, 1 reply; 66+ messages in thread
From: Janneke Nieuwenhuizen @ 2024-04-06 21:17 UTC (permalink / raw)
  To: 70169

* doc/local.mk (SOURCE_DATE_EPOCH): New exported variable.

Change-Id: I6636693695d5502657f1475d93d31949e0b0b39d
---
 doc/local.mk | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/doc/local.mk b/doc/local.mk
index 5f014b9c3d..017686137a 100644
--- a/doc/local.mk
+++ b/doc/local.mk
@@ -224,6 +224,9 @@ gen_man =						\
   $(HELP2MANFLAGS)
 
 HELP2MANFLAGS = --source=GNU --info-page=$(PACKAGE_TARNAME)
+# help2man reproducibility
+SOURCE_DATE_EPOCH = $(shell git show HEAD --format=%ct --no-patch 2>/dev/null || echo 0)
+export SOURCE_DATE_EPOCH
 
 $(srcdir)/%D%/guix.1: scripts/guix.in $(sub_commands_mans)
 	-$(AM_V_HELP2MAN)$(gen_man) --output="$@" `basename "$@" .1`
-- 
2.41.0





^ permalink raw reply related	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH v2 05/12] maint: Generate AUTHORS and ChangeLog reproducibly.
  2024-04-06 21:17 ` [bug#70169] [PATCH v2 00/12] " Janneke Nieuwenhuizen
                     ` (3 preceding siblings ...)
  2024-04-06 21:17   ` [bug#70169] [PATCH v2 04/12] maint: Help help2man generate reproducible man-pages Janneke Nieuwenhuizen
@ 2024-04-06 21:17   ` Janneke Nieuwenhuizen
  2024-04-06 21:17   ` [bug#70169] [PATCH v2 06/12] maint: Generate 'doc/version-LANG.texi' reproducibly Janneke Nieuwenhuizen
                     ` (7 subsequent siblings)
  12 siblings, 0 replies; 66+ messages in thread
From: Janneke Nieuwenhuizen @ 2024-04-06 21:17 UTC (permalink / raw)
  To: 70169

* Makefile.am (gen-ChangeLog): Set LC_ALL=en_US.UTF-8 TZ=UTC0.
(gen-AUTHORS): Likewise.

Change-Id: I109ceffdf07b8dde6385b6b509366c47564c9f31
---
 Makefile.am | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/Makefile.am b/Makefile.am
index a5e49bc406..7af88b2988 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -974,6 +974,8 @@ gen-tarball-version:
 
 gen-ChangeLog:
 	$(AM_V_GEN)if test -e .git; then		\
+	  export LC_ALL=en_US.UTF-8;			\
+	  export TZ=UTC0;				\
 	  $(top_srcdir)/build-aux/gitlog-to-changelog	\
 	    > $(distdir)/ChangeLog.tmp;			\
 	  rm -f $(distdir)/ChangeLog;			\
@@ -983,6 +985,8 @@ gen-ChangeLog:
 gen-AUTHORS:
 	$(AM_V_GEN)if test -e .git; then			\
 	  rm -f "$(distdir)/AUTHORS";				\
+	  export LC_ALL=en_US.UTF-8;				\
+	  export TZ=UTC0;					\
 	  $(top_builddir)/pre-inst-env "$(GUILE)"		\
 	    "$(top_srcdir)/build-aux/generate-authors.scm"	\
 	    "$(top_srcdir)" "$(distdir)/AUTHORS";		\
-- 
2.41.0





^ permalink raw reply related	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH v2 06/12] maint: Generate 'doc/version-LANG.texi' reproducibly.
  2024-04-06 21:17 ` [bug#70169] [PATCH v2 00/12] " Janneke Nieuwenhuizen
                     ` (4 preceding siblings ...)
  2024-04-06 21:17   ` [bug#70169] [PATCH v2 05/12] maint: Generate AUTHORS and ChangeLog reproducibly Janneke Nieuwenhuizen
@ 2024-04-06 21:17   ` Janneke Nieuwenhuizen
  2024-04-06 21:17   ` [bug#70169] [PATCH v2 07/12] maint: Use xgettext.scm wrapper to create .PO files reproducibly Janneke Nieuwenhuizen
                     ` (6 subsequent siblings)
  12 siblings, 0 replies; 66+ messages in thread
From: Janneke Nieuwenhuizen @ 2024-04-06 21:17 UTC (permalink / raw)
  To: 70169

* doc/local.mk ($(srcdir)/doc/stamp-vti): Change rule into...
(version.texi-from-git): ...this new function.  Call it with vti,guix.texi,;
and for all MANUAL_LANGUAGES with $(i),po/doc/guix-manual.$(lang).po,
-$(lang.po).

Change-Id: Ia8df618178066cad320eecea0299337224e23a73
---
 doc/local.mk | 44 ++++++++++++++++++++++++++++++--------------
 1 file changed, 30 insertions(+), 14 deletions(-)

diff --git a/doc/local.mk b/doc/local.mk
index 017686137a..c355bec8d7 100644
--- a/doc/local.mk
+++ b/doc/local.mk
@@ -6,6 +6,7 @@
 # Copyright © 2016, 2018 Mathieu Lirzin <mthl@gnu.org>
 # Copyright © 2018, 2021 Julien Lepiller <julien@lepiller.eu>
 # Copyright © 2019 Timothy Sample <samplet@ngyro.com>
+# Copyright © 2024 Janneke Nieuwenhuizen <janneke@gnu.org>
 #
 # This file is part of GNU Guix.
 #
@@ -254,19 +255,34 @@ endif
 
 # Reproducible tarball
 
-# Generate 'version.texi' reproducibly using metadata from Git rather
-# than using metadata from the filesystem.
-$(srcdir)/doc/stamp-vti: $(srcdir)/doc/guix.texi $(top_srcdir)/configure
-	$(AM_V_GEN)set -e						\
+# Define a rule to build `version[LANG].texi' reproducibly using metadata from
+# Git rather than using metadata from the filesystem.
+define version.texi-from-git
+$(srcdir)/doc/stamp-$(1): $(srcdir)/$(2) $(top_srcdir)/configure
+	$$(AM_V_GEN)set -e						\
 	export LC_ALL=C;						\
 	export TZ=UTC0;							\
-	timestamp=$$(git log --pretty=format:%ct -n1 -- $< 2>/dev/null	\
-		|| echo $(SOURCE_DATE_EPOCH))				\
-	dmy=$$(date --date="@$$timestamp" "+%-d %B %Y");		\
-	my=$$(date --date="@$$timestamp" "+%B %Y");			\
-	{ echo "@set UPDATED $$dmy";					\
-	  echo "@set UPDATED-MONTH $$my";				\
-	  echo "@set EDITION $(VERSION)";				\
-	  echo "@set VERSION $(VERSION)"; } > $@-t;			\
-	mv $@-t $@
-	@cp $@ $(srcdir)/doc/version.texi
+	timestamp="$$$$(git log --pretty=format:%ct -n1 -- "$$<"	\
+		2>/dev/null						\
+		|| echo $$(SOURCE_DATE_EPOCH))"				\
+	dmy=$$$$(date --date="@$$$$timestamp" "+%-d %B %Y");		\
+	my=$$$$(date --date="@$$$$timestamp" "+%B %Y");			\
+	{ echo "@set UPDATED $$$$dmy";					\
+	  echo "@set UPDATED-MONTH $$$$my";				\
+	  echo "@set EDITION $$$(VERSION)";				\
+	  echo "@set VERSION $$$(VERSION)"; } > "$$@-t";
+	mv "$$@-t" "$$@"
+	cp -p "$$@" "$$(srcdir)/doc/version$(3).texi"
+endef
+
+# Generate rules for stamp-vti and stamp-N that create version.texi and
+# version-LANG.texi to override the Autotools versions that use timestamps
+# embedded in the file-system.  These are expected to generate warnings:
+#
+#   Makefile:7376: warning: overriding recipe for target 'doc/stamp-vti'
+#   Makefile:5098: warning: ignoring old recipe for target 'doc/stamp-vti'
+i:=0
+$(eval $(call version.texi-from-git,vti,doc/guix.texi,))
+$(foreach lang, $(MANUAL_LANGUAGES),							\
+  $(eval i=$(shell echo $$(($(i)+1))))							\
+  $(eval $(call version.texi-from-git,$(i),po/doc/guix-manual.$(lang).po,-$(lang))))
-- 
2.41.0





^ permalink raw reply related	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH v2 07/12] maint: Use xgettext.scm wrapper to create .PO files reproducibly.
  2024-04-06 21:17 ` [bug#70169] [PATCH v2 00/12] " Janneke Nieuwenhuizen
                     ` (5 preceding siblings ...)
  2024-04-06 21:17   ` [bug#70169] [PATCH v2 06/12] maint: Generate 'doc/version-LANG.texi' reproducibly Janneke Nieuwenhuizen
@ 2024-04-06 21:17   ` Janneke Nieuwenhuizen
  2024-04-06 21:18   ` [bug#70169] [PATCH v2 08/12] maint: Use reproducible Git timestamp for POT-Creation-Date Janneke Nieuwenhuizen
                     ` (5 subsequent siblings)
  12 siblings, 0 replies; 66+ messages in thread
From: Janneke Nieuwenhuizen @ 2024-04-06 21:17 UTC (permalink / raw)
  To: 70169; +Cc: Florian Pelz, Julien Lepiller

* build-aux/xgettext.scm: New script.
* po/guix/Makevars (XGETTEXT): Set it.
(XGETTEXT_OPTIONS): Add --xgettext option to `real' xgettext.
* po/packages/Makevars (XGETTEXT): Set it.
(XGETTEXT_OPTIONS): Add --xgettext option to `real' xgettext.

Change-Id: I71b6b843970090f765f46ac346b92a346560e3f0
---
 build-aux/xgettext.scm | 87 ++++++++++++++++++++++++++++++++++++++++++
 po/guix/Makevars       |  7 +++-
 po/packages/Makevars   | 10 ++++-
 3 files changed, 101 insertions(+), 3 deletions(-)
 create mode 100755 build-aux/xgettext.scm

diff --git a/build-aux/xgettext.scm b/build-aux/xgettext.scm
new file mode 100755
index 0000000000..e8a970f251
--- /dev/null
+++ b/build-aux/xgettext.scm
@@ -0,0 +1,87 @@
+#! /bin/sh
+# -*-scheme-*-
+build_aux=$(dirname $0)
+srcdir=$build_aux/..
+exec guile --no-auto-compile -L $srcdir -C $srcdir -e main -s "$0" "$@"
+!#
+
+;;; Copyright © 2024 Janneke Nieuwenhuizen <janneke@gnu.org>
+;;;
+;;; This program is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; This program is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+;;;; Commentary:
+;;;
+;;; This script provides an xgettext wrapper to (re)set POT-Creation-Date from
+;;; a Git timestamp.  Test doing something like:
+;;;
+;;; build-aux/xgettext.scm --files-from=po/guix/POTFILES.in --default-domain=test
+;;;
+;;;; Code:
+
+(use-modules (srfi srfi-1)
+             (srfi srfi-26)
+             (ice-9 curried-definitions)
+             (ice-9 match)
+             (ice-9 popen)
+             (ice-9 rdelim)
+             (guix build utils))
+
+(define ((option? name) option)
+  (string-prefix? name option))
+
+(define (get-option args name)
+  (let ((option (find (option? name) args)))
+    (and option
+         (substring option (string-length name)))))
+
+(define (pipe-command command)
+  (let* ((port (apply open-pipe* OPEN_READ command))
+         (output (read-string port)))
+    (close-port port)
+    output))
+
+\f
+;;;
+;;; Entry point.
+;;;
+(define (main args)
+  ;; Cater for being run in a container.
+  (setenv "LC_ALL" "en_US.UTF-8")
+  (setenv "TZ" "UTC0")
+  (fluid-set! %default-port-encoding #f)
+  (let* ((files-from (get-option args "--files-from="))
+         (default-domain (get-option args "--default-domain="))
+         (directory (or (get-option args "--directory=") "."))
+         (xgettext (or (get-option args "--xgettext=") "xgettext"))
+         (xgettext-args (filter (negate (option? "--xgettext=")) args))
+         (command (match xgettext-args
+                    ((xgettext.scm args ...)
+                     `(,xgettext ,@args))))
+         (result (apply system* command))
+         (status (/ result 256)))
+    (if (or (not (zero? status))
+            (not files-from))
+        (exit status)
+        (let* ((text (with-input-from-file files-from read-string))
+               (lines (string-split text #\newline))
+               (files (filter (negate (cute string-prefix? "#" <>)) lines))
+               (files (map (cute string-append directory "/" <>) files))
+               (git-command `("git" "log" "--pretty=format:%ci" "-n1" ,@files))
+               (timestamp (pipe-command git-command))
+               (po-file (string-append default-domain ".po")))
+          (when (string-null? timestamp)
+            (exit 1))
+          (substitute* po-file
+            (("(\"POT-Creation-Date: )[^\\]*" all header)
+             (string-append header timestamp)))))))
diff --git a/po/guix/Makevars b/po/guix/Makevars
index 88a4e8c7bc..4cfd0f431d 100644
--- a/po/guix/Makevars
+++ b/po/guix/Makevars
@@ -5,6 +5,10 @@ DOMAIN = guix
 subdir = po/guix
 top_builddir = ../..
 
+# We use our xgettext.scm wrapper to produce .PO files reproducibly using a
+# timestamp from Git.
+XGETTEXT:=$(top_srcdir)/build-aux/xgettext.scm
+
 # These options get passed to xgettext.  We want to catch standard
 # gettext uses, and SRFI-35 error condition messages.  In C++ code
 # we use 'n_' instead of the more usual 'N_' for no-ops.
@@ -14,7 +18,8 @@ XGETTEXT_OPTIONS =				\
   --keyword=message				\
   --keyword=description				\
   --keyword=synopsis				\
-  --keyword=n_
+  --keyword=n_					\
+  --xgettext=$(XGETTEXT_)
 
 COPYRIGHT_HOLDER = the authors of Guix (msgids)
 
diff --git a/po/packages/Makevars b/po/packages/Makevars
index 65912786d8..0ba4f1ba7e 100644
--- a/po/packages/Makevars
+++ b/po/packages/Makevars
@@ -6,12 +6,18 @@ DOMAIN = guix-packages
 subdir = po/packages
 top_builddir = ../..
 
+# We use our xgettext.scm wrapper to produce .PO files reproducibly using a
+# timestamp from Git.  The `real' xgettext is passed as an option to
+# xgettext.scm
+XGETTEXT:=$(top_srcdir)/build-aux/xgettext.scm
+
 # These options get passed to xgettext.  We want to catch exclusively package
 # synopses and descriptions.
 XGETTEXT_OPTIONS =				\
   --language=Scheme --from-code=UTF-8		\
-  --keyword=synopsis --keyword=description      \
-  --keyword=output-synopsis:2
+  --keyword=synopsis --keyword=description	\
+  --keyword=output-synopsis:2			\
+  --xgettext=$(XGETTEXT_)
 
 COPYRIGHT_HOLDER = the authors of Guix (msgids)
 
-- 
2.41.0





^ permalink raw reply related	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH v2 08/12] maint: Use reproducible Git timestamp for POT-Creation-Date.
  2024-04-06 21:17 ` [bug#70169] [PATCH v2 00/12] " Janneke Nieuwenhuizen
                     ` (6 preceding siblings ...)
  2024-04-06 21:17   ` [bug#70169] [PATCH v2 07/12] maint: Use xgettext.scm wrapper to create .PO files reproducibly Janneke Nieuwenhuizen
@ 2024-04-06 21:18   ` Janneke Nieuwenhuizen
  2024-04-06 21:18   ` [bug#70169] [PATCH v2 09/12] maint: Remove %%CreationDate from generated EPS files Janneke Nieuwenhuizen
                     ` (4 subsequent siblings)
  12 siblings, 0 replies; 66+ messages in thread
From: Janneke Nieuwenhuizen @ 2024-04-06 21:18 UTC (permalink / raw)
  To: 70169; +Cc: Florian Pelz, Julien Lepiller

* po/doc/local.mk (%D%/%.pot): Replace POT-Creation-Date using timestamp from
Git.
(%D%/guix-manual.pot): Likewise.

Change-Id: I1b7f8cc147084c1804deb7be9d36e5eeda2599cb
---
 po/doc/local.mk | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/po/doc/local.mk b/po/doc/local.mk
index dd6ba30133..77ec4721e3 100644
--- a/po/doc/local.mk
+++ b/po/doc/local.mk
@@ -1,6 +1,7 @@
 # GNU Guix --- Functional package management for GNU
 # Copyright © 2018 Julien Lepiller <julien@lepiller.eu>
 # Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+# Copyright © 2024 Janneke Nieuwenhuizen <janneke@gnu.org>
 #
 # This file is part of GNU Guix.
 #
@@ -44,12 +45,19 @@ POT_OPTIONS = \
 	--msgid-bugs-address "bug-guix@gnu.org"
 
 %D%/%.pot: $(srcdir)/doc/%.texi
-	$(AM_V_PO4A)$(PO4A_UPDATEPO) -M UTF-8 -f texinfo -m "$<" \
-	   -p "$@" $(POT_OPTIONS) && \
-	touch $@
+	$(AM_V_PO4A)$(PO4A_UPDATEPO) -M UTF-8 -f texinfo -m "$<"	\
+	   -p "$@-t" $(POT_OPTIONS)
+	date="$$(git log --pretty=format:%ci -n 1 -- $< 2>/dev/null	\
+		|| echo $(SOURCE_DATE_EPOCH))"				\
+	sed -ri -e "s,^(.POT-Creation-Date: )[^\]*,\1$$date," "$@-t"
+	mv "$@-t" "$@"
 
 %D%/guix-manual.pot: %D%/guix.pot %D%/contributing.pot
-	msgcat $^ > $@
+	msgcat $^ > "$@-t"
+	date="$$(git log --pretty=format:%ci -n 1 -- $< 2>/dev/null	\
+		|| echo $(SOURCE_DATE_EPOCH))"				\
+	sed -ri "s,^(.POT-Creation-Date: )[^\]*,\1$$date," "$@-t"
+	mv "$@-t" "$@"
 
 doc-pot-update: %D%/guix-manual.pot %D%/guix-cookbook.pot
 .PHONY: doc-pot-update
-- 
2.41.0





^ permalink raw reply related	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH v2 09/12] maint: Remove %%CreationDate from generated EPS files
  2024-04-06 21:17 ` [bug#70169] [PATCH v2 00/12] " Janneke Nieuwenhuizen
                     ` (7 preceding siblings ...)
  2024-04-06 21:18   ` [bug#70169] [PATCH v2 08/12] maint: Use reproducible Git timestamp for POT-Creation-Date Janneke Nieuwenhuizen
@ 2024-04-06 21:18   ` Janneke Nieuwenhuizen
  2024-04-08  9:41     ` Ludovic Courtès
  2024-04-06 21:18   ` [bug#70169] [PATCH v2 10/12] maint: Avoid PNG and PDF generation to fail silently Janneke Nieuwenhuizen
                     ` (3 subsequent siblings)
  12 siblings, 1 reply; 66+ messages in thread
From: Janneke Nieuwenhuizen @ 2024-04-06 21:18 UTC (permalink / raw)
  To: 70169

* doc/local.mk (.dot.eps, png.eps): Remove %%CreationDate.  Split single shell
command into separate recipe lines, prefixed by $(AM_V_at).

Change-Id: I5a03485c19c72f0c46411815c51290e52a8e5399
---
 doc/local.mk | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/doc/local.mk b/doc/local.mk
index c355bec8d7..60e36091ce 100644
--- a/doc/local.mk
+++ b/doc/local.mk
@@ -152,12 +152,16 @@ DOT_OPTIONS =					\
 	mv "$(srcdir)/$@.tmp" "$(srcdir)/$@"
 
 .dot.eps:
-	$(AM_V_DOT)$(DOT) -Teps $(DOT_OPTIONS) < "$<" > "$(srcdir)/$@.tmp"; \
-	mv "$(srcdir)/$@.tmp" "$(srcdir)/$@"
+	$(AM_V_DOT)$(DOT) -Teps $(DOT_OPTIONS) < "$<" > "$(srcdir)/$@.tmp"
+	$(AM_V_at)grep -v ^%%CreationDate: "$(srcdir)/$@.tmp" > "$(srcdir)/$@.tmp2"
+	$(AM_V_at)rm -f "$(srcdir)/$@.tmp"
+	$(AM_V_at)mv "$(srcdir)/$@.tmp2" "$@"
 
 .png.eps:
-	$(AM_V_GEN)convert "$<" "$@-tmp.eps"; \
-	mv "$@-tmp.eps" "$@"
+	$(AM_V_GEN)convert "$<" "$@-tmp.eps"
+	$(AM_V_at)grep -v ^%%CreationDate: "$@-tmp.eps" > "$@-tmp2.eps"
+	$(AM_V_at)rm -f "$@-tmp.eps"
+	$(AM_V_at)mv "$@-tmp2.eps" "$@"
 
 # We cannot add new dependencies to `%D%/guix.pdf' & co. (info "(automake)
 # Extending").  Using the `-local' rules is imperfect, because they may be
-- 
2.41.0





^ permalink raw reply related	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH v2 10/12] maint: Avoid PNG and PDF generation to fail silently.
  2024-04-06 21:17 ` [bug#70169] [PATCH v2 00/12] " Janneke Nieuwenhuizen
                     ` (8 preceding siblings ...)
  2024-04-06 21:18   ` [bug#70169] [PATCH v2 09/12] maint: Remove %%CreationDate from generated EPS files Janneke Nieuwenhuizen
@ 2024-04-06 21:18   ` Janneke Nieuwenhuizen
  2024-04-06 21:18   ` [bug#70169] [PATCH v2 11/12] maint: Reset CreationDate metadata on generated PDFs Janneke Nieuwenhuizen
                     ` (2 subsequent siblings)
  12 siblings, 0 replies; 66+ messages in thread
From: Janneke Nieuwenhuizen @ 2024-04-06 21:18 UTC (permalink / raw)
  To: 70169

* doc/local.mk (.dot.png): Split single shell command into separate recipe
lines, prefixed by $(AM_V_at).
(.dot.pdf): Likewise.

Change-Id: I41fb856bb73f947abd91361ed203132e939f3897
---
 doc/local.mk | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/doc/local.mk b/doc/local.mk
index 60e36091ce..a0d94614d3 100644
--- a/doc/local.mk
+++ b/doc/local.mk
@@ -144,12 +144,12 @@ DOT_OPTIONS =					\
   -Nfontsize=9 -Nheight=.1 -Nwidth=.1
 
 .dot.png:
-	$(AM_V_DOT)$(DOT) -Tpng $(DOT_OPTIONS) < "$<" > "$(srcdir)/$@.tmp"; \
-	mv "$(srcdir)/$@.tmp" "$(srcdir)/$@"
+	$(AM_V_DOT)$(DOT) -Tpng $(DOT_OPTIONS) < "$<" > "$(srcdir)/$@.tmp"
+	$(AM_V_at)mv "$(srcdir)/$@.tmp" "$(srcdir)/$@"
 
 .dot.pdf:
-	$(AM_V_DOT)$(DOT) -Tpdf $(DOT_OPTIONS) < "$<" > "$(srcdir)/$@.tmp"; \
-	mv "$(srcdir)/$@.tmp" "$(srcdir)/$@"
+	$(AM_V_DOT)$(DOT) -Tpdf $(DOT_OPTIONS) < "$<" > "$(srcdir)/$@.tmp"
+	$(AM_V_at)mv "$(srcdir)/$@.tmp" "$(srcdir)/$@"
 
 .dot.eps:
 	$(AM_V_DOT)$(DOT) -Teps $(DOT_OPTIONS) < "$<" > "$(srcdir)/$@.tmp"
-- 
2.41.0





^ permalink raw reply related	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH v2 11/12] maint: Reset CreationDate metadata on generated PDFs.
  2024-04-06 21:17 ` [bug#70169] [PATCH v2 00/12] " Janneke Nieuwenhuizen
                     ` (9 preceding siblings ...)
  2024-04-06 21:18   ` [bug#70169] [PATCH v2 10/12] maint: Avoid PNG and PDF generation to fail silently Janneke Nieuwenhuizen
@ 2024-04-06 21:18   ` Janneke Nieuwenhuizen
  2024-04-07 17:16     ` pelzflorian (Florian Pelz)
  2024-04-06 21:18   ` [bug#70169] [PATCH v2 12/12] maint: Ensure generated file reproducibility for dist Janneke Nieuwenhuizen
  2024-04-07  8:57   ` [bug#70169] [PATCH v2 13/12] doc: Use "dejavu sans" instead of "Helvetica" or "sans" in dot images Janneke Nieuwenhuizen
  12 siblings, 1 reply; 66+ messages in thread
From: Janneke Nieuwenhuizen @ 2024-04-06 21:18 UTC (permalink / raw)
  To: 70169

* doc/local.mk (.dot.pdf): Create PDF in UTC0 and reset CreationDate metadata.

Change-Id: I3873ecdeec781c30874d53d032406cbe23922a25
---
 doc/local.mk | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/doc/local.mk b/doc/local.mk
index a0d94614d3..25741a5c88 100644
--- a/doc/local.mk
+++ b/doc/local.mk
@@ -148,7 +148,11 @@ DOT_OPTIONS =					\
 	$(AM_V_at)mv "$(srcdir)/$@.tmp" "$(srcdir)/$@"
 
 .dot.pdf:
-	$(AM_V_DOT)$(DOT) -Tpdf $(DOT_OPTIONS) < "$<" > "$(srcdir)/$@.tmp"
+	export TZ=UTC0;								\
+	    $(AM_V_DOT)$(DOT) -Tpdf $(DOT_OPTIONS) < "$<" > "$(srcdir)/$@.tmp"
+	$(AM_V_at)sed -ri						\
+	    -e 's,(/CreationDate [(]D:)[0-9+]{14},\119700101000000,'	\
+		"$(srcdir)/$@.tmp"
 	$(AM_V_at)mv "$(srcdir)/$@.tmp" "$(srcdir)/$@"
 
 .dot.eps:
-- 
2.41.0





^ permalink raw reply related	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH v2 12/12] maint: Ensure generated file reproducibility for dist.
  2024-04-06 21:17 ` [bug#70169] [PATCH v2 00/12] " Janneke Nieuwenhuizen
                     ` (10 preceding siblings ...)
  2024-04-06 21:18   ` [bug#70169] [PATCH v2 11/12] maint: Reset CreationDate metadata on generated PDFs Janneke Nieuwenhuizen
@ 2024-04-06 21:18   ` Janneke Nieuwenhuizen
  2024-04-07  8:57   ` [bug#70169] [PATCH v2 13/12] doc: Use "dejavu sans" instead of "Helvetica" or "sans" in dot images Janneke Nieuwenhuizen
  12 siblings, 0 replies; 66+ messages in thread
From: Janneke Nieuwenhuizen @ 2024-04-06 21:18 UTC (permalink / raw)
  To: 70169

* doc/local.mk (doc-clean): New target.
(DIST_CONFIGURE_FLAGS): New variable.
(auto-clean): Use them in new target.
* Makefile.am (dist-doc-pot-update): Use it in new target.
(dist): Change to depend on it to clean possibly stale files, instead of
doc-pot-update directly.
Add a toplevel check to ensure that Autotools cache is up to date.

Change-Id: I2ff2d88db9fe1e708ab65e33e1f3d7ecee882cb4
---
 Makefile.am  | 29 ++++++++++++++++++++++++++---
 doc/local.mk | 29 +++++++++++++++++++++++++++++
 2 files changed, 55 insertions(+), 3 deletions(-)

diff --git a/Makefile.am b/Makefile.am
index 7af88b2988..aac328b75e 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -954,9 +954,32 @@ guix-binary.%.tar.xz:
 	cp "$$tarball" "$@.tmp" ; mv "$@.tmp" "$@"
 
 
-# The dependency on doc-pot-update is to generate the .pot files, which are
-# not checked in.
-dist: doc-pot-update
+# Assert that Autotools cache is up to date with Git, by checking
+# PACKAGE_VERSION against HEAD.  Indented to get past Automake.
+ ifeq ($(MAKECMDGOALS),dist)
+ git_version = $(shell build-aux/git-version-gen .tarball-version)
+ ifneq ($(PACKAGE_VERSION),$(git_version))
+ $(warning Autotools cache out of date.)
+ $(info Autotools cache version: $(PACKAGE_VERSION).)
+ $(info Git version: $(git_version).)
+ $(info Please run `autoreconf -vif'.) #`
+ ifneq ($(GUIX_ALLOW_IRREPRODUCIBLE_TARBALL),yes)
+ $(error Cannot create reproducible tarball)
+ else
+ $(warning Tarball will be irreproducible; distdir will not get removed!)
+ endif
+ endif
+ endif
+
+# The dependency on dist-doc-pot-update is to clean possibly stale doc and po
+# files and only then generate the .pot files, which are not checked in.
+dist: dist-doc-pot-update
+dist-doc-pot-update: auto-clean
+	$(MAKE) guile$(EXEEXT)
+	$(MAKE) -C po/guix all
+	$(MAKE) -C po/packages all
+	$(MAKE) doc-pot-update
+	$(MAKE) guix-daemon
 
 dist-hook: gen-ChangeLog gen-AUTHORS gen-tarball-version
 dist-hook: assert-no-store-file-names
diff --git a/doc/local.mk b/doc/local.mk
index 25741a5c88..8ba1ce4668 100644
--- a/doc/local.mk
+++ b/doc/local.mk
@@ -294,3 +294,32 @@ $(eval $(call version.texi-from-git,vti,doc/guix.texi,))
 $(foreach lang, $(MANUAL_LANGUAGES),							\
   $(eval i=$(shell echo $$(($(i)+1))))							\
   $(eval $(call version.texi-from-git,$(i),po/doc/guix-manual.$(lang).po,-$(lang))))
+
+DIST_CONFIGURE_FLAGS =				\
+  --localstatedir=/var				\
+  --sysconfdir=/etc
+
+# Delete all Autotools-generated files and rerun configure to ensure
+# a clean cache and distributing reproducible versions.
+auto-clean: maintainer-clean-vti doc-clean
+	rm -f ABOUT-NLS INSTALL
+	rm -f aclocal.m4 configure libtool Makefile.in
+	git clean -fdx -- '.am*' build-aux m4 po
+	rm -f guile
+	rm -f guix-daemon nix/nix-daemon/guix_daemon-guix-daemon.o
+# Automake fails if guix-cookbook-LANG.texi stubs are missing; running
+# autoreconf -vif is not enough.
+	./bootstrap
+# The dependency chain for the guix-cookbook-LANG.texi was cut on purpose;
+# they must be deleted to ensure a rebuild.
+	rm -f $(filter-out %D%/guix.texi %D%/guix-cookbook.texi, $(info_TEXINFOS))
+	./configure $(DIST_CONFIGURE_FLAGS)
+
+# Delete all generated doc files to ensure a clean cache and distributing
+# reproducible versions.
+doc-clean:
+	rm -f $(srcdir)/doc/*.1
+	rm -f $(srcdir)/doc/stamp*
+	rm -f $(DOT_FILES:%.dot=%.png)
+	rm -f $(DOT_VECTOR_GRAPHICS)
+	rm -f doc/images/coreutils-size-map.eps
-- 
2.41.0





^ permalink raw reply related	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH v2 13/12] doc: Use "dejavu sans" instead of "Helvetica" or "sans" in dot images.
  2024-04-06 21:17 ` [bug#70169] [PATCH v2 00/12] " Janneke Nieuwenhuizen
                     ` (11 preceding siblings ...)
  2024-04-06 21:18   ` [bug#70169] [PATCH v2 12/12] maint: Ensure generated file reproducibility for dist Janneke Nieuwenhuizen
@ 2024-04-07  8:57   ` Janneke Nieuwenhuizen
  2024-04-08 12:15     ` Ludovic Courtès
  12 siblings, 1 reply; 66+ messages in thread
From: Janneke Nieuwenhuizen @ 2024-04-07  8:57 UTC (permalink / raw)
  To: 70169

[-- Attachment #1: Type: text/plain, Size: 537 bytes --]

Janneke Nieuwenhuizen writes:

> Note that you'll need an environment with something like
>
> guix shell -CP -m manifest.scm fontconfig font-ghostscript graphviz \
>     imagemagick texlive-bin

Headsup: using the attached bonus patch the tarball reproduces for me
also without using a container, i.e., building it in

    guix shell -CP -m manifest.scm fontconfig graphviz imagemagick texlive-bin

or

    guix shell -m manifest.scm fontconfig graphviz imagemagick texlive-bin

now creates the same tarball for me.

Greetings,
Janneke


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: v2-0013-doc-Use-dejavu-sans-instead-of-Helvetica-or-sans-.patch --]
[-- Type: text/x-patch, Size: 66677 bytes --]

From 83287968f06487fa907ef3575cef331b415350c7 Mon Sep 17 00:00:00 2001
Message-ID: <83287968f06487fa907ef3575cef331b415350c7.1712479964.git.janneke@gnu.org>
In-Reply-To: <cover.1712479964.git.janneke@gnu.org>
References: <cover.1712479964.git.janneke@gnu.org>
From: Janneke Nieuwenhuizen <janneke@gnu.org>
Date: Sun, 7 Apr 2024 10:03:06 +0200
Subject: [PATCH v2 13/12] doc: Use "dejavu sans" instead of "Helvetica" or
 "sans" in dot images.

Font-dejavu is (now) an input of fontconfig.  Specifying "dejavu sans" makes
generated images reproducible even when other fonts are installed (notably
font-google-noto).

* doc/images/bootstrap-graph.dot,
doc/images/bootstrap-packages.dot,
doc/images/coreutils-bag-graph.dot,
doc/images/coreutils-graph.dot,
doc/images/gcc-core-mesboot0-graph.dot,
doc/images/service-graph.dot,
doc/images/shepherd-graph.dot: Use fontname = "dejavu sans".
* doc/guix.texi (Full-Source Bootstrap): Update gcc-core-mesboot0.dot recipe
accordingly.

Change-Id: If21d7d39d45c66de5bceafb7b825a057d540ee50
---
 doc/guix.texi                          |  7 +++-
 doc/images/bootstrap-graph.dot         | 52 ++++++++++++------------
 doc/images/bootstrap-packages.dot      | 32 +++++++--------
 doc/images/coreutils-bag-graph.dot     | 56 +++++++++++++-------------
 doc/images/coreutils-graph.dot         | 18 ++++-----
 doc/images/gcc-core-mesboot0-graph.dot | 28 ++++++-------
 doc/images/service-graph.dot           | 16 ++++----
 doc/images/shepherd-graph.dot          | 54 ++++++++++++-------------
 8 files changed, 134 insertions(+), 129 deletions(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index 69a904473c..fdbbf58d66 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -48145,7 +48145,12 @@ Full-Source Bootstrap
 @code{gcc-core-mesboot0}, the bootstrap compiler used for the
 traditional bootstrap of the rest of the Guix System.
 
-@c ./pre-inst-env guix graph -e '(@@ (gnu packages commencement) gcc-core-mesboot0)' | sed -re 's,((bootstrap-seeds|guile-bootstrap).*shape =) box,\1 ellipse,' > doc/images/gcc-core-mesboot0-graph.dot
+@c ./pre-inst-env guix graph \
+@c   -e '(@@ (gnu packages commencement) gcc-core-mesboot0)' \
+@c   | sed -r \
+@c     -e 's,((bootstrap-seeds|guile-bootstrap).*shape =) box,\1 ellipse,' \
+@c     -e 's,fontname = sans,fontname = "dejavu sans",' \
+@c   > doc/images/gcc-core-mesboot0-graph.dot
 @image{images/gcc-core-mesboot0-graph,6in,,Dependency graph of gcc-core-mesboot0}
 
 Work is ongoing to bring these bootstraps to the @code{arm-linux} and
diff --git a/doc/images/bootstrap-graph.dot b/doc/images/bootstrap-graph.dot
index 06d7f29c7a..317ee25749 100644
--- a/doc/images/bootstrap-graph.dot
+++ b/doc/images/bootstrap-graph.dot
@@ -1,7 +1,7 @@
 # Obtained by running "nix-store --graph" on the first GCC derivation.
 
 digraph G {
-"/nix/store/x60397za40lx0n88f51a2csfdq5xvb19-gcc-bootstrap-0.drv" [label = "gcc-bootstrap-0.drv", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
+"/nix/store/x60397za40lx0n88f51a2csfdq5xvb19-gcc-bootstrap-0.drv" [label = "gcc-bootstrap-0.drv", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
 "/nix/store/3iawic1z95112yfz5y9xdp66qbxxr8l1-tar" -> "/nix/store/x60397za40lx0n88f51a2csfdq5xvb19-gcc-bootstrap-0.drv" [color = "black"];
 "/nix/store/4sv9xhcjap6byca130fzpzzjalb7iixv-glibc-bootstrap-0.drv" -> "/nix/store/x60397za40lx0n88f51a2csfdq5xvb19-gcc-bootstrap-0.drv" [color = "red"];
 "/nix/store/8cc81w6m04csm52y247xj3gydrbz2niv-xz" -> "/nix/store/x60397za40lx0n88f51a2csfdq5xvb19-gcc-bootstrap-0.drv" [color = "green"];
@@ -11,8 +11,8 @@ digraph G {
 "/nix/store/r3dsy5j2c16sv26raala6kahff7w18hb-gcc-bootstrap-0-guile-builder" -> "/nix/store/x60397za40lx0n88f51a2csfdq5xvb19-gcc-bootstrap-0.drv" [color = "black"];
 "/nix/store/x9x1a86flhx15cams7235rfy5gc5cww1-guile-bootstrap-2.0.drv" -> "/nix/store/x60397za40lx0n88f51a2csfdq5xvb19-gcc-bootstrap-0.drv" [color = "red"];
 "/nix/store/y4n7rzysx6qz3p0n91dw9qz5w93l6iqv-module-import-compiled.drv" -> "/nix/store/x60397za40lx0n88f51a2csfdq5xvb19-gcc-bootstrap-0.drv" [color = "green"];
-"/nix/store/3iawic1z95112yfz5y9xdp66qbxxr8l1-tar" [label = "tar", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
-"/nix/store/4sv9xhcjap6byca130fzpzzjalb7iixv-glibc-bootstrap-0.drv" [label = "glibc-bootstrap-0.drv", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
+"/nix/store/3iawic1z95112yfz5y9xdp66qbxxr8l1-tar" [label = "tar", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
+"/nix/store/4sv9xhcjap6byca130fzpzzjalb7iixv-glibc-bootstrap-0.drv" [label = "glibc-bootstrap-0.drv", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
 "/nix/store/3iawic1z95112yfz5y9xdp66qbxxr8l1-tar" -> "/nix/store/4sv9xhcjap6byca130fzpzzjalb7iixv-glibc-bootstrap-0.drv" [color = "blue"];
 "/nix/store/8cc81w6m04csm52y247xj3gydrbz2niv-xz" -> "/nix/store/4sv9xhcjap6byca130fzpzzjalb7iixv-glibc-bootstrap-0.drv" [color = "magenta"];
 "/nix/store/8iivk9hpnps21yrbq3zzsxgzv9ixbhgh-glibc-bootstrap-0-guile-builder" -> "/nix/store/4sv9xhcjap6byca130fzpzzjalb7iixv-glibc-bootstrap-0.drv" [color = "burlywood"];
@@ -20,63 +20,63 @@ digraph G {
 "/nix/store/wdwrkg02gn28bkpbxgdb2nv558v8s3ji-glibc-2.17.tar.xz.drv" -> "/nix/store/4sv9xhcjap6byca130fzpzzjalb7iixv-glibc-bootstrap-0.drv" [color = "red"];
 "/nix/store/x9x1a86flhx15cams7235rfy5gc5cww1-guile-bootstrap-2.0.drv" -> "/nix/store/4sv9xhcjap6byca130fzpzzjalb7iixv-glibc-bootstrap-0.drv" [color = "green"];
 "/nix/store/y4n7rzysx6qz3p0n91dw9qz5w93l6iqv-module-import-compiled.drv" -> "/nix/store/4sv9xhcjap6byca130fzpzzjalb7iixv-glibc-bootstrap-0.drv" [color = "blue"];
-"/nix/store/8cc81w6m04csm52y247xj3gydrbz2niv-xz" [label = "xz", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
-"/nix/store/8iivk9hpnps21yrbq3zzsxgzv9ixbhgh-glibc-bootstrap-0-guile-builder" [label = "glibc-bootstrap-0-guile-builder", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
+"/nix/store/8cc81w6m04csm52y247xj3gydrbz2niv-xz" [label = "xz", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
+"/nix/store/8iivk9hpnps21yrbq3zzsxgzv9ixbhgh-glibc-bootstrap-0-guile-builder" [label = "glibc-bootstrap-0-guile-builder", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
 "/nix/store/3iawic1z95112yfz5y9xdp66qbxxr8l1-tar" -> "/nix/store/8iivk9hpnps21yrbq3zzsxgzv9ixbhgh-glibc-bootstrap-0-guile-builder" [color = "magenta"];
 "/nix/store/8cc81w6m04csm52y247xj3gydrbz2niv-xz" -> "/nix/store/8iivk9hpnps21yrbq3zzsxgzv9ixbhgh-glibc-bootstrap-0-guile-builder" [color = "burlywood"];
-"/nix/store/96yx6013dhggr3mpg5ayxv8dm9mv2ghv-module-import.drv" [label = "module-import.drv", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
+"/nix/store/96yx6013dhggr3mpg5ayxv8dm9mv2ghv-module-import.drv" [label = "module-import.drv", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
 "/nix/store/9zrdfvnrpljryr82an2n1mj6bh2przhn-module-import-guile-builder" -> "/nix/store/96yx6013dhggr3mpg5ayxv8dm9mv2ghv-module-import.drv" [color = "black"];
 "/nix/store/mj7amprgvl2rgash1nr0v64apik8vc7f-utils.scm" -> "/nix/store/96yx6013dhggr3mpg5ayxv8dm9mv2ghv-module-import.drv" [color = "red"];
 "/nix/store/x9x1a86flhx15cams7235rfy5gc5cww1-guile-bootstrap-2.0.drv" -> "/nix/store/96yx6013dhggr3mpg5ayxv8dm9mv2ghv-module-import.drv" [color = "green"];
-"/nix/store/9zrdfvnrpljryr82an2n1mj6bh2przhn-module-import-guile-builder" [label = "module-import-guile-builder", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
+"/nix/store/9zrdfvnrpljryr82an2n1mj6bh2przhn-module-import-guile-builder" [label = "module-import-guile-builder", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
 "/nix/store/mj7amprgvl2rgash1nr0v64apik8vc7f-utils.scm" -> "/nix/store/9zrdfvnrpljryr82an2n1mj6bh2przhn-module-import-guile-builder" [color = "blue"];
-"/nix/store/fl9cwcczfdv73vq5sr0c4rd5hqzrgvac-gcc-4.7.2.tar.xz.drv" [label = "gcc-4.7.2.tar.xz.drv", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
+"/nix/store/fl9cwcczfdv73vq5sr0c4rd5hqzrgvac-gcc-4.7.2.tar.xz.drv" [label = "gcc-4.7.2.tar.xz.drv", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
 "/nix/store/6kslnirvm26fij7wpjqbw617ri4gf5x5-gcc-4.7.2.tar.xz-guile-builder" -> "/nix/store/fl9cwcczfdv73vq5sr0c4rd5hqzrgvac-gcc-4.7.2.tar.xz.drv" [color = "magenta"];
 "/nix/store/kvk5wp8c9rzvvrmq5fv5r58l78q8i6ch-module-import.drv" -> "/nix/store/fl9cwcczfdv73vq5sr0c4rd5hqzrgvac-gcc-4.7.2.tar.xz.drv" [color = "burlywood"];
 "/nix/store/pzv319p3q7raiad7nq7fcdw9rafzp14k-module-import-compiled.drv" -> "/nix/store/fl9cwcczfdv73vq5sr0c4rd5hqzrgvac-gcc-4.7.2.tar.xz.drv" [color = "black"];
 "/nix/store/x9x1a86flhx15cams7235rfy5gc5cww1-guile-bootstrap-2.0.drv" -> "/nix/store/fl9cwcczfdv73vq5sr0c4rd5hqzrgvac-gcc-4.7.2.tar.xz.drv" [color = "red"];
-"/nix/store/6kslnirvm26fij7wpjqbw617ri4gf5x5-gcc-4.7.2.tar.xz-guile-builder" [label = "gcc-4.7.2.tar.xz-guile-builder", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
-"/nix/store/jaaqdl979wjirnbxz1jqsipg22nva5n4-bash" [label = "bash", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
-"/nix/store/kvk5wp8c9rzvvrmq5fv5r58l78q8i6ch-module-import.drv" [label = "module-import.drv", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
+"/nix/store/6kslnirvm26fij7wpjqbw617ri4gf5x5-gcc-4.7.2.tar.xz-guile-builder" [label = "gcc-4.7.2.tar.xz-guile-builder", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
+"/nix/store/jaaqdl979wjirnbxz1jqsipg22nva5n4-bash" [label = "bash", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
+"/nix/store/kvk5wp8c9rzvvrmq5fv5r58l78q8i6ch-module-import.drv" [label = "module-import.drv", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
 "/nix/store/abagrdbdndkd0y2dwk0nw1gw0g0rhl2z-ftp-client.scm" -> "/nix/store/kvk5wp8c9rzvvrmq5fv5r58l78q8i6ch-module-import.drv" [color = "green"];
 "/nix/store/dwd2iwd1ban8a8rmx568dpgrbkkidfhw-download.scm" -> "/nix/store/kvk5wp8c9rzvvrmq5fv5r58l78q8i6ch-module-import.drv" [color = "blue"];
 "/nix/store/mj7amprgvl2rgash1nr0v64apik8vc7f-utils.scm" -> "/nix/store/kvk5wp8c9rzvvrmq5fv5r58l78q8i6ch-module-import.drv" [color = "magenta"];
 "/nix/store/x9x1a86flhx15cams7235rfy5gc5cww1-guile-bootstrap-2.0.drv" -> "/nix/store/kvk5wp8c9rzvvrmq5fv5r58l78q8i6ch-module-import.drv" [color = "burlywood"];
 "/nix/store/yfixjx2gpvsi5dhkpdx5gj6gx0xdk1c8-module-import-guile-builder" -> "/nix/store/kvk5wp8c9rzvvrmq5fv5r58l78q8i6ch-module-import.drv" [color = "black"];
-"/nix/store/abagrdbdndkd0y2dwk0nw1gw0g0rhl2z-ftp-client.scm" [label = "ftp-client.scm", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
-"/nix/store/dwd2iwd1ban8a8rmx568dpgrbkkidfhw-download.scm" [label = "download.scm", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
-"/nix/store/mj7amprgvl2rgash1nr0v64apik8vc7f-utils.scm" [label = "utils.scm", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
-"/nix/store/pzv319p3q7raiad7nq7fcdw9rafzp14k-module-import-compiled.drv" [label = "module-import-compiled.drv", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
+"/nix/store/abagrdbdndkd0y2dwk0nw1gw0g0rhl2z-ftp-client.scm" [label = "ftp-client.scm", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
+"/nix/store/dwd2iwd1ban8a8rmx568dpgrbkkidfhw-download.scm" [label = "download.scm", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
+"/nix/store/mj7amprgvl2rgash1nr0v64apik8vc7f-utils.scm" [label = "utils.scm", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
+"/nix/store/pzv319p3q7raiad7nq7fcdw9rafzp14k-module-import-compiled.drv" [label = "module-import-compiled.drv", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
 "/nix/store/98gzqlgpm4gxrpl5bzykpqbwrx8ckx8l-module-import-compiled-guile-builder" -> "/nix/store/pzv319p3q7raiad7nq7fcdw9rafzp14k-module-import-compiled.drv" [color = "red"];
 "/nix/store/kvk5wp8c9rzvvrmq5fv5r58l78q8i6ch-module-import.drv" -> "/nix/store/pzv319p3q7raiad7nq7fcdw9rafzp14k-module-import-compiled.drv" [color = "green"];
 "/nix/store/x9x1a86flhx15cams7235rfy5gc5cww1-guile-bootstrap-2.0.drv" -> "/nix/store/pzv319p3q7raiad7nq7fcdw9rafzp14k-module-import-compiled.drv" [color = "blue"];
-"/nix/store/98gzqlgpm4gxrpl5bzykpqbwrx8ckx8l-module-import-compiled-guile-builder" [label = "module-import-compiled-guile-builder", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
-"/nix/store/r3dsy5j2c16sv26raala6kahff7w18hb-gcc-bootstrap-0-guile-builder" [label = "gcc-bootstrap-0-guile-builder", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
+"/nix/store/98gzqlgpm4gxrpl5bzykpqbwrx8ckx8l-module-import-compiled-guile-builder" [label = "module-import-compiled-guile-builder", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
+"/nix/store/r3dsy5j2c16sv26raala6kahff7w18hb-gcc-bootstrap-0-guile-builder" [label = "gcc-bootstrap-0-guile-builder", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
 "/nix/store/3iawic1z95112yfz5y9xdp66qbxxr8l1-tar" -> "/nix/store/r3dsy5j2c16sv26raala6kahff7w18hb-gcc-bootstrap-0-guile-builder" [color = "magenta"];
 "/nix/store/8cc81w6m04csm52y247xj3gydrbz2niv-xz" -> "/nix/store/r3dsy5j2c16sv26raala6kahff7w18hb-gcc-bootstrap-0-guile-builder" [color = "burlywood"];
 "/nix/store/jaaqdl979wjirnbxz1jqsipg22nva5n4-bash" -> "/nix/store/r3dsy5j2c16sv26raala6kahff7w18hb-gcc-bootstrap-0-guile-builder" [color = "black"];
-"/nix/store/wdwrkg02gn28bkpbxgdb2nv558v8s3ji-glibc-2.17.tar.xz.drv" [label = "glibc-2.17.tar.xz.drv", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
+"/nix/store/wdwrkg02gn28bkpbxgdb2nv558v8s3ji-glibc-2.17.tar.xz.drv" [label = "glibc-2.17.tar.xz.drv", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
 "/nix/store/kvk5wp8c9rzvvrmq5fv5r58l78q8i6ch-module-import.drv" -> "/nix/store/wdwrkg02gn28bkpbxgdb2nv558v8s3ji-glibc-2.17.tar.xz.drv" [color = "red"];
 "/nix/store/pzv319p3q7raiad7nq7fcdw9rafzp14k-module-import-compiled.drv" -> "/nix/store/wdwrkg02gn28bkpbxgdb2nv558v8s3ji-glibc-2.17.tar.xz.drv" [color = "green"];
 "/nix/store/q7as3jddipj4g6si8lawrdbkjg0zcjvg-glibc-2.17.tar.xz-guile-builder" -> "/nix/store/wdwrkg02gn28bkpbxgdb2nv558v8s3ji-glibc-2.17.tar.xz.drv" [color = "blue"];
 "/nix/store/x9x1a86flhx15cams7235rfy5gc5cww1-guile-bootstrap-2.0.drv" -> "/nix/store/wdwrkg02gn28bkpbxgdb2nv558v8s3ji-glibc-2.17.tar.xz.drv" [color = "magenta"];
-"/nix/store/q7as3jddipj4g6si8lawrdbkjg0zcjvg-glibc-2.17.tar.xz-guile-builder" [label = "glibc-2.17.tar.xz-guile-builder", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
-"/nix/store/x9x1a86flhx15cams7235rfy5gc5cww1-guile-bootstrap-2.0.drv" [label = "guile-bootstrap-2.0.drv", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
+"/nix/store/q7as3jddipj4g6si8lawrdbkjg0zcjvg-glibc-2.17.tar.xz-guile-builder" [label = "glibc-2.17.tar.xz-guile-builder", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
+"/nix/store/x9x1a86flhx15cams7235rfy5gc5cww1-guile-bootstrap-2.0.drv" [label = "guile-bootstrap-2.0.drv", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
 "/nix/store/bplka3yqdg8prqq3zdxza6wxlkjdhr2g-build-bootstrap-guile.sh" -> "/nix/store/x9x1a86flhx15cams7235rfy5gc5cww1-guile-bootstrap-2.0.drv" [color = "burlywood"];
 "/nix/store/jaaqdl979wjirnbxz1jqsipg22nva5n4-bash" -> "/nix/store/x9x1a86flhx15cams7235rfy5gc5cww1-guile-bootstrap-2.0.drv" [color = "black"];
-"/nix/store/bplka3yqdg8prqq3zdxza6wxlkjdhr2g-build-bootstrap-guile.sh" [label = "build-bootstrap-guile.sh", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
+"/nix/store/bplka3yqdg8prqq3zdxza6wxlkjdhr2g-build-bootstrap-guile.sh" [label = "build-bootstrap-guile.sh", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
 "/nix/store/3iawic1z95112yfz5y9xdp66qbxxr8l1-tar" -> "/nix/store/bplka3yqdg8prqq3zdxza6wxlkjdhr2g-build-bootstrap-guile.sh" [color = "red"];
 "/nix/store/4xv2y0m6zr2lgi8x8pcb3zxjqxsz69kj-mkdir" -> "/nix/store/bplka3yqdg8prqq3zdxza6wxlkjdhr2g-build-bootstrap-guile.sh" [color = "green"];
 "/nix/store/8cc81w6m04csm52y247xj3gydrbz2niv-xz" -> "/nix/store/bplka3yqdg8prqq3zdxza6wxlkjdhr2g-build-bootstrap-guile.sh" [color = "blue"];
 "/nix/store/c450lqvaaz3ngx9pfiiiw55rqq6ssfda-guile-2.0.7.tar.xz" -> "/nix/store/bplka3yqdg8prqq3zdxza6wxlkjdhr2g-build-bootstrap-guile.sh" [color = "magenta"];
-"/nix/store/4xv2y0m6zr2lgi8x8pcb3zxjqxsz69kj-mkdir" [label = "mkdir", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
-"/nix/store/c450lqvaaz3ngx9pfiiiw55rqq6ssfda-guile-2.0.7.tar.xz" [label = "guile-2.0.7.tar.xz", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
-"/nix/store/y4n7rzysx6qz3p0n91dw9qz5w93l6iqv-module-import-compiled.drv" [label = "module-import-compiled.drv", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
+"/nix/store/4xv2y0m6zr2lgi8x8pcb3zxjqxsz69kj-mkdir" [label = "mkdir", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
+"/nix/store/c450lqvaaz3ngx9pfiiiw55rqq6ssfda-guile-2.0.7.tar.xz" [label = "guile-2.0.7.tar.xz", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
+"/nix/store/y4n7rzysx6qz3p0n91dw9qz5w93l6iqv-module-import-compiled.drv" [label = "module-import-compiled.drv", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
 "/nix/store/8jiqjlb6zxjys16ca7s6jvxcc620c71k-module-import-compiled-guile-builder" -> "/nix/store/y4n7rzysx6qz3p0n91dw9qz5w93l6iqv-module-import-compiled.drv" [color = "burlywood"];
 "/nix/store/96yx6013dhggr3mpg5ayxv8dm9mv2ghv-module-import.drv" -> "/nix/store/y4n7rzysx6qz3p0n91dw9qz5w93l6iqv-module-import-compiled.drv" [color = "black"];
 "/nix/store/x9x1a86flhx15cams7235rfy5gc5cww1-guile-bootstrap-2.0.drv" -> "/nix/store/y4n7rzysx6qz3p0n91dw9qz5w93l6iqv-module-import-compiled.drv" [color = "red"];
-"/nix/store/8jiqjlb6zxjys16ca7s6jvxcc620c71k-module-import-compiled-guile-builder" [label = "module-import-compiled-guile-builder", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
-"/nix/store/yfixjx2gpvsi5dhkpdx5gj6gx0xdk1c8-module-import-guile-builder" [label = "module-import-guile-builder", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
+"/nix/store/8jiqjlb6zxjys16ca7s6jvxcc620c71k-module-import-compiled-guile-builder" [label = "module-import-compiled-guile-builder", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
+"/nix/store/yfixjx2gpvsi5dhkpdx5gj6gx0xdk1c8-module-import-guile-builder" [label = "module-import-guile-builder", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
 "/nix/store/abagrdbdndkd0y2dwk0nw1gw0g0rhl2z-ftp-client.scm" -> "/nix/store/yfixjx2gpvsi5dhkpdx5gj6gx0xdk1c8-module-import-guile-builder" [color = "green"];
 "/nix/store/dwd2iwd1ban8a8rmx568dpgrbkkidfhw-download.scm" -> "/nix/store/yfixjx2gpvsi5dhkpdx5gj6gx0xdk1c8-module-import-guile-builder" [color = "blue"];
 "/nix/store/mj7amprgvl2rgash1nr0v64apik8vc7f-utils.scm" -> "/nix/store/yfixjx2gpvsi5dhkpdx5gj6gx0xdk1c8-module-import-guile-builder" [color = "magenta"];
diff --git a/doc/images/bootstrap-packages.dot b/doc/images/bootstrap-packages.dot
index 8b2df068a8..579bbcd00f 100644
--- a/doc/images/bootstrap-packages.dot
+++ b/doc/images/bootstrap-packages.dot
@@ -1,5 +1,5 @@
 digraph "Guix bag" {
-  "/gnu/store/aymf6jlxxpwgr71rkiz24m646nqsyii6-glibc-intermediate-2.24.drv" [label = "glibc-intermediate-2.24", shape = box, fontname = Helvetica];
+  "/gnu/store/aymf6jlxxpwgr71rkiz24m646nqsyii6-glibc-intermediate-2.24.drv" [label = "glibc-intermediate-2.24", shape = box, fontname = "dejavu sans"];
   "/gnu/store/aymf6jlxxpwgr71rkiz24m646nqsyii6-glibc-intermediate-2.24.drv" -> "/gnu/store/wx8ifbb7x22cl4998fyldsr24fcv18j3-texinfo-6.3.drv" [color = magenta];
   "/gnu/store/aymf6jlxxpwgr71rkiz24m646nqsyii6-glibc-intermediate-2.24.drv" -> "/gnu/store/ccj3as3258l70lmphi48hs7n017wv75s-perl-boot0-5.24.0.drv" [color = magenta];
   "/gnu/store/aymf6jlxxpwgr71rkiz24m646nqsyii6-glibc-intermediate-2.24.drv" -> "/gnu/store/w9adgzgdqkwz0w13zxf2fn363v9wcllc-gcc-cross-boot0-4.9.4.drv" [color = magenta];
@@ -16,7 +16,7 @@ digraph "Guix bag" {
   "/gnu/store/aymf6jlxxpwgr71rkiz24m646nqsyii6-glibc-intermediate-2.24.drv" -> "/gnu/store/jxlg2pb4bhxjld9kimc0vgc1pvgifzag-gcc-bootstrap-0.drv" [color = magenta];
   "/gnu/store/aymf6jlxxpwgr71rkiz24m646nqsyii6-glibc-intermediate-2.24.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = magenta];
   "/gnu/store/aymf6jlxxpwgr71rkiz24m646nqsyii6-glibc-intermediate-2.24.drv" -> "/gnu/store/5syba2bxhh8z79jhq83fzy8fxcx5xb4s-linux-libre-headers-4.4.18.drv" [color = magenta];
-  "/gnu/store/wx8ifbb7x22cl4998fyldsr24fcv18j3-texinfo-6.3.drv" [label = "texinfo-6.3", shape = box, fontname = Helvetica];
+  "/gnu/store/wx8ifbb7x22cl4998fyldsr24fcv18j3-texinfo-6.3.drv" [label = "texinfo-6.3", shape = box, fontname = "dejavu sans"];
   "/gnu/store/wx8ifbb7x22cl4998fyldsr24fcv18j3-texinfo-6.3.drv" -> "/gnu/store/1jpld53g41rzv2bmjp6v9mckmyw75vs3-make-boot0-4.2.1.drv" [color = cyan3];
   "/gnu/store/wx8ifbb7x22cl4998fyldsr24fcv18j3-texinfo-6.3.drv" -> "/gnu/store/zpphawi07xidhfs2dja3w7hmnfp99j02-diffutils-boot0-3.5.drv" [color = cyan3];
   "/gnu/store/wx8ifbb7x22cl4998fyldsr24fcv18j3-texinfo-6.3.drv" -> "/gnu/store/m4900ip34w4rcgn5620iqdi1wv198d9s-findutils-boot0-4.6.0.drv" [color = cyan3];
@@ -27,25 +27,25 @@ digraph "Guix bag" {
   "/gnu/store/wx8ifbb7x22cl4998fyldsr24fcv18j3-texinfo-6.3.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = cyan3];
   "/gnu/store/wx8ifbb7x22cl4998fyldsr24fcv18j3-texinfo-6.3.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = cyan3];
   "/gnu/store/wx8ifbb7x22cl4998fyldsr24fcv18j3-texinfo-6.3.drv" -> "/gnu/store/ccj3as3258l70lmphi48hs7n017wv75s-perl-boot0-5.24.0.drv" [color = cyan3];
-  "/gnu/store/1jpld53g41rzv2bmjp6v9mckmyw75vs3-make-boot0-4.2.1.drv" [label = "make-boot0-4.2.1", shape = box, fontname = Helvetica];
+  "/gnu/store/1jpld53g41rzv2bmjp6v9mckmyw75vs3-make-boot0-4.2.1.drv" [label = "make-boot0-4.2.1", shape = box, fontname = "dejavu sans"];
   "/gnu/store/1jpld53g41rzv2bmjp6v9mckmyw75vs3-make-boot0-4.2.1.drv" -> "/gnu/store/wda0p45jlbzg6w9j8zxw2sd11n2a4pbv-glibc-bootstrap-0.drv" [color = dimgrey];
   "/gnu/store/1jpld53g41rzv2bmjp6v9mckmyw75vs3-make-boot0-4.2.1.drv" -> "/gnu/store/jxlg2pb4bhxjld9kimc0vgc1pvgifzag-gcc-bootstrap-0.drv" [color = dimgrey];
   "/gnu/store/1jpld53g41rzv2bmjp6v9mckmyw75vs3-make-boot0-4.2.1.drv" -> "/gnu/store/wv8sf8h4n9s5cdya223iy2wp3alr92x8-binutils-bootstrap-0.drv" [color = dimgrey];
   "/gnu/store/1jpld53g41rzv2bmjp6v9mckmyw75vs3-make-boot0-4.2.1.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = dimgrey];
   "/gnu/store/1jpld53g41rzv2bmjp6v9mckmyw75vs3-make-boot0-4.2.1.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = dimgrey];
-  "/gnu/store/wda0p45jlbzg6w9j8zxw2sd11n2a4pbv-glibc-bootstrap-0.drv" [label = "glibc-bootstrap-0", shape = box, fontname = Helvetica];
-  "/gnu/store/jxlg2pb4bhxjld9kimc0vgc1pvgifzag-gcc-bootstrap-0.drv" [label = "gcc-bootstrap-0", shape = box, fontname = Helvetica];
+  "/gnu/store/wda0p45jlbzg6w9j8zxw2sd11n2a4pbv-glibc-bootstrap-0.drv" [label = "glibc-bootstrap-0", shape = box, fontname = "dejavu sans"];
+  "/gnu/store/jxlg2pb4bhxjld9kimc0vgc1pvgifzag-gcc-bootstrap-0.drv" [label = "gcc-bootstrap-0", shape = box, fontname = "dejavu sans"];
   "/gnu/store/jxlg2pb4bhxjld9kimc0vgc1pvgifzag-gcc-bootstrap-0.drv" -> "/gnu/store/wda0p45jlbzg6w9j8zxw2sd11n2a4pbv-glibc-bootstrap-0.drv" [color = darkseagreen];
-  "/gnu/store/wv8sf8h4n9s5cdya223iy2wp3alr92x8-binutils-bootstrap-0.drv" [label = "binutils-bootstrap-0", shape = box, fontname = Helvetica];
-  "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [label = "bootstrap-binaries-0", shape = box, fontname = Helvetica];
-  "/gnu/store/zpphawi07xidhfs2dja3w7hmnfp99j02-diffutils-boot0-3.5.drv" [label = "diffutils-boot0-3.5", shape = box, fontname = Helvetica];
+  "/gnu/store/wv8sf8h4n9s5cdya223iy2wp3alr92x8-binutils-bootstrap-0.drv" [label = "binutils-bootstrap-0", shape = box, fontname = "dejavu sans"];
+  "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [label = "bootstrap-binaries-0", shape = box, fontname = "dejavu sans"];
+  "/gnu/store/zpphawi07xidhfs2dja3w7hmnfp99j02-diffutils-boot0-3.5.drv" [label = "diffutils-boot0-3.5", shape = box, fontname = "dejavu sans"];
   "/gnu/store/zpphawi07xidhfs2dja3w7hmnfp99j02-diffutils-boot0-3.5.drv" -> "/gnu/store/1jpld53g41rzv2bmjp6v9mckmyw75vs3-make-boot0-4.2.1.drv" [color = blue];
   "/gnu/store/zpphawi07xidhfs2dja3w7hmnfp99j02-diffutils-boot0-3.5.drv" -> "/gnu/store/wda0p45jlbzg6w9j8zxw2sd11n2a4pbv-glibc-bootstrap-0.drv" [color = blue];
   "/gnu/store/zpphawi07xidhfs2dja3w7hmnfp99j02-diffutils-boot0-3.5.drv" -> "/gnu/store/jxlg2pb4bhxjld9kimc0vgc1pvgifzag-gcc-bootstrap-0.drv" [color = blue];
   "/gnu/store/zpphawi07xidhfs2dja3w7hmnfp99j02-diffutils-boot0-3.5.drv" -> "/gnu/store/wv8sf8h4n9s5cdya223iy2wp3alr92x8-binutils-bootstrap-0.drv" [color = blue];
   "/gnu/store/zpphawi07xidhfs2dja3w7hmnfp99j02-diffutils-boot0-3.5.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = blue];
   "/gnu/store/zpphawi07xidhfs2dja3w7hmnfp99j02-diffutils-boot0-3.5.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = blue];
-  "/gnu/store/m4900ip34w4rcgn5620iqdi1wv198d9s-findutils-boot0-4.6.0.drv" [label = "findutils-boot0-4.6.0", shape = box, fontname = Helvetica];
+  "/gnu/store/m4900ip34w4rcgn5620iqdi1wv198d9s-findutils-boot0-4.6.0.drv" [label = "findutils-boot0-4.6.0", shape = box, fontname = "dejavu sans"];
   "/gnu/store/m4900ip34w4rcgn5620iqdi1wv198d9s-findutils-boot0-4.6.0.drv" -> "/gnu/store/1jpld53g41rzv2bmjp6v9mckmyw75vs3-make-boot0-4.2.1.drv" [color = blue];
   "/gnu/store/m4900ip34w4rcgn5620iqdi1wv198d9s-findutils-boot0-4.6.0.drv" -> "/gnu/store/zpphawi07xidhfs2dja3w7hmnfp99j02-diffutils-boot0-3.5.drv" [color = blue];
   "/gnu/store/m4900ip34w4rcgn5620iqdi1wv198d9s-findutils-boot0-4.6.0.drv" -> "/gnu/store/wda0p45jlbzg6w9j8zxw2sd11n2a4pbv-glibc-bootstrap-0.drv" [color = blue];
@@ -53,14 +53,14 @@ digraph "Guix bag" {
   "/gnu/store/m4900ip34w4rcgn5620iqdi1wv198d9s-findutils-boot0-4.6.0.drv" -> "/gnu/store/wv8sf8h4n9s5cdya223iy2wp3alr92x8-binutils-bootstrap-0.drv" [color = blue];
   "/gnu/store/m4900ip34w4rcgn5620iqdi1wv198d9s-findutils-boot0-4.6.0.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = blue];
   "/gnu/store/m4900ip34w4rcgn5620iqdi1wv198d9s-findutils-boot0-4.6.0.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = blue];
-  "/gnu/store/nwzyr3xskw0ms8cndffsfvhvm5xz96pc-file-boot0-5.28.drv" [label = "file-boot0-5.28", shape = box, fontname = Helvetica];
+  "/gnu/store/nwzyr3xskw0ms8cndffsfvhvm5xz96pc-file-boot0-5.28.drv" [label = "file-boot0-5.28", shape = box, fontname = "dejavu sans"];
   "/gnu/store/nwzyr3xskw0ms8cndffsfvhvm5xz96pc-file-boot0-5.28.drv" -> "/gnu/store/1jpld53g41rzv2bmjp6v9mckmyw75vs3-make-boot0-4.2.1.drv" [color = darkgoldenrod];
   "/gnu/store/nwzyr3xskw0ms8cndffsfvhvm5xz96pc-file-boot0-5.28.drv" -> "/gnu/store/wda0p45jlbzg6w9j8zxw2sd11n2a4pbv-glibc-bootstrap-0.drv" [color = darkgoldenrod];
   "/gnu/store/nwzyr3xskw0ms8cndffsfvhvm5xz96pc-file-boot0-5.28.drv" -> "/gnu/store/jxlg2pb4bhxjld9kimc0vgc1pvgifzag-gcc-bootstrap-0.drv" [color = darkgoldenrod];
   "/gnu/store/nwzyr3xskw0ms8cndffsfvhvm5xz96pc-file-boot0-5.28.drv" -> "/gnu/store/wv8sf8h4n9s5cdya223iy2wp3alr92x8-binutils-bootstrap-0.drv" [color = darkgoldenrod];
   "/gnu/store/nwzyr3xskw0ms8cndffsfvhvm5xz96pc-file-boot0-5.28.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = darkgoldenrod];
   "/gnu/store/nwzyr3xskw0ms8cndffsfvhvm5xz96pc-file-boot0-5.28.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = darkgoldenrod];
-  "/gnu/store/ccj3as3258l70lmphi48hs7n017wv75s-perl-boot0-5.24.0.drv" [label = "perl-boot0-5.24.0", shape = box, fontname = Helvetica];
+  "/gnu/store/ccj3as3258l70lmphi48hs7n017wv75s-perl-boot0-5.24.0.drv" [label = "perl-boot0-5.24.0", shape = box, fontname = "dejavu sans"];
   "/gnu/store/ccj3as3258l70lmphi48hs7n017wv75s-perl-boot0-5.24.0.drv" -> "/gnu/store/1jpld53g41rzv2bmjp6v9mckmyw75vs3-make-boot0-4.2.1.drv" [color = peachpuff4];
   "/gnu/store/ccj3as3258l70lmphi48hs7n017wv75s-perl-boot0-5.24.0.drv" -> "/gnu/store/zpphawi07xidhfs2dja3w7hmnfp99j02-diffutils-boot0-3.5.drv" [color = peachpuff4];
   "/gnu/store/ccj3as3258l70lmphi48hs7n017wv75s-perl-boot0-5.24.0.drv" -> "/gnu/store/m4900ip34w4rcgn5620iqdi1wv198d9s-findutils-boot0-4.6.0.drv" [color = peachpuff4];
@@ -70,7 +70,7 @@ digraph "Guix bag" {
   "/gnu/store/ccj3as3258l70lmphi48hs7n017wv75s-perl-boot0-5.24.0.drv" -> "/gnu/store/wv8sf8h4n9s5cdya223iy2wp3alr92x8-binutils-bootstrap-0.drv" [color = peachpuff4];
   "/gnu/store/ccj3as3258l70lmphi48hs7n017wv75s-perl-boot0-5.24.0.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = peachpuff4];
   "/gnu/store/ccj3as3258l70lmphi48hs7n017wv75s-perl-boot0-5.24.0.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = peachpuff4];
-  "/gnu/store/w9adgzgdqkwz0w13zxf2fn363v9wcllc-gcc-cross-boot0-4.9.4.drv" [label = "gcc-cross-boot0-4.9.4", shape = box, fontname = Helvetica];
+  "/gnu/store/w9adgzgdqkwz0w13zxf2fn363v9wcllc-gcc-cross-boot0-4.9.4.drv" [label = "gcc-cross-boot0-4.9.4", shape = box, fontname = "dejavu sans"];
   "/gnu/store/w9adgzgdqkwz0w13zxf2fn363v9wcllc-gcc-cross-boot0-4.9.4.drv" -> "/gnu/store/v1v7jp438hc5rpgriwpjp04x049vh0g4-binutils-cross-boot0-2.27.drv" [color = darkseagreen];
   "/gnu/store/w9adgzgdqkwz0w13zxf2fn363v9wcllc-gcc-cross-boot0-4.9.4.drv" -> "/gnu/store/wda0p45jlbzg6w9j8zxw2sd11n2a4pbv-glibc-bootstrap-0.drv" [color = darkseagreen];
   "/gnu/store/w9adgzgdqkwz0w13zxf2fn363v9wcllc-gcc-cross-boot0-4.9.4.drv" -> "/gnu/store/1jpld53g41rzv2bmjp6v9mckmyw75vs3-make-boot0-4.2.1.drv" [color = darkseagreen];
@@ -81,7 +81,7 @@ digraph "Guix bag" {
   "/gnu/store/w9adgzgdqkwz0w13zxf2fn363v9wcllc-gcc-cross-boot0-4.9.4.drv" -> "/gnu/store/wv8sf8h4n9s5cdya223iy2wp3alr92x8-binutils-bootstrap-0.drv" [color = darkseagreen];
   "/gnu/store/w9adgzgdqkwz0w13zxf2fn363v9wcllc-gcc-cross-boot0-4.9.4.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = darkseagreen];
   "/gnu/store/w9adgzgdqkwz0w13zxf2fn363v9wcllc-gcc-cross-boot0-4.9.4.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = darkseagreen];
-  "/gnu/store/v1v7jp438hc5rpgriwpjp04x049vh0g4-binutils-cross-boot0-2.27.drv" [label = "binutils-cross-boot0-2.27", shape = box, fontname = Helvetica];
+  "/gnu/store/v1v7jp438hc5rpgriwpjp04x049vh0g4-binutils-cross-boot0-2.27.drv" [label = "binutils-cross-boot0-2.27", shape = box, fontname = "dejavu sans"];
   "/gnu/store/v1v7jp438hc5rpgriwpjp04x049vh0g4-binutils-cross-boot0-2.27.drv" -> "/gnu/store/1jpld53g41rzv2bmjp6v9mckmyw75vs3-make-boot0-4.2.1.drv" [color = dimgrey];
   "/gnu/store/v1v7jp438hc5rpgriwpjp04x049vh0g4-binutils-cross-boot0-2.27.drv" -> "/gnu/store/zpphawi07xidhfs2dja3w7hmnfp99j02-diffutils-boot0-3.5.drv" [color = dimgrey];
   "/gnu/store/v1v7jp438hc5rpgriwpjp04x049vh0g4-binutils-cross-boot0-2.27.drv" -> "/gnu/store/m4900ip34w4rcgn5620iqdi1wv198d9s-findutils-boot0-4.6.0.drv" [color = dimgrey];
@@ -91,12 +91,12 @@ digraph "Guix bag" {
   "/gnu/store/v1v7jp438hc5rpgriwpjp04x049vh0g4-binutils-cross-boot0-2.27.drv" -> "/gnu/store/wv8sf8h4n9s5cdya223iy2wp3alr92x8-binutils-bootstrap-0.drv" [color = dimgrey];
   "/gnu/store/v1v7jp438hc5rpgriwpjp04x049vh0g4-binutils-cross-boot0-2.27.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = dimgrey];
   "/gnu/store/v1v7jp438hc5rpgriwpjp04x049vh0g4-binutils-cross-boot0-2.27.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = dimgrey];
-  "/gnu/store/72snmrnjphwjxffknjhzm3xg38wd08al-ld-wrapper-x86_64-guix-linux-gnu-0.drv" [label = "ld-wrapper-x86_64-guix-linux-gnu-0", shape = box, fontname = Helvetica];
+  "/gnu/store/72snmrnjphwjxffknjhzm3xg38wd08al-ld-wrapper-x86_64-guix-linux-gnu-0.drv" [label = "ld-wrapper-x86_64-guix-linux-gnu-0", shape = box, fontname = "dejavu sans"];
   "/gnu/store/72snmrnjphwjxffknjhzm3xg38wd08al-ld-wrapper-x86_64-guix-linux-gnu-0.drv" -> "/gnu/store/v1v7jp438hc5rpgriwpjp04x049vh0g4-binutils-cross-boot0-2.27.drv" [color = dimgrey];
   "/gnu/store/72snmrnjphwjxffknjhzm3xg38wd08al-ld-wrapper-x86_64-guix-linux-gnu-0.drv" -> "/gnu/store/af19ma2vm3qhvh3rw6cdivyp98s18bj3-guile-bootstrap-2.0.drv" [color = dimgrey];
   "/gnu/store/72snmrnjphwjxffknjhzm3xg38wd08al-ld-wrapper-x86_64-guix-linux-gnu-0.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = dimgrey];
-  "/gnu/store/af19ma2vm3qhvh3rw6cdivyp98s18bj3-guile-bootstrap-2.0.drv" [label = "guile-bootstrap-2.0", shape = box, fontname = Helvetica];
-  "/gnu/store/5syba2bxhh8z79jhq83fzy8fxcx5xb4s-linux-libre-headers-4.4.18.drv" [label = "linux-libre-headers-4.4.18", shape = box, fontname = Helvetica];
+  "/gnu/store/af19ma2vm3qhvh3rw6cdivyp98s18bj3-guile-bootstrap-2.0.drv" [label = "guile-bootstrap-2.0", shape = box, fontname = "dejavu sans"];
+  "/gnu/store/5syba2bxhh8z79jhq83fzy8fxcx5xb4s-linux-libre-headers-4.4.18.drv" [label = "linux-libre-headers-4.4.18", shape = box, fontname = "dejavu sans"];
   "/gnu/store/5syba2bxhh8z79jhq83fzy8fxcx5xb4s-linux-libre-headers-4.4.18.drv" -> "/gnu/store/ccj3as3258l70lmphi48hs7n017wv75s-perl-boot0-5.24.0.drv" [color = blue];
   "/gnu/store/5syba2bxhh8z79jhq83fzy8fxcx5xb4s-linux-libre-headers-4.4.18.drv" -> "/gnu/store/1jpld53g41rzv2bmjp6v9mckmyw75vs3-make-boot0-4.2.1.drv" [color = blue];
   "/gnu/store/5syba2bxhh8z79jhq83fzy8fxcx5xb4s-linux-libre-headers-4.4.18.drv" -> "/gnu/store/zpphawi07xidhfs2dja3w7hmnfp99j02-diffutils-boot0-3.5.drv" [color = blue];
diff --git a/doc/images/coreutils-bag-graph.dot b/doc/images/coreutils-bag-graph.dot
index 7c90db65d4..4b5d20c8f4 100644
--- a/doc/images/coreutils-bag-graph.dot
+++ b/doc/images/coreutils-bag-graph.dot
@@ -1,5 +1,5 @@
 digraph "Guix bag-emerged" {
-  "/gnu/store/yv2r96w2dvbb0sjrf9f2imybpnyd616b-coreutils-8.25.drv" [label = "coreutils-8.25", shape = box, fontname = Helvetica];
+  "/gnu/store/yv2r96w2dvbb0sjrf9f2imybpnyd616b-coreutils-8.25.drv" [label = "coreutils-8.25", shape = box, fontname = "dejavu sans"];
   "/gnu/store/yv2r96w2dvbb0sjrf9f2imybpnyd616b-coreutils-8.25.drv" -> "/gnu/store/jxcx1jcvzxb17dc69sfwb352vgwyr108-perl-5.24.0.drv" [color = cyan3];
   "/gnu/store/yv2r96w2dvbb0sjrf9f2imybpnyd616b-coreutils-8.25.drv" -> "/gnu/store/7ijl8lybdx95kndajavdrpz05jdiwy9g-tar-1.29.drv" [color = cyan3];
   "/gnu/store/yv2r96w2dvbb0sjrf9f2imybpnyd616b-coreutils-8.25.drv" -> "/gnu/store/0ykf3p023pzfcg2bw8ahjc7cvmc12zjq-gzip-1.8.drv" [color = cyan3];
@@ -23,7 +23,7 @@ digraph "Guix bag-emerged" {
   "/gnu/store/yv2r96w2dvbb0sjrf9f2imybpnyd616b-coreutils-8.25.drv" -> "/gnu/store/ywmblv73pqa8lqqz368g46ysz65pnm0v-acl-2.2.52.drv" [color = cyan3];
   "/gnu/store/yv2r96w2dvbb0sjrf9f2imybpnyd616b-coreutils-8.25.drv" -> "/gnu/store/7gqg2kmrm1bjgphnd70ps5c11gqml571-gmp-6.1.1.drv" [color = cyan3];
   "/gnu/store/yv2r96w2dvbb0sjrf9f2imybpnyd616b-coreutils-8.25.drv" -> "/gnu/store/ijv3y5l1fbbzwb77lc867r1qbsf147i8-libcap-2.24.drv" [color = cyan3];
-  "/gnu/store/jxcx1jcvzxb17dc69sfwb352vgwyr108-perl-5.24.0.drv" [label = "perl-5.24.0", shape = box, fontname = Helvetica];
+  "/gnu/store/jxcx1jcvzxb17dc69sfwb352vgwyr108-perl-5.24.0.drv" [label = "perl-5.24.0", shape = box, fontname = "dejavu sans"];
   "/gnu/store/jxcx1jcvzxb17dc69sfwb352vgwyr108-perl-5.24.0.drv" -> "/gnu/store/7ijl8lybdx95kndajavdrpz05jdiwy9g-tar-1.29.drv" [color = blue];
   "/gnu/store/jxcx1jcvzxb17dc69sfwb352vgwyr108-perl-5.24.0.drv" -> "/gnu/store/0ykf3p023pzfcg2bw8ahjc7cvmc12zjq-gzip-1.8.drv" [color = blue];
   "/gnu/store/jxcx1jcvzxb17dc69sfwb352vgwyr108-perl-5.24.0.drv" -> "/gnu/store/xx3hiqhqn0d94zz7b46hgggwsz3wjiiw-bzip2-1.0.6.drv" [color = blue];
@@ -43,26 +43,26 @@ digraph "Guix bag-emerged" {
   "/gnu/store/jxcx1jcvzxb17dc69sfwb352vgwyr108-perl-5.24.0.drv" -> "/gnu/store/hv3dl3my12mq0gkwvckmnqccnckn39l0-gcc-4.9.4.drv" [color = blue];
   "/gnu/store/jxcx1jcvzxb17dc69sfwb352vgwyr108-perl-5.24.0.drv" -> "/gnu/store/qbfynm50snyn31w2c3paiw2n6wvzksg8-glibc-2.24.drv" [color = blue];
   "/gnu/store/jxcx1jcvzxb17dc69sfwb352vgwyr108-perl-5.24.0.drv" -> "/gnu/store/ir0lq2x7h64g2z5mlqvnlysjk2bc9xka-glibc-utf8-locales-2.24.drv" [color = blue];
-  "/gnu/store/7ijl8lybdx95kndajavdrpz05jdiwy9g-tar-1.29.drv" [label = "tar-1.29", shape = box, fontname = Helvetica];
-  "/gnu/store/0ykf3p023pzfcg2bw8ahjc7cvmc12zjq-gzip-1.8.drv" [label = "gzip-1.8", shape = box, fontname = Helvetica];
-  "/gnu/store/xx3hiqhqn0d94zz7b46hgggwsz3wjiiw-bzip2-1.0.6.drv" [label = "bzip2-1.0.6", shape = box, fontname = Helvetica];
-  "/gnu/store/kz8rzasivw4aflsv4rll3m539xybf226-xz-5.2.2.drv" [label = "xz-5.2.2", shape = box, fontname = Helvetica];
-  "/gnu/store/3pwrlsd23k2h104akxfj3cxhqcp973g9-file-5.28.drv" [label = "file-5.28", shape = box, fontname = Helvetica];
-  "/gnu/store/f1ww5vh5abnvr8b24llipm5dl89s5lq2-diffutils-3.5.drv" [label = "diffutils-3.5", shape = box, fontname = Helvetica];
-  "/gnu/store/0cbgdhhyh7hsgwq1x54n9vnq99rfjch9-patch-2.7.5.drv" [label = "patch-2.7.5", shape = box, fontname = Helvetica];
-  "/gnu/store/8xjnm44dfwwxp90hxq6zhb6qvia7rb3l-sed-4.2.2.drv" [label = "sed-4.2.2", shape = box, fontname = Helvetica];
-  "/gnu/store/54wjl6dp6rp47r67f4nyfqyv8nh456yc-findutils-4.6.0.drv" [label = "findutils-4.6.0", shape = box, fontname = Helvetica];
-  "/gnu/store/k951w49yw74ikg19l4mmlwfrq9w7a7zd-gawk-4.1.4.drv" [label = "gawk-4.1.4", shape = box, fontname = Helvetica];
-  "/gnu/store/n48xdjkvhlhj5mgdzy59n0dpb9vn0v78-grep-2.25.drv" [label = "grep-2.25", shape = box, fontname = Helvetica];
-  "/gnu/store/i52csyja3036ns0zj6z85lkgz3wfyym7-coreutils-8.25.drv" [label = "coreutils-8.25", shape = box, fontname = Helvetica];
-  "/gnu/store/nv4mnbz3mpd4gv80djk7762wyvxpccqk-make-4.2.1.drv" [label = "make-4.2.1", shape = box, fontname = Helvetica];
-  "/gnu/store/2c60vlcvpj5dvmgklajkp7cpynhcqixr-bash-4.4.0.drv" [label = "bash-4.4.0", shape = box, fontname = Helvetica];
-  "/gnu/store/zhc5c4s0xvzizpgpq2za6x84vxv57iy6-ld-wrapper-0.drv" [label = "ld-wrapper-0", shape = box, fontname = Helvetica];
-  "/gnu/store/9k1js0kalh4s6q4hf0rgg2n0zdyrwi69-binutils-2.27.drv" [label = "binutils-2.27", shape = box, fontname = Helvetica];
-  "/gnu/store/hv3dl3my12mq0gkwvckmnqccnckn39l0-gcc-4.9.4.drv" [label = "gcc-4.9.4", shape = box, fontname = Helvetica];
-  "/gnu/store/qbfynm50snyn31w2c3paiw2n6wvzksg8-glibc-2.24.drv" [label = "glibc-2.24", shape = box, fontname = Helvetica];
-  "/gnu/store/ir0lq2x7h64g2z5mlqvnlysjk2bc9xka-glibc-utf8-locales-2.24.drv" [label = "glibc-utf8-locales-2.24", shape = box, fontname = Helvetica];
-  "/gnu/store/ywmblv73pqa8lqqz368g46ysz65pnm0v-acl-2.2.52.drv" [label = "acl-2.2.52", shape = box, fontname = Helvetica];
+  "/gnu/store/7ijl8lybdx95kndajavdrpz05jdiwy9g-tar-1.29.drv" [label = "tar-1.29", shape = box, fontname = "dejavu sans"];
+  "/gnu/store/0ykf3p023pzfcg2bw8ahjc7cvmc12zjq-gzip-1.8.drv" [label = "gzip-1.8", shape = box, fontname = "dejavu sans"];
+  "/gnu/store/xx3hiqhqn0d94zz7b46hgggwsz3wjiiw-bzip2-1.0.6.drv" [label = "bzip2-1.0.6", shape = box, fontname = "dejavu sans"];
+  "/gnu/store/kz8rzasivw4aflsv4rll3m539xybf226-xz-5.2.2.drv" [label = "xz-5.2.2", shape = box, fontname = "dejavu sans"];
+  "/gnu/store/3pwrlsd23k2h104akxfj3cxhqcp973g9-file-5.28.drv" [label = "file-5.28", shape = box, fontname = "dejavu sans"];
+  "/gnu/store/f1ww5vh5abnvr8b24llipm5dl89s5lq2-diffutils-3.5.drv" [label = "diffutils-3.5", shape = box, fontname = "dejavu sans"];
+  "/gnu/store/0cbgdhhyh7hsgwq1x54n9vnq99rfjch9-patch-2.7.5.drv" [label = "patch-2.7.5", shape = box, fontname = "dejavu sans"];
+  "/gnu/store/8xjnm44dfwwxp90hxq6zhb6qvia7rb3l-sed-4.2.2.drv" [label = "sed-4.2.2", shape = box, fontname = "dejavu sans"];
+  "/gnu/store/54wjl6dp6rp47r67f4nyfqyv8nh456yc-findutils-4.6.0.drv" [label = "findutils-4.6.0", shape = box, fontname = "dejavu sans"];
+  "/gnu/store/k951w49yw74ikg19l4mmlwfrq9w7a7zd-gawk-4.1.4.drv" [label = "gawk-4.1.4", shape = box, fontname = "dejavu sans"];
+  "/gnu/store/n48xdjkvhlhj5mgdzy59n0dpb9vn0v78-grep-2.25.drv" [label = "grep-2.25", shape = box, fontname = "dejavu sans"];
+  "/gnu/store/i52csyja3036ns0zj6z85lkgz3wfyym7-coreutils-8.25.drv" [label = "coreutils-8.25", shape = box, fontname = "dejavu sans"];
+  "/gnu/store/nv4mnbz3mpd4gv80djk7762wyvxpccqk-make-4.2.1.drv" [label = "make-4.2.1", shape = box, fontname = "dejavu sans"];
+  "/gnu/store/2c60vlcvpj5dvmgklajkp7cpynhcqixr-bash-4.4.0.drv" [label = "bash-4.4.0", shape = box, fontname = "dejavu sans"];
+  "/gnu/store/zhc5c4s0xvzizpgpq2za6x84vxv57iy6-ld-wrapper-0.drv" [label = "ld-wrapper-0", shape = box, fontname = "dejavu sans"];
+  "/gnu/store/9k1js0kalh4s6q4hf0rgg2n0zdyrwi69-binutils-2.27.drv" [label = "binutils-2.27", shape = box, fontname = "dejavu sans"];
+  "/gnu/store/hv3dl3my12mq0gkwvckmnqccnckn39l0-gcc-4.9.4.drv" [label = "gcc-4.9.4", shape = box, fontname = "dejavu sans"];
+  "/gnu/store/qbfynm50snyn31w2c3paiw2n6wvzksg8-glibc-2.24.drv" [label = "glibc-2.24", shape = box, fontname = "dejavu sans"];
+  "/gnu/store/ir0lq2x7h64g2z5mlqvnlysjk2bc9xka-glibc-utf8-locales-2.24.drv" [label = "glibc-utf8-locales-2.24", shape = box, fontname = "dejavu sans"];
+  "/gnu/store/ywmblv73pqa8lqqz368g46ysz65pnm0v-acl-2.2.52.drv" [label = "acl-2.2.52", shape = box, fontname = "dejavu sans"];
   "/gnu/store/ywmblv73pqa8lqqz368g46ysz65pnm0v-acl-2.2.52.drv" -> "/gnu/store/nw68wjvbw505klgpsavq7dk195wg8ffj-gettext-minimal-0.19.8.1.drv" [color = darkgoldenrod];
   "/gnu/store/ywmblv73pqa8lqqz368g46ysz65pnm0v-acl-2.2.52.drv" -> "/gnu/store/jxcx1jcvzxb17dc69sfwb352vgwyr108-perl-5.24.0.drv" [color = darkgoldenrod];
   "/gnu/store/ywmblv73pqa8lqqz368g46ysz65pnm0v-acl-2.2.52.drv" -> "/gnu/store/7ijl8lybdx95kndajavdrpz05jdiwy9g-tar-1.29.drv" [color = darkgoldenrod];
@@ -85,7 +85,7 @@ digraph "Guix bag-emerged" {
   "/gnu/store/ywmblv73pqa8lqqz368g46ysz65pnm0v-acl-2.2.52.drv" -> "/gnu/store/qbfynm50snyn31w2c3paiw2n6wvzksg8-glibc-2.24.drv" [color = darkgoldenrod];
   "/gnu/store/ywmblv73pqa8lqqz368g46ysz65pnm0v-acl-2.2.52.drv" -> "/gnu/store/ir0lq2x7h64g2z5mlqvnlysjk2bc9xka-glibc-utf8-locales-2.24.drv" [color = darkgoldenrod];
   "/gnu/store/ywmblv73pqa8lqqz368g46ysz65pnm0v-acl-2.2.52.drv" -> "/gnu/store/gplx9i7c01f2r6qvm6d5w60iam73zmin-attr-2.4.47.drv" [color = darkgoldenrod];
-  "/gnu/store/nw68wjvbw505klgpsavq7dk195wg8ffj-gettext-minimal-0.19.8.1.drv" [label = "gettext-minimal-0.19.8.1", shape = box, fontname = Helvetica];
+  "/gnu/store/nw68wjvbw505klgpsavq7dk195wg8ffj-gettext-minimal-0.19.8.1.drv" [label = "gettext-minimal-0.19.8.1", shape = box, fontname = "dejavu sans"];
   "/gnu/store/nw68wjvbw505klgpsavq7dk195wg8ffj-gettext-minimal-0.19.8.1.drv" -> "/gnu/store/7ijl8lybdx95kndajavdrpz05jdiwy9g-tar-1.29.drv" [color = dimgrey];
   "/gnu/store/nw68wjvbw505klgpsavq7dk195wg8ffj-gettext-minimal-0.19.8.1.drv" -> "/gnu/store/0ykf3p023pzfcg2bw8ahjc7cvmc12zjq-gzip-1.8.drv" [color = dimgrey];
   "/gnu/store/nw68wjvbw505klgpsavq7dk195wg8ffj-gettext-minimal-0.19.8.1.drv" -> "/gnu/store/xx3hiqhqn0d94zz7b46hgggwsz3wjiiw-bzip2-1.0.6.drv" [color = dimgrey];
@@ -106,7 +106,7 @@ digraph "Guix bag-emerged" {
   "/gnu/store/nw68wjvbw505klgpsavq7dk195wg8ffj-gettext-minimal-0.19.8.1.drv" -> "/gnu/store/qbfynm50snyn31w2c3paiw2n6wvzksg8-glibc-2.24.drv" [color = dimgrey];
   "/gnu/store/nw68wjvbw505klgpsavq7dk195wg8ffj-gettext-minimal-0.19.8.1.drv" -> "/gnu/store/ir0lq2x7h64g2z5mlqvnlysjk2bc9xka-glibc-utf8-locales-2.24.drv" [color = dimgrey];
   "/gnu/store/nw68wjvbw505klgpsavq7dk195wg8ffj-gettext-minimal-0.19.8.1.drv" -> "/gnu/store/4dql1pzyivg87jwyfmmkwc6jll1vnizc-expat-2.2.0.drv" [color = dimgrey];
-  "/gnu/store/4dql1pzyivg87jwyfmmkwc6jll1vnizc-expat-2.2.0.drv" [label = "expat-2.2.0", shape = box, fontname = Helvetica];
+  "/gnu/store/4dql1pzyivg87jwyfmmkwc6jll1vnizc-expat-2.2.0.drv" [label = "expat-2.2.0", shape = box, fontname = "dejavu sans"];
   "/gnu/store/4dql1pzyivg87jwyfmmkwc6jll1vnizc-expat-2.2.0.drv" -> "/gnu/store/7ijl8lybdx95kndajavdrpz05jdiwy9g-tar-1.29.drv" [color = darkviolet];
   "/gnu/store/4dql1pzyivg87jwyfmmkwc6jll1vnizc-expat-2.2.0.drv" -> "/gnu/store/0ykf3p023pzfcg2bw8ahjc7cvmc12zjq-gzip-1.8.drv" [color = darkviolet];
   "/gnu/store/4dql1pzyivg87jwyfmmkwc6jll1vnizc-expat-2.2.0.drv" -> "/gnu/store/xx3hiqhqn0d94zz7b46hgggwsz3wjiiw-bzip2-1.0.6.drv" [color = darkviolet];
@@ -126,7 +126,7 @@ digraph "Guix bag-emerged" {
   "/gnu/store/4dql1pzyivg87jwyfmmkwc6jll1vnizc-expat-2.2.0.drv" -> "/gnu/store/hv3dl3my12mq0gkwvckmnqccnckn39l0-gcc-4.9.4.drv" [color = darkviolet];
   "/gnu/store/4dql1pzyivg87jwyfmmkwc6jll1vnizc-expat-2.2.0.drv" -> "/gnu/store/qbfynm50snyn31w2c3paiw2n6wvzksg8-glibc-2.24.drv" [color = darkviolet];
   "/gnu/store/4dql1pzyivg87jwyfmmkwc6jll1vnizc-expat-2.2.0.drv" -> "/gnu/store/ir0lq2x7h64g2z5mlqvnlysjk2bc9xka-glibc-utf8-locales-2.24.drv" [color = darkviolet];
-  "/gnu/store/gplx9i7c01f2r6qvm6d5w60iam73zmin-attr-2.4.47.drv" [label = "attr-2.4.47", shape = box, fontname = Helvetica];
+  "/gnu/store/gplx9i7c01f2r6qvm6d5w60iam73zmin-attr-2.4.47.drv" [label = "attr-2.4.47", shape = box, fontname = "dejavu sans"];
   "/gnu/store/gplx9i7c01f2r6qvm6d5w60iam73zmin-attr-2.4.47.drv" -> "/gnu/store/nw68wjvbw505klgpsavq7dk195wg8ffj-gettext-minimal-0.19.8.1.drv" [color = peachpuff4];
   "/gnu/store/gplx9i7c01f2r6qvm6d5w60iam73zmin-attr-2.4.47.drv" -> "/gnu/store/7ijl8lybdx95kndajavdrpz05jdiwy9g-tar-1.29.drv" [color = peachpuff4];
   "/gnu/store/gplx9i7c01f2r6qvm6d5w60iam73zmin-attr-2.4.47.drv" -> "/gnu/store/0ykf3p023pzfcg2bw8ahjc7cvmc12zjq-gzip-1.8.drv" [color = peachpuff4];
@@ -148,7 +148,7 @@ digraph "Guix bag-emerged" {
   "/gnu/store/gplx9i7c01f2r6qvm6d5w60iam73zmin-attr-2.4.47.drv" -> "/gnu/store/qbfynm50snyn31w2c3paiw2n6wvzksg8-glibc-2.24.drv" [color = peachpuff4];
   "/gnu/store/gplx9i7c01f2r6qvm6d5w60iam73zmin-attr-2.4.47.drv" -> "/gnu/store/ir0lq2x7h64g2z5mlqvnlysjk2bc9xka-glibc-utf8-locales-2.24.drv" [color = peachpuff4];
   "/gnu/store/gplx9i7c01f2r6qvm6d5w60iam73zmin-attr-2.4.47.drv" -> "/gnu/store/jxcx1jcvzxb17dc69sfwb352vgwyr108-perl-5.24.0.drv" [color = peachpuff4];
-  "/gnu/store/7gqg2kmrm1bjgphnd70ps5c11gqml571-gmp-6.1.1.drv" [label = "gmp-6.1.1", shape = box, fontname = Helvetica];
+  "/gnu/store/7gqg2kmrm1bjgphnd70ps5c11gqml571-gmp-6.1.1.drv" [label = "gmp-6.1.1", shape = box, fontname = "dejavu sans"];
   "/gnu/store/7gqg2kmrm1bjgphnd70ps5c11gqml571-gmp-6.1.1.drv" -> "/gnu/store/d1n7i55s1zcwzi21pnsxhamk3b1zf61d-m4-1.4.17.drv" [color = darkgoldenrod];
   "/gnu/store/7gqg2kmrm1bjgphnd70ps5c11gqml571-gmp-6.1.1.drv" -> "/gnu/store/7ijl8lybdx95kndajavdrpz05jdiwy9g-tar-1.29.drv" [color = darkgoldenrod];
   "/gnu/store/7gqg2kmrm1bjgphnd70ps5c11gqml571-gmp-6.1.1.drv" -> "/gnu/store/0ykf3p023pzfcg2bw8ahjc7cvmc12zjq-gzip-1.8.drv" [color = darkgoldenrod];
@@ -169,7 +169,7 @@ digraph "Guix bag-emerged" {
   "/gnu/store/7gqg2kmrm1bjgphnd70ps5c11gqml571-gmp-6.1.1.drv" -> "/gnu/store/hv3dl3my12mq0gkwvckmnqccnckn39l0-gcc-4.9.4.drv" [color = darkgoldenrod];
   "/gnu/store/7gqg2kmrm1bjgphnd70ps5c11gqml571-gmp-6.1.1.drv" -> "/gnu/store/qbfynm50snyn31w2c3paiw2n6wvzksg8-glibc-2.24.drv" [color = darkgoldenrod];
   "/gnu/store/7gqg2kmrm1bjgphnd70ps5c11gqml571-gmp-6.1.1.drv" -> "/gnu/store/ir0lq2x7h64g2z5mlqvnlysjk2bc9xka-glibc-utf8-locales-2.24.drv" [color = darkgoldenrod];
-  "/gnu/store/d1n7i55s1zcwzi21pnsxhamk3b1zf61d-m4-1.4.17.drv" [label = "m4-1.4.17", shape = box, fontname = Helvetica];
+  "/gnu/store/d1n7i55s1zcwzi21pnsxhamk3b1zf61d-m4-1.4.17.drv" [label = "m4-1.4.17", shape = box, fontname = "dejavu sans"];
   "/gnu/store/d1n7i55s1zcwzi21pnsxhamk3b1zf61d-m4-1.4.17.drv" -> "/gnu/store/7ijl8lybdx95kndajavdrpz05jdiwy9g-tar-1.29.drv" [color = cyan3];
   "/gnu/store/d1n7i55s1zcwzi21pnsxhamk3b1zf61d-m4-1.4.17.drv" -> "/gnu/store/0ykf3p023pzfcg2bw8ahjc7cvmc12zjq-gzip-1.8.drv" [color = cyan3];
   "/gnu/store/d1n7i55s1zcwzi21pnsxhamk3b1zf61d-m4-1.4.17.drv" -> "/gnu/store/xx3hiqhqn0d94zz7b46hgggwsz3wjiiw-bzip2-1.0.6.drv" [color = cyan3];
@@ -189,7 +189,7 @@ digraph "Guix bag-emerged" {
   "/gnu/store/d1n7i55s1zcwzi21pnsxhamk3b1zf61d-m4-1.4.17.drv" -> "/gnu/store/hv3dl3my12mq0gkwvckmnqccnckn39l0-gcc-4.9.4.drv" [color = cyan3];
   "/gnu/store/d1n7i55s1zcwzi21pnsxhamk3b1zf61d-m4-1.4.17.drv" -> "/gnu/store/qbfynm50snyn31w2c3paiw2n6wvzksg8-glibc-2.24.drv" [color = cyan3];
   "/gnu/store/d1n7i55s1zcwzi21pnsxhamk3b1zf61d-m4-1.4.17.drv" -> "/gnu/store/ir0lq2x7h64g2z5mlqvnlysjk2bc9xka-glibc-utf8-locales-2.24.drv" [color = cyan3];
-  "/gnu/store/ijv3y5l1fbbzwb77lc867r1qbsf147i8-libcap-2.24.drv" [label = "libcap-2.24", shape = box, fontname = Helvetica];
+  "/gnu/store/ijv3y5l1fbbzwb77lc867r1qbsf147i8-libcap-2.24.drv" [label = "libcap-2.24", shape = box, fontname = "dejavu sans"];
   "/gnu/store/ijv3y5l1fbbzwb77lc867r1qbsf147i8-libcap-2.24.drv" -> "/gnu/store/jxcx1jcvzxb17dc69sfwb352vgwyr108-perl-5.24.0.drv" [color = blue];
   "/gnu/store/ijv3y5l1fbbzwb77lc867r1qbsf147i8-libcap-2.24.drv" -> "/gnu/store/7ijl8lybdx95kndajavdrpz05jdiwy9g-tar-1.29.drv" [color = blue];
   "/gnu/store/ijv3y5l1fbbzwb77lc867r1qbsf147i8-libcap-2.24.drv" -> "/gnu/store/0ykf3p023pzfcg2bw8ahjc7cvmc12zjq-gzip-1.8.drv" [color = blue];
diff --git a/doc/images/coreutils-graph.dot b/doc/images/coreutils-graph.dot
index 920e5f2358..ffb62c922d 100644
--- a/doc/images/coreutils-graph.dot
+++ b/doc/images/coreutils-graph.dot
@@ -1,24 +1,24 @@
 digraph "Guix package" {
-  "72851008" [label = "coreutils-8.25", shape = box, fontname = Helvetica];
+  "72851008" [label = "coreutils-8.25", shape = box, fontname = "dejavu sans"];
   "72851008" -> "49728512" [color = darkseagreen];
   "72851008" -> "74872512" [color = darkseagreen];
   "72851008" -> "53180864" [color = darkseagreen];
   "72851008" -> "75199232" [color = darkseagreen];
-  "49728512" [label = "perl-5.24.0", shape = box, fontname = Helvetica];
-  "74872512" [label = "acl-2.2.52", shape = box, fontname = Helvetica];
+  "49728512" [label = "perl-5.24.0", shape = box, fontname = "dejavu sans"];
+  "74872512" [label = "acl-2.2.52", shape = box, fontname = "dejavu sans"];
   "74872512" -> "74873280" [color = red];
   "74872512" -> "49728512" [color = red];
   "74872512" -> "74872704" [color = red];
-  "74873280" [label = "gettext-minimal-0.19.8.1", shape = box, fontname = Helvetica];
+  "74873280" [label = "gettext-minimal-0.19.8.1", shape = box, fontname = "dejavu sans"];
   "74873280" -> "41550784" [color = cyan3];
-  "41550784" [label = "expat-2.2.0", shape = box, fontname = Helvetica];
-  "74872704" [label = "attr-2.4.47", shape = box, fontname = Helvetica];
+  "41550784" [label = "expat-2.2.0", shape = box, fontname = "dejavu sans"];
+  "74872704" [label = "attr-2.4.47", shape = box, fontname = "dejavu sans"];
   "74872704" -> "74873280" [color = cyan3];
   "74872704" -> "49728512" [color = cyan3];
-  "53180864" [label = "gmp-6.1.1", shape = box, fontname = Helvetica];
+  "53180864" [label = "gmp-6.1.1", shape = box, fontname = "dejavu sans"];
   "53180864" -> "50262784" [color = darkgoldenrod];
-  "50262784" [label = "m4-1.4.17", shape = box, fontname = Helvetica];
-  "75199232" [label = "libcap-2.24", shape = box, fontname = Helvetica];
+  "50262784" [label = "m4-1.4.17", shape = box, fontname = "dejavu sans"];
+  "75199232" [label = "libcap-2.24", shape = box, fontname = "dejavu sans"];
   "75199232" -> "49728512" [color = blue];
   "75199232" -> "74872704" [color = blue];
 
diff --git a/doc/images/gcc-core-mesboot0-graph.dot b/doc/images/gcc-core-mesboot0-graph.dot
index ef4e3a441e..de20dbe223 100644
--- a/doc/images/gcc-core-mesboot0-graph.dot
+++ b/doc/images/gcc-core-mesboot0-graph.dot
@@ -1,5 +1,5 @@
 digraph "Guix package" {
-  "139803511371136" [label = "gcc-core-mesboot0@2.95.3", shape = box, fontname = sans];
+  "139803511371136" [label = "gcc-core-mesboot0@2.95.3", shape = box, fontname = "dejavu sans"];
   "139803511371136" -> "139803511371312" [color = red];
   "139803511371136" -> "139803511372016" [color = red];
   "139803511371136" -> "139803511371488" [color = red];
@@ -9,7 +9,7 @@ digraph "Guix package" {
   "139803511371136" -> "139803511373600" [color = red];
   "139803511371136" -> "139803507105968" [color = red];
   "139803511371136" -> "139803749199472" [color = red];
-  "139803511371312" [label = "binutils-mesboot0@2.20.1a", shape = box, fontname = sans];
+  "139803511371312" [label = "binutils-mesboot0@2.20.1a", shape = box, fontname = "dejavu sans"];
   "139803511371312" -> "139803511372016" [color = dimgrey];
   "139803511371312" -> "139803511371488" [color = dimgrey];
   "139803511371312" -> "139803511371664" [color = dimgrey];
@@ -18,57 +18,57 @@ digraph "Guix package" {
   "139803511371312" -> "139803511373600" [color = dimgrey];
   "139803511371312" -> "139803507105968" [color = dimgrey];
   "139803511371312" -> "139803749199472" [color = dimgrey];
-  "139803511372016" [label = "gzip-mesboot@1.2.4", shape = box, fontname = sans];
+  "139803511372016" [label = "gzip-mesboot@1.2.4", shape = box, fontname = "dejavu sans"];
   "139803511372016" -> "139803511372192" [color = magenta];
   "139803511372016" -> "139803507105792" [color = magenta];
   "139803511372016" -> "139803511373600" [color = magenta];
   "139803511372016" -> "139803507105968" [color = magenta];
   "139803511372016" -> "139803749199472" [color = magenta];
-  "139803511372192" [label = "tcc-boot0@0.9.26-1136-g5bba73cc", shape = box, fontname = sans];
+  "139803511372192" [label = "tcc-boot0@0.9.26-1136-g5bba73cc", shape = box, fontname = "dejavu sans"];
   "139803511372192" -> "139803511372368" [color = magenta];
   "139803511372192" -> "139803511372544" [color = magenta];
   "139803511372192" -> "139803507105792" [color = magenta];
   "139803511372192" -> "139803511373600" [color = magenta];
   "139803511372192" -> "139803507105968" [color = magenta];
   "139803511372192" -> "139803749199472" [color = magenta];
-  "139803511372368" [label = "mes-boot@0.24", shape = box, fontname = sans];
+  "139803511372368" [label = "mes-boot@0.24", shape = box, fontname = "dejavu sans"];
   "139803511372368" -> "139803511372544" [color = darkviolet];
   "139803511372368" -> "139803507105792" [color = darkviolet];
   "139803511372368" -> "139803511373600" [color = darkviolet];
   "139803511372368" -> "139803507105968" [color = darkviolet];
   "139803511372368" -> "139803749199472" [color = darkviolet];
-  "139803511372544" [label = "stage0-posix@1.4", shape = box, fontname = sans];
+  "139803511372544" [label = "stage0-posix@1.4", shape = box, fontname = "dejavu sans"];
   "139803511372544" -> "139803511373072" [color = peachpuff4];
   "139803511372544" -> "139803507105792" [color = peachpuff4];
   "139803511372544" -> "139803511373600" [color = peachpuff4];
   "139803511372544" -> "139803507105968" [color = peachpuff4];
   "139803511372544" -> "139803749199472" [color = peachpuff4];
-  "139803511373072" [label = "bootstrap-seeds@1.0.0", shape = ellipse, fontname = sans];
+  "139803511373072" [label = "bootstrap-seeds@1.0.0", shape = ellipse, fontname = "dejavu sans"];
   "139803511373072" -> "139803507105968" [color = cyan3];
-  "139803507105968" [label = "bootar@1b", shape = box, fontname = sans];
+  "139803507105968" [label = "bootar@1b", shape = box, fontname = "dejavu sans"];
   "139803507105968" -> "139803749199472" [color = dimgrey];
-  "139803749199472" [label = "guile-bootstrap@2.0", shape = ellipse, fontname = sans];
-  "139803507105792" [label = "gash-boot@0.3.0", shape = box, fontname = sans];
+  "139803749199472" [label = "guile-bootstrap@2.0", shape = ellipse, fontname = "dejavu sans"];
+  "139803507105792" [label = "gash-boot@0.3.0", shape = box, fontname = "dejavu sans"];
   "139803507105792" -> "139803507105968" [color = darkviolet];
   "139803507105792" -> "139803749199472" [color = darkviolet];
-  "139803511373600" [label = "gash-utils-boot@0.2.0", shape = box, fontname = sans];
+  "139803511373600" [label = "gash-utils-boot@0.2.0", shape = box, fontname = "dejavu sans"];
   "139803511373600" -> "139803507105968" [color = red];
   "139803511373600" -> "139803507105792" [color = red];
   "139803511373600" -> "139803749199472" [color = red];
-  "139803511371488" [label = "patch-mesboot@2.5.9", shape = box, fontname = sans];
+  "139803511371488" [label = "patch-mesboot@2.5.9", shape = box, fontname = "dejavu sans"];
   "139803511371488" -> "139803511371840" [color = darkseagreen];
   "139803511371488" -> "139803511372192" [color = darkseagreen];
   "139803511371488" -> "139803507105792" [color = darkseagreen];
   "139803511371488" -> "139803511373600" [color = darkseagreen];
   "139803511371488" -> "139803507105968" [color = darkseagreen];
   "139803511371488" -> "139803749199472" [color = darkseagreen];
-  "139803511371840" [label = "make-mesboot0@3.80", shape = box, fontname = sans];
+  "139803511371840" [label = "make-mesboot0@3.80", shape = box, fontname = "dejavu sans"];
   "139803511371840" -> "139803511372192" [color = blue];
   "139803511371840" -> "139803507105792" [color = blue];
   "139803511371840" -> "139803511373600" [color = blue];
   "139803511371840" -> "139803507105968" [color = blue];
   "139803511371840" -> "139803749199472" [color = blue];
-  "139803511371664" [label = "tcc-boot@0.9.27", shape = box, fontname = sans];
+  "139803511371664" [label = "tcc-boot@0.9.27", shape = box, fontname = "dejavu sans"];
   "139803511371664" -> "139803511371840" [color = peachpuff4];
   "139803511371664" -> "139803511372192" [color = peachpuff4];
   "139803511371664" -> "139803507105792" [color = peachpuff4];
diff --git a/doc/images/service-graph.dot b/doc/images/service-graph.dot
index b7b617abbc..8de91f1adc 100644
--- a/doc/images/service-graph.dot
+++ b/doc/images/service-graph.dot
@@ -1,12 +1,12 @@
 digraph "Service Type Dependencies" {
-  shepherd [shape = box, fontname = Helvetica];
-  pam [shape = box, fontname = Helvetica];
-  etc [shape = box, fontname = Helvetica];
-  profile [shape = box, fontname = Helvetica];
-  accounts [shape = box, fontname = Helvetica];
-  activation [shape = box, fontname = Helvetica];
-  boot [shape = box, fontname = Helvetica];
-  system [shape = house, fontname = Helvetica];
+  shepherd [shape = box, fontname = "dejavu sans"];
+  pam [shape = box, fontname = "dejavu sans"];
+  etc [shape = box, fontname = "dejavu sans"];
+  profile [shape = box, fontname = "dejavu sans"];
+  accounts [shape = box, fontname = "dejavu sans"];
+  activation [shape = box, fontname = "dejavu sans"];
+  boot [shape = box, fontname = "dejavu sans"];
+  system [shape = house, fontname = "dejavu sans"];
   lshd -> shepherd;
   lshd -> pam;
   udev -> shepherd;
diff --git a/doc/images/shepherd-graph.dot b/doc/images/shepherd-graph.dot
index 35b2794689..06b028701b 100644
--- a/doc/images/shepherd-graph.dot
+++ b/doc/images/shepherd-graph.dot
@@ -1,7 +1,7 @@
 digraph "Guix shepherd-service" {
-  "user-file-systems" [label = "user-file-systems", shape = box, fontname = Helvetica];
+  "user-file-systems" [label = "user-file-systems", shape = box, fontname = "dejavu sans"];
   "user-processes" -> "user-file-systems" [color = cyan3];
-  "user-processes" [label = "user-processes", shape = box, fontname = Helvetica];
+  "user-processes" [label = "user-processes", shape = box, fontname = "dejavu sans"];
   "nscd" -> "user-processes" [color = magenta];
   "guix-daemon" -> "user-processes" [color = blue];
   "urandom-seed" -> "user-processes" [color = dimgrey];
@@ -13,45 +13,45 @@ digraph "Guix shepherd-service" {
   "term-tty2" -> "user-processes" [color = darkviolet];
   "term-tty1" -> "user-processes" [color = peachpuff4];
   "networking" -> "user-processes" [color = dimgrey];
-  "nscd" [label = "nscd", shape = box, fontname = Helvetica];
-  "guix-daemon" [label = "guix-daemon", shape = box, fontname = Helvetica];
-  "urandom-seed" [label = "urandom-seed", shape = box, fontname = Helvetica];
-  "syslogd" [label = "syslogd", shape = box, fontname = Helvetica];
+  "nscd" [label = "nscd", shape = box, fontname = "dejavu sans"];
+  "guix-daemon" [label = "guix-daemon", shape = box, fontname = "dejavu sans"];
+  "urandom-seed" [label = "urandom-seed", shape = box, fontname = "dejavu sans"];
+  "syslogd" [label = "syslogd", shape = box, fontname = "dejavu sans"];
   "ssh-daemon" -> "syslogd" [color = darkgoldenrod];
-  "ssh-daemon" [label = "ssh-daemon", shape = box, fontname = Helvetica];
-  "term-tty6" [label = "term-tty6", shape = box, fontname = Helvetica];
+  "ssh-daemon" [label = "ssh-daemon", shape = box, fontname = "dejavu sans"];
+  "term-tty6" [label = "term-tty6", shape = box, fontname = "dejavu sans"];
   "console-font-tty6" -> "term-tty6" [color = darkgoldenrod];
-  "console-font-tty6" [label = "console-font-tty6", shape = box, fontname = Helvetica];
-  "term-tty5" [label = "term-tty5", shape = box, fontname = Helvetica];
+  "console-font-tty6" [label = "console-font-tty6", shape = box, fontname = "dejavu sans"];
+  "term-tty5" [label = "term-tty5", shape = box, fontname = "dejavu sans"];
   "console-font-tty5" -> "term-tty5" [color = dimgrey];
-  "console-font-tty5" [label = "console-font-tty5", shape = box, fontname = Helvetica];
-  "term-tty4" [label = "term-tty4", shape = box, fontname = Helvetica];
+  "console-font-tty5" [label = "console-font-tty5", shape = box, fontname = "dejavu sans"];
+  "term-tty4" [label = "term-tty4", shape = box, fontname = "dejavu sans"];
   "console-font-tty4" -> "term-tty4" [color = darkviolet];
-  "console-font-tty4" [label = "console-font-tty4", shape = box, fontname = Helvetica];
-  "term-tty3" [label = "term-tty3", shape = box, fontname = Helvetica];
+  "console-font-tty4" [label = "console-font-tty4", shape = box, fontname = "dejavu sans"];
+  "term-tty3" [label = "term-tty3", shape = box, fontname = "dejavu sans"];
   "console-font-tty3" -> "term-tty3" [color = peachpuff4];
-  "console-font-tty3" [label = "console-font-tty3", shape = box, fontname = Helvetica];
-  "term-tty2" [label = "term-tty2", shape = box, fontname = Helvetica];
+  "console-font-tty3" [label = "console-font-tty3", shape = box, fontname = "dejavu sans"];
+  "term-tty2" [label = "term-tty2", shape = box, fontname = "dejavu sans"];
   "console-font-tty2" -> "term-tty2" [color = darkseagreen];
-  "console-font-tty2" [label = "console-font-tty2", shape = box, fontname = Helvetica];
-  "term-tty1" [label = "term-tty1", shape = box, fontname = Helvetica];
+  "console-font-tty2" [label = "console-font-tty2", shape = box, fontname = "dejavu sans"];
+  "term-tty1" [label = "term-tty1", shape = box, fontname = "dejavu sans"];
   "console-font-tty1" -> "term-tty1" [color = cyan3];
-  "console-font-tty1" [label = "console-font-tty1", shape = box, fontname = Helvetica];
-  "networking" [label = "networking", shape = box, fontname = Helvetica];
+  "console-font-tty1" [label = "console-font-tty1", shape = box, fontname = "dejavu sans"];
+  "networking" [label = "networking", shape = box, fontname = "dejavu sans"];
   "ssh-daemon" -> "networking" [color = darkgoldenrod];
-  "root-file-system" [label = "root-file-system", shape = box, fontname = Helvetica];
+  "root-file-system" [label = "root-file-system", shape = box, fontname = "dejavu sans"];
   "file-system-/dev/pts" -> "root-file-system" [color = peachpuff4];
   "file-system-/dev/shm" -> "root-file-system" [color = darkgoldenrod];
   "file-system-/gnu/store" -> "root-file-system" [color = blue];
   "user-processes" -> "root-file-system" [color = cyan3];
   "udev" -> "root-file-system" [color = darkseagreen];
-  "file-system-/dev/pts" [label = "file-system-/dev/pts", shape = box, fontname = Helvetica];
+  "file-system-/dev/pts" [label = "file-system-/dev/pts", shape = box, fontname = "dejavu sans"];
   "user-processes" -> "file-system-/dev/pts" [color = cyan3];
-  "file-system-/dev/shm" [label = "file-system-/dev/shm", shape = box, fontname = Helvetica];
+  "file-system-/dev/shm" [label = "file-system-/dev/shm", shape = box, fontname = "dejavu sans"];
   "user-processes" -> "file-system-/dev/shm" [color = cyan3];
-  "file-system-/gnu/store" [label = "file-system-/gnu/store", shape = box, fontname = Helvetica];
+  "file-system-/gnu/store" [label = "file-system-/gnu/store", shape = box, fontname = "dejavu sans"];
   "user-processes" -> "file-system-/gnu/store" [color = cyan3];
-  "udev" [label = "udev", shape = box, fontname = Helvetica];
+  "udev" [label = "udev", shape = box, fontname = "dejavu sans"];
   "term-tty6" -> "udev" [color = magenta];
   "term-tty5" -> "udev" [color = red];
   "term-tty4" -> "udev" [color = darkgoldenrod];
@@ -59,13 +59,13 @@ digraph "Guix shepherd-service" {
   "term-tty2" -> "udev" [color = darkviolet];
   "term-tty1" -> "udev" [color = peachpuff4];
   "networking" -> "udev" [color = dimgrey];
-  "host-name" [label = "host-name", shape = box, fontname = Helvetica];
+  "host-name" [label = "host-name", shape = box, fontname = "dejavu sans"];
   "term-tty6" -> "host-name" [color = magenta];
   "term-tty5" -> "host-name" [color = red];
   "term-tty4" -> "host-name" [color = darkgoldenrod];
   "term-tty3" -> "host-name" [color = dimgrey];
   "term-tty2" -> "host-name" [color = darkviolet];
   "term-tty1" -> "host-name" [color = peachpuff4];
-  "loopback" [label = "loopback", shape = box, fontname = Helvetica];
+  "loopback" [label = "loopback", shape = box, fontname = "dejavu sans"];
 
 }
-- 
2.41.0


[-- Attachment #3: Type: text/plain, Size: 164 bytes --]


-- 
Janneke Nieuwenhuizen <janneke@gnu.org>  | GNU LilyPond https://LilyPond.org
Freelance IT https://www.JoyOfSource.com | Avatar® https://AvatarAcademy.com

^ permalink raw reply related	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH v2 04/12] maint: Help help2man generate reproducible man-pages.
  2024-04-06 21:17   ` [bug#70169] [PATCH v2 04/12] maint: Help help2man generate reproducible man-pages Janneke Nieuwenhuizen
@ 2024-04-07 13:54     ` pelzflorian (Florian Pelz)
  2024-04-07 14:06       ` Janneke Nieuwenhuizen
  2024-04-08  9:23       ` Ludovic Courtès
  0 siblings, 2 replies; 66+ messages in thread
From: pelzflorian (Florian Pelz) @ 2024-04-07 13:54 UTC (permalink / raw)
  To: Janneke Nieuwenhuizen; +Cc: 70169

Hello Jan,

Janneke Nieuwenhuizen <janneke@gnu.org> writes:
> diff --git a/doc/local.mk b/doc/local.mk
> index 5f014b9c3d..017686137a 100644
> --- a/doc/local.mk
> +++ b/doc/local.mk
> @@ -224,6 +224,9 @@ gen_man =						\
>    $(HELP2MANFLAGS)
>  
>  HELP2MANFLAGS = --source=GNU --info-page=$(PACKAGE_TARNAME)
> +# help2man reproducibility
> +SOURCE_DATE_EPOCH = $(shell git show HEAD --format=%ct --no-patch 2>/dev/null || echo 0)
> +export SOURCE_DATE_EPOCH
>  
>  $(srcdir)/%D%/guix.1: scripts/guix.in $(sub_commands_mans)
>  	-$(AM_V_HELP2MAN)$(gen_man) --output="$@" `basename "$@" .1`

Do I interpret correctly that “echo 0” is a fallback timestamp?

Looking at the now gone instructions from “git show
83c60bb0622440afe98930820186ddfa1e6e8b2f”, at that time, a timestamp of
1 was used for the tarball; I do not remember why.  In
guix/scripts/pack.scm, 1 is used for squashfs and docker images.

Is 1 a better timestamp than 0?

Regards,
Florian




^ permalink raw reply	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH v2 04/12] maint: Help help2man generate reproducible man-pages.
  2024-04-07 13:54     ` pelzflorian (Florian Pelz)
@ 2024-04-07 14:06       ` Janneke Nieuwenhuizen
  2024-04-07 15:20         ` pelzflorian (Florian Pelz)
  2024-04-08  9:23       ` Ludovic Courtès
  1 sibling, 1 reply; 66+ messages in thread
From: Janneke Nieuwenhuizen @ 2024-04-07 14:06 UTC (permalink / raw)
  To: pelzflorian (Florian Pelz); +Cc: 70169

pelzflorian (Florian Pelz) writes:

Hello Florian,

> Janneke Nieuwenhuizen <janneke@gnu.org> writes:
>> diff --git a/doc/local.mk b/doc/local.mk
>> +SOURCE_DATE_EPOCH = $(shell git show HEAD --format=%ct --no-patch 2>/dev/null || echo 0)
>> +export SOURCE_DATE_EPOCH
>
> Do I interpret correctly that “echo 0” is a fallback timestamp?

Yes.

> Looking at the now gone instructions from “git show
> 83c60bb0622440afe98930820186ddfa1e6e8b2f”, at that time, a timestamp of
> 1 was used for the tarball; I do not remember why.  In
> guix/scripts/pack.scm, 1 is used for squashfs and docker images.

That's probably because of build dependencies.

> Is 1 a better timestamp than 0?

For files, using 1 is preferrable if it's not a source file.  We use 1
for .go files, and 0 for .scm files, iirc.  SOURCE_DATE_EPOCH is (only)
used for the date in the document.  Without git, 0 is as good a guess
for a reproducible date for use in a document as any, I think.

Greetings,
Janneke

-- 
Janneke Nieuwenhuizen <janneke@gnu.org>  | GNU LilyPond https://LilyPond.org
Freelance IT https://www.JoyOfSource.com | Avatar® https://AvatarAcademy.com




^ permalink raw reply	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH v2 04/12] maint: Help help2man generate reproducible man-pages.
  2024-04-07 14:06       ` Janneke Nieuwenhuizen
@ 2024-04-07 15:20         ` pelzflorian (Florian Pelz)
  0 siblings, 0 replies; 66+ messages in thread
From: pelzflorian (Florian Pelz) @ 2024-04-07 15:20 UTC (permalink / raw)
  To: Janneke Nieuwenhuizen; +Cc: 70169

Janneke Nieuwenhuizen <janneke@gnu.org> writes:
> pelzflorian (Florian Pelz) writes:
>> Is 1 a better timestamp than 0?
>
> For files, using 1 is preferrable if it's not a source file.  We use 1
> for .go files, and 0 for .scm files, iirc.  SOURCE_DATE_EPOCH is (only)
> used for the date in the document.  Without git, 0 is as good a guess
> for a reproducible date for use in a document as any, I think.
>
> Greetings,
> Janneke

Thank you for explaining.  So this SOURCE_DATE_EPOCH applies to all the
generated files in doc/ but still 0 is fine, because noone warns if they
are not later than source files, IIUC.

Regards,
Florian




^ permalink raw reply	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH v2 11/12] maint: Reset CreationDate metadata on generated PDFs.
  2024-04-06 21:18   ` [bug#70169] [PATCH v2 11/12] maint: Reset CreationDate metadata on generated PDFs Janneke Nieuwenhuizen
@ 2024-04-07 17:16     ` pelzflorian (Florian Pelz)
  2024-04-07 17:38       ` Janneke Nieuwenhuizen
  0 siblings, 1 reply; 66+ messages in thread
From: pelzflorian (Florian Pelz) @ 2024-04-07 17:16 UTC (permalink / raw)
  To: Janneke Nieuwenhuizen; +Cc: 70169

Janneke Nieuwenhuizen <janneke@gnu.org> writes:
> diff --git a/doc/local.mk b/doc/local.mk
> index a0d94614d3..25741a5c88 100644
> --- a/doc/local.mk
> +++ b/doc/local.mk
> @@ -148,7 +148,11 @@ DOT_OPTIONS =					\
>  	$(AM_V_at)mv "$(srcdir)/$@.tmp" "$(srcdir)/$@"
>  
>  .dot.pdf:
> -	$(AM_V_DOT)$(DOT) -Tpdf $(DOT_OPTIONS) < "$<" > "$(srcdir)/$@.tmp"
> +	export TZ=UTC0;								\
> +	    $(AM_V_DOT)$(DOT) -Tpdf $(DOT_OPTIONS) < "$<" > "$(srcdir)/$@.tmp"

I see a non-fatal message here that

    @echo "  DOT     " doc/images/bootstrap-graph.pdf;/bin/sh '/home/florian/src/guix/test70169/build-aux/missing' dot -Tpdf -Gratio=.9 -Gnodesep=.005 -Granksep=.00005 -Nfontsize=9 -Nheight=.1 -Nwidth=.1 < "doc/images/bootstrap-graph.dot" > "./doc/images/bootstrap-graph.pdf.tmp"
/bin/sh: line 2: @echo: command not found

Perhaps AM_V_DOT cannot be used after export TZ=UTC0;?


> +	$(AM_V_at)sed -ri						\
> +	    -e 's,(/CreationDate [(]D:)[0-9+]{14},\119700101000000,'	\
> +		"$(srcdir)/$@.tmp"
>  	$(AM_V_at)mv "$(srcdir)/$@.tmp" "$(srcdir)/$@"
>  
>  .dot.eps:

Regards,
Florian




^ permalink raw reply	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH v2 11/12] maint: Reset CreationDate metadata on generated PDFs.
  2024-04-07 17:16     ` pelzflorian (Florian Pelz)
@ 2024-04-07 17:38       ` Janneke Nieuwenhuizen
  2024-04-07 18:09         ` Janneke Nieuwenhuizen
  0 siblings, 1 reply; 66+ messages in thread
From: Janneke Nieuwenhuizen @ 2024-04-07 17:38 UTC (permalink / raw)
  To: pelzflorian (Florian Pelz); +Cc: 70169

pelzflorian (Florian Pelz) writes:

Hi!

> Janneke Nieuwenhuizen <janneke@gnu.org> writes:
>> diff --git a/doc/local.mk b/doc/local.mk
>> index a0d94614d3..25741a5c88 100644
>> --- a/doc/local.mk
>> +++ b/doc/local.mk
>> @@ -148,7 +148,11 @@ DOT_OPTIONS =					\
>>  	$(AM_V_at)mv "$(srcdir)/$@.tmp" "$(srcdir)/$@"
>>  
>>  .dot.pdf:
>> -	$(AM_V_DOT)$(DOT) -Tpdf $(DOT_OPTIONS) < "$<" > "$(srcdir)/$@.tmp"
>> +	export TZ=UTC0;								\
>> +	    $(AM_V_DOT)$(DOT) -Tpdf $(DOT_OPTIONS) < "$<" > "$(srcdir)/$@.tmp"
>
> I see a non-fatal message here that
>
>     @echo " DOT " doc/images/bootstrap-graph.pdf;/bin/sh
> '/home/florian/src/guix/test70169/build-aux/missing' dot -Tpdf
> -Gratio=.9 -Gnodesep=.005 -Granksep=.00005 -Nfontsize=9 -Nheight=.1
> -Nwidth=.1 < "doc/images/bootstrap-graph.dot" >
> "./doc/images/bootstrap-graph.pdf.tmp"
> /bin/sh: line 2: @echo: command not found
>
> Perhaps AM_V_DOT cannot be used after export TZ=UTC0;?

Ah, that's not good.  Apparently I ontly tested using V=2 in the end.

I believe this should fix it

diff --git a/doc/local.mk b/doc/local.mk
index fffba409dc..0cdad3e58c 100644
--- a/doc/local.mk
+++ b/doc/local.mk
@@ -148,8 +148,8 @@ DOT_OPTIONS =					\
 	$(AM_V_at)mv "$(srcdir)/$@.tmp" "$(srcdir)/$@"
 
 .dot.pdf:
-	export TZ=UTC0;								\
-	    $(AM_V_DOT)$(DOT) -Tpdf $(DOT_OPTIONS) < "$<" > "$(srcdir)/$@.tmp"
+	$(AM_V_DOT)export TZ=UTC0;					\
+	    $(DOT) -Tpdf $(DOT_OPTIONS) < "$<" > "$(srcdir)/$@.tmp"
 	$(AM_V_at)sed -ri					\
 	    -e 's,(/CreationDate \(D:).*\),\119700101000000,'	\
 	    "$(srcdir)/$@.tmp"

Greetings,
Janneke

-- 
Janneke Nieuwenhuizen <janneke@gnu.org>  | GNU LilyPond https://LilyPond.org
Freelance IT https://www.JoyOfSource.com | Avatar® https://AvatarAcademy.com




^ permalink raw reply related	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH v2 11/12] maint: Reset CreationDate metadata on generated PDFs.
  2024-04-07 17:38       ` Janneke Nieuwenhuizen
@ 2024-04-07 18:09         ` Janneke Nieuwenhuizen
  0 siblings, 0 replies; 66+ messages in thread
From: Janneke Nieuwenhuizen @ 2024-04-07 18:09 UTC (permalink / raw)
  To: pelzflorian (Florian Pelz); +Cc: 70169

Janneke Nieuwenhuizen writes:

Hi again,

> pelzflorian (Florian Pelz) writes:
>
>> Janneke Nieuwenhuizen <janneke@gnu.org> writes:
[..]
>> Perhaps AM_V_DOT cannot be used after export TZ=UTC0;?
>
> Ah, that's not good.  Apparently I ontly tested using V=2 in the end.
>
> I believe this should fix it

Come to think of it, as we're removeing CreationDate anyway, setting TZ
is quite unnecessary, and we can just do

.dot.pdf:
	$(AM_V_DOT)$(DOT) -Tpdf $(DOT_OPTIONS) < "$<" > "$(srcdir)/$@.tmp"
[..]

Thanks for looking into this!




^ permalink raw reply	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH v2 04/12] maint: Help help2man generate reproducible man-pages.
  2024-04-07 13:54     ` pelzflorian (Florian Pelz)
  2024-04-07 14:06       ` Janneke Nieuwenhuizen
@ 2024-04-08  9:23       ` Ludovic Courtès
  2024-04-08  9:40         ` Janneke Nieuwenhuizen
  1 sibling, 1 reply; 66+ messages in thread
From: Ludovic Courtès @ 2024-04-08  9:23 UTC (permalink / raw)
  To: pelzflorian (Florian Pelz); +Cc: 70169, Janneke Nieuwenhuizen

Hello,

"pelzflorian (Florian Pelz)" <pelzflorian@pelzflorian.de> skribis:

> Looking at the now gone instructions from “git show
> 83c60bb0622440afe98930820186ddfa1e6e8b2f”, at that time, a timestamp of
> 1 was used for the tarball; I do not remember why.  In
> guix/scripts/pack.scm, 1 is used for squashfs and docker images.

In the store, a timestamp of 1 (not 0) is used.  This is because there
are tools (among which ‘make’ IIRC) that behave differently when mtime
is zero.

For consistency and to be on the safe side, it’s probably a good idea to
do the same (as the fallback in this case).

Ludo’.




^ permalink raw reply	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH 5/7] maint: Generate 'doc/version-LANG.texi' reproducibly.
  2024-04-03 20:33     ` Janneke Nieuwenhuizen
@ 2024-04-08  9:26       ` Ludovic Courtès
  0 siblings, 0 replies; 66+ messages in thread
From: Ludovic Courtès @ 2024-04-08  9:26 UTC (permalink / raw)
  To: Janneke Nieuwenhuizen; +Cc: 70169

Janneke Nieuwenhuizen <janneke@gnu.org> skribis:

> Ludovic Courtès writes:
>
>> Janneke Nieuwenhuizen <janneke@gnu.org> skribis:
>>
>>> +$(eval $(call version.texi-from-git,vti,doc/guix.texi,))
>>> +$(foreach lang, $(MANUAL_LANGUAGES),				\
>>> +	$(eval i=$(shell echo $$(($(i)+1))))			\
>>> +	$(eval $(call version.texi-from-git,$(i),po/doc/guix-manual.$(lang).po,-$(lang))))
>>
>> Maybe we could drop ‘i’ and instead create ‘samp-fr’, ‘stamp-de’, and so
>> on?  That is, ‘version.texi-from-git’ would take 2 arguments instead of 3.
>
> I don't think so, or, I wouldn't know how to do that.  The stamp-N is
> created by Automake's magic.  They are distributed together with the
> version-LANG.texi files.
>
> If Automake would have used stamp-LANG, this would have been much
> easier, we could probably have used stem (%) instead of this hairy
> function.

Oh, I see.  I didn't know there were internal uses of ‘stamp-N’.

Ludo’.




^ permalink raw reply	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH v2 04/12] maint: Help help2man generate reproducible man-pages.
  2024-04-08  9:23       ` Ludovic Courtès
@ 2024-04-08  9:40         ` Janneke Nieuwenhuizen
  0 siblings, 0 replies; 66+ messages in thread
From: Janneke Nieuwenhuizen @ 2024-04-08  9:40 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: 70169, pelzflorian (Florian Pelz)

Ludovic Courtès writes:

Hi,

> "pelzflorian (Florian Pelz)" <pelzflorian@pelzflorian.de> skribis:
>
>> Looking at the now gone instructions from “git show
>> 83c60bb0622440afe98930820186ddfa1e6e8b2f”, at that time, a timestamp of
>> 1 was used for the tarball; I do not remember why.  In
>> guix/scripts/pack.scm, 1 is used for squashfs and docker images.
>
> In the store, a timestamp of 1 (not 0) is used.  This is because there
> are tools (among which ‘make’ IIRC) that behave differently when mtime
> is zero.
>
> For consistency and to be on the safe side, it’s probably a good idea to
> do the same (as the fallback in this case).

Okay, will change for v3.




^ permalink raw reply	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH v2 09/12] maint: Remove %%CreationDate from generated EPS files
  2024-04-06 21:18   ` [bug#70169] [PATCH v2 09/12] maint: Remove %%CreationDate from generated EPS files Janneke Nieuwenhuizen
@ 2024-04-08  9:41     ` Ludovic Courtès
  2024-04-08 17:12       ` Janneke Nieuwenhuizen
  0 siblings, 1 reply; 66+ messages in thread
From: Ludovic Courtès @ 2024-04-08  9:41 UTC (permalink / raw)
  To: Janneke Nieuwenhuizen; +Cc: 70169

Janneke Nieuwenhuizen <janneke@gnu.org> skribis:

> * doc/local.mk (.dot.eps, png.eps): Remove %%CreationDate.  Split single shell
> command into separate recipe lines, prefixed by $(AM_V_at).
>
> Change-Id: I5a03485c19c72f0c46411815c51290e52a8e5399
> ---
>  doc/local.mk | 12 ++++++++----
>  1 file changed, 8 insertions(+), 4 deletions(-)
>
> diff --git a/doc/local.mk b/doc/local.mk
> index c355bec8d7..60e36091ce 100644
> --- a/doc/local.mk
> +++ b/doc/local.mk
> @@ -152,12 +152,16 @@ DOT_OPTIONS =					\
>  	mv "$(srcdir)/$@.tmp" "$(srcdir)/$@"
>  
>  .dot.eps:
> -	$(AM_V_DOT)$(DOT) -Teps $(DOT_OPTIONS) < "$<" > "$(srcdir)/$@.tmp"; \
> -	mv "$(srcdir)/$@.tmp" "$(srcdir)/$@"
> +	$(AM_V_DOT)$(DOT) -Teps $(DOT_OPTIONS) < "$<" > "$(srcdir)/$@.tmp"
> +	$(AM_V_at)grep -v ^%%CreationDate: "$(srcdir)/$@.tmp" > "$(srcdir)/$@.tmp2"
> +	$(AM_V_at)rm -f "$(srcdir)/$@.tmp"
> +	$(AM_V_at)mv "$(srcdir)/$@.tmp2" "$@"

Apparently ‘dot’ (GraphViz) does not emit a ‘CreationDate’ header.

Should we drop this change and add a line like this above the ‘mv’ line:

  @if grep -q CreationDate "$@.tmp"; then false; else true; fi

to be on the safe side?

>  .png.eps:
> -	$(AM_V_GEN)convert "$<" "$@-tmp.eps"; \
> -	mv "$@-tmp.eps" "$@"
> +	$(AM_V_GEN)convert "$<" "$@-tmp.eps"
> +	$(AM_V_at)grep -v ^%%CreationDate: "$@-tmp.eps" > "$@-tmp2.eps"
> +	$(AM_V_at)rm -f "$@-tmp.eps"
> +	$(AM_V_at)mv "$@-tmp2.eps" "$@"

Looking into the code of ImageMagick, I see:

--8<---------------cut here---------------start------------->8---
        timer=GetMagickTime();
        (void) FormatMagickTime(timer,MaxTextExtent,date);
        (void) FormatLocaleString(buffer,MaxTextExtent,
          "%%%%CreationDate: %s\n",date);
--8<---------------cut here---------------end--------------->8---

where ‘GetMagickTime’ honors ‘SOURCE_DATE_EPOCH’.  Should we set
‘SOURCE_DATE_EPOCH’ and avoid the ‘grep’ trick?

OTOH, an argument to keep this patch as-is is that it’ll resist to
changes in ImageMagick/GraphViz.  So maybe the comments above aren’t
that relevant.

Ludo’.




^ permalink raw reply	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH v2 13/12] doc: Use "dejavu sans" instead of "Helvetica" or "sans" in dot images.
  2024-04-07  8:57   ` [bug#70169] [PATCH v2 13/12] doc: Use "dejavu sans" instead of "Helvetica" or "sans" in dot images Janneke Nieuwenhuizen
@ 2024-04-08 12:15     ` Ludovic Courtès
  2024-04-08 17:26       ` Janneke Nieuwenhuizen
  0 siblings, 1 reply; 66+ messages in thread
From: Ludovic Courtès @ 2024-04-08 12:15 UTC (permalink / raw)
  To: Janneke Nieuwenhuizen; +Cc: 70169

Janneke Nieuwenhuizen <janneke@gnu.org> skribis:

> Janneke Nieuwenhuizen writes:
>
>> Note that you'll need an environment with something like
>>
>> guix shell -CP -m manifest.scm fontconfig font-ghostscript graphviz \
>>     imagemagick texlive-bin
>
> Headsup: using the attached bonus patch the tarball reproduces for me
> also without using a container, i.e., building it in
>
>     guix shell -CP -m manifest.scm fontconfig graphviz imagemagick texlive-bin
>
> or
>
>     guix shell -m manifest.scm fontconfig graphviz imagemagick texlive-bin
>
> now creates the same tarball for me.

Ah yes, I had:

--8<---------------cut here---------------start------------->8---
/bin/sh '/home/ludo/src/guix/build-aux/missing' dot -Tpng -Gratio=.9 -Gnodesep=.005 -Granksep=.00005 -Nfontsize=9 -Nheight=.1 -Nwidth=.1 < "doc/images/bootstrap-graph.dot" > "./doc/images/bootstrap-graph.png.tmp"
Error: fontconfig: Didn't find expected font family. Perhaps URW Type 1 fonts need installing?
Error: fontconfig: Didn't find expected font family. Perhaps URW Type 1 fonts need installing?
Error: fontconfig: Didn't find expected font family. Perhaps URW Type 1 fonts need installing?
Error: fontconfig: Didn't find expected font family. Perhaps URW Type 1 fonts need installing?
Error: fontconfig: Didn't find expected font family. Perhaps URW Type 1 fonts need installing?
Error: fontconfig: Didn't find expected font family. Perhaps URW Type 1 fonts need installing?
Error: fontconfig: Didn't find expected font family. Perhaps URW Type 1 fonts need installing?
Error: fontconfig: Didn't find expected font family. Perhaps URW Type 1 fonts need installing?
Error: fontconfig: Didn't find expected font family. Perhaps URW Type 1 fonts need installing?
Error: fontconfig: Didn't find expected font family. Perhaps URW Type 1 fonts need installing?
Error: fontconfig: Didn't find expected font family. Perhaps URW Type 1 fonts need installing?
Error: fontconfig: Didn't find expected font family. Perhaps URW Type 1 fonts need installing?
Error: fontconfig: Didn't find expected font family. Perhaps URW Type 1 fonts need installing?
Error: fontconfig: Didn't find expected font family. Perhaps URW Type 1 fonts need installing?
Error: fontconfig: Didn't find expected font family. Perhaps URW Type 1 fonts need installing?
Error: fontconfig: Didn't find expected font family. Perhaps URW Type 1 fonts need installing?
Error: fontconfig: Didn't find expected font family. Perhaps URW Type 1 fonts need installing?
Error: fontconfig: Didn't find expected font family. Perhaps URW Type 1 fonts need installing?
Error: fontconfig: Didn't find expected font family. Perhaps URW Type 1 fonts need installing?
Error: fontconfig: Didn't find expected font family. Perhaps URW Type 1 fonts need installing?
Error: fontconfig: Didn't find expected font family. Perhaps URW Type 1 fonts need installing?
Error: fontconfig: Didn't find expected font family. Perhaps URW Type 1 fonts need installing?
Error: fontconfig: Didn't find expected font family. Perhaps URW Type 1 fonts need installing?
Error: fontconfig: Didn't find expected font family. Perhaps URW Type 1 fonts need installing?
Error: fontconfig: Didn't find expected font family. Perhaps URW Type 1 fonts need installing?
Error: fontconfig: Didn't find expected font family. Perhaps URW Type 1 fonts need installing?
make[2]: *** [Makefile:7321: doc/images/bootstrap-graph.png] Error 1
--8<---------------cut here---------------end--------------->8---

>>From 83287968f06487fa907ef3575cef331b415350c7 Mon Sep 17 00:00:00 2001
> Message-ID: <83287968f06487fa907ef3575cef331b415350c7.1712479964.git.janneke@gnu.org>
> In-Reply-To: <cover.1712479964.git.janneke@gnu.org>
> References: <cover.1712479964.git.janneke@gnu.org>
> From: Janneke Nieuwenhuizen <janneke@gnu.org>
> Date: Sun, 7 Apr 2024 10:03:06 +0200
> Subject: [PATCH v2 13/12] doc: Use "dejavu sans" instead of "Helvetica" or
>  "sans" in dot images.
>
> Font-dejavu is (now) an input of fontconfig.  Specifying "dejavu sans" makes
> generated images reproducible even when other fonts are installed (notably
> font-google-noto).
>
> * doc/images/bootstrap-graph.dot,
> doc/images/bootstrap-packages.dot,
> doc/images/coreutils-bag-graph.dot,
> doc/images/coreutils-graph.dot,
> doc/images/gcc-core-mesboot0-graph.dot,
> doc/images/service-graph.dot,
> doc/images/shepherd-graph.dot: Use fontname = "dejavu sans".
> * doc/guix.texi (Full-Source Bootstrap): Update gcc-core-mesboot0.dot recipe
> accordingly.
>
> Change-Id: If21d7d39d45c66de5bceafb7b825a057d540ee50

I installed this patch but got:

--8<---------------cut here---------------start------------->8---
$ make dist -j4 V=1
Makefile:7391: warning: overriding recipe for target 'doc/stamp-vti'
Makefile:5105: warning: ignoring old recipe for target 'doc/stamp-vti'
Makefile:7392: warning: overriding recipe for target 'doc/stamp-1'
Makefile:5170: warning: ignoring old recipe for target 'doc/stamp-1'
Makefile:7392: warning: overriding recipe for target 'doc/stamp-2'
Makefile:5235: warning: ignoring old recipe for target 'doc/stamp-2'
Makefile:7392: warning: overriding recipe for target 'doc/stamp-3'
Makefile:5300: warning: ignoring old recipe for target 'doc/stamp-3'
Makefile:7392: warning: overriding recipe for target 'doc/stamp-4'
Makefile:5365: warning: ignoring old recipe for target 'doc/stamp-4'
Makefile:7392: warning: overriding recipe for target 'doc/stamp-5'
Makefile:5430: warning: ignoring old recipe for target 'doc/stamp-5'
Makefile:7392: warning: overriding recipe for target 'doc/stamp-6'
Makefile:5495: warning: ignoring old recipe for target 'doc/stamp-6'
Makefile:7484: Autotools cache out of date.
Autotools cache version: 1.3.0.57430-933766.
Git version: 1.3.0.57431-732eb8.
Please run `autoreconf -vif'.
Makefile:7489: *** Cannot create reproducible tarball.  Stop.
--8<---------------cut here---------------end--------------->8---

Same story after running ‘autoreconf -vfi’, not sure why.

Ludo’.




^ permalink raw reply	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH v2 09/12] maint: Remove %%CreationDate from generated EPS files
  2024-04-08  9:41     ` Ludovic Courtès
@ 2024-04-08 17:12       ` Janneke Nieuwenhuizen
  0 siblings, 0 replies; 66+ messages in thread
From: Janneke Nieuwenhuizen @ 2024-04-08 17:12 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: 70169

Ludovic Courtès writes:

> Janneke Nieuwenhuizen <janneke@gnu.org> skribis:
>
>> * doc/local.mk (.dot.eps, png.eps): Remove %%CreationDate.  Split single shell
>> command into separate recipe lines, prefixed by $(AM_V_at).
>>
>> Change-Id: I5a03485c19c72f0c46411815c51290e52a8e5399
>> ---
>>  doc/local.mk | 12 ++++++++----
>>  1 file changed, 8 insertions(+), 4 deletions(-)
>>
>> diff --git a/doc/local.mk b/doc/local.mk
>> index c355bec8d7..60e36091ce 100644
>> --- a/doc/local.mk
>> +++ b/doc/local.mk
>> @@ -152,12 +152,16 @@ DOT_OPTIONS =					\
>>  	mv "$(srcdir)/$@.tmp" "$(srcdir)/$@"
>>  
>>  .dot.eps:
>> -	$(AM_V_DOT)$(DOT) -Teps $(DOT_OPTIONS) < "$<" > "$(srcdir)/$@.tmp"; \
>> -	mv "$(srcdir)/$@.tmp" "$(srcdir)/$@"
>> +	$(AM_V_DOT)$(DOT) -Teps $(DOT_OPTIONS) < "$<" > "$(srcdir)/$@.tmp"
>> +	$(AM_V_at)grep -v ^%%CreationDate: "$(srcdir)/$@.tmp" > "$(srcdir)/$@.tmp2"
>> +	$(AM_V_at)rm -f "$(srcdir)/$@.tmp"
>> +	$(AM_V_at)mv "$(srcdir)/$@.tmp2" "$@"
>
> Apparently ‘dot’ (GraphViz) does not emit a ‘CreationDate’ header.

Ah, good catch.

> Should we drop this change and add a line like this above the ‘mv’ line:

Probably I just copied the grep to remove it without much looking or
thinking :)

>   @if grep -q CreationDate "$@.tmp"; then false; else true; fi
>
> to be on the safe side?

Let's do that, I'm adding it as

    $(AM_V_at)! grep -q %%CreationDate "$(srcdir)/$@.tmp"

in v3.

>>  .png.eps:
>> -	$(AM_V_GEN)convert "$<" "$@-tmp.eps"; \
>> -	mv "$@-tmp.eps" "$@"
>> +	$(AM_V_GEN)convert "$<" "$@-tmp.eps"
>> +	$(AM_V_at)grep -v ^%%CreationDate: "$@-tmp.eps" > "$@-tmp2.eps"
>> +	$(AM_V_at)rm -f "$@-tmp.eps"
>> +	$(AM_V_at)mv "$@-tmp2.eps" "$@"
>
> Looking into the code of ImageMagick, I see:
>
>         timer=GetMagickTime();
>         (void) FormatMagickTime(timer,MaxTextExtent,date);
>         (void) FormatLocaleString(buffer,MaxTextExtent,
>           "%%%%CreationDate: %s\n",date);
>
> where ‘GetMagickTime’ honors ‘SOURCE_DATE_EPOCH’.  Should we set
> ‘SOURCE_DATE_EPOCH’ and avoid the ‘grep’ trick?

Good catch; and it already works.

> OTOH, an argument to keep this patch as-is is that it’ll resist to
> changes in ImageMagick/GraphViz.  So maybe the comments above aren’t
> that relevant.

Well, I like what we have now better; it's a bit sharper/cleaner anyway.

Thanks!
Janneke




^ permalink raw reply	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH v2 13/12] doc: Use "dejavu sans" instead of "Helvetica" or "sans" in dot images.
  2024-04-08 12:15     ` Ludovic Courtès
@ 2024-04-08 17:26       ` Janneke Nieuwenhuizen
  0 siblings, 0 replies; 66+ messages in thread
From: Janneke Nieuwenhuizen @ 2024-04-08 17:26 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: 70169

Ludovic Courtès writes:

> Janneke Nieuwenhuizen <janneke@gnu.org> skribis:
>
>> Janneke Nieuwenhuizen writes:
>>
>>> Note that you'll need an environment with something like
>>>
>>> guix shell -CP -m manifest.scm fontconfig font-ghostscript graphviz \
>>>     imagemagick texlive-bin
>>
>> Headsup: using the attached bonus patch the tarball reproduces for me
>> also without using a container, i.e., building it in
>>
>>     guix shell -CP -m manifest.scm fontconfig graphviz imagemagick texlive-bin
>>
>> or
>>
>>     guix shell -m manifest.scm fontconfig graphviz imagemagick texlive-bin
>>
>> now creates the same tarball for me.
>
> Ah yes, I had:
>
> /bin/sh '/home/ludo/src/guix/build-aux/missing' dot -Tpng -Gratio=.9 -Gnodesep=.005 -Granksep=.00005 -Nfontsize=9 -Nheight=.1 -Nwidth=.1 < "doc/images/bootstrap-graph.dot" > "./doc/images/bootstrap-graph.png.tmp"
> Error: fontconfig: Didn't find expected font family. Perhaps URW Type 1 fonts need installing?

Yes...and if it finds one, it could be another than DejaVu sans

>>>From 83287968f06487fa907ef3575cef331b415350c7 Mon Sep 17 00:00:00 2001
>> Message-ID: <83287968f06487fa907ef3575cef331b415350c7.1712479964.git.janneke@gnu.org>
>> In-Reply-To: <cover.1712479964.git.janneke@gnu.org>
>> References: <cover.1712479964.git.janneke@gnu.org>
>> From: Janneke Nieuwenhuizen <janneke@gnu.org>
>> Date: Sun, 7 Apr 2024 10:03:06 +0200
>> Subject: [PATCH v2 13/12] doc: Use "dejavu sans" instead of "Helvetica" or
>>  "sans" in dot images.

[..]

> I installed this patch but got:
>
> $ make dist -j4 V=1
> Makefile:7391: warning: overriding recipe for target 'doc/stamp-vti'
> Makefile:5105: warning: ignoring old recipe for target 'doc/stamp-vti'
> Makefile:7392: warning: overriding recipe for target 'doc/stamp-1'
> Makefile:5170: warning: ignoring old recipe for target 'doc/stamp-1'
> Makefile:7392: warning: overriding recipe for target 'doc/stamp-2'
> Makefile:5235: warning: ignoring old recipe for target 'doc/stamp-2'
> Makefile:7392: warning: overriding recipe for target 'doc/stamp-3'
> Makefile:5300: warning: ignoring old recipe for target 'doc/stamp-3'
> Makefile:7392: warning: overriding recipe for target 'doc/stamp-4'
> Makefile:5365: warning: ignoring old recipe for target 'doc/stamp-4'
> Makefile:7392: warning: overriding recipe for target 'doc/stamp-5'
> Makefile:5430: warning: ignoring old recipe for target 'doc/stamp-5'
> Makefile:7392: warning: overriding recipe for target 'doc/stamp-6'
> Makefile:5495: warning: ignoring old recipe for target 'doc/stamp-6'
> Makefile:7484: Autotools cache out of date.
> Autotools cache version: 1.3.0.57430-933766.
> Git version: 1.3.0.57431-732eb8.
> Please run `autoreconf -vif'.
> Makefile:7489: *** Cannot create reproducible tarball.  Stop.
>
> Same story after running ‘autoreconf -vfi’, not sure why.

Oop, yes, I see that here now too.  I'm changing the message to say:

Please run ./bootstrap; ./configure $(DIST_CONFIGURE_FLAGS)

Greetings,
Janneke




^ permalink raw reply	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH v3 00/13] Reproducible `make dist' tarball in defiance of Autotools and Gettext
  2024-04-03 19:08 [bug#70169] [PATCH 0/7] Reproducible `make dist' tarball in defiance of Autotools and Gettext Janneke Nieuwenhuizen
                   ` (8 preceding siblings ...)
  2024-04-06 21:17 ` [bug#70169] [PATCH v2 00/12] " Janneke Nieuwenhuizen
@ 2024-04-08 18:46 ` Janneke Nieuwenhuizen
  2024-04-08 18:46   ` [bug#70169] [PATCH v3 01/13] doc: Use "dejavu sans" instead of "Helvetica" or "sans" in dot images Janneke Nieuwenhuizen
                     ` (12 more replies)
  9 siblings, 13 replies; 66+ messages in thread
From: Janneke Nieuwenhuizen @ 2024-04-08 18:46 UTC (permalink / raw)
  To: 70169

V3 brings

  * Use `1' as fallback for SOURCE_DATE_EPOCH,
  * Do not remove %%CreationDate when creating EPS files.  Imagemagick's
    convert respects SOURCE_DATE_EPOCH (as long as it's not set to `0'!), and
  * Graphviz' dot does currently not insert it; add a check for that,
  * Update advice when Autotools's version is out of date to say
    ./bootstrap && ./configure ..., and
  * Use "dejavu sans" in DOT sources (already sent as v2 13/12).

I have reset wip-tarball and uploaded
<https://lilypond.org/janneke/guix/guix-1.3.0.57741-0e3053.tar.gz>.

--8<---------------cut here---------------start------------->8---
guix hash guix-1.3.0.57741-0e3053.tar.gz
1d6s9m2pcpcnq1hkxzkqklrlnqcqfib4gypylpr85nqmbn3clrq5
--8<---------------cut here---------------end--------------->8---

Note that you'll need an environment with something like:

--8<---------------cut here---------------start------------->8---
guix shell -CP -m manifest.scm fontconfig graphviz imagemagick texlive-bin
--8<---------------cut here---------------end--------------->8---

on my machine, it now also reproduces outside a container, in:

--8<---------------cut here---------------start------------->8---
guix shell -m manifest.scm fontconfig graphviz imagemagick texlive-bin
--8<---------------cut here---------------end--------------->8---

Greetings,
Janneke

Janneke Nieuwenhuizen (12):
  doc: Use "dejavu sans" instead of "Helvetica" or "sans" in dot images.
  maint: Cater for running `make dist' from a worktree.
  maint: Use reproducible timestamps and name for tarball.
  maint: Help help2man generate reproducible man-pages.
  maint: Generate AUTHORS and ChangeLog reproducibly.
  maint: Generate 'doc/version-LANG.texi' reproducibly.
  maint: Use xgettext.scm wrapper to create .PO files reproducibly.
  maint: Use reproducible Git timestamp for POT-Creation-Date.
  maint: Avoid EPS generation to fail silently, ensure reproducibility.
  maint: Avoid PNG and PDF generation to fail silently.
  maint: Reset CreationDate metadata on generated PDFs.
  maint: Ensure generated file reproducibility for dist.

Timothy Sample (1):
  maint: Generate 'doc/version.texi' reproducibly.

 Makefile.am                            | 50 +++++++++++++--
 build-aux/xgettext.scm                 | 87 +++++++++++++++++++++++++
 doc/guix.texi                          |  7 +-
 doc/images/bootstrap-graph.dot         | 52 +++++++--------
 doc/images/bootstrap-packages.dot      | 32 ++++-----
 doc/images/coreutils-bag-graph.dot     | 56 ++++++++--------
 doc/images/coreutils-graph.dot         | 18 +++---
 doc/images/gcc-core-mesboot0-graph.dot | 28 ++++----
 doc/images/service-graph.dot           | 16 ++---
 doc/images/shepherd-graph.dot          | 54 ++++++++--------
 doc/local.mk                           | 89 +++++++++++++++++++++++---
 po/doc/local.mk                        | 16 +++--
 po/guix/Makevars                       |  7 +-
 po/packages/Makevars                   | 10 ++-
 14 files changed, 372 insertions(+), 150 deletions(-)
 create mode 100755 build-aux/xgettext.scm


base-commit: 21fad13fffa3b90fdd004c6c5514ae5dfec17492
-- 
2.41.0





^ permalink raw reply	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH v3 01/13] doc: Use "dejavu sans" instead of "Helvetica" or "sans" in dot images.
  2024-04-08 18:46 ` [bug#70169] [PATCH v3 00/13] Reproducible `make dist' tarball in defiance of Autotools and Gettext Janneke Nieuwenhuizen
@ 2024-04-08 18:46   ` Janneke Nieuwenhuizen
  2024-04-08 18:46   ` [bug#70169] [PATCH v3 02/13] maint: Cater for running `make dist' from a worktree Janneke Nieuwenhuizen
                     ` (11 subsequent siblings)
  12 siblings, 0 replies; 66+ messages in thread
From: Janneke Nieuwenhuizen @ 2024-04-08 18:46 UTC (permalink / raw)
  To: 70169

Font-dejavu is (now) an input of fontconfig.  Specifying "dejavu sans" makes
generated images reproducible even when other fonts are installed (notably
font-google-noto).

* doc/images/bootstrap-graph.dot,
doc/images/bootstrap-packages.dot,
doc/images/coreutils-bag-graph.dot,
doc/images/coreutils-graph.dot,
doc/images/gcc-core-mesboot0-graph.dot,
doc/images/service-graph.dot,
doc/images/shepherd-graph.dot: Use fontname = "dejavu sans".
* doc/guix.texi (Full-Source Bootstrap): Update gcc-core-mesboot0.dot recipe
accordingly.

Change-Id: If21d7d39d45c66de5bceafb7b825a057d540ee50
---
 doc/guix.texi                          |  7 +++-
 doc/images/bootstrap-graph.dot         | 52 ++++++++++++------------
 doc/images/bootstrap-packages.dot      | 32 +++++++--------
 doc/images/coreutils-bag-graph.dot     | 56 +++++++++++++-------------
 doc/images/coreutils-graph.dot         | 18 ++++-----
 doc/images/gcc-core-mesboot0-graph.dot | 28 ++++++-------
 doc/images/service-graph.dot           | 16 ++++----
 doc/images/shepherd-graph.dot          | 54 ++++++++++++-------------
 8 files changed, 134 insertions(+), 129 deletions(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index 5827e0de14..f96feae8dc 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -47865,7 +47865,12 @@ Full-Source Bootstrap
 @code{gcc-core-mesboot0}, the bootstrap compiler used for the
 traditional bootstrap of the rest of the Guix System.
 
-@c ./pre-inst-env guix graph -e '(@@ (gnu packages commencement) gcc-core-mesboot0)' | sed -re 's,((bootstrap-seeds|guile-bootstrap).*shape =) box,\1 ellipse,' > doc/images/gcc-core-mesboot0-graph.dot
+@c ./pre-inst-env guix graph \
+@c   -e '(@@ (gnu packages commencement) gcc-core-mesboot0)' \
+@c   | sed -r \
+@c     -e 's,((bootstrap-seeds|guile-bootstrap).*shape =) box,\1 ellipse,' \
+@c     -e 's,fontname = sans,fontname = "dejavu sans",' \
+@c   > doc/images/gcc-core-mesboot0-graph.dot
 @image{images/gcc-core-mesboot0-graph,6in,,Dependency graph of gcc-core-mesboot0}
 
 Work is ongoing to bring these bootstraps to the @code{arm-linux} and
diff --git a/doc/images/bootstrap-graph.dot b/doc/images/bootstrap-graph.dot
index 06d7f29c7a..317ee25749 100644
--- a/doc/images/bootstrap-graph.dot
+++ b/doc/images/bootstrap-graph.dot
@@ -1,7 +1,7 @@
 # Obtained by running "nix-store --graph" on the first GCC derivation.
 
 digraph G {
-"/nix/store/x60397za40lx0n88f51a2csfdq5xvb19-gcc-bootstrap-0.drv" [label = "gcc-bootstrap-0.drv", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
+"/nix/store/x60397za40lx0n88f51a2csfdq5xvb19-gcc-bootstrap-0.drv" [label = "gcc-bootstrap-0.drv", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
 "/nix/store/3iawic1z95112yfz5y9xdp66qbxxr8l1-tar" -> "/nix/store/x60397za40lx0n88f51a2csfdq5xvb19-gcc-bootstrap-0.drv" [color = "black"];
 "/nix/store/4sv9xhcjap6byca130fzpzzjalb7iixv-glibc-bootstrap-0.drv" -> "/nix/store/x60397za40lx0n88f51a2csfdq5xvb19-gcc-bootstrap-0.drv" [color = "red"];
 "/nix/store/8cc81w6m04csm52y247xj3gydrbz2niv-xz" -> "/nix/store/x60397za40lx0n88f51a2csfdq5xvb19-gcc-bootstrap-0.drv" [color = "green"];
@@ -11,8 +11,8 @@ digraph G {
 "/nix/store/r3dsy5j2c16sv26raala6kahff7w18hb-gcc-bootstrap-0-guile-builder" -> "/nix/store/x60397za40lx0n88f51a2csfdq5xvb19-gcc-bootstrap-0.drv" [color = "black"];
 "/nix/store/x9x1a86flhx15cams7235rfy5gc5cww1-guile-bootstrap-2.0.drv" -> "/nix/store/x60397za40lx0n88f51a2csfdq5xvb19-gcc-bootstrap-0.drv" [color = "red"];
 "/nix/store/y4n7rzysx6qz3p0n91dw9qz5w93l6iqv-module-import-compiled.drv" -> "/nix/store/x60397za40lx0n88f51a2csfdq5xvb19-gcc-bootstrap-0.drv" [color = "green"];
-"/nix/store/3iawic1z95112yfz5y9xdp66qbxxr8l1-tar" [label = "tar", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
-"/nix/store/4sv9xhcjap6byca130fzpzzjalb7iixv-glibc-bootstrap-0.drv" [label = "glibc-bootstrap-0.drv", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
+"/nix/store/3iawic1z95112yfz5y9xdp66qbxxr8l1-tar" [label = "tar", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
+"/nix/store/4sv9xhcjap6byca130fzpzzjalb7iixv-glibc-bootstrap-0.drv" [label = "glibc-bootstrap-0.drv", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
 "/nix/store/3iawic1z95112yfz5y9xdp66qbxxr8l1-tar" -> "/nix/store/4sv9xhcjap6byca130fzpzzjalb7iixv-glibc-bootstrap-0.drv" [color = "blue"];
 "/nix/store/8cc81w6m04csm52y247xj3gydrbz2niv-xz" -> "/nix/store/4sv9xhcjap6byca130fzpzzjalb7iixv-glibc-bootstrap-0.drv" [color = "magenta"];
 "/nix/store/8iivk9hpnps21yrbq3zzsxgzv9ixbhgh-glibc-bootstrap-0-guile-builder" -> "/nix/store/4sv9xhcjap6byca130fzpzzjalb7iixv-glibc-bootstrap-0.drv" [color = "burlywood"];
@@ -20,63 +20,63 @@ digraph G {
 "/nix/store/wdwrkg02gn28bkpbxgdb2nv558v8s3ji-glibc-2.17.tar.xz.drv" -> "/nix/store/4sv9xhcjap6byca130fzpzzjalb7iixv-glibc-bootstrap-0.drv" [color = "red"];
 "/nix/store/x9x1a86flhx15cams7235rfy5gc5cww1-guile-bootstrap-2.0.drv" -> "/nix/store/4sv9xhcjap6byca130fzpzzjalb7iixv-glibc-bootstrap-0.drv" [color = "green"];
 "/nix/store/y4n7rzysx6qz3p0n91dw9qz5w93l6iqv-module-import-compiled.drv" -> "/nix/store/4sv9xhcjap6byca130fzpzzjalb7iixv-glibc-bootstrap-0.drv" [color = "blue"];
-"/nix/store/8cc81w6m04csm52y247xj3gydrbz2niv-xz" [label = "xz", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
-"/nix/store/8iivk9hpnps21yrbq3zzsxgzv9ixbhgh-glibc-bootstrap-0-guile-builder" [label = "glibc-bootstrap-0-guile-builder", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
+"/nix/store/8cc81w6m04csm52y247xj3gydrbz2niv-xz" [label = "xz", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
+"/nix/store/8iivk9hpnps21yrbq3zzsxgzv9ixbhgh-glibc-bootstrap-0-guile-builder" [label = "glibc-bootstrap-0-guile-builder", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
 "/nix/store/3iawic1z95112yfz5y9xdp66qbxxr8l1-tar" -> "/nix/store/8iivk9hpnps21yrbq3zzsxgzv9ixbhgh-glibc-bootstrap-0-guile-builder" [color = "magenta"];
 "/nix/store/8cc81w6m04csm52y247xj3gydrbz2niv-xz" -> "/nix/store/8iivk9hpnps21yrbq3zzsxgzv9ixbhgh-glibc-bootstrap-0-guile-builder" [color = "burlywood"];
-"/nix/store/96yx6013dhggr3mpg5ayxv8dm9mv2ghv-module-import.drv" [label = "module-import.drv", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
+"/nix/store/96yx6013dhggr3mpg5ayxv8dm9mv2ghv-module-import.drv" [label = "module-import.drv", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
 "/nix/store/9zrdfvnrpljryr82an2n1mj6bh2przhn-module-import-guile-builder" -> "/nix/store/96yx6013dhggr3mpg5ayxv8dm9mv2ghv-module-import.drv" [color = "black"];
 "/nix/store/mj7amprgvl2rgash1nr0v64apik8vc7f-utils.scm" -> "/nix/store/96yx6013dhggr3mpg5ayxv8dm9mv2ghv-module-import.drv" [color = "red"];
 "/nix/store/x9x1a86flhx15cams7235rfy5gc5cww1-guile-bootstrap-2.0.drv" -> "/nix/store/96yx6013dhggr3mpg5ayxv8dm9mv2ghv-module-import.drv" [color = "green"];
-"/nix/store/9zrdfvnrpljryr82an2n1mj6bh2przhn-module-import-guile-builder" [label = "module-import-guile-builder", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
+"/nix/store/9zrdfvnrpljryr82an2n1mj6bh2przhn-module-import-guile-builder" [label = "module-import-guile-builder", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
 "/nix/store/mj7amprgvl2rgash1nr0v64apik8vc7f-utils.scm" -> "/nix/store/9zrdfvnrpljryr82an2n1mj6bh2przhn-module-import-guile-builder" [color = "blue"];
-"/nix/store/fl9cwcczfdv73vq5sr0c4rd5hqzrgvac-gcc-4.7.2.tar.xz.drv" [label = "gcc-4.7.2.tar.xz.drv", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
+"/nix/store/fl9cwcczfdv73vq5sr0c4rd5hqzrgvac-gcc-4.7.2.tar.xz.drv" [label = "gcc-4.7.2.tar.xz.drv", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
 "/nix/store/6kslnirvm26fij7wpjqbw617ri4gf5x5-gcc-4.7.2.tar.xz-guile-builder" -> "/nix/store/fl9cwcczfdv73vq5sr0c4rd5hqzrgvac-gcc-4.7.2.tar.xz.drv" [color = "magenta"];
 "/nix/store/kvk5wp8c9rzvvrmq5fv5r58l78q8i6ch-module-import.drv" -> "/nix/store/fl9cwcczfdv73vq5sr0c4rd5hqzrgvac-gcc-4.7.2.tar.xz.drv" [color = "burlywood"];
 "/nix/store/pzv319p3q7raiad7nq7fcdw9rafzp14k-module-import-compiled.drv" -> "/nix/store/fl9cwcczfdv73vq5sr0c4rd5hqzrgvac-gcc-4.7.2.tar.xz.drv" [color = "black"];
 "/nix/store/x9x1a86flhx15cams7235rfy5gc5cww1-guile-bootstrap-2.0.drv" -> "/nix/store/fl9cwcczfdv73vq5sr0c4rd5hqzrgvac-gcc-4.7.2.tar.xz.drv" [color = "red"];
-"/nix/store/6kslnirvm26fij7wpjqbw617ri4gf5x5-gcc-4.7.2.tar.xz-guile-builder" [label = "gcc-4.7.2.tar.xz-guile-builder", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
-"/nix/store/jaaqdl979wjirnbxz1jqsipg22nva5n4-bash" [label = "bash", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
-"/nix/store/kvk5wp8c9rzvvrmq5fv5r58l78q8i6ch-module-import.drv" [label = "module-import.drv", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
+"/nix/store/6kslnirvm26fij7wpjqbw617ri4gf5x5-gcc-4.7.2.tar.xz-guile-builder" [label = "gcc-4.7.2.tar.xz-guile-builder", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
+"/nix/store/jaaqdl979wjirnbxz1jqsipg22nva5n4-bash" [label = "bash", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
+"/nix/store/kvk5wp8c9rzvvrmq5fv5r58l78q8i6ch-module-import.drv" [label = "module-import.drv", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
 "/nix/store/abagrdbdndkd0y2dwk0nw1gw0g0rhl2z-ftp-client.scm" -> "/nix/store/kvk5wp8c9rzvvrmq5fv5r58l78q8i6ch-module-import.drv" [color = "green"];
 "/nix/store/dwd2iwd1ban8a8rmx568dpgrbkkidfhw-download.scm" -> "/nix/store/kvk5wp8c9rzvvrmq5fv5r58l78q8i6ch-module-import.drv" [color = "blue"];
 "/nix/store/mj7amprgvl2rgash1nr0v64apik8vc7f-utils.scm" -> "/nix/store/kvk5wp8c9rzvvrmq5fv5r58l78q8i6ch-module-import.drv" [color = "magenta"];
 "/nix/store/x9x1a86flhx15cams7235rfy5gc5cww1-guile-bootstrap-2.0.drv" -> "/nix/store/kvk5wp8c9rzvvrmq5fv5r58l78q8i6ch-module-import.drv" [color = "burlywood"];
 "/nix/store/yfixjx2gpvsi5dhkpdx5gj6gx0xdk1c8-module-import-guile-builder" -> "/nix/store/kvk5wp8c9rzvvrmq5fv5r58l78q8i6ch-module-import.drv" [color = "black"];
-"/nix/store/abagrdbdndkd0y2dwk0nw1gw0g0rhl2z-ftp-client.scm" [label = "ftp-client.scm", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
-"/nix/store/dwd2iwd1ban8a8rmx568dpgrbkkidfhw-download.scm" [label = "download.scm", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
-"/nix/store/mj7amprgvl2rgash1nr0v64apik8vc7f-utils.scm" [label = "utils.scm", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
-"/nix/store/pzv319p3q7raiad7nq7fcdw9rafzp14k-module-import-compiled.drv" [label = "module-import-compiled.drv", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
+"/nix/store/abagrdbdndkd0y2dwk0nw1gw0g0rhl2z-ftp-client.scm" [label = "ftp-client.scm", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
+"/nix/store/dwd2iwd1ban8a8rmx568dpgrbkkidfhw-download.scm" [label = "download.scm", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
+"/nix/store/mj7amprgvl2rgash1nr0v64apik8vc7f-utils.scm" [label = "utils.scm", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
+"/nix/store/pzv319p3q7raiad7nq7fcdw9rafzp14k-module-import-compiled.drv" [label = "module-import-compiled.drv", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
 "/nix/store/98gzqlgpm4gxrpl5bzykpqbwrx8ckx8l-module-import-compiled-guile-builder" -> "/nix/store/pzv319p3q7raiad7nq7fcdw9rafzp14k-module-import-compiled.drv" [color = "red"];
 "/nix/store/kvk5wp8c9rzvvrmq5fv5r58l78q8i6ch-module-import.drv" -> "/nix/store/pzv319p3q7raiad7nq7fcdw9rafzp14k-module-import-compiled.drv" [color = "green"];
 "/nix/store/x9x1a86flhx15cams7235rfy5gc5cww1-guile-bootstrap-2.0.drv" -> "/nix/store/pzv319p3q7raiad7nq7fcdw9rafzp14k-module-import-compiled.drv" [color = "blue"];
-"/nix/store/98gzqlgpm4gxrpl5bzykpqbwrx8ckx8l-module-import-compiled-guile-builder" [label = "module-import-compiled-guile-builder", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
-"/nix/store/r3dsy5j2c16sv26raala6kahff7w18hb-gcc-bootstrap-0-guile-builder" [label = "gcc-bootstrap-0-guile-builder", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
+"/nix/store/98gzqlgpm4gxrpl5bzykpqbwrx8ckx8l-module-import-compiled-guile-builder" [label = "module-import-compiled-guile-builder", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
+"/nix/store/r3dsy5j2c16sv26raala6kahff7w18hb-gcc-bootstrap-0-guile-builder" [label = "gcc-bootstrap-0-guile-builder", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
 "/nix/store/3iawic1z95112yfz5y9xdp66qbxxr8l1-tar" -> "/nix/store/r3dsy5j2c16sv26raala6kahff7w18hb-gcc-bootstrap-0-guile-builder" [color = "magenta"];
 "/nix/store/8cc81w6m04csm52y247xj3gydrbz2niv-xz" -> "/nix/store/r3dsy5j2c16sv26raala6kahff7w18hb-gcc-bootstrap-0-guile-builder" [color = "burlywood"];
 "/nix/store/jaaqdl979wjirnbxz1jqsipg22nva5n4-bash" -> "/nix/store/r3dsy5j2c16sv26raala6kahff7w18hb-gcc-bootstrap-0-guile-builder" [color = "black"];
-"/nix/store/wdwrkg02gn28bkpbxgdb2nv558v8s3ji-glibc-2.17.tar.xz.drv" [label = "glibc-2.17.tar.xz.drv", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
+"/nix/store/wdwrkg02gn28bkpbxgdb2nv558v8s3ji-glibc-2.17.tar.xz.drv" [label = "glibc-2.17.tar.xz.drv", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
 "/nix/store/kvk5wp8c9rzvvrmq5fv5r58l78q8i6ch-module-import.drv" -> "/nix/store/wdwrkg02gn28bkpbxgdb2nv558v8s3ji-glibc-2.17.tar.xz.drv" [color = "red"];
 "/nix/store/pzv319p3q7raiad7nq7fcdw9rafzp14k-module-import-compiled.drv" -> "/nix/store/wdwrkg02gn28bkpbxgdb2nv558v8s3ji-glibc-2.17.tar.xz.drv" [color = "green"];
 "/nix/store/q7as3jddipj4g6si8lawrdbkjg0zcjvg-glibc-2.17.tar.xz-guile-builder" -> "/nix/store/wdwrkg02gn28bkpbxgdb2nv558v8s3ji-glibc-2.17.tar.xz.drv" [color = "blue"];
 "/nix/store/x9x1a86flhx15cams7235rfy5gc5cww1-guile-bootstrap-2.0.drv" -> "/nix/store/wdwrkg02gn28bkpbxgdb2nv558v8s3ji-glibc-2.17.tar.xz.drv" [color = "magenta"];
-"/nix/store/q7as3jddipj4g6si8lawrdbkjg0zcjvg-glibc-2.17.tar.xz-guile-builder" [label = "glibc-2.17.tar.xz-guile-builder", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
-"/nix/store/x9x1a86flhx15cams7235rfy5gc5cww1-guile-bootstrap-2.0.drv" [label = "guile-bootstrap-2.0.drv", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
+"/nix/store/q7as3jddipj4g6si8lawrdbkjg0zcjvg-glibc-2.17.tar.xz-guile-builder" [label = "glibc-2.17.tar.xz-guile-builder", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
+"/nix/store/x9x1a86flhx15cams7235rfy5gc5cww1-guile-bootstrap-2.0.drv" [label = "guile-bootstrap-2.0.drv", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
 "/nix/store/bplka3yqdg8prqq3zdxza6wxlkjdhr2g-build-bootstrap-guile.sh" -> "/nix/store/x9x1a86flhx15cams7235rfy5gc5cww1-guile-bootstrap-2.0.drv" [color = "burlywood"];
 "/nix/store/jaaqdl979wjirnbxz1jqsipg22nva5n4-bash" -> "/nix/store/x9x1a86flhx15cams7235rfy5gc5cww1-guile-bootstrap-2.0.drv" [color = "black"];
-"/nix/store/bplka3yqdg8prqq3zdxza6wxlkjdhr2g-build-bootstrap-guile.sh" [label = "build-bootstrap-guile.sh", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
+"/nix/store/bplka3yqdg8prqq3zdxza6wxlkjdhr2g-build-bootstrap-guile.sh" [label = "build-bootstrap-guile.sh", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
 "/nix/store/3iawic1z95112yfz5y9xdp66qbxxr8l1-tar" -> "/nix/store/bplka3yqdg8prqq3zdxza6wxlkjdhr2g-build-bootstrap-guile.sh" [color = "red"];
 "/nix/store/4xv2y0m6zr2lgi8x8pcb3zxjqxsz69kj-mkdir" -> "/nix/store/bplka3yqdg8prqq3zdxza6wxlkjdhr2g-build-bootstrap-guile.sh" [color = "green"];
 "/nix/store/8cc81w6m04csm52y247xj3gydrbz2niv-xz" -> "/nix/store/bplka3yqdg8prqq3zdxza6wxlkjdhr2g-build-bootstrap-guile.sh" [color = "blue"];
 "/nix/store/c450lqvaaz3ngx9pfiiiw55rqq6ssfda-guile-2.0.7.tar.xz" -> "/nix/store/bplka3yqdg8prqq3zdxza6wxlkjdhr2g-build-bootstrap-guile.sh" [color = "magenta"];
-"/nix/store/4xv2y0m6zr2lgi8x8pcb3zxjqxsz69kj-mkdir" [label = "mkdir", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
-"/nix/store/c450lqvaaz3ngx9pfiiiw55rqq6ssfda-guile-2.0.7.tar.xz" [label = "guile-2.0.7.tar.xz", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
-"/nix/store/y4n7rzysx6qz3p0n91dw9qz5w93l6iqv-module-import-compiled.drv" [label = "module-import-compiled.drv", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
+"/nix/store/4xv2y0m6zr2lgi8x8pcb3zxjqxsz69kj-mkdir" [label = "mkdir", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
+"/nix/store/c450lqvaaz3ngx9pfiiiw55rqq6ssfda-guile-2.0.7.tar.xz" [label = "guile-2.0.7.tar.xz", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
+"/nix/store/y4n7rzysx6qz3p0n91dw9qz5w93l6iqv-module-import-compiled.drv" [label = "module-import-compiled.drv", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
 "/nix/store/8jiqjlb6zxjys16ca7s6jvxcc620c71k-module-import-compiled-guile-builder" -> "/nix/store/y4n7rzysx6qz3p0n91dw9qz5w93l6iqv-module-import-compiled.drv" [color = "burlywood"];
 "/nix/store/96yx6013dhggr3mpg5ayxv8dm9mv2ghv-module-import.drv" -> "/nix/store/y4n7rzysx6qz3p0n91dw9qz5w93l6iqv-module-import-compiled.drv" [color = "black"];
 "/nix/store/x9x1a86flhx15cams7235rfy5gc5cww1-guile-bootstrap-2.0.drv" -> "/nix/store/y4n7rzysx6qz3p0n91dw9qz5w93l6iqv-module-import-compiled.drv" [color = "red"];
-"/nix/store/8jiqjlb6zxjys16ca7s6jvxcc620c71k-module-import-compiled-guile-builder" [label = "module-import-compiled-guile-builder", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
-"/nix/store/yfixjx2gpvsi5dhkpdx5gj6gx0xdk1c8-module-import-guile-builder" [label = "module-import-guile-builder", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
+"/nix/store/8jiqjlb6zxjys16ca7s6jvxcc620c71k-module-import-compiled-guile-builder" [label = "module-import-compiled-guile-builder", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
+"/nix/store/yfixjx2gpvsi5dhkpdx5gj6gx0xdk1c8-module-import-guile-builder" [label = "module-import-guile-builder", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
 "/nix/store/abagrdbdndkd0y2dwk0nw1gw0g0rhl2z-ftp-client.scm" -> "/nix/store/yfixjx2gpvsi5dhkpdx5gj6gx0xdk1c8-module-import-guile-builder" [color = "green"];
 "/nix/store/dwd2iwd1ban8a8rmx568dpgrbkkidfhw-download.scm" -> "/nix/store/yfixjx2gpvsi5dhkpdx5gj6gx0xdk1c8-module-import-guile-builder" [color = "blue"];
 "/nix/store/mj7amprgvl2rgash1nr0v64apik8vc7f-utils.scm" -> "/nix/store/yfixjx2gpvsi5dhkpdx5gj6gx0xdk1c8-module-import-guile-builder" [color = "magenta"];
diff --git a/doc/images/bootstrap-packages.dot b/doc/images/bootstrap-packages.dot
index 8b2df068a8..579bbcd00f 100644
--- a/doc/images/bootstrap-packages.dot
+++ b/doc/images/bootstrap-packages.dot
@@ -1,5 +1,5 @@
 digraph "Guix bag" {
-  "/gnu/store/aymf6jlxxpwgr71rkiz24m646nqsyii6-glibc-intermediate-2.24.drv" [label = "glibc-intermediate-2.24", shape = box, fontname = Helvetica];
+  "/gnu/store/aymf6jlxxpwgr71rkiz24m646nqsyii6-glibc-intermediate-2.24.drv" [label = "glibc-intermediate-2.24", shape = box, fontname = "dejavu sans"];
   "/gnu/store/aymf6jlxxpwgr71rkiz24m646nqsyii6-glibc-intermediate-2.24.drv" -> "/gnu/store/wx8ifbb7x22cl4998fyldsr24fcv18j3-texinfo-6.3.drv" [color = magenta];
   "/gnu/store/aymf6jlxxpwgr71rkiz24m646nqsyii6-glibc-intermediate-2.24.drv" -> "/gnu/store/ccj3as3258l70lmphi48hs7n017wv75s-perl-boot0-5.24.0.drv" [color = magenta];
   "/gnu/store/aymf6jlxxpwgr71rkiz24m646nqsyii6-glibc-intermediate-2.24.drv" -> "/gnu/store/w9adgzgdqkwz0w13zxf2fn363v9wcllc-gcc-cross-boot0-4.9.4.drv" [color = magenta];
@@ -16,7 +16,7 @@ digraph "Guix bag" {
   "/gnu/store/aymf6jlxxpwgr71rkiz24m646nqsyii6-glibc-intermediate-2.24.drv" -> "/gnu/store/jxlg2pb4bhxjld9kimc0vgc1pvgifzag-gcc-bootstrap-0.drv" [color = magenta];
   "/gnu/store/aymf6jlxxpwgr71rkiz24m646nqsyii6-glibc-intermediate-2.24.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = magenta];
   "/gnu/store/aymf6jlxxpwgr71rkiz24m646nqsyii6-glibc-intermediate-2.24.drv" -> "/gnu/store/5syba2bxhh8z79jhq83fzy8fxcx5xb4s-linux-libre-headers-4.4.18.drv" [color = magenta];
-  "/gnu/store/wx8ifbb7x22cl4998fyldsr24fcv18j3-texinfo-6.3.drv" [label = "texinfo-6.3", shape = box, fontname = Helvetica];
+  "/gnu/store/wx8ifbb7x22cl4998fyldsr24fcv18j3-texinfo-6.3.drv" [label = "texinfo-6.3", shape = box, fontname = "dejavu sans"];
   "/gnu/store/wx8ifbb7x22cl4998fyldsr24fcv18j3-texinfo-6.3.drv" -> "/gnu/store/1jpld53g41rzv2bmjp6v9mckmyw75vs3-make-boot0-4.2.1.drv" [color = cyan3];
   "/gnu/store/wx8ifbb7x22cl4998fyldsr24fcv18j3-texinfo-6.3.drv" -> "/gnu/store/zpphawi07xidhfs2dja3w7hmnfp99j02-diffutils-boot0-3.5.drv" [color = cyan3];
   "/gnu/store/wx8ifbb7x22cl4998fyldsr24fcv18j3-texinfo-6.3.drv" -> "/gnu/store/m4900ip34w4rcgn5620iqdi1wv198d9s-findutils-boot0-4.6.0.drv" [color = cyan3];
@@ -27,25 +27,25 @@ digraph "Guix bag" {
   "/gnu/store/wx8ifbb7x22cl4998fyldsr24fcv18j3-texinfo-6.3.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = cyan3];
   "/gnu/store/wx8ifbb7x22cl4998fyldsr24fcv18j3-texinfo-6.3.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = cyan3];
   "/gnu/store/wx8ifbb7x22cl4998fyldsr24fcv18j3-texinfo-6.3.drv" -> "/gnu/store/ccj3as3258l70lmphi48hs7n017wv75s-perl-boot0-5.24.0.drv" [color = cyan3];
-  "/gnu/store/1jpld53g41rzv2bmjp6v9mckmyw75vs3-make-boot0-4.2.1.drv" [label = "make-boot0-4.2.1", shape = box, fontname = Helvetica];
+  "/gnu/store/1jpld53g41rzv2bmjp6v9mckmyw75vs3-make-boot0-4.2.1.drv" [label = "make-boot0-4.2.1", shape = box, fontname = "dejavu sans"];
   "/gnu/store/1jpld53g41rzv2bmjp6v9mckmyw75vs3-make-boot0-4.2.1.drv" -> "/gnu/store/wda0p45jlbzg6w9j8zxw2sd11n2a4pbv-glibc-bootstrap-0.drv" [color = dimgrey];
   "/gnu/store/1jpld53g41rzv2bmjp6v9mckmyw75vs3-make-boot0-4.2.1.drv" -> "/gnu/store/jxlg2pb4bhxjld9kimc0vgc1pvgifzag-gcc-bootstrap-0.drv" [color = dimgrey];
   "/gnu/store/1jpld53g41rzv2bmjp6v9mckmyw75vs3-make-boot0-4.2.1.drv" -> "/gnu/store/wv8sf8h4n9s5cdya223iy2wp3alr92x8-binutils-bootstrap-0.drv" [color = dimgrey];
   "/gnu/store/1jpld53g41rzv2bmjp6v9mckmyw75vs3-make-boot0-4.2.1.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = dimgrey];
   "/gnu/store/1jpld53g41rzv2bmjp6v9mckmyw75vs3-make-boot0-4.2.1.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = dimgrey];
-  "/gnu/store/wda0p45jlbzg6w9j8zxw2sd11n2a4pbv-glibc-bootstrap-0.drv" [label = "glibc-bootstrap-0", shape = box, fontname = Helvetica];
-  "/gnu/store/jxlg2pb4bhxjld9kimc0vgc1pvgifzag-gcc-bootstrap-0.drv" [label = "gcc-bootstrap-0", shape = box, fontname = Helvetica];
+  "/gnu/store/wda0p45jlbzg6w9j8zxw2sd11n2a4pbv-glibc-bootstrap-0.drv" [label = "glibc-bootstrap-0", shape = box, fontname = "dejavu sans"];
+  "/gnu/store/jxlg2pb4bhxjld9kimc0vgc1pvgifzag-gcc-bootstrap-0.drv" [label = "gcc-bootstrap-0", shape = box, fontname = "dejavu sans"];
   "/gnu/store/jxlg2pb4bhxjld9kimc0vgc1pvgifzag-gcc-bootstrap-0.drv" -> "/gnu/store/wda0p45jlbzg6w9j8zxw2sd11n2a4pbv-glibc-bootstrap-0.drv" [color = darkseagreen];
-  "/gnu/store/wv8sf8h4n9s5cdya223iy2wp3alr92x8-binutils-bootstrap-0.drv" [label = "binutils-bootstrap-0", shape = box, fontname = Helvetica];
-  "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [label = "bootstrap-binaries-0", shape = box, fontname = Helvetica];
-  "/gnu/store/zpphawi07xidhfs2dja3w7hmnfp99j02-diffutils-boot0-3.5.drv" [label = "diffutils-boot0-3.5", shape = box, fontname = Helvetica];
+  "/gnu/store/wv8sf8h4n9s5cdya223iy2wp3alr92x8-binutils-bootstrap-0.drv" [label = "binutils-bootstrap-0", shape = box, fontname = "dejavu sans"];
+  "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [label = "bootstrap-binaries-0", shape = box, fontname = "dejavu sans"];
+  "/gnu/store/zpphawi07xidhfs2dja3w7hmnfp99j02-diffutils-boot0-3.5.drv" [label = "diffutils-boot0-3.5", shape = box, fontname = "dejavu sans"];
   "/gnu/store/zpphawi07xidhfs2dja3w7hmnfp99j02-diffutils-boot0-3.5.drv" -> "/gnu/store/1jpld53g41rzv2bmjp6v9mckmyw75vs3-make-boot0-4.2.1.drv" [color = blue];
   "/gnu/store/zpphawi07xidhfs2dja3w7hmnfp99j02-diffutils-boot0-3.5.drv" -> "/gnu/store/wda0p45jlbzg6w9j8zxw2sd11n2a4pbv-glibc-bootstrap-0.drv" [color = blue];
   "/gnu/store/zpphawi07xidhfs2dja3w7hmnfp99j02-diffutils-boot0-3.5.drv" -> "/gnu/store/jxlg2pb4bhxjld9kimc0vgc1pvgifzag-gcc-bootstrap-0.drv" [color = blue];
   "/gnu/store/zpphawi07xidhfs2dja3w7hmnfp99j02-diffutils-boot0-3.5.drv" -> "/gnu/store/wv8sf8h4n9s5cdya223iy2wp3alr92x8-binutils-bootstrap-0.drv" [color = blue];
   "/gnu/store/zpphawi07xidhfs2dja3w7hmnfp99j02-diffutils-boot0-3.5.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = blue];
   "/gnu/store/zpphawi07xidhfs2dja3w7hmnfp99j02-diffutils-boot0-3.5.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = blue];
-  "/gnu/store/m4900ip34w4rcgn5620iqdi1wv198d9s-findutils-boot0-4.6.0.drv" [label = "findutils-boot0-4.6.0", shape = box, fontname = Helvetica];
+  "/gnu/store/m4900ip34w4rcgn5620iqdi1wv198d9s-findutils-boot0-4.6.0.drv" [label = "findutils-boot0-4.6.0", shape = box, fontname = "dejavu sans"];
   "/gnu/store/m4900ip34w4rcgn5620iqdi1wv198d9s-findutils-boot0-4.6.0.drv" -> "/gnu/store/1jpld53g41rzv2bmjp6v9mckmyw75vs3-make-boot0-4.2.1.drv" [color = blue];
   "/gnu/store/m4900ip34w4rcgn5620iqdi1wv198d9s-findutils-boot0-4.6.0.drv" -> "/gnu/store/zpphawi07xidhfs2dja3w7hmnfp99j02-diffutils-boot0-3.5.drv" [color = blue];
   "/gnu/store/m4900ip34w4rcgn5620iqdi1wv198d9s-findutils-boot0-4.6.0.drv" -> "/gnu/store/wda0p45jlbzg6w9j8zxw2sd11n2a4pbv-glibc-bootstrap-0.drv" [color = blue];
@@ -53,14 +53,14 @@ digraph "Guix bag" {
   "/gnu/store/m4900ip34w4rcgn5620iqdi1wv198d9s-findutils-boot0-4.6.0.drv" -> "/gnu/store/wv8sf8h4n9s5cdya223iy2wp3alr92x8-binutils-bootstrap-0.drv" [color = blue];
   "/gnu/store/m4900ip34w4rcgn5620iqdi1wv198d9s-findutils-boot0-4.6.0.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = blue];
   "/gnu/store/m4900ip34w4rcgn5620iqdi1wv198d9s-findutils-boot0-4.6.0.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = blue];
-  "/gnu/store/nwzyr3xskw0ms8cndffsfvhvm5xz96pc-file-boot0-5.28.drv" [label = "file-boot0-5.28", shape = box, fontname = Helvetica];
+  "/gnu/store/nwzyr3xskw0ms8cndffsfvhvm5xz96pc-file-boot0-5.28.drv" [label = "file-boot0-5.28", shape = box, fontname = "dejavu sans"];
   "/gnu/store/nwzyr3xskw0ms8cndffsfvhvm5xz96pc-file-boot0-5.28.drv" -> "/gnu/store/1jpld53g41rzv2bmjp6v9mckmyw75vs3-make-boot0-4.2.1.drv" [color = darkgoldenrod];
   "/gnu/store/nwzyr3xskw0ms8cndffsfvhvm5xz96pc-file-boot0-5.28.drv" -> "/gnu/store/wda0p45jlbzg6w9j8zxw2sd11n2a4pbv-glibc-bootstrap-0.drv" [color = darkgoldenrod];
   "/gnu/store/nwzyr3xskw0ms8cndffsfvhvm5xz96pc-file-boot0-5.28.drv" -> "/gnu/store/jxlg2pb4bhxjld9kimc0vgc1pvgifzag-gcc-bootstrap-0.drv" [color = darkgoldenrod];
   "/gnu/store/nwzyr3xskw0ms8cndffsfvhvm5xz96pc-file-boot0-5.28.drv" -> "/gnu/store/wv8sf8h4n9s5cdya223iy2wp3alr92x8-binutils-bootstrap-0.drv" [color = darkgoldenrod];
   "/gnu/store/nwzyr3xskw0ms8cndffsfvhvm5xz96pc-file-boot0-5.28.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = darkgoldenrod];
   "/gnu/store/nwzyr3xskw0ms8cndffsfvhvm5xz96pc-file-boot0-5.28.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = darkgoldenrod];
-  "/gnu/store/ccj3as3258l70lmphi48hs7n017wv75s-perl-boot0-5.24.0.drv" [label = "perl-boot0-5.24.0", shape = box, fontname = Helvetica];
+  "/gnu/store/ccj3as3258l70lmphi48hs7n017wv75s-perl-boot0-5.24.0.drv" [label = "perl-boot0-5.24.0", shape = box, fontname = "dejavu sans"];
   "/gnu/store/ccj3as3258l70lmphi48hs7n017wv75s-perl-boot0-5.24.0.drv" -> "/gnu/store/1jpld53g41rzv2bmjp6v9mckmyw75vs3-make-boot0-4.2.1.drv" [color = peachpuff4];
   "/gnu/store/ccj3as3258l70lmphi48hs7n017wv75s-perl-boot0-5.24.0.drv" -> "/gnu/store/zpphawi07xidhfs2dja3w7hmnfp99j02-diffutils-boot0-3.5.drv" [color = peachpuff4];
   "/gnu/store/ccj3as3258l70lmphi48hs7n017wv75s-perl-boot0-5.24.0.drv" -> "/gnu/store/m4900ip34w4rcgn5620iqdi1wv198d9s-findutils-boot0-4.6.0.drv" [color = peachpuff4];
@@ -70,7 +70,7 @@ digraph "Guix bag" {
   "/gnu/store/ccj3as3258l70lmphi48hs7n017wv75s-perl-boot0-5.24.0.drv" -> "/gnu/store/wv8sf8h4n9s5cdya223iy2wp3alr92x8-binutils-bootstrap-0.drv" [color = peachpuff4];
   "/gnu/store/ccj3as3258l70lmphi48hs7n017wv75s-perl-boot0-5.24.0.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = peachpuff4];
   "/gnu/store/ccj3as3258l70lmphi48hs7n017wv75s-perl-boot0-5.24.0.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = peachpuff4];
-  "/gnu/store/w9adgzgdqkwz0w13zxf2fn363v9wcllc-gcc-cross-boot0-4.9.4.drv" [label = "gcc-cross-boot0-4.9.4", shape = box, fontname = Helvetica];
+  "/gnu/store/w9adgzgdqkwz0w13zxf2fn363v9wcllc-gcc-cross-boot0-4.9.4.drv" [label = "gcc-cross-boot0-4.9.4", shape = box, fontname = "dejavu sans"];
   "/gnu/store/w9adgzgdqkwz0w13zxf2fn363v9wcllc-gcc-cross-boot0-4.9.4.drv" -> "/gnu/store/v1v7jp438hc5rpgriwpjp04x049vh0g4-binutils-cross-boot0-2.27.drv" [color = darkseagreen];
   "/gnu/store/w9adgzgdqkwz0w13zxf2fn363v9wcllc-gcc-cross-boot0-4.9.4.drv" -> "/gnu/store/wda0p45jlbzg6w9j8zxw2sd11n2a4pbv-glibc-bootstrap-0.drv" [color = darkseagreen];
   "/gnu/store/w9adgzgdqkwz0w13zxf2fn363v9wcllc-gcc-cross-boot0-4.9.4.drv" -> "/gnu/store/1jpld53g41rzv2bmjp6v9mckmyw75vs3-make-boot0-4.2.1.drv" [color = darkseagreen];
@@ -81,7 +81,7 @@ digraph "Guix bag" {
   "/gnu/store/w9adgzgdqkwz0w13zxf2fn363v9wcllc-gcc-cross-boot0-4.9.4.drv" -> "/gnu/store/wv8sf8h4n9s5cdya223iy2wp3alr92x8-binutils-bootstrap-0.drv" [color = darkseagreen];
   "/gnu/store/w9adgzgdqkwz0w13zxf2fn363v9wcllc-gcc-cross-boot0-4.9.4.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = darkseagreen];
   "/gnu/store/w9adgzgdqkwz0w13zxf2fn363v9wcllc-gcc-cross-boot0-4.9.4.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = darkseagreen];
-  "/gnu/store/v1v7jp438hc5rpgriwpjp04x049vh0g4-binutils-cross-boot0-2.27.drv" [label = "binutils-cross-boot0-2.27", shape = box, fontname = Helvetica];
+  "/gnu/store/v1v7jp438hc5rpgriwpjp04x049vh0g4-binutils-cross-boot0-2.27.drv" [label = "binutils-cross-boot0-2.27", shape = box, fontname = "dejavu sans"];
   "/gnu/store/v1v7jp438hc5rpgriwpjp04x049vh0g4-binutils-cross-boot0-2.27.drv" -> "/gnu/store/1jpld53g41rzv2bmjp6v9mckmyw75vs3-make-boot0-4.2.1.drv" [color = dimgrey];
   "/gnu/store/v1v7jp438hc5rpgriwpjp04x049vh0g4-binutils-cross-boot0-2.27.drv" -> "/gnu/store/zpphawi07xidhfs2dja3w7hmnfp99j02-diffutils-boot0-3.5.drv" [color = dimgrey];
   "/gnu/store/v1v7jp438hc5rpgriwpjp04x049vh0g4-binutils-cross-boot0-2.27.drv" -> "/gnu/store/m4900ip34w4rcgn5620iqdi1wv198d9s-findutils-boot0-4.6.0.drv" [color = dimgrey];
@@ -91,12 +91,12 @@ digraph "Guix bag" {
   "/gnu/store/v1v7jp438hc5rpgriwpjp04x049vh0g4-binutils-cross-boot0-2.27.drv" -> "/gnu/store/wv8sf8h4n9s5cdya223iy2wp3alr92x8-binutils-bootstrap-0.drv" [color = dimgrey];
   "/gnu/store/v1v7jp438hc5rpgriwpjp04x049vh0g4-binutils-cross-boot0-2.27.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = dimgrey];
   "/gnu/store/v1v7jp438hc5rpgriwpjp04x049vh0g4-binutils-cross-boot0-2.27.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = dimgrey];
-  "/gnu/store/72snmrnjphwjxffknjhzm3xg38wd08al-ld-wrapper-x86_64-guix-linux-gnu-0.drv" [label = "ld-wrapper-x86_64-guix-linux-gnu-0", shape = box, fontname = Helvetica];
+  "/gnu/store/72snmrnjphwjxffknjhzm3xg38wd08al-ld-wrapper-x86_64-guix-linux-gnu-0.drv" [label = "ld-wrapper-x86_64-guix-linux-gnu-0", shape = box, fontname = "dejavu sans"];
   "/gnu/store/72snmrnjphwjxffknjhzm3xg38wd08al-ld-wrapper-x86_64-guix-linux-gnu-0.drv" -> "/gnu/store/v1v7jp438hc5rpgriwpjp04x049vh0g4-binutils-cross-boot0-2.27.drv" [color = dimgrey];
   "/gnu/store/72snmrnjphwjxffknjhzm3xg38wd08al-ld-wrapper-x86_64-guix-linux-gnu-0.drv" -> "/gnu/store/af19ma2vm3qhvh3rw6cdivyp98s18bj3-guile-bootstrap-2.0.drv" [color = dimgrey];
   "/gnu/store/72snmrnjphwjxffknjhzm3xg38wd08al-ld-wrapper-x86_64-guix-linux-gnu-0.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = dimgrey];
-  "/gnu/store/af19ma2vm3qhvh3rw6cdivyp98s18bj3-guile-bootstrap-2.0.drv" [label = "guile-bootstrap-2.0", shape = box, fontname = Helvetica];
-  "/gnu/store/5syba2bxhh8z79jhq83fzy8fxcx5xb4s-linux-libre-headers-4.4.18.drv" [label = "linux-libre-headers-4.4.18", shape = box, fontname = Helvetica];
+  "/gnu/store/af19ma2vm3qhvh3rw6cdivyp98s18bj3-guile-bootstrap-2.0.drv" [label = "guile-bootstrap-2.0", shape = box, fontname = "dejavu sans"];
+  "/gnu/store/5syba2bxhh8z79jhq83fzy8fxcx5xb4s-linux-libre-headers-4.4.18.drv" [label = "linux-libre-headers-4.4.18", shape = box, fontname = "dejavu sans"];
   "/gnu/store/5syba2bxhh8z79jhq83fzy8fxcx5xb4s-linux-libre-headers-4.4.18.drv" -> "/gnu/store/ccj3as3258l70lmphi48hs7n017wv75s-perl-boot0-5.24.0.drv" [color = blue];
   "/gnu/store/5syba2bxhh8z79jhq83fzy8fxcx5xb4s-linux-libre-headers-4.4.18.drv" -> "/gnu/store/1jpld53g41rzv2bmjp6v9mckmyw75vs3-make-boot0-4.2.1.drv" [color = blue];
   "/gnu/store/5syba2bxhh8z79jhq83fzy8fxcx5xb4s-linux-libre-headers-4.4.18.drv" -> "/gnu/store/zpphawi07xidhfs2dja3w7hmnfp99j02-diffutils-boot0-3.5.drv" [color = blue];
diff --git a/doc/images/coreutils-bag-graph.dot b/doc/images/coreutils-bag-graph.dot
index 7c90db65d4..4b5d20c8f4 100644
--- a/doc/images/coreutils-bag-graph.dot
+++ b/doc/images/coreutils-bag-graph.dot
@@ -1,5 +1,5 @@
 digraph "Guix bag-emerged" {
-  "/gnu/store/yv2r96w2dvbb0sjrf9f2imybpnyd616b-coreutils-8.25.drv" [label = "coreutils-8.25", shape = box, fontname = Helvetica];
+  "/gnu/store/yv2r96w2dvbb0sjrf9f2imybpnyd616b-coreutils-8.25.drv" [label = "coreutils-8.25", shape = box, fontname = "dejavu sans"];
   "/gnu/store/yv2r96w2dvbb0sjrf9f2imybpnyd616b-coreutils-8.25.drv" -> "/gnu/store/jxcx1jcvzxb17dc69sfwb352vgwyr108-perl-5.24.0.drv" [color = cyan3];
   "/gnu/store/yv2r96w2dvbb0sjrf9f2imybpnyd616b-coreutils-8.25.drv" -> "/gnu/store/7ijl8lybdx95kndajavdrpz05jdiwy9g-tar-1.29.drv" [color = cyan3];
   "/gnu/store/yv2r96w2dvbb0sjrf9f2imybpnyd616b-coreutils-8.25.drv" -> "/gnu/store/0ykf3p023pzfcg2bw8ahjc7cvmc12zjq-gzip-1.8.drv" [color = cyan3];
@@ -23,7 +23,7 @@ digraph "Guix bag-emerged" {
   "/gnu/store/yv2r96w2dvbb0sjrf9f2imybpnyd616b-coreutils-8.25.drv" -> "/gnu/store/ywmblv73pqa8lqqz368g46ysz65pnm0v-acl-2.2.52.drv" [color = cyan3];
   "/gnu/store/yv2r96w2dvbb0sjrf9f2imybpnyd616b-coreutils-8.25.drv" -> "/gnu/store/7gqg2kmrm1bjgphnd70ps5c11gqml571-gmp-6.1.1.drv" [color = cyan3];
   "/gnu/store/yv2r96w2dvbb0sjrf9f2imybpnyd616b-coreutils-8.25.drv" -> "/gnu/store/ijv3y5l1fbbzwb77lc867r1qbsf147i8-libcap-2.24.drv" [color = cyan3];
-  "/gnu/store/jxcx1jcvzxb17dc69sfwb352vgwyr108-perl-5.24.0.drv" [label = "perl-5.24.0", shape = box, fontname = Helvetica];
+  "/gnu/store/jxcx1jcvzxb17dc69sfwb352vgwyr108-perl-5.24.0.drv" [label = "perl-5.24.0", shape = box, fontname = "dejavu sans"];
   "/gnu/store/jxcx1jcvzxb17dc69sfwb352vgwyr108-perl-5.24.0.drv" -> "/gnu/store/7ijl8lybdx95kndajavdrpz05jdiwy9g-tar-1.29.drv" [color = blue];
   "/gnu/store/jxcx1jcvzxb17dc69sfwb352vgwyr108-perl-5.24.0.drv" -> "/gnu/store/0ykf3p023pzfcg2bw8ahjc7cvmc12zjq-gzip-1.8.drv" [color = blue];
   "/gnu/store/jxcx1jcvzxb17dc69sfwb352vgwyr108-perl-5.24.0.drv" -> "/gnu/store/xx3hiqhqn0d94zz7b46hgggwsz3wjiiw-bzip2-1.0.6.drv" [color = blue];
@@ -43,26 +43,26 @@ digraph "Guix bag-emerged" {
   "/gnu/store/jxcx1jcvzxb17dc69sfwb352vgwyr108-perl-5.24.0.drv" -> "/gnu/store/hv3dl3my12mq0gkwvckmnqccnckn39l0-gcc-4.9.4.drv" [color = blue];
   "/gnu/store/jxcx1jcvzxb17dc69sfwb352vgwyr108-perl-5.24.0.drv" -> "/gnu/store/qbfynm50snyn31w2c3paiw2n6wvzksg8-glibc-2.24.drv" [color = blue];
   "/gnu/store/jxcx1jcvzxb17dc69sfwb352vgwyr108-perl-5.24.0.drv" -> "/gnu/store/ir0lq2x7h64g2z5mlqvnlysjk2bc9xka-glibc-utf8-locales-2.24.drv" [color = blue];
-  "/gnu/store/7ijl8lybdx95kndajavdrpz05jdiwy9g-tar-1.29.drv" [label = "tar-1.29", shape = box, fontname = Helvetica];
-  "/gnu/store/0ykf3p023pzfcg2bw8ahjc7cvmc12zjq-gzip-1.8.drv" [label = "gzip-1.8", shape = box, fontname = Helvetica];
-  "/gnu/store/xx3hiqhqn0d94zz7b46hgggwsz3wjiiw-bzip2-1.0.6.drv" [label = "bzip2-1.0.6", shape = box, fontname = Helvetica];
-  "/gnu/store/kz8rzasivw4aflsv4rll3m539xybf226-xz-5.2.2.drv" [label = "xz-5.2.2", shape = box, fontname = Helvetica];
-  "/gnu/store/3pwrlsd23k2h104akxfj3cxhqcp973g9-file-5.28.drv" [label = "file-5.28", shape = box, fontname = Helvetica];
-  "/gnu/store/f1ww5vh5abnvr8b24llipm5dl89s5lq2-diffutils-3.5.drv" [label = "diffutils-3.5", shape = box, fontname = Helvetica];
-  "/gnu/store/0cbgdhhyh7hsgwq1x54n9vnq99rfjch9-patch-2.7.5.drv" [label = "patch-2.7.5", shape = box, fontname = Helvetica];
-  "/gnu/store/8xjnm44dfwwxp90hxq6zhb6qvia7rb3l-sed-4.2.2.drv" [label = "sed-4.2.2", shape = box, fontname = Helvetica];
-  "/gnu/store/54wjl6dp6rp47r67f4nyfqyv8nh456yc-findutils-4.6.0.drv" [label = "findutils-4.6.0", shape = box, fontname = Helvetica];
-  "/gnu/store/k951w49yw74ikg19l4mmlwfrq9w7a7zd-gawk-4.1.4.drv" [label = "gawk-4.1.4", shape = box, fontname = Helvetica];
-  "/gnu/store/n48xdjkvhlhj5mgdzy59n0dpb9vn0v78-grep-2.25.drv" [label = "grep-2.25", shape = box, fontname = Helvetica];
-  "/gnu/store/i52csyja3036ns0zj6z85lkgz3wfyym7-coreutils-8.25.drv" [label = "coreutils-8.25", shape = box, fontname = Helvetica];
-  "/gnu/store/nv4mnbz3mpd4gv80djk7762wyvxpccqk-make-4.2.1.drv" [label = "make-4.2.1", shape = box, fontname = Helvetica];
-  "/gnu/store/2c60vlcvpj5dvmgklajkp7cpynhcqixr-bash-4.4.0.drv" [label = "bash-4.4.0", shape = box, fontname = Helvetica];
-  "/gnu/store/zhc5c4s0xvzizpgpq2za6x84vxv57iy6-ld-wrapper-0.drv" [label = "ld-wrapper-0", shape = box, fontname = Helvetica];
-  "/gnu/store/9k1js0kalh4s6q4hf0rgg2n0zdyrwi69-binutils-2.27.drv" [label = "binutils-2.27", shape = box, fontname = Helvetica];
-  "/gnu/store/hv3dl3my12mq0gkwvckmnqccnckn39l0-gcc-4.9.4.drv" [label = "gcc-4.9.4", shape = box, fontname = Helvetica];
-  "/gnu/store/qbfynm50snyn31w2c3paiw2n6wvzksg8-glibc-2.24.drv" [label = "glibc-2.24", shape = box, fontname = Helvetica];
-  "/gnu/store/ir0lq2x7h64g2z5mlqvnlysjk2bc9xka-glibc-utf8-locales-2.24.drv" [label = "glibc-utf8-locales-2.24", shape = box, fontname = Helvetica];
-  "/gnu/store/ywmblv73pqa8lqqz368g46ysz65pnm0v-acl-2.2.52.drv" [label = "acl-2.2.52", shape = box, fontname = Helvetica];
+  "/gnu/store/7ijl8lybdx95kndajavdrpz05jdiwy9g-tar-1.29.drv" [label = "tar-1.29", shape = box, fontname = "dejavu sans"];
+  "/gnu/store/0ykf3p023pzfcg2bw8ahjc7cvmc12zjq-gzip-1.8.drv" [label = "gzip-1.8", shape = box, fontname = "dejavu sans"];
+  "/gnu/store/xx3hiqhqn0d94zz7b46hgggwsz3wjiiw-bzip2-1.0.6.drv" [label = "bzip2-1.0.6", shape = box, fontname = "dejavu sans"];
+  "/gnu/store/kz8rzasivw4aflsv4rll3m539xybf226-xz-5.2.2.drv" [label = "xz-5.2.2", shape = box, fontname = "dejavu sans"];
+  "/gnu/store/3pwrlsd23k2h104akxfj3cxhqcp973g9-file-5.28.drv" [label = "file-5.28", shape = box, fontname = "dejavu sans"];
+  "/gnu/store/f1ww5vh5abnvr8b24llipm5dl89s5lq2-diffutils-3.5.drv" [label = "diffutils-3.5", shape = box, fontname = "dejavu sans"];
+  "/gnu/store/0cbgdhhyh7hsgwq1x54n9vnq99rfjch9-patch-2.7.5.drv" [label = "patch-2.7.5", shape = box, fontname = "dejavu sans"];
+  "/gnu/store/8xjnm44dfwwxp90hxq6zhb6qvia7rb3l-sed-4.2.2.drv" [label = "sed-4.2.2", shape = box, fontname = "dejavu sans"];
+  "/gnu/store/54wjl6dp6rp47r67f4nyfqyv8nh456yc-findutils-4.6.0.drv" [label = "findutils-4.6.0", shape = box, fontname = "dejavu sans"];
+  "/gnu/store/k951w49yw74ikg19l4mmlwfrq9w7a7zd-gawk-4.1.4.drv" [label = "gawk-4.1.4", shape = box, fontname = "dejavu sans"];
+  "/gnu/store/n48xdjkvhlhj5mgdzy59n0dpb9vn0v78-grep-2.25.drv" [label = "grep-2.25", shape = box, fontname = "dejavu sans"];
+  "/gnu/store/i52csyja3036ns0zj6z85lkgz3wfyym7-coreutils-8.25.drv" [label = "coreutils-8.25", shape = box, fontname = "dejavu sans"];
+  "/gnu/store/nv4mnbz3mpd4gv80djk7762wyvxpccqk-make-4.2.1.drv" [label = "make-4.2.1", shape = box, fontname = "dejavu sans"];
+  "/gnu/store/2c60vlcvpj5dvmgklajkp7cpynhcqixr-bash-4.4.0.drv" [label = "bash-4.4.0", shape = box, fontname = "dejavu sans"];
+  "/gnu/store/zhc5c4s0xvzizpgpq2za6x84vxv57iy6-ld-wrapper-0.drv" [label = "ld-wrapper-0", shape = box, fontname = "dejavu sans"];
+  "/gnu/store/9k1js0kalh4s6q4hf0rgg2n0zdyrwi69-binutils-2.27.drv" [label = "binutils-2.27", shape = box, fontname = "dejavu sans"];
+  "/gnu/store/hv3dl3my12mq0gkwvckmnqccnckn39l0-gcc-4.9.4.drv" [label = "gcc-4.9.4", shape = box, fontname = "dejavu sans"];
+  "/gnu/store/qbfynm50snyn31w2c3paiw2n6wvzksg8-glibc-2.24.drv" [label = "glibc-2.24", shape = box, fontname = "dejavu sans"];
+  "/gnu/store/ir0lq2x7h64g2z5mlqvnlysjk2bc9xka-glibc-utf8-locales-2.24.drv" [label = "glibc-utf8-locales-2.24", shape = box, fontname = "dejavu sans"];
+  "/gnu/store/ywmblv73pqa8lqqz368g46ysz65pnm0v-acl-2.2.52.drv" [label = "acl-2.2.52", shape = box, fontname = "dejavu sans"];
   "/gnu/store/ywmblv73pqa8lqqz368g46ysz65pnm0v-acl-2.2.52.drv" -> "/gnu/store/nw68wjvbw505klgpsavq7dk195wg8ffj-gettext-minimal-0.19.8.1.drv" [color = darkgoldenrod];
   "/gnu/store/ywmblv73pqa8lqqz368g46ysz65pnm0v-acl-2.2.52.drv" -> "/gnu/store/jxcx1jcvzxb17dc69sfwb352vgwyr108-perl-5.24.0.drv" [color = darkgoldenrod];
   "/gnu/store/ywmblv73pqa8lqqz368g46ysz65pnm0v-acl-2.2.52.drv" -> "/gnu/store/7ijl8lybdx95kndajavdrpz05jdiwy9g-tar-1.29.drv" [color = darkgoldenrod];
@@ -85,7 +85,7 @@ digraph "Guix bag-emerged" {
   "/gnu/store/ywmblv73pqa8lqqz368g46ysz65pnm0v-acl-2.2.52.drv" -> "/gnu/store/qbfynm50snyn31w2c3paiw2n6wvzksg8-glibc-2.24.drv" [color = darkgoldenrod];
   "/gnu/store/ywmblv73pqa8lqqz368g46ysz65pnm0v-acl-2.2.52.drv" -> "/gnu/store/ir0lq2x7h64g2z5mlqvnlysjk2bc9xka-glibc-utf8-locales-2.24.drv" [color = darkgoldenrod];
   "/gnu/store/ywmblv73pqa8lqqz368g46ysz65pnm0v-acl-2.2.52.drv" -> "/gnu/store/gplx9i7c01f2r6qvm6d5w60iam73zmin-attr-2.4.47.drv" [color = darkgoldenrod];
-  "/gnu/store/nw68wjvbw505klgpsavq7dk195wg8ffj-gettext-minimal-0.19.8.1.drv" [label = "gettext-minimal-0.19.8.1", shape = box, fontname = Helvetica];
+  "/gnu/store/nw68wjvbw505klgpsavq7dk195wg8ffj-gettext-minimal-0.19.8.1.drv" [label = "gettext-minimal-0.19.8.1", shape = box, fontname = "dejavu sans"];
   "/gnu/store/nw68wjvbw505klgpsavq7dk195wg8ffj-gettext-minimal-0.19.8.1.drv" -> "/gnu/store/7ijl8lybdx95kndajavdrpz05jdiwy9g-tar-1.29.drv" [color = dimgrey];
   "/gnu/store/nw68wjvbw505klgpsavq7dk195wg8ffj-gettext-minimal-0.19.8.1.drv" -> "/gnu/store/0ykf3p023pzfcg2bw8ahjc7cvmc12zjq-gzip-1.8.drv" [color = dimgrey];
   "/gnu/store/nw68wjvbw505klgpsavq7dk195wg8ffj-gettext-minimal-0.19.8.1.drv" -> "/gnu/store/xx3hiqhqn0d94zz7b46hgggwsz3wjiiw-bzip2-1.0.6.drv" [color = dimgrey];
@@ -106,7 +106,7 @@ digraph "Guix bag-emerged" {
   "/gnu/store/nw68wjvbw505klgpsavq7dk195wg8ffj-gettext-minimal-0.19.8.1.drv" -> "/gnu/store/qbfynm50snyn31w2c3paiw2n6wvzksg8-glibc-2.24.drv" [color = dimgrey];
   "/gnu/store/nw68wjvbw505klgpsavq7dk195wg8ffj-gettext-minimal-0.19.8.1.drv" -> "/gnu/store/ir0lq2x7h64g2z5mlqvnlysjk2bc9xka-glibc-utf8-locales-2.24.drv" [color = dimgrey];
   "/gnu/store/nw68wjvbw505klgpsavq7dk195wg8ffj-gettext-minimal-0.19.8.1.drv" -> "/gnu/store/4dql1pzyivg87jwyfmmkwc6jll1vnizc-expat-2.2.0.drv" [color = dimgrey];
-  "/gnu/store/4dql1pzyivg87jwyfmmkwc6jll1vnizc-expat-2.2.0.drv" [label = "expat-2.2.0", shape = box, fontname = Helvetica];
+  "/gnu/store/4dql1pzyivg87jwyfmmkwc6jll1vnizc-expat-2.2.0.drv" [label = "expat-2.2.0", shape = box, fontname = "dejavu sans"];
   "/gnu/store/4dql1pzyivg87jwyfmmkwc6jll1vnizc-expat-2.2.0.drv" -> "/gnu/store/7ijl8lybdx95kndajavdrpz05jdiwy9g-tar-1.29.drv" [color = darkviolet];
   "/gnu/store/4dql1pzyivg87jwyfmmkwc6jll1vnizc-expat-2.2.0.drv" -> "/gnu/store/0ykf3p023pzfcg2bw8ahjc7cvmc12zjq-gzip-1.8.drv" [color = darkviolet];
   "/gnu/store/4dql1pzyivg87jwyfmmkwc6jll1vnizc-expat-2.2.0.drv" -> "/gnu/store/xx3hiqhqn0d94zz7b46hgggwsz3wjiiw-bzip2-1.0.6.drv" [color = darkviolet];
@@ -126,7 +126,7 @@ digraph "Guix bag-emerged" {
   "/gnu/store/4dql1pzyivg87jwyfmmkwc6jll1vnizc-expat-2.2.0.drv" -> "/gnu/store/hv3dl3my12mq0gkwvckmnqccnckn39l0-gcc-4.9.4.drv" [color = darkviolet];
   "/gnu/store/4dql1pzyivg87jwyfmmkwc6jll1vnizc-expat-2.2.0.drv" -> "/gnu/store/qbfynm50snyn31w2c3paiw2n6wvzksg8-glibc-2.24.drv" [color = darkviolet];
   "/gnu/store/4dql1pzyivg87jwyfmmkwc6jll1vnizc-expat-2.2.0.drv" -> "/gnu/store/ir0lq2x7h64g2z5mlqvnlysjk2bc9xka-glibc-utf8-locales-2.24.drv" [color = darkviolet];
-  "/gnu/store/gplx9i7c01f2r6qvm6d5w60iam73zmin-attr-2.4.47.drv" [label = "attr-2.4.47", shape = box, fontname = Helvetica];
+  "/gnu/store/gplx9i7c01f2r6qvm6d5w60iam73zmin-attr-2.4.47.drv" [label = "attr-2.4.47", shape = box, fontname = "dejavu sans"];
   "/gnu/store/gplx9i7c01f2r6qvm6d5w60iam73zmin-attr-2.4.47.drv" -> "/gnu/store/nw68wjvbw505klgpsavq7dk195wg8ffj-gettext-minimal-0.19.8.1.drv" [color = peachpuff4];
   "/gnu/store/gplx9i7c01f2r6qvm6d5w60iam73zmin-attr-2.4.47.drv" -> "/gnu/store/7ijl8lybdx95kndajavdrpz05jdiwy9g-tar-1.29.drv" [color = peachpuff4];
   "/gnu/store/gplx9i7c01f2r6qvm6d5w60iam73zmin-attr-2.4.47.drv" -> "/gnu/store/0ykf3p023pzfcg2bw8ahjc7cvmc12zjq-gzip-1.8.drv" [color = peachpuff4];
@@ -148,7 +148,7 @@ digraph "Guix bag-emerged" {
   "/gnu/store/gplx9i7c01f2r6qvm6d5w60iam73zmin-attr-2.4.47.drv" -> "/gnu/store/qbfynm50snyn31w2c3paiw2n6wvzksg8-glibc-2.24.drv" [color = peachpuff4];
   "/gnu/store/gplx9i7c01f2r6qvm6d5w60iam73zmin-attr-2.4.47.drv" -> "/gnu/store/ir0lq2x7h64g2z5mlqvnlysjk2bc9xka-glibc-utf8-locales-2.24.drv" [color = peachpuff4];
   "/gnu/store/gplx9i7c01f2r6qvm6d5w60iam73zmin-attr-2.4.47.drv" -> "/gnu/store/jxcx1jcvzxb17dc69sfwb352vgwyr108-perl-5.24.0.drv" [color = peachpuff4];
-  "/gnu/store/7gqg2kmrm1bjgphnd70ps5c11gqml571-gmp-6.1.1.drv" [label = "gmp-6.1.1", shape = box, fontname = Helvetica];
+  "/gnu/store/7gqg2kmrm1bjgphnd70ps5c11gqml571-gmp-6.1.1.drv" [label = "gmp-6.1.1", shape = box, fontname = "dejavu sans"];
   "/gnu/store/7gqg2kmrm1bjgphnd70ps5c11gqml571-gmp-6.1.1.drv" -> "/gnu/store/d1n7i55s1zcwzi21pnsxhamk3b1zf61d-m4-1.4.17.drv" [color = darkgoldenrod];
   "/gnu/store/7gqg2kmrm1bjgphnd70ps5c11gqml571-gmp-6.1.1.drv" -> "/gnu/store/7ijl8lybdx95kndajavdrpz05jdiwy9g-tar-1.29.drv" [color = darkgoldenrod];
   "/gnu/store/7gqg2kmrm1bjgphnd70ps5c11gqml571-gmp-6.1.1.drv" -> "/gnu/store/0ykf3p023pzfcg2bw8ahjc7cvmc12zjq-gzip-1.8.drv" [color = darkgoldenrod];
@@ -169,7 +169,7 @@ digraph "Guix bag-emerged" {
   "/gnu/store/7gqg2kmrm1bjgphnd70ps5c11gqml571-gmp-6.1.1.drv" -> "/gnu/store/hv3dl3my12mq0gkwvckmnqccnckn39l0-gcc-4.9.4.drv" [color = darkgoldenrod];
   "/gnu/store/7gqg2kmrm1bjgphnd70ps5c11gqml571-gmp-6.1.1.drv" -> "/gnu/store/qbfynm50snyn31w2c3paiw2n6wvzksg8-glibc-2.24.drv" [color = darkgoldenrod];
   "/gnu/store/7gqg2kmrm1bjgphnd70ps5c11gqml571-gmp-6.1.1.drv" -> "/gnu/store/ir0lq2x7h64g2z5mlqvnlysjk2bc9xka-glibc-utf8-locales-2.24.drv" [color = darkgoldenrod];
-  "/gnu/store/d1n7i55s1zcwzi21pnsxhamk3b1zf61d-m4-1.4.17.drv" [label = "m4-1.4.17", shape = box, fontname = Helvetica];
+  "/gnu/store/d1n7i55s1zcwzi21pnsxhamk3b1zf61d-m4-1.4.17.drv" [label = "m4-1.4.17", shape = box, fontname = "dejavu sans"];
   "/gnu/store/d1n7i55s1zcwzi21pnsxhamk3b1zf61d-m4-1.4.17.drv" -> "/gnu/store/7ijl8lybdx95kndajavdrpz05jdiwy9g-tar-1.29.drv" [color = cyan3];
   "/gnu/store/d1n7i55s1zcwzi21pnsxhamk3b1zf61d-m4-1.4.17.drv" -> "/gnu/store/0ykf3p023pzfcg2bw8ahjc7cvmc12zjq-gzip-1.8.drv" [color = cyan3];
   "/gnu/store/d1n7i55s1zcwzi21pnsxhamk3b1zf61d-m4-1.4.17.drv" -> "/gnu/store/xx3hiqhqn0d94zz7b46hgggwsz3wjiiw-bzip2-1.0.6.drv" [color = cyan3];
@@ -189,7 +189,7 @@ digraph "Guix bag-emerged" {
   "/gnu/store/d1n7i55s1zcwzi21pnsxhamk3b1zf61d-m4-1.4.17.drv" -> "/gnu/store/hv3dl3my12mq0gkwvckmnqccnckn39l0-gcc-4.9.4.drv" [color = cyan3];
   "/gnu/store/d1n7i55s1zcwzi21pnsxhamk3b1zf61d-m4-1.4.17.drv" -> "/gnu/store/qbfynm50snyn31w2c3paiw2n6wvzksg8-glibc-2.24.drv" [color = cyan3];
   "/gnu/store/d1n7i55s1zcwzi21pnsxhamk3b1zf61d-m4-1.4.17.drv" -> "/gnu/store/ir0lq2x7h64g2z5mlqvnlysjk2bc9xka-glibc-utf8-locales-2.24.drv" [color = cyan3];
-  "/gnu/store/ijv3y5l1fbbzwb77lc867r1qbsf147i8-libcap-2.24.drv" [label = "libcap-2.24", shape = box, fontname = Helvetica];
+  "/gnu/store/ijv3y5l1fbbzwb77lc867r1qbsf147i8-libcap-2.24.drv" [label = "libcap-2.24", shape = box, fontname = "dejavu sans"];
   "/gnu/store/ijv3y5l1fbbzwb77lc867r1qbsf147i8-libcap-2.24.drv" -> "/gnu/store/jxcx1jcvzxb17dc69sfwb352vgwyr108-perl-5.24.0.drv" [color = blue];
   "/gnu/store/ijv3y5l1fbbzwb77lc867r1qbsf147i8-libcap-2.24.drv" -> "/gnu/store/7ijl8lybdx95kndajavdrpz05jdiwy9g-tar-1.29.drv" [color = blue];
   "/gnu/store/ijv3y5l1fbbzwb77lc867r1qbsf147i8-libcap-2.24.drv" -> "/gnu/store/0ykf3p023pzfcg2bw8ahjc7cvmc12zjq-gzip-1.8.drv" [color = blue];
diff --git a/doc/images/coreutils-graph.dot b/doc/images/coreutils-graph.dot
index 920e5f2358..ffb62c922d 100644
--- a/doc/images/coreutils-graph.dot
+++ b/doc/images/coreutils-graph.dot
@@ -1,24 +1,24 @@
 digraph "Guix package" {
-  "72851008" [label = "coreutils-8.25", shape = box, fontname = Helvetica];
+  "72851008" [label = "coreutils-8.25", shape = box, fontname = "dejavu sans"];
   "72851008" -> "49728512" [color = darkseagreen];
   "72851008" -> "74872512" [color = darkseagreen];
   "72851008" -> "53180864" [color = darkseagreen];
   "72851008" -> "75199232" [color = darkseagreen];
-  "49728512" [label = "perl-5.24.0", shape = box, fontname = Helvetica];
-  "74872512" [label = "acl-2.2.52", shape = box, fontname = Helvetica];
+  "49728512" [label = "perl-5.24.0", shape = box, fontname = "dejavu sans"];
+  "74872512" [label = "acl-2.2.52", shape = box, fontname = "dejavu sans"];
   "74872512" -> "74873280" [color = red];
   "74872512" -> "49728512" [color = red];
   "74872512" -> "74872704" [color = red];
-  "74873280" [label = "gettext-minimal-0.19.8.1", shape = box, fontname = Helvetica];
+  "74873280" [label = "gettext-minimal-0.19.8.1", shape = box, fontname = "dejavu sans"];
   "74873280" -> "41550784" [color = cyan3];
-  "41550784" [label = "expat-2.2.0", shape = box, fontname = Helvetica];
-  "74872704" [label = "attr-2.4.47", shape = box, fontname = Helvetica];
+  "41550784" [label = "expat-2.2.0", shape = box, fontname = "dejavu sans"];
+  "74872704" [label = "attr-2.4.47", shape = box, fontname = "dejavu sans"];
   "74872704" -> "74873280" [color = cyan3];
   "74872704" -> "49728512" [color = cyan3];
-  "53180864" [label = "gmp-6.1.1", shape = box, fontname = Helvetica];
+  "53180864" [label = "gmp-6.1.1", shape = box, fontname = "dejavu sans"];
   "53180864" -> "50262784" [color = darkgoldenrod];
-  "50262784" [label = "m4-1.4.17", shape = box, fontname = Helvetica];
-  "75199232" [label = "libcap-2.24", shape = box, fontname = Helvetica];
+  "50262784" [label = "m4-1.4.17", shape = box, fontname = "dejavu sans"];
+  "75199232" [label = "libcap-2.24", shape = box, fontname = "dejavu sans"];
   "75199232" -> "49728512" [color = blue];
   "75199232" -> "74872704" [color = blue];
 
diff --git a/doc/images/gcc-core-mesboot0-graph.dot b/doc/images/gcc-core-mesboot0-graph.dot
index ef4e3a441e..de20dbe223 100644
--- a/doc/images/gcc-core-mesboot0-graph.dot
+++ b/doc/images/gcc-core-mesboot0-graph.dot
@@ -1,5 +1,5 @@
 digraph "Guix package" {
-  "139803511371136" [label = "gcc-core-mesboot0@2.95.3", shape = box, fontname = sans];
+  "139803511371136" [label = "gcc-core-mesboot0@2.95.3", shape = box, fontname = "dejavu sans"];
   "139803511371136" -> "139803511371312" [color = red];
   "139803511371136" -> "139803511372016" [color = red];
   "139803511371136" -> "139803511371488" [color = red];
@@ -9,7 +9,7 @@ digraph "Guix package" {
   "139803511371136" -> "139803511373600" [color = red];
   "139803511371136" -> "139803507105968" [color = red];
   "139803511371136" -> "139803749199472" [color = red];
-  "139803511371312" [label = "binutils-mesboot0@2.20.1a", shape = box, fontname = sans];
+  "139803511371312" [label = "binutils-mesboot0@2.20.1a", shape = box, fontname = "dejavu sans"];
   "139803511371312" -> "139803511372016" [color = dimgrey];
   "139803511371312" -> "139803511371488" [color = dimgrey];
   "139803511371312" -> "139803511371664" [color = dimgrey];
@@ -18,57 +18,57 @@ digraph "Guix package" {
   "139803511371312" -> "139803511373600" [color = dimgrey];
   "139803511371312" -> "139803507105968" [color = dimgrey];
   "139803511371312" -> "139803749199472" [color = dimgrey];
-  "139803511372016" [label = "gzip-mesboot@1.2.4", shape = box, fontname = sans];
+  "139803511372016" [label = "gzip-mesboot@1.2.4", shape = box, fontname = "dejavu sans"];
   "139803511372016" -> "139803511372192" [color = magenta];
   "139803511372016" -> "139803507105792" [color = magenta];
   "139803511372016" -> "139803511373600" [color = magenta];
   "139803511372016" -> "139803507105968" [color = magenta];
   "139803511372016" -> "139803749199472" [color = magenta];
-  "139803511372192" [label = "tcc-boot0@0.9.26-1136-g5bba73cc", shape = box, fontname = sans];
+  "139803511372192" [label = "tcc-boot0@0.9.26-1136-g5bba73cc", shape = box, fontname = "dejavu sans"];
   "139803511372192" -> "139803511372368" [color = magenta];
   "139803511372192" -> "139803511372544" [color = magenta];
   "139803511372192" -> "139803507105792" [color = magenta];
   "139803511372192" -> "139803511373600" [color = magenta];
   "139803511372192" -> "139803507105968" [color = magenta];
   "139803511372192" -> "139803749199472" [color = magenta];
-  "139803511372368" [label = "mes-boot@0.24", shape = box, fontname = sans];
+  "139803511372368" [label = "mes-boot@0.24", shape = box, fontname = "dejavu sans"];
   "139803511372368" -> "139803511372544" [color = darkviolet];
   "139803511372368" -> "139803507105792" [color = darkviolet];
   "139803511372368" -> "139803511373600" [color = darkviolet];
   "139803511372368" -> "139803507105968" [color = darkviolet];
   "139803511372368" -> "139803749199472" [color = darkviolet];
-  "139803511372544" [label = "stage0-posix@1.4", shape = box, fontname = sans];
+  "139803511372544" [label = "stage0-posix@1.4", shape = box, fontname = "dejavu sans"];
   "139803511372544" -> "139803511373072" [color = peachpuff4];
   "139803511372544" -> "139803507105792" [color = peachpuff4];
   "139803511372544" -> "139803511373600" [color = peachpuff4];
   "139803511372544" -> "139803507105968" [color = peachpuff4];
   "139803511372544" -> "139803749199472" [color = peachpuff4];
-  "139803511373072" [label = "bootstrap-seeds@1.0.0", shape = ellipse, fontname = sans];
+  "139803511373072" [label = "bootstrap-seeds@1.0.0", shape = ellipse, fontname = "dejavu sans"];
   "139803511373072" -> "139803507105968" [color = cyan3];
-  "139803507105968" [label = "bootar@1b", shape = box, fontname = sans];
+  "139803507105968" [label = "bootar@1b", shape = box, fontname = "dejavu sans"];
   "139803507105968" -> "139803749199472" [color = dimgrey];
-  "139803749199472" [label = "guile-bootstrap@2.0", shape = ellipse, fontname = sans];
-  "139803507105792" [label = "gash-boot@0.3.0", shape = box, fontname = sans];
+  "139803749199472" [label = "guile-bootstrap@2.0", shape = ellipse, fontname = "dejavu sans"];
+  "139803507105792" [label = "gash-boot@0.3.0", shape = box, fontname = "dejavu sans"];
   "139803507105792" -> "139803507105968" [color = darkviolet];
   "139803507105792" -> "139803749199472" [color = darkviolet];
-  "139803511373600" [label = "gash-utils-boot@0.2.0", shape = box, fontname = sans];
+  "139803511373600" [label = "gash-utils-boot@0.2.0", shape = box, fontname = "dejavu sans"];
   "139803511373600" -> "139803507105968" [color = red];
   "139803511373600" -> "139803507105792" [color = red];
   "139803511373600" -> "139803749199472" [color = red];
-  "139803511371488" [label = "patch-mesboot@2.5.9", shape = box, fontname = sans];
+  "139803511371488" [label = "patch-mesboot@2.5.9", shape = box, fontname = "dejavu sans"];
   "139803511371488" -> "139803511371840" [color = darkseagreen];
   "139803511371488" -> "139803511372192" [color = darkseagreen];
   "139803511371488" -> "139803507105792" [color = darkseagreen];
   "139803511371488" -> "139803511373600" [color = darkseagreen];
   "139803511371488" -> "139803507105968" [color = darkseagreen];
   "139803511371488" -> "139803749199472" [color = darkseagreen];
-  "139803511371840" [label = "make-mesboot0@3.80", shape = box, fontname = sans];
+  "139803511371840" [label = "make-mesboot0@3.80", shape = box, fontname = "dejavu sans"];
   "139803511371840" -> "139803511372192" [color = blue];
   "139803511371840" -> "139803507105792" [color = blue];
   "139803511371840" -> "139803511373600" [color = blue];
   "139803511371840" -> "139803507105968" [color = blue];
   "139803511371840" -> "139803749199472" [color = blue];
-  "139803511371664" [label = "tcc-boot@0.9.27", shape = box, fontname = sans];
+  "139803511371664" [label = "tcc-boot@0.9.27", shape = box, fontname = "dejavu sans"];
   "139803511371664" -> "139803511371840" [color = peachpuff4];
   "139803511371664" -> "139803511372192" [color = peachpuff4];
   "139803511371664" -> "139803507105792" [color = peachpuff4];
diff --git a/doc/images/service-graph.dot b/doc/images/service-graph.dot
index b7b617abbc..8de91f1adc 100644
--- a/doc/images/service-graph.dot
+++ b/doc/images/service-graph.dot
@@ -1,12 +1,12 @@
 digraph "Service Type Dependencies" {
-  shepherd [shape = box, fontname = Helvetica];
-  pam [shape = box, fontname = Helvetica];
-  etc [shape = box, fontname = Helvetica];
-  profile [shape = box, fontname = Helvetica];
-  accounts [shape = box, fontname = Helvetica];
-  activation [shape = box, fontname = Helvetica];
-  boot [shape = box, fontname = Helvetica];
-  system [shape = house, fontname = Helvetica];
+  shepherd [shape = box, fontname = "dejavu sans"];
+  pam [shape = box, fontname = "dejavu sans"];
+  etc [shape = box, fontname = "dejavu sans"];
+  profile [shape = box, fontname = "dejavu sans"];
+  accounts [shape = box, fontname = "dejavu sans"];
+  activation [shape = box, fontname = "dejavu sans"];
+  boot [shape = box, fontname = "dejavu sans"];
+  system [shape = house, fontname = "dejavu sans"];
   lshd -> shepherd;
   lshd -> pam;
   udev -> shepherd;
diff --git a/doc/images/shepherd-graph.dot b/doc/images/shepherd-graph.dot
index 35b2794689..06b028701b 100644
--- a/doc/images/shepherd-graph.dot
+++ b/doc/images/shepherd-graph.dot
@@ -1,7 +1,7 @@
 digraph "Guix shepherd-service" {
-  "user-file-systems" [label = "user-file-systems", shape = box, fontname = Helvetica];
+  "user-file-systems" [label = "user-file-systems", shape = box, fontname = "dejavu sans"];
   "user-processes" -> "user-file-systems" [color = cyan3];
-  "user-processes" [label = "user-processes", shape = box, fontname = Helvetica];
+  "user-processes" [label = "user-processes", shape = box, fontname = "dejavu sans"];
   "nscd" -> "user-processes" [color = magenta];
   "guix-daemon" -> "user-processes" [color = blue];
   "urandom-seed" -> "user-processes" [color = dimgrey];
@@ -13,45 +13,45 @@ digraph "Guix shepherd-service" {
   "term-tty2" -> "user-processes" [color = darkviolet];
   "term-tty1" -> "user-processes" [color = peachpuff4];
   "networking" -> "user-processes" [color = dimgrey];
-  "nscd" [label = "nscd", shape = box, fontname = Helvetica];
-  "guix-daemon" [label = "guix-daemon", shape = box, fontname = Helvetica];
-  "urandom-seed" [label = "urandom-seed", shape = box, fontname = Helvetica];
-  "syslogd" [label = "syslogd", shape = box, fontname = Helvetica];
+  "nscd" [label = "nscd", shape = box, fontname = "dejavu sans"];
+  "guix-daemon" [label = "guix-daemon", shape = box, fontname = "dejavu sans"];
+  "urandom-seed" [label = "urandom-seed", shape = box, fontname = "dejavu sans"];
+  "syslogd" [label = "syslogd", shape = box, fontname = "dejavu sans"];
   "ssh-daemon" -> "syslogd" [color = darkgoldenrod];
-  "ssh-daemon" [label = "ssh-daemon", shape = box, fontname = Helvetica];
-  "term-tty6" [label = "term-tty6", shape = box, fontname = Helvetica];
+  "ssh-daemon" [label = "ssh-daemon", shape = box, fontname = "dejavu sans"];
+  "term-tty6" [label = "term-tty6", shape = box, fontname = "dejavu sans"];
   "console-font-tty6" -> "term-tty6" [color = darkgoldenrod];
-  "console-font-tty6" [label = "console-font-tty6", shape = box, fontname = Helvetica];
-  "term-tty5" [label = "term-tty5", shape = box, fontname = Helvetica];
+  "console-font-tty6" [label = "console-font-tty6", shape = box, fontname = "dejavu sans"];
+  "term-tty5" [label = "term-tty5", shape = box, fontname = "dejavu sans"];
   "console-font-tty5" -> "term-tty5" [color = dimgrey];
-  "console-font-tty5" [label = "console-font-tty5", shape = box, fontname = Helvetica];
-  "term-tty4" [label = "term-tty4", shape = box, fontname = Helvetica];
+  "console-font-tty5" [label = "console-font-tty5", shape = box, fontname = "dejavu sans"];
+  "term-tty4" [label = "term-tty4", shape = box, fontname = "dejavu sans"];
   "console-font-tty4" -> "term-tty4" [color = darkviolet];
-  "console-font-tty4" [label = "console-font-tty4", shape = box, fontname = Helvetica];
-  "term-tty3" [label = "term-tty3", shape = box, fontname = Helvetica];
+  "console-font-tty4" [label = "console-font-tty4", shape = box, fontname = "dejavu sans"];
+  "term-tty3" [label = "term-tty3", shape = box, fontname = "dejavu sans"];
   "console-font-tty3" -> "term-tty3" [color = peachpuff4];
-  "console-font-tty3" [label = "console-font-tty3", shape = box, fontname = Helvetica];
-  "term-tty2" [label = "term-tty2", shape = box, fontname = Helvetica];
+  "console-font-tty3" [label = "console-font-tty3", shape = box, fontname = "dejavu sans"];
+  "term-tty2" [label = "term-tty2", shape = box, fontname = "dejavu sans"];
   "console-font-tty2" -> "term-tty2" [color = darkseagreen];
-  "console-font-tty2" [label = "console-font-tty2", shape = box, fontname = Helvetica];
-  "term-tty1" [label = "term-tty1", shape = box, fontname = Helvetica];
+  "console-font-tty2" [label = "console-font-tty2", shape = box, fontname = "dejavu sans"];
+  "term-tty1" [label = "term-tty1", shape = box, fontname = "dejavu sans"];
   "console-font-tty1" -> "term-tty1" [color = cyan3];
-  "console-font-tty1" [label = "console-font-tty1", shape = box, fontname = Helvetica];
-  "networking" [label = "networking", shape = box, fontname = Helvetica];
+  "console-font-tty1" [label = "console-font-tty1", shape = box, fontname = "dejavu sans"];
+  "networking" [label = "networking", shape = box, fontname = "dejavu sans"];
   "ssh-daemon" -> "networking" [color = darkgoldenrod];
-  "root-file-system" [label = "root-file-system", shape = box, fontname = Helvetica];
+  "root-file-system" [label = "root-file-system", shape = box, fontname = "dejavu sans"];
   "file-system-/dev/pts" -> "root-file-system" [color = peachpuff4];
   "file-system-/dev/shm" -> "root-file-system" [color = darkgoldenrod];
   "file-system-/gnu/store" -> "root-file-system" [color = blue];
   "user-processes" -> "root-file-system" [color = cyan3];
   "udev" -> "root-file-system" [color = darkseagreen];
-  "file-system-/dev/pts" [label = "file-system-/dev/pts", shape = box, fontname = Helvetica];
+  "file-system-/dev/pts" [label = "file-system-/dev/pts", shape = box, fontname = "dejavu sans"];
   "user-processes" -> "file-system-/dev/pts" [color = cyan3];
-  "file-system-/dev/shm" [label = "file-system-/dev/shm", shape = box, fontname = Helvetica];
+  "file-system-/dev/shm" [label = "file-system-/dev/shm", shape = box, fontname = "dejavu sans"];
   "user-processes" -> "file-system-/dev/shm" [color = cyan3];
-  "file-system-/gnu/store" [label = "file-system-/gnu/store", shape = box, fontname = Helvetica];
+  "file-system-/gnu/store" [label = "file-system-/gnu/store", shape = box, fontname = "dejavu sans"];
   "user-processes" -> "file-system-/gnu/store" [color = cyan3];
-  "udev" [label = "udev", shape = box, fontname = Helvetica];
+  "udev" [label = "udev", shape = box, fontname = "dejavu sans"];
   "term-tty6" -> "udev" [color = magenta];
   "term-tty5" -> "udev" [color = red];
   "term-tty4" -> "udev" [color = darkgoldenrod];
@@ -59,13 +59,13 @@ digraph "Guix shepherd-service" {
   "term-tty2" -> "udev" [color = darkviolet];
   "term-tty1" -> "udev" [color = peachpuff4];
   "networking" -> "udev" [color = dimgrey];
-  "host-name" [label = "host-name", shape = box, fontname = Helvetica];
+  "host-name" [label = "host-name", shape = box, fontname = "dejavu sans"];
   "term-tty6" -> "host-name" [color = magenta];
   "term-tty5" -> "host-name" [color = red];
   "term-tty4" -> "host-name" [color = darkgoldenrod];
   "term-tty3" -> "host-name" [color = dimgrey];
   "term-tty2" -> "host-name" [color = darkviolet];
   "term-tty1" -> "host-name" [color = peachpuff4];
-  "loopback" [label = "loopback", shape = box, fontname = Helvetica];
+  "loopback" [label = "loopback", shape = box, fontname = "dejavu sans"];
 
 }
-- 
2.41.0





^ permalink raw reply related	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH v3 02/13] maint: Cater for running `make dist' from a worktree.
  2024-04-08 18:46 ` [bug#70169] [PATCH v3 00/13] Reproducible `make dist' tarball in defiance of Autotools and Gettext Janneke Nieuwenhuizen
  2024-04-08 18:46   ` [bug#70169] [PATCH v3 01/13] doc: Use "dejavu sans" instead of "Helvetica" or "sans" in dot images Janneke Nieuwenhuizen
@ 2024-04-08 18:46   ` Janneke Nieuwenhuizen
  2024-04-08 18:46   ` [bug#70169] [PATCH v3 03/13] maint: Use reproducible timestamps and name for tarball Janneke Nieuwenhuizen
                     ` (10 subsequent siblings)
  12 siblings, 0 replies; 66+ messages in thread
From: Janneke Nieuwenhuizen @ 2024-04-08 18:46 UTC (permalink / raw)
  To: 70169

* Makefile.am (gen-ChangeLog): Check for existance of `.git', rather than it
being a directory.
(gen-AUTHORS): Likewise.

Change-Id: I1b7f8cc147084c1804deb7be9d36e5eeda2599cb
---
 Makefile.am | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/Makefile.am b/Makefile.am
index 1c5688ac13..2b5e145095 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -972,7 +972,7 @@ gen-tarball-version:
 	echo $(VERSION) > "$(distdir)/.tarball-version"
 
 gen-ChangeLog:
-	$(AM_V_GEN)if test -d .git; then		\
+	$(AM_V_GEN)if test -e .git; then		\
 	  $(top_srcdir)/build-aux/gitlog-to-changelog	\
 	    > $(distdir)/ChangeLog.tmp;			\
 	  rm -f $(distdir)/ChangeLog;			\
@@ -980,7 +980,7 @@ gen-ChangeLog:
 	fi
 
 gen-AUTHORS:
-	$(AM_V_GEN)if test -d .git; then			\
+	$(AM_V_GEN)if test -e .git; then			\
 	  rm -f "$(distdir)/AUTHORS";				\
 	  $(top_builddir)/pre-inst-env "$(GUILE)"		\
 	    "$(top_srcdir)/build-aux/generate-authors.scm"	\
-- 
2.41.0





^ permalink raw reply related	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH v3 03/13] maint: Use reproducible timestamps and name for tarball.
  2024-04-08 18:46 ` [bug#70169] [PATCH v3 00/13] Reproducible `make dist' tarball in defiance of Autotools and Gettext Janneke Nieuwenhuizen
  2024-04-08 18:46   ` [bug#70169] [PATCH v3 01/13] doc: Use "dejavu sans" instead of "Helvetica" or "sans" in dot images Janneke Nieuwenhuizen
  2024-04-08 18:46   ` [bug#70169] [PATCH v3 02/13] maint: Cater for running `make dist' from a worktree Janneke Nieuwenhuizen
@ 2024-04-08 18:46   ` Janneke Nieuwenhuizen
  2024-04-08 18:46   ` [bug#70169] [PATCH v3 04/13] maint: Generate 'doc/version.texi' reproducibly Janneke Nieuwenhuizen
                     ` (9 subsequent siblings)
  12 siblings, 0 replies; 66+ messages in thread
From: Janneke Nieuwenhuizen @ 2024-04-08 18:46 UTC (permalink / raw)
  To: 70169

* Makefile.am (gen-tarball-version): Add reproducible timestamp to tarball.
(am__tar): Use it in new variable, overriding the Automake default.
(GZIP_ENV): New variable, overriding the Automake default.
---
 Makefile.am | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/Makefile.am b/Makefile.am
index 2b5e145095..a5e49bc406 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -7,7 +7,7 @@
 # Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 # Copyright © 2017 Leo Famulari <leo@famulari.name>
 # Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
-# Copyright © 2017, 2020, 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
+# Copyright © 2017, 2020, 2023, 2024 Janneke Nieuwenhuizen <janneke@gnu.org>
 # Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net>
 # Copyright © 2018 Nikita <nikita@n0.is>
 # Copyright © 2018 Julien Lepiller <julien@lepiller.eu>
@@ -970,6 +970,7 @@ $(top_srcdir)/.version: config.status
 
 gen-tarball-version:
 	echo $(VERSION) > "$(distdir)/.tarball-version"
+	git show HEAD --format=%ct --no-patch > $(distdir)/.tarball-timestamp
 
 gen-ChangeLog:
 	$(AM_V_GEN)if test -e .git; then		\
@@ -1002,6 +1003,17 @@ dist-with-updated-version:
 # Release management.
 #
 
+# Reproducible tarball
+override GZIP_ENV = --best --no-name
+# Be friendly to Debian; avoid using EPOCH
+override am__tar = $${TAR-tar}			\
+ --sort=name					\
+ --mode=go=rX,u+rw,a-s				\
+ --mtime=@$$(cat "$$tardir"/.tarball-timestamp)	\
+ --owner=0 --group=0 --numeric-owner		\
+ -cf -						\
+ "$$tardir"
+
 releasedir = release-$(PACKAGE_VERSION)
 
 PACKAGE_FULL_TARNAME = $(PACKAGE_TARNAME)-$(PACKAGE_VERSION)
-- 
2.41.0





^ permalink raw reply related	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH v3 04/13] maint: Generate 'doc/version.texi' reproducibly.
  2024-04-08 18:46 ` [bug#70169] [PATCH v3 00/13] Reproducible `make dist' tarball in defiance of Autotools and Gettext Janneke Nieuwenhuizen
                     ` (2 preceding siblings ...)
  2024-04-08 18:46   ` [bug#70169] [PATCH v3 03/13] maint: Use reproducible timestamps and name for tarball Janneke Nieuwenhuizen
@ 2024-04-08 18:46   ` Janneke Nieuwenhuizen
  2024-04-08 18:46   ` [bug#70169] [PATCH v3 05/13] maint: Help help2man generate reproducible man-pages Janneke Nieuwenhuizen
                     ` (8 subsequent siblings)
  12 siblings, 0 replies; 66+ messages in thread
From: Janneke Nieuwenhuizen @ 2024-04-08 18:46 UTC (permalink / raw)
  To: 70169; +Cc: Timothy Sample

From: Timothy Sample <samplet@ngyro.com>

* doc/local.mk ($(srcdir)/doc/stamp-vti): New rule (overriding one provided
by Automake).

Co-authored-by: Janneke Nieuwenhuizen <janneke@gnu.org>

Change-Id: If44965e9a3ecfb45865c58ee7a558951be8d15ae
---
 doc/local.mk | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/doc/local.mk b/doc/local.mk
index 8df003b891..5f014b9c3d 100644
--- a/doc/local.mk
+++ b/doc/local.mk
@@ -5,6 +5,7 @@
 # Copyright © 2016 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
 # Copyright © 2016, 2018 Mathieu Lirzin <mthl@gnu.org>
 # Copyright © 2018, 2021 Julien Lepiller <julien@lepiller.eu>
+# Copyright © 2019 Timothy Sample <samplet@ngyro.com>
 #
 # This file is part of GNU Guix.
 #
@@ -247,3 +248,22 @@ $(srcdir)/%D%/guix-daemon.1: guix-daemon$(EXEEXT)
 
 endif
 endif
+
+# Reproducible tarball
+
+# Generate 'version.texi' reproducibly using metadata from Git rather
+# than using metadata from the filesystem.
+$(srcdir)/doc/stamp-vti: $(srcdir)/doc/guix.texi $(top_srcdir)/configure
+	$(AM_V_GEN)set -e						\
+	export LC_ALL=C;						\
+	export TZ=UTC0;							\
+	timestamp=$$(git log --pretty=format:%ct -n1 -- $< 2>/dev/null	\
+		|| echo $(SOURCE_DATE_EPOCH))				\
+	dmy=$$(date --date="@$$timestamp" "+%-d %B %Y");		\
+	my=$$(date --date="@$$timestamp" "+%B %Y");			\
+	{ echo "@set UPDATED $$dmy";					\
+	  echo "@set UPDATED-MONTH $$my";				\
+	  echo "@set EDITION $(VERSION)";				\
+	  echo "@set VERSION $(VERSION)"; } > $@-t;			\
+	mv $@-t $@
+	@cp $@ $(srcdir)/doc/version.texi
-- 
2.41.0





^ permalink raw reply related	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH v3 05/13] maint: Help help2man generate reproducible man-pages.
  2024-04-08 18:46 ` [bug#70169] [PATCH v3 00/13] Reproducible `make dist' tarball in defiance of Autotools and Gettext Janneke Nieuwenhuizen
                     ` (3 preceding siblings ...)
  2024-04-08 18:46   ` [bug#70169] [PATCH v3 04/13] maint: Generate 'doc/version.texi' reproducibly Janneke Nieuwenhuizen
@ 2024-04-08 18:46   ` Janneke Nieuwenhuizen
  2024-04-08 18:46   ` [bug#70169] [PATCH v3 06/13] maint: Generate AUTHORS and ChangeLog reproducibly Janneke Nieuwenhuizen
                     ` (7 subsequent siblings)
  12 siblings, 0 replies; 66+ messages in thread
From: Janneke Nieuwenhuizen @ 2024-04-08 18:46 UTC (permalink / raw)
  To: 70169

* doc/local.mk (SOURCE_DATE_EPOCH): New exported variable.

Change-Id: I6636693695d5502657f1475d93d31949e0b0b39d
---
 doc/local.mk | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/doc/local.mk b/doc/local.mk
index 5f014b9c3d..595710a5b8 100644
--- a/doc/local.mk
+++ b/doc/local.mk
@@ -224,6 +224,9 @@ gen_man =						\
   $(HELP2MANFLAGS)
 
 HELP2MANFLAGS = --source=GNU --info-page=$(PACKAGE_TARNAME)
+# help2man reproducibility
+SOURCE_DATE_EPOCH = $(shell git show HEAD --format=%ct --no-patch 2>/dev/null || echo 1)
+export SOURCE_DATE_EPOCH
 
 $(srcdir)/%D%/guix.1: scripts/guix.in $(sub_commands_mans)
 	-$(AM_V_HELP2MAN)$(gen_man) --output="$@" `basename "$@" .1`
-- 
2.41.0





^ permalink raw reply related	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH v3 06/13] maint: Generate AUTHORS and ChangeLog reproducibly.
  2024-04-08 18:46 ` [bug#70169] [PATCH v3 00/13] Reproducible `make dist' tarball in defiance of Autotools and Gettext Janneke Nieuwenhuizen
                     ` (4 preceding siblings ...)
  2024-04-08 18:46   ` [bug#70169] [PATCH v3 05/13] maint: Help help2man generate reproducible man-pages Janneke Nieuwenhuizen
@ 2024-04-08 18:46   ` Janneke Nieuwenhuizen
  2024-04-08 18:46   ` [bug#70169] [PATCH v3 07/13] maint: Generate 'doc/version-LANG.texi' reproducibly Janneke Nieuwenhuizen
                     ` (6 subsequent siblings)
  12 siblings, 0 replies; 66+ messages in thread
From: Janneke Nieuwenhuizen @ 2024-04-08 18:46 UTC (permalink / raw)
  To: 70169

* Makefile.am (gen-ChangeLog): Set LC_ALL=en_US.UTF-8 TZ=UTC0.
(gen-AUTHORS): Likewise.

Change-Id: I109ceffdf07b8dde6385b6b509366c47564c9f31
---
 Makefile.am | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/Makefile.am b/Makefile.am
index a5e49bc406..7af88b2988 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -974,6 +974,8 @@ gen-tarball-version:
 
 gen-ChangeLog:
 	$(AM_V_GEN)if test -e .git; then		\
+	  export LC_ALL=en_US.UTF-8;			\
+	  export TZ=UTC0;				\
 	  $(top_srcdir)/build-aux/gitlog-to-changelog	\
 	    > $(distdir)/ChangeLog.tmp;			\
 	  rm -f $(distdir)/ChangeLog;			\
@@ -983,6 +985,8 @@ gen-ChangeLog:
 gen-AUTHORS:
 	$(AM_V_GEN)if test -e .git; then			\
 	  rm -f "$(distdir)/AUTHORS";				\
+	  export LC_ALL=en_US.UTF-8;				\
+	  export TZ=UTC0;					\
 	  $(top_builddir)/pre-inst-env "$(GUILE)"		\
 	    "$(top_srcdir)/build-aux/generate-authors.scm"	\
 	    "$(top_srcdir)" "$(distdir)/AUTHORS";		\
-- 
2.41.0





^ permalink raw reply related	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH v3 07/13] maint: Generate 'doc/version-LANG.texi' reproducibly.
  2024-04-08 18:46 ` [bug#70169] [PATCH v3 00/13] Reproducible `make dist' tarball in defiance of Autotools and Gettext Janneke Nieuwenhuizen
                     ` (5 preceding siblings ...)
  2024-04-08 18:46   ` [bug#70169] [PATCH v3 06/13] maint: Generate AUTHORS and ChangeLog reproducibly Janneke Nieuwenhuizen
@ 2024-04-08 18:46   ` Janneke Nieuwenhuizen
  2024-04-08 18:46   ` [bug#70169] [PATCH v3 08/13] maint: Use xgettext.scm wrapper to create .PO files reproducibly Janneke Nieuwenhuizen
                     ` (5 subsequent siblings)
  12 siblings, 0 replies; 66+ messages in thread
From: Janneke Nieuwenhuizen @ 2024-04-08 18:46 UTC (permalink / raw)
  To: 70169

* doc/local.mk ($(srcdir)/doc/stamp-vti): Change rule into...
(version.texi-from-git): ...this new function.  Call it with vti,guix.texi,;
and for all MANUAL_LANGUAGES with $(i),po/doc/guix-manual.$(lang).po,
-$(lang.po).

Change-Id: Ia8df618178066cad320eecea0299337224e23a73
---
 doc/local.mk | 44 ++++++++++++++++++++++++++++++--------------
 1 file changed, 30 insertions(+), 14 deletions(-)

diff --git a/doc/local.mk b/doc/local.mk
index 595710a5b8..7a9840187a 100644
--- a/doc/local.mk
+++ b/doc/local.mk
@@ -6,6 +6,7 @@
 # Copyright © 2016, 2018 Mathieu Lirzin <mthl@gnu.org>
 # Copyright © 2018, 2021 Julien Lepiller <julien@lepiller.eu>
 # Copyright © 2019 Timothy Sample <samplet@ngyro.com>
+# Copyright © 2024 Janneke Nieuwenhuizen <janneke@gnu.org>
 #
 # This file is part of GNU Guix.
 #
@@ -254,19 +255,34 @@ endif
 
 # Reproducible tarball
 
-# Generate 'version.texi' reproducibly using metadata from Git rather
-# than using metadata from the filesystem.
-$(srcdir)/doc/stamp-vti: $(srcdir)/doc/guix.texi $(top_srcdir)/configure
-	$(AM_V_GEN)set -e						\
+# Define a rule to build `version[LANG].texi' reproducibly using metadata from
+# Git rather than using metadata from the filesystem.
+define version.texi-from-git
+$(srcdir)/doc/stamp-$(1): $(srcdir)/$(2) $(top_srcdir)/configure
+	$$(AM_V_GEN)set -e						\
 	export LC_ALL=C;						\
 	export TZ=UTC0;							\
-	timestamp=$$(git log --pretty=format:%ct -n1 -- $< 2>/dev/null	\
-		|| echo $(SOURCE_DATE_EPOCH))				\
-	dmy=$$(date --date="@$$timestamp" "+%-d %B %Y");		\
-	my=$$(date --date="@$$timestamp" "+%B %Y");			\
-	{ echo "@set UPDATED $$dmy";					\
-	  echo "@set UPDATED-MONTH $$my";				\
-	  echo "@set EDITION $(VERSION)";				\
-	  echo "@set VERSION $(VERSION)"; } > $@-t;			\
-	mv $@-t $@
-	@cp $@ $(srcdir)/doc/version.texi
+	timestamp="$$$$(git log --pretty=format:%ct -n1 -- "$$<"	\
+		2>/dev/null						\
+		|| echo $$(SOURCE_DATE_EPOCH))"				\
+	dmy=$$$$(date --date="@$$$$timestamp" "+%-d %B %Y");		\
+	my=$$$$(date --date="@$$$$timestamp" "+%B %Y");			\
+	{ echo "@set UPDATED $$$$dmy";					\
+	  echo "@set UPDATED-MONTH $$$$my";				\
+	  echo "@set EDITION $$$(VERSION)";				\
+	  echo "@set VERSION $$$(VERSION)"; } > "$$@-t";
+	mv "$$@-t" "$$@"
+	cp -p "$$@" "$$(srcdir)/doc/version$(3).texi"
+endef
+
+# Generate rules for stamp-vti and stamp-N that create version.texi and
+# version-LANG.texi to override the Autotools versions that use timestamps
+# embedded in the file-system.  These are expected to generate warnings:
+#
+#   Makefile:7376: warning: overriding recipe for target 'doc/stamp-vti'
+#   Makefile:5098: warning: ignoring old recipe for target 'doc/stamp-vti'
+i:=0
+$(eval $(call version.texi-from-git,vti,doc/guix.texi,))
+$(foreach lang, $(MANUAL_LANGUAGES),							\
+  $(eval i=$(shell echo $$(($(i)+1))))							\
+  $(eval $(call version.texi-from-git,$(i),po/doc/guix-manual.$(lang).po,-$(lang))))
-- 
2.41.0





^ permalink raw reply related	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH v3 08/13] maint: Use xgettext.scm wrapper to create .PO files reproducibly.
  2024-04-08 18:46 ` [bug#70169] [PATCH v3 00/13] Reproducible `make dist' tarball in defiance of Autotools and Gettext Janneke Nieuwenhuizen
                     ` (6 preceding siblings ...)
  2024-04-08 18:46   ` [bug#70169] [PATCH v3 07/13] maint: Generate 'doc/version-LANG.texi' reproducibly Janneke Nieuwenhuizen
@ 2024-04-08 18:46   ` Janneke Nieuwenhuizen
  2024-04-08 18:46   ` [bug#70169] [PATCH v3 09/13] maint: Use reproducible Git timestamp for POT-Creation-Date Janneke Nieuwenhuizen
                     ` (4 subsequent siblings)
  12 siblings, 0 replies; 66+ messages in thread
From: Janneke Nieuwenhuizen @ 2024-04-08 18:46 UTC (permalink / raw)
  To: 70169; +Cc: Florian Pelz, Julien Lepiller

* build-aux/xgettext.scm: New script.
* po/guix/Makevars (XGETTEXT): Set it.
(XGETTEXT_OPTIONS): Add --xgettext option to `real' xgettext.
* po/packages/Makevars (XGETTEXT): Set it.
(XGETTEXT_OPTIONS): Add --xgettext option to `real' xgettext.

Change-Id: I71b6b843970090f765f46ac346b92a346560e3f0
---
 build-aux/xgettext.scm | 87 ++++++++++++++++++++++++++++++++++++++++++
 po/guix/Makevars       |  7 +++-
 po/packages/Makevars   | 10 ++++-
 3 files changed, 101 insertions(+), 3 deletions(-)
 create mode 100755 build-aux/xgettext.scm

diff --git a/build-aux/xgettext.scm b/build-aux/xgettext.scm
new file mode 100755
index 0000000000..e8a970f251
--- /dev/null
+++ b/build-aux/xgettext.scm
@@ -0,0 +1,87 @@
+#! /bin/sh
+# -*-scheme-*-
+build_aux=$(dirname $0)
+srcdir=$build_aux/..
+exec guile --no-auto-compile -L $srcdir -C $srcdir -e main -s "$0" "$@"
+!#
+
+;;; Copyright © 2024 Janneke Nieuwenhuizen <janneke@gnu.org>
+;;;
+;;; This program is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; This program is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+;;;; Commentary:
+;;;
+;;; This script provides an xgettext wrapper to (re)set POT-Creation-Date from
+;;; a Git timestamp.  Test doing something like:
+;;;
+;;; build-aux/xgettext.scm --files-from=po/guix/POTFILES.in --default-domain=test
+;;;
+;;;; Code:
+
+(use-modules (srfi srfi-1)
+             (srfi srfi-26)
+             (ice-9 curried-definitions)
+             (ice-9 match)
+             (ice-9 popen)
+             (ice-9 rdelim)
+             (guix build utils))
+
+(define ((option? name) option)
+  (string-prefix? name option))
+
+(define (get-option args name)
+  (let ((option (find (option? name) args)))
+    (and option
+         (substring option (string-length name)))))
+
+(define (pipe-command command)
+  (let* ((port (apply open-pipe* OPEN_READ command))
+         (output (read-string port)))
+    (close-port port)
+    output))
+
+\f
+;;;
+;;; Entry point.
+;;;
+(define (main args)
+  ;; Cater for being run in a container.
+  (setenv "LC_ALL" "en_US.UTF-8")
+  (setenv "TZ" "UTC0")
+  (fluid-set! %default-port-encoding #f)
+  (let* ((files-from (get-option args "--files-from="))
+         (default-domain (get-option args "--default-domain="))
+         (directory (or (get-option args "--directory=") "."))
+         (xgettext (or (get-option args "--xgettext=") "xgettext"))
+         (xgettext-args (filter (negate (option? "--xgettext=")) args))
+         (command (match xgettext-args
+                    ((xgettext.scm args ...)
+                     `(,xgettext ,@args))))
+         (result (apply system* command))
+         (status (/ result 256)))
+    (if (or (not (zero? status))
+            (not files-from))
+        (exit status)
+        (let* ((text (with-input-from-file files-from read-string))
+               (lines (string-split text #\newline))
+               (files (filter (negate (cute string-prefix? "#" <>)) lines))
+               (files (map (cute string-append directory "/" <>) files))
+               (git-command `("git" "log" "--pretty=format:%ci" "-n1" ,@files))
+               (timestamp (pipe-command git-command))
+               (po-file (string-append default-domain ".po")))
+          (when (string-null? timestamp)
+            (exit 1))
+          (substitute* po-file
+            (("(\"POT-Creation-Date: )[^\\]*" all header)
+             (string-append header timestamp)))))))
diff --git a/po/guix/Makevars b/po/guix/Makevars
index 88a4e8c7bc..4cfd0f431d 100644
--- a/po/guix/Makevars
+++ b/po/guix/Makevars
@@ -5,6 +5,10 @@ DOMAIN = guix
 subdir = po/guix
 top_builddir = ../..
 
+# We use our xgettext.scm wrapper to produce .PO files reproducibly using a
+# timestamp from Git.
+XGETTEXT:=$(top_srcdir)/build-aux/xgettext.scm
+
 # These options get passed to xgettext.  We want to catch standard
 # gettext uses, and SRFI-35 error condition messages.  In C++ code
 # we use 'n_' instead of the more usual 'N_' for no-ops.
@@ -14,7 +18,8 @@ XGETTEXT_OPTIONS =				\
   --keyword=message				\
   --keyword=description				\
   --keyword=synopsis				\
-  --keyword=n_
+  --keyword=n_					\
+  --xgettext=$(XGETTEXT_)
 
 COPYRIGHT_HOLDER = the authors of Guix (msgids)
 
diff --git a/po/packages/Makevars b/po/packages/Makevars
index 65912786d8..0ba4f1ba7e 100644
--- a/po/packages/Makevars
+++ b/po/packages/Makevars
@@ -6,12 +6,18 @@ DOMAIN = guix-packages
 subdir = po/packages
 top_builddir = ../..
 
+# We use our xgettext.scm wrapper to produce .PO files reproducibly using a
+# timestamp from Git.  The `real' xgettext is passed as an option to
+# xgettext.scm
+XGETTEXT:=$(top_srcdir)/build-aux/xgettext.scm
+
 # These options get passed to xgettext.  We want to catch exclusively package
 # synopses and descriptions.
 XGETTEXT_OPTIONS =				\
   --language=Scheme --from-code=UTF-8		\
-  --keyword=synopsis --keyword=description      \
-  --keyword=output-synopsis:2
+  --keyword=synopsis --keyword=description	\
+  --keyword=output-synopsis:2			\
+  --xgettext=$(XGETTEXT_)
 
 COPYRIGHT_HOLDER = the authors of Guix (msgids)
 
-- 
2.41.0





^ permalink raw reply related	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH v3 09/13] maint: Use reproducible Git timestamp for POT-Creation-Date.
  2024-04-08 18:46 ` [bug#70169] [PATCH v3 00/13] Reproducible `make dist' tarball in defiance of Autotools and Gettext Janneke Nieuwenhuizen
                     ` (7 preceding siblings ...)
  2024-04-08 18:46   ` [bug#70169] [PATCH v3 08/13] maint: Use xgettext.scm wrapper to create .PO files reproducibly Janneke Nieuwenhuizen
@ 2024-04-08 18:46   ` Janneke Nieuwenhuizen
  2024-04-08 18:46   ` [bug#70169] [PATCH v3 10/13] maint: Avoid EPS generation to fail silently, ensure reproducibility Janneke Nieuwenhuizen
                     ` (3 subsequent siblings)
  12 siblings, 0 replies; 66+ messages in thread
From: Janneke Nieuwenhuizen @ 2024-04-08 18:46 UTC (permalink / raw)
  To: 70169; +Cc: Florian Pelz, Julien Lepiller

* po/doc/local.mk (%D%/%.pot): Replace POT-Creation-Date using timestamp from
Git.
(%D%/guix-manual.pot): Likewise.

Change-Id: I1b7f8cc147084c1804deb7be9d36e5eeda2599cb
---
 po/doc/local.mk | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/po/doc/local.mk b/po/doc/local.mk
index dd6ba30133..77ec4721e3 100644
--- a/po/doc/local.mk
+++ b/po/doc/local.mk
@@ -1,6 +1,7 @@
 # GNU Guix --- Functional package management for GNU
 # Copyright © 2018 Julien Lepiller <julien@lepiller.eu>
 # Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+# Copyright © 2024 Janneke Nieuwenhuizen <janneke@gnu.org>
 #
 # This file is part of GNU Guix.
 #
@@ -44,12 +45,19 @@ POT_OPTIONS = \
 	--msgid-bugs-address "bug-guix@gnu.org"
 
 %D%/%.pot: $(srcdir)/doc/%.texi
-	$(AM_V_PO4A)$(PO4A_UPDATEPO) -M UTF-8 -f texinfo -m "$<" \
-	   -p "$@" $(POT_OPTIONS) && \
-	touch $@
+	$(AM_V_PO4A)$(PO4A_UPDATEPO) -M UTF-8 -f texinfo -m "$<"	\
+	   -p "$@-t" $(POT_OPTIONS)
+	date="$$(git log --pretty=format:%ci -n 1 -- $< 2>/dev/null	\
+		|| echo $(SOURCE_DATE_EPOCH))"				\
+	sed -ri -e "s,^(.POT-Creation-Date: )[^\]*,\1$$date," "$@-t"
+	mv "$@-t" "$@"
 
 %D%/guix-manual.pot: %D%/guix.pot %D%/contributing.pot
-	msgcat $^ > $@
+	msgcat $^ > "$@-t"
+	date="$$(git log --pretty=format:%ci -n 1 -- $< 2>/dev/null	\
+		|| echo $(SOURCE_DATE_EPOCH))"				\
+	sed -ri "s,^(.POT-Creation-Date: )[^\]*,\1$$date," "$@-t"
+	mv "$@-t" "$@"
 
 doc-pot-update: %D%/guix-manual.pot %D%/guix-cookbook.pot
 .PHONY: doc-pot-update
-- 
2.41.0





^ permalink raw reply related	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH v3 10/13] maint: Avoid EPS generation to fail silently, ensure reproducibility.
  2024-04-08 18:46 ` [bug#70169] [PATCH v3 00/13] Reproducible `make dist' tarball in defiance of Autotools and Gettext Janneke Nieuwenhuizen
                     ` (8 preceding siblings ...)
  2024-04-08 18:46   ` [bug#70169] [PATCH v3 09/13] maint: Use reproducible Git timestamp for POT-Creation-Date Janneke Nieuwenhuizen
@ 2024-04-08 18:46   ` Janneke Nieuwenhuizen
  2024-04-08 18:46   ` [bug#70169] [PATCH v3 11/13] maint: Avoid PNG and PDF generation to fail silently Janneke Nieuwenhuizen
                     ` (2 subsequent siblings)
  12 siblings, 0 replies; 66+ messages in thread
From: Janneke Nieuwenhuizen @ 2024-04-08 18:46 UTC (permalink / raw)
  To: 70169

Currently, Graphviz' dot does not insert a %%CreationDate.  ImageMagick's
convert on PNG->EPS does insert a %%CreationDate but it respects
SOURCE_DATE_EPOCH.

* doc/local.mk (.png.eps): Split single shell command into separate recipe
lines, prefixed by $(AM_V_at).
(.dot.png): Likewise.  Check that generated EPS file has no %%CreationDate.

Change-Id: I5a03485c19c72f0c46411815c51290e52a8e5399
---
 doc/local.mk | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/doc/local.mk b/doc/local.mk
index 7a9840187a..e5ee06f6ee 100644
--- a/doc/local.mk
+++ b/doc/local.mk
@@ -152,12 +152,13 @@ DOT_OPTIONS =					\
 	mv "$(srcdir)/$@.tmp" "$(srcdir)/$@"
 
 .dot.eps:
-	$(AM_V_DOT)$(DOT) -Teps $(DOT_OPTIONS) < "$<" > "$(srcdir)/$@.tmp"; \
-	mv "$(srcdir)/$@.tmp" "$(srcdir)/$@"
+	$(AM_V_DOT)$(DOT) -Teps $(DOT_OPTIONS) < "$<" > "$(srcdir)/$@.tmp"
+	$(AM_v_at)! grep -q %%CreationDate "$(srcdir)/$@.tmp"
+	$(AM_V_at)mv "$(srcdir)/$@.tmp" "$@"
 
 .png.eps:
-	$(AM_V_GEN)convert "$<" "$@-tmp.eps"; \
-	mv "$@-tmp.eps" "$@"
+	$(AM_V_GEN)convert "$<" "$@-tmp.eps"
+	$(AM_V_at)mv "$@-tmp.eps" "$@"
 
 # We cannot add new dependencies to `%D%/guix.pdf' & co. (info "(automake)
 # Extending").  Using the `-local' rules is imperfect, because they may be
-- 
2.41.0





^ permalink raw reply related	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH v3 11/13] maint: Avoid PNG and PDF generation to fail silently.
  2024-04-08 18:46 ` [bug#70169] [PATCH v3 00/13] Reproducible `make dist' tarball in defiance of Autotools and Gettext Janneke Nieuwenhuizen
                     ` (9 preceding siblings ...)
  2024-04-08 18:46   ` [bug#70169] [PATCH v3 10/13] maint: Avoid EPS generation to fail silently, ensure reproducibility Janneke Nieuwenhuizen
@ 2024-04-08 18:46   ` Janneke Nieuwenhuizen
  2024-04-08 18:46   ` [bug#70169] [PATCH v3 12/13] maint: Reset CreationDate metadata on generated PDFs Janneke Nieuwenhuizen
  2024-04-08 18:46   ` [bug#70169] [PATCH v3 13/13] maint: Ensure generated file reproducibility for dist Janneke Nieuwenhuizen
  12 siblings, 0 replies; 66+ messages in thread
From: Janneke Nieuwenhuizen @ 2024-04-08 18:46 UTC (permalink / raw)
  To: 70169

* doc/local.mk (.dot.png): Split single shell command into separate recipe
lines, prefixed by $(AM_V_at).
(.dot.pdf): Likewise.

Change-Id: I41fb856bb73f947abd91361ed203132e939f3897
---
 doc/local.mk | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/doc/local.mk b/doc/local.mk
index e5ee06f6ee..569d20c5cb 100644
--- a/doc/local.mk
+++ b/doc/local.mk
@@ -144,12 +144,12 @@ DOT_OPTIONS =					\
   -Nfontsize=9 -Nheight=.1 -Nwidth=.1
 
 .dot.png:
-	$(AM_V_DOT)$(DOT) -Tpng $(DOT_OPTIONS) < "$<" > "$(srcdir)/$@.tmp"; \
-	mv "$(srcdir)/$@.tmp" "$(srcdir)/$@"
+	$(AM_V_DOT)$(DOT) -Tpng $(DOT_OPTIONS) < "$<" > "$(srcdir)/$@.tmp"
+	$(AM_V_at)mv "$(srcdir)/$@.tmp" "$(srcdir)/$@"
 
 .dot.pdf:
-	$(AM_V_DOT)$(DOT) -Tpdf $(DOT_OPTIONS) < "$<" > "$(srcdir)/$@.tmp"; \
-	mv "$(srcdir)/$@.tmp" "$(srcdir)/$@"
+	$(AM_V_DOT)$(DOT) -Tpdf $(DOT_OPTIONS) < "$<" > "$(srcdir)/$@.tmp"
+	$(AM_V_at)mv "$(srcdir)/$@.tmp" "$(srcdir)/$@"
 
 .dot.eps:
 	$(AM_V_DOT)$(DOT) -Teps $(DOT_OPTIONS) < "$<" > "$(srcdir)/$@.tmp"
-- 
2.41.0





^ permalink raw reply related	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH v3 12/13] maint: Reset CreationDate metadata on generated PDFs.
  2024-04-08 18:46 ` [bug#70169] [PATCH v3 00/13] Reproducible `make dist' tarball in defiance of Autotools and Gettext Janneke Nieuwenhuizen
                     ` (10 preceding siblings ...)
  2024-04-08 18:46   ` [bug#70169] [PATCH v3 11/13] maint: Avoid PNG and PDF generation to fail silently Janneke Nieuwenhuizen
@ 2024-04-08 18:46   ` Janneke Nieuwenhuizen
  2024-04-08 18:46   ` [bug#70169] [PATCH v3 13/13] maint: Ensure generated file reproducibility for dist Janneke Nieuwenhuizen
  12 siblings, 0 replies; 66+ messages in thread
From: Janneke Nieuwenhuizen @ 2024-04-08 18:46 UTC (permalink / raw)
  To: 70169

* doc/local.mk (.dot.pdf): Create PDF in UTC0 and reset CreationDate metadata.

Change-Id: I3873ecdeec781c30874d53d032406cbe23922a25
---
 doc/local.mk | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/doc/local.mk b/doc/local.mk
index 569d20c5cb..72f80bb511 100644
--- a/doc/local.mk
+++ b/doc/local.mk
@@ -148,7 +148,11 @@ DOT_OPTIONS =					\
 	$(AM_V_at)mv "$(srcdir)/$@.tmp" "$(srcdir)/$@"
 
 .dot.pdf:
-	$(AM_V_DOT)$(DOT) -Tpdf $(DOT_OPTIONS) < "$<" > "$(srcdir)/$@.tmp"
+	$(AM_V_DOT)set -e; export TZ=UTC0;				\
+	    $(DOT) -Tpdf $(DOT_OPTIONS) < "$<" > "$(srcdir)/$@.tmp"
+	$(AM_V_at)sed -ri					\
+	    -e 's,(/CreationDate \(D:).*\),\119700101000000),'	\
+	    "$(srcdir)/$@.tmp"
 	$(AM_V_at)mv "$(srcdir)/$@.tmp" "$(srcdir)/$@"
 
 .dot.eps:
-- 
2.41.0





^ permalink raw reply related	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH v3 13/13] maint: Ensure generated file reproducibility for dist.
  2024-04-08 18:46 ` [bug#70169] [PATCH v3 00/13] Reproducible `make dist' tarball in defiance of Autotools and Gettext Janneke Nieuwenhuizen
                     ` (11 preceding siblings ...)
  2024-04-08 18:46   ` [bug#70169] [PATCH v3 12/13] maint: Reset CreationDate metadata on generated PDFs Janneke Nieuwenhuizen
@ 2024-04-08 18:46   ` Janneke Nieuwenhuizen
  2024-04-10 16:35     ` pelzflorian (Florian Pelz)
  12 siblings, 1 reply; 66+ messages in thread
From: Janneke Nieuwenhuizen @ 2024-04-08 18:46 UTC (permalink / raw)
  To: 70169

* doc/local.mk (doc-clean): New target.
(DIST_CONFIGURE_FLAGS): New variable.
(auto-clean): Use them in new target.
* Makefile.am (dist-doc-pot-update): Use it in new target.
(dist): Change to depend on it to clean possibly stale files, instead of
doc-pot-update directly.
Add a toplevel check to ensure that Autotools cache is up to date.

Change-Id: I2ff2d88db9fe1e708ab65e33e1f3d7ecee882cb4
---
 Makefile.am  | 28 +++++++++++++++++++++++++---
 doc/local.mk | 29 +++++++++++++++++++++++++++++
 2 files changed, 54 insertions(+), 3 deletions(-)

diff --git a/Makefile.am b/Makefile.am
index 7af88b2988..5f0809ee00 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -954,9 +954,31 @@ guix-binary.%.tar.xz:
 	cp "$$tarball" "$@.tmp" ; mv "$@.tmp" "$@"
 
 
-# The dependency on doc-pot-update is to generate the .pot files, which are
-# not checked in.
-dist: doc-pot-update
+# Assert that Autotools cache is up to date with Git, by checking
+# PACKAGE_VERSION against HEAD.  Indented to get past Automake.
+ ifeq ($(MAKECMDGOALS),dist)
+ git_version = $(shell build-aux/git-version-gen .tarball-version)
+ ifneq ($(PACKAGE_VERSION),$(git_version))
+ $(warning Autotools cache out of date.)
+ $(info Autotools cache version: $(PACKAGE_VERSION).)
+ $(info Git version: $(git_version).)
+ $(info Please run ./bootstrap && ./configure $(DIST_CONFIGURE_FLAGS))
+ ifneq ($(GUIX_ALLOW_IRREPRODUCIBLE_TARBALL),yes)
+ $(error Cannot create reproducible tarball)
+ else
+ $(warning Tarball will be irreproducible; distdir will not get removed!)
+ endif
+ endif
+ endif
+
+# The dependency on dist-doc-pot-update is to clean possibly stale doc and po
+# files and only then generate the .pot files, which are not checked in.
+dist: dist-doc-pot-update
+dist-doc-pot-update: auto-clean
+	$(MAKE) guile$(EXEEXT)
+	$(MAKE) -C po/guix all
+	$(MAKE) -C po/packages all
+	$(MAKE) doc-pot-update
 
 dist-hook: gen-ChangeLog gen-AUTHORS gen-tarball-version
 dist-hook: assert-no-store-file-names
diff --git a/doc/local.mk b/doc/local.mk
index 72f80bb511..f6d6640546 100644
--- a/doc/local.mk
+++ b/doc/local.mk
@@ -291,3 +291,32 @@ $(eval $(call version.texi-from-git,vti,doc/guix.texi,))
 $(foreach lang, $(MANUAL_LANGUAGES),							\
   $(eval i=$(shell echo $$(($(i)+1))))							\
   $(eval $(call version.texi-from-git,$(i),po/doc/guix-manual.$(lang).po,-$(lang))))
+
+DIST_CONFIGURE_FLAGS =				\
+  --localstatedir=/var				\
+  --sysconfdir=/etc
+
+# Delete all Autotools-generated files and rerun configure to ensure
+# a clean cache and distributing reproducible versions.
+auto-clean: maintainer-clean-vti doc-clean
+	rm -f ABOUT-NLS INSTALL
+	rm -f aclocal.m4 configure libtool Makefile.in
+	git clean -fdx -- '.am*' build-aux m4 po
+	rm -f guile
+	rm -f guix-daemon nix/nix-daemon/guix_daemon-guix-daemon.o
+# Automake fails if guix-cookbook-LANG.texi stubs are missing; running
+# autoreconf -vif is not enough.
+	./bootstrap
+# The dependency chain for the guix-cookbook-LANG.texi was cut on purpose;
+# they must be deleted to ensure a rebuild.
+	rm -f $(filter-out %D%/guix.texi %D%/guix-cookbook.texi, $(info_TEXINFOS))
+	./configure $(DIST_CONFIGURE_FLAGS)
+
+# Delete all generated doc files to ensure a clean cache and distributing
+# reproducible versions.
+doc-clean:
+	rm -f $(srcdir)/doc/*.1
+	rm -f $(srcdir)/doc/stamp*
+	rm -f $(DOT_FILES:%.dot=%.png)
+	rm -f $(DOT_VECTOR_GRAPHICS)
+	rm -f doc/images/coreutils-size-map.eps
-- 
2.41.0





^ permalink raw reply related	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH v3 13/13] maint: Ensure generated file reproducibility for dist.
  2024-04-08 18:46   ` [bug#70169] [PATCH v3 13/13] maint: Ensure generated file reproducibility for dist Janneke Nieuwenhuizen
@ 2024-04-10 16:35     ` pelzflorian (Florian Pelz)
  2024-04-10 17:25       ` Janneke Nieuwenhuizen
  0 siblings, 1 reply; 66+ messages in thread
From: pelzflorian (Florian Pelz) @ 2024-04-10 16:35 UTC (permalink / raw)
  To: Janneke Nieuwenhuizen; +Cc: 70169

Hello Janneke.

Janneke Nieuwenhuizen <janneke@gnu.org> writes:
> +auto-clean: maintainer-clean-vti doc-clean
> +	rm -f ABOUT-NLS INSTALL
> +	rm -f aclocal.m4 configure libtool Makefile.in
> +	git clean -fdx -- '.am*' build-aux m4 po

Could you enclose the call to git in
“if test -e .git; then … fi” as well?

I’ve switched to wip-tarball, but the hash is different.
It is still quite similar.

florian@floriandesktop ~/src/guix [env]$ diffoscope guix-1.3.0.57741-0e3053.tar.gz /tmp/guix-1.3.0.57741-0e3053.tar.gz 
--- guix-1.3.0.57741-0e3053.tar.gz
+++ /tmp/guix-1.3.0.57741-0e3053.tar.gz
├── guix-1.3.0.57741-0e3053.tar
│ ├── file list
│ │ @@ -215,25 +215,25 @@
│ │  -rw-r--r--   0        0        0    11898 2024-04-08 18:08:07.000000 guix-1.3.0.57741-0e3053/doc/local.mk
│ │  -rw-r--r--   0        0        0     2454 2024-04-08 18:08:07.000000 guix-1.3.0.57741-0e3053/doc/os-config-bare-bones.texi
│ │  -rw-r--r--   0        0        0     3960 2024-04-08 18:08:07.000000 guix-1.3.0.57741-0e3053/doc/os-config-desktop.texi
│ │  -rw-r--r--   0        0        0     2182 2024-04-08 18:08:07.000000 guix-1.3.0.57741-0e3053/doc/os-config-lightweight-desktop.texi
│ │  -rw-r--r--   0        0        0      838 2024-04-08 18:08:07.000000 guix-1.3.0.57741-0e3053/doc/package-hello.json
│ │  -rw-r--r--   0        0        0      615 2024-04-08 18:08:07.000000 guix-1.3.0.57741-0e3053/doc/package-hello.scm
│ │  -rw-r--r--   0        0        0      118 2024-04-08 18:08:07.000000 guix-1.3.0.57741-0e3053/doc/stamp-1
│ │ --rw-r--r--   0        0        0      123 2024-04-08 18:08:07.000000 guix-1.3.0.57741-0e3053/doc/stamp-2
│ │ --rw-r--r--   0        0        0      123 2024-04-08 18:08:07.000000 guix-1.3.0.57741-0e3053/doc/stamp-3
│ │ +-rw-r--r--   0        0        0      125 2024-04-08 18:08:07.000000 guix-1.3.0.57741-0e3053/doc/stamp-2
│ │ +-rw-r--r--   0        0        0      125 2024-04-08 18:08:07.000000 guix-1.3.0.57741-0e3053/doc/stamp-3
│ │  -rw-r--r--   0        0        0      118 2024-04-08 18:08:07.000000 guix-1.3.0.57741-0e3053/doc/stamp-4
│ │ --rw-r--r--   0        0        0      122 2024-04-08 18:08:07.000000 guix-1.3.0.57741-0e3053/doc/stamp-5
│ │ +-rw-r--r--   0        0        0      124 2024-04-08 18:08:07.000000 guix-1.3.0.57741-0e3053/doc/stamp-5
│ │  -rw-r--r--   0        0        0      118 2024-04-08 18:08:07.000000 guix-1.3.0.57741-0e3053/doc/stamp-6
│ │  -rw-r--r--   0        0        0      118 2024-04-08 18:08:07.000000 guix-1.3.0.57741-0e3053/doc/stamp-vti
│ │  -rw-r--r--   0        0        0      118 2024-04-08 18:08:07.000000 guix-1.3.0.57741-0e3053/doc/version-de.texi
│ │ --rw-r--r--   0        0        0      123 2024-04-08 18:08:07.000000 guix-1.3.0.57741-0e3053/doc/version-es.texi
│ │ --rw-r--r--   0        0        0      123 2024-04-08 18:08:07.000000 guix-1.3.0.57741-0e3053/doc/version-fr.texi
│ │ +-rw-r--r--   0        0        0      125 2024-04-08 18:08:07.000000 guix-1.3.0.57741-0e3053/doc/version-es.texi
│ │ +-rw-r--r--   0        0        0      125 2024-04-08 18:08:07.000000 guix-1.3.0.57741-0e3053/doc/version-fr.texi
│ │  -rw-r--r--   0        0        0      118 2024-04-08 18:08:07.000000 guix-1.3.0.57741-0e3053/doc/version-pt_BR.texi
│ │ --rw-r--r--   0        0        0      122 2024-04-08 18:08:07.000000 guix-1.3.0.57741-0e3053/doc/version-ru.texi
│ │ +-rw-r--r--   0        0        0      124 2024-04-08 18:08:07.000000 guix-1.3.0.57741-0e3053/doc/version-ru.texi
│ │  -rw-r--r--   0        0        0      118 2024-04-08 18:08:07.000000 guix-1.3.0.57741-0e3053/doc/version-zh_CN.texi
│ │  -rw-r--r--   0        0        0      118 2024-04-08 18:08:07.000000 guix-1.3.0.57741-0e3053/doc/version.texi
│ │  drwxr-xr-x   0        0        0        0 2024-04-08 18:08:07.000000 guix-1.3.0.57741-0e3053/etc/
│ │  -rwxr-xr-x   0        0        0    19022 2024-04-08 18:08:07.000000 guix-1.3.0.57741-0e3053/etc/committer.scm.in
│ │  drwxr-xr-x   0        0        0        0 2024-04-08 18:08:07.000000 guix-1.3.0.57741-0e3053/etc/completion/
│ │  drwxr-xr-x   0        0        0        0 2024-04-08 18:08:07.000000 guix-1.3.0.57741-0e3053/etc/completion/bash/
│ │  -rw-r--r--   0        0        0     9266 2024-04-08 18:08:07.000000 guix-1.3.0.57741-0e3053/etc/completion/bash/guix
│ ├── guix-1.3.0.57741-0e3053/doc/stamp-2
│ │ @@ -1,4 +1,4 @@
│ │ -@set UPDATED 29 Februar 2024
│ │ -@set UPDATED-MONTH Februar 2024
│ │ +@set UPDATED 29 February 2024
│ │ +@set UPDATED-MONTH February 2024
│ │  @set EDITION .3.0.57741-0e3053
│ │  @set VERSION .3.0.57741-0e3053
│ ├── guix-1.3.0.57741-0e3053/doc/stamp-3
│ │ @@ -1,4 +1,4 @@
│ │ -@set UPDATED 29 Februar 2024
│ │ -@set UPDATED-MONTH Februar 2024
│ │ +@set UPDATED 29 February 2024
│ │ +@set UPDATED-MONTH February 2024
│ │  @set EDITION .3.0.57741-0e3053
│ │  @set VERSION .3.0.57741-0e3053
│ ├── guix-1.3.0.57741-0e3053/doc/stamp-5
│ │ @@ -1,4 +1,4 @@
│ │ -@set UPDATED 1 Februar 2024
│ │ -@set UPDATED-MONTH Februar 2024
│ │ +@set UPDATED 1 February 2024
│ │ +@set UPDATED-MONTH February 2024
│ │  @set EDITION .3.0.57741-0e3053
│ │  @set VERSION .3.0.57741-0e3053
│ ├── guix-1.3.0.57741-0e3053/doc/version-es.texi
│ │ @@ -1,4 +1,4 @@
│ │ -@set UPDATED 29 Februar 2024
│ │ -@set UPDATED-MONTH Februar 2024
│ │ +@set UPDATED 29 February 2024
│ │ +@set UPDATED-MONTH February 2024
│ │  @set EDITION .3.0.57741-0e3053
│ │  @set VERSION .3.0.57741-0e3053
│ ├── guix-1.3.0.57741-0e3053/doc/version-fr.texi
│ │ @@ -1,4 +1,4 @@
│ │ -@set UPDATED 29 Februar 2024
│ │ -@set UPDATED-MONTH Februar 2024
│ │ +@set UPDATED 29 February 2024
│ │ +@set UPDATED-MONTH February 2024
│ │  @set EDITION .3.0.57741-0e3053
│ │  @set VERSION .3.0.57741-0e3053
│ ├── guix-1.3.0.57741-0e3053/doc/version-ru.texi
│ │ @@ -1,4 +1,4 @@
│ │ -@set UPDATED 1 Februar 2024
│ │ -@set UPDATED-MONTH Februar 2024
│ │ +@set UPDATED 1 February 2024
│ │ +@set UPDATED-MONTH February 2024
│ │  @set EDITION .3.0.57741-0e3053
│ │  @set VERSION .3.0.57741-0e3053

I have used an de_DE locale where February is Februar.

Regards,
Florian




^ permalink raw reply	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH v3 13/13] maint: Ensure generated file reproducibility for dist.
  2024-04-10 16:35     ` pelzflorian (Florian Pelz)
@ 2024-04-10 17:25       ` Janneke Nieuwenhuizen
  2024-04-11 11:32         ` pelzflorian (Florian Pelz)
  0 siblings, 1 reply; 66+ messages in thread
From: Janneke Nieuwenhuizen @ 2024-04-10 17:25 UTC (permalink / raw)
  To: pelzflorian (Florian Pelz); +Cc: 70169

pelzflorian (Florian Pelz) writes:

Hello Florian,

> Janneke Nieuwenhuizen <janneke@gnu.org> writes:
>> +auto-clean: maintainer-clean-vti doc-clean
>> +	rm -f ABOUT-NLS INSTALL
>> +	rm -f aclocal.m4 configure libtool Makefile.in
>> +	git clean -fdx -- '.am*' build-aux m4 po
>
> Could you enclose the call to git in
> “if test -e .git; then … fi” as well?

I've changed it to

	if test -e .git; then				\
	    git clean -fdx -- '.am*' build-aux m4 po;	\
	else						\
	    rm -rf .am*;				\
	    $(MAKE) -C po/guix maintainer-clean;	\
	    $(MAKE) -C po/packages maintainer-clean;	\
	fi

> I’ve switched to wip-tarball, but the hash is different.
> It is still quite similar.

> florian@floriandesktop ~/src/guix [env]$ diffoscope
> guix-1.3.0.57741-0e3053.tar.gz /tmp/guix-1.3.0.57741-0e3053.tar.gz
> --- guix-1.3.0.57741-0e3053.tar.gz
> +++ /tmp/guix-1.3.0.57741-0e3053.tar.gz
> ├── guix-1.3.0.57741-0e3053.tar
> │ ├── file list
[..]
> │ │ @@ -215,25 +215,25 @@

> │ │ --rw-r--r-- 0 0 0 123 2024-04-08 18:08:07.000000 guix-1.3.0.57741-0e3053/doc/stamp-2
> │ │ --rw-r--r-- 0 0 0 123 2024-04-08 18:08:07.000000 guix-1.3.0.57741-0e3053/doc/stamp-3
> │ │ +-rw-r--r-- 0 0 0 125 2024-04-08 18:08:07.000000 guix-1.3.0.57741-0e3053/doc/stamp-2
> │ │ +-rw-r--r-- 0 0 0 125 2024-04-08 18:08:07.000000 guix-1.3.0.57741-0e3053/doc/stamp-3
[..]

> guix-1.3.0.57741-0e3053/etc/completion/bash/guix
> │ ├── guix-1.3.0.57741-0e3053/doc/stamp-2
> │ │ @@ -1,4 +1,4 @@
> │ │ -@set UPDATED 29 Februar 2024
> │ │ -@set UPDATED-MONTH Februar 2024
> │ │ +@set UPDATED 29 February 2024
> │ │ +@set UPDATED-MONTH February 2024
> │ │  @set EDITION .3.0.57741-0e3053
> │ │  @set VERSION .3.0.57741-0e3053

[..]

> I have used an de_DE locale where February is Februar.

Wow, that's amazing news, and thanks for testing!  (I could have said:
well, using de_DE is /asking/ for such differences ;)

I tested with

    export LANG=de_DE LANGUAGE=fr_FR LC_TIME=pt_BR

and found similar errors, and only those.  In this case LC_TIME
prevailed.  So I made this change

--8<---------------cut here---------------start------------->8---
@@ -264,8 +264,8 @@ endif
 # Git rather than using metadata from the filesystem.
 define version.texi-from-git
 $(srcdir)/doc/stamp-$(1): $(srcdir)/$(2) $(top_srcdir)/configure
-	$$(AM_V_GEN)set -e						\
-	export LC_ALL=C;						\
+	$$(AM_V_GEN)set -e;						\
+	export LANG=C LANGUAGE=C LC_ALL=C LC_TIME=C; 			\
 	export TZ=UTC0;							\
 	timestamp="$$$$(git log --pretty=format:%ct -n1 -- "$$<"	\
 		2>/dev/null						\
--8<---------------cut here---------------end--------------->8---

and checked against a clean/LC_ALL=C locale.

Not sure if I should send a V4 for this?  Let's see if there are more
comments.

Greetings,
Janneke

-- 
Janneke Nieuwenhuizen <janneke@gnu.org>  | GNU LilyPond https://LilyPond.org
Freelance IT https://www.JoyOfSource.com | Avatar® https://AvatarAcademy.com




^ permalink raw reply	[flat|nested] 66+ messages in thread

* [bug#70169] [PATCH v3 13/13] maint: Ensure generated file reproducibility for dist.
  2024-04-10 17:25       ` Janneke Nieuwenhuizen
@ 2024-04-11 11:32         ` pelzflorian (Florian Pelz)
  2024-04-14  9:24           ` bug#70169: " Janneke Nieuwenhuizen
  0 siblings, 1 reply; 66+ messages in thread
From: pelzflorian (Florian Pelz) @ 2024-04-11 11:32 UTC (permalink / raw)
  To: Janneke Nieuwenhuizen; +Cc: 70169

Janneke Nieuwenhuizen <janneke@gnu.org> writes:
> @@ -264,8 +264,8 @@ endif
>  # Git rather than using metadata from the filesystem.
>  define version.texi-from-git
>  $(srcdir)/doc/stamp-$(1): $(srcdir)/$(2) $(top_srcdir)/configure
> -	$$(AM_V_GEN)set -e						\
> -	export LC_ALL=C;						\
> +	$$(AM_V_GEN)set -e;						\
> +	export LANG=C LANGUAGE=C LC_ALL=C LC_TIME=C; 			\
>  	export TZ=UTC0;							\
>  	timestamp="$$$$(git log --pretty=format:%ct -n1 -- "$$<"	\
>  		2>/dev/null						\

LGTM.  No v4 needed in my opinion.

Regards,
Florian




^ permalink raw reply	[flat|nested] 66+ messages in thread

* bug#70169: [PATCH v3 13/13] maint: Ensure generated file reproducibility for dist.
  2024-04-11 11:32         ` pelzflorian (Florian Pelz)
@ 2024-04-14  9:24           ` Janneke Nieuwenhuizen
  0 siblings, 0 replies; 66+ messages in thread
From: Janneke Nieuwenhuizen @ 2024-04-14  9:24 UTC (permalink / raw)
  To: pelzflorian (Florian Pelz); +Cc: 70169-done, ludo

pelzflorian (Florian Pelz) writes:

> Janneke Nieuwenhuizen <janneke@gnu.org> writes:
>> @@ -264,8 +264,8 @@ endif
>>  # Git rather than using metadata from the filesystem.
>>  define version.texi-from-git
>>  $(srcdir)/doc/stamp-$(1): $(srcdir)/$(2) $(top_srcdir)/configure
>> -	$$(AM_V_GEN)set -e						\
>> -	export LC_ALL=C;						\
>> +	$$(AM_V_GEN)set -e;						\
>> +	export LANG=C LANGUAGE=C LC_ALL=C LC_TIME=C; 			\
>>  	export TZ=UTC0;							\
>>  	timestamp="$$$$(git log --pretty=format:%ct -n1 -- "$$<"	\
>>  		2>/dev/null						\
>
> LGTM.  No v4 needed in my opinion.

Great, pushed to master as 416f11f1d4b2e12d8db2687e753d760f148cfc2d

-- 
Janneke Nieuwenhuizen <janneke@gnu.org>  | GNU LilyPond https://LilyPond.org
Freelance IT https://www.JoyOfSource.com | Avatar® https://AvatarAcademy.com




^ permalink raw reply	[flat|nested] 66+ messages in thread

end of thread, other threads:[~2024-04-14  9:26 UTC | newest]

Thread overview: 66+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-04-03 19:08 [bug#70169] [PATCH 0/7] Reproducible `make dist' tarball in defiance of Autotools and Gettext Janneke Nieuwenhuizen
2024-04-03 19:11 ` [bug#70169] [PATCH 1/7] maint: Cater for running `make dist' from a worktree Janneke Nieuwenhuizen
2024-04-03 19:11 ` [bug#70169] [PATCH 2/7] maint: Use reproducible timestamps and name for tarball Janneke Nieuwenhuizen
2024-04-03 20:45   ` Ludovic Courtès
2024-04-03 20:49     ` Janneke Nieuwenhuizen
2024-04-03 19:11 ` [bug#70169] [PATCH 3/7] maint: Generate 'doc/version.texi' reproducibly Janneke Nieuwenhuizen
2024-04-03 19:11 ` [bug#70169] [PATCH 4/7] maint: Help help2man generate reproducible man-pages Janneke Nieuwenhuizen
2024-04-03 19:11 ` [bug#70169] [PATCH 5/7] maint: Generate 'doc/version-LANG.texi' reproducibly Janneke Nieuwenhuizen
2024-04-03 20:25   ` Ludovic Courtès
2024-04-03 20:33     ` Janneke Nieuwenhuizen
2024-04-08  9:26       ` Ludovic Courtès
2024-04-03 20:39   ` Ludovic Courtès
2024-04-03 20:43     ` Janneke Nieuwenhuizen
2024-04-03 19:11 ` [bug#70169] [PATCH 6/7] maint: Use reproducible Git timestamp for POT-Creation-Date Janneke Nieuwenhuizen
2024-04-03 20:26   ` Ludovic Courtès
2024-04-03 20:36     ` Janneke Nieuwenhuizen
2024-04-04  5:12     ` Janneke Nieuwenhuizen
2024-04-03 19:11 ` [bug#70169] [PATCH 7/7] maint: Ensure generated file reproducibility for dist Janneke Nieuwenhuizen
2024-04-03 20:57 ` [bug#70169] [PATCH 0/7] Reproducible `make dist' tarball in defiance of Autotools and Gettext Ludovic Courtès
2024-04-03 21:04   ` Janneke Nieuwenhuizen
2024-04-03 21:28     ` Ludovic Courtès
2024-04-06 21:16       ` Janneke Nieuwenhuizen
2024-04-06 21:17 ` [bug#70169] [PATCH v2 00/12] " Janneke Nieuwenhuizen
2024-04-06 21:17   ` [bug#70169] [PATCH v2 01/12] maint: Cater for running `make dist' from a worktree Janneke Nieuwenhuizen
2024-04-06 21:17   ` [bug#70169] [PATCH v2 02/12] maint: Use reproducible timestamps and name for tarball Janneke Nieuwenhuizen
2024-04-06 21:17   ` [bug#70169] [PATCH v2 03/12] maint: Generate 'doc/version.texi' reproducibly Janneke Nieuwenhuizen
2024-04-06 21:17   ` [bug#70169] [PATCH v2 04/12] maint: Help help2man generate reproducible man-pages Janneke Nieuwenhuizen
2024-04-07 13:54     ` pelzflorian (Florian Pelz)
2024-04-07 14:06       ` Janneke Nieuwenhuizen
2024-04-07 15:20         ` pelzflorian (Florian Pelz)
2024-04-08  9:23       ` Ludovic Courtès
2024-04-08  9:40         ` Janneke Nieuwenhuizen
2024-04-06 21:17   ` [bug#70169] [PATCH v2 05/12] maint: Generate AUTHORS and ChangeLog reproducibly Janneke Nieuwenhuizen
2024-04-06 21:17   ` [bug#70169] [PATCH v2 06/12] maint: Generate 'doc/version-LANG.texi' reproducibly Janneke Nieuwenhuizen
2024-04-06 21:17   ` [bug#70169] [PATCH v2 07/12] maint: Use xgettext.scm wrapper to create .PO files reproducibly Janneke Nieuwenhuizen
2024-04-06 21:18   ` [bug#70169] [PATCH v2 08/12] maint: Use reproducible Git timestamp for POT-Creation-Date Janneke Nieuwenhuizen
2024-04-06 21:18   ` [bug#70169] [PATCH v2 09/12] maint: Remove %%CreationDate from generated EPS files Janneke Nieuwenhuizen
2024-04-08  9:41     ` Ludovic Courtès
2024-04-08 17:12       ` Janneke Nieuwenhuizen
2024-04-06 21:18   ` [bug#70169] [PATCH v2 10/12] maint: Avoid PNG and PDF generation to fail silently Janneke Nieuwenhuizen
2024-04-06 21:18   ` [bug#70169] [PATCH v2 11/12] maint: Reset CreationDate metadata on generated PDFs Janneke Nieuwenhuizen
2024-04-07 17:16     ` pelzflorian (Florian Pelz)
2024-04-07 17:38       ` Janneke Nieuwenhuizen
2024-04-07 18:09         ` Janneke Nieuwenhuizen
2024-04-06 21:18   ` [bug#70169] [PATCH v2 12/12] maint: Ensure generated file reproducibility for dist Janneke Nieuwenhuizen
2024-04-07  8:57   ` [bug#70169] [PATCH v2 13/12] doc: Use "dejavu sans" instead of "Helvetica" or "sans" in dot images Janneke Nieuwenhuizen
2024-04-08 12:15     ` Ludovic Courtès
2024-04-08 17:26       ` Janneke Nieuwenhuizen
2024-04-08 18:46 ` [bug#70169] [PATCH v3 00/13] Reproducible `make dist' tarball in defiance of Autotools and Gettext Janneke Nieuwenhuizen
2024-04-08 18:46   ` [bug#70169] [PATCH v3 01/13] doc: Use "dejavu sans" instead of "Helvetica" or "sans" in dot images Janneke Nieuwenhuizen
2024-04-08 18:46   ` [bug#70169] [PATCH v3 02/13] maint: Cater for running `make dist' from a worktree Janneke Nieuwenhuizen
2024-04-08 18:46   ` [bug#70169] [PATCH v3 03/13] maint: Use reproducible timestamps and name for tarball Janneke Nieuwenhuizen
2024-04-08 18:46   ` [bug#70169] [PATCH v3 04/13] maint: Generate 'doc/version.texi' reproducibly Janneke Nieuwenhuizen
2024-04-08 18:46   ` [bug#70169] [PATCH v3 05/13] maint: Help help2man generate reproducible man-pages Janneke Nieuwenhuizen
2024-04-08 18:46   ` [bug#70169] [PATCH v3 06/13] maint: Generate AUTHORS and ChangeLog reproducibly Janneke Nieuwenhuizen
2024-04-08 18:46   ` [bug#70169] [PATCH v3 07/13] maint: Generate 'doc/version-LANG.texi' reproducibly Janneke Nieuwenhuizen
2024-04-08 18:46   ` [bug#70169] [PATCH v3 08/13] maint: Use xgettext.scm wrapper to create .PO files reproducibly Janneke Nieuwenhuizen
2024-04-08 18:46   ` [bug#70169] [PATCH v3 09/13] maint: Use reproducible Git timestamp for POT-Creation-Date Janneke Nieuwenhuizen
2024-04-08 18:46   ` [bug#70169] [PATCH v3 10/13] maint: Avoid EPS generation to fail silently, ensure reproducibility Janneke Nieuwenhuizen
2024-04-08 18:46   ` [bug#70169] [PATCH v3 11/13] maint: Avoid PNG and PDF generation to fail silently Janneke Nieuwenhuizen
2024-04-08 18:46   ` [bug#70169] [PATCH v3 12/13] maint: Reset CreationDate metadata on generated PDFs Janneke Nieuwenhuizen
2024-04-08 18:46   ` [bug#70169] [PATCH v3 13/13] maint: Ensure generated file reproducibility for dist Janneke Nieuwenhuizen
2024-04-10 16:35     ` pelzflorian (Florian Pelz)
2024-04-10 17:25       ` Janneke Nieuwenhuizen
2024-04-11 11:32         ` pelzflorian (Florian Pelz)
2024-04-14  9:24           ` bug#70169: " Janneke Nieuwenhuizen

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).