#!/bin/sh
#   $Source: /var/local/cvs/gasnet/Bootstrap,v $
#     $Date: 2006/08/19 00:03:19 $
# $Revision: 1.20 $
# Description: GASNet developer Bootstrap script
# Copyright 2004,  Dan Bonachea <bonachea@cs.berkeley.edu>
# Terms of use are as specified in license.txt

set -e

srcdir=`dirname $0`

TIME=
CONFIRM=0
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 " -y  force a Bootstrap, even if it looks unnecessary"
    	echo " -n  no checks for autotool presence and versions"
	exit 1
    	;;
    -v) autofilter=cat ;;
    -y) CONFIRM=1 ;;
    y) CONFIRM=1 ;; # legacy
    -n) NOTOOLCHECK=1 ;;
    n) NOTOOLCHECK=1 ;; # legacy
    -p) ;; # used by Titanium Bootstrap - ignore
    -P) ;; # used by Titanium Bootstrap - ignore
    -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 [ \
       -r $srcdir/gasnet_config.h.in \
    -a -r $srcdir/Makefile.in \
    -a -r $srcdir/aclocal.m4 \
    -a -r $srcdir/configure \
    -a "$CONFIRM" != "1" \
    ]; then
    echo 'The "Bootstrap" script need only be used on a'
    echo 'completely clean, fresh source tree.  After the'
    echo 'first build, you should just use "make" or "gmake".'
    echo
    echo 'It looks as though you have already bootstrapped'
    echo 'this source tree.  You should only bootstrap it'
    echo 'again if the makefiles or configuration files are'
    echo 'broken and "make" or "gmake" do not work properly.'
    echo
    echo 'Are you sure you want to re-bootstrap this tree?'
    echo

    case `echo -n` in
      '')  n='-n' c='' ;;
      *)   n=''   c='\c' ;;
    esac

    echo $n "[y/n]: $c"
    read redo

    case $redo in
      y* ) ;;
      *  ) exit 1;
    esac
fi

if test "$NOTOOLCHECK" != "1" ; then
missing=
for autotool in autoconf autoheader automake aclocal m4 ; do
  info=`( $autotool --version 2>/dev/null || echo 'Not found' ) | head -1`
  if test "$info" != "Not found" ; then
    info="$info, in `which $autotool`"
  elif "$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/gasnet_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 -x
    cd $srcdir
    rm -Rf autom4te*.cache
set +x

    CMD="aclocal -I other/plpa/config" ; 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
    CMD="automake -a" ; eval $DOIT
    set -x

    rm -Rf autom4te*.cache
    rm -f config.cache
