#!/bin/sh

set -e

# Extract/modified from OE autotools.bbclass under MIT license.

# Permission is hereby granted, free of charge, to any person obtaining a copy 
# of this software and associated documentation files (the "Software"), to deal 
# in the Software without restriction, including without limitation the rights 
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 
# copies of the Software, and to permit persons to whom the Software is 
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in 
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 
# THE SOFTWARE.

# This script will call native autoconf tools.  if it's not installed
# we're in trouble.

error_exit () {
	echo usage: $(basename $0) [app_dir_name]
	exit 1
}

test x${OMTOOL_DIR} = x && . /usr/local/openmoko/arm/setup-env

. ${OMTOOL_DIR}/arm/scripts/script-env
. ${OMTOOL_DIR}/arm/scripts/functions

test x${1} = x && error_exit
while test x"${1}" != x
do
	if (echo ${1} | grep -q -e "^-")
	then
		EXTRA_OECONF="${EXTRA_OECONF} ${1}"
	else
		S=${1}
	fi
	shift
done

S=$(absolute_path ${S})
test ! -d ${S} && error_exit

echo Source directory: ${S}
echo Extra configure arguments: ${EXTRA_OECONF}

#EXTRA_OECONF=
#EXTRA_OEMAKE=
#EXTRA_AUTORECONF=

acpaths="default"

oefatal() {
	echo "FATAL:" "$*"
	exit 1

}

oenote() {
	echo "NOTE:" "$*"

}

oe_runconf () {
	if [ -x ${S}/configure ] ; then
		cfgcmd="${S}/configure \
		    --build=${BUILD_SYS} \
		    --host=${HOST_SYS} \
		    --target=${TARGET_SYS} \
		    --prefix=${prefix} \
		    --exec_prefix=${exec_prefix} \
		    --bindir=${bindir} \
		    --sbindir=${sbindir} \
		    --libexecdir=${libexecdir} \
		    --datadir=${datadir} \
		    --sysconfdir=${sysconfdir} \
		    --sharedstatedir=${sharedstatedir} \
		    --localstatedir=${localstatedir} \
		    --libdir=${libdir} \
		    --includedir=${includedir} \
		    --oldincludedir=${oldincludedir} \
		    --infodir=${infodir} \
		    --mandir=${mandir} \
                    --enable-mainainer-mode \
			${EXTRA_OECONF} \
		    $@"
		oenote "Running $cfgcmd..."
		$cfgcmd || oefatal "oe_runconf failed" 
	else
		oefatal "no configure script found"
	fi
}

autotools_do_configure() {
	# WARNING: gross hack follows:
	# An autotools built package generally needs these scripts, however only
	# automake or libtoolize actually install the current versions of them.
	# This is a problem in builds that do not use libtool or automake, in the case
	# where we -need- the latest version of these scripts.  e.g. running a build
	# for a package whose autotools are old, on an x86_64 machine, which the old
	# config.sub does not support.  Work around this by installing them manually
	# regardless.
	( for ac in `find ${S} -name configure.in -o -name configure.ac`; do
			rm -f `dirname $ac`/configure
			done )
	if [ -e ${S}/configure.in -o -e ${S}/configure.ac ]; then
		olddir=`pwd`
		cd ${S}
		if [ x"${acpaths}" = xdefault ]; then
			acpaths=
			for i in `find ${S} -maxdepth 2 -name \*.m4|grep -v 'aclocal.m4'| \
				grep -v 'acinclude.m4' | sed -e 's,\(.*/\).*$,\1,'|sort -u`; do
				acpaths="$acpaths -I $i"
			done
		else
			acpaths="${acpaths}"
		fi
		AUTOV=`automake --version |head -n 1 |sed "s/.* //;s/\.[0-9]\+$//"`
		automake --version
		echo "AUTOV is $AUTOV"
		#install -d ${STAGING_DATADIR}/aclocal
		#install -d ${STAGING_DATADIR}/aclocal-$AUTOV
		acpaths="$acpaths -I${STAGING_DATADIR}/aclocal-$AUTOV -I ${STAGING_DATADIR}/aclocal"
		# autoreconf is too shy to overwrite aclocal.m4 if it doesn't look
		# like it was auto-generated.  Work around this by blowing it away
		# by hand, unless the package specifically asked not to run aclocal.
		if ! echo ${EXTRA_AUTORECONF} | grep -q "aclocal"; then
			rm -f aclocal.m4
		fi
		if [ -e configure.in ]; then
			CONFIGURE_AC=configure.in
		else
			CONFIGURE_AC=configure.ac
		fi
		if grep "^AM_GLIB_GNU_GETTEXT" $CONFIGURE_AC >/dev/null; then
			if grep "sed.*POTFILES" $CONFIGURE_AC >/dev/null; then
				: do nothing -- we still have an old unmodified configure.ac
			else
				oenote Executing glib-gettextize --force --copy
				echo "no" | glib-gettextize --force --copy
			fi
		fi
		if grep "^[AI][CT]_PROG_INTLTOOL" $CONFIGURE_AC >/dev/null; then
			oenote Executing intltoolize --copy --force --automake
			intltoolize --copy --force --automake
		fi
		oenote Executing autoreconf --verbose --install --force ${EXTRA_AUTORECONF} $acpaths
		mkdir -p m4
		autoreconf -Wcross --verbose --install --force ${EXTRA_AUTORECONF} $acpaths || oefatal "autoreconf execution failed."
		cd $olddir
	fi
	if [ -e ${S}/configure ]; then
		oe_runconf
	else
		oenote "nothing to configure"
	fi
}

cd ${S}
autotools_do_configure ${S}
