autoconf-patches
[Top][All Lists]
Advanced

[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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]