summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZack Weinberg <zackw@panix.com>2020-12-29 15:33:33 -0500
committerZack Weinberg <zackw@panix.com>2020-12-30 10:25:39 -0500
commitbef282971ce1ad6a13b8fac57a9b45a88ec5e61d (patch)
tree7f17dbbeddce99bdd135d745171668754c82a574
parentfac6e5e5cf5b974dda2b82d6331d9dcb4b3e0016 (diff)
downloadautoconf-bef282971ce1ad6a13b8fac57a9b45a88ec5e61d.tar.gz
autom4te: always update the output file, even if it hasn’t changed
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.
-rw-r--r--bin/autom4te.in4
-rw-r--r--tests/tools.at46
2 files changed, 49 insertions, 1 deletions
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. ##