#!/bin/sh

# Variable declaration
prefix='@prefix@'
datarootdir='@datarootdir@'
exec_prefix="`eval echo @exec_prefix@`"
phpdir="`eval echo @libdir@`/build"
includedir="`eval echo @includedir@`/php"
builddir="`pwd`"
SED="@SED@"

FILES_BUILD="mkdep.awk scan_makefile_in.awk shtool libtool.m4"
FILES="acinclude.m4 Makefile.global config.sub config.guess ltmain.sh run-tests*.php"
CLEAN_FILES="$FILES *.o *.lo *.la .deps .libs/ build/ modules/ install-sh \
	mkinstalldirs missing config.nice config.sub config.guess configure configure.in \
	aclocal.m4 config.h config.h.in conftest* ltmain.sh libtool config.cache autom4te.cache/ \
	config.log config.status Makefile Makefile.fragments Makefile.objects confdefs.h \
	run-tests*.php tests/*.diff tests/*.exp tests/*.log tests/*.out tests/*.php"

# function declaration
phpize_usage()
{
  echo "Usage: $0 [--clean|--help|--version|-v]"
}

phpize_no_configm4()
{
  if test $@ -eq 1; then
    clean=" --clean"
  fi

  echo "Cannot find config.m4. "
  echo "Make sure that you run '$0$clean' in the top level source directory of the module"
  echo 
}

phpize_clean()
{
  echo "Cleaning.."
  for i in $CLEAN_FILES; do
    if test -f "$i"; then
      rm -f $i
    elif test -d "$i"; then
      rm -rf $i
    fi
  done
}

phpize_check_configm4()
{
  if test ! -r config.m4; then
     phpize_no_configm4 $@
    exit 1
  fi

}

phpize_get_api_numbers()
{
  # extracting API NOs:
  PHP_API_VERSION=`grep '#define PHP_API_VERSION' $includedir/main/php.h|$SED 's/#define PHP_API_VERSION//'`
  ZEND_MODULE_API_NO=`grep '#define ZEND_MODULE_API_NO' $includedir/Zend/zend_modules.h|$SED 's/#define ZEND_MODULE_API_NO//'`
  ZEND_EXTENSION_API_NO=`grep '#define ZEND_EXTENSION_API_NO' $includedir/Zend/zend_extensions.h|$SED 's/#define ZEND_EXTENSION_API_NO//'`
}

phpize_print_api_numbers()
{
  phpize_get_api_numbers
  echo "Configuring for:"
  echo "PHP Api Version:        "$PHP_API_VERSION
  echo "Zend Module Api No:     "$ZEND_MODULE_API_NO
  echo "Zend Extension Api No:  "$ZEND_EXTENSION_API_NO
}

phpize_check_build_files()
{
  if test ! -d "$phpdir"; then
    cat <<EOF
Cannot find build files at '$phpdir'. Please check your PHP installation.

EOF
    exit 1
  fi

  case "$phpdir" in
  *\ * | *\	*)
    cat <<EOF
Invalid source path '$phpdir'. Whitespace is not allowed in source path.

EOF
    exit 1;;
  esac

  case "$builddir" in
  *\ * | *\	*)
    cat <<EOF
Invalid build path '$builddir'. Whitespace is not allowed in build path.

EOF
      exit 1;;
  esac
}

phpize_check_shtool()
{
  test -x "$builddir/build/shtool" || chmod +x "$builddir/build/shtool"

  if test ! -x "$builddir/build/shtool"; then
    cat <<EOF
shtool at '$builddir/build/shtool' does not exist or is not executable. 
Make sure that the file exists and is executable and then rerun this script. 

EOF
    exit 1
  else
    php_shtool=$builddir/build/shtool
  fi
}

phpize_check_autotools()
{
  test -z "$PHP_AUTOCONF" && PHP_AUTOCONF=autoconf
  test -z "$PHP_AUTOHEADER" && PHP_AUTOHEADER=autoheader
  
  if test ! -x "$PHP_AUTOCONF" && test ! -x "`$php_shtool path $PHP_AUTOCONF`"; then
    cat <<EOF
Cannot find autoconf. Please check your autoconf installation and the
\$PHP_AUTOCONF environment variable. Then, rerun this script.

EOF
    exit 1
  fi
  if test ! -x "$PHP_AUTOHEADER" && test ! -x "`$php_shtool path $PHP_AUTOHEADER`"; then
    cat <<EOF
Cannot find autoheader. Please check your autoconf installation and the
\$PHP_AUTOHEADER environment variable. Then, rerun this script.

EOF
    exit 1
  fi
}

phpize_copy_files()
{
  test -d build || mkdir build
 
  (cd "$phpdir" && cp $FILES_BUILD "$builddir"/build)
  (cd "$phpdir" && cp $FILES "$builddir")
  (cd "$builddir" && cat acinclude.m4 ./build/libtool.m4 > aclocal.m4)
}

phpize_replace_prefix()
{
  $SED \
  -e "s#@prefix@#$prefix#" \
  < "$phpdir/phpize.m4" > configure.in
}

phpize_autotools()
{
  $PHP_AUTOCONF   || exit 1
  $PHP_AUTOHEADER || exit 1
}

# Main script

case "$1" in 
  # Cleanup
  --clean)
    phpize_check_configm4 1
    phpize_clean
    exit 0
    ;;

  # Usage
  --help)
    phpize_usage
    exit 0
    ;;

  # Version
  --version|-v)
    phpize_print_api_numbers
    exit 0
  ;;

  # Default
  *)
     phpize_check_configm4 0

     phpize_check_build_files

     phpize_print_api_numbers

     phpize_copy_files

     phpize_replace_prefix

     touch install-sh mkinstalldirs missing

     phpize_check_shtool

     phpize_check_autotools

     phpize_autotools
     ;;
esac

exit 0
