#!/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="php.m4 shtool libtool.m4 ax_check_compile_flag.m4 ax_gcc_func_attribute.m4 php_cxx_compile_stdcxx.m4 pkg.m4 \
    config.guess config.sub ltmain.sh Makefile.global gen_stub.php"
FILES="run-tests*.php"
CLEAN_FILES="$FILES *.o *.lo *.la .libs/ build/ modules/ \
	config.nice configure configure.ac \
	config.h config.h.in conftest* 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")
}

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

phpize_autotools()
{
  # Remove aclocal.m4 if present. It is automatically included by autoconf but
  # not used by the PHP build system since PHP 7.4.
  rm -f aclocal.m4

  $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

     phpize_check_shtool

     phpize_check_autotools

     phpize_autotools
     ;;
esac

exit 0
