forked from pool/autoconf
100 lines
2.8 KiB
Diff
100 lines
2.8 KiB
Diff
|
From 07130c3e48d12ec155ac5d7630dc7477b6989904 Mon Sep 17 00:00:00 2001
|
|||
|
From: Zack Weinberg <zackw@panix.com>
|
|||
|
Date: Tue, 29 Dec 2020 15:33:33 -0500
|
|||
|
Subject: =?UTF-8?q?autom4te:=20always=20update=20the=20output=20file,=20ev?=
|
|||
|
=?UTF-8?q?en=20if=20it=20hasn=E2=80=99t=20changed?=
|
|||
|
MIME-Version: 1.0
|
|||
|
Content-Type: text/plain; charset=UTF-8
|
|||
|
Content-Transfer-Encoding: 8bit
|
|||
|
|
|||
|
Automake generates a Makefile rule for regenerating the configure
|
|||
|
script, that relies on an invocation of ‘autoconf’ always bumping the
|
|||
|
timestamp on the configure script, even if it hasn’t changed.
|
|||
|
The patch to make autom4te update the output file atomically
|
|||
|
(1725c947144d9bebfe7817c2c5f0d53d884b1297) broke this.
|
|||
|
|
|||
|
Fixes several failures in automake’s test suite.
|
|||
|
|
|||
|
* bin/autom4te.in (handle_output): Always call update_file with force=1.
|
|||
|
* tests/tools.at (autoconf: timestamp changes): New test.
|
|||
|
---
|
|||
|
bin/autom4te.in | 4 +++-
|
|||
|
tests/tools.at | 46 ++++++++++++++++++++++++++++++++++++++++++++++
|
|||
|
2 files changed, 49 insertions(+), 1 deletion(-)
|
|||
|
|
|||
|
diff --git a/bin/autom4te.in b/bin/autom4te.in
|
|||
|
index 4c2b905c..64653a44 100644
|
|||
|
--- a/bin/autom4te.in
|
|||
|
+++ b/bin/autom4te.in
|
|||
|
@@ -609,7 +609,9 @@ sub handle_output ($$)
|
|||
|
}
|
|||
|
|
|||
|
$out->close();
|
|||
|
- update_file ($scratchfile, $output, $force)
|
|||
|
+ # Always update the file, even if it didn't change;
|
|||
|
+ # Automake relies on this.
|
|||
|
+ update_file ($scratchfile, $output, 1)
|
|||
|
if defined $scratchfile;
|
|||
|
|
|||
|
# If no forbidden words, we're done.
|
|||
|
diff --git a/tests/tools.at b/tests/tools.at
|
|||
|
index 49710202..89b8b63b 100644
|
|||
|
--- a/tests/tools.at
|
|||
|
+++ b/tests/tools.at
|
|||
|
@@ -662,6 +662,52 @@ arbitrary $text
|
|||
|
AT_CLEANUP
|
|||
|
|
|||
|
|
|||
|
+# autoconf: timestamp changes
|
|||
|
+# ---------------------------
|
|||
|
+# Automake needs autoconf to update the timestamp on the configure script
|
|||
|
+# whenever configure.ac or aclocal.m4 changes, even if the contents of the
|
|||
|
+# configure script have not changed.
|
|||
|
+AT_SETUP([autoconf: timestamp changes])
|
|||
|
+
|
|||
|
+AT_DATA([aclocal.m4],
|
|||
|
+[[AC_DEFUN([local_KILROY], [# kilroy was here
|
|||
|
+])
|
|||
|
+]])
|
|||
|
+
|
|||
|
+AT_DATA_AUTOCONF([configure.ac],
|
|||
|
+[[AC_INIT
|
|||
|
+AC_PROG_CC
|
|||
|
+local_KILROY
|
|||
|
+AC_OUTPUT
|
|||
|
+]])
|
|||
|
+
|
|||
|
+AT_CHECK_AUTOCONF
|
|||
|
+
|
|||
|
+cp configure configure.1
|
|||
|
+sleep 1
|
|||
|
+printf '%s\n' 'AC_LIBSOURCES([foo.c])dn@&t@l' >> configure.ac
|
|||
|
+
|
|||
|
+# This step must not use --force.
|
|||
|
+# We don't need to check shell syntax, because if all goes well,
|
|||
|
+# the script will be unchanged from what it was in the first autoconf
|
|||
|
+# pass, and that was already checked.
|
|||
|
+AT_CHECK_M4([autoconf])
|
|||
|
+AT_CHECK([cmp configure configure.1])
|
|||
|
+AT_CHECK([test configure -nt configure.1])
|
|||
|
+
|
|||
|
+cp configure configure.2
|
|||
|
+sleep 1
|
|||
|
+printf '%s\n' \
|
|||
|
+ 'AC_DEFUN([unused_MACRO], [# bob was there too' \
|
|||
|
+ '])' >> aclocal.m4
|
|||
|
+
|
|||
|
+# Same as above.
|
|||
|
+AT_CHECK_M4([autoconf])
|
|||
|
+AT_CHECK([cmp configure configure.2])
|
|||
|
+AT_CHECK([test configure -nt configure.2])
|
|||
|
+
|
|||
|
+AT_CLEANUP
|
|||
|
+
|
|||
|
|
|||
|
## --------- ##
|
|||
|
## ifnames. ##
|
|||
|
--
|
|||
|
cgit v1.2.1
|
|||
|
|