#!/bin/sh

########################################################################
# bootstrap script for UPC runtime autoconf/automake framework
#
# Assumes you wish to store autoconf temp files in a 'config-aux'
# subdirectory:  make sure you add 
#
#   AC_CONFIG_AUX_DIR(config-aux)
#
# to your configure.in files (or nothing works), and 
#
#   EXTRA_DIST      = $(top_builddir)/config-aux
#
# to your Makefile.am (or 'make dist' won't work).
#
########################################################################

TIME=
NOTOOLCHECK=0
autofilter="perl -0 -pe 's/^(autoheader.*?: )?WARN.+auxiliary files(.|\n)+WARN.+documentation.\n//m' \
	  	 | perl -pe 's/^.*?AC_PROG_LEX invoked multiple times.*?\n?$//g' \
	  	 | perl -0 -pe 's/^((.*?AC_CONFIG_SUBDIRS.*?\n)+([^ ]* the top level\n)?)*//g'"

for arg in "$@"; do
  case "$arg" in
    -h) echo "Usage: $0 [options]"
        echo " -v  verbose mode: don't filter benign warnings from autotool output"
        echo " -t  time autotool commands"
        echo " -n  no checks for autotool presence and versions"
	exit 1
        ;;
    -v) autofilter=cat ;;
    -n) NOTOOLCHECK=1 ;;
    -t) TIME='/usr/bin/time'
        if test ! -x "$TIME" ; then
          TIME=
        fi
        ;;
    *) ;; # ignore unrecognized args
  esac
done
  
DOIT='echo "+ $CMD | \$autofilter" ; ( eval $TIME $CMD 2>&1 || kill $$ ) | eval $autofilter'
# ; if test "$PIPESTATUS" != "" -a "$PIPESTATUS" != "0" ; then exit 1 ; fi'

if test "$NOTOOLCHECK" != "1" ; then
missing=
for autotool in autoconf autoheader automake aclocal libtoolize m4 ; do
  info=`( $autotool --version 2>/dev/null < /dev/null || echo 'Not found' ) | head -1`
  if test "$info" != "Not found" ; then
    info="$info, in `which $autotool`"
  elif test "$autotool" != "libtoolize" -a "$autotool" != "m4" ; then
    missing="$missing$autotool "
  fi
  echo "$autotool:	$info"
done
if test "$missing" != ""; then
  echo "The following GNU autotools are missing from your PATH:"
  echo "   $missing"
  if test -r $srcdir/upcr_config.h.in \
    -a -r $srcdir/Makefile.in \
    -a -r $srcdir/aclocal.m4 \
    -a -r $srcdir/configure ; then
    echo "However, it appears this directory has already been Bootstrapped."
    echo "You should skip Bootstrap and instead do: configure ; gmake"
  else
    echo "Please download them from ftp://ftp.gnu.org/gnu"
  fi
  exit 1
fi
fi

set -e
set -x 

./unBootstrap

# Bootstrap gasnet first to ensure correct timestamps for the m4 macro files we rely upon
echo ------------  running GASNet Bootstrap --------------
( cd gasnet && ./Bootstrap -y -n "$@" || kill $$ )
echo -----------------------------------------------------

set +x

# Only bootstrap Totalview subdirectory if libtool available
# and we're using an aclocal that supports libtool
set +e
if test "`libtoolize --version 2>/dev/null`" != "" -a \
   -f "`aclocal --print-ac-dir 2>/dev/null`/libtool.m4" ; then
    echo ------------  running totalview Bootstrap --------------
    set -e
    cd totalview && ./Bootstrap "$@"
    echo --------------------------------------------------------
    cd ..
else
    echo No libtool support found - totalview support disabled
fi
set -e

CMD="aclocal -I gasnet" ; eval $DOIT
CMD="autoheader" ; eval $DOIT
CMD="autoconf" ; eval $DOIT
set -x

# Perform some postprocessing to fix bugs in the configure script:
# 1) caching:
# Our configure script requires caching, and autoconf 2.5 stupidly disables
# caching by default. Caching may open some dangers of stale values, but
# the alternative is worse - automake reconfiguring in the absence of
# precious environment variables leads to silent incorrect behavior that
# can't be detected or fixed because there's no cache!
# Restore ./config.cache as the default cache
# 2) recursive configure:
# When $top_builddir contains a space, the configure script tries to cd
# back to $top_builddir w/o quoting it.
# Add quotes around the offending command.
mv configure .configure-orig
sed -e 's/^cache_file=\/dev\/null$/cache_file=.\/config.cache/' \
    -e 's/cd $ac_popdir/cd "$ac_popdir"/' \
    .configure-orig > configure
chmod +x configure
rm -f .configure-orig

set +x
# do NOT use automake -i: the meaning of that automake option recently changed 
CMD="automake -a" ; eval $DOIT
set -x

rm -Rf autom4te*.cache

