From 27136dfe02926ac596c853fced7c17825ef3cf68 Mon Sep 17 00:00:00 2001 From: Stefano Lattarini Date: Sat, 31 Mar 2012 16:39:32 +0200 Subject: [PATCH] init: warn against obsolete usage of AM_INIT_AUTOMAKE Support for the two- and three-arguments invocation forms of the AM_INIT_AUTOMAKE macro, as in: AM_INIT_AUTOMAKE($PACKAGE, $VERSION) or: AM_INIT_AUTOMAKE($PACKAGE, $VERSION, NODEFINE) will be removed in the next major Automake release (1.13). Such usages have already been deprecated in the documentation starting from commit v1.11-2015-ge99690a of 23-02-2012 "docs, news: document planned removal of obsolete macros and features". We now start giving runtime warnings as well (in the 'obsolete' category). * NEWS: Update. * m4/init.m4 (AM_INIT_AUTOMAKE): Report the two- and three-arguments form invocation. * automake.in (scan_autoconf_traces): Likewise. * doc/automake.texi: Minor adjustments. Add an @anchor to the location where it's described how to modernize outdated invocation of AM_INIT_AUTOMAKE, so that it can be referenced from automake warning/error messages. * t/aminit-moreargs-deprecation.sh: New test. * tests/list-of-tests.mk: Add it. * tests/ac-output-old.tap: Adjust by calling automake with the warnings in the 'obsolete' category disabled. * t/backcompat.test: Likewise. * t/backcompat3.test: Likewise. * t/backcompat5.test: Likewise. * t/backcompat6.test: Likewise. * t/version.test: Likewise. * t/version2.test: Likewise. * t/pr2.test: Modernize style of AC_INIT and AM_INIT_AUTOMAKE invocations, and use proper m4 quoting. * t/pr87.test: Likewise. * t/confsub.test: Likewise. * t/install2.test: Likewise. Signed-off-by: Stefano Lattarini --- NEWS | 5 ++++ automake.in | 4 ++++ doc/automake.texi | 3 ++- m4/init.m4 | 5 +++- t/ac-output-old.tap | 2 ++ t/aminit-moreargs-deprecation.sh | 51 ++++++++++++++++++++++++++++++++++++++++ t/backcompat.sh | 2 +- t/backcompat3.sh | 2 ++ t/backcompat5.sh | 4 ++-- t/backcompat6.sh | 2 +- t/confsub.sh | 9 ++++--- t/install2.sh | 12 ++++++---- t/list-of-tests.mk | 1 + t/pr2.sh | 9 +++---- t/pr87.sh | 14 +++++++---- t/version.sh | 2 +- t/version2.sh | 2 +- 17 files changed, 100 insertions(+), 29 deletions(-) create mode 100755 t/aminit-moreargs-deprecation.sh diff --git a/NEWS b/NEWS index dcfd8c1..57af901 100644 --- a/NEWS +++ b/NEWS @@ -56,6 +56,11 @@ New in 1.12.1: * Deprecated obsolescent features: + - Use of the long-deprecated two- and three-arguments invocation forms + of the AM_INIT_AUTOMAKE macro now elicits a warning in the 'obsolete' + category. Starting from the next major Automake release (1.13), such + usages won't be allowed anymore. + - Support for the "Cygnus-style" trees (enabled by the 'cygnus' option) is now deprecated (its use triggers a warning in the 'obsolete' category). It will be removed in the next major Automake release (1.13). diff --git a/automake.in b/automake.in index 16f44b7..5cf5a2c 100644 --- a/automake.in +++ b/automake.in @@ -5409,6 +5409,10 @@ EOF $seen_init_automake = $where; if (defined $args[2]) { + msg 'obsolete', $where, <<'EOF'; +AM_INIT_AUTOMAKE: two- and three-arguments forms are deprecated. For more info, see: +http://www.gnu.org/software/automake/manual/automake.html#Modernize-AM_INIT_AUTOMAKE-invocation +EOF $package_version = $args[2]; $package_version_location = $where; } diff --git a/doc/automake.texi b/doc/automake.texi index 5e2b9c2..2f2ebb0 100644 --- a/doc/automake.texi +++ b/doc/automake.texi @@ -3946,13 +3946,14 @@ each option were listed in @code{AUTOMAKE_OPTIONS} (@pxref{Options}). @acindex AC_INIT This macro can also be called in @emph{another, deprecated form} (support -for which will be @emph{removed in the next major Automake release}): +for which will be @emph{removed in the next major Automake release (1.13)}): @code{AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])}. In this form, there are two required arguments: the package and the version number. This form is obsolete because the @var{package} and @var{version} can be obtained from Autoconf's @code{AC_INIT} macro (which itself has an old and a new form). +@anchor{Modernize AM_INIT_AUTOMAKE invocation} If your @file{configure.ac} has: @example diff --git a/m4/init.m4 b/m4/init.m4 index 206034c..85228ba 100644 --- a/m4/init.m4 +++ b/m4/init.m4 @@ -52,7 +52,10 @@ AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], -[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl +[AC_DIAGNOSE([obsolete], +[$0: two- and three-arguments forms are deprecated. For more info, see: +http://www.gnu.org/software/automake/manual/automake.html#Modernize-AM_INIT_AUTOMAKE-invocation]) +m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl diff --git a/t/ac-output-old.tap b/t/ac-output-old.tap index 5c906a2..5ba3d3e 100755 --- a/t/ac-output-old.tap +++ b/t/ac-output-old.tap @@ -24,6 +24,8 @@ plan_ 22 rm -f configure.ac depcomp # Not required. +AUTOMAKE="$AUTOMAKE -Wno-obsolete" + # ----------------------------------------------------------------------- # Test for bug reported by François Pinard. diff --git a/t/aminit-moreargs-deprecation.sh b/t/aminit-moreargs-deprecation.sh new file mode 100755 index 0000000..ac91d1d --- /dev/null +++ b/t/aminit-moreargs-deprecation.sh @@ -0,0 +1,51 @@ +#! /bin/sh +# Copyright (C) 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 . + +# Check that automake warns against old-style usages of AM_INIT_AUTOMAKE +# (i.e., calls with two or three arguments). + +. ./defs || Exit 1 + +warn_rx='AM_INIT_AUTOMAKE.* two-.* three-arguments form.*deprecated' + +cat > configure.ac <<'END' +AC_INIT([Makefile.am]) +AM_INIT_AUTOMAKE([twoargs], [1.0]) +AC_CONFIG_FILES([Makefile]) +END + +$ACLOCAL + +do_check() +{ + rm -rf autom4te*.cache + for cmd in "$AUTOCONF" "$AUTOMAKE"; do + $cmd -Werror -Wnone -Wobsolete 2>stderr && { cat stderr; Exit 1; } + cat stderr >&2 + grep "^configure\.ac:2:.*$warn_rx" stderr + $cmd -Werror -Wall -Wno-obsolete || Exit 1 + done +} + +: > Makefile.am +do_check + +sed "/^AM_INIT_AUTOMAKE/s|)$|, [NODEFINE])|" configure.ac > t +diff configure.ac t && fatal_ "failed to edit configure.ac" +mv -f t configure.ac +do_check + +: diff --git a/t/backcompat.sh b/t/backcompat.sh index ec8292c..8a93141 100755 --- a/t/backcompat.sh +++ b/t/backcompat.sh @@ -55,7 +55,7 @@ END cat configure.in # For debugging. $ACLOCAL $AUTOCONF - $AUTOMAKE + $AUTOMAKE -Wno-obsolete ./configure $MAKE test done diff --git a/t/backcompat3.sh b/t/backcompat3.sh index 2377e88..5dc78f6 100755 --- a/t/backcompat3.sh +++ b/t/backcompat3.sh @@ -22,6 +22,8 @@ am_create_testdir=empty empty='' +AUTOMAKE="$AUTOMAKE -Wno-obsolete" + cat > Makefile.am <<'END' ## Leading ':;' here required to work around bugs of (at least) bash 3.2 got: Makefile diff --git a/t/backcompat5.sh b/t/backcompat5.sh index 3aa9067..6bfb1c2 100755 --- a/t/backcompat5.sh +++ b/t/backcompat5.sh @@ -94,10 +94,10 @@ END $ACLOCAL $AUTOCONF -$AUTOMAKE -a +$AUTOMAKE -a -Wno-obsolete test -f install-sh for f in $makefiles; do mv -f $f.in $f.sav; done -$AUTOMAKE +$AUTOMAKE -Wno-obsolete for f in $makefiles; do diff $f.sav $f.in; done ./configure diff --git a/t/backcompat6.sh b/t/backcompat6.sh index fde118b..4523a65 100755 --- a/t/backcompat6.sh +++ b/t/backcompat6.sh @@ -78,7 +78,7 @@ int main (void) END $ACLOCAL -$AUTOMAKE --add-missing +$AUTOMAKE -Wno-obsolete --add-missing $AUTOCONF ./configure diff --git a/t/confsub.sh b/t/confsub.sh index 1887046..b13f26a 100755 --- a/t/confsub.sh +++ b/t/confsub.sh @@ -19,11 +19,10 @@ . ./defs || Exit 1 -cat > configure.ac << 'END' -AC_INIT -AM_INIT_AUTOMAKE(nonesuch, nonesuch) -AM_CONFIG_HEADER(subdir/config.h:subdir/config.hin) -AC_OUTPUT(Makefile subdir/Makefile) +cat >> configure.ac << 'END' +AC_CONFIG_FILES([subdir/Makefile]) +AM_CONFIG_HEADER([subdir/config.h:subdir/config.hin]) +AC_OUTPUT END cat > Makefile.am << 'END' diff --git a/t/install2.sh b/t/install2.sh index f1992e8..bd400f4 100755 --- a/t/install2.sh +++ b/t/install2.sh @@ -17,14 +17,16 @@ # Test for bug in 'make dist' # From Pavel Roskin. +am_create_testdir=empty . ./defs || Exit 1 -cat > configure.ac << 'END' -AC_INIT +cat > configure.ac << END +AC_INIT([$me], [1.0]) dnl Prevent automake from looking in .. and ../.. -AC_CONFIG_AUX_DIR(.) -AM_INIT_AUTOMAKE(foo, 0.1) -AC_OUTPUT(Makefile) +AC_CONFIG_AUX_DIR([.]) +AM_INIT_AUTOMAKE +AC_CONFIG_FILES([Makefile]) +AC_OUTPUT END cat > Makefile.am << 'END' diff --git a/t/list-of-tests.mk b/t/list-of-tests.mk index 708e972..e9f8d23 100644 --- a/t/list-of-tests.mk +++ b/t/list-of-tests.mk @@ -117,6 +117,7 @@ t/alpha2.sh \ t/amhello-cflags.sh \ t/amhello-cross-compile.sh \ t/amhello-binpkg.sh \ +t/aminit-moreargs-deprecation.sh \ t/amassign.sh \ t/ammissing.sh \ t/amopt.sh \ diff --git a/t/pr2.sh b/t/pr2.sh index ffe4a81..9aa7bc5 100755 --- a/t/pr2.sh +++ b/t/pr2.sh @@ -29,11 +29,8 @@ . ./defs || Exit 1 -# Please keep this underquoted and old-style. -cat > configure.ac << 'END' -AC_INIT -AM_INIT_AUTOMAKE(nonesuch, nonesuch) -AC_OUTPUT(README.foo:templ/README.foo.in Makefile) +cat >> configure.ac << 'END' +AC_OUTPUT([README.foo:templ/README.foo.in]) END : > Makefile.am @@ -46,6 +43,6 @@ $AUTOCONF $AUTOMAKE ./configure $MAKE distdir -test -f nonesuch-nonesuch/templ/README.foo.in +test -f $distdir/templ/README.foo.in : diff --git a/t/pr87.sh b/t/pr87.sh index d98b661..121328d 100755 --- a/t/pr87.sh +++ b/t/pr87.sh @@ -37,12 +37,16 @@ EOF done echo "SUBDIRS = $subdirs" > Makefile.am -cat >configure.ac < configure.ac < THANKS $ACLOCAL -$AUTOMAKE --gnits +$AUTOMAKE --gnits -Wno-obsolete diff --git a/t/version2.sh b/t/version2.sh index 71749f6..273bd36 100755 --- a/t/version2.sh +++ b/t/version2.sh @@ -38,4 +38,4 @@ END : > THANKS $ACLOCAL -$AUTOMAKE --gnits +$AUTOMAKE --gnits -Wno-obsolete -- 2.7.4