From b3d9df070a046d4181b5f1a5e16b0ddfccca05fd Mon Sep 17 00:00:00 2001 From: Ralf Wildenhues Date: Sun, 11 Apr 2010 19:56:21 +0200 Subject: [PATCH] Fix per-Makefile.am setting of -Werror. Before this patch, 'AUTOMAKE_OPTIONS = -Werror' in one Makefile.am would carry over to other Makefile.am files treated afterwards by the same thread, causing inconsistent and unstable exit status values. * lib/Automake/Channels.pm (dup_channel_setup) (drop_channel_setup): Save and restore the setting of $warnings_are_errors. * tests/werror3.test: New test. * tests/Makefile.am: Adjust. * NEWS: Update. Signed-off-by: Ralf Wildenhues --- ChangeLog | 14 ++++++++++++ NEWS | 2 ++ lib/Automake/Channels.pm | 5 +++- tests/Makefile.am | 1 + tests/Makefile.in | 1 + tests/werror3.test | 49 ++++++++++++++++++++++++++++++++++++++++ 6 files changed, 71 insertions(+), 1 deletion(-) create mode 100755 tests/werror3.test diff --git a/ChangeLog b/ChangeLog index cab8ce45a..642387578 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,17 @@ +2010-04-11 Ralf Wildenhues + + Fix per-Makefile.am setting of -Werror. + Before this patch, 'AUTOMAKE_OPTIONS = -Werror' in one + Makefile.am would carry over to other Makefile.am files + treated afterwards by the same thread, causing inconsistent + and unstable exit status values. + * lib/Automake/Channels.pm (dup_channel_setup) + (drop_channel_setup): Save and restore the setting of + $warnings_are_errors. + * tests/werror3.test: New test. + * tests/Makefile.am: Adjust. + * NEWS: Update. + 2010-04-11 Stefano Lattarini Avoid possible false negatives in cond46.test. diff --git a/NEWS b/NEWS index 5af243946..fee7f83f2 100644 --- a/NEWS +++ b/NEWS @@ -31,6 +31,8 @@ Bugs fixed in 1.11.0a: - Several scripts as well as the parallel-tests testsuite driver now exit with the right exit status upon receiving a signal. + - A per-Makefile.am setting of -Werror does not carry over to the + handling of other Makefile.am files any more. New in 1.11: diff --git a/lib/Automake/Channels.pm b/lib/Automake/Channels.pm index 223d8d203..050ba05fd 100644 --- a/lib/Automake/Channels.pm +++ b/lib/Automake/Channels.pm @@ -710,8 +710,9 @@ entry, while C just deletes it. =cut -use vars qw (@_saved_channels); +use vars qw (@_saved_channels @_saved_werrors); @_saved_channels = (); +@_saved_werrors = (); sub dup_channel_setup () { @@ -721,12 +722,14 @@ sub dup_channel_setup () $channels_copy{$k1} = {%{$channels{$k1}}}; } push @_saved_channels, \%channels_copy; + push @_saved_werrors, $warnings_are_errors; } sub drop_channel_setup () { my $saved = pop @_saved_channels; %channels = %$saved; + $warnings_are_errors = pop @_saved_werrors; } =item C, C diff --git a/tests/Makefile.am b/tests/Makefile.am index 7e14b1c66..eb63337e5 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -746,6 +746,7 @@ vtexi2.test \ warnopts.test \ werror.test \ werror2.test \ +werror3.test \ whoami.test \ xsource.test \ xz.test \ diff --git a/tests/Makefile.in b/tests/Makefile.in index 648966f64..58e755472 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -983,6 +983,7 @@ vtexi2.test \ warnopts.test \ werror.test \ werror2.test \ +werror3.test \ whoami.test \ xsource.test \ xz.test \ diff --git a/tests/werror3.test b/tests/werror3.test new file mode 100755 index 000000000..96b4ff347 --- /dev/null +++ b/tests/werror3.test @@ -0,0 +1,49 @@ +#! /bin/sh +# Copyright (C) 2010 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 . + +# Make sure a per-Makefile.am -Werror setting is not carried over +# to another Makefile.am. + +. ./defs || Exit 1 + +set -e + +cat >>configure.in <<\END +AC_CONFIG_FILES([sub/Makefile]) +AC_OUTPUT +END + +mkdir sub +cat >sub/Makefile.am <<\END +AUTOMAKE_OPTIONS = -Werror +END +cat >Makefile.am <<\END +VAR = foo +VAR = bar +END + +$ACLOCAL + +# The issue would not manifest with threaded execution. +unset AUTOMAKE_JOBS || : +AUTOMAKE_run 0 -Wno-error +grep 'VAR multiply defined' stderr + +AUTOMAKE_JOBS=2 +export AUTOMAKE_JOBS +AUTOMAKE_run 0 -Wno-error +grep 'VAR multiply defined' stderr +: -- 2.47.2