bug#7333: [PATCH] {maint} Fix a bug in variable concatanation with `+='. (was: Re: bug#7333: bug concatenating CLEANFILES in automake 1.11)

2010-11-06 Thread Stefano Lattarini
On Friday 05 November 2010, Stefano Lattarini wrote: 
 I can confirm the bug with latest automake (from git master), with
 a much-reduced minimal testcase (see attachment).
 
 I still haven't looked for an explanation or a fix, though.
I've manged to find a very simple fix for the bug (see attached patch).

OK to apply to maint?

Regards,
  Stefano
From b8de299295e081909c6d0a8a1cef957b337e3732 Mon Sep 17 00:00:00 2001
From: Stefano Lattarini stefano.lattar...@gmail.com
Date: Sat, 6 Nov 2010 12:46:52 +0100
Subject: [PATCH] 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.
---
 ChangeLog  |   10 
 lib/Automake/VarDef.pm |   13 +-
 tests/Makefile.am  |1 +
 tests/Makefile.in  |1 +
 tests/pluseq11.test|   54 
 5 files changed, 68 insertions(+), 11 deletions(-)
 create mode 100755 tests/pluseq11.test

diff --git a/ChangeLog b/ChangeLog
index 6c17cd3..a928363 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2010-11-06  Stefano Lattarini  stefano.lattar...@gmail.com
+
+	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.
+
 2010-11-01  Ralf Wildenhues  ralf.wildenh...@gmx.de
 
 	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 d7ba155..568c82a 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 9c81564..da81c49 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 b568a09..eb461a9 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 000..293270f
--- /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 this 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
+
+:
-- 
1.7.1



bug#7336: Failure on test parallel-tests5.test

2010-11-06 Thread Ralf Wildenhues
* Lluís Batlle i Rossell wrote on Fri, Nov 05, 2010 at 01:36:28PM CET:
 On Mon, Nov 01, 2010 at 07:41:12PM +0100, Lluís Batlle i Rossell wrote:
  On Mon, Nov 01, 2010 at 07:07:48PM +0100, Ralf Wildenhues wrote:
   [ http://thread.gmane.org/gmane.comp.sysutils.automake.bugs/5061 ]

  Ralf says that something changed about syscall restarting in linux 2.6.36, 
  so it
  can be a problem in linux. I hope he will investigate that and keep all of 
  us
  aware. I'll try linux 2.6.35 meanwhile.
 
 Fixed! Ralf and Al Viro found the kernel problem, made evident in the release
 2.6.36 for mips only. Fixed here:
 http://git.linux-mips.org/?p=linux.git;a=commit;h=915bcf007cbf9370fa0f3a57b27cf7fdc45b3964
 
 I reported to automake because it was the very only part of the system 
 failing.

Thanks for reporting and having this tracked down, I'm closing the Automake bug.

Cheers,
Ralf