Subject: bug#10898: test-suite output of automake-1.11.3 - it requested I send it to you!

From: Stefano Lattarini <[email-masked]>
Date: Tue, 28 Feb 2012 17:42:53 +0100

Hi Lou.

Please keep the mailing list in loop when you answer.  Thanks.

I'm re-sending your answer to the list, so that it gets seen by the other
subscribers and registered in the bug tracker.

On 02/28/2012 03:05 PM, Lou Picciano wrote:
> Stefano,
> 
> Tks for your notes -
> I'm encouraged to think that, with a bit of work, I may just wind up with a
> perfect version of automake!
> On specific points:
> 
>    Ah, likely the famous ksh bug with "$@" and empty arguments:
> 
>      <http://lists.gnu.org/archive/html/automake-patches/2009-12/msg00037.html>
> 
>    Can you verify that your shell suffers of the problem described there?  If
>    yes, a patch to fix this issue should be trivial.
> 
> Looks like we reproduce that bug example exactly - what patch would you propose?:
>
Just a simple workaround for the affected shell function(s); see the attached
patch.  Could you confirm it fixes your problem?

>    drlou@build:~$ foo.sh
>    ---
>    $#: 0
> 
>    ---
>    $#: 1
> 
>    ---
>    $#: 2
>    xy
>    ---
>    $#: 2
>    xy xay
>    ---
>    $#: 3
>    xay xy xby
>    ---
>    drlou@build:~$ sh foo.sh
>    ---
>    $#: 0
> 
>    ---
>    $#: 1
> 
>    ---
>    $#: 2
>    xy
>    ---
>    $#: 2
>    xy xay
>    ---
>    $#: 3
>    xay xy xby
>    ---
>    drlou@build:~$ ksh foo.sh
>    ---
>    $#: 0
> 
>    ---
>    $#: 1
> 
>    ---
>    $#: 2
>    xy
>    ---
>    $#: 2
>    xy xay
>    ---
>    $#: 3
>    xay xy xby
>    ---
> 
> On the 'find' question:
> 
>    find: bad option -links
>    find: [-E] [-H | -L] path-list predicate-list
> 
> 
>    Oops, your find (1) doesn't support the '-links' option, which is mandated by
>    POSIX:<http://pubs.opengroup.org/onlinepubs/009604599/utilities/find.html>.
> 
> Yes, exactly right - build system defaults to 'solaris' find. working on this
> one next...:
> 
So you are planning to fix your system's version of find?  That would be great,
since it would allow us to avoid putting another ugly workaround in automake's
rules.

> drlou@build:~$ find -links
> find: illegal option -- l
> find: [-E] [-H | -L] path-list predicate-list
>
> drlou@build:~$ /usr/gnu/bin/find -links
> /usr/gnu/bin/find: missing argument to `-links'
> 
> Regards, Lou Picciano
> 

Thanks,
  Stefano

>From 6008179d652eeec30fe6ab9769d5eb25253f27cd Mon Sep 17 00:00:00 2001
Message-Id: <6008179d6[email-masked]>
From: Stefano Lattarini <[email-masked]>
Date: Tue, 28 Feb 2012 17:40:24 +0100
Subject: [PATCH] tests: fix a spurious failure with the Korn Shell

See automake bug#10898.

At least the AT&T and OpenSolaris versions of the Korn shell have a
strange bug regarding the expression ${1+"$@"}: when exactly *one*
empty argument is passed to a shell function, inside that function
the expression ${1+"$@"} will expand to *nothing*, rather than to
to the single empty string, as one would expect.  This was causing
a spurious failure in our testsuite when a shell suffering of this
bug was used to run the test cases.

* tests/autoamke.test: Work around the bug, by avoiding the
indirection through the 'AUTOMAKE_fails' function.
---
 tests/defs.in |   14 ++++++++++++--
 1 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/tests/defs.in b/tests/defs.in
index 4990e30..b2061e7 100644
--- a/tests/defs.in
+++ b/tests/defs.in
@@ -527,7 +527,12 @@ AUTOMAKE_run ()
   expected_exitcode=$1
   shift
   exitcode=0
-  $AUTOMAKE ${1+"$@"} >stdout 2>stderr || exitcode=$?
+  # This case distinction is required to work around a ksh bug.
+  # See automake bug#10898.
+  case $# in
+    0) $AUTOMAKE ;;
+    *) $AUTOMAKE "$@" ;;
+  esac >stdout 2>stderr || exitcode=$?
   cat stderr >&2
   cat stdout
   test $exitcode = $expected_exitcode || Exit 1
@@ -539,7 +544,12 @@ AUTOMAKE_run ()
 # does not exit with STATUS.
 AUTOMAKE_fails ()
 {
-  AUTOMAKE_run 1 ${1+"$@"}
+  # This case distinction is required to work around a ksh bug.
+  # See automake bug#10898.
+  case $# in
+    0) AUTOMAKE_run 1;;
+    *) AUTOMAKE_run 1 "$@";;
+  esac
 }
 
 commented_sed_unindent_prog='
-- 
1.7.9