From: Stefano Lattarini Date: Sat, 6 Nov 2010 11:46:52 +0000 (+0100) Subject: Fix a bug in variable concatanation with `+='. X-Git-Tag: v1.11.1b~44^2~3^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7a020d668ab1bf8f36bb1719b63f784c64ae74f2;p=thirdparty%2Fautomake.git Fix a bug in variable concatanation with `+='. * lib/Automake/VarDef.pm (append): Remove extra backslash-escaped newlines from the end of the variable's content, before appending to it. * tests/pluseq11.test: New test, exposing the bug. * tests/Makefile.am (TESTS): Update. Reported by Andy Wingo. --- diff --git a/ChangeLog b/ChangeLog index 6c17cd345..3e36f4ddf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2010-11-07 Stefano Lattarini + + Fix a bug in variable concatanation with `+='. + * lib/Automake/VarDef.pm (append): Since the content of the + "appended-to" variable is going to be unconditionally normalized + later, simply separate the appended value with a single whitespace + character, instead of trying to be uselesssly smarter by using + escaped newlines. This fixes a bug in which extra backslashes + where erroneously inserted in the variable's final value. + * tests/pluseq11.test: New test, exposing the bug. + * tests/Makefile.am (TESTS): Update. + Reported by Andy Wingo. + 2010-11-01 Ralf Wildenhues Fix and document rules to not touch the tree with `make -n'. diff --git a/lib/Automake/VarDef.pm b/lib/Automake/VarDef.pm index d7ba15562..568c82afa 100644 --- a/lib/Automake/VarDef.pm +++ b/lib/Automake/VarDef.pm @@ -185,17 +185,8 @@ sub append ($$$) # Furthermore keeping `#' would not be portable if the variable is # output on multiple lines. $val =~ s/ ?#.*//; - - if (chomp $val) - { - # Insert a backslash before a trailing newline. - $val .= "\\\n"; - } - elsif ($val) - { - # Insert a separator. - $val .= ' '; - } + # Insert a separator, if required. + $val .= ' ' if $val; $self->{'value'} = $val . $value; # Turn ASIS appended variables into PRETTY variables. This is to # cope with `make' implementation that cannot read very long lines. diff --git a/tests/Makefile.am b/tests/Makefile.am index 9c8156401..da81c495d 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -570,6 +570,7 @@ pluseq7.test \ pluseq8.test \ pluseq9.test \ pluseq10.test \ +pluseq11.test \ postproc.test \ ppf77.test \ pr2.test \ diff --git a/tests/Makefile.in b/tests/Makefile.in index b568a09c5..eb461a941 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -837,6 +837,7 @@ pluseq7.test \ pluseq8.test \ pluseq9.test \ pluseq10.test \ +pluseq11.test \ postproc.test \ ppf77.test \ pr2.test \ diff --git a/tests/pluseq11.test b/tests/pluseq11.test new file mode 100755 index 000000000..12ec4d77f --- /dev/null +++ b/tests/pluseq11.test @@ -0,0 +1,54 @@ +#!/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 . + +# Check for bug in variable concatenation with `+=': an extra backslash +# is erroneously retained in the final value. +# See also sister test pluseq11b.test. + +. ./defs || Exit 1 + +set -e + +cat >>configure.in <<'END' +AC_OUTPUT +END + +cat > Makefile.am <<'END' +## Use more line continuation to ensure we are robust and can (hopefully) +## cope any number of them, and not just one +FOO = \ +\ +\ +bar +## Both these two variable additions are required to trigger the bug. +FOO += +FOO += baz + +.PHONY: test +test: + case '$(FOO)' in *\\*) exit 1;; *) exit 0;; esac +END + +$ACLOCAL +$AUTOMAKE + +grep '^ *FOO *=.*\\.' Makefile.in && Exit 1 + +$AUTOCONF +./configure +$MAKE test + +: