[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 3/3] warn: new special syntax warning, hack for aclocal
From: |
Stefano Lattarini |
Subject: |
[PATCH 3/3] warn: new special syntax warning, hack for aclocal |
Date: |
Sat, 3 Nov 2012 13:05:09 +0100 |
We introduce a new special warning category, "m4require-without-m4defun",
meant to contain only those warnings caused m4 macros that m4_require'd
but not m4_defun'd. This category is automatically implied by '-Wsyntax',
but can be disabled without disabling the other warnings in the "syntax"
category.
This new category is introduced exclusively to allow aclocal to process
AC_CONFIG_MACRO_DIRS without emitting spurious warnings. In fact, if
aclocal doesn't suppress that special warnings, then, when some macro
expanded in configure.ac calls AC_REQUIRE on another macro that is defined
in one of the local m4 macro dirs specified with AC_CONFIG_MACRO_DIRS, the
*first* autom4te invocation issued by aclocal, not yet being able to "see"
the m4 macro definitions in the local m4 dirs, will prints spurious
warnings like:
configure.ac:4: warning: MY_BAR is m4_require'd but not m4_defun'd
configure.ac:3: MY_FOO is expanded from...
Expose this weakness in our testsuite.
Originally reported by Nick Bowler; see point (4) of:
<http://lists.gnu.org/archive/html/autoconf-patches/2012-11/msg00000.html>
* lib/Autom4te/ChannelDefs.pm (m4require-without-m4defun): New channel,
enabled by default.
(switch_warning): Special handling for it: silence it when '-Wno-syntax'
is given, enable it when '-Wsyntax' is given.
* lib/m4sugar/m4sugar.m4 (_m4_require_call): Give warnings in the new
"m4require-without-m4defun" category, rather than in the 'syntax' one.
* tests/m4sugar.at (m4@&address@hidden): Enhance.
Signed-off-by: Stefano Lattarini <address@hidden>
---
lib/Autom4te/ChannelDefs.pm | 14 ++++++++++++++
lib/m4sugar/m4sugar.m4 | 7 ++++++-
tests/m4sugar.at | 21 +++++++++++++++++++++
3 files changed, 41 insertions(+), 1 deletion(-)
diff --git a/lib/Autom4te/ChannelDefs.pm b/lib/Autom4te/ChannelDefs.pm
index 0d5b5c4..af67059 100644
--- a/lib/Autom4te/ChannelDefs.pm
+++ b/lib/Autom4te/ChannelDefs.pm
@@ -152,6 +152,11 @@ register_channel 'obsolete', type => 'warning', silent =>
1;
register_channel 'override', type => 'warning', silent => 1;
register_channel 'portability', type => 'warning', silent => 1;
register_channel 'syntax', type => 'warning';
+# Special kind of syntax error that we must be able to silence
+# individually in order to support AC_CONFIG_MACRO_DIRS in aclocal.
+# For more background, see:
+# http://lists.gnu.org/archive/html/autoconf-patches/2012-11/msg00004.html
+register_channel 'm4require-without-m4defun', type => 'warning';
register_channel 'unsupported', type => 'warning';
register_channel 'verb', type => 'debug', silent => 1, ordered => 0;
@@ -274,6 +279,15 @@ sub switch_warning ($)
elsif (channel_type ($cat) eq 'warning')
{
setup_channel $cat, silent => $has_no;
+ # Handling of syntax warnings is trickier, due to the hack
+ # necessary to support AC_CONFIG_MACRO_DIRS in aclocal.
+ if ($cat eq 'syntax')
+ {
+ # '-Wsyntax' must enable warnings in the "hack" category
+ # 'm4require-without-m4defun', while '-Wno-syntax' must
+ # disable them.
+ setup_channel 'm4require-without-m4defun', silent => $has_no;
+ }
}
else
{
diff --git a/lib/m4sugar/m4sugar.m4 b/lib/m4sugar/m4sugar.m4
index 12a9ab7..14a5ff8 100644
--- a/lib/m4sugar/m4sugar.m4
+++ b/lib/m4sugar/m4sugar.m4
@@ -2080,13 +2080,18 @@ m4_if([$0], [m4_require], [[m4_defun]],
[[AC_DEFUN]])['d macro])])]dnl
#
# This is called frequently, so minimize the number of macro invocations
# by avoiding dnl and other overhead on the common path.
+# The use of convoluted warning category 'm4require-without-m4defun' is
+# a hack required by aclocal to support AC_CONFIG_MACRO_DIRS without
+# risking spurious warnings; for more background, see:
+# http://lists.gnu.org/archive/html/autoconf-patches/2012-11/msg00004.html
m4_define([_m4_require_call],
[m4_pushdef([_m4_divert_grow], m4_decr(_m4_divert_grow))]dnl
[m4_pushdef([_m4_diverting([$1])])m4_pushdef([_m4_diverting], [$1])]dnl
[m4_divert_push(_m4_divert_grow, [-])]dnl
[m4_if([$2], [], [$1], [$2])
m4_provide_if([$1], [m4_set_remove([_m4_provide], [$1])],
- [m4_warn([syntax], [$1 is m4_require'd but not m4_defun'd])])]dnl
+ [m4_warn([m4require-without-m4defun],
+ [$1 is m4_require'd but not m4_defun'd])])]dnl
[_m4_divert_raw($3)_m4_undivert(_m4_divert_grow)]dnl
[m4_divert_pop(_m4_divert_grow)_m4_popdef([_m4_divert_grow],
[_m4_diverting([$1])], [_m4_diverting])])
diff --git a/tests/m4sugar.at b/tests/m4sugar.at
index 997e2dd..5b91287 100644
--- a/tests/m4sugar.at
+++ b/tests/m4sugar.at
@@ -254,12 +254,14 @@ cross_warning[]dnl
m4_warn([syntax], [syntax])dnl
cross_warning[]dnl
m4_warn([syntax], [syntax])dnl
+m4_warn([m4require-without-m4defun], [hack for aclocal])dnl
]])
AT_CHECK_M4SUGAR([-o-], 0, [],
[script.4s:4: warning: prefer named diversions
script.4s:7: warning: syntax
script.4s:9: warning: syntax
+script.4s:10: warning: hack for aclocal
])
AT_CHECK_M4SUGAR([-o- -Wall], 0, [],
@@ -273,6 +275,7 @@ script.4s:8: warning: cross
script.4s:2: cross_warning is expanded from...
script.4s:8: the top level
script.4s:9: warning: syntax
+script.4s:10: warning: hack for aclocal
])
AT_CHECK_M4SUGAR([-o- -Wnone,cross], 0, [],
@@ -293,6 +296,24 @@ script.4s:2: cross_warning is expanded from...
script.4s:8: the top level
]])
+AT_CHECK_M4SUGAR([-o- -Wnone -Wsyntax], 0, [],
+[script.4s:4: warning: prefer named diversions
+script.4s:7: warning: syntax
+script.4s:9: warning: syntax
+script.4s:10: warning: hack for aclocal
+])
+
+AT_CHECK_M4SUGAR([-o- -Wnone -Wm4require-without-m4defun], 0, [],
+[script.4s:10: warning: hack for aclocal
+])
+
+AT_CHECK_M4SUGAR([-o- -Werror,none,syntax,no-m4require-without-m4defun],
+ 1, [],
+[script.4s:4: warning: prefer named diversions
+script.4s:7: warning: syntax
+script.4s:9: warning: syntax
+])
+
AT_CLEANUP
--
1.8.0
[PATCH 3/3] warn: new special syntax warning, hack for aclocal,
Stefano Lattarini <=
Re: [PATCH 0/3] Support for AC_CONFIG_MACRO_DIRS in autoconf, Stefano Lattarini, 2012/11/07