Subject: libtool bootstrap fails with Solaris /bin/sh

From: Bob Friesenhahn <[email-masked]>
Date: Sun, 23 Oct 2011 11:19:06 -0500 (CDT)

I notice that the new libtool bootstrap script immediately fails under 
Solaris 10 with the default /bin/sh but does not immediately blow up 
with /usr/xpg4/bin/sh or bash (3.2.51).

Here is the failing output from /bin/sh -x ./bootstrap:

scriptversion=2011-10-22.09
+ : aclocal 
+ : autoconf 
+ : autoheader 
+ : autom4te 
+ : autoheader 
+ : automake 
+ : autopoint 
+ : autoreconf 
+ : cmp 
+ : /bin/sh 
+ : diff 
+ : grep -E 
+ : grep -F 
+ : git 
+ : grep 
+ : ln -s 
+ : rm 
+ : sed 
+ export ACLOCAL 
+ export AUTOCONF 
+ export AUTOHEADER 
+ export AUTOM4TE 
+ export AUTOHEADER 
+ export AUTOMAKE 
+ export AUTOPOINT 
+ export AUTORECONF 
+ export CONFIG_SHELL 
usage_message=Bootstrap this package from the checked-out sources.

Common Bootstrap Options:
   -c, --copy         copy files instead of creating symbolic links.
       --debug        enable verbose shell tracing
   -n, --dry-run      print commands rather than running them
   -f, --force        attempt to bootstrap even if the sources seem not to have
                      been checked out.
       --gnulib-srcdir=DIRNAME
                      specify a local directory where gnulib sources reside.
                      Use this if you already have the gnulib sources on your
                      machine, and don't want to waste your bandwidth
                      downloading them again.  Defaults to $GNULIB_SRCDIR.
       --skip-git     do not fetch files from remote repositories
       --skip-po      do not download po files.
   -v, --verbose      verbosely report processing
       --version      print version information and exit
   -W, --warnings=CATEGORY
                      report the warnings falling in CATEGORY [all]
   -h, --help         print short or long help message and exit

warning_categories=recommend settings upgrade
long_help_message=
Warning categories include:
   `all'           show all warnings
   `none'          turn off all the warnings
   `error'         warnings are treated as fatal errors
   `recommend'     show warnings about missing recommended packages
   `settings'      show warnings about missing `bootstrap.conf' settings
   `upgrade'       show warnings about out-dated files

If the file .conf exists in the same directory as this script, its
contents are read as shell variables to configure the bootstrap.

For build prerequisites, environment variables like $AUTOCONF and $AMTAR
are honored.

Running without arguments will suffice in most cases.

buildreq=
buildreq_readme=README-hacking
build_aux=
macro_dir=
package=
package_name=
package_version=
package_bugreport=
doc_base=
gnulib_mk=
gnulib_name=
local_gl_dir=
source_base=
tests_base=
gnulib_modules=
gnulib_non_module_files=
         build-aux/compile
         build-aux/install-sh
         build-aux/missing
         build-aux/mdate-sh
         build-aux/texinfo.tex
         build-aux/depcomp
         build-aux/config.guess
         build-aux/config.sub
         doc/INSTALL

gnulib_path=
gnulib_url=
gnulib_tool_options=
         --no-changelog

gnulib_precious=
         gnulib-tool.m4

min_cmd_len=160
po_download_command_format=rsync --delete --exclude '*.s1' -Lrtvz 'translationproject.org::tp/latest/%s/' '%s'
extra_locale_categories=
xgettext_options=
         --flag=_:1:pass-c-format
         --flag=N_:1:pass-c-format

copyright_holder=
checkout_only_file=
copy=false
vc_ignore=
DUALCASE=1
+ export DUALCASE 
+ test -n 
LANGUAGE=C
+ export LANGUAGE 
LC_ALL=C
+ export LC_ALL 
+ unset CDPATH 
+ func_hookable func_init 
+ func_append hookable_funcs  func_init 
+ eval hookable_funcs=$hookable_funcs$2 
hookable_funcs= func_init
+ func_hookable func_options 
+ func_append hookable_funcs  func_options 
+ eval hookable_funcs=$hookable_funcs$2 
hookable_funcs= func_init func_options
+ func_hookable func_options_prep 
+ func_append hookable_funcs  func_options_prep 
+ eval hookable_funcs=$hookable_funcs$2 
hookable_funcs= func_init func_options func_options_prep
+ func_hookable func_parse_options 
+ func_append hookable_funcs  func_parse_options 
+ eval hookable_funcs=$hookable_funcs$2 
hookable_funcs= func_init func_options func_options_prep func_parse_options
+ func_hookable func_validate_options 
+ func_append hookable_funcs  func_validate_options 
+ eval hookable_funcs=$hookable_funcs$2 
hookable_funcs= func_init func_options func_options_prep func_parse_options func_validate_options
+ func_hookable func_prep 
+ func_append hookable_funcs  func_prep 
+ eval hookable_funcs=$hookable_funcs$2 
hookable_funcs= func_init func_options func_options_prep func_parse_options func_validate_options func_prep
+ func_hookable func_update_translations 
+ func_append hookable_funcs  func_update_translations 
+ eval hookable_funcs=$hookable_funcs$2 
hookable_funcs= func_init func_options func_options_prep func_parse_options func_validate_options func_prep func_update_translations
+ func_hookable func_reconfigure 
+ func_append hookable_funcs  func_reconfigure 
+ eval hookable_funcs=$hookable_funcs$2 
hookable_funcs= func_init func_options func_options_prep func_parse_options func_validate_options func_prep func_update_translations func_reconfigure
+ func_hookable func_gnulib_tool 
+ func_append hookable_funcs  func_gnulib_tool 
+ eval hookable_funcs=$hookable_funcs$2 
hookable_funcs= func_init func_options func_options_prep func_parse_options func_validate_options func_prep func_update_translations func_reconfigure func_gnulib_tool
+ func_hookable func_fini 
+ func_append hookable_funcs  func_fini 
+ eval hookable_funcs=$hookable_funcs$2 
hookable_funcs= func_init func_options func_options_prep func_parse_options func_validate_options func_prep func_update_translations func_reconfigure func_gnulib_tool func_fini
+ func_hookable func_gettext_configuration 
+ func_append hookable_funcs  func_gettext_configuration 
+ eval hookable_funcs=$hookable_funcs$2 
hookable_funcs= func_init func_options func_options_prep func_parse_options func_validate_options func_prep func_update_translations func_reconfigure func_gnulib_tool func_fini func_gettext_configuration
require_checkout_only_file=func_require_checkout_only_file
require_aclocal_amflags=func_require_aclocal_amflags
require_autobuild_buildreq=func_require_autobuild_buildreq
b=autoconf
v=require_autoconf_buildreq
f=func_require_autoconf_buildreq
m=AC_PREREQ
+ eval require_autoconf_buildreq=func_require_autoconf_buildreq
   func_require_autoconf_buildreq ()
   {
     $debug_cmd

     # The following is ignored if undefined, but might be necessary
     # in order for `func_find_tool` to run.
     ${require_autoconf-:}

     printf %sn "$buildreq" |func_grep_q '^[	 ]*autoconf' || {
       $require_configure_ac

       func_extract_trace AC_PREREQ
       my_version="$func_extract_trace_result"
       test -n "$my_version" && {
         func_append buildreq "\
             autoconf $my_version http://www.gnu.org/s/autoconf
"
         func_verbose \
             "auto-adding \`autoconf-$my_version' to build requirements"
       }
     }

     require_autoconf_buildreq=:
   }

require_autoconf_buildreq=func_require_autoconf_buildreq
b=libtoolize
v=require_libtoolize_buildreq
f=func_require_libtoolize_buildreq
m=LT_PREREQ
b=libtool
+ eval require_libtoolize_buildreq=func_require_libtoolize_buildreq
   func_require_libtoolize_buildreq ()
   {
     $debug_cmd

     # The following is ignored if undefined, but might be necessary
     # in order for `func_find_tool` to run.
     ${require_libtoolize-:}

     printf %sn "$buildreq" |func_grep_q '^[	 ]*libtoolize' || {
       $require_configure_ac

       func_extract_trace LT_PREREQ
       my_version="$func_extract_trace_result"
       test -n "$my_version" && {
         func_append buildreq "\
             libtoolize $my_version http://www.gnu.org/s/libtool
"
         func_verbose \
             "auto-adding \`libtoolize-$my_version' to build requirements"
       }
     }

     require_libtoolize_buildreq=:
   }

require_libtoolize_buildreq=func_require_libtoolize_buildreq
b=autopoint
v=require_autopoint_buildreq
f=func_require_autopoint_buildreq
b=gettext m=AM_GNU_GETTEXT_VERSION
+ eval require_autopoint_buildreq=func_require_autopoint_buildreq
   func_require_autopoint_buildreq ()
   {
     $debug_cmd

     # The following is ignored if undefined, but might be necessary
     # in order for `func_find_tool` to run.
     ${require_autopoint-:}

     printf %sn "$buildreq" |func_grep_q '^[	 ]*autopoint' || {
       $require_configure_ac

       func_extract_trace AM_GNU_GETTEXT_VERSION
       my_version="$func_extract_trace_result"
       test -n "$my_version" && {
         func_append buildreq "\
             autopoint $my_version http://www.gnu.org/s/gettext
"
         func_verbose \
             "auto-adding \`autopoint-$my_version' to build requirements"
       }
     }

     require_autopoint_buildreq=:
   }

require_autopoint_buildreq=func_require_autopoint_buildreq
require_autoheader=func_require_autoheader
require_automake_buildreq=func_require_automake_buildreq
require_autopoint=func_require_autopoint
require_bootstrap_uptodate=func_require_bootstrap_uptodate
require_build_aux=func_require_build_aux
require_buildtools_uptodate=func_require_buildtools_uptodate
require_configure_ac=func_require_configure_ac
require_copyright_holder=func_require_copyright_holder
require_dotgitmodules=func_require_dotgitmodules
require_extra_locale_categories=func_require_extra_locale_categories
require_git=func_require_git
require_gnu_m4=func_require_gnu_m4
require_gnulib_cache=func_require_gnulib_cache
require_gnulib_files_already_present=func_require_gnulib_files_already_present
require_gnulib_merge_changelog=func_require_gnulib_merge_changelog
require_gnulib_mk=func_require_gnulib_mk
require_gnulib_path=func_require_dotgitmodules_parameters
require_gnulib_url=func_require_dotgitmodules_parameters
require_gnulib_submodule=func_require_gnulib_submodule
require_gnulib_tool=func_require_gnulib_tool
require_libtoolize=func_require_libtoolize
require_macro_dir=func_require_macro_dir
require_makefile_am=func_require_makefile_am
require_package=func_require_package
require_package_bugreport=func_require_package_bugreport
require_package_name=func_require_package_name
require_package_version=func_require_package_version
require_source_base=func_require_source_base
require_vc_ignore_files=func_require_vc_ignore_files
unset=func_unset
bold_on=
bold_off=
+ test -t 1 
fatal_help=Try ` --help' for more information.
sed_quote_subst=s|\([`"$\\]\)|\\\1|g
EXIT_SUCCESS=0
EXIT_FAILURE=1
EXIT_MISMATCH=63
EXIT_SKIP=77
exit_status=0
debug_cmd=:
exit_cmd=:
dirname=s|/[^/]*$||
basename=s|^.*/||
nl=

progpath=./bootstrap
+ sed s|^.*/|| 
+ echo ./bootstrap 
progname=bootstrap
+ test -r ./bootstrap.conf 
+ . ./bootstrap.conf 
+ : make 
+ export MAKE 
buildreq=
         help2man   1.29        http://www.gnu.org/software/help2man
         makeinfo   4.8         http://www.gnu.org/software/texinfo
         xz         4.999.8beta http://tukaani.org/xz

buildreq_readme=HACKING
local_gl_dir=gl
gnulib_tool_options=
         --no-changelog

         --avoid=dummy
         --libtool
         --macro-prefix=GL

gnulib_modules=
         maintainer-makefile

gnulib_non_module_files=
         build-aux/compile
         build-aux/install-sh
         build-aux/missing
         build-aux/mdate-sh
         build-aux/texinfo.tex
         build-aux/depcomp
         build-aux/config.guess
         build-aux/config.sub
         doc/INSTALL

         doc/COPYINGv2
         doc/fdl.texi

vc_ignore=.gitignore
LIBTOOLIZE=true
libtool_obsolete_files=
         acinclude.m4
         argz.c
         libltdl/config.h
         lt__dirent.c
         lt__strl.c

require_bootstrap_uptodate=:
+ func_add_hook func_options_prep libtool_options_prep 
+ : 
+ eval func_append func_options_prep_hooks " $2" 
+ func_append func_options_prep_hooks  libtool_options_prep 
+ : 
+ eval func_options_prep_hooks=$func_options_prep_hooks$2 
func_options_prep_hooks= libtool_options_prep
+ func_add_hook func_parse_options libtool_parse_options 
+ : 
+ eval func_append func_parse_options_hooks " $2" 
+ func_append func_parse_options_hooks  libtool_parse_options 
+ : 
+ eval func_parse_options_hooks=$func_parse_options_hooks$2 
func_parse_options_hooks= libtool_parse_options
+ func_add_hook func_validate_options libtool_validate_options 
+ : 
+ eval func_append func_validate_options_hooks " $2" 
+ func_append func_validate_options_hooks  libtool_validate_options 
+ : 
+ eval func_validate_options_hooks=$func_validate_options_hooks$2 
func_validate_options_hooks= libtool_validate_options
+ func_add_hook func_prep libtool_prep 
+ : 
+ eval func_append func_prep_hooks " $2" 
+ func_append func_prep_hooks  libtool_prep 
+ : 
+ eval func_prep_hooks=$func_prep_hooks$2 
func_prep_hooks= libtool_prep
+ func_add_hook func_prep libtool_build_prerequisites 
+ : 
+ eval func_append func_prep_hooks " $2" 
+ func_append func_prep_hooks  libtool_build_prerequisites 
+ : 
+ eval func_prep_hooks=$func_prep_hooks$2 
func_prep_hooks= libtool_prep libtool_build_prerequisites
+ func_add_hook func_gnulib_tool libtool_add_libltdl_copying 
+ : 
+ eval func_append func_gnulib_tool_hooks " $2" 
+ func_append func_gnulib_tool_hooks  libtool_add_libltdl_copying 
+ : 
+ eval func_gnulib_tool_hooks=$func_gnulib_tool_hooks$2 
func_gnulib_tool_hooks= libtool_add_libltdl_copying
+ func_add_hook func_fini libtool_fudge_timestamps 
+ : 
+ eval func_append func_fini_hooks " $2" 
+ func_append func_fini_hooks  libtool_fudge_timestamps 
+ : 
+ eval func_fini_hooks=$func_fini_hooks$2 
func_fini_hooks= libtool_fudge_timestamps
+ func_add_hook func_fini libtool_cleanup 
+ : 
+ eval func_append func_fini_hooks " $2" 
+ func_append func_fini_hooks  libtool_cleanup 
+ : 
+ eval func_fini_hooks=$func_fini_hooks$2 
func_fini_hooks= libtool_fudge_timestamps libtool_cleanup
+ func_add_hook func_fini libtool_check_for_bogus_macros 
+ : 
+ eval func_append func_fini_hooks " $2" 
+ func_append func_fini_hooks  libtool_check_for_bogus_macros 
+ : 
+ eval func_fini_hooks=$func_fini_hooks$2 
func_fini_hooks= libtool_fudge_timestamps libtool_cleanup libtool_check_for_bogus_macros
+ func_add_hook func_fini libtool_cleanup_empty_dirs 
+ : 
+ eval func_append func_fini_hooks " $2" 
+ func_append func_fini_hooks  libtool_cleanup_empty_dirs 
+ : 
+ eval func_fini_hooks=$func_fini_hooks$2 
func_fini_hooks= libtool_fudge_timestamps libtool_cleanup libtool_check_for_bogus_macros libtool_cleanup_empty_dirs
require_package_url=libtool_require_package_url
+ func_bootstrap 
+ : 
+ func_quote_for_eval 
+ : 
func_quote_for_eval_result=
+ test 0 -gt 0 
my_saved_positional_parameters=
+ func_init 
+ : 
+ func_run_hooks func_init 
+ : 
+ eval hook_funcs=$func_init_hooks 
hook_funcs=
+ shift 
func_run_hooks_result=
+ eval func_options 
+ func_options 
+ : 
+ func_options_prep 
+ : 
warning_func=func_error
opt_copy=false
opt_dry_run=false
opt_force=false
opt_gnulib_srcdir=
opt_skip_git=false
opt_skip_po=false
opt_warning=
opt_verbose=false
+ func_run_hooks func_options_prep 
+ : 
+ eval hook_funcs=$func_options_prep_hooks 
hook_funcs= libtool_options_prep
+ shift 
func_run_hooks_result=
+ eval libtool_options_prep "$@" 
+ libtool_options_prep 
+ : 
usage_message=Bootstrap this package from the checked-out sources.

Common Bootstrap Options:
   -c, --copy         copy files instead of creating symbolic links.
       --debug        enable verbose shell tracing
   -n, --dry-run      print commands rather than running them
   -f, --force        attempt to bootstrap even if the sources seem not to have
                      been checked out.
       --gnulib-srcdir=DIRNAME
                      specify a local directory where gnulib sources reside.
                      Use this if you already have the gnulib sources on your
                      machine, and don't want to waste your bandwidth
                      downloading them again.  Defaults to $GNULIB_SRCDIR.
       --skip-git     do not fetch files from remote repositories
       --skip-po      do not download po files.
   -v, --verbose      verbosely report processing
       --version      print version information and exit
   -W, --warnings=CATEGORY
                      report the warnings falling in CATEGORY [all]
   -h, --help         print short or long help message and exit

Libtool Specific Options:
   -r, --reconf-dirs=DIR1,DIR2,...
                           limit the directories to be bootstrapped to
                           the comma-delimited list of DIR1,DIR2,...

+ test -n 
+ ls -1d tests/cdemo tests/demo tests/depdemo tests/f77demo tests/fcdemo tests/mdemo tests/pdemo tests/tagdemo tests/mdemo2 
reconfdirs=. libltdl tests/cdemo
tests/demo
tests/depdemo
tests/f77demo
tests/fcdemo
tests/mdemo
tests/mdemo2
tests/pdemo
tests/tagdemo
+ func_quote_for_eval 
+ : 
func_quote_for_eval_result=
+ test 0 -gt 0 
func_run_hooks_result=
+ set dummy 
+ shift 
func_options_prep_result=
+ eval func_parse_options 
+ func_parse_options 
+ : 
func_parse_options_result=
+ test 0 -gt 0 
+ func_quote_for_eval 
+ : 
func_quote_for_eval_result=
+ test 0 -gt 0 
func_parse_options_result=
./bootstrap: bad substitution

-- 
Bob Friesenhahn
[email-masked], http://www.simplesystems.org/users/bfriesen/
GraphicsMagick Maintainer,    http://www.GraphicsMagick.org/