#!/bin/sh

usage() {
  echo >&2 "\
Usage: $0 [OPTION]...
Bootstrap this package from the checked-out sources.

Options:
 --gnulib-srcdir=DIRNAME  specify the local directory where gnulib
                          sources reside.  Use this if you already
                          have gnulib sources on your machine, and
                          do not want to waste your bandwidth downloading
                          them again.  Defaults to \$GNULIB_SRCDIR
"
}

for option
do
  case $option in
  --help)
    usage
    exit;;
  --gnulib-srcdir=*)
    GNULIB_SRCDIR=${option#--gnulib-srcdir=};;
  *)
    echo >&2 "$0: $option: unknown option"
    exit 1;;
  esac
done

cleanup_gnulib() {
  status=$?
  rm -fr "$gnulib_path"
  exit $status
}

git_modules_config () {
  test -f .gitmodules && git config --file .gitmodules "$@"
}

gnulib_path=$(git_modules_config submodule.gnulib.path)
test -z "$gnulib_path" && gnulib_path=gnulib

# Get gnulib files.  Populate $GNULIB_SRCDIR, possibly updating a
# submodule, for use in the rest of the script.

case ${GNULIB_SRCDIR--} in
-)
  if git_modules_config submodule.gnulib.url >/dev/null; then
    echo "$0: getting gnulib files..."
    git submodule init -- "$gnulib_path" || exit $?
    git submodule update -- "$gnulib_path" || exit $?

  elif [ ! -d "$gnulib_path" ]; then
    echo "$0: getting gnulib files..."

    trap cleanup_gnulib 1 2 13 15

    shallow=
    git clone -h 2>&1 | grep -- --depth > /dev/null && shallow='--depth 2'
    git clone $shallow git://git.sv.gnu.org/gnulib "$gnulib_path" ||
      cleanup_gnulib

    trap - 1 2 13 15
  fi
  GNULIB_SRCDIR=$gnulib_path
  ;;
*)
  # Use GNULIB_SRCDIR directly or as a reference.
  if test -d "$GNULIB_SRCDIR"/.git && \
        git_modules_config submodule.gnulib.url >/dev/null; then
    echo "$0: getting gnulib files..."
    if git submodule -h|grep -- --reference > /dev/null; then
      # Prefer the one-liner available in git 1.6.4 or newer.
      git submodule update --init --reference "$GNULIB_SRCDIR" \
        "$gnulib_path" || exit $?
    else
      # This fallback allows at least git 1.5.5.
      if test -f "$gnulib_path"/gnulib-tool; then
        # Since file already exists, assume submodule init already complete.
        git submodule update -- "$gnulib_path" || exit $?
      else
        # Older git can't clone into an empty directory.
        rmdir "$gnulib_path" 2>/dev/null
        git clone --reference "$GNULIB_SRCDIR" \
          "$(git_modules_config submodule.gnulib.url)" "$gnulib_path" \
          && git submodule init -- "$gnulib_path" \
          && git submodule update -- "$gnulib_path" \
          || exit $?
      fi
    fi
    GNULIB_SRCDIR=$gnulib_path
  fi
  ;;
esac

# Autoreconf runs aclocal before libtoolize, which causes spurious
# warnings if the initial aclocal is confused by the libtoolized
# (or worse out-of-date) macro directory.
libtoolize --copy --install

gnulib_tool=$GNULIB_SRCDIR/gnulib-tool
<$gnulib_tool || exit

modules='
c-ctype
getprogname
hash
ignore-value
lock
maintainer-makefile
manywarnings
sys_types
tls
xstrtol
'

# If any tests fail, avoid including them by adding them to
# this list.
avoid=""

$gnulib_tool			\
  $avoid			\
  --with-tests			\
  --m4-base=m4			\
  --source-base=gnulib/lib	\
  --tests-base=gnulib/tests	\
  --libtool			\
  --import $modules

# Disable autopoint and libtoolize, since they were already done above.
AUTOPOINT=true LIBTOOLIZE=true autoreconf --verbose --install
