#!/bin/sh

# Make sure that we are in the right directory.
if test ! -f configure.ac; then
    cat >&2 <<__EOF__

You must run bootstrap from the root of the distribution.

__EOF__
    exit 1
fi

# Install mesos default commit hook and gitignore template.
if test ! -e .git/hooks/pre-commit; then
  ln -s ../../support/hooks/pre-commit .git/hooks/pre-commit
fi

if test ! -e .gitignore; then
  ln -s .gitignore-template .gitignore
fi

if test ! -e .reviewboardrc; then
  ln -s support/reviewboardrc .reviewboardrc
fi

if [ -n "$AUTOMAKE" ] || [ -n "$ACLOCAL" ] ; then
    if [ -z "$ACLOCAL" ] || [ -z "$AUTOMAKE" ] ; then
        _present="AUTOMAKE"
        _missing="ACLOCAL"

        [ -n "$ACLOCAL" ] && _present="ACLOCAL" && _missing="AUTOMAKE"

        cat >&2 <<__EOF__

[ERROR]: You are providing the path to ${_present}
through your environment but no reference to ${_missing}.
To fix this error please specify ${_missing} too.

As an example, if you are using automake-1.12 and have
available aclocal-1.12 you will want to do the following:

    AUTOMAKE="/usr/local/bin/automake-1.12" \\
    ACLOCAL="/usr/local/bin/aclocal-1.12"   \\
    ./bootstrap

Your current environment has:
    AUTOMAKE="$AUTOMAKE"
    ACLOCAL="$ACLOCAL"

__EOF__
        exit 1
    fi
else
    AUTOMAKE="$(which automake)"
fi


# Note that we don't use '--no-recursive' because older versions of
# autoconf/autoreconf bail with that option. Unfortunately this means
# that we'll modify a lot of files in 3rdparty/libprocess, but that
# may change in the future.

autoreconf --install -Wall --verbose "${@}"
