#!/bin/sh
# Run this to bootstrap the files

PACKAGE=dbus-c++

srcdir=`dirname $0`
test -z "$srcdir" && srcdir=.

DIE=0

# check if configure.ac is there
(test -f $srcdir/configure.ac) || {
    echo -n "**Error**: Directory "\`$srcdir\'" does not look like the"
    echo " top-level package directory"
    exit 1
}

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

# check for libtool
(libtool --version) < /dev/null > /dev/null 2>&1 || {
  echo
  echo "**Error**: You must have \`libtool' installed."
  echo "You can get it from: ftp://ftp.gnu.org/pub/gnu/"
  DIE=1
}

# check for automake
(automake --version) < /dev/null > /dev/null 2>&1 || {
  echo
  echo "**Error**: You must have \`automake' installed."
  echo "You can get it from: 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."
  echo "You can get automake from ftp://ftp.gnu.org/pub/gnu/"
  DIE=1
}

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

echo "Running libtoolize..."
libtoolize --force --copy

aclocalinclude="$ACLOCAL_FLAGS -I config"
echo "Running aclocal $aclocalinclude ..."
aclocal $aclocalinclude
 
echo "Running autoheader..."
autoheader

echo "Running automake..."
automake --add-missing --foreign  $am_opt

echo "Running autoconf ..."
autoconf

echo "You could now exec ./configure --help to see available options"

