#!/bin/sh

VERSION=$(cat .version)
DATE=$(date +%Y%m%d)

PREFIX_DEFAULT=/usr/local

BINDIR_set=
LIBDIR_set=
DOCDIR_set=
MANDIR_set=
LOCAL_set=

get_optval(){
    local ret
    case "$1" in
        --*=?*)
            echo "${1}" |cut -d '=' -f 2-
            ret=0
            ;;
        *)
            echo "${2}"
            ret=1
            ;;
    esac
    return ${ret}
}

set_prefix() {
    PREFIX=$(get_optval "$1" "$2")
    return $?
}

set_bindir() {
    BINDIR_set=1
    BINDIR=$(get_optval "$1" "$2")
    return $?
}

set_libdir() {
    LIBDIR_set=1
    LIBDIR=$(get_optval "$1" "$2")
    return $?
}

set_docdir() {
    DOCDIR_set=1
    DOCDIR=$(get_optval "$1" "$2")
    return $?
}

set_mandir() {
    MANDIR_set=1
    MANDIR=$(get_optval "$1" "$2")
    return $?
}

do_help() {
    cat <<__EOF__
\`configure' configures crosstool-NG ${VERSION} to adapt to many kind of systems.

USAGE: ./configure [OPTION]...

Defaults for the options are specified in brackets.

Configuration:
  -h, --help              display this help and exit                                                                                                                  
  --prefix=PREFIX         install files in PREFIX [${PREFIX_DEFAULT}]
  --local                 don't install, and use current directory

By default, \`make install' will install all the files in
\`${PREFIX_DEFAULT}/bin', \`${PREFIX_DEFAULT}/lib' etc.  You can specify
an installation prefix other than \`${PREFIX_DEFAULT}' using \`--prefix',
for instance \`--prefix=\${HOME}'.

For better control, use the options below.

Fine tuning of the installation directories:
  --bindir=DIR           user executables [PREFIX/bin]
  --libdir=DIR           object code libraries [PREFIX/lib]
  --docdir=DIR           info documentation [PREFIX/share/doc]
  --mandir=DIR           man documentation [PREFIX/share/man]
__EOF__
}

do_error() {
    echo "[ERROR] ${@}"
    exit 1
}

#---------------------------------------------------------------------
# Set user's options

while [ $# -ne 0 ]; do
    case "$1" in
        --prefix*)  set_prefix "$1" "$2" && shift || shift 2;;
        --bindir*)  set_bindir "$1" "$2" && shift || shift 2;;
        --libdir*)  set_libdir "$1" "$2" && shift || shift 2;;
        --docdir*)  set_docdir "$1" "$2" && shift || shift 2;;
        --mandir*)  set_mandir "$1" "$2" && shift || shift 2;;
        --local)    LOCAL_set=1; shift;;
        --help|-h)  do_help; exit 0;;
        *)          do_help; exit 1;;
    esac
done

[ -z "${PREFIX}" ] && set_prefix "" "${PREFIX_DEFAULT}"
if [ "${LOCAL_set}" = "1" ]; then
    set_prefix "" $(pwd)
    set_bindir "" $(pwd)
    set_libdir "" $(pwd)
    set_docdir "" $(pwd)/docs
    set_mandir "" $(pwd)/docs
fi

[ -z "${BINDIR_set}" ] && BINDIR="${PREFIX}/bin"
[ -z "${LIBDIR_set}" ] && LIBDIR="${PREFIX}/lib/ct-ng-${VERSION}"
[ -z "${DOCDIR_set}" ] && DOCDIR="${PREFIX}/share/doc/ct-ng-${VERSION}"
[ -z "${MANDIR_set}" ] && MANDIR="${PREFIX}/share/man/man1"

#---------------------------------------------------------------------
# Some sanity checks, now

# If this version is a svn snapshot, try to get the revision number
# If we can't get the revision number, use date
case "${VERSION}" in
  *+svn)
    REVISION=$(svnversion)
    case "${REVISION}" in
      exported)
        VERSION="${VERSION}:unknown@$(date +%Y%m%d.%H%M%S)";;
      *)
        URL=$(LANG=C svn info 2>/dev/null |egrep 'URL: ' |cut -d ' ' -f 2-)
        ROOT=$(LANG=C svn info 2>/dev/null |egrep 'Repository Root: ' |cut -d ' ' -f 3-)
        VERSION="${VERSION}:${URL#${ROOT}}@${REVISION}"
        ;;
    esac
    ;;
esac

# Check bash is present, and at least version 3.0
[ -x /bin/bash ] || do_error "bash 3.0 or above was not found in /bin/bash"
bash_version=$(/bin/bash -c 'echo ${BASH_VERSION}')
bash_major=$(/bin/bash -c 'echo ${BASH_VERSINFO[0]}')
[ ${bash_major} -ge 3 ] || do_error "bash 3.0 or above is needed (/bin/bash is ${bash_version})"

sed -r -e "s,@@BINDIR@@,${BINDIR},g;"   \
       -e "s,@@LIBDIR@@,${LIBDIR},g;"   \
       -e "s,@@DOCDIR@@,${DOCDIR},g;"   \
       -e "s,@@MANDIR@@,${MANDIR},g;"   \
       -e "s,@@VERSION@@,${VERSION},g;" \
       -e "s,@@DATE@@,${DATE},g;"       \
       -e "s,@@LOCAL@@,${LOCAL_set},g;" \
       Makefile.in >Makefile

cat <<__EOF__
crosstool-NG configured as follows:
  PREFIX="${PREFIX}"
  BINDIR="${BINDIR}"
  LIBDIR="${LIBDIR}"
  DOCDIR="${DOCDIR}"
  MANDIR="${MANDIR}"
__EOF__