#!/bin/sh # # A wrapper around Autoconf that generates files to build PHP on *nix systems. PHP_AUTOCONF=${PHP_AUTOCONF:-autoconf} PHP_AUTOHEADER=${PHP_AUTOHEADER:-autoheader} force=0 debug=0 # Go to project root. cd "$(CDPATH='' cd -- "$(dirname -- "$0")" && pwd -P)" || exit php_extra_version=$(grep '^AC_INIT(' configure.ac) || exit case "$php_extra_version" in *-dev*) dev=1 ;; *) dev=0 ;; esac while test $# -gt 0; do if test "$1" = "-h" || test "$1" = "--help"; then cat << HELP PHP buildconf A wrapper around the autoconf and autoheader that generate files for building PHP on *nix systems (configure and main/php_config.h.in). The configure script is used to customize the PHP build based on the provided options and system. PHP releases downloaded from PHP.net already include the configure script so installing Autoconf and running buildconf is not needed. For the PHP sources from the Git repository, buildconf is used for generating a new configure script and required files. SYNOPSIS: buildconf [] OPTIONS: -f, --force Regenerate configure files in PHP release packages. --debug Display warnings emitted by Autoconf. -h, --help Display this help. ENVIRONMENT: The following optional variables are supported: PHP_AUTOCONF Overrides the path to autoconf tool. PHP_AUTOCONF=/path/to/autoconf ./buildconf PHP_AUTOHEADER Overrides the path to autoheader tool. PHP_AUTOHEADER=/path/to/autoheader ./buildconf HELP exit 0 fi if test "$1" = "-f" || test "$1" = "--force"; then force=1 fi if test "$1" = "--debug"; then debug=1 fi shift done if test "$dev" = "0" && test "$force" = "0"; then if test -f "configure" && test -f "main/php_config.h.in"; then echo "buildconf: The configure script is already built. All done." echo " Run ./configure to proceed with customizing the PHP build." exit 0 else echo "buildconf: Configure files are missing." >&2 echo " Run ./buildconf --force to create a configure script." >&2 exit 1 fi fi echo "buildconf: Checking installation" # Get minimum required autoconf version from the configure.ac file. min_version=$(sed -n 's/AC_PREREQ(\[\(.*\)\])/\1/p' configure.ac) # Check if autoconf exists. ac_version=$($PHP_AUTOCONF --version 2>/dev/null|head -n 1|sed -e 's/^[^0-9]*//' -e 's/[^0-9.]*$//') if test -z "$ac_version"; then echo "buildconf: autoconf not found." >&2 echo " You need autoconf version $min_version or newer installed" >&2 echo " to build PHP from Git." >&2 exit 1 fi # Check autoconf version. set -f; IFS='.'; set -- $ac_version; set +f; IFS=' ' ac_version_num="$(expr ${1} \* 10000 + ${2} \* 100)" set -f; IFS='.'; set -- $min_version; set +f; IFS=' ' min_version_num="$(expr ${1} \* 10000 + ${2} \* 100)" if test "$ac_version_num" -lt "$min_version_num"; then echo "buildconf: autoconf version $ac_version found." >&2 echo " You need autoconf version $min_version or newer installed" >&2 echo " to build PHP from Git." >&2 exit 1 else echo "buildconf: autoconf version $ac_version (ok)" fi if test "$force" = "1"; then echo "buildconf: Forcing buildconf. The configure files will be regenerated." fi # Clean cache and explicitly remove all targets if present. Remove also # aclocal.m4 if present. It is automatically included by autoconf but not used # by the PHP build system since PHP 7.4. echo "buildconf: Cleaning cache and configure files" rm -rf \ aclocal.m4 \ autom4te.cache \ config.cache \ configure \ main/php_config.h.in if test "$debug" = "1"; then autoconf_flags="-f -Wall" autoheader_flags="-Wall" else autoconf_flags="-f" autoheader_flags="" fi echo "buildconf: Rebuilding configure" $PHP_AUTOCONF $autoconf_flags echo "buildconf: Rebuilding main/php_config.h.in" $PHP_AUTOHEADER $autoheader_flags echo "buildconf: Run ./configure to proceed with customizing the PHP build."