Subject: bug#70410: closed (Re: bug#70410: Fwd: [PATCH] gotools: Workaround non-reproduceability of automake)

From: [email-masked] (GNU bug Tracking System)
Date: Thu, 18 Apr 2024 21:06:03 +0000

Your bug report

#70410: Fwd: [PATCH] gotools: Workaround non-reproduceability of automake

which was filed against the automake package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
70410: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=70410
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#70410: Fwd: [PATCH] gotools: Workaround non-reproduceability of automake
From: Karl Berry <[email-masked]>
To: [email-masked]
Cc: [email-masked], [email-masked]
Date: Thu, 18 Apr 2024 15:04:52 -0600
List-Id: <debbugs-submit.debbugs.gnu.org>

Per https://gcc.gnu.org/pipermail/gcc-patches/2024-April/649576.html
this was fixed in https://bugs.gnu.org/46744. As I understand it.
Closing.

Subject: Fwd: [PATCH] gotools: Workaround non-reproduceability of automake
From: Eric Gallager <[email-masked]>
To: [email-masked]
Date: Mon, 15 Apr 2024 20:03:36 -0400
List-Id: <debbugs-submit.debbugs.gnu.org>

GCC developers have recently found a source of non-determinism in
automake; this is bad for reproducible builds:

---------- Forwarded message ---------
From: Jakub Jelinek <[email-masked]>
Date: Mon, Apr 15, 2024 at 8:43 AM
Subject: [PATCH] gotools: Workaround non-reproduceability of automake
To: Ian Lance Taylor <[email-masked]>, Mark Wielaard <[email-masked]>
Cc: <[email-masked]>

Hi!

The regen bot recently flagged a difference in gotools/Makefile.in.
Trying it locally, it seems pretty random
for i in `seq 20`; do
PATH=~/automake-1.15.1/bin:~/autoconf-2.69/bin:$PATH automake; echo -n
`git diff Makefile.in | wc -l`" "; done; echo; for i in `seq 20`; do
PATH=~/automake-1.15.1/bin:~/autoconf-2.69/bin:$PATH setarch x86_64 -R
automake; echo -n `git diff Makefile.in | wc -l`" "; done; echo;
14 14 14 0 0 0 14 0 14 0 14 14 14 14 0 14 14 0 0 0
14 0 14 0 0 14 14 14 0 14 14 0 0 14 14 14 0 0 0 14
The 14 line git diff is
diff --git a/gotools/Makefile.in b/gotools/Makefile.in
index 36c2ec2abd3..f40883c39be 100644
--- a/gotools/Makefile.in
+++ b/gotools/Makefile.in
@@ -704,8 +704,8 @@ distclean-generic:
 maintainer-clean-generic:
        @echo "This command is intended for maintainers to use"
        @echo "it deletes files that may require special tools to rebuild."
-@NATIVE_FALSE@install-exec-local:
 @NATIVE_FALSE@uninstall-local:
+@NATIVE_FALSE@install-exec-local:
 clean: clean-am

 clean-am: clean-binPROGRAMS clean-generic clean-noinstPROGRAMS \
so whether it is
@NATIVE_FALSE@install-exec-local:
@NATIVE_FALSE@uninstall-local:
or
@NATIVE_FALSE@uninstall-local:
@NATIVE_FALSE@install-exec-local:
depends on some hash table traversal or what.

I'm not familiar with automake/m4 enough to debug that, so I'm
instead offering a workaround, with this patch the order is deterministic.

2024-04-15  Jakub Jelinek  <[email-masked]>

        * Makefile.am (install-exec-local, uninstall-local): Add goals
        on the else branch of if NATIVE to ensure reproducibility.
        * Makefile.in: Regenerate.

--- gotools/Makefile.am.jj      2023-11-04 09:02:35.802995614 +0100
+++ gotools/Makefile.am 2024-04-15 14:30:03.647171636 +0200
@@ -366,5 +366,7 @@ else
 # only do this if such a compiler is available.  We also need to get
 # the right values for GOARCH and GOOS in the default build context in
 # the go/build package.  Figure this out later.
+install-exec-local:
+uninstall-local:

 endif
--- gotools/Makefile.in.jj      2023-11-03 17:08:46.000439645 +0100
+++ gotools/Makefile.in 2024-04-15 14:31:32.270040117 +0200
@@ -704,8 +704,6 @@ distclean-generic:
 maintainer-clean-generic:
        @echo "This command is intended for maintainers to use"
        @echo "it deletes files that may require special tools to rebuild."
-@NATIVE_FALSE@install-exec-local:
-@NATIVE_FALSE@uninstall-local:
 clean: clean-am

 clean-am: clean-binPROGRAMS clean-generic clean-noinstPROGRAMS \
@@ -1035,6 +1033,8 @@ mostlyclean-local:
 # only do this if such a compiler is available.  We also need to get
 # the right values for GOARCH and GOOS in the default build context in
 # the go/build package.  Figure this out later.
+@NATIVE_FALSE@install-exec-local:
+@NATIVE_FALSE@uninstall-local:

 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.

        Jakub