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, aclocal 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... Such warnings come from autom4te, and are due to the fact that the *first* autom4te invocation issued by aclocal is not yet able to "see" the m4 macro definitions in the local m4 dirs (because they can be looked for only after the AC_CONFIG_MACRO_DIRS call has been traced, and tracing it requires running autom4te). To allow us to work around this issue, autom4te has introduced a new "singleton" warning category, 'm4require-without-m4defun', that allow us to silence that particular kind of warnings (and only it). Reported by Nick Bowler; see point (4) of: <http://lists.gnu.org/archive/html/autoconf-patches/2012-11/msg00000.html> * configure.ac: Check whether autoconf/autom4te supports the 'm4require-without-m4defun' warning category. * aclocal.in (trace_used_macros): If that's the case, use it when invoking autom4te. * t/aclocal-macrodirs.tap ("AC_CONFIG_MACRO_DIR interaction with AC_REQUIRE"): This test passes now: remove the "TODO" directive. * t/aclocal-macrodir.tap ("AC_CONFIG_MACRO_DIRS interaction with AC_REQUIRE"): Likewise; but skip the test if autoconf is too old and doesn't support the 'm4require-without-m4defun' directive. * t/acloca17.sh: Remove. * t/list-of-tests.mk: Adjust. Signed-off-by: Stefano Lattarini <stefano.lattar...@gmail.com> --- aclocal.in | 11 +++++++++++ configure.ac | 15 +++++++++++++++ t/acloca17.sh | 41 ----------------------------------------- t/aclocal-macrodir.tap | 14 +++++++++++++- t/aclocal-macrodirs.tap | 2 +- t/list-of-tests.mk | 1 - 6 files changed, 40 insertions(+), 44 deletions(-) delete mode 100755 t/acloca17.sh diff --git a/aclocal.in b/aclocal.in index 0220a7d..020c901 100644 --- a/aclocal.in +++ b/aclocal.in @@ -718,6 +718,17 @@ sub trace_used_macros () my $traces = ($ENV{AUTOM4TE} || '@am_AUTOM4TE@'); $traces .= " --language Autoconf-without-aclocal-m4 "; + # When AC_CONFIG_MACRO_DIRS is used, avoid possible spurious + # warnings from autom4te about macros being "m4_require'd but + # not m4_defun'd"; for more background, see: + # http://lists.gnu.org/archive/html/autoconf-patches/2012-11/msg00004.html + # Only modern-enough versions of autom4te allow us to silence + # this warning, so the conditional below (set at configure time) + # is actually needed. + if ('@am_cv_autoconf_has_warning_for_aclocal@' eq "yes") + { + $traces .= "-Wno-m4require-without-m4defun "; + } # All candidate files. $traces .= join (' ', (map { "'$_'" } diff --git a/configure.ac b/configure.ac index 90985da..6eb4300 100644 --- a/configure.ac +++ b/configure.ac @@ -184,6 +184,21 @@ if test "$am_cv_autoconf_version" = no; then AC_MSG_ERROR([Autoconf $required_autoconf_version or better is required.]) fi +wcat=m4require-without-m4defun +AC_CACHE_CHECK([whether autoconf supports the '$wcat' warning category], + [am_cv_autoconf_has_warning_for_aclocal], +[mkdir conftest +dnl Creative quoting required to avoid spurious expansion of AC_PREREQ macro +echo 'AC''_INIT' > conftest/conftest.ac +if AM_RUN_LOG([cd confetest && $am_AUTOCONF -Werror -W"$wcat" -o/dev/null]); +then + am_cv_autoconf_has_warning_for_aclocal=yes +else + am_cv_autoconf_has_warning_for_aclocal=no +fi +rm -rf conftest]) +AC_SUBST([am_cv_autoconf_has_warning_for_aclocal]) + # Test for ln. We need use it to install the versioned binaries. AC_MSG_CHECKING([whether ln works]) AC_CACHE_VAL([am_cv_prog_ln], [ diff --git a/t/acloca17.sh b/t/acloca17.sh deleted file mode 100755 index ed8fc32..0000000 --- a/t/acloca17.sh +++ /dev/null @@ -1,41 +0,0 @@ -#! /bin/sh -# Copyright (C) 2004-2012 Free Software Foundation, Inc. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. - -# Make sure aclocal report unused required macros. - -am_create_testdir=empty -. test-init.sh - -cat > configure.ac << 'END' -AC_INIT -SOME_DEFS -END - -mkdir m4 -cat >m4/somedefs.m4 <<EOF -AC_DEFUN([SOME_DEFS], [ - AC_REQUIRE([UNDEFINED_MACRO]) -]) -EOF - -# FIXME: We want autom4te's 'undefined required macro' warning to be fatal, -# but have no means to say so to aclocal. We use WARNINGS=error instead. - -WARNINGS=error $ACLOCAL -I m4 2>stderr && { cat stderr >&2; exit 1; } -cat stderr >&2 -grep '^configure\.ac:2:.*UNDEFINED_MACRO' stderr - -: diff --git a/t/aclocal-macrodir.tap b/t/aclocal-macrodir.tap index c48b31f..c2cbb0a 100755 --- a/t/aclocal-macrodir.tap +++ b/t/aclocal-macrodir.tap @@ -173,7 +173,13 @@ test_end #--------------------------------------------------------------------------- -test_begin "AC_CONFIG_MACRO_DIR interaction with AC_REQUIRE" TODO +wcat=m4require-without-m4defun + +if echo AC_INIT | $AUTOCONF -Werror -W$wcat -o/dev/null -; then + +# FIXME: re-indent properly + +test_begin "AC_CONFIG_MACRO_DIR interaction with AC_REQUIRE" cat > configure.ac <<'END' AC_INIT([req], [1.0]) @@ -198,4 +204,10 @@ test $st -eq 0 \ test_end +else + + skip_ -r "autom4te warning category '$wcat' unsupported" + +fi + : diff --git a/t/aclocal-macrodirs.tap b/t/aclocal-macrodirs.tap index 3007ed4..a443e50 100755 --- a/t/aclocal-macrodirs.tap +++ b/t/aclocal-macrodirs.tap @@ -341,7 +341,7 @@ test_end #--------------------------------------------------------------------------- -test_begin "AC_CONFIG_MACRO_DIRS interaction with AC_REQUIRE" TODO +test_begin "AC_CONFIG_MACRO_DIRS interaction with AC_REQUIRE" cat > configure.ac <<'END' AC_INIT([req], [1.0]) diff --git a/t/list-of-tests.mk b/t/list-of-tests.mk index 290a1a5..f1a068f 100644 --- a/t/list-of-tests.mk +++ b/t/list-of-tests.mk @@ -87,7 +87,6 @@ t/acloca14.sh \ t/acloca14b.sh \ t/acloca15.sh \ t/acloca16.sh \ -t/acloca17.sh \ t/acloca18.sh \ t/acloca19.sh \ t/acloca20.sh \ -- 1.8.0