#!/bin/sh

# This is more portable than `which' but comes with
# the caveat of not(?) properly working on busybox's ash:
have_command()
{
    command -v "$1" >/dev/null 2>&1
}

unset bs_srcdir
if test X"`dirname / 2>/dev/null`" = X"/"; then
  bs_scrdir=`dirname $0`
else
  case $0 in
    */*) bs_scrdir=`echo $0 | ${SED-sed} -n -e 's|/.*$||p'` ;;
    *) bs_scrdir='.' ;;
  esac
fi

test -n "$bs_scrdir" && cd "$bs_scrdir" || echo "Warning: cannot detect sources directory" 1>&2

if test ! -f './configure.ac'; then
  echo "Error: no 'configure.ac' found. Wrong sources directory?" 1>&2
  exit 2
fi
if test ! -f './src/include/microhttpd.h'; then
  echo "Error: src/include/libmicrohttpd.h not found. Wrong sources directory?" 1>&2
  exit 2
fi

if have_command uncrustify; then
    if test -f uncrustify.cfg; then
      echo "Uncrustify configuration already exists, skipping installation from the upstream file."
    else
      echo "Installing configuration"
      ln -s contrib/uncrustify.cfg uncrustify.cfg
    fi
    if test -d '.git'; then
      if test -f .git/hooks/pre-commit; then
        echo "Pre-commit git hook already exists, skipping installation from the upstream file."
      else
        echo "Installing uncrustify pre-commit git hook"
        ln -s ../../contrib/uncrustify_precommit .git/hooks/pre-commit
      fi
    else
      echo "No '.git' directory found, skipping installation of pre-commit git hook."
    fi
else
    echo "Uncrustify not detected, hook not installed. Please install uncrustify if you plan on doing development."
fi

if have_command libtool || have_command libtoolize || have_command glibtoolize || have_command slibtool; then
    echo "Running autotools..."
    have_command libtoolize && \
      aclocal -I m4 --install && \
      libtoolize -c -i -v && \
      autoconf && \
      autoheader && \
      automake -a -c --gnu
    if test $? -ne 0 || ! test -x configure || ! test -f Makefile.in ; then
        echo "Trying with autoreconf..."
        if ! autoreconf -i ${1+"$@"} ; then
            echo "Failed to autoreconf, retrying with force install..."
            if ! autoreconf -i -f ${1+"$@"} ; then
                echo "*** Failed to create 'configure' and other autotools generated files. ***" >&2
                exit 1
            fi
        fi
    fi
    echo "The ${bs_scrdir-.}/configure is ready to run."
else
    echo "*** No libtoolize or libtool found, please install it ***" >&2;
    exit 1
fi
