#!/bin/sh
# Run this to generate all the initial makefiles, etc.

# Set ${srcdir} to .
: ${srcdir=.}

DIE=0

if [ -n "${GNOME2_PATH}" ]; then
	for dir in `echo ${GNOME2_PATH} | sed 's/:/ /g'`; do
	    if test -d "${dir}/share/aclocal"; then
		ACLOCAL_FLAGS="${ACLOCAL_FLAGS} -I ${dir}/share/aclocal"
	    fi;
	    if test -d "${dir}/bin"; then
		PATH="${PATH}:${dir}/bin"
	    fi;
	done;
	export PATH
fi

# usage: test_version program version
# returns 0 if program >= version; returns 1 if not.
test_version()
{
    this_prog="$1"
    want_vers="$2"

    testv=`"$this_prog" --version 2>/dev/null | head -n 1 | awk '{print $NF}'`
    if test -z "$testv" ; then return 1 ; fi

    testv_major=`echo "$testv" | sed 's/\([0-9]*\).\([0-9]*\).*$/\1/'`
    testv_minor=`echo "$testv" | sed 's/\([0-9]*\).\([0-9]*\).*$/\2/'`

    vers_major=`echo "$want_vers" | sed 's/\([0-9]*\).\([0-9]*\).*$/\1/'`
    vers_minor=`echo "$want_vers" | sed 's/\([0-9]*\).\([0-9]*\).*$/\2/'`

    # if wanted_major > found_major, this isn't good enough
    if test $vers_major -gt $testv_major ; then
	return 1
    # if wanted_major < found_major, then this is fine
    elif test $vers_major -lt $testv_major ; then
	return 0
    # if we get here, then the majors are equal, so test the minor version
    # we want found_minor >= want_minor.
    # So, if want_minor > found_minor, this is bad.
    elif test $vers_minor -gt $testv_minor ; then
	return 1
    # this is it.
    else
	return 0
    fi
}

# usage: find_program preset program version "<other versions>"
# sets "program" to the name of the program to use.
# if preset is set, then use that regardless,
#  otherwise check if "program" is of a good enough version and use that,
#  otherwise check if "program-version" is of a good enough version and use that.
#  otherwise return an error.
find_program()
{
    find="$1"
    prog="$2"
    vers="$3"
    extravers="$4"

    if test -n "$find" ; then
	test_version "$find" "$vers"
	status="$?"
	if test "$status" = 0 ; then
	    program="$find"
	    return 0
	fi
	echo "**Error**: cannot use $find"
    else

	test_version "$prog" "$vers"
	status=$?
	if test "$status" = 0 ; then
	    program="$prog"
	    return 0
	fi

	for test_vers in $vers $extravers ; do
	    test_version "$prog-$test_vers" "$vers"
	    status=$?
	    if test "$status" = 0 ; then
		program="$prog-$test_vers"
		return 0
	    fi
	done
    fi

    echo
    echo "**Warning**: Could not find a $prog that identifies itself >= $vers."
    echo
    program="$prog"
}

############################################################
#
# Store all required programs in variables. All of these variables
# could have been set by the developer beforehand, if he/she needs to
# override the defaults of here.

: ${GLIB_GETTEXTIZE=glib-gettextize}
: ${INTLTOOLIZE=intltoolize}
: ${LIBTOOLIZE=libtoolize}

find_program "$AUTOCONF" autoconf 2.59
AUTOCONF="$program"
find_program "$AUTOHEADER" autoheader 2.59
AUTOHEADER="$program"
find_program "$AUTOMAKE" automake 1.9
AUTOMAKE="$program"
find_program "$ACLOCAL" aclocal 1.9
ACLOCAL="$program"

############################################################
#
# All variables are set. Now check whether these programs are really
# available.

(${GLIB_GETTEXTIZE} --version) < /dev/null > /dev/null 2>&1 || {
  echo
  echo "**Error**: You must have \`glib-gettextize' installed to compile GnuCash."
  echo "Get the development packages of the glib-2.x library from your distribution."
  DIE=1
}

(${INTLTOOLIZE} --version) < /dev/null > /dev/null 2>&1 || {
  echo
  echo "**Error**: You must have \`intltoolize' installed to compile GnuCash."
  echo "Get the package 'intltool' of your distribution."
  DIE=1
}

# On MacOS, libtoolize is installed as glibtoolize, so handle that here.
(${LIBTOOLIZE} --version) < /dev/null > /dev/null 2>&1 || {
  LIBTOOLIZE=glibtoolize
  (${LIBTOOLIZE} --version) < /dev/null > /dev/null 2>&1 || {
    echo
    echo "**Error**: You must have \`libtoolize' installed to compile GnuCash."
    echo "Could not find either \`libtoolize' or \'glibtoolize'."
    echo "Download the appropriate package for your distribution,"
    echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/"
    DIE=1
  }
}

(${AUTOMAKE} --version) < /dev/null > /dev/null 2>&1 || {
  echo
  echo "**Error**: You must have \`automake' installed to compile GnuCash."
  echo "Download the appropriate package for your distribution,"
  echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/"
  DIE=1
  NO_AUTOMAKE=yes
}


# if no automake, don't bother testing for aclocal
test -n "$NO_AUTOMAKE" || (${ACLOCAL} --version) < /dev/null > /dev/null 2>&1 || {
  echo
  echo "**Error**: Missing \`aclocal'.  The version of \`automake'"
  echo "installed doesn't appear recent enough (older than automake-1.4)."
  echo "Download the appropriate package for your distribution,"
  echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/"
  DIE=1
}

(${AUTOCONF} --version) < /dev/null > /dev/null 2>&1 || {
  echo
  echo "**Error**: You must have \`autoconf' installed to compile GnuCash."
  echo "Download the appropriate package for your distribution,"
  echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/"
  DIE=1
}

if test "$DIE" -eq 1; then
  exit 1
fi

case $CC in
xlc )
  am_opt=--include-deps;;
esac

############################################################
#
# All programs are available. So now actually call them in the
# required order.

dr=${srcdir}

echo "Creating $dr/po/POTFILES.in ..."
test -r $dr/po/POTFILES.in || touch $dr/po/POTFILES.in

echo "Creating $dr/aclocal.m4 ..."
test -r $dr/aclocal.m4 || touch $dr/aclocal.m4

echo "Running ${GLIB_GETTEXTIZE} --force --copy ...  "
echo "GnuCash note: Please ignore the output of ${GLIB_GETTEXTIZE} below!"
echo "no" | ${GLIB_GETTEXTIZE} --force --copy
echo "GnuCash note: Please ignore the output of ${GLIB_GETTEXTIZE} above!"
echo

echo "Ensure $dr/aclocal.m4 is writable ..."
test -r $dr/aclocal.m4 && chmod u+w $dr/aclocal.m4

echo "Ensure $dr/po/POTFILES.in is writable ..."
test -r $dr/po/POTFILES.in && chmod u+w $dr/po/POTFILES.in

echo "Running ${INTLTOOLIZE} --force --copy ..."
${INTLTOOLIZE} --force --copy || \
    { echo "**Error**: ${INTLTOOLIZE} failed."; exit 1; }

echo "Running ${LIBTOOLIZE} --force --copy ..."
${LIBTOOLIZE} --force --copy || \
    { echo "**Error**: ${LIBTOOLIZE} failed."; exit 1; }

aclocalinclude="$ACLOCAL_FLAGS -I macros"
echo "Running ${ACLOCAL} $aclocalinclude ..."
${ACLOCAL} $aclocalinclude || \
    { echo "**Error**: ${ACLOCAL} failed."; exit 1; }

echo "Running ${AUTOHEADER}..."
${AUTOHEADER} || { echo "**Error**: ${AUTOHEADER} failed."; exit 1; }

echo "Running ${AUTOMAKE} --add-missing --gnu $am_opt ..."
${AUTOMAKE} --add-missing --gnu $am_opt || \
    { echo "**Error**: ${AUTOMAKE} failed."; exit 1; }

echo "Running ${AUTOCONF} ..."
${AUTOCONF} || \
    { echo "**Error**: ${AUTOCONF} failed."; exit 1; }

############################################################
# Done.

conf_flags="--enable-compile-warnings" # --enable-iso-c --enable-error-on-warning

echo ""
echo "NOTE: Just run configure.  Even if something told you to run"
echo "      aclocal, automake, or anything else above, IGNORE IT."
echo "      Everything has been run properly.  Just run configure..."
echo ""
echo You must now run $srcdir/configure $conf_flags "$@" ...
