php-src/buildconf
Peter Kokot ef165b4422 Remove build.mk usage
First step when creating the `configure` script is currently using
make. This is helpful when developing buildsystem to only rebuild
`configure` and `main/php_config.h.in` files when one of the *.m4
or configure.ac file changes and saves the developer time a little.

Realistically however, it is not needed that much considering the
times of several seconds to fully rebuild the configure script and
configuration header. The next step when running the `configure`
script is much more time consuming so performance on buildconf
level is a bit questionable and won't be noticed on today's
systems.

Additionally:
- buildconf now removes cache and all targets and uses -f option on
  the first step i.e. autoconf. The autoheader does not need the -f
  option in this case.

Closes GH-4437
2019-07-21 11:40:23 +02:00

138 lines
3.9 KiB
Bash
Executable File

#!/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)
php_extra_version=$(grep '^AC_INIT(' configure.ac)
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>]
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/[a-z]* *$//')
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."