Ben Walton wrote: > I updated my gnulib git repo tonight before patching it into some > source and discovered that gnulib-tool was broken by commit 5b1da95 (I > bisected). I've verified this breakage on Solaris 8 - 10. > > bwalton @ build8x : ~/gnulib > $ ./gnulib-tool --help > ./gnulib-tool[814]: syntax error at line 816 : `(' unexpected
Thanks for the report. On this platform, gnulib-tool reexecs through /bin/ksh. A minimal test case is this: $ cat foo.sh alias echo='print -r' case "$BASH_VERSION" in 3.2*) echo () { printf '%s\n' "$*" } ;; esac $ /bin/ksh foo.sh foo.sh[2]: syntax error at line 4 : `(' unexpected I'm applying this fix: 2010-02-25 Bruno Haible <br...@clisp.org> Fix breakage of gnulib-tool with ksh, introduced on 2010-02-21. * gnulib-tool: Define 'echo' as a function only before the ksh alias setting, not afterwards. Reported by Ben Walton <bwal...@artsci.utoronto.ca>. --- gnulib-tool.orig Thu Feb 25 12:10:40 2010 +++ gnulib-tool Thu Feb 25 12:08:00 2010 @@ -727,7 +727,10 @@ # For bash >= 2.0: define echo to a function that uses the printf built-in. # For bash < 2.0: define echo to a function that uses cat of a here document. # (There is no win in using 'printf' over 'cat' if it is not a shell built-in.) -if test -z "$have_echo" \ +# Also handle problem 2, specific to bash 3.2, here. +if { test -z "$have_echo" \ + || case "$BASH_VERSION" in 3.2*) true;; *) false;; esac; \ + } \ && test -n "$BASH_VERSION"; then \ if type printf 2>/dev/null | grep / > /dev/null; then # 'printf' is not a shell built-in. @@ -810,15 +813,6 @@ exec /bin/sh "$0" --no-reexec "$@" exit 127 fi -# Now handle problem 2, specific to bash 3.2. -case "$BASH_VERSION" in - 3.2*) - echo () - { - printf '%s\n' "$*" - } - ;; -esac if test -z "$have_echo"; then func_fatal_error "Shell does not support 'echo' correctly. Please install GNU bash and set the environment variable CONFIG_SHELL to point to it." fi