From: Stefano Lattarini Date: Mon, 20 Dec 2010 11:10:56 +0000 (+0100) Subject: Warnings win over strictness on command line. X-Git-Tag: ng-0.5a~248^2~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b67240eb097e5b1ef2b76492e07dc706ee5103bd;p=thirdparty%2Fautomake.git Warnings win over strictness on command line. This change ensures that, on the command line at least, explicitly defined warnings always take precedence over implicit strictness implied warnings. Related to Automake bug#7669 a.k.a. PR/547. * automake.in (parse_arguments): Parse warnings only after the strictness level has been processed. * tests/gnuwarn.test: Update, plus miscellaneous improvements. * tests/warnings-win-over-strictness.test: New test. * tests/Makefile.am (TESTS): Update. --- diff --git a/ChangeLog b/ChangeLog index 9130140af..0db84ff3c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,16 @@ 2011-01-15 Stefano Lattarini + For PR automake/547: + Warnings win over strictness on command line. + Ensure that, on the command line at least, explicitly defined + warnings always take precedence over implicit strictness-implied + warnings. Related to Automake bug#7669 a.k.a. PR/547. + * automake.in (parse_arguments): Parse warnings only after the + strictness level has been processed. + * tests/gnuwarn.test: Update, plus miscellaneous improvements. + * tests/warnings-win-over-strictness.test: New test. + * tests/Makefile.am (TESTS): Update. + More tests on warnings and strictness. * tests/warnings-strictness-interactions.test: New test. * tests/warnings-unknown.test: Likewise. diff --git a/automake.in b/automake.in index 1d4601b1f..e80a7361b 100644 --- a/automake.in +++ b/automake.in @@ -8467,26 +8467,26 @@ EOF # Parse command line. sub parse_arguments () { - # Start off as gnu. - set_strictness ('gnu'); + my $strict = 'gnu'; + my $cygnus = 0; + my $ignore_deps = 0; + my @warnings = (); - my $cli_where = new Automake::Location; my %cli_options = ( 'libdir=s' => \$libdir, - 'gnu' => sub { set_strictness ('gnu'); }, - 'gnits' => sub { set_strictness ('gnits'); }, - 'cygnus' => sub { set_global_option ('cygnus', $cli_where); }, - 'foreign' => sub { set_strictness ('foreign'); }, - 'include-deps' => sub { unset_global_option ('no-dependencies'); }, - 'i|ignore-deps' => sub { set_global_option ('no-dependencies', - $cli_where); }, + 'gnu' => sub { $strict = 'gnu'; }, + 'gnits' => sub { $strict = 'gnits'; }, + 'foreign' => sub { $strict = 'foreign'; }, + 'cygnus' => \$cygnus, + 'include-deps' => sub { $ignore_deps = 0; }, + 'i|ignore-deps' => sub { $ignore_deps = 1; }, 'no-force' => sub { $force_generation = 0; }, 'f|force-missing' => \$force_missing, 'a|add-missing' => \$add_missing, 'c|copy' => \$copy_missing, 'v|verbose' => sub { setup_channel 'verb', silent => 0; }, - 'W|warnings=s' => \&parse_warnings, + 'W|warnings=s' => \@warnings, ); use Getopt::Long; Getopt::Long::config ("bundling", "pass_through"); @@ -8515,6 +8515,15 @@ sub parse_arguments () Getopt::Long::GetOptions %cli_options, 'version' => sub {}, 'help' => sub {} or exit 1; + set_strictness ($strict); + my $cli_where = new Automake::Location; + set_global_option ('cygnus', $cli_where) if $cygnus; + set_global_option ('no-dependencies', $cli_where) if $ignore_deps; + for my $warning (@warnings) + { + &parse_warnings ('-W', $warning); + } + return unless @ARGV; if ($ARGV[0] =~ /^-./) diff --git a/tests/Makefile.am b/tests/Makefile.am index 972f8a9bc..0523add3f 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -950,6 +950,7 @@ warnings-precedence.test \ warnings-strictness-interactions.test \ warnings-unknown.test \ warnopts.test \ +warnings-win-over-strictness.test \ werror.test \ werror2.test \ werror3.test \ diff --git a/tests/Makefile.in b/tests/Makefile.in index 282afe070..72fdeec07 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -1213,6 +1213,7 @@ warnings-precedence.test \ warnings-strictness-interactions.test \ warnings-unknown.test \ warnopts.test \ +warnings-win-over-strictness.test \ werror.test \ werror2.test \ werror3.test \ diff --git a/tests/gnuwarn.test b/tests/gnuwarn.test index 43987b97e..3db7e857c 100755 --- a/tests/gnuwarn.test +++ b/tests/gnuwarn.test @@ -18,6 +18,9 @@ . ./defs || Exit 1 +# We need (almost) complete control over automake options. +AUTOMAKE="$original_AUTOMAKE -Werror" + cat >> configure.in << 'END' AC_PROG_CC AC_OUTPUT @@ -38,12 +41,14 @@ END $ACLOCAL # Don't warn in foreign mode -$AUTOMAKE -Wnone --add-missing --foreign +$AUTOMAKE --add-missing --foreign # Warn in gnu mode -AUTOMAKE_fails -Wnone --add-missing --gnu -grep 'Makefile.am:1:.*CFLAGS' stderr -grep 'Makefile.am:2:.*LDFLAGS' stderr +AUTOMAKE_fails --add-missing --gnu +grep '^Makefile\.am:1:.*CFLAGS' stderr +grep '^Makefile\.am:2:.*LDFLAGS' stderr # No reason to warn about CXXFLAGS since it's not used. grep CXXFLAGS stderr && Exit 1 # Don't warn if -Wno-gnu. -$AUTOMAKE -Wnone --gnu -Wno-gnu +$AUTOMAKE --gnu -Wno-gnu + +: diff --git a/tests/warnings-win-over-strictness.test b/tests/warnings-win-over-strictness.test new file mode 100755 index 000000000..27936ecf2 --- /dev/null +++ b/tests/warnings-win-over-strictness.test @@ -0,0 +1,52 @@ +#! /bin/sh +# Copyright (C) 2011 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, on the command line, explicitly-defined warnings take +# precedence over implicit strictness-implied warnings. + +. ./defs || Exit 1 + +# We want complete control over automake options. +AUTOMAKE=$original_AUTOMAKE + +ok () +{ + AUTOMAKE_run 0 $* + test ! -s stderr +} + +ko () +{ + AUTOMAKE_run 0 $* + grep '^Makefile\.am:.*:=.*not portable' stderr + test `wc -l Makefile.am <