On Wed, 18 Feb 2026, "Bernhard M. Wiedemann" <[email protected]> wrote:
> On 2/18/26 1:55 PM, Olivier Dion wrote:
>> On Wed, 18 Feb 2026, "Bernhard M. Wiedemann" <[email protected]> wrote:
>>> Today I reverted that work-around for a test and parallelism still
>>> caused variations.
>> 
>> Interesting, so cross-modules inlining is not the only culprit.  Do you
>> have an idea?  If you have a .tar.gz, with two binaries so I could use
>> diffoscope on them, that would be great.
>
> I uploaded 2 rpms to
> https://rb.zq1.de/other/guile/
>
> With rpm2cpio you can unpack them.
> And I uploaded them to diffoscope for you:

But is this the case with Guile core?

It seems to me that guile-parted is not reproducible, because of the
inlining issue.

I attached a small patch (to be applied on top of 0.0.7) that I just
copied from the two stages from Guile core.  On my system, I managed to
make guile-parted reproducible that way.

>From ee847341fb7957dee974919e032b08a77a5ef2a3 Mon Sep 17 00:00:00 2001
From: Olivier Dion <[email protected]>
Date: Wed, 18 Feb 2026 12:12:49 -0500
Subject: [PATCH] reproducible

---
 Makefile.am   | 22 ++--------------------
 am/compile.am | 41 +++++++++++++++++++++++++++++++++++++++++
 configure.ac  |  2 +-
 guile.am      | 14 --------------
 4 files changed, 44 insertions(+), 35 deletions(-)
 create mode 100644 am/compile.am
 delete mode 100644 guile.am

diff --git a/Makefile.am b/Makefile.am
index 291a1b4..cfae4ad 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,22 +1,4 @@
-include guile.am
-
-moddir=$(prefix)/share/guile/site/$(GUILE_EFFECTIVE_VERSION)
-godir=$(libdir)/guile/$(GUILE_EFFECTIVE_VERSION)/site-ccache
-
-SOURCES =                           \
-  parted.scm                        \
-  parted/bindings.scm               \
-  parted/config.scm                 \
-  parted/constraint.scm             \
-  parted/device.scm                 \
-  parted/disk.scm                   \
-  parted/exception.scm              \
-  parted/filesystem.scm             \
-  parted/geom.scm                   \
-  parted/unit.scm                   \
-  parted/timer.scm                  \
-  parted/natmath.scm                \
-  parted/structs.scm
+SUBDIRS = stage1 stage2
 
 TESTS =                             \
   tests/constraint.scm              \
@@ -40,7 +22,7 @@ AM_SCM_LOG_DRIVER_FLAGS = --brief=yes
 
 AM_SCM_LOG_FLAGS = --no-auto-compile -L "$(top_srcdir)"
 
-EXTRA_DIST +=                       \
+EXTRA_DIST =                        \
   pre-inst-env.in                   \
   build-aux/test-driver.scm		  		\
   $(TESTS)
diff --git a/am/compile.am b/am/compile.am
new file mode 100644
index 0000000..0b0dd08
--- /dev/null
+++ b/am/compile.am
@@ -0,0 +1,41 @@
+vpath %.scm @top_srcdir@
+
+SOURCES =                           \
+  parted.scm                        \
+  parted/bindings.scm               \
+  $(top_builddir)/parted/config.scm \
+  parted/constraint.scm             \
+  parted/device.scm                 \
+  parted/disk.scm                   \
+  parted/exception.scm              \
+  parted/filesystem.scm             \
+  parted/geom.scm                   \
+  parted/unit.scm                   \
+  parted/timer.scm                  \
+  parted/natmath.scm                \
+  parted/structs.scm
+
+GOBJECTS = $(SOURCES:%.scm=%.go)
+
+moddir=$(prefix)/share/guile/site/$(GUILE_EFFECTIVE_VERSION)
+godir=$(libdir)/guile/$(GUILE_EFFECTIVE_VERSION)/site-ccache
+
+nobase_mod_DATA = $(SOURCES) $(NOCOMP_SOURCES)
+nobase_go_DATA = $(GOBJECTS)
+
+guile_install_go_files = install-nobase_goDATA
+$(guile_install_go_files): install-nobase_modDATA
+
+CLEANFILES = $(GOBJECTS)
+EXTRA_DIST = $(SOURCES) $(NOCOMP_SOURCES)
+GUILE_WARNINGS = -Wunbound-variable -Warity-mismatch -Wformat
+SUFFIXES = .scm .go
+
+COMPILE = $(AM_V_GEN)                              \
+  $(top_builddir)/pre-inst-env                     \
+  $(GUILE_TOOLS) compile                           \
+          $(GUILE_TARGET)                          \
+          $(GUILE_WARNINGS) $(GUILE_STAGE_OPTIMIZATIONS)
+
+.scm.go:
+	$(COMPILE) -o "$@" "$<"
diff --git a/configure.ac b/configure.ac
index 210029b..61bbafc 100644
--- a/configure.ac
+++ b/configure.ac
@@ -24,7 +24,7 @@ AS_IF([test "x$LIBPARTED_LIBDIR" = "x"], [
 ])
 AC_SUBST([LIBPARTED_LIBDIR])
 
-AC_CONFIG_FILES([Makefile parted/config.scm])
+AC_CONFIG_FILES([Makefile stage1/Makefile stage2/Makefile parted/config.scm])
 AC_CONFIG_FILES([pre-inst-env], [chmod +x pre-inst-env])
 
 if test "$cross_compiling" != no; then
diff --git a/guile.am b/guile.am
deleted file mode 100644
index 3761e41..0000000
--- a/guile.am
+++ /dev/null
@@ -1,14 +0,0 @@
-GOBJECTS = $(SOURCES:%.scm=%.go)
-
-nobase_mod_DATA = $(SOURCES) $(NOCOMP_SOURCES)
-nobase_go_DATA = $(GOBJECTS)
-
-guile_install_go_files = install-nobase_goDATA
-$(guile_install_go_files): install-nobase_modDATA
-
-CLEANFILES = $(GOBJECTS)
-EXTRA_DIST = $(SOURCES) $(NOCOMP_SOURCES)
-GUILE_WARNINGS = -Wunbound-variable -Warity-mismatch -Wformat
-SUFFIXES = .scm .go
-.scm.go:
-	$(AM_V_GEN)$(top_builddir)/pre-inst-env $(GUILE_TOOLS) compile $(GUILE_TARGET) $(GUILE_WARNINGS) -o "$@" "$<"
-- 
2.52.0

Note that I did not added the logic to install the binaries from stage2.

Now I wonder, is Guile core itself reproducible?

Thanks,
Olivier
-- 
Olivier Dion

Reply via email to