summaryrefslogtreecommitdiff
path: root/tests/semantics.at
diff options
context:
space:
mode:
authorZack Weinberg <zackw@panix.com>2020-08-14 13:16:58 -0400
committerZack Weinberg <zackw@panix.com>2020-08-14 14:04:46 -0400
commit96a8e5f1c96b1d1d98588e8c5b81a1ac7d482451 (patch)
treeb8a2a88eedece8c1855d4edfba88c56127fce83c /tests/semantics.at
parentca58e3159cfafd616b3495b561b47fd546d1ee77 (diff)
downloadautoconf-zack/bug-107986.tar.gz
Warn if AC_INIT or AC_OUTPUT are missing from configure.ac (#107986)zack/bug-107986
It is almost always incorrect for a configure script to omit either AC_INIT or AC_OUTPUT. Issue warnings in the ‘syntax’ category for this. The implementation is, unfortunately, a bit of a kludge. To check for the _absence_ of a macro invocation, we can use m4_provide_if inside a m4_wrap hook. However, if we activate the m4_wrap hook directly from general.m4, we get spurious warnings at freeze time. We also get warnings whenever a script that’s missing AC_INIT and/or AC_OUTPUT is *traced*, which means we get double warnings from autoconf, and autoheader and aclocal complain about it too, which seems unnecessary. A clean way to deal with this would be to make the hook look for a special macro that’s defined only when autoconf (the program) is invoked without any --trace arguments. Unfortunately, autom4te doesn’t pass --define down to M4, and changing that would involve coordinating with Automake (the project), so instead I’ve gone for the kludge: a new file lib/autoconf/trailer.m4 that calls m4_wrap. This file is *not* included in autoconf.m4f, but it’s installed, and it’s added to the m4 invocation by autoconf (the program) only when not tracing. (It still uses m4_wrap, because we pass it to m4 *before* configure.ac, because otherwise we get nonsense locations for any *other* diagnostics coming out of this autoconf invocation. I don’t know why.) The additional checks in autoreconf are intended to make sure that if autoreconf skips a directory entirely, you get told why. Lots of tests in the testsuite didn’t bother with AC_OUTPUT, and somewhat fewer didn’t bother with AC_INIT; where possible I just added them. Suggested by David A. Wheeler, who submitted a patch, but I didn’t wind up using any of his code. (His implementation used an extra tracing pass, only checked for a missing AC_INIT, and invented a new command-line option to turn off this specific warning. I thought this was tidier overall, despite the kludge.) * lib/autoconf/general.m4 (_AC_FINALIZE): New macro: code to be run when generating configure, after the entire configure.ac is processed. Currently only checks that AC_INIT and AC_OUTPUT were called at some point, issuing syntax-category warnings if not. (AC_INIT, AC_OUTPUT): m4_provide self. * lib/autoconf/trailer.m4: New file that just calls m4_wrap([_AC_FINALIZE]). * lib/local.mk: Install new file. * bin/autoconf.as: Add trailer.m4 to the final invocation of autom4te, but only when not tracing. * bin/autoreconf.in (autoreconf_current_directory): Distinguish in diagnostics between “directory skipped because it doesn’t have a configure.ac or configure.in” (e.g. Cygnus configure) and “directory has a configure.ac but it doesn’t appear to be autoconf input.” * tests/*.at: Fix all tests affected by the new warnings.
Diffstat (limited to 'tests/semantics.at')
-rw-r--r--tests/semantics.at12
1 files changed, 6 insertions, 6 deletions
diff --git a/tests/semantics.at b/tests/semantics.at
index f10a0b53..98933aa1 100644
--- a/tests/semantics.at
+++ b/tests/semantics.at
@@ -589,10 +589,10 @@ test -z "$TOOL5" || fail=:
AC_CHECK_PROGS(TOOL6, missing tool better,, $path)
test "$TOOL6" = tool || fail=:
-# No AC-OUTPUT, we don't need config.status.
$fail &&
AC_MSG_ERROR([[CHECK_PROG failed]])
-AS_EXIT(0)
+
+AC_OUTPUT
]])
AT_CHECK_AUTOCONF
@@ -692,10 +692,10 @@ test -z "$TOOL3" || fail=:
AC_PATH_PROGS(TOOL4, missing tool better,, $path)
test "$TOOL4" = "$pwd/path/1/tool" || fail=:
-# No AC-OUTPUT, we don't need config.status.
$fail &&
AC_MSG_ERROR([[PATH_PROG failed]])
-AS_EXIT(0)
+
+AC_OUTPUT
]])
AT_CHECK_AUTOCONF
@@ -770,10 +770,10 @@ AC_PATH_PROGS_FEATURE_CHECK(TOOL7, [tool better],
test -z "$TOOL7" || fail=:
test "$ac_cv_path_TOOL7" = "$pwd/path/1/tool" || fail=:
-# No AC-OUTPUT, we don't need config.status.
$fail &&
AC_MSG_ERROR([[PATH_PROG failed]])
-AS_EXIT(0)
+
+AC_OUTPUT
]])
AT_CHECK_AUTOCONF