mirror of
https://github.com/php/php-src.git
synced 2024-11-26 19:33:55 +08:00
807273e263
Follow-up of GH-14654
1892 lines
52 KiB
Plaintext
1892 lines
52 KiB
Plaintext
dnl Process this file with autoconf to produce a configure script.
|
|
|
|
dnl Include external macro definitions before the AC_INIT to also remove
|
|
dnl comments starting with # and empty newlines from the included files.
|
|
dnl ----------------------------------------------------------------------------
|
|
m4_include([build/ax_check_compile_flag.m4])
|
|
m4_include([build/ax_func_which_gethostbyname_r.m4])
|
|
m4_include([build/ax_gcc_func_attribute.m4])
|
|
m4_include([build/libtool.m4])
|
|
m4_include([build/php_cxx_compile_stdcxx.m4])
|
|
m4_include([build/php.m4])
|
|
m4_include([build/pkg.m4])
|
|
m4_include([TSRM/threads.m4])
|
|
m4_include([TSRM/tsrm.m4])
|
|
|
|
dnl Basic autoconf initialization, generation of config.nice.
|
|
dnl ----------------------------------------------------------------------------
|
|
|
|
AC_PREREQ([2.68])
|
|
AC_INIT([PHP],[8.4.0-dev],[https://github.com/php/php-src/issues],[php],[https://www.php.net])
|
|
AC_CONFIG_SRCDIR([main/php_version.h])
|
|
AC_CONFIG_AUX_DIR([build])
|
|
AC_PRESERVE_HELP_ORDER
|
|
|
|
PHP_CONFIG_NICE(config.nice)
|
|
|
|
PHP_CANONICAL_HOST_TARGET
|
|
|
|
AC_CONFIG_HEADERS([main/php_config.h])
|
|
|
|
AH_TOP([
|
|
#ifndef PHP_CONFIG_H
|
|
#define PHP_CONFIG_H
|
|
|
|
#if defined(__GNUC__) && __GNUC__ >= 4
|
|
# define ZEND_API __attribute__ ((visibility("default")))
|
|
# define ZEND_DLEXPORT __attribute__ ((visibility("default")))
|
|
#else
|
|
# define ZEND_API
|
|
# define ZEND_DLEXPORT
|
|
#endif
|
|
|
|
#define ZEND_DLIMPORT
|
|
])
|
|
AH_BOTTOM([
|
|
#include <stdlib.h>
|
|
|
|
#ifdef HAVE_SYS_TYPES_H
|
|
# include <sys/types.h>
|
|
#endif
|
|
|
|
#ifdef HAVE_SYS_SELECT_H
|
|
#include <sys/select.h>
|
|
#endif
|
|
|
|
#include <string.h>
|
|
|
|
#endif /* PHP_CONFIG_H */
|
|
])
|
|
|
|
ac_IFS=$IFS; IFS="."
|
|
set $(echo AC_PACKAGE_VERSION | "${SED}" 's/\([[0-9\.]]*\)\(.*\)/\1\.\2/')
|
|
IFS=$ac_IFS
|
|
PHP_MAJOR_VERSION=[$]1
|
|
PHP_MINOR_VERSION=[$]2
|
|
PHP_RELEASE_VERSION=[$]3
|
|
dnl Allow overriding PHP_EXTRA_VERSION through the homonymous env var
|
|
AC_ARG_VAR([PHP_EXTRA_VERSION],[Extra PHP version label suffix, e.g. '-dev', 'rc1', '-acme'])dnl
|
|
AS_IF([test -z "$PHP_EXTRA_VERSION"],[PHP_EXTRA_VERSION=[$]4])
|
|
PHP_VERSION="$PHP_MAJOR_VERSION.$PHP_MINOR_VERSION.$PHP_RELEASE_VERSION$PHP_EXTRA_VERSION"
|
|
PHP_VERSION_ID=`expr [$]PHP_MAJOR_VERSION \* 10000 + [$]PHP_MINOR_VERSION \* 100 + [$]PHP_RELEASE_VERSION`
|
|
|
|
dnl Allow version values to be used in Makefile.
|
|
PHP_SUBST(PHP_MAJOR_VERSION)
|
|
PHP_SUBST(PHP_MINOR_VERSION)
|
|
PHP_SUBST(PHP_RELEASE_VERSION)
|
|
PHP_SUBST(PHP_EXTRA_VERSION)
|
|
|
|
dnl Define where extension directories are located in the configure context.
|
|
AC_DEFUN([PHP_EXT_BUILDDIR],[$config_m4_dir])dnl
|
|
AC_DEFUN([PHP_EXT_DIR],[$config_m4_dir])dnl
|
|
AC_DEFUN([PHP_EXT_SRCDIR],[$abs_srcdir/$config_m4_dir])dnl
|
|
AC_DEFUN([PHP_ALWAYS_SHARED],[])dnl
|
|
|
|
dnl Setting up the PHP version based on the information above.
|
|
dnl ----------------------------------------------------------------------------
|
|
|
|
echo "/* automatically generated by configure */" > php_version.h.new
|
|
echo "/* edit configure.ac to change version number */" >> php_version.h.new
|
|
echo "#define PHP_MAJOR_VERSION $PHP_MAJOR_VERSION" >> php_version.h.new
|
|
echo "#define PHP_MINOR_VERSION $PHP_MINOR_VERSION" >> php_version.h.new
|
|
echo "#define PHP_RELEASE_VERSION $PHP_RELEASE_VERSION" >> php_version.h.new
|
|
echo "#define PHP_EXTRA_VERSION \"$PHP_EXTRA_VERSION\"" >> php_version.h.new
|
|
echo "#define PHP_VERSION \"$PHP_VERSION\"" >> php_version.h.new
|
|
echo "#define PHP_VERSION_ID $PHP_VERSION_ID" >> php_version.h.new
|
|
cmp php_version.h.new $srcdir/main/php_version.h >/dev/null 2>&1
|
|
if test $? -ne 0 ; then
|
|
rm -f $srcdir/main/php_version.h && mv php_version.h.new $srcdir/main/php_version.h && \
|
|
echo 'Updated main/php_version.h'
|
|
else
|
|
rm -f php_version.h.new
|
|
fi
|
|
|
|
dnl Settings we want to make before the checks.
|
|
dnl ----------------------------------------------------------------------------
|
|
|
|
php_shtool=$srcdir/build/shtool
|
|
T_MD=`$php_shtool echo -n -e %B`
|
|
T_ME=`$php_shtool echo -n -e %b`
|
|
|
|
PHP_INIT_BUILD_SYSTEM
|
|
|
|
dnl We want this one before the checks, so the checks can modify CFLAGS.
|
|
test -z "$CFLAGS" && auto_cflags=1
|
|
|
|
abs_srcdir=`(cd $srcdir; pwd)`
|
|
abs_builddir=`pwd`
|
|
|
|
dnl Because `make install` is often performed by the superuser, we create the
|
|
dnl libs subdirectory as the user who configures PHP. Otherwise, the current
|
|
dnl user will not be able to delete libs or the contents of libs.
|
|
|
|
$php_shtool mkdir -p libs
|
|
rm -f libs/*
|
|
|
|
dnl Checks for programs.
|
|
dnl ----------------------------------------------------------------------------
|
|
|
|
PKG_PROG_PKG_CONFIG
|
|
AC_PROG_CC([cc gcc])
|
|
PHP_DETECT_ICC
|
|
PHP_DETECT_SUNCC
|
|
|
|
dnl AC_PROG_CC_C99 is obsolete with autoconf >= 2.70 yet necessary for <= 2.69.
|
|
m4_version_prereq([2.70],,[AC_PROG_CC_C99])
|
|
AC_PROG_CPP
|
|
AC_USE_SYSTEM_EXTENSIONS
|
|
AC_PROG_LN_S
|
|
|
|
AS_VAR_IF([cross_compiling], [yes],
|
|
[AC_CHECK_PROGS([BUILD_CC], [gcc clang c99 c89 cc cl], [none])
|
|
AC_MSG_CHECKING([for native build C compiler])
|
|
AC_MSG_RESULT([$BUILD_CC])],
|
|
[BUILD_CC=$CC])
|
|
|
|
dnl Support systems with system libraries in e.g. /usr/lib64.
|
|
PHP_ARG_WITH([libdir],
|
|
[for system library directory],
|
|
[AS_HELP_STRING([--with-libdir=NAME],
|
|
[Look for libraries in .../NAME rather than .../lib])],
|
|
[lib],
|
|
[no])
|
|
|
|
PHP_ARG_ENABLE([rpath],
|
|
[whether to enable runpaths],
|
|
[AS_HELP_STRING([--disable-rpath],
|
|
[Disable passing additional runtime library search paths])],
|
|
[yes],
|
|
[no])
|
|
|
|
dnl Check for -R, etc. switch.
|
|
PHP_RUNPATH_SWITCH
|
|
|
|
dnl Checks for some support/generator progs.
|
|
PHP_PROG_AWK
|
|
PHP_PROG_BISON([3.0.0])
|
|
PHP_PROG_RE2C([1.0.3], [--no-generation-date])
|
|
PHP_PROG_PHP()
|
|
|
|
PHP_ARG_ENABLE([re2c-cgoto],
|
|
[whether to enable computed goto extension with re2c],
|
|
[AS_HELP_STRING([--enable-re2c-cgoto],
|
|
[Enable re2c -g flag to optimize conditional jumps using computed goto
|
|
extension, if supported by the compiler])],
|
|
[no],
|
|
[no])
|
|
|
|
AS_VAR_IF([PHP_RE2C_CGOTO], [no],,
|
|
[AC_CACHE_CHECK([whether re2c -g works], [php_cv_have_re2c_cgoto],
|
|
[AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
|
|
int main(void)
|
|
{
|
|
label1:
|
|
;
|
|
label2:
|
|
;
|
|
static void *adr[] = { &&label1, &&label2 };
|
|
goto *adr[0];
|
|
return 0;
|
|
}]])],
|
|
[php_cv_have_re2c_cgoto=yes],
|
|
[php_cv_have_re2c_cgoto=no])])
|
|
AS_VAR_IF([php_cv_have_re2c_cgoto], [yes],
|
|
[AS_VAR_APPEND([RE2C_FLAGS], [" -g"])])
|
|
])
|
|
|
|
dnl Platform-specific compile settings.
|
|
dnl ----------------------------------------------------------------------------
|
|
|
|
dnl See bug #28605
|
|
case $host_cpu in
|
|
alpha*)
|
|
if test "$GCC" = "yes"; then
|
|
CFLAGS="$CFLAGS -mieee"
|
|
else
|
|
CFLAGS="$CFLAGS -ieee"
|
|
fi
|
|
;;
|
|
sparc*)
|
|
if test "$SUNCC" = "yes"; then
|
|
CFLAGS="$CFLAGS -xmemalign=8s"
|
|
fi
|
|
;;
|
|
esac
|
|
|
|
dnl See https://github.com/php/php-src/issues/14140
|
|
AX_CHECK_COMPILE_FLAG([-ffp-contract=off], [CFLAGS="$CFLAGS -ffp-contract=off"])
|
|
|
|
dnl Mark symbols hidden by default if the compiler (for example, gcc >= 4)
|
|
dnl supports it. This can help reduce the binary size and startup time.
|
|
AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],
|
|
[CFLAGS="$CFLAGS -fvisibility=hidden"])
|
|
|
|
case $host_alias in
|
|
*solaris*)
|
|
CPPFLAGS="$CPPFLAGS -D_POSIX_PTHREAD_SEMANTICS"
|
|
;;
|
|
*hpux*)
|
|
if test "$GCC" = "yes"; then
|
|
CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED"
|
|
fi
|
|
;;
|
|
esac
|
|
|
|
dnl Disable PIC mode by default where it is known to be safe to do so, to avoid
|
|
dnl the performance hit from the lost register.
|
|
AC_MSG_CHECKING([whether to force non-PIC code in shared modules])
|
|
case $host_alias in
|
|
i?86-*-linux*|i?86-*-freebsd*)
|
|
if test "${with_pic+set}" != "set" || test "$with_pic" = "no"; then
|
|
with_pic=no
|
|
AC_MSG_RESULT(yes)
|
|
else
|
|
AC_MSG_RESULT(no)
|
|
fi
|
|
;;
|
|
*)
|
|
AC_MSG_RESULT(no)
|
|
;;
|
|
esac
|
|
|
|
dnl Detect musl libc
|
|
AC_MSG_CHECKING([whether we are using musl libc])
|
|
if command -v ldd >/dev/null && ldd --version 2>&1 | grep -q ^musl
|
|
then
|
|
AC_MSG_RESULT(yes)
|
|
AC_DEFINE([__MUSL__], [1], [Define when using musl libc])
|
|
else
|
|
AC_MSG_RESULT(no)
|
|
fi
|
|
|
|
dnl Add _GNU_SOURCE compile definition because the php_config.h with definitions
|
|
dnl by AC_USE_SYSTEM_EXTENSIONS might be included after the system headers which
|
|
dnl require extensions to C and POSIX.
|
|
AS_VAR_APPEND([CPPFLAGS], [" -D_GNU_SOURCE"])
|
|
|
|
dnl Include Zend configurations.
|
|
dnl ----------------------------------------------------------------------------
|
|
|
|
sinclude(Zend/Zend.m4)
|
|
|
|
dnl ----------------------------------------------------------------------------
|
|
|
|
PTHREADS_CHECK
|
|
PHP_HELP_SEPARATOR([SAPI modules:])
|
|
PHP_SHLIB_SUFFIX_NAMES
|
|
PHP_BUILD_PROGRAM
|
|
PHP_SAPI=none
|
|
|
|
dnl SAPI configuration.
|
|
dnl ----------------------------------------------------------------------------
|
|
|
|
dnl Paths to the targets are relative to the build directory.
|
|
SAPI_LIBNAME=libphp
|
|
SAPI_LIBNAME_SHARED=$SAPI_LIBNAME.[]$SHLIB_DL_SUFFIX_NAME
|
|
SAPI_LIBNAME_STATIC=$SAPI_LIBNAME.a
|
|
SAPI_SHARED=libs/$SAPI_LIBNAME_SHARED
|
|
SAPI_STATIC=libs/$SAPI_LIBNAME_STATIC
|
|
SAPI_LIBTOOL=libphp.la
|
|
|
|
PHP_CONFIGURE_PART(Configuring SAPI modules)
|
|
|
|
esyscmd(./build/config-stubs sapi)
|
|
|
|
dnl Show which main SAPI was selected.
|
|
AC_MSG_CHECKING([for chosen SAPI module])
|
|
AC_MSG_RESULT([$PHP_SAPI])
|
|
|
|
dnl Show which binaries were selected.
|
|
AC_MSG_CHECKING([for executable SAPI binaries])
|
|
if test "$PHP_BINARIES"; then
|
|
AC_MSG_RESULT([$PHP_BINARIES])
|
|
else
|
|
AC_MSG_RESULT([none])
|
|
fi
|
|
|
|
dnl Exit early.
|
|
if test -z "$PHP_INSTALLED_SAPIS"; then
|
|
AC_MSG_ERROR([Nothing to build.])
|
|
fi
|
|
|
|
dnl Force ZTS.
|
|
if test "$enable_zts" = "yes"; then
|
|
dnl Add pthreads linker and compiler flags.
|
|
if test -n "$ac_cv_pthreads_lib"; then
|
|
LIBS="$LIBS -l$ac_cv_pthreads_lib"
|
|
fi
|
|
if test -n "$ac_cv_pthreads_cflags"; then
|
|
CFLAGS="$CFLAGS $ac_cv_pthreads_cflags"
|
|
fi
|
|
|
|
PTHREADS_FLAGS
|
|
fi
|
|
|
|
dnl Starting system checks.
|
|
dnl ----------------------------------------------------------------------------
|
|
|
|
PHP_CONFIGURE_PART(Running system checks)
|
|
|
|
dnl Find sendmail binary.
|
|
PHP_PROG_SENDMAIL
|
|
|
|
dnl Check whether the system uses EBCDIC (not ASCII) as its native codeset.
|
|
PHP_EBCDIC
|
|
|
|
dnl Check whether the system byte ordering is bigendian.
|
|
PHP_C_BIGENDIAN
|
|
|
|
dnl Check whether writing to stdout works.
|
|
PHP_TEST_WRITE_STDOUT
|
|
|
|
dnl Check for /usr/pkg/{lib,include} which is where NetBSD puts binary and
|
|
dnl source packages. This should be harmless on other OSs.
|
|
if test -d /usr/pkg/include && test -d /usr/pkg/lib; then
|
|
CPPFLAGS="$CPPFLAGS -I/usr/pkg/include"
|
|
LDFLAGS="$LDFLAGS -L/usr/pkg/lib"
|
|
fi
|
|
test -d /usr/ucblib && PHP_ADD_LIBPATH(/usr/ucblib)
|
|
|
|
dnl First, library checks.
|
|
dnl ----------------------------------------------------------------------------
|
|
|
|
AC_SEARCH_LIBS([socket], [socket network])
|
|
|
|
AC_CHECK_FUNCS([socketpair],,
|
|
[AC_SEARCH_LIBS([socketpair], [socket network],
|
|
[AC_DEFINE([HAVE_SOCKETPAIR], [1])])])
|
|
|
|
AC_SEARCH_LIBS([gethostbyaddr], [nsl network])
|
|
|
|
AC_SEARCH_LIBS([dlopen], [dl],
|
|
[AC_DEFINE([HAVE_LIBDL], [1], [Define to 1 if the dl library is available.])])
|
|
|
|
AC_SEARCH_LIBS([sin], [m])
|
|
|
|
case $host_alias in
|
|
riscv64*)
|
|
PHP_CHECK_FUNC(__atomic_exchange_1, atomic)
|
|
;;
|
|
esac
|
|
|
|
dnl Solaris/Illumos for process mapping.
|
|
AC_SEARCH_LIBS([Pgrab], [proc])
|
|
|
|
dnl Haiku does not have network api in libc.
|
|
AC_SEARCH_LIBS([setsockopt], [network])
|
|
|
|
dnl Then headers.
|
|
dnl ----------------------------------------------------------------------------
|
|
|
|
dnl QNX requires unix.h to allow functions in libunix to work properly.
|
|
AC_CHECK_HEADERS([ \
|
|
dirent.h \
|
|
sys/param.h \
|
|
sys/types.h \
|
|
sys/time.h \
|
|
netinet/in.h \
|
|
alloca.h \
|
|
arpa/inet.h \
|
|
arpa/nameser.h \
|
|
dns.h \
|
|
fcntl.h \
|
|
grp.h \
|
|
ieeefp.h \
|
|
langinfo.h \
|
|
linux/sock_diag.h \
|
|
poll.h \
|
|
pty.h \
|
|
pwd.h \
|
|
resolv.h \
|
|
strings.h \
|
|
syslog.h \
|
|
sysexits.h \
|
|
sys/ioctl.h \
|
|
sys/file.h \
|
|
sys/mman.h \
|
|
sys/mount.h \
|
|
sys/poll.h \
|
|
sys/resource.h \
|
|
sys/select.h \
|
|
sys/socket.h \
|
|
sys/stat.h \
|
|
sys/statfs.h \
|
|
sys/statvfs.h \
|
|
sys/vfs.h \
|
|
sys/sysexits.h \
|
|
sys/uio.h \
|
|
sys/wait.h \
|
|
sys/loadavg.h \
|
|
unistd.h \
|
|
unix.h \
|
|
utime.h \
|
|
sys/utsname.h \
|
|
sys/ipc.h \
|
|
dlfcn.h \
|
|
tmmintrin.h \
|
|
nmmintrin.h \
|
|
wmmintrin.h \
|
|
immintrin.h
|
|
],[],[],[
|
|
#ifdef HAVE_SYS_PARAM_H
|
|
#include <sys/param.h>
|
|
#endif
|
|
#ifdef HAVE_SYS_TYPES_H
|
|
#include <sys/types.h>
|
|
#endif
|
|
#ifdef HAVE_SYS_TIME_H
|
|
#include <sys/time.h>
|
|
#endif
|
|
#ifdef HAVE_NETINET_IN_H
|
|
#include <netinet/in.h>
|
|
#endif
|
|
#ifdef HAVE_ARPA_NAMESER_H
|
|
#include <arpa/nameser.h>
|
|
#endif
|
|
])
|
|
|
|
PHP_FOPENCOOKIE
|
|
PHP_BROKEN_GETCWD
|
|
if test "$GCC" = "yes"; then
|
|
PHP_BROKEN_GCC_STRLEN_OPT
|
|
fi
|
|
|
|
dnl Detect the headers required to use makedev, major, and minor.
|
|
dnl Autoconf <= 2.69 didn't check glibc 2.25 deprecated macros in sys/types.h.
|
|
m4_version_prereq([2.70],,[ac_cv_header_sys_types_h_makedev=no])
|
|
AC_HEADER_MAJOR
|
|
|
|
dnl Checks for typedefs, structures, and compiler characteristics.
|
|
dnl ----------------------------------------------------------------------------
|
|
|
|
AC_STRUCT_TIMEZONE
|
|
|
|
PHP_MISSING_TIME_R_DECL
|
|
|
|
AC_CHECK_TYPES([struct flock],,,[#include <fcntl.h>])
|
|
AC_CHECK_TYPES(socklen_t, [], [], [
|
|
#ifdef HAVE_SYS_TYPES_H
|
|
# include <sys/types.h>
|
|
#endif
|
|
#ifdef HAVE_SYS_SOCKET_H
|
|
# include <sys/socket.h>
|
|
#endif
|
|
])
|
|
|
|
dnl These are defined elsewhere than stdio.h.
|
|
PHP_CHECK_SIZEOF(intmax_t, 0)
|
|
PHP_CHECK_SIZEOF(ssize_t, 8)
|
|
PHP_CHECK_SIZEOF(ptrdiff_t, 8)
|
|
|
|
dnl Check stdint types (must be after header check).
|
|
PHP_CHECK_STDINT_TYPES
|
|
|
|
dnl Check __builtin_expect
|
|
PHP_CHECK_BUILTIN_EXPECT
|
|
dnl Check __builtin_unreachable
|
|
PHP_CHECK_BUILTIN_UNREACHABLE
|
|
dnl Check __builtin_clz
|
|
PHP_CHECK_BUILTIN_CLZ
|
|
dnl Check __builtin_clzl
|
|
PHP_CHECK_BUILTIN_CLZL
|
|
dnl Check __builtin_clzll
|
|
PHP_CHECK_BUILTIN_CLZLL
|
|
dnl Check __builtin_ctzl
|
|
PHP_CHECK_BUILTIN_CTZL
|
|
dnl Check __builtin_ctzll
|
|
PHP_CHECK_BUILTIN_CTZLL
|
|
dnl Check __builtin_smull_overflow
|
|
PHP_CHECK_BUILTIN_SMULL_OVERFLOW
|
|
dnl Check __builtin_smulll_overflow
|
|
PHP_CHECK_BUILTIN_SMULLL_OVERFLOW
|
|
dnl Check __builtin_saddl_overflow
|
|
PHP_CHECK_BUILTIN_SADDL_OVERFLOW
|
|
dnl Check __builtin_saddll_overflow
|
|
PHP_CHECK_BUILTIN_SADDLL_OVERFLOW
|
|
dnl Check __builtin_usub_overflow
|
|
PHP_CHECK_BUILTIN_USUB_OVERFLOW
|
|
dnl Check __builtin_ssubl_overflow
|
|
PHP_CHECK_BUILTIN_SSUBL_OVERFLOW
|
|
dnl Check __builtin_ssubll_overflow
|
|
PHP_CHECK_BUILTIN_SSUBLL_OVERFLOW
|
|
dnl Check __builtin_cpu_init
|
|
PHP_CHECK_BUILTIN_CPU_INIT
|
|
dnl Check __builtin_cpu_supports
|
|
PHP_CHECK_BUILTIN_CPU_SUPPORTS
|
|
dnl Check __builtin_frame_address
|
|
PHP_CHECK_BUILTIN_FRAME_ADDRESS
|
|
dnl Check AVX512
|
|
PHP_CHECK_AVX512_SUPPORTS
|
|
dnl Check AVX512 VBMI
|
|
PHP_CHECK_AVX512_VBMI_SUPPORTS
|
|
|
|
dnl Check for __alignof__ support in the compiler
|
|
AC_CACHE_CHECK(whether the compiler supports __alignof__, ac_cv_alignof_exists,[
|
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
|
|
]],[[
|
|
int align = __alignof__(int);
|
|
(void)align;
|
|
]])],[
|
|
ac_cv_alignof_exists=yes
|
|
],[
|
|
ac_cv_alignof_exists=no
|
|
])])
|
|
if test "$ac_cv_alignof_exists" = "yes"; then
|
|
AC_DEFINE([HAVE_ALIGNOF], 1, [whether the compiler supports __alignof__])
|
|
fi
|
|
|
|
dnl Check for structure members.
|
|
AC_CHECK_MEMBERS([struct tm.tm_gmtoff],,,[#include <time.h>])
|
|
AC_CHECK_MEMBERS([struct stat.st_blksize, struct stat.st_rdev])
|
|
dnl AC_STRUCT_ST_BLOCKS will screw QNX because fileblocks.o does not exist.
|
|
if test "`uname -s 2>/dev/null`" != "QNX"; then
|
|
AC_STRUCT_ST_BLOCKS
|
|
fi
|
|
|
|
dnl Checks for types.
|
|
AC_TYPE_UID_T
|
|
|
|
dnl Checks for sockaddr_storage and sockaddr.sa_len.
|
|
AC_CHECK_TYPES([struct sockaddr_storage],,,[#include <sys/socket.h>])
|
|
AC_CHECK_MEMBERS([struct sockaddr.sa_len],,,[#include <sys/socket.h>])
|
|
|
|
dnl Checks for GCC function attributes on all systems except ones without glibc
|
|
dnl Fix for these systems is already included in GCC 7, but not on GCC 6.
|
|
dnl
|
|
dnl At least some versions of FreeBSD seem to have buggy ifunc support, see
|
|
dnl bug #77284. Conservatively don't use ifuncs on FreeBSD prior to version 12.
|
|
AS_CASE([$host_alias], [*-*-*android*|*-*-*uclibc*|*-*-*musl*|*openbsd*], [true], [
|
|
if test "`uname -s 2>/dev/null`" != "FreeBSD" || test "`uname -U 2>/dev/null`" -ge 1200000; then
|
|
AX_GCC_FUNC_ATTRIBUTE([ifunc])
|
|
AX_GCC_FUNC_ATTRIBUTE([target])
|
|
fi
|
|
])
|
|
|
|
dnl Check for __attribute__ ((__aligned__)) support in the compiler.
|
|
PHP_CHECK_VARIABLE_ATTRIBUTE([aligned])
|
|
|
|
dnl Check for IPv6 support.
|
|
AC_CACHE_CHECK([for IPv6 support], ac_cv_ipv6_support,
|
|
[AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#include <netinet/in.h>]], [[
|
|
struct sockaddr_in6 s;
|
|
struct in6_addr t = in6addr_any;
|
|
int i = AF_INET6;
|
|
(void)s;
|
|
t.s6_addr[0] = 0;
|
|
(void)i;
|
|
]])],
|
|
[ac_cv_ipv6_support=yes], [ac_cv_ipv6_support=no])])
|
|
|
|
dnl Checks for library functions.
|
|
dnl ----------------------------------------------------------------------------
|
|
|
|
AC_CHECK_FUNCS(
|
|
alphasort \
|
|
asctime_r \
|
|
chroot \
|
|
ctime_r \
|
|
explicit_memset \
|
|
fdatasync \
|
|
flock \
|
|
ftok \
|
|
funopen \
|
|
gai_strerror \
|
|
getcwd \
|
|
gethostname \
|
|
getloadavg \
|
|
getlogin \
|
|
getprotobyname \
|
|
getprotobynumber \
|
|
getservbyname \
|
|
getservbyport \
|
|
getrusage \
|
|
gettimeofday \
|
|
gmtime_r \
|
|
getpwnam_r \
|
|
getgrnam_r \
|
|
getpwuid_r \
|
|
getwd \
|
|
glob \
|
|
localtime_r \
|
|
lchown \
|
|
memcntl \
|
|
memfd_create \
|
|
mkstemp \
|
|
mmap \
|
|
nice \
|
|
nl_langinfo \
|
|
poll \
|
|
pthread_jit_write_protect_np \
|
|
putenv \
|
|
scandir \
|
|
setitimer \
|
|
setenv \
|
|
shutdown \
|
|
sigprocmask \
|
|
statfs \
|
|
statvfs \
|
|
std_syslog \
|
|
strcasecmp \
|
|
strnlen \
|
|
strptime \
|
|
strtok_r \
|
|
symlink \
|
|
tzset \
|
|
unsetenv \
|
|
usleep \
|
|
utime \
|
|
vasprintf \
|
|
asprintf \
|
|
memmem \
|
|
memrchr \
|
|
mempcpy \
|
|
)
|
|
|
|
AC_CHECK_FUNC([inet_ntop],,[AC_MSG_ERROR([Required inet_ntop not found.])])
|
|
AC_CHECK_FUNC([inet_pton],,[AC_MSG_ERROR([Required inet_pton not found.])])
|
|
|
|
dnl Check for strerror_r, and if its a POSIX-compatible or a GNU specific version.
|
|
AC_FUNC_STRERROR_R
|
|
|
|
dnl Check for functions inside their belonging headers.
|
|
AC_CHECK_HEADER([sys/prctl.h], [AC_CHECK_FUNCS([prctl])])
|
|
AC_CHECK_HEADER([sys/procctl.h], [AC_CHECK_FUNCS([procctl])])
|
|
|
|
AX_FUNC_WHICH_GETHOSTBYNAME_R
|
|
|
|
dnl Some systems (Solaris 10) do not have nanosleep in libc.
|
|
AC_CHECK_FUNCS([nanosleep],,
|
|
[AC_SEARCH_LIBS([nanosleep], [rt], [AC_DEFINE([HAVE_NANOSLEEP], [1])])])
|
|
|
|
dnl Check for getaddrinfo, should be a better way, but... Also check for working
|
|
dnl getaddrinfo.
|
|
AC_CACHE_CHECK([for getaddrinfo], ac_cv_func_getaddrinfo,
|
|
[AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <netdb.h>]],
|
|
[[struct addrinfo *g,h;g=&h;getaddrinfo("","",g,&g);]])],[AC_RUN_IFELSE([AC_LANG_SOURCE([[
|
|
#include <netdb.h>
|
|
#include <sys/types.h>
|
|
#include <string.h>
|
|
#include <stdlib.h>
|
|
#ifndef AF_INET
|
|
# include <sys/socket.h>
|
|
#endif
|
|
int main(void) {
|
|
struct addrinfo *ai, *pai, hints;
|
|
|
|
memset(&hints, 0, sizeof(hints));
|
|
hints.ai_flags = AI_NUMERICHOST;
|
|
|
|
if (getaddrinfo("127.0.0.1", 0, &hints, &ai) < 0) {
|
|
return 1;
|
|
}
|
|
|
|
if (ai == 0) {
|
|
return 1;
|
|
}
|
|
|
|
pai = ai;
|
|
|
|
while (pai) {
|
|
if (pai->ai_family != AF_INET) {
|
|
/* 127.0.0.1/NUMERICHOST should only resolve ONE way */
|
|
return 1;
|
|
}
|
|
if (pai->ai_addr->sa_family != AF_INET) {
|
|
/* 127.0.0.1/NUMERICHOST should only resolve ONE way */
|
|
return 1;
|
|
}
|
|
pai = pai->ai_next;
|
|
}
|
|
freeaddrinfo(ai);
|
|
return 0;
|
|
}
|
|
]])],[ac_cv_func_getaddrinfo=yes], [ac_cv_func_getaddrinfo=no], [
|
|
dnl Cross compilation.
|
|
case $host_alias in
|
|
*linux*|*midipix)
|
|
ac_cv_func_getaddrinfo=yes
|
|
;;
|
|
*)
|
|
ac_cv_func_getaddrinfo=no
|
|
;;
|
|
esac
|
|
])],
|
|
[ac_cv_func_getaddrinfo=no])])
|
|
if test "$ac_cv_func_getaddrinfo" = yes; then
|
|
AC_DEFINE(HAVE_GETADDRINFO,1,[Define if you have the getaddrinfo function])
|
|
fi
|
|
|
|
dnl on FreeBSD, copy_file_range() works only with the undocumented flag 0x01000000;
|
|
dnl until the problem is fixed properly, copy_file_range() is used only on Linux
|
|
AC_CACHE_CHECK([for copy_file_range], ac_cv_copy_file_range,
|
|
[AC_RUN_IFELSE([AC_LANG_SOURCE([[
|
|
#ifdef __linux__
|
|
#ifndef _GNU_SOURCE
|
|
#define _GNU_SOURCE
|
|
#endif
|
|
#include <linux/version.h>
|
|
#include <unistd.h>
|
|
|
|
int main(void) {
|
|
(void)copy_file_range(-1, 0, -1, 0, 0, 0);
|
|
#if LINUX_VERSION_CODE < KERNEL_VERSION(5,3,0)
|
|
#error "kernel too old"
|
|
#else
|
|
return 0;
|
|
#endif
|
|
}
|
|
#else
|
|
#error "unsupported platform"
|
|
#endif
|
|
]])], [ac_cv_copy_file_range=yes], [ac_cv_copy_file_range=no], [ac_cv_copy_file_range=no])
|
|
])
|
|
|
|
if test "$ac_cv_copy_file_range" = yes; then
|
|
AC_DEFINE(HAVE_COPY_FILE_RANGE,1,[Define if copy_file_range support])
|
|
fi
|
|
|
|
AC_REPLACE_FUNCS(strlcat strlcpy explicit_bzero getopt)
|
|
AC_FUNC_ALLOCA
|
|
PHP_TIME_R_TYPE
|
|
|
|
AC_CACHE_CHECK([for aarch64 CRC32 API], ac_cv_func___crc32d,
|
|
[AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <arm_acle.h>]],[[__crc32d(0, 0);]])],[ac_cv_func___crc32d=yes],[ac_cv_func___crc32d="no"])])
|
|
if test "$ac_cv_func___crc32d" = "yes"; then
|
|
AC_DEFINE([HAVE_AARCH64_CRC32], [1], [Define when aarch64 CRC32 API is available.])
|
|
fi
|
|
|
|
dnl Check for asm goto support.
|
|
AC_CACHE_CHECK([for asm goto], [ac_cv__asm_goto],
|
|
[AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[
|
|
#if defined(__x86_64__) || defined(__i386__)
|
|
__asm__ goto("jmp %l0\n" :::: end);
|
|
#elif defined(__aarch64__)
|
|
__asm__ goto("b %l0\n" :::: end);
|
|
#endif
|
|
end:
|
|
return 0;
|
|
]])], [ac_cv__asm_goto=yes], [ac_cv__asm_goto=no])])
|
|
if test "$ac_cv__asm_goto" = yes; then
|
|
AC_DEFINE([HAVE_ASM_GOTO], [1], [Define if asm goto support is available.])
|
|
fi
|
|
|
|
dnl Check valgrind support.
|
|
PHP_ARG_WITH([valgrind],
|
|
[whether to enable valgrind support],
|
|
[AS_HELP_STRING([--with-valgrind],
|
|
[Enable valgrind support])],
|
|
[no],
|
|
[no])
|
|
|
|
if test "$PHP_VALGRIND" != "no"; then
|
|
PKG_CHECK_MODULES([VALGRIND], [valgrind], [have_valgrind="yes"], [have_valgrind="no"])
|
|
|
|
if test "$have_valgrind" = "yes"; then
|
|
PHP_EVAL_INCLINE($VALGRIND_CFLAGS)
|
|
AC_DEFINE(HAVE_VALGRIND, 1, [ ])
|
|
else
|
|
if test "$with_valgrind" = "yes"; then
|
|
AC_MSG_ERROR([Valgrind not found. Please install Valgrind.])
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
dnl Check for openpty. It may require linking against libutil or libbsd.
|
|
AC_CHECK_FUNCS([openpty],,
|
|
[AC_SEARCH_LIBS([openpty], [util bsd], [AC_DEFINE([HAVE_OPENPTY], [1])])])
|
|
|
|
dnl General settings.
|
|
dnl ----------------------------------------------------------------------------
|
|
PHP_CONFIGURE_PART(General settings)
|
|
|
|
PHP_HELP_SEPARATOR([General settings:])
|
|
|
|
PHP_ARG_ENABLE([gcov],
|
|
[whether to include gcov symbols],
|
|
[AS_HELP_STRING([--enable-gcov],
|
|
[Enable GCOV code coverage - FOR DEVELOPERS ONLY!!])],
|
|
[no],
|
|
[no])
|
|
|
|
if test "$PHP_GCOV" = "yes"; then
|
|
|
|
if test "$GCC" != "yes"; then
|
|
AC_MSG_ERROR([GCC is required for --enable-gcov])
|
|
fi
|
|
|
|
dnl Check if ccache is being used.
|
|
case `$php_shtool path $CC` in
|
|
*ccache*[)] gcc_ccache=yes;;
|
|
*[)] gcc_ccache=no;;
|
|
esac
|
|
|
|
if test "$gcc_ccache" = "yes" && (test -z "$CCACHE_DISABLE" || test "$CCACHE_DISABLE" != "1"); then
|
|
AC_MSG_ERROR([ccache must be disabled when --enable-gcov option is used. You can disable ccache by setting environment variable CCACHE_DISABLE=1.])
|
|
fi
|
|
|
|
AC_DEFINE(HAVE_GCOV, 1, [Whether you have gcov])
|
|
PHP_ADD_MAKEFILE_FRAGMENT($abs_srcdir/build/Makefile.gcov, $abs_srcdir)
|
|
|
|
dnl Remove all optimization flags from CFLAGS.
|
|
changequote({,})
|
|
dnl Discard known '-O...' flags, including just '-O', but do not remove only '-O' in '-Ounknown'
|
|
CFLAGS=`echo "$CFLAGS" | $SED -e 's/-O\([0-9gsz]\|fast\|\)\([\t ]\|$\)//g'`
|
|
CXXFLAGS=`echo "$CXXFLAGS" | $SED -e 's/-O\([0-9gsz]\|fast\|\)\([\t ]\|$\)//g'`
|
|
changequote([,])
|
|
|
|
dnl Add the special gcc flags.
|
|
CFLAGS="$CFLAGS -O0 -fprofile-arcs -ftest-coverage"
|
|
CXXFLAGS="$CXXFLAGS -O0 -fprofile-arcs -ftest-coverage"
|
|
fi
|
|
|
|
PHP_ARG_ENABLE([debug],
|
|
[whether to include debugging symbols],
|
|
[AS_HELP_STRING([--enable-debug],
|
|
[Compile with debugging symbols])],
|
|
[no],
|
|
[no])
|
|
|
|
if test "$PHP_DEBUG" = "yes"; then
|
|
PHP_DEBUG=1
|
|
ZEND_DEBUG=yes
|
|
changequote({,})
|
|
dnl Discard known '-O...' flags, including just '-O', but do not remove only '-O' in '-Ounknown'
|
|
CFLAGS=`echo "$CFLAGS" | $SED -e 's/-O\([0-9gsz]\|fast\|\)\([\t ]\|$\)//g'`
|
|
CXXFLAGS=`echo "$CXXFLAGS" | $SED -e 's/-O\([0-9gsz]\|fast\|\)\([\t ]\|$\)//g'`
|
|
changequote([,])
|
|
dnl Add -O0 only if GCC or ICC is used.
|
|
if test "$GCC" = "yes" || test "$ICC" = "yes"; then
|
|
CFLAGS="$CFLAGS -O0"
|
|
CXXFLAGS="$CXXFLAGS -g -O0"
|
|
fi
|
|
if test "$SUNCC" = "yes"; then
|
|
if test -n "$auto_cflags"; then
|
|
CFLAGS="-g"
|
|
CXXFLAGS="-g"
|
|
else
|
|
CFLAGS="$CFLAGS -g"
|
|
CXXFLAGS="$CFLAGS -g"
|
|
fi
|
|
fi
|
|
else
|
|
PHP_DEBUG=0
|
|
ZEND_DEBUG=no
|
|
fi
|
|
|
|
PHP_ARG_ENABLE([debug-assertions],
|
|
[whether to enable debug assertions in release mode],
|
|
[AS_HELP_STRING([--enable-debug-assertions],
|
|
[Compile with debug assertions even in release mode])],
|
|
[no],
|
|
[no])
|
|
|
|
if test "$PHP_DEBUG_ASSERTIONS" = "yes"; then
|
|
PHP_DEBUG=1
|
|
ZEND_DEBUG=yes
|
|
fi
|
|
|
|
AC_ARG_ENABLE([zts],
|
|
[AS_HELP_STRING([--enable-zts],
|
|
[Enable thread safety])],
|
|
[ZEND_ZTS=$enableval],
|
|
[ZEND_ZTS=no])
|
|
|
|
if test "$ZEND_ZTS" = "yes"; then
|
|
AC_DEFINE(ZTS, 1,[ ])
|
|
PHP_THREAD_SAFETY=yes
|
|
else
|
|
PHP_THREAD_SAFETY=no
|
|
fi
|
|
|
|
PHP_ARG_ENABLE([rtld-now],
|
|
[whether to dlopen extensions with RTLD_NOW instead of RTLD_LAZY],
|
|
[AS_HELP_STRING([--enable-rtld-now],
|
|
[Use dlopen with RTLD_NOW instead of RTLD_LAZY])],
|
|
[no],
|
|
[no])
|
|
|
|
if test "$PHP_RTLD_NOW" = "yes"; then
|
|
AC_DEFINE(PHP_USE_RTLD_NOW, 1, [ Use dlopen with RTLD_NOW instead of RTLD_LAZY ])
|
|
fi
|
|
|
|
PHP_ARG_WITH([layout],
|
|
[layout of installed files],
|
|
[AS_HELP_STRING([--with-layout=TYPE],
|
|
[Set how installed files will be laid out. Type can be either PHP or GNU [PHP]])],
|
|
[PHP],
|
|
[no])
|
|
|
|
case $PHP_LAYOUT in
|
|
GNU)
|
|
oldstyleextdir=no
|
|
;;
|
|
*)
|
|
oldstyleextdir=yes
|
|
;;
|
|
esac
|
|
|
|
PHP_ARG_WITH([config-file-path],
|
|
[path to configuration file],
|
|
[AS_HELP_STRING([--with-config-file-path=PATH],
|
|
[Set the path in which to look for php.ini [PREFIX/lib]])],
|
|
[DEFAULT],
|
|
[no])
|
|
|
|
if test "$PHP_CONFIG_FILE_PATH" = "DEFAULT"; then
|
|
case $PHP_LAYOUT in
|
|
GNU)
|
|
PHP_CONFIG_FILE_PATH=$sysconfdir
|
|
;;
|
|
*)
|
|
PHP_CONFIG_FILE_PATH=$libdir
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
AC_MSG_CHECKING([where to scan for configuration files])
|
|
PHP_ARG_WITH([config-file-scan-dir],,
|
|
[AS_HELP_STRING([--with-config-file-scan-dir=PATH],
|
|
[Set the path where to scan for configuration files])],
|
|
[DEFAULT],
|
|
[no])
|
|
|
|
if test "$PHP_CONFIG_FILE_SCAN_DIR" = "DEFAULT"; then
|
|
PHP_CONFIG_FILE_SCAN_DIR=
|
|
fi
|
|
AC_MSG_RESULT([$PHP_CONFIG_FILE_SCAN_DIR])
|
|
|
|
test -n "$DEBUG_CFLAGS" && CFLAGS="$CFLAGS $DEBUG_CFLAGS"
|
|
|
|
PHP_ARG_ENABLE([sigchild],
|
|
[whether to enable PHP's own SIGCHLD handler],
|
|
[AS_HELP_STRING([--enable-sigchild],
|
|
[Enable PHP's own SIGCHLD handler])],
|
|
[no],
|
|
[no])
|
|
|
|
if test "$PHP_SIGCHILD" = "yes"; then
|
|
AC_DEFINE(PHP_SIGCHILD, 1, [ ])
|
|
else
|
|
AC_DEFINE(PHP_SIGCHILD, 0, [ ])
|
|
fi
|
|
|
|
PHP_ARG_ENABLE([libgcc],
|
|
[whether to explicitly link against libgcc],
|
|
[AS_HELP_STRING([--enable-libgcc],
|
|
[Enable explicitly linking against libgcc])],
|
|
[no],
|
|
[no])
|
|
|
|
if test "$PHP_LIBGCC" = "yes"; then
|
|
PHP_LIBGCC_LIBPATH(gcc)
|
|
if test -z "$libgcc_libpath"; then
|
|
AC_MSG_ERROR([Cannot locate libgcc. Make sure that gcc is in your path])
|
|
fi
|
|
PHP_ADD_LIBPATH($libgcc_libpath)
|
|
PHP_ADD_LIBRARY(gcc, yes)
|
|
fi
|
|
|
|
PHP_ARG_ENABLE([short-tags],
|
|
[whether to enable short tags by default],
|
|
[AS_HELP_STRING([--disable-short-tags],
|
|
[Disable the short-form <? start tag by default])],
|
|
[yes],
|
|
[no])
|
|
|
|
if test "$PHP_SHORT_TAGS" = "yes"; then
|
|
AC_DEFINE(DEFAULT_SHORT_OPEN_TAG, "1", [ ])
|
|
else
|
|
AC_DEFINE(DEFAULT_SHORT_OPEN_TAG, "0", [ ])
|
|
fi
|
|
|
|
PHP_ARG_ENABLE([dmalloc],
|
|
[whether to enable dmalloc],
|
|
[AS_HELP_STRING([--enable-dmalloc],
|
|
[Enable dmalloc])],
|
|
[no],
|
|
[no])
|
|
|
|
if test "$PHP_DMALLOC" = "yes"; then
|
|
AC_CHECK_LIB(dmalloc, dmalloc_error, [
|
|
PHP_ADD_LIBRARY(dmalloc)
|
|
AC_DEFINE(HAVE_DMALLOC,1,[Whether you have dmalloc])
|
|
CPPFLAGS="$CPPFLAGS -DDMALLOC_FUNC_CHECK"
|
|
], [
|
|
AC_MSG_ERROR([Problem with enabling dmalloc. Please check config.log for details.])
|
|
])
|
|
fi
|
|
|
|
PHP_ARG_ENABLE([ipv6],
|
|
[whether to enable IPv6 support],
|
|
[AS_HELP_STRING([--disable-ipv6],
|
|
[Disable IPv6 support])],
|
|
[yes],
|
|
[no])
|
|
|
|
if test "$PHP_IPV6" != "no" && test "$ac_cv_ipv6_support" = yes; then
|
|
AC_DEFINE(HAVE_IPV6, 1, [Whether to enable IPv6 support])
|
|
fi
|
|
|
|
dnl DTRACE checks. Note: this has to be done after SAPI configuration.
|
|
PHP_ARG_ENABLE([dtrace],
|
|
[whether to enable DTrace support],
|
|
[AS_HELP_STRING([--enable-dtrace],
|
|
[Enable DTrace support])],
|
|
[no],
|
|
[no])
|
|
|
|
if test "$PHP_DTRACE" = "yes"; then
|
|
AC_CHECK_HEADER([sys/sdt.h], [
|
|
PHP_INIT_DTRACE([Zend/zend_dtrace.d],[Zend/zend_dtrace_gen.h],[main/main.c Zend/zend_API.c \
|
|
Zend/zend_execute.c Zend/zend_exceptions.c \
|
|
Zend/zend_dtrace.c Zend/zend.c])
|
|
AC_DEFINE(HAVE_DTRACE, 1, [Whether to enable DTrace support])
|
|
PHP_SUBST(PHP_DTRACE_OBJS)
|
|
], [
|
|
AC_MSG_ERROR([Cannot find sys/sdt.h which is required for DTrace support])
|
|
])
|
|
fi
|
|
|
|
AC_MSG_CHECKING([how big to make fd sets])
|
|
PHP_ARG_ENABLE([fd-setsize],,
|
|
[AS_HELP_STRING([--enable-fd-setsize],
|
|
[Set size of descriptor sets])],
|
|
[no],
|
|
[no])
|
|
|
|
if test "$PHP_FD_SETSIZE" != "no"; then
|
|
if test "0$PHP_FD_SETSIZE" -gt 0 2>/dev/null; then
|
|
CPPFLAGS="$CPPFLAGS -DFD_SETSIZE=$PHP_FD_SETSIZE"
|
|
AC_MSG_RESULT([using $PHP_FD_SETSIZE])
|
|
else
|
|
AC_MSG_ERROR([Invalid value passed to --enable-fd-setsize!])
|
|
fi
|
|
else
|
|
AC_MSG_RESULT([using system default])
|
|
fi
|
|
|
|
PHP_ARG_ENABLE([werror],,
|
|
[AS_HELP_STRING([--enable-werror],
|
|
[Enable -Werror])],
|
|
[no],
|
|
[no])
|
|
PHP_ARG_ENABLE([memory-sanitizer],,
|
|
[AS_HELP_STRING([--enable-memory-sanitizer],
|
|
[Enable memory sanitizer (clang only)])],
|
|
[no],
|
|
[no])
|
|
PHP_ARG_ENABLE([address-sanitizer],,
|
|
[AS_HELP_STRING([--enable-address-sanitizer],
|
|
[Enable address sanitizer])],
|
|
[no],
|
|
[no])
|
|
PHP_ARG_ENABLE([undefined-sanitizer],,
|
|
[AS_HELP_STRING([--enable-undefined-sanitizer],
|
|
[Enable undefined sanitizer])],
|
|
[no],
|
|
[no])
|
|
|
|
dnl Extension configuration.
|
|
dnl ----------------------------------------------------------------------------
|
|
|
|
PHP_HELP_SEPARATOR([Extensions:
|
|
|
|
--with-EXTENSION=[shared[,PATH]]
|
|
|
|
NOTE: Not all extensions can be built as 'shared'.
|
|
|
|
Example: --with-foobar=shared,/usr/local/foobar/
|
|
|
|
o Builds the foobar extension as shared extension.
|
|
o foobar package install prefix is /usr/local/foobar/
|
|
])
|
|
|
|
PHP_CONFIGURE_PART(Configuring extensions)
|
|
|
|
dnl Check if all enabled by default extensions should be disabled.
|
|
AC_ARG_ENABLE([all],
|
|
[AS_HELP_STRING([--disable-all],
|
|
[Disable all extensions which are enabled by default])],
|
|
[PHP_ENABLE_ALL=$enableval])
|
|
|
|
dnl Reading config stubs.
|
|
esyscmd(./build/config-stubs ext)
|
|
|
|
dnl Extensions post-config.
|
|
dnl ----------------------------------------------------------------------------
|
|
|
|
dnl Align segments on huge page boundary
|
|
AS_CASE([$host_alias], [[i[3456]86-*-linux-* | x86_64-*-linux-*]],
|
|
[AC_CACHE_CHECK([linker support for -zcommon-page-size=2097152],
|
|
[php_cv_have_common_page_size], [
|
|
save_LDFLAGS=$LDFLAGS
|
|
LDFLAGS="$LDFLAGS -Wl,-zcommon-page-size=2097152 -Wl,-zmax-page-size=2097152"
|
|
AC_RUN_IFELSE([AC_LANG_PROGRAM()],
|
|
[php_cv_have_common_page_size=yes],
|
|
[php_cv_have_common_page_size=no],
|
|
[php_cv_have_common_page_size=no])
|
|
LDFLAGS=$save_LDFLAGS])
|
|
AS_VAR_IF([php_cv_have_common_page_size], [yes],
|
|
[EXTRA_LDFLAGS_PROGRAM="$EXTRA_LDFLAGS_PROGRAM -Wl,-zcommon-page-size=2097152 -Wl,-zmax-page-size=2097152"],
|
|
[AC_CACHE_CHECK([linker support for -zmax-page-size=2097152],
|
|
[php_cv_have_max_page_size], [
|
|
save_LDFLAGS=$LDFLAGS
|
|
LDFLAGS="$LDFLAGS -Wl,-zmax-page-size=2097152"
|
|
AC_RUN_IFELSE([AC_LANG_PROGRAM()],
|
|
[php_cv_have_max_page_size=yes],
|
|
[php_cv_have_max_page_size=no],
|
|
[php_cv_have_max_page_size=no])
|
|
LDFLAGS=$save_LDFLAGS])
|
|
AS_VAR_IF([php_cv_have_max_page_size], [yes],
|
|
[EXTRA_LDFLAGS_PROGRAM="$EXTRA_LDFLAGS_PROGRAM -Wl,-zmax-page-size=2097152"])
|
|
])
|
|
])
|
|
|
|
enable_shared=yes
|
|
enable_static=yes
|
|
|
|
case $php_sapi_module in
|
|
shared[)]
|
|
if test "$PHP_CGI" = "no" && test "$PHP_CLI" = "no" && test "$PHP_FPM" = "no" && test "$PHP_LITESPEED" = "no" && test "$PHP_PHPDBG" = "no"; then
|
|
enable_static=no
|
|
fi
|
|
case $with_pic in
|
|
yes)
|
|
standard_libtool_flag='-prefer-pic'
|
|
;;
|
|
no)
|
|
standard_libtool_flag='-prefer-non-pic'
|
|
;;
|
|
esac
|
|
EXTRA_LDFLAGS="$EXTRA_LDFLAGS -avoid-version -module"
|
|
;;
|
|
*[)]
|
|
standard_libtool_flag='-prefer-non-pic -static'
|
|
if test -z "$PHP_MODULES" && test -z "$PHP_ZEND_EX"; then
|
|
enable_shared=no
|
|
fi
|
|
;;
|
|
esac
|
|
|
|
EXTRA_LIBS="$EXTRA_LIBS $DLIBS $LIBS"
|
|
|
|
dnl This has to be here to prevent the openssl crypt() from overriding the
|
|
dnl system provided crypt().
|
|
if test "$ac_cv_lib_crypt_crypt" = "yes"; then
|
|
EXTRA_LIBS="-lcrypt $EXTRA_LIBS -lcrypt"
|
|
fi
|
|
|
|
unset LIBS
|
|
|
|
dnl PEAR
|
|
dnl ----------------------------------------------------------------------------
|
|
|
|
PHP_HELP_SEPARATOR([PEAR:])
|
|
PHP_CONFIGURE_PART(Configuring PEAR)
|
|
|
|
dnl If CLI is disabled disable PEAR.
|
|
if test "$PHP_CLI" = "no"; then
|
|
with_pear=no
|
|
fi
|
|
|
|
PHP_ARG_WITH([pear],
|
|
[whether to install PEAR],
|
|
[AS_HELP_STRING([[--with-pear[=DIR]]],
|
|
[Install PEAR in DIR [PREFIX/lib/php]])],
|
|
[no],
|
|
[yes])
|
|
|
|
if test "$PHP_PEAR" != "no"; then
|
|
|
|
dnl PEAR dependencies.
|
|
if test "$PHP_XML" = "no"; then
|
|
pear_error_msg="$pear_error_msg
|
|
PEAR requires XML to be enabled. Add --enable-xml to the configure line. (or --without-pear)"
|
|
fi
|
|
|
|
if test "$pear_error_msg"; then
|
|
AC_MSG_ERROR([$pear_error_msg])
|
|
fi
|
|
|
|
AC_MSG_WARN([The --with-pear option is deprecated])
|
|
|
|
install_pear="install-pear"
|
|
PEAR_INSTALLDIR=$PHP_PEAR
|
|
|
|
if test "$PHP_PEAR" = "yes"; then
|
|
case $PHP_LAYOUT in
|
|
GNU) PEAR_INSTALLDIR=$datadir/pear;;
|
|
*) PEAR_INSTALLDIR=$libdir/php;;
|
|
esac
|
|
fi
|
|
|
|
PHP_SUBST([PEAR_INSTALLDIR])
|
|
PHP_ADD_BUILD_DIR([pear])
|
|
PHP_ADD_MAKEFILE_FRAGMENT($abs_srcdir/pear/Makefile.frag,$abs_srcdir/pear,pear)
|
|
fi
|
|
|
|
dnl Configuring Zend and TSRM.
|
|
dnl ----------------------------------------------------------------------------
|
|
|
|
PHP_HELP_SEPARATOR([Zend:])
|
|
PHP_CONFIGURE_PART(Configuring Zend)
|
|
|
|
AC_ARG_ENABLE([fiber-asm],
|
|
[AS_HELP_STRING([--disable-fiber-asm],
|
|
[Disable the use of boost fiber assembly files])],
|
|
[fiber_asm=$enableval], [fiber_asm='yes'])
|
|
|
|
AS_CASE([$host_cpu],
|
|
[x86_64*|amd64*], [fiber_cpu="x86_64"],
|
|
[x86*|amd*|i?86*|pentium], [fiber_cpu="i386"],
|
|
[aarch64*|arm64*], [fiber_cpu="arm64"],
|
|
[arm*], [fiber_cpu="arm32"],
|
|
[ppc64*|powerpc64*], [fiber_cpu="ppc64"],
|
|
[ppc*|powerpc*], [fiber_cpu="ppc32"],
|
|
[riscv64*], [fiber_cpu="riscv64"],
|
|
[sparc64], [fiber_cpu="sparc64"],
|
|
[s390x*], [fiber_cpu="s390x"],
|
|
[loongarch64*], [fiber_cpu="loongarch64"],
|
|
[mips64*], [fiber_cpu="mips64"],
|
|
[mips*], [fiber_cpu="mips32"],
|
|
[fiber_cpu="unknown"]
|
|
)
|
|
|
|
AS_CASE([$host_os],
|
|
[darwin*], [fiber_os="mac"],
|
|
[aix*|os400*], [fiber_os="aix"],
|
|
[freebsd*], [fiber_os="freebsd"],
|
|
[midipix], [fiber_os="midipix"],
|
|
[fiber_os="other"]
|
|
)
|
|
|
|
AS_CASE([$fiber_cpu],
|
|
[x86_64], [fiber_asm_file_prefix="x86_64_sysv"],
|
|
[i386], [fiber_asm_file_prefix="i386_sysv"],
|
|
[arm64], [fiber_asm_file_prefix="arm64_aapcs"],
|
|
[arm32], [fiber_asm_file_prefix="arm_aapcs"],
|
|
[ppc64], [fiber_asm_file_prefix="ppc64_sysv"],
|
|
[ppc32], [fiber_asm_file_prefix="ppc32_sysv"],
|
|
[riscv64], [fiber_asm_file_prefix="riscv64_sysv"],
|
|
[sparc64], [fiber_asm_file_prefix="sparc64_sysv"],
|
|
[s390x], [fiber_asm_file_prefix="s390x_sysv"],
|
|
[loongarch64], [fiber_asm_file_prefix="loongarch64_sysv"],
|
|
[mips64], [fiber_asm_file_prefix="mips64_n64"],
|
|
[mips32], [fiber_asm_file_prefix="mips32_o32"],
|
|
[fiber_asm_file_prefix="unknown"]
|
|
)
|
|
|
|
if test "$fiber_os" = 'mac'; then
|
|
fiber_asm_file="combined_sysv_macho_gas"
|
|
elif test "$fiber_os" = 'aix'; then
|
|
# AIX uses a different calling convention (shared with non-_CALL_ELF Linux).
|
|
# The AIX assembler isn't GNU, but the file is compatible.
|
|
fiber_asm_file="${fiber_asm_file_prefix}_xcoff_gas"
|
|
elif test "$fiber_os" = 'freebsd'; then
|
|
case $fiber_cpu in
|
|
i386*)
|
|
fiber_asm="no"
|
|
;;
|
|
*)
|
|
fiber_asm_file="${fiber_asm_file_prefix}_elf_gas"
|
|
;;
|
|
esac
|
|
elif test "$fiber_os" = 'midipix'; then
|
|
case $fiber_cpu in
|
|
i386*)
|
|
fiber_asm="no"
|
|
;;
|
|
x86_64)
|
|
fiber_asm_file="x86_64_ms_pe_gas"
|
|
;;
|
|
esac
|
|
elif test "$fiber_asm_file_prefix" != 'unknown'; then
|
|
fiber_asm_file="${fiber_asm_file_prefix}_elf_gas"
|
|
else
|
|
fiber_asm="no"
|
|
fi
|
|
|
|
AC_CACHE_CHECK([whether syscall to create shadow stack exists],
|
|
[php_cv_have_shadow_stack_syscall],
|
|
[AC_RUN_IFELSE([AC_LANG_SOURCE([
|
|
#include <unistd.h>
|
|
#include <sys/mman.h>
|
|
int main(void) {
|
|
/* test if syscall 451, i.e., map_shadow_stack is available */
|
|
void* base = (void *)syscall(451, 0, 0x20000, 0x1);
|
|
if (base != (void*)-1) {
|
|
munmap(base, 0x20000);
|
|
return 0;
|
|
}
|
|
return 1;
|
|
}
|
|
])],
|
|
[php_cv_have_shadow_stack_syscall=yes],
|
|
[php_cv_have_shadow_stack_syscall=no],
|
|
[php_cv_have_shadow_stack_syscall=no])
|
|
])
|
|
dnl The asm files can't see macro from AC_DEFINE, workaround this via cflag. If
|
|
dnl the syscall doesn't exist, we may block the final ELF from __PROPERTY_SHSTK
|
|
dnl via redefine macro as "-D__CET__=1".
|
|
AS_VAR_IF([php_cv_have_shadow_stack_syscall], [yes],
|
|
[fiber_asm_cflag="-DSHADOW_STACK_SYSCALL=1"],
|
|
[fiber_asm_cflag="-DSHADOW_STACK_SYSCALL=0"])
|
|
|
|
if test "$fiber_asm" = 'yes'; then
|
|
AC_MSG_CHECKING([for fiber switching context])
|
|
PHP_ADD_SOURCES(Zend/asm, make_${fiber_asm_file}.S jump_${fiber_asm_file}.S, "$fiber_asm_cflag")
|
|
AC_MSG_RESULT([$fiber_asm_file])
|
|
else
|
|
if test "$fiber_os" = 'mac'; then
|
|
AC_DEFINE([_XOPEN_SOURCE], 1, [ ])
|
|
fi
|
|
AC_CHECK_HEADER(ucontext.h, [
|
|
AC_DEFINE([ZEND_FIBER_UCONTEXT], 1, [ ])
|
|
], [
|
|
AC_MSG_ERROR([fibers not available on this platform])
|
|
])
|
|
fi
|
|
|
|
LIBZEND_BASIC_CHECKS
|
|
LIBZEND_DLSYM_CHECK
|
|
LIBZEND_OTHER_CHECKS
|
|
|
|
PHP_ADD_INCLUDE([$abs_srcdir], [1])
|
|
PHP_ADD_INCLUDE([$abs_srcdir/main], [1])
|
|
PHP_ADD_INCLUDE([$abs_builddir], [1])
|
|
PHP_ADD_INCLUDE([$abs_builddir/main], [1])
|
|
PHP_ADD_INCLUDE([$abs_builddir/TSRM])
|
|
PHP_ADD_INCLUDE([$abs_builddir/Zend])
|
|
PHP_ADD_INCLUDE([$abs_srcdir/Zend])
|
|
PHP_ADD_INCLUDE([$abs_srcdir/TSRM])
|
|
|
|
ZEND_EXTRA_LIBS="$LIBS"
|
|
unset LIBS
|
|
|
|
PHP_CONFIGURE_PART(Configuring TSRM)
|
|
if test "$PHP_THREAD_SAFETY" = "yes"; then
|
|
TSRM_CHECK_PTHREADS
|
|
fi
|
|
|
|
EXTRA_LDFLAGS="$EXTRA_LDFLAGS $LDFLAGS"
|
|
EXTRA_LDFLAGS_PROGRAM="$EXTRA_LDFLAGS_PROGRAM $LDFLAGS"
|
|
EXTRA_LIBS="$EXTRA_LIBS $LIBS"
|
|
unset LIBS LDFLAGS
|
|
|
|
AC_ARG_PROGRAM
|
|
|
|
test "$prefix" = "NONE" && prefix=/usr/local
|
|
test "$exec_prefix" = "NONE" && exec_prefix='${prefix}'
|
|
test "$program_prefix" = "NONE" && program_prefix=
|
|
test "$program_suffix" = "NONE" && program_suffix=
|
|
|
|
orig_libdir=$libdir
|
|
case $libdir in
|
|
'${exec_prefix}/lib')
|
|
libdir=$libdir/php
|
|
;;
|
|
esac
|
|
case `eval echo $datadir` in
|
|
'${prefix}/share')
|
|
datadir=$datadir/php
|
|
;;
|
|
esac
|
|
|
|
phptempdir=`pwd`/libs
|
|
|
|
old_exec_prefix=$exec_prefix
|
|
old_libdir=$libdir
|
|
old_datadir=$datadir
|
|
exec_prefix=`eval echo $exec_prefix`
|
|
libdir=`eval echo $libdir`
|
|
datadir=`eval eval echo $datadir`
|
|
|
|
dnl Build extension directory path.
|
|
ZEND_MODULE_API_NO=`$EGREP '#define ZEND_MODULE_API_NO ' $srcdir/Zend/zend_modules.h|"${SED}" 's/#define ZEND_MODULE_API_NO //'`
|
|
|
|
if test -z "$EXTENSION_DIR"; then
|
|
extbasedir=$ZEND_MODULE_API_NO
|
|
if test "$oldstyleextdir" = "yes"; then
|
|
if test "$PHP_DEBUG" = "1"; then
|
|
part1=debug
|
|
else
|
|
part1=no-debug
|
|
fi
|
|
if test "$enable_zts" = "yes"; then
|
|
part2=zts
|
|
else
|
|
part2=non-zts
|
|
fi
|
|
extbasedir=$part1-$part2-$extbasedir
|
|
EXTENSION_DIR=$libdir/extensions/$extbasedir
|
|
else
|
|
if test "$enable_zts" = "yes"; then
|
|
extbasedir=$extbasedir-zts
|
|
fi
|
|
|
|
if test "$PHP_DEBUG" = "1"; then
|
|
extbasedir=$extbasedir-debug
|
|
fi
|
|
EXTENSION_DIR=$libdir/$extbasedir
|
|
fi
|
|
fi
|
|
|
|
case $PHP_LAYOUT in
|
|
GNU)
|
|
datarootdir=$prefix/share
|
|
;;
|
|
*)
|
|
datarootdir=$prefix/php
|
|
;;
|
|
esac
|
|
|
|
dnl Expand all directory names for use in macros/constants.
|
|
EXPANDED_PEAR_INSTALLDIR=`eval echo $PEAR_INSTALLDIR`
|
|
EXPANDED_EXTENSION_DIR=`eval echo $EXTENSION_DIR`
|
|
EXPANDED_LOCALSTATEDIR=`eval echo $localstatedir`
|
|
EXPANDED_BINDIR=`eval echo $bindir`
|
|
EXPANDED_SBINDIR=`eval echo $sbindir`
|
|
EXPANDED_MANDIR=`eval echo $mandir`
|
|
EXPANDED_LIBDIR=$libdir
|
|
EXPANDED_SYSCONFDIR=`eval echo $sysconfdir`
|
|
EXPANDED_DATADIR=$datadir
|
|
EXPANDED_PHP_CONFIG_FILE_PATH=`eval echo "$PHP_CONFIG_FILE_PATH"`
|
|
EXPANDED_PHP_CONFIG_FILE_SCAN_DIR=`eval echo "$PHP_CONFIG_FILE_SCAN_DIR"`
|
|
INCLUDE_PATH=.:$EXPANDED_PEAR_INSTALLDIR
|
|
|
|
exec_prefix=$old_exec_prefix
|
|
libdir=$old_libdir
|
|
datadir=$old_datadir
|
|
|
|
AC_SUBST(INCLUDE_PATH)
|
|
AC_SUBST(EXPANDED_PEAR_INSTALLDIR)
|
|
AC_SUBST(EXPANDED_EXTENSION_DIR)
|
|
AC_SUBST(EXPANDED_BINDIR)
|
|
AC_SUBST(EXPANDED_SBINDIR)
|
|
AC_SUBST(EXPANDED_MANDIR)
|
|
AC_SUBST(EXPANDED_LIBDIR)
|
|
AC_SUBST(EXPANDED_DATADIR)
|
|
AC_SUBST(EXPANDED_SYSCONFDIR)
|
|
AC_SUBST(EXPANDED_LOCALSTATEDIR)
|
|
AC_SUBST(EXPANDED_PHP_CONFIG_FILE_PATH)
|
|
AC_SUBST(EXPANDED_PHP_CONFIG_FILE_SCAN_DIR)
|
|
AC_SUBST([PHP_INSTALLED_SAPIS])
|
|
AC_SUBST([SAPI_LIBNAME_SHARED])
|
|
AC_SUBST([SAPI_LIBNAME_STATIC])
|
|
|
|
PHP_UTILIZE_RPATHS
|
|
|
|
PHP_REMOVE_USR_LIB(PHP_LDFLAGS)
|
|
PHP_REMOVE_USR_LIB(LDFLAGS)
|
|
|
|
EXTRA_LDFLAGS="$EXTRA_LDFLAGS $PHP_LDFLAGS"
|
|
EXTRA_LDFLAGS_PROGRAM="$EXTRA_LDFLAGS_PROGRAM $PHP_LDFLAGS"
|
|
|
|
UNAME=`uname -a | xargs`
|
|
PHP_UNAME=${PHP_UNAME:-$UNAME}
|
|
AC_DEFINE_UNQUOTED(PHP_UNAME,"$PHP_UNAME",[uname -a output])
|
|
PHP_OS=`uname | xargs`
|
|
AC_DEFINE_UNQUOTED(PHP_OS,"$PHP_OS",[uname output])
|
|
PHP_BUILD_SYSTEM=${PHP_BUILD_SYSTEM:-$PHP_UNAME}
|
|
AC_DEFINE_UNQUOTED(PHP_BUILD_SYSTEM,"$PHP_BUILD_SYSTEM",[builder uname output])
|
|
if test -n "${PHP_BUILD_PROVIDER}"; then
|
|
AC_DEFINE_UNQUOTED(PHP_BUILD_PROVIDER,"$PHP_BUILD_PROVIDER",[build provider])
|
|
fi
|
|
if test -n "${PHP_BUILD_COMPILER}"; then
|
|
AC_DEFINE_UNQUOTED(PHP_BUILD_COMPILER,"$PHP_BUILD_COMPILER",[used compiler for build])
|
|
fi
|
|
if test -n "${PHP_BUILD_ARCH}"; then
|
|
AC_DEFINE_UNQUOTED(PHP_BUILD_ARCH,"$PHP_BUILD_ARCH",[build architecture])
|
|
fi
|
|
|
|
PHP_SUBST(PHP_FASTCGI_OBJS)
|
|
PHP_SUBST(PHP_SAPI_OBJS)
|
|
PHP_SUBST(PHP_BINARY_OBJS)
|
|
PHP_SUBST(PHP_GLOBAL_OBJS)
|
|
|
|
PHP_SUBST(PHP_BINARIES)
|
|
PHP_SUBST(PHP_MODULES)
|
|
PHP_SUBST(PHP_ZEND_EX)
|
|
|
|
PHP_SUBST_OLD(abs_builddir)
|
|
PHP_SUBST_OLD(abs_srcdir)
|
|
|
|
PHP_SUBST(bindir)
|
|
PHP_SUBST(sbindir)
|
|
PHP_SUBST(exec_prefix)
|
|
PHP_SUBST_OLD(program_prefix)
|
|
PHP_SUBST_OLD(program_suffix)
|
|
PHP_SUBST(includedir)
|
|
PHP_SUBST_OLD(orig_libdir)
|
|
PHP_SUBST(libdir)
|
|
PHP_SUBST(mandir)
|
|
PHP_SUBST(phptempdir)
|
|
PHP_SUBST(prefix)
|
|
PHP_SUBST(localstatedir)
|
|
PHP_SUBST(datadir)
|
|
PHP_SUBST(datarootdir)
|
|
PHP_SUBST(sysconfdir)
|
|
|
|
PHP_SUBST(EXEEXT)
|
|
PHP_SUBST(CC)
|
|
PHP_SUBST(BUILD_CC)
|
|
PHP_SUBST(CFLAGS)
|
|
PHP_SUBST(CFLAGS_CLEAN)
|
|
PHP_SUBST(CPP)
|
|
PHP_SUBST(CPPFLAGS)
|
|
PHP_SUBST(CXX)
|
|
PHP_SUBST(CXXFLAGS)
|
|
PHP_SUBST(CXXFLAGS_CLEAN)
|
|
PHP_SUBST_OLD(DEBUG_CFLAGS)
|
|
PHP_SUBST_OLD(EXTENSION_DIR)
|
|
PHP_SUBST_OLD(EXTRA_LDFLAGS)
|
|
PHP_SUBST_OLD(EXTRA_LDFLAGS_PROGRAM)
|
|
PHP_SUBST_OLD(EXTRA_LIBS)
|
|
PHP_SUBST_OLD(ZEND_EXTRA_LIBS)
|
|
PHP_SUBST_OLD(INCLUDES)
|
|
PHP_SUBST_OLD(EXTRA_INCLUDES)
|
|
PHP_SUBST_OLD(INSTALL_IT)
|
|
PHP_SUBST(LIBTOOL)
|
|
PHP_SUBST(LN_S)
|
|
PHP_SUBST_OLD(NATIVE_RPATHS)
|
|
PHP_SUBST_OLD(PHP_LDFLAGS)
|
|
PHP_SUBST(OVERALL_TARGET)
|
|
PHP_SUBST(PHP_RPATHS)
|
|
PHP_SUBST(PHP_SAPI)
|
|
PHP_SUBST_OLD(PHP_VERSION)
|
|
PHP_SUBST_OLD(PHP_VERSION_ID)
|
|
PHP_SUBST(SHELL)
|
|
PHP_SUBST(PHP_FRAMEWORKS)
|
|
PHP_SUBST(PHP_FRAMEWORKPATH)
|
|
PHP_SUBST(INSTALL_HEADERS)
|
|
|
|
old_CC=$CC
|
|
|
|
if test "$PHP_THREAD_SAFETY" = "yes" && test -n "$ac_cv_pthreads_cflags"; then
|
|
CXXFLAGS="$CXXFLAGS $ac_cv_pthreads_cflags"
|
|
CPPFLAGS="$CPPFLAGS $ac_cv_pthreads_cflags"
|
|
fi
|
|
|
|
dnl Enable -Werror late, because it may break configure checks throwing warnings.
|
|
if test "$PHP_WERROR" = "yes"; then
|
|
CFLAGS="$CFLAGS -Werror"
|
|
CXXFLAGS="$CXXFLAGS -Werror"
|
|
fi
|
|
|
|
if test "$PHP_MEMORY_SANITIZER" = "yes" &&
|
|
test "$PHP_ADDRESS_SANITIZER" = "yes"; then
|
|
AC_MSG_ERROR([MemorySanitizer and AddressSanitizer are mutually exclusive])
|
|
fi
|
|
|
|
dnl Enable -fsanitize=memory late, because interceptors may break linking detection.
|
|
if test "$PHP_MEMORY_SANITIZER" = "yes"; then
|
|
AX_CHECK_COMPILE_FLAG([-fsanitize=memory -fsanitize-memory-track-origins], [
|
|
CFLAGS="$CFLAGS -fsanitize=memory -fsanitize-memory-track-origins"
|
|
CXXFLAGS="$CXXFLAGS -fsanitize=memory -fsanitize-memory-track-origins"
|
|
], [AC_MSG_ERROR([MemorySanitizer is not available])])
|
|
fi
|
|
|
|
if test "$PHP_ADDRESS_SANITIZER" = "yes"; then
|
|
AX_CHECK_COMPILE_FLAG([-fsanitize=address], [
|
|
CFLAGS="$CFLAGS -fsanitize=address -DZEND_TRACK_ARENA_ALLOC"
|
|
CXXFLAGS="$CXXFLAGS -fsanitize=address -DZEND_TRACK_ARENA_ALLOC"
|
|
], [AC_MSG_ERROR([AddressSanitizer is not available])])
|
|
fi
|
|
|
|
if test "$PHP_UNDEFINED_SANITIZER" = "yes"; then
|
|
AX_CHECK_COMPILE_FLAG([-fsanitize=undefined], [
|
|
CFLAGS="$CFLAGS -fsanitize=undefined -fno-sanitize-recover=undefined"
|
|
CXXFLAGS="$CXXFLAGS -fsanitize=undefined -fno-sanitize-recover=undefined"
|
|
AX_CHECK_COMPILE_FLAG([-fno-sanitize=object-size], [
|
|
dnl Disable object-size sanitizer, because it is incompatible with our zend_function
|
|
dnl union, and this can't be easily fixed.
|
|
CFLAGS="$CFLAGS -fno-sanitize=object-size"
|
|
CXXFLAGS="$CFLAGS -fno-sanitize=object-size"
|
|
])
|
|
|
|
dnl Clang 17 adds stricter function pointer compatibility checks where pointer args cannot be
|
|
dnl cast to void*. In that case, set -fno-sanitize=function.
|
|
OLD_CFLAGS="$CFLAGS"
|
|
CFLAGS="$CFLAGS -fno-sanitize-recover=undefined"
|
|
AC_CACHE_CHECK([whether to add -fno-sanitize=function],[php_cv_ubsan_no_function],[
|
|
AC_RUN_IFELSE([AC_LANG_SOURCE([[
|
|
void foo(char *string) {}
|
|
int main(void) {
|
|
void (*f)(void *) = (void (*)(void *))foo;
|
|
f("foo");
|
|
}
|
|
]])],[php_cv_ubsan_no_function=no],[php_cv_ubsan_no_function=yes],[php_cv_ubsan_no_function=no])])
|
|
CFLAGS="$OLD_CFLAGS"
|
|
if test "$php_cv_ubsan_no_function" = yes; then
|
|
CFLAGS="$CFLAGS -fno-sanitize=function"
|
|
CXXFLAGS="$CFLAGS -fno-sanitize=function"
|
|
fi
|
|
], [AC_MSG_ERROR([UndefinedBehaviorSanitizer is not available])])
|
|
fi
|
|
|
|
if test "$PHP_MEMORY_SANITIZER" = "yes" ||
|
|
test "$PHP_ADDRESS_SANITIZER" = "yes" ||
|
|
test "$PHP_UNDEFINED_SANITIZER" = "yes"; then
|
|
CFLAGS="$CFLAGS -fno-omit-frame-pointer"
|
|
CXXFLAGS="$CXXFLAGS -fno-omit-frame-pointer"
|
|
fi
|
|
|
|
dnl
|
|
dnl Libtool creation.
|
|
dnl
|
|
|
|
PHP_HELP_SEPARATOR([Libtool:])
|
|
PHP_CONFIGURE_PART(Configuring libtool)
|
|
|
|
dnl Silence warning: `ar: 'u' modifier ignored since 'D' is the default`
|
|
dnl See https://github.com/php/php-src/pull/3017
|
|
AC_SUBST(AR_FLAGS, [cr])
|
|
|
|
dnl Only allow AC_PROG_CXX and AC_PROG_CXXCPP if they are explicitly called (by
|
|
dnl PHP_REQUIRE_CXX). Otherwise AC_PROG_LIBTOOL fails if there is no working C++
|
|
dnl compiler.
|
|
AC_PROVIDE_IFELSE([PHP_REQUIRE_CXX], [], [
|
|
undefine([AC_PROG_CXX])
|
|
AC_DEFUN([AC_PROG_CXX], [])
|
|
undefine([AC_PROG_CXXCPP])
|
|
AC_DEFUN([AC_PROG_CXXCPP], [php_prog_cxxcpp=disabled])
|
|
])
|
|
AC_PROG_LIBTOOL
|
|
|
|
PHP_SET_LIBTOOL_VARIABLE([--silent])
|
|
|
|
dnl libtool 1.4.3 needs this.
|
|
PHP_SET_LIBTOOL_VARIABLE([--preserve-dup-deps])
|
|
|
|
CC=$old_CC
|
|
|
|
PHP_CONFIGURE_PART(Generating files)
|
|
|
|
CXXFLAGS_CLEAN=$CXXFLAGS
|
|
CFLAGS_CLEAN="$CFLAGS \$(PROF_FLAGS)"
|
|
CFLAGS="\$(CFLAGS_CLEAN) $standard_libtool_flag"
|
|
CXXFLAGS="$CXXFLAGS $standard_libtool_flag \$(PROF_FLAGS)"
|
|
|
|
if test "$PHP_PHAR" != "no" && test "$PHP_CLI" != "no"; then
|
|
pharcmd=pharcmd
|
|
pharcmd_install=install-pharcmd
|
|
else
|
|
pharcmd=
|
|
pharcmd_install=
|
|
fi;
|
|
|
|
all_targets="\$(OVERALL_TARGET) \$(PHP_MODULES) \$(PHP_ZEND_EX) \$(PHP_BINARIES) $pharcmd"
|
|
install_targets="$install_sapi $install_modules $install_binaries install-build install-headers install-programs $install_pear $pharcmd_install"
|
|
|
|
PHP_SUBST(all_targets)
|
|
PHP_SUBST(install_targets)
|
|
PHP_SUBST(install_binary_targets)
|
|
|
|
PHP_INSTALL_HEADERS([Zend/ TSRM/ main/ main/streams/])
|
|
PHP_INSTALL_HEADERS([Zend/Optimizer], [ \
|
|
zend_call_graph.h \
|
|
zend_cfg.h \
|
|
zend_dfg.h \
|
|
zend_dump.h \
|
|
zend_func_info.h \
|
|
zend_inference.h \
|
|
zend_optimizer.h \
|
|
zend_ssa.h \
|
|
zend_worklist.h])
|
|
|
|
PHP_ADD_SOURCES(TSRM, TSRM.c, -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1)
|
|
|
|
PHP_ADD_SOURCES(main, main.c snprintf.c spprintf.c \
|
|
fopen_wrappers.c php_scandir.c \
|
|
php_ini_builder.c \
|
|
php_ini.c SAPI.c rfc1867.c php_content_types.c strlcpy.c \
|
|
strlcat.c explicit_bzero.c reentrancy.c php_variables.c php_ticks.c \
|
|
network.c php_open_temporary_file.c php_odbc_utils.c safe_bcmp.c \
|
|
output.c getopt.c php_syslog.c, -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1)
|
|
|
|
if printf "#if __ELF__\nelf\n#endif\n" | $CC -E - | grep elf > /dev/null; then
|
|
PHP_ADD_SOURCES(main, debug_gdb_scripts.c)
|
|
|
|
cat >> Makefile.objects <<EOF
|
|
$abs_srcdir/main/debug_gdb_scripts.c: $abs_srcdir/scripts/gdb/debug_gdb_scripts_gen.php $abs_srcdir/scripts/gdb/php_gdb.py $abs_srcdir/.gdbinit
|
|
@if test ! -z "\$(PHP)"; then \\
|
|
\$(PHP) $abs_srcdir/scripts/gdb/debug_gdb_scripts_gen.php; \\
|
|
fi;
|
|
EOF
|
|
fi
|
|
|
|
PHP_ADD_SOURCES_X(main, fastcgi.c, -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1, PHP_FASTCGI_OBJS, no)
|
|
|
|
PHP_ADD_SOURCES(main/streams, streams.c cast.c memory.c filter.c \
|
|
plain_wrapper.c userspace.c transports.c xp_socket.c mmap.c \
|
|
glob_wrapper.c, -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1)
|
|
|
|
PHP_ADD_SOURCES(/main, internal_functions.c, -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1, sapi)
|
|
PHP_ADD_SOURCES_X(/main, internal_functions_cli.c, -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1, PHP_BINARY_OBJS)
|
|
|
|
PHP_ADD_SOURCES([Zend], [m4_normalize([
|
|
Optimizer/block_pass.c
|
|
Optimizer/compact_literals.c
|
|
Optimizer/compact_vars.c
|
|
Optimizer/dce.c
|
|
Optimizer/dfa_pass.c
|
|
Optimizer/escape_analysis.c
|
|
Optimizer/nop_removal.c
|
|
Optimizer/optimize_func_calls.c
|
|
Optimizer/optimize_temp_vars_5.c
|
|
Optimizer/pass1.c
|
|
Optimizer/pass3.c
|
|
Optimizer/sccp.c
|
|
Optimizer/scdf.c
|
|
Optimizer/zend_call_graph.c
|
|
Optimizer/zend_cfg.c
|
|
Optimizer/zend_dfg.c
|
|
Optimizer/zend_dump.c
|
|
Optimizer/zend_func_info.c
|
|
Optimizer/zend_inference.c
|
|
Optimizer/zend_optimizer.c
|
|
Optimizer/zend_ssa.c
|
|
zend_alloc.c
|
|
zend_API.c
|
|
zend_ast.c
|
|
zend_atomic.c
|
|
zend_attributes.c
|
|
zend_builtin_functions.c
|
|
zend_call_stack.c
|
|
zend_closures.c
|
|
zend_compile.c
|
|
zend_constants.c
|
|
zend_cpuinfo.c
|
|
zend_default_classes.c
|
|
zend_dtrace.c
|
|
zend_enum.c
|
|
zend_exceptions.c
|
|
zend_execute_API.c
|
|
zend_execute.c
|
|
zend_extensions.c
|
|
zend_fibers.c
|
|
zend_float.c
|
|
zend_frameless_function.c
|
|
zend_gc.c
|
|
zend_gdb.c
|
|
zend_generators.c
|
|
zend_hash.c
|
|
zend_highlight.c
|
|
zend_hrtime.c
|
|
zend_inheritance.c
|
|
zend_ini_parser.c
|
|
zend_ini_scanner.c
|
|
zend_ini.c
|
|
zend_interfaces.c
|
|
zend_iterators.c
|
|
zend_language_parser.c
|
|
zend_language_scanner.c
|
|
zend_list.c
|
|
zend_llist.c
|
|
zend_max_execution_timer.c
|
|
zend_multibyte.c
|
|
zend_object_handlers.c
|
|
zend_objects_API.c
|
|
zend_objects.c
|
|
zend_observer.c
|
|
zend_opcode.c
|
|
zend_operators.c
|
|
zend_ptr_stack.c
|
|
zend_signal.c
|
|
zend_smart_str.c
|
|
zend_sort.c
|
|
zend_stack.c
|
|
zend_stream.c
|
|
zend_string.c
|
|
zend_strtod.c
|
|
zend_system_id.c
|
|
zend_variables.c
|
|
zend_virtual_cwd.c
|
|
zend_vm_opcodes.c
|
|
zend_weakrefs.c
|
|
zend.c
|
|
])],
|
|
[-DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 $fiber_asm_cflag])
|
|
|
|
PHP_ADD_MAKEFILE_FRAGMENT($abs_srcdir/scripts/Makefile.frag,$abs_srcdir/scripts,scripts)
|
|
PHP_ADD_MAKEFILE_FRAGMENT($abs_srcdir/Zend/Makefile.frag,$abs_srcdir/Zend,Zend)
|
|
|
|
AC_DEFINE([HAVE_BUILD_DEFS_H], 1, [ ])
|
|
|
|
PHP_ADD_BUILD_DIR([m4_normalize([
|
|
main
|
|
main/streams
|
|
scripts
|
|
scripts/man1
|
|
TSRM
|
|
Zend
|
|
Zend/asm
|
|
Zend/Optimizer
|
|
])])
|
|
|
|
ALL_OUTPUT_FILES="main/build-defs.h \
|
|
scripts/phpize scripts/man1/phpize.1 \
|
|
scripts/php-config scripts/man1/php-config.1 \
|
|
$PHP_OUTPUT_FILES"
|
|
|
|
dnl Generate build files.
|
|
AC_CONFIG_FILES([$ALL_OUTPUT_FILES])
|
|
|
|
AC_CONFIG_COMMANDS_PRE([PHP_PATCH_CONFIG_HEADERS([main/php_config.h.in])])
|
|
|
|
AC_CONFIG_COMMANDS([default],[
|
|
cat <<X
|
|
|
|
+--------------------------------------------------------------------+
|
|
| License: |
|
|
| This software is subject to the PHP License, available in this |
|
|
| distribution in the file LICENSE. By continuing this installation |
|
|
| process, you are bound by the terms of this license agreement. |
|
|
| If you do not agree with the terms of this license, you must abort |
|
|
| the installation process at this point. |
|
|
+--------------------------------------------------------------------+
|
|
|
|
Thank you for using PHP.
|
|
|
|
X
|
|
],[
|
|
|
|
if test "\$CONFIG_FILES" = "$ALL_OUTPUT_FILES" || test "\$CONFIG_FILES" = " $ALL_OUTPUT_FILES" || test -z "\$CONFIG_FILES"; then
|
|
REDO_ALL=yes
|
|
fi
|
|
|
|
dnl Create configuration headers.
|
|
dnl ----------------------------------------------------------------------------
|
|
cat >Zend/zend_config.h <<FEO
|
|
#include <../main/php_config.h>
|
|
FEO
|
|
|
|
dnl Run this only when generating all the files.
|
|
if test -n "\$REDO_ALL"; then
|
|
echo "creating main/internal_functions.c"
|
|
AWK="$AWK" sh $srcdir/build/genif.sh $srcdir/main/internal_functions.c.in "$EXT_STATIC" > main/internal_functions.c
|
|
|
|
echo "creating main/internal_functions_cli.c"
|
|
AWK="$AWK" sh $srcdir/build/genif.sh $srcdir/main/internal_functions.c.in "$EXT_CLI_STATIC" > main/internal_functions_cli.c
|
|
|
|
if test "$PHP_SAPI" = "apache2handler"; then
|
|
if test "$APACHE_VERSION" -ge 2004001; then
|
|
if test -z "$APACHE_THREADED_MPM"; then
|
|
cat <<X
|
|
+--------------------------------------------------------------------+
|
|
| *** WARNING *** |
|
|
| |
|
|
| You have built PHP for Apache's current non-threaded MPM. |
|
|
| If you change Apache to use a threaded MPM you must reconfigure |
|
|
| PHP with --enable-zts |
|
|
X
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
fi
|
|
])
|
|
AC_OUTPUT
|