diff options
author | Stefano Lattarini <stefano.lattarini@gmail.com> | 2010-11-07 15:23:41 +0100 |
---|---|---|
committer | Stefano Lattarini <stefano.lattarini@gmail.com> | 2010-11-07 15:23:41 +0100 |
commit | 3dffb015de25fc5cd79134feb9b94cbc8a3f4994 (patch) | |
tree | 1a565ede2f2078fcba3def6ae417756a0c51594b | |
parent | 1e460312d79fe15170e7519fb785e132ac7293fb (diff) | |
parent | 551b1133da2b17fb3d2171346fd4af86f05ad5fe (diff) | |
download | automake-3dffb015de25fc5cd79134feb9b94cbc8a3f4994.tar.gz |
Merge branch 'maint'
-rw-r--r-- | ChangeLog | 13 | ||||
-rw-r--r-- | lib/Automake/VarDef.pm | 13 | ||||
-rw-r--r-- | tests/Makefile.am | 1 | ||||
-rw-r--r-- | tests/Makefile.in | 1 | ||||
-rwxr-xr-x | tests/pluseq11.test | 54 |
5 files changed, 71 insertions, 11 deletions
@@ -1,5 +1,18 @@ 2010-11-07 Stefano Lattarini <stefano.lattarini@gmail.com> + 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-07 Stefano Lattarini <stefano.lattarini@gmail.com> + Modernize, improve and/or tweak various test scripts. * tests/stamph2.test: Improve m4 quoting in `configure.in', and prefer trailing `:' over trailing `Exit 0'. diff --git a/lib/Automake/VarDef.pm b/lib/Automake/VarDef.pm index 7d10bb6f5..033aa05d2 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 33a0e8422..13214ed8f 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -652,6 +652,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 0503cabfa..95065f220 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -910,6 +910,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 <http://www.gnu.org/licenses/>. + +# 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 + +: |