[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[RFC PATCH 6/6] Autoupdate AC_{DIAGNOSE, FATAL, OBSOLETE, WARNING} and _
From: |
Zack Weinberg |
Subject: |
[RFC PATCH 6/6] Autoupdate AC_{DIAGNOSE, FATAL, OBSOLETE, WARNING} and _AC_COMPUTE_INT. |
Date: |
Tue, 22 Sep 2020 16:04:55 -0400 |
While working on the previous patches I noticed that all of these
macros are officially obsolete, but autoupdate doesn’t replace them.
_AC_COMPUTE_INT is easy to autoupdate. AC_{DIAGNOSE,FATAL,WARNING}
require a little special handling because their replacements are
m4sugar macros, and autoupdate normally expands m4sugar macros as it
goes. Fortunately, the same workaround as is used for AC_FOREACH can
be applied. AC_OBSOLETE also needs that workaround, and cannot be
fully replaced automatically.
The bulk of the patch is removing internal uses of AC_DIAGNOSE.
* lib/autoconf/autoupdate.m4
* lib/autoconf/c.m4
* lib/autoconf/functions.m4
* lib/autoconf/general.m4
* lib/autoconf/headers.m4
* lib/autoconf/lang.m4
* lib/autoconf/status.m4
* lib/autoconf/types.m4
* tests/local.at
* tests/tools.at:
Use, and/or refer to, m4_warn instead of AC_DIAGNOSE.
* lib/autoconf/general.m4 (_AC_COMPUTE_INT): Define using AU_DEFUN.
(AC_DIAGNOSE, AC_FATAL, AC_WARNING): Autoupdate to m4_warn,
m4_fatal, and m4_warn([syntax], [$1]) respectively, using the same
paired AU_DEFUN/AC_DEFUN trick that is used for AC_FOREACH.
(AC_OBSOLETE): Autoupdate to m4_warn([obsolete], [$1]) and advise
hand-conversion to AU_DEFUN.
* lib/autoconf/autoupdate.m4 (AU_DEFUN): Tweak quoting so m4_warn([$3])
is emitted into the edited configure.ac instead of being expanded at
autoupdate time.
* tests/tools.at (autoupdating AC_FOREACH): Adjust grep expressions.
(autoupdating AC_DIAGNOSE and AC_WARNING): New test.
(autoupdating AC_FATAL): New test.
(autoupdating AC_OBSOLETE): New test.
* tests/mktests.sh (ac_exclude_list, au_exclude_list):
Exclude AC_DIAGNOSE, AC_FATAL, AC_FOREACH, AC_OBSOLETE, and AC_WARNING
if not already excluded.
---
NEWS | 10 +++
lib/autoconf/autoupdate.m4 | 14 ++--
lib/autoconf/c.m4 | 2 +-
lib/autoconf/functions.m4 | 8 +--
lib/autoconf/general.m4 | 78 +++++++++++-----------
lib/autoconf/headers.m4 | 8 +--
lib/autoconf/lang.m4 | 2 +-
lib/autoconf/specific.m4 | 2 +-
lib/autoconf/status.m4 | 6 +-
lib/autoconf/types.m4 | 4 +-
tests/local.at | 2 +-
tests/mktests.sh | 10 +--
tests/tools.at | 129 ++++++++++++++++++++++++++++++++++++-
13 files changed, 205 insertions(+), 70 deletions(-)
diff --git a/NEWS b/NEWS
index 9ee7dbec..8a8ac9f1 100644
--- a/NEWS
+++ b/NEWS
@@ -199,6 +199,16 @@ GNU Autoconf NEWS - User visible changes.
diagnosed as obsolete, and replaced with AC_CONFIG_HEADERS by
autoupdate.
+- The obsolete macros AC_DIAGNOSE, AC_FATAL, AC_WARNING, and
+ _AC_COMPUTE_INT are now replaced with modern equivalents by
+ autoupdate.
+
+- The macro AC_OBSOLETE is obsolete. Autoupdate will replace it with
+ m4_warn([obsolete], [explanation]). If possible, macros using
+ AC_OBSOLETE should be converted to use AU_DEFUN or AU_ALIAS instead,
+ which enables autoupdate to replace them, but this has to be done by
+ hand and is not always possible.
+
- AC_FC_LINE_LENGTH now documents the maximum portable length of
"unlimited" Fortran source code lines to be 250 columns, not 254.
diff --git a/lib/autoconf/autoupdate.m4 b/lib/autoconf/autoupdate.m4
index 056ef08f..109d8949 100644
--- a/lib/autoconf/autoupdate.m4
+++ b/lib/autoconf/autoupdate.m4
@@ -55,12 +55,14 @@ m4_define([AU_DEFINE], [])
# and to update a configure.ac.
# See the end of `autoupdate.in' for a longer description.
m4_define([AU_DEFUN],
-[# This is what autoupdate's m4 run will expand. It fires
-# the warning (with _au_warn_XXX), outputs it into the
-# updated configure.ac (with AC_DIAGNOSE), and then outputs
-# the replacement expansion.
+[# This is what autoupdate's m4 run will expand. It fires the warning
+# (with _au_warn_XXX), outputs it into the updated configure.ac (with
+# m4_warn), and then outputs the replacement expansion. We need extra
+# quotation around the m4_warn and dnl so they will be written
+# unexpanded into the updated configure.ac.
AU_DEFINE([$1],
-[m4_ifval([$3], [_au_warn_$1([$3])AC_DIAGNOSE([obsolete], [$3])d[]nl
+[m4_ifval([$3], [_au_warn_$1([$3])[m4_warn([obsolete],
+[$3])dnl]
])dnl
$2])
@@ -79,7 +81,7 @@ m4_define([_au_warn_$1], [])])
# about autoupdate's warning because that contains
# information on what to do *after* running autoupdate.
AC_DEFUN([$1],
- [AC_DIAGNOSE([obsolete], [The macro `$1' is obsolete.
+ [m4_warn([obsolete], [The macro `$1' is obsolete.
You should run autoupdate.])dnl
$2])])
diff --git a/lib/autoconf/c.m4 b/lib/autoconf/c.m4
index fe6aa2b6..be5e4148 100644
--- a/lib/autoconf/c.m4
+++ b/lib/autoconf/c.m4
@@ -1690,7 +1690,7 @@ dnl the user did not specify a config header but is
relying on the
dnl default behavior for universal builds.
m4_default([$4],
[AC_CONFIG_COMMANDS_PRE([m4_ifset([AH_HEADER], [],
- [AC_DIAGNOSE([obsolete],
+ [m4_warn([obsolete],
[AC_C_BIGENDIAN should be used with AC_CONFIG_HEADERS])])])dnl
AC_DEFINE([AC_APPLE_UNIVERSAL_BUILD],1,
[Define if building universal (internal helper macro)])])
diff --git a/lib/autoconf/functions.m4 b/lib/autoconf/functions.m4
index 46c4a115..aa560a63 100644
--- a/lib/autoconf/functions.m4
+++ b/lib/autoconf/functions.m4
@@ -85,7 +85,7 @@ m4_define([_AH_CHECK_FUNC],
m4_define([_AC_CHECK_FUNCS_ONE_U],
[AS_LITERAL_WORD_IF([$1],
[_AH_CHECK_FUNC([$1])],
- [AC_DIAGNOSE([syntax], [AC_CHECK_FUNCS($1): you should use literals])])])
+ [m4_warn([syntax], [AC_CHECK_FUNCS($1): you should use literals])])])
# _AC_CHECK_FUNCS_ONE_S(FUNCTION)
# -------------------------------
@@ -173,7 +173,7 @@ done])])
m4_define([_AC_REPLACE_FUNC_U],
[AS_LITERAL_WORD_IF([$1],
[_AH_CHECK_FUNC([$1])AC_LIBSOURCE([$1.c])],
- [AC_DIAGNOSE([syntax], [AC_REPLACE_FUNCS($1): you should use literals])])])
+ [m4_warn([syntax], [AC_REPLACE_FUNCS($1): you should use literals])])])
# _AC_REPLACE_FUNC_L(FUNCTION)
# ----------------------------
@@ -1776,7 +1776,7 @@ test $ac_cv_func_strnlen_working = no &&
AC_LIBOBJ([strnlen])
# AC_FUNC_SETVBUF_REVERSED
# ------------------------
AC_DEFUN([AC_FUNC_SETVBUF_REVERSED],
-[AC_DIAGNOSE([obsolete],
+[m4_warn([obsolete],
[The macro `$0' is obsolete. Remove it and all references to
SETVBUF_REVERSED.])dnl
AC_CACHE_VAL([ac_cv_func_setvbuf_reversed], [ac_cv_func_setvbuf_reversed=no])
])# AC_FUNC_SETVBUF_REVERSED
@@ -2063,7 +2063,7 @@ AU_ALIAS([AC_VPRINTF], [AC_FUNC_VPRINTF])
# any invocation should be removed, and the code adjusted.
AN_FUNCTION([wait3], [AC_FUNC_WAIT3])
AC_DEFUN([AC_FUNC_WAIT3],
-[AC_DIAGNOSE([obsolete],
+[m4_warn([obsolete],
[$0: `wait3' has been removed from POSIX.
Remove this `AC_FUNC_WAIT3' and adjust your code to use `waitpid' instead.])dnl
AC_CACHE_CHECK([for wait3 that fills in rusage],
diff --git a/lib/autoconf/general.m4 b/lib/autoconf/general.m4
index 81360b78..de5633d8 100644
--- a/lib/autoconf/general.m4
+++ b/lib/autoconf/general.m4
@@ -162,13 +162,6 @@ m4_copy([m4_provide], [AC_PROVIDE])
m4_copy([m4_provide_if], [AC_PROVIDE_IFELSE])
-# AC_OBSOLETE(THIS-MACRO-NAME, [SUGGESTION])
-# ------------------------------------------
-m4_define([AC_OBSOLETE],
-[AC_DIAGNOSE([obsolete], [$1 is obsolete$2])])
-
-
-
## ----------------------------- ##
## Implementing shell functions. ##
## ----------------------------- ##
@@ -190,9 +183,12 @@ AC_DEFUN([AC_REQUIRE_SHELL_FN],
# AU::AC_FOREACH(VARIABLE, LIST, EXPRESSION)
# ------------------------------------------
+# The double definition is necessary because autoupdate expands m4_
+# macros, so we have to double-quote the replacement, but then it
+# won't work in a normal autoconf run.
AU_DEFUN([AC_FOREACH], [[m4_foreach_w($@)]])
AC_DEFUN([AC_FOREACH], [m4_foreach_w($@)dnl
-AC_DIAGNOSE([obsolete], [The macro `AC_FOREACH' is obsolete.
+m4_warn([obsolete], [The macro `AC_FOREACH' is obsolete.
You should run autoupdate.])])
@@ -2152,14 +2148,14 @@ rm -f confcache[]dnl
# Should be dnl'ed. Try to catch common mistakes.
m4_defun([AC_CACHE_VAL],
[AS_LITERAL_WORD_IF([$1], [m4_if(m4_index(m4_quote($1), [_cv_]), [-1],
- [AC_DIAGNOSE([syntax],
+ [m4_warn([syntax],
[$0($1, ...): suspicious cache-id, must contain _cv_ to be cached])])])dnl
m4_if(m4_index([$2], [AC_DEFINE]), [-1], [],
- [AC_DIAGNOSE([syntax],
+ [m4_warn([syntax],
[$0($1, ...): suspicious presence of an AC_DEFINE in the second argument, ]dnl
[where no actions should be taken])])dnl
m4_if(m4_index([$2], [AC_SUBST]), [-1], [],
- [AC_DIAGNOSE([syntax],
+ [m4_warn([syntax],
[$0($1, ...): suspicious presence of an AC_SUBST in the second argument, ]dnl
[where no actions should be taken])])dnl
AS_VAR_SET_IF([$1],
@@ -2320,25 +2316,34 @@ m4_append_uniq([_AC_SUBST_FILES], [$1], [
## Printing messages at autoconf runtime. ##
## --------------------------------------- ##
-# In fact, I think we should promote the use of m4_warn and m4_fatal
-# directly. This will also avoid to some people to get it wrong
-# between AC_FATAL and AC_MSG_ERROR.
-
-
-# AC_DIAGNOSE(CATEGORY, MESSAGE)
-# AC_FATAL(MESSAGE, [EXIT-STATUS])
+# AU::AC_DIAGNOSE(CATEGORY, MESSAGE)
+# AU::AC_FATAL(MESSAGE, [EXIT-STATUS])
+# AU::AC_WARNING(MESSAGE)
+# AU::AC_OBSOLETE(THIS-MACRO, [SUGGESTION])
# --------------------------------
-m4_define([AC_DIAGNOSE], [m4_warn($@)])
-m4_define([AC_FATAL], [m4_fatal($@)])
+# The double definitions are necessary because autoupdate expands m4_
+# macros, so we have to double-quote the replacements, but then they
+# won't work in a normal autoconf run.
+AU_DEFUN([AC_DIAGNOSE], [[m4_warn($@)]])
+AC_DEFUN([AC_DIAGNOSE], [m4_warn($@)dnl
+m4_warn([obsolete], [The macro `$0' is obsolete.
+You should run autoupdate.])])
+AU_DEFUN([AC_FATAL], [[m4_fatal($@)]])
+AC_DEFUN([AC_FATAL], [m4_fatal($@)dnl
+m4_warn([obsolete], [The macro `$0' is obsolete.
+You should run autoupdate.])])
-# AC_WARNING(MESSAGE)
-# -------------------
-# Report a MESSAGE to the user of autoconf if `-W' or `-W all' was
-# specified.
-m4_define([AC_WARNING],
-[AC_DIAGNOSE([syntax], [$1])])
+AU_DEFUN([AC_WARNING], [[m4_warn([syntax], [$1])]])
+AC_DEFUN([AC_WARNING], [m4_warn([syntax], [$1])dnl
+m4_warn([obsolete], [The macro `$0' is obsolete.
+You should run autoupdate.])])
+AU_DEFUN([AC_OBSOLETE], [[m4_warn([obsolete], [$1 is obsolete$2])]],
+[if possible, define this macro using AU_DEFUN.])
+AC_DEFUN([AC_OBSOLETE], [m4_warn([obsolete], [$1 is obsolete$2])dnl
+m4_warn([obsolete], [The macro `$0' is obsolete.
+You should run autoupdate.])])
@@ -2872,8 +2877,8 @@ rm -f core *.core core.conftest.* gmon.out bb.out
conftest$ac_exeext \
AC_DEFUN([AC_RUN_IFELSE],
[AC_LANG_COMPILER_REQUIRE()dnl
m4_ifval([$4], [],
- [AC_DIAGNOSE([cross],
- [$0 called without default to allow cross compiling])])dnl
+ [m4_warn([cross],
+ [$0 called without default to allow cross compiling])])dnl
AS_IF([test "$cross_compiling" = yes],
[m4_default([$4],
[AC_MSG_FAILURE([cannot run test program while cross compiling])])],
@@ -2899,8 +2904,8 @@ AU_DEFUN([AC_TRY_RUN],
#
# Check for the existence of FILE.
AC_DEFUN([AC_CHECK_FILE],
-[AC_DIAGNOSE([cross],
- [cannot check for file existence when cross compiling])dnl
+[m4_warn([cross],
+ [cannot check for file existence when cross compiling])dnl
AS_VAR_PUSHDEF([ac_File], [ac_cv_file_$1])dnl
AC_CACHE_CHECK([for $1], [ac_File],
[test "$cross_compiling" = yes &&
@@ -3121,7 +3126,7 @@ esac
AC_DEFUN([AC_LIBOBJ],
[_AC_LIBOBJ([$1])]dnl
[AS_LITERAL_WORD_IF([$1], [AC_LIBSOURCE([$1.c])],
- [AC_DIAGNOSE([syntax], [$0($1): you should use literals])])])
+ [m4_warn([syntax], [$0($1): you should use literals])])])
# _AC_LIBOBJS_NORMALIZE
@@ -3250,15 +3255,8 @@ AC_DEFUN([AC_COMPUTE_INT],
[], [$4])
])# AC_COMPUTE_INT
-# _AC_COMPUTE_INT(EXPRESSION, VARIABLE, PROLOGUE, [IF-FAILS])
+# AU::_AC_COMPUTE_INT(EXPRESSION, VARIABLE, PROLOGUE, [IF-FAILS])
# -----------------------------------------------------------
# FIXME: this private interface was used by several packages.
# Give them time to transition to AC_COMPUTE_INT and then delete this one.
-AC_DEFUN([_AC_COMPUTE_INT],
-[AC_COMPUTE_INT([$2], [$1], [$3], [$4])
-AC_DIAGNOSE([obsolete],
-[The macro `_AC_COMPUTE_INT' is obsolete and will be deleted in a
-future version or Autoconf. Hence, it is suggested that you use
-instead the public AC_COMPUTE_INT macro. Note that the arguments are
-slightly different between the two.])dnl
-])# _AC_COMPUTE_INT
+AU_DEFUN([_AC_COMPUTE_INT], [AC_COMPUTE_INT([$2], [$1], [$3], [$4])])
diff --git a/lib/autoconf/headers.m4 b/lib/autoconf/headers.m4
index cd750ebe..21b37197 100644
--- a/lib/autoconf/headers.m4
+++ b/lib/autoconf/headers.m4
@@ -113,7 +113,7 @@ m4_define([_AC_CHECK_HEADER_PREPROC_BODY],
# --------------------------------------------------------------
# Check the preprocessor accepts HEADER-FILE.
AC_DEFUN([_AC_CHECK_HEADER_PREPROC],
-[AC_DIAGNOSE([obsolete], [Checking for headers with the preprocessor is
+[m4_warn([obsolete], [Checking for headers with the preprocessor is
deprecated. Specify prerequisite code to AC_CHECK_HEADER
instead of using fourth argument `-'. (Many headers need
no prerequisites. If you truly need to test whether
@@ -142,12 +142,12 @@ AS_VAR_POPDEF([ac_Header])])# _AC_CHECK_HEADER_PREPROC
# AU_DEFUN([_AC_CHECK_HEADER_OLD],
# [AC_CHECK_HEADER([$1], [$2], [$3], [-])])
AC_DEFUN([_AC_CHECK_HEADER_OLD],
-[AC_DIAGNOSE([obsolete], [The macro `$0' is obsolete.
+[m4_warn([obsolete], [The macro `$0' is obsolete.
You should use AC_CHECK_HEADER with a fourth argument.])]dnl
[_AC_CHECK_HEADER_PREPROC($@)])
AC_DEFUN([_AC_CHECK_HEADER_NEW],
-[AC_DIAGNOSE([obsolete], [The macro `$0' is obsolete.
+[m4_warn([obsolete], [The macro `$0' is obsolete.
You should use AC_CHECK_HEADER with a fourth argument.])]dnl
[_AC_CHECK_HEADER_COMPILE($@)])
@@ -180,7 +180,7 @@ m4_define([AH_CHECK_HEADERS],
m4_define([_AC_CHECK_HEADERS_ONE_U],
[AS_LITERAL_WORD_IF([$1],
[_AH_CHECK_HEADER([$1])],
- [AC_DIAGNOSE([syntax], [AC_CHECK_HEADERS($1): you should use literals])])])
+ [m4_warn([syntax], [AC_CHECK_HEADERS($1): you should use literals])])])
# _AC_CHECK_HEADERS_ONE_S(HEADER-FILE, [INCLUDES])
# -------------------------------
diff --git a/lib/autoconf/lang.m4 b/lib/autoconf/lang.m4
index 27eaa129..9e6e3b35 100644
--- a/lib/autoconf/lang.m4
+++ b/lib/autoconf/lang.m4
@@ -125,7 +125,7 @@ AU_DEFUN([AC_LANG_SAVE],
you should use `AC_LANG_PUSH' and `AC_LANG_POP'.])
AC_DEFUN([AC_LANG_SAVE],
[m4_pushdef([_AC_LANG], _AC_LANG)dnl
-AC_DIAGNOSE([obsolete], [The macro `AC_LANG_SAVE' is obsolete.
+m4_warn([obsolete], [The macro `AC_LANG_SAVE' is obsolete.
You should run autoupdate.])])
diff --git a/lib/autoconf/specific.m4 b/lib/autoconf/specific.m4
index f750722a..7478ee7f 100644
--- a/lib/autoconf/specific.m4
+++ b/lib/autoconf/specific.m4
@@ -228,7 +228,7 @@ fi
# If the system automatically restarts a system call that is
# interrupted by a signal, define `HAVE_RESTARTABLE_SYSCALLS'.
AC_DEFUN([AC_SYS_RESTARTABLE_SYSCALLS],
-[AC_DIAGNOSE([obsolete],
+[m4_warn([obsolete],
[$0: AC_SYS_RESTARTABLE_SYSCALLS is useful only when supporting very
old systems that lack `sigaction' and `SA_RESTART'. Don't bother with
this macro unless you need to support very old systems like 4.2BSD and
diff --git a/lib/autoconf/status.m4 b/lib/autoconf/status.m4
index 2d3f92ba..1389f328 100644
--- a/lib/autoconf/status.m4
+++ b/lib/autoconf/status.m4
@@ -1100,7 +1100,7 @@ m4_define([_AC_CONFIG_SUBDIRS],
[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])]dnl
[AC_REQUIRE([AC_DISABLE_OPTION_CHECKING])]dnl
[AS_LITERAL_IF([$1], [],
- [AC_DIAGNOSE([syntax], [$0: you should use literals])])]dnl
+ [m4_warn([syntax], [$0: you should use literals])])]dnl
[m4_map_args_w([$1], [_AC_CONFIG_UNIQUE([SUBDIRS],
_AC_CONFIG_COMPUTE_DEST(], [))])]dnl
[m4_append([_AC_LIST_SUBDIRS], [$1], [
@@ -1258,8 +1258,8 @@ m4_ifvaln([$1],
m4_ifvaln([$2$3],
[AC_CONFIG_COMMANDS(default, [$2], [$3])])dnl
m4_ifval([$1$2$3],
- [AC_DIAGNOSE([obsolete],
- [$0 should be used without arguments.
+ [m4_warn([obsolete],
+ [$0 should be used without arguments.
You should run autoupdate.])])dnl
AC_CACHE_SAVE
diff --git a/lib/autoconf/types.m4 b/lib/autoconf/types.m4
index a41eeb18..fff850ac 100644
--- a/lib/autoconf/types.m4
+++ b/lib/autoconf/types.m4
@@ -238,8 +238,8 @@ AC_DEFUN([AC_CHECK_TYPE],
[_AC_CHECK_TYPE_REPLACEMENT_TYPE_P([$2])], [1],
[_AC_CHECK_TYPE_OLD],
[_AC_CHECK_TYPE_MAYBE_TYPE_P([$2])], [1],
- [AC_DIAGNOSE([syntax],
- [$0: assuming `$2' is not a type])_AC_CHECK_TYPE_NEW],
+ [m4_warn([syntax],
+ [$0: assuming `$2' is not a type])_AC_CHECK_TYPE_NEW],
[_AC_CHECK_TYPE_NEW])($@)])# AC_CHECK_TYPE
diff --git a/tests/local.at b/tests/local.at
index 3424bd6a..b9f866f7 100644
--- a/tests/local.at
+++ b/tests/local.at
@@ -592,7 +592,7 @@ AT_CHECK_MACRO([$1 (cross compile)],
# NAME-OF-THE-MACRO. On the second pass, *don't* check for the
# absence of -Wobsolete warnings, because many of autoupdate's edits
# leave the configure.ac author with some manual work to do, and
-# indicate this by inserting an AC_DIAGNOSE message to be removed
+# indicate this by inserting an m4_warn message to be removed
# after the manual work is complete.
m4_define([AT_CHECK_AU_MACRO],
[AT_SETUP([$1])
diff --git a/tests/mktests.sh b/tests/mktests.sh
index 37b97b2a..05356cb2 100755
--- a/tests/mktests.sh
+++ b/tests/mktests.sh
@@ -110,8 +110,9 @@ ac_exclude_list='
# Is a number.
/^AC_FD_CC$/ {next}
- # Obsolete, but needs to be AC_DEFUNed.
- /^AC_FOREACH$/ {next}
+ # Obsolete, but needs to be AC_DEFUNed and cannot safely be called
+ # without arguments. Tested in tools.at.
+ /^AC_(DIAGNOSE|FATAL|FOREACH|OBSOLETE|WARNING)$/ {next}
# Require a file that is not shipped with Autoconf. But it should.
/^AC_FUNC_(GETLOADAVG|FNMATCH_GNU)$/ {next}
@@ -167,8 +168,9 @@ au_exclude_list='
# AC_LANG_RESTORE cannot be used alone.
/^AC_LANG_(SAVE|RESTORE)$/ {next}
- # Need arguments and are tested elsewhere.
- /^AC_(LINK_FILES|PREREQ)$/ {next}
+ # Need arguments. Tested in tools.at.
+ /^AC_(DIAGNOSE|FATAL|FOREACH|OBSOLETE|LINK_FILES|PREREQ|WARNING)$/
+ {next}
'
# au_exclude_script
diff --git a/tests/tools.at b/tests/tools.at
index 1bb670fa..2ad46ca1 100644
--- a/tests/tools.at
+++ b/tests/tools.at
@@ -1014,7 +1014,7 @@ AT_CHECK_AUTOUPDATE
# autoupdate does not replace AU_DEFUNs/AU_ALIASes defined by
# configure.ac itself, nor by aclocal.m4, so BAZ will still be present
# in the updated configure.ac. This is actually desirable for this
-# test: the point of that part of the above configure.ac is to to
+# test: the point of that part of the above configure.ac is to
# verify that the expansion of an AU_ALIAS definition handles $#
# correctly. If BAZ got turned into FOO by the above call to
# autoupdate, we would need to run autoconf and configure twice in
@@ -1247,7 +1247,7 @@ AC_OUTPUT
# Both the autoupdate and autoconf invocations will complain about
# AC_LANG_SAVE being obsolete, because autoupdate cannot replace
# two-macro sequences (e.g. AC_LANG_SAVE \n AC_LANG([C]) ideally would
-# become AC_LANG_PUSH([C]) but we can't do that) so an AC_DIAGNOSE
+# become AC_LANG_PUSH([C]) but we can't do that) so an m4_warn
# is left in place to remind people they need to do some hand edits.
# Ignore these diagnostics.
AT_CHECK_AUTOUPDATE([], [], [], [ignore])
@@ -1272,15 +1272,138 @@ AC_OUTPUT
]])
# Checking `autoupdate'.
+# AC_FOREACH is replaced with an m4sugar macro, so we must make sure
+# the m4sugar macro wasn't expanded.
AT_CHECK_AUTOUPDATE
-AT_CHECK([[grep 'echo 1 2 3 4 5 6' configure.ac]], 1, [ignore], [ignore])
AT_CHECK([[grep 'm4@&t@_foreach_w' configure.ac]], 0, [ignore], [ignore])
+AT_CHECK([[grep 'echo 1 2 3 4 5 6' configure.ac]], 1, [ignore], [ignore])
+AT_CHECK([[grep "echo ' 1'' 2'' 3'' 4'' 5'' 6'" configure.ac]], 1,
+ [ignore], [ignore])
AT_CHECK_AUTOCONF
AT_CHECK_CONFIGURE([], [0], [stdout])
AT_CHECK([[grep ' 1 2 3 4 5 6' stdout]], 0, [ignore], [ignore])
AT_CLEANUP
+# autoupdating AC_OBSOLETE
+# ------------------------
+AT_SETUP([autoupdating AC_OBSOLETE])
+
+AT_DATA([aclocal.m4],
+[[AC_DEFUN([OLD],
+[AC_OBSOLETE([$0], [; convert to NEW])
+NEW([$2], [$1])])
+AC_DEFUN([NEW],
+[AS@&t@_ECHO(["dst=$1 src=$2"])])
+]])
+
+AT_DATA([configure.ac],
+[[AC_INIT
+OLD([src], [dst])
+AC_OUTPUT
+]])
+
+AT_CHECK_AUTOCONF([-Werror], 1, [],
+[[configure.ac:2: warning: OLD is obsolete; convert to NEW
+general.m4: AC_OBSOLETE is expanded from...
+aclocal.m4:1: OLD is expanded from...
+configure.ac:2: the top level
+configure.ac:2: warning: The macro `AC_OBSOLETE' is obsolete.
+configure.ac:2: You should run autoupdate.
+general.m4: AC_OBSOLETE is expanded from...
+aclocal.m4:1: OLD is expanded from...
+configure.ac:2: the top level
+]])
+
+# autoupdate does not know how to replace OLD with NEW
+AT_CHECK_AUTOUPDATE
+AT_CHECK([[grep OLD configure.ac]], 0, [ignore], [ignore])
+
+# autoupdate _does_ know how to remove AC_OBSOLETE from aclocal.m4
+AT_CHECK_AUTOUPDATE([aclocal.m4], 0, [],
+[[aclocal.m4:2: warning: if possible, define this macro using AU_DEFUN.
+]])
+
+# AC_OBSOLETE is replaced with an m4sugar macro, so we must make sure
+# the m4sugar macro wasn't expanded.
+AT_CHECK([[grep 'm4@&t@_warn' aclocal.m4]], 0, [ignore], [ignore])
+AT_CHECK([[grep 'if possible, define this' aclocal.m4]], 0, [ignore], [ignore])
+AT_CHECK([[grep 'AC_OBSOLETE(' aclocal.m4]], 1, [ignore], [ignore])
+
+AT_CHECK_AUTOCONF([-Wobsolete -Wno-error], 0, [],
+[[configure.ac:2: warning: if possible, define this macro using AU_DEFUN.
+aclocal.m4:1: OLD is expanded from...
+configure.ac:2: the top level
+configure.ac:2: warning: OLD is obsolete; convert to NEW
+aclocal.m4:1: OLD is expanded from...
+configure.ac:2: the top level
+]])
+
+AT_CHECK_CONFIGURE([], 0,
+[[dst=dst src=src
+configure: creating ./config.status
+]])
+
+AT_CLEANUP
+
+
+# autoupdating AC_DIAGNOSE and AC_WARNING
+-----------------------------------------
+AT_SETUP([autoupdating AC_DIAGNOSE and AC_WARNING])
+
+AT_DATA([configure.ac],
+[[AC_INIT
+AC_DIAGNOSE([gnu], [The gnu has escaped])
+AC_WARNING([funny punctu&tion])
+AC_OUTPUT
+]])
+
+# Checking `autoupdate'.
+# AC_DIAGNOSE and AC_WARNING are replaced with m4sugar macros, so we
+# must make sure the m4sugar macros weren't expanded.
+AT_CHECK_AUTOUPDATE
+AT_CHECK([[grep 'm4@&t@_warn' configure.ac]], 0, [ignore], [ignore])
+AT_CHECK([[grep 'The gnu has escaped' configure.ac]], 0, [ignore], [ignore])
+AT_CHECK([[grep 'funny punctu&tion' configure.ac]], 0, [ignore], [ignore])
+
+# The diagnostics should appear when autoconf is run.
+AT_CHECK_AUTOCONF([-Wall], [0], [],
+[[configure.ac:2: warning: The gnu has escaped
+configure.ac:3: warning: funny punctu&tion
+]])
+AT_CHECK_CONFIGURE
+
+AT_CLEANUP
+
+
+# autoupdating AC_FATAL
+-----------------------
+AT_SETUP([autoupdating AC_FATAL])
+
+AT_DATA([configure.ac],
+[[AC_INIT
+AC_FATAL([what did you do this time])
+AC_OUTPUT
+]])
+
+# Checking `autoupdate'.
+# AC_FATAL is replaced with a m4sugar macro, so we
+# must make sure the m4sugar macro wasn't expanded.
+AT_CHECK_AUTOUPDATE
+AT_CHECK([[grep 'm4@&t@_fatal' configure.ac]], 0, [ignore], [ignore])
+AT_CHECK([[grep 'what did you do this time' configure.ac]],
+ 0, [ignore], [ignore])
+
+# The diagnostic should appear when autoconf is run.
+AT_CHECK_AUTOCONF([-Wall], [1], [],
+[[configure.ac:2: error: what did you do this time
+configure.ac:2: the top level
+autom4te: error: m4 failed with exit status: 1
+]])
+AT_CHECK([[test \! -f configure]])
+
+AT_CLEANUP
+
# autoupdating with aclocal and m4_include
# ----------------------------------------
--
2.28.0
- [RFC PATCH 0/6] Work around autoconf/automake warnings skew, Zack Weinberg, 2020/09/22
- [RFC PATCH 2/6] New utility function Autom4te::ChannelDefs::merge_WARNINGS., Zack Weinberg, 2020/09/22
- [RFC PATCH 5/6] Update documentation related to warnings., Zack Weinberg, 2020/09/22
- [RFC PATCH 3/6] Disable all warnings when running autoconf as a subprocess., Zack Weinberg, 2020/09/22
- [RFC PATCH 4/6] Use WARNINGS to pass down warnings options from autoreconf., Zack Weinberg, 2020/09/22
- [RFC PATCH 1/6] Manually sync ChannelDefs.pm from automake., Zack Weinberg, 2020/09/22
- [RFC PATCH 6/6] Autoupdate AC_{DIAGNOSE, FATAL, OBSOLETE, WARNING} and _AC_COMPUTE_INT.,
Zack Weinberg <=
- Re: [RFC PATCH 0/6] Work around autoconf/automake warnings skew, Paul Eggert, 2020/09/22