#!/bin/bash
# $Id: autogen.sh 5054 2008-01-08 15:06:55Z christi $

# barf on errors
set -e

usage () {
    echo "Usage: dune-autogen DUNE_MODULE_PATH_LIST [options]"
    echo "  --ac=, --acversion=VERSION   use a specific VERSION of autoconf"
    echo "  --am=, --amversion=VERSION   use a specific VERSION of automake"
    echo "  -h,    --help                you already found this :-)"
}

## get my name...
grep '^Module:' dune.module >/dev/null || echo "Parser Error: Module entry missing in dune.module"
name=
while read head name rest
do case "$head" in
   Module:) break;;
   Module:*) name="${head#Module:}"; break;;
   esac
   name=
done <dune.module

## dune-all.m4
rm -f dune-all.m4
rm -f $name.m4

# add current dir to PATH
PATH=`dirname $0`:$PATH

# guess libtool prefix
if test -n "$LIBTOOLIZE"; then
    LIBTOOL_prefix=`dirname \`dirname $LIBTOOLIZE\``
    PATH=$LIBTOOL_prefix:$PATH
    ACLOCAL_FLAGS="$ACLOCAL_FLAGS -I $LIBTOOL_prefix/share/aclocal"
fi

for OPT in "$@"; do
    set +e
    # stolen from configure...
    # when no option is set, this returns an error code
    arg=`expr "x$OPT" : 'x[^=]*=\(.*\)'`
    set -e

    case "$OPT" in
	--ac=*|--acversion=*)
			if test "x$arg" = "x"; then
				usage; 
				exit 1;
			fi
			ACVERSION=$arg
			;;
	--am=*|--amversion=*)
			if test "x$arg" = "x"; then
				usage; 
				exit 1;
			fi
			AMVERSION=$arg
			;;
	-h|--help) usage ; exit 0 ;;
	*)
            if test -d "$OPT/m4"; then
              ACLOCAL_FLAGS="$ACLOCAL_FLAGS -I $OPT/m4"
            fi
            if test -f "$OPT/dune-common.pc.in" ; then
#            if test \( -d "$OPT/am" \) -a ! \( -h "$OPT/am" \) ; then
              echo "Found am directory $OPT/am"
              am_dir="$OPT/am"
            fi
            if test -d "$OPT/share/aclocal"; then
              ACLOCAL_FLAGS="$ACLOCAL_FLAGS -I $OPT/share/aclocal"
            fi
            if test -d "$OPT/share/dune-common/am"; then
              echo "Found am directory $OPT/share/dune-common/am"
              am_dir="$OPT/share/dune-common/am"
            fi
			      PATH=$OPT/bin:$PATH
            ;;
    esac
done

## report parameters
if test "x$ACVERSION" != "x"; then
	echo "Forcing autoconf version $ACVERSION"
	if ! which autoconf$ACVERSION > /dev/null; then
		echo
		echo "Error: Could not find autoconf$ACVERSION"
		echo "       Did you specify a wrong version?"
		exit 1
	fi
fi
if test "x$AMVERSION" != "x"; then
	echo "Forcing automake version $AMVERSION"
	if ! which automake$AMVERSION > /dev/null; then
		echo
		echo "Error: Could not find automake$AMVERSION"
		echo "       Did you specify a wrong version?"
		exit 1
	fi
fi

## run autotools

echo "--> dunedoxynize..."
dunedoxynize

echo "--> libtoolize..."
# this script won't rewrite the files if they already exist. This is a
# PITA when you want to upgrade libtool, thus I'm setting --force
if [ x`type -t glibtoolize` = xfile ]; then
  LIBTOOLIZE=glibtoolize
fi
${LIBTOOLIZE-libtoolize} --force 

# writing privat m4 file
echo -n "--> "
dunecontrol --only=$name m4create

# prepare everything
echo "--> aclocal..."
rm -f aclocal.m4
rm -rf autom4te.cache
aclocal$AMVERSION -I . $ACLOCAL_FLAGS

# create a link to the dune-common am directory
if [ "$name" != "dune-common" ]; then
  if [ -n "$am_dir" ] && [ -d $am_dir ]; then
    echo "--> linking dune-common/am..."
    rm -f am
    ln -s $am_dir am
  else
    echo
    echo "Error: Could not find dune-common/am!"
    usage
    exit 1
  fi
fi

# applications should provide a config.h for now
echo "--> autoheader..."
autoheader$ACVERSION

echo "--> automake..."
automake$AMVERSION -W all --add-missing

echo "--> autoconf..."
autoconf$ACVERSION

## tell the user what to do next
echo "Now run ./configure to setup $name"
