xref: /PHP-8.4/configure.ac (revision f5895792)
1dnl Process this file with autoconf to produce a configure script.
2
3dnl Include external macro definitions before the AC_INIT to also remove
4dnl comments starting with # and empty newlines from the included files.
5dnl ----------------------------------------------------------------------------
6m4_include([build/ax_check_compile_flag.m4])
7m4_include([build/ax_func_which_gethostbyname_r.m4])
8m4_include([build/ax_gcc_func_attribute.m4])
9m4_include([build/libtool.m4])
10m4_include([build/php_cxx_compile_stdcxx.m4])
11m4_include([build/php.m4])
12m4_include([build/pkg.m4])
13m4_include([TSRM/threads.m4])
14m4_include([Zend/Zend.m4])
15
16dnl Basic autoconf initialization, generation of config.nice.
17dnl ----------------------------------------------------------------------------
18
19AC_PREREQ([2.68])
20AC_INIT([PHP],[8.4.0-dev],[https://github.com/php/php-src/issues],[php],[https://www.php.net])
21AC_CONFIG_SRCDIR([main/php_version.h])
22AC_CONFIG_AUX_DIR([build])
23AC_PRESERVE_HELP_ORDER
24
25PHP_CONFIG_NICE([config.nice])
26
27PHP_CANONICAL_HOST_TARGET
28
29AC_CONFIG_HEADERS([main/php_config.h])
30
31AH_TOP([
32#ifndef PHP_CONFIG_H
33#define PHP_CONFIG_H
34
35#if defined(__GNUC__) && __GNUC__ >= 4
36# define ZEND_API __attribute__ ((visibility("default")))
37# define ZEND_DLEXPORT __attribute__ ((visibility("default")))
38#else
39# define ZEND_API
40# define ZEND_DLEXPORT
41#endif
42
43#define ZEND_DLIMPORT
44])
45AH_BOTTOM([
46#include <stdlib.h>
47
48#ifdef HAVE_SYS_TYPES_H
49# include <sys/types.h>
50#endif
51
52#ifdef HAVE_SYS_SELECT_H
53#include <sys/select.h>
54#endif
55
56#include <string.h>
57
58#endif /* PHP_CONFIG_H */
59])
60
61ac_IFS=$IFS; IFS="."
62set $(echo AC_PACKAGE_VERSION | "${SED}" 's/\([[0-9\.]]*\)\(.*\)/\1\.\2/')
63IFS=$ac_IFS
64PHP_MAJOR_VERSION=[$]1
65PHP_MINOR_VERSION=[$]2
66PHP_RELEASE_VERSION=[$]3
67dnl Allow overriding PHP_EXTRA_VERSION through the homonymous env var
68AC_ARG_VAR([PHP_EXTRA_VERSION],
69  [Extra PHP version label suffix, e.g. '-dev', 'rc1', '-acme'])dnl
70AS_VAR_IF([PHP_EXTRA_VERSION],, [PHP_EXTRA_VERSION=[$]4])
71PHP_VERSION="$PHP_MAJOR_VERSION.$PHP_MINOR_VERSION.$PHP_RELEASE_VERSION$PHP_EXTRA_VERSION"
72PHP_VERSION_ID=$(expr [$]PHP_MAJOR_VERSION \* 10000 + [$]PHP_MINOR_VERSION \* 100 + [$]PHP_RELEASE_VERSION)
73
74dnl Allow version values to be used in Makefile.
75PHP_SUBST([PHP_MAJOR_VERSION])
76PHP_SUBST([PHP_MINOR_VERSION])
77PHP_SUBST([PHP_RELEASE_VERSION])
78PHP_SUBST([PHP_EXTRA_VERSION])
79
80dnl Setting up the PHP version based on the information above.
81dnl ----------------------------------------------------------------------------
82
83echo "/* automatically generated by configure */" > php_version.h.new
84echo "/* edit configure.ac to change version number */" >> php_version.h.new
85echo "#define PHP_MAJOR_VERSION $PHP_MAJOR_VERSION" >> php_version.h.new
86echo "#define PHP_MINOR_VERSION $PHP_MINOR_VERSION" >> php_version.h.new
87echo "#define PHP_RELEASE_VERSION $PHP_RELEASE_VERSION" >> php_version.h.new
88echo "#define PHP_EXTRA_VERSION \"$PHP_EXTRA_VERSION\"" >> php_version.h.new
89echo "#define PHP_VERSION \"$PHP_VERSION\"" >> php_version.h.new
90echo "#define PHP_VERSION_ID $PHP_VERSION_ID" >> php_version.h.new
91cmp php_version.h.new $srcdir/main/php_version.h >/dev/null 2>&1
92if test $? -ne 0 ; then
93  rm -f $srcdir/main/php_version.h && mv php_version.h.new $srcdir/main/php_version.h && \
94  echo 'Updated main/php_version.h'
95else
96  rm -f php_version.h.new
97fi
98
99dnl Settings we want to make before the checks.
100dnl ----------------------------------------------------------------------------
101
102PHP_INIT_BUILD_SYSTEM
103
104dnl Because 'make install' is often performed by the superuser, we create the
105dnl libs subdirectory as the user who configures PHP. Otherwise, the current
106dnl user will not be able to delete libs or the contents of libs.
107
108$php_shtool mkdir -p libs
109rm -f libs/*
110
111dnl Checks for programs.
112dnl ----------------------------------------------------------------------------
113
114PKG_PROG_PKG_CONFIG
115AC_PROG_CC([cc gcc])
116PHP_DETECT_ICC
117PHP_DETECT_SUNCC
118
119dnl AC_PROG_CC_C99 is obsolete with autoconf >= 2.70 yet necessary for <= 2.69.
120m4_version_prereq([2.70],,[AC_PROG_CC_C99])
121AC_PROG_CPP
122AC_USE_SYSTEM_EXTENSIONS
123AC_PROG_LN_S
124
125AS_VAR_IF([cross_compiling], [yes],
126  [AC_CHECK_PROGS([BUILD_CC], [gcc clang c99 c89 cc cl], [none])
127    AC_MSG_CHECKING([for native build C compiler])
128    AC_MSG_RESULT([$BUILD_CC])],
129  [BUILD_CC=$CC])
130
131dnl Support systems with system libraries in e.g. /usr/lib64.
132PHP_ARG_WITH([libdir],
133  [for system library directory],
134  [AS_HELP_STRING([--with-libdir=NAME],
135    [Look for libraries in .../NAME rather than .../lib])],
136  [lib],
137  [no])
138
139PHP_ARG_ENABLE([rpath],
140  [whether to enable runpaths],
141  [AS_HELP_STRING([--disable-rpath],
142    [Disable passing additional runtime library search paths])],
143  [yes],
144  [no])
145
146dnl Check for -R, etc. switch.
147PHP_RUNPATH_SWITCH
148
149dnl Checks for some support/generator progs.
150PHP_PROG_BISON([3.0.0])
151PHP_PROG_RE2C([1.0.3], [--no-generation-date])
152dnl Find installed PHP. Minimum supported version for gen_stub.php is PHP 7.4.
153PHP_PROG_PHP([7.4])
154
155PHP_ARG_ENABLE([re2c-cgoto],
156  [whether to enable computed goto extension with re2c],
157  [AS_HELP_STRING([--enable-re2c-cgoto],
158    [Enable re2c -g flag to optimize conditional jumps using computed goto
159    extension, if supported by the compiler])],
160  [no],
161  [no])
162
163AS_VAR_IF([PHP_RE2C_CGOTO], [no],,
164[AC_CACHE_CHECK([whether re2c -g works], [php_cv_have_re2c_cgoto],
165  [AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
166int main(void)
167{
168label1:
169  ;
170label2:
171  ;
172  static void *adr[] = { &&label1, &&label2 };
173  goto *adr[0];
174  return 0;
175}]])],
176  [php_cv_have_re2c_cgoto=yes],
177  [php_cv_have_re2c_cgoto=no])])
178AS_VAR_IF([php_cv_have_re2c_cgoto], [yes],
179  [AS_VAR_APPEND([RE2C_FLAGS], [" -g"])])
180])
181
182dnl Platform-specific compile settings.
183dnl ----------------------------------------------------------------------------
184
185dnl See bug #28605
186case $host_cpu in
187  alpha*)
188    if test "$GCC" = "yes"; then
189      CFLAGS="$CFLAGS -mieee"
190    else
191      CFLAGS="$CFLAGS -ieee"
192    fi
193    ;;
194  sparc*)
195    if test "$SUNCC" = "yes"; then
196      CFLAGS="$CFLAGS -xmemalign=8s"
197    fi
198    ;;
199esac
200
201dnl See https://github.com/php/php-src/issues/14140
202AX_CHECK_COMPILE_FLAG([-ffp-contract=off], [CFLAGS="$CFLAGS -ffp-contract=off"])
203
204dnl Mark symbols hidden by default if the compiler (for example, gcc >= 4)
205dnl supports it. This can help reduce the binary size and startup time.
206AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],
207                       [CFLAGS="$CFLAGS -fvisibility=hidden"])
208
209case $host_alias in
210  *solaris*)
211    CPPFLAGS="$CPPFLAGS -D_POSIX_PTHREAD_SEMANTICS"
212    ;;
213  *hpux*)
214    if test "$GCC" = "yes"; then
215      CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED"
216    fi
217    ;;
218esac
219
220dnl Disable PIC mode by default where it is known to be safe to do so, to avoid
221dnl the performance hit from the lost register.
222AC_MSG_CHECKING([whether to force non-PIC code in shared modules])
223case $host_alias in
224  i?86-*-linux*|i?86-*-freebsd*)
225    if test "${with_pic+set}" != "set" || test "$with_pic" = "no"; then
226      with_pic=no
227      AC_MSG_RESULT([yes])
228    else
229      AC_MSG_RESULT([no])
230    fi
231    ;;
232  *)
233    AC_MSG_RESULT([no])
234    ;;
235esac
236
237dnl Detect musl libc
238AC_MSG_CHECKING([whether we are using musl libc])
239if command -v ldd >/dev/null && ldd --version 2>&1 | grep ^musl >/dev/null 2>&1
240then
241  AC_MSG_RESULT([yes])
242  AC_DEFINE([__MUSL__], [1], [Define to 1 when using musl libc.])
243else
244  AC_MSG_RESULT([no])
245fi
246
247dnl Add _GNU_SOURCE compile definition because the php_config.h with definitions
248dnl by AC_USE_SYSTEM_EXTENSIONS might be included after the system headers which
249dnl require extensions to C and POSIX.
250AS_VAR_APPEND([CPPFLAGS], [" -D_GNU_SOURCE"])
251
252PTHREADS_CHECK
253PHP_HELP_SEPARATOR([SAPI modules:])
254PHP_SHLIB_SUFFIX_NAMES
255PHP_BUILD_PROGRAM
256PHP_SAPI=none
257
258dnl SAPI configuration.
259dnl ----------------------------------------------------------------------------
260
261dnl Paths to the targets are relative to the build directory.
262SAPI_LIBNAME=libphp
263SAPI_LIBNAME_SHARED=$SAPI_LIBNAME.[]$SHLIB_DL_SUFFIX_NAME
264SAPI_LIBNAME_STATIC=$SAPI_LIBNAME.a
265SAPI_SHARED=libs/$SAPI_LIBNAME_SHARED
266SAPI_STATIC=libs/$SAPI_LIBNAME_STATIC
267SAPI_LIBTOOL=libphp.la
268
269PHP_CONFIGURE_PART([Configuring SAPI modules])
270
271esyscmd(./build/config-stubs sapi)
272
273dnl Show which main SAPI was selected.
274AC_MSG_CHECKING([for chosen SAPI module])
275AC_MSG_RESULT([$PHP_SAPI])
276
277dnl Show which binaries were selected.
278AC_MSG_CHECKING([for executable SAPI binaries])
279AS_VAR_IF([PHP_BINARIES],,
280  [AC_MSG_RESULT([none])],
281  [AC_MSG_RESULT([$PHP_BINARIES])])
282
283dnl Exit early.
284AS_VAR_IF([PHP_INSTALLED_SAPIS],, [AC_MSG_ERROR([Nothing to build.])])
285
286dnl Add POSIX threads compilation and linker flags when thread safety is enabled
287dnl with either the '--enable-zts' configure option or automatically enabled by
288dnl PHP SAPIs. For example, Apache SAPI.
289AS_VAR_IF([enable_zts], [yes], [
290  if test -n "$ac_cv_pthreads_lib"; then
291    LIBS="$LIBS -l$ac_cv_pthreads_lib"
292  fi
293  if test -n "$ac_cv_pthreads_cflags"; then
294    CFLAGS="$CFLAGS $ac_cv_pthreads_cflags"
295  fi
296
297  PTHREADS_FLAGS
298])
299
300dnl Starting system checks.
301dnl ----------------------------------------------------------------------------
302
303PHP_CONFIGURE_PART([Running system checks])
304
305dnl Find sendmail binary.
306PHP_PROG_SENDMAIL
307
308dnl Check whether the system uses EBCDIC (not ASCII) as its native codeset.
309PHP_EBCDIC
310
311dnl Check whether the system byte ordering is bigendian.
312PHP_C_BIGENDIAN
313
314dnl Check whether writing to stdout works.
315PHP_TEST_WRITE_STDOUT
316
317dnl Check for /usr/pkg/{lib,include} which is where NetBSD puts binary and
318dnl source packages. This should be harmless on other OSs.
319if test -d /usr/pkg/include && test -d /usr/pkg/lib; then
320   CPPFLAGS="$CPPFLAGS -I/usr/pkg/include"
321   LDFLAGS="$LDFLAGS -L/usr/pkg/lib"
322fi
323test -d /usr/ucblib && PHP_ADD_LIBPATH([/usr/ucblib])
324
325dnl First, library checks.
326dnl ----------------------------------------------------------------------------
327
328AC_SEARCH_LIBS([socket], [socket network])
329
330AC_CHECK_FUNCS([socketpair],,
331  [AC_SEARCH_LIBS([socketpair], [socket network],
332    [AC_DEFINE([HAVE_SOCKETPAIR], [1])])])
333
334AC_SEARCH_LIBS([gethostbyaddr], [nsl network])
335
336AC_SEARCH_LIBS([dlopen], [dl],
337  [AC_DEFINE([HAVE_LIBDL], [1],
338    [Define to 1 if you have the 'dl' library (-ldl).])])
339
340AC_SEARCH_LIBS([sin], [m])
341
342case $host_alias in
343  riscv64*)
344    PHP_CHECK_FUNC(__atomic_exchange_1, atomic)
345    ;;
346esac
347
348dnl Solaris/Illumos for process mapping.
349AC_SEARCH_LIBS([Pgrab], [proc])
350
351dnl Haiku does not have network api in libc.
352AC_SEARCH_LIBS([setsockopt], [network])
353
354dnl Check for openpty. It may require linking against libutil or libbsd.
355AC_CHECK_FUNCS([openpty],,
356  [AC_SEARCH_LIBS([openpty], [util bsd], [AC_DEFINE([HAVE_OPENPTY], [1])])])
357
358dnl Then headers.
359dnl ----------------------------------------------------------------------------
360
361dnl QNX requires unix.h to allow functions in libunix to work properly.
362AC_CHECK_HEADERS(m4_normalize([
363  dirent.h
364  sys/param.h
365  sys/types.h
366  sys/time.h
367  netinet/in.h
368  alloca.h
369  arpa/inet.h
370  arpa/nameser.h
371  dns.h
372  fcntl.h
373  grp.h
374  ieeefp.h
375  langinfo.h
376  linux/sock_diag.h
377  poll.h
378  pty.h
379  pwd.h
380  resolv.h
381  strings.h
382  syslog.h
383  sysexits.h
384  sys/ioctl.h
385  sys/file.h
386  sys/mman.h
387  sys/mount.h
388  sys/poll.h
389  sys/resource.h
390  sys/select.h
391  sys/socket.h
392  sys/stat.h
393  sys/statfs.h
394  sys/statvfs.h
395  sys/vfs.h
396  sys/sysexits.h
397  sys/uio.h
398  sys/wait.h
399  sys/loadavg.h
400  unistd.h
401  unix.h
402  utime.h
403  sys/utsname.h
404  sys/ipc.h
405  dlfcn.h
406  tmmintrin.h
407  nmmintrin.h
408  wmmintrin.h
409  immintrin.h
410]),,, [dnl
411#ifdef HAVE_SYS_PARAM_H
412#include <sys/param.h>
413#endif
414#ifdef HAVE_SYS_TYPES_H
415#include <sys/types.h>
416#endif
417#ifdef HAVE_SYS_TIME_H
418#include <sys/time.h>
419#endif
420#ifdef HAVE_NETINET_IN_H
421#include <netinet/in.h>
422#endif
423#ifdef HAVE_ARPA_NAMESER_H
424#include <arpa/nameser.h>
425#endif
426])
427
428PHP_FOPENCOOKIE
429PHP_BROKEN_GETCWD
430AS_VAR_IF([GCC], [yes], [PHP_BROKEN_GCC_STRLEN_OPT])
431
432dnl Detect the headers required to use makedev, major, and minor.
433dnl Autoconf <= 2.69 didn't check glibc 2.25 deprecated macros in sys/types.h.
434m4_version_prereq([2.70],,[ac_cv_header_sys_types_h_makedev=no])
435AC_HEADER_MAJOR
436
437dnl Checks for typedefs, structures, and compiler characteristics.
438dnl ----------------------------------------------------------------------------
439
440AC_STRUCT_TIMEZONE
441
442PHP_MISSING_TIME_R_DECL
443
444AC_CHECK_TYPES([struct flock],,,[#include <fcntl.h>])
445AC_CHECK_TYPES([socklen_t], [], [], [
446  #ifdef HAVE_SYS_TYPES_H
447  # include <sys/types.h>
448  #endif
449  #ifdef HAVE_SYS_SOCKET_H
450  # include <sys/socket.h>
451  #endif
452])
453
454dnl These are defined elsewhere than stdio.h.
455PHP_CHECK_SIZEOF([intmax_t], [0])
456PHP_CHECK_SIZEOF([ssize_t], [8])
457PHP_CHECK_SIZEOF([ptrdiff_t], [8])
458
459dnl Check stdint types (must be after header check).
460PHP_CHECK_STDINT_TYPES
461
462dnl Check GNU C builtins.
463PHP_CHECK_BUILTIN([__builtin_clz])
464PHP_CHECK_BUILTIN([__builtin_clzl])
465PHP_CHECK_BUILTIN([__builtin_clzll])
466PHP_CHECK_BUILTIN([__builtin_cpu_init])
467PHP_CHECK_BUILTIN([__builtin_cpu_supports])
468PHP_CHECK_BUILTIN([__builtin_ctzl])
469PHP_CHECK_BUILTIN([__builtin_ctzll])
470PHP_CHECK_BUILTIN([__builtin_expect])
471PHP_CHECK_BUILTIN([__builtin_frame_address])
472PHP_CHECK_BUILTIN([__builtin_saddl_overflow])
473PHP_CHECK_BUILTIN([__builtin_saddll_overflow])
474PHP_CHECK_BUILTIN([__builtin_smull_overflow])
475PHP_CHECK_BUILTIN([__builtin_smulll_overflow])
476PHP_CHECK_BUILTIN([__builtin_ssubl_overflow])
477PHP_CHECK_BUILTIN([__builtin_ssubll_overflow])
478PHP_CHECK_BUILTIN([__builtin_unreachable])
479PHP_CHECK_BUILTIN([__builtin_usub_overflow])
480
481dnl Check AVX512
482PHP_CHECK_AVX512_SUPPORTS
483dnl Check AVX512 VBMI
484PHP_CHECK_AVX512_VBMI_SUPPORTS
485
486dnl Check for __alignof__ support in the compiler
487AC_CACHE_CHECK([whether the compiler supports __alignof__],
488[php_cv_have_alignof],
489[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [
490  int align = __alignof__(int);
491  (void)align;
492])],
493[php_cv_have_alignof=yes],
494[php_cv_have_alignof=no])])
495AS_VAR_IF([php_cv_have_alignof], [yes],
496  [AC_DEFINE([HAVE_ALIGNOF], [1],
497    [Define to 1 if the compiler supports '__alignof__'.])])
498
499dnl Check for structure members.
500AC_CHECK_MEMBERS([struct tm.tm_gmtoff],,,[#include <time.h>])
501AC_CHECK_MEMBERS([struct stat.st_blksize, struct stat.st_rdev])
502dnl AC_STRUCT_ST_BLOCKS will screw QNX because fileblocks.o does not exist.
503if test "$(uname -s 2>/dev/null)" != "QNX"; then
504  AC_STRUCT_ST_BLOCKS
505fi
506
507dnl Checks for types.
508AC_TYPE_UID_T
509
510dnl Checks for sockaddr_storage and sockaddr.sa_len.
511AC_CHECK_TYPES([struct sockaddr_storage],,,[#include <sys/socket.h>])
512AC_CHECK_MEMBERS([struct sockaddr.sa_len],,,[#include <sys/socket.h>])
513
514dnl Checks for GCC function attributes on all systems except ones without glibc
515dnl Fix for these systems is already included in GCC 7, but not on GCC 6.
516dnl
517dnl At least some versions of FreeBSD seem to have buggy ifunc support, see
518dnl bug #77284. Conservatively don't use ifuncs on FreeBSD prior to version 12.
519AS_CASE([$host_alias], [*-*-*android*|*-*-*uclibc*|*-*-*musl*|*openbsd*], [true], [
520  if test "$(uname -s 2>/dev/null)" != "FreeBSD" || test "$(uname -U 2>/dev/null)" -ge 1200000; then
521    AX_GCC_FUNC_ATTRIBUTE([ifunc])
522    AX_GCC_FUNC_ATTRIBUTE([target])
523  fi
524])
525
526dnl Check for __attribute__ ((__aligned__)) support in the compiler.
527PHP_CHECK_VARIABLE_ATTRIBUTE([aligned])
528
529dnl Checks for library functions.
530dnl ----------------------------------------------------------------------------
531
532AC_CHECK_FUNCS(m4_normalize([
533  alphasort
534  asctime_r
535  asprintf
536  chroot
537  ctime_r
538  explicit_memset
539  fdatasync
540  flock
541  ftok
542  funopen
543  gai_strerror
544  getcwd
545  getgrnam_r
546  gethostname
547  getloadavg
548  getlogin
549  getprotobyname
550  getprotobynumber
551  getpwnam_r
552  getpwuid_r
553  getrusage
554  getservbyname
555  getservbyport
556  gettimeofday
557  getwd
558  glob
559  gmtime_r
560  lchown
561  localtime_r
562  memcntl
563  memfd_create
564  memmem
565  mempcpy
566  memrchr
567  mkstemp
568  mmap
569  nice
570  nl_langinfo
571  poll
572  pthread_jit_write_protect_np
573  putenv
574  scandir
575  setenv
576  setitimer
577  shutdown
578  sigprocmask
579  statfs
580  statvfs
581  std_syslog
582  strcasecmp
583  strnlen
584  strptime
585  strtok_r
586  symlink
587  tzset
588  unsetenv
589  usleep
590  utime
591  vasprintf
592]))
593
594AC_CHECK_FUNC([inet_ntop],, [AC_MSG_FAILURE([Required inet_ntop not found.])])
595AC_CHECK_FUNC([inet_pton],, [AC_MSG_FAILURE([Required inet_pton not found.])])
596
597dnl Check for strerror_r, and if its a POSIX-compatible or a GNU specific version.
598AC_FUNC_STRERROR_R
599
600dnl Check for functions inside their belonging headers.
601AC_CHECK_HEADER([sys/prctl.h], [AC_CHECK_FUNCS([prctl])])
602AC_CHECK_HEADER([sys/procctl.h], [AC_CHECK_FUNCS([procctl])])
603
604AX_FUNC_WHICH_GETHOSTBYNAME_R
605
606dnl Some systems (Solaris 10) do not have nanosleep in libc.
607AC_CHECK_FUNCS([nanosleep],,
608  [AC_SEARCH_LIBS([nanosleep], [rt], [AC_DEFINE([HAVE_NANOSLEEP], [1])])])
609
610dnl Check for getaddrinfo, should be a better way, but... Also check for working
611dnl getaddrinfo.
612AC_CACHE_CHECK([for getaddrinfo], [php_cv_func_getaddrinfo],
613[AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <netdb.h>],
614  [struct addrinfo *g,h;g=&h;getaddrinfo("","",g,&g);])],
615  [AC_RUN_IFELSE([AC_LANG_SOURCE([
616#include <netdb.h>
617#include <sys/types.h>
618#include <string.h>
619#include <stdlib.h>
620#ifndef AF_INET
621# include <sys/socket.h>
622#endif
623int main(void) {
624  struct addrinfo *ai, *pai, hints;
625
626  memset(&hints, 0, sizeof(hints));
627  hints.ai_flags = AI_NUMERICHOST;
628
629  if (getaddrinfo("127.0.0.1", 0, &hints, &ai) < 0) {
630    return 1;
631  }
632
633  if (ai == 0) {
634    return 1;
635  }
636
637  pai = ai;
638
639  while (pai) {
640    if (pai->ai_family != AF_INET) {
641      /* 127.0.0.1/NUMERICHOST should only resolve ONE way */
642      return 1;
643    }
644    if (pai->ai_addr->sa_family != AF_INET) {
645      /* 127.0.0.1/NUMERICHOST should only resolve ONE way */
646      return 1;
647    }
648    pai = pai->ai_next;
649  }
650  freeaddrinfo(ai);
651  return 0;
652}
653  ])],
654  [php_cv_func_getaddrinfo=yes],
655  [php_cv_func_getaddrinfo=no],
656  [AS_CASE([$host_alias],
657    [*linux*|*midipix], [php_cv_func_getaddrinfo=yes],
658    [php_cv_func_getaddrinfo=no])])],
659[php_cv_func_getaddrinfo=no])])
660AS_VAR_IF([php_cv_func_getaddrinfo], [yes],
661  [AC_DEFINE([HAVE_GETADDRINFO], [1],
662    [Define to 1 if you have the 'getaddrinfo' function.])])
663
664dnl on FreeBSD, copy_file_range() works only with the undocumented flag 0x01000000;
665dnl until the problem is fixed properly, copy_file_range() is used only on Linux
666AC_CACHE_CHECK([for copy_file_range], [php_cv_func_copy_file_range],
667[AC_COMPILE_IFELSE([AC_LANG_SOURCE([
668#ifndef __linux__
669# error "unsupported platform"
670#endif
671#ifndef _GNU_SOURCE
672# define _GNU_SOURCE
673#endif
674#include <linux/version.h>
675#if LINUX_VERSION_CODE < KERNEL_VERSION(5,3,0)
676# error "kernel too old"
677#endif
678#include <unistd.h>
679int main(void)
680{
681  (void)copy_file_range(-1, 0, -1, 0, 0, 0);
682  return 0;
683}
684])],
685[php_cv_func_copy_file_range=yes],
686[php_cv_func_copy_file_range=no])
687])
688AS_VAR_IF([php_cv_func_copy_file_range], [yes],
689  [AC_DEFINE([HAVE_COPY_FILE_RANGE], [1],
690    [Define to 1 if you have the 'copy_file_range' function.])])
691
692AC_REPLACE_FUNCS([strlcat strlcpy explicit_bzero getopt])
693AC_FUNC_ALLOCA
694PHP_TIME_R_TYPE
695
696AC_CACHE_CHECK([for aarch64 CRC32 API], [php_cv_func___crc32d],
697[AC_LINK_IFELSE([AC_LANG_PROGRAM([
698#include <arm_acle.h>
699# if defined(__GNUC__)
700#  if!defined(__clang__)
701#   pragma GCC push_options
702#   pragma GCC target ("+nothing+crc")
703#  elif defined(__APPLE__)
704#   pragma clang attribute push(__attribute__((target("crc"))), apply_to=function)
705#  else
706#   pragma clang attribute push(__attribute__((target("+nothing+crc"))), apply_to=function)
707#  endif
708# endif
709], [__crc32d(0, 0);])],
710[php_cv_func___crc32d=yes],
711[php_cv_func___crc32d=no])])
712AS_VAR_IF([php_cv_func___crc32d], [yes],
713  [AC_DEFINE([HAVE_AARCH64_CRC32], [1],
714    [Define to 1 when aarch64 CRC32 API is available.])])
715
716dnl Check for asm goto support.
717AC_CACHE_CHECK([for asm goto], [php_cv_have__asm_goto],
718[AC_LINK_IFELSE([AC_LANG_PROGRAM([], [
719#if defined(__x86_64__) || defined(__i386__)
720  __asm__ goto("jmp %l0\n" :::: end);
721#elif defined(__aarch64__)
722  __asm__ goto("b %l0\n" :::: end);
723#endif
724end:
725  return 0;
726])],
727[php_cv_have__asm_goto=yes],
728[php_cv_have__asm_goto=no])])
729AS_VAR_IF([php_cv_have__asm_goto], [yes],
730  [AC_DEFINE([HAVE_ASM_GOTO], [1],
731    [Define to 1 if asm goto support is available.])])
732
733dnl Check Valgrind support.
734PHP_ARG_WITH([valgrind],
735  [whether to enable Valgrind support],
736  [AS_HELP_STRING([--with-valgrind],
737    [Enable Valgrind support])],
738  [no],
739  [no])
740
741AS_VAR_IF([PHP_VALGRIND], [no],, [
742  PKG_CHECK_MODULES([VALGRIND], [valgrind],
743     [PHP_EVAL_INCLINE([$VALGRIND_CFLAGS])
744       AC_DEFINE([HAVE_VALGRIND], [1],
745        [Define to 1 if Valgrind is enabled and supported.])])
746  save_CFLAGS=$CFLAGS
747  CFLAGS="$CFLAGS $VALGRIND_CFLAGS"
748  AC_CHECK_HEADERS([valgrind/cachegrind.h])
749  CFLAGS=$save_CFLAGS
750])
751
752dnl General settings.
753dnl ----------------------------------------------------------------------------
754PHP_CONFIGURE_PART([General settings])
755
756PHP_HELP_SEPARATOR([General settings:])
757
758PHP_ARG_ENABLE([gcov],
759  [whether to include gcov symbols],
760  [AS_HELP_STRING([--enable-gcov],
761    [Enable GCOV code coverage - FOR DEVELOPERS ONLY!!])],
762  [no],
763  [no])
764
765AS_VAR_IF([PHP_GCOV], [yes], [
766  AS_VAR_IF([GCC], [yes],,
767    [AC_MSG_ERROR([GNU C compatible compiler is required for --enable-gcov])])
768
769  dnl Check if ccache is being used.
770  AS_CASE([$($php_shtool path $CC)],
771    [*ccache*], [gcc_ccache=yes],
772    [gcc_ccache=no])
773
774  if test "$gcc_ccache" = "yes" && (test -z "$CCACHE_DISABLE" || test "$CCACHE_DISABLE" != "1"); then
775    AC_MSG_ERROR(m4_text_wrap([
776      ccache must be disabled when --enable-gcov option is used. You can disable
777      ccache by setting environment variable CCACHE_DISABLE=1.
778    ]))
779  fi
780
781  AC_DEFINE([HAVE_GCOV], [1], [Define to 1 if GCOV code coverage is enabled.])
782  PHP_ADD_MAKEFILE_FRAGMENT([$abs_srcdir/build/Makefile.gcov], [$abs_srcdir])
783
784  dnl Remove all optimization flags from CFLAGS.
785  PHP_REMOVE_OPTIMIZATION_FLAGS
786
787  dnl Add the special gcc flags.
788  CFLAGS="$CFLAGS -O0 -fprofile-arcs -ftest-coverage"
789  CXXFLAGS="$CXXFLAGS -O0 -fprofile-arcs -ftest-coverage"
790])
791
792PHP_ARG_ENABLE([debug],
793  [whether to include debugging symbols],
794  [AS_HELP_STRING([--enable-debug],
795    [Compile with debugging symbols])],
796  [no],
797  [no])
798
799AS_VAR_IF([PHP_DEBUG], [yes], [
800  PHP_DEBUG=1
801  ZEND_DEBUG=yes
802  PHP_REMOVE_OPTIMIZATION_FLAGS
803  dnl Add -O0 only if GCC or ICC is used.
804  if test "$GCC" = "yes" || test "$ICC" = "yes"; then
805    CFLAGS="$CFLAGS -O0"
806    CXXFLAGS="$CXXFLAGS -g -O0"
807  fi
808  if test "$SUNCC" = "yes"; then
809    if test -n "$auto_cflags"; then
810      CFLAGS="-g"
811      CXXFLAGS="-g"
812    else
813      CFLAGS="$CFLAGS -g"
814      CXXFLAGS="$CFLAGS -g"
815    fi
816  fi
817], [
818  PHP_DEBUG=0
819  ZEND_DEBUG=no
820])
821
822PHP_ARG_ENABLE([debug-assertions],
823  [whether to enable debug assertions in release mode],
824  [AS_HELP_STRING([--enable-debug-assertions],
825    [Compile with debug assertions even in release mode])],
826  [no],
827  [no])
828
829AS_VAR_IF([PHP_DEBUG_ASSERTIONS], [yes], [
830  PHP_DEBUG=1
831  ZEND_DEBUG=yes
832])
833
834AC_ARG_ENABLE([zts],
835  [AS_HELP_STRING([--enable-zts],
836    [Enable thread safety])],
837  [ZEND_ZTS=$enableval],
838  [ZEND_ZTS=no])
839
840AS_VAR_IF([ZEND_ZTS], [yes], [PHP_THREAD_SAFETY=yes], [PHP_THREAD_SAFETY=no])
841
842AS_VAR_IF([PHP_THREAD_SAFETY], [yes], [
843  AS_VAR_IF([pthreads_working], [yes], [],
844    [AC_MSG_FAILURE(m4_text_wrap([
845      Unable to verify system support for POSIX Threads, which are required for
846      PHP thread safety (ZTS) build.
847    ]))])
848
849  AC_MSG_CHECKING([for POSIX threads])
850  AC_MSG_RESULT([yes])
851])
852
853PHP_ARG_ENABLE([rtld-now],
854  [whether to dlopen extensions with RTLD_NOW instead of RTLD_LAZY],
855  [AS_HELP_STRING([--enable-rtld-now],
856    [Use dlopen with RTLD_NOW instead of RTLD_LAZY])],
857  [no],
858  [no])
859
860AS_VAR_IF([PHP_RTLD_NOW], [yes],
861  [AC_DEFINE([PHP_USE_RTLD_NOW], [1],
862    [Define to 1 if 'dlopen()' uses the 'RTLD_NOW' mode flag instead of
863    'RTLD_LAZY'.])])
864
865PHP_ARG_WITH([layout],
866  [layout of installed files],
867  [AS_HELP_STRING([--with-layout=TYPE],
868    [Set how installed files will be laid out. Type can be either PHP or GNU [PHP]])],
869  [PHP],
870  [no])
871
872AS_CASE([$PHP_LAYOUT], [GNU], [oldstyleextdir=no], [oldstyleextdir=yes])
873
874PHP_ARG_WITH([config-file-path],
875  [path to configuration file],
876  [AS_HELP_STRING([--with-config-file-path=PATH],
877    [Set the path in which to look for php.ini [PREFIX/lib]])],
878  [DEFAULT],
879  [no])
880
881AS_VAR_IF([PHP_CONFIG_FILE_PATH], [DEFAULT],
882  [AS_CASE([$PHP_LAYOUT],
883    [GNU], [PHP_CONFIG_FILE_PATH=$sysconfdir],
884    [PHP_CONFIG_FILE_PATH=$libdir])])
885
886AC_MSG_CHECKING([where to scan for configuration files])
887PHP_ARG_WITH([config-file-scan-dir],,
888  [AS_HELP_STRING([--with-config-file-scan-dir=PATH],
889    [Set the path where to scan for configuration files])],
890  [DEFAULT],
891  [no])
892
893AS_VAR_IF([PHP_CONFIG_FILE_SCAN_DIR], [DEFAULT], [PHP_CONFIG_FILE_SCAN_DIR=])
894AC_MSG_RESULT([$PHP_CONFIG_FILE_SCAN_DIR])
895
896PHP_ARG_ENABLE([sigchild],
897  [whether to enable PHP's own SIGCHLD handler],
898  [AS_HELP_STRING([--enable-sigchild],
899    [Enable PHP's own SIGCHLD handler])],
900  [no],
901  [no])
902
903AH_TEMPLATE([PHP_SIGCHILD],
904  [Define to 1 if PHP uses its own SIGCHLD handler, and to 0 if not.])
905AS_VAR_IF([PHP_SIGCHILD], [yes],
906  [AC_DEFINE([PHP_SIGCHILD], [1])],
907  [AC_DEFINE([PHP_SIGCHILD], [0])])
908
909PHP_ARG_ENABLE([libgcc],
910  [whether to explicitly link against libgcc],
911  [AS_HELP_STRING([--enable-libgcc],
912    [Enable explicitly linking against libgcc])],
913  [no],
914  [no])
915
916AS_VAR_IF([PHP_LIBGCC], [yes], [
917  PHP_LIBGCC_LIBPATH([gcc])
918  AS_VAR_IF([libgcc_libpath],,
919    [AC_MSG_ERROR([Cannot locate libgcc. Make sure that gcc is in your path])])
920  PHP_ADD_LIBPATH([$libgcc_libpath])
921  PHP_ADD_LIBRARY([gcc], [yes])
922])
923
924PHP_ARG_ENABLE([short-tags],
925  [whether to enable short tags by default],
926  [AS_HELP_STRING([--disable-short-tags],
927    [Disable the short-form <? start tag by default])],
928  [yes],
929  [no])
930
931AH_TEMPLATE([DEFAULT_SHORT_OPEN_TAG],
932  [Define to string "1" if PHP short open tags '<?' are enabled by default, and
933  to string "0" if they are not.])
934AS_VAR_IF([PHP_SHORT_TAGS], [yes],
935  [AC_DEFINE([DEFAULT_SHORT_OPEN_TAG], ["1"])],
936  [AC_DEFINE([DEFAULT_SHORT_OPEN_TAG], ["0"])])
937
938PHP_ARG_ENABLE([dmalloc],
939  [whether to enable dmalloc],
940  [AS_HELP_STRING([--enable-dmalloc],
941    [Enable dmalloc])],
942  [no],
943  [no])
944
945AS_VAR_IF([PHP_DMALLOC], [yes],
946  [AC_CHECK_LIB([dmalloc], [dmalloc_error],
947    [PHP_ADD_LIBRARY([dmalloc])
948      AC_DEFINE([HAVE_DMALLOC], [1], [Define to 1 if you have dmalloc.])
949      AS_VAR_APPEND([CPPFLAGS], [" -DDMALLOC_FUNC_CHECK"])],
950    [AC_MSG_FAILURE([The dmalloc check failed. Cannot enable dmalloc.])])])
951
952PHP_ARG_ENABLE([ipv6],
953  [whether to enable IPv6 support],
954  [AS_HELP_STRING([--disable-ipv6],
955    [Disable IPv6 support])],
956  [yes],
957  [no])
958
959AS_VAR_IF([PHP_IPV6], [yes],
960  [AC_CACHE_CHECK([for IPv6 support], [php_cv_have_ipv6],
961    [AC_LINK_IFELSE([AC_LANG_PROGRAM([
962      #include <sys/types.h>
963      #include <sys/socket.h>
964      #include <netinet/in.h>
965    ], [[
966      struct sockaddr_in6 s;
967      struct in6_addr t = in6addr_any;
968      int i = AF_INET6;
969      (void)s;
970      t.s6_addr[0] = 0;
971      (void)i;
972    ]])],
973    [php_cv_have_ipv6=yes],
974    [php_cv_have_ipv6=no])])
975])
976AS_VAR_IF([php_cv_have_ipv6], [yes],
977  [AC_DEFINE([HAVE_IPV6], [1],
978    [Define to 1 if IPv6 is enabled and supported.])])
979
980dnl DTRACE checks. Note: this has to be done after SAPI configuration.
981PHP_ARG_ENABLE([dtrace],
982  [whether to enable DTrace support],
983  [AS_HELP_STRING([--enable-dtrace],
984    [Enable DTrace support])],
985  [no],
986  [no])
987
988AS_VAR_IF([PHP_DTRACE], [yes], [
989  PHP_INIT_DTRACE([Zend/zend_dtrace.d], [Zend/zend_dtrace_gen.h], [
990    main/main.c
991    Zend/zend_API.c
992    Zend/zend_dtrace.c
993    Zend/zend_exceptions.c
994    Zend/zend_execute.c
995    Zend/zend.c
996  ])
997  AC_DEFINE([HAVE_DTRACE], [1], [Define to 1 if DTrace support is enabled.])
998])
999
1000AC_MSG_CHECKING([how big to make fd sets])
1001PHP_ARG_ENABLE([fd-setsize],,
1002  [AS_HELP_STRING([--enable-fd-setsize],
1003    [Set size of descriptor sets])],
1004  [no],
1005  [no])
1006
1007AS_VAR_IF([PHP_FD_SETSIZE], [no], [AC_MSG_RESULT([using system default])], [
1008  if test "0$PHP_FD_SETSIZE" -gt 0 2>/dev/null; then
1009    CPPFLAGS="$CPPFLAGS -DFD_SETSIZE=$PHP_FD_SETSIZE"
1010    AC_MSG_RESULT([using $PHP_FD_SETSIZE])
1011  else
1012    AC_MSG_ERROR([Invalid value passed to --enable-fd-setsize!])
1013  fi
1014])
1015
1016PHP_ARG_ENABLE([werror],,
1017  [AS_HELP_STRING([--enable-werror],
1018    [Enable -Werror])],
1019  [no],
1020  [no])
1021PHP_ARG_ENABLE([memory-sanitizer],,
1022  [AS_HELP_STRING([--enable-memory-sanitizer],
1023    [Enable memory sanitizer (clang only)])],
1024  [no],
1025  [no])
1026PHP_ARG_ENABLE([address-sanitizer],,
1027  [AS_HELP_STRING([--enable-address-sanitizer],
1028    [Enable address sanitizer])],
1029  [no],
1030  [no])
1031PHP_ARG_ENABLE([undefined-sanitizer],,
1032  [AS_HELP_STRING([--enable-undefined-sanitizer],
1033    [Enable undefined sanitizer])],
1034  [no],
1035  [no])
1036
1037dnl Extension configuration.
1038dnl ----------------------------------------------------------------------------
1039
1040PHP_HELP_SEPARATOR([[Extensions:
1041  --with-EXTENSION=[shared[,PATH]]
1042
1043    NOTE: Not all extensions can be built as 'shared'.
1044
1045    Example: --with-foobar=shared,/usr/local/foobar/
1046
1047      o Builds the foobar extension as shared extension.
1048      o foobar package install prefix is /usr/local/foobar/
1049]])
1050
1051PHP_CONFIGURE_PART([Configuring extensions])
1052
1053dnl Check if all enabled by default extensions should be disabled.
1054AC_ARG_ENABLE([all],
1055  [AS_HELP_STRING([--disable-all],
1056    [Disable all extensions which are enabled by default])],
1057  [PHP_ENABLE_ALL=$enableval])
1058
1059dnl Reading config stubs.
1060esyscmd(./build/config-stubs ext)
1061
1062dnl Extensions post-config.
1063dnl ----------------------------------------------------------------------------
1064
1065dnl Align segments on huge page boundary
1066AS_CASE([$host_alias], [[i[3456]86-*-linux-* | x86_64-*-linux-*]],
1067  [AC_CACHE_CHECK([linker support for -zcommon-page-size=2097152],
1068    [php_cv_have_common_page_size], [
1069    save_LDFLAGS=$LDFLAGS
1070    LDFLAGS="$LDFLAGS -Wl,-zcommon-page-size=2097152 -Wl,-zmax-page-size=2097152"
1071    AC_RUN_IFELSE([AC_LANG_PROGRAM()],
1072      [php_cv_have_common_page_size=yes],
1073      [php_cv_have_common_page_size=no],
1074      [php_cv_have_common_page_size=no])
1075    LDFLAGS=$save_LDFLAGS])
1076  AS_VAR_IF([php_cv_have_common_page_size], [yes],
1077    [EXTRA_LDFLAGS_PROGRAM="$EXTRA_LDFLAGS_PROGRAM -Wl,-zcommon-page-size=2097152 -Wl,-zmax-page-size=2097152"],
1078    [AC_CACHE_CHECK([linker support for -zmax-page-size=2097152],
1079      [php_cv_have_max_page_size], [
1080      save_LDFLAGS=$LDFLAGS
1081      LDFLAGS="$LDFLAGS -Wl,-zmax-page-size=2097152"
1082      AC_RUN_IFELSE([AC_LANG_PROGRAM()],
1083        [php_cv_have_max_page_size=yes],
1084        [php_cv_have_max_page_size=no],
1085        [php_cv_have_max_page_size=no])
1086      LDFLAGS=$save_LDFLAGS])
1087    AS_VAR_IF([php_cv_have_max_page_size], [yes],
1088      [EXTRA_LDFLAGS_PROGRAM="$EXTRA_LDFLAGS_PROGRAM -Wl,-zmax-page-size=2097152"])
1089  ])
1090])
1091
1092enable_shared=yes
1093enable_static=yes
1094
1095case $php_sapi_module in
1096  shared[)]
1097    if test "$PHP_CGI" = "no" && test "$PHP_CLI" = "no" && test "$PHP_FPM" = "no" && test "$PHP_LITESPEED" = "no" && test "$PHP_PHPDBG" = "no"; then
1098      enable_static=no
1099    fi
1100    case $with_pic in
1101      yes)
1102        standard_libtool_flag='-prefer-pic'
1103        ;;
1104      no)
1105        standard_libtool_flag='-prefer-non-pic'
1106        ;;
1107    esac
1108    EXTRA_LDFLAGS="$EXTRA_LDFLAGS -avoid-version -module"
1109    ;;
1110  *[)]
1111    standard_libtool_flag='-prefer-non-pic -static'
1112    if test -z "$PHP_MODULES" && test -z "$PHP_ZEND_EX"; then
1113      enable_shared=no
1114    fi
1115    ;;
1116esac
1117
1118EXTRA_LIBS="$EXTRA_LIBS $DLIBS $LIBS"
1119unset LIBS
1120
1121dnl PEAR
1122dnl ----------------------------------------------------------------------------
1123
1124PHP_HELP_SEPARATOR([PEAR:])
1125PHP_CONFIGURE_PART([Configuring PEAR])
1126
1127dnl If CLI is disabled disable PEAR.
1128AS_VAR_IF([PHP_CLI], [no], [with_pear=no])
1129
1130PHP_ARG_WITH([pear],
1131  [whether to install PEAR],
1132  [AS_HELP_STRING([[--with-pear[=DIR]]],
1133    [Install PEAR in DIR [PREFIX/lib/php]])],
1134  [no],
1135  [yes])
1136
1137AS_VAR_IF([PHP_PEAR], [no],, [
1138  AC_MSG_WARN([The --with-pear option is deprecated])
1139
1140  dnl PEAR dependencies.
1141  AS_VAR_IF([PHP_XML], [no], [AC_MSG_ERROR(m4_text_wrap([
1142    PEAR requires XML to be enabled. Add '--enable-xml' to the configure line,
1143    or disable PEAR (--without-pear).
1144  ]))])
1145
1146  install_pear=install-pear
1147
1148  AS_VAR_IF([PHP_PEAR], [yes],
1149    [AS_CASE([$PHP_LAYOUT],
1150      [GNU], [PEAR_INSTALLDIR=$datadir/pear],
1151      [PEAR_INSTALLDIR=$libdir/php])],
1152    [PEAR_INSTALLDIR=$PHP_PEAR])
1153
1154  PHP_SUBST([PEAR_INSTALLDIR])
1155  PHP_ADD_BUILD_DIR([pear])
1156  PHP_ADD_MAKEFILE_FRAGMENT([$abs_srcdir/pear/Makefile.frag],
1157    [$abs_srcdir/pear],
1158    [pear])
1159])
1160
1161dnl Configuring Zend and TSRM.
1162dnl ----------------------------------------------------------------------------
1163
1164PHP_HELP_SEPARATOR([Zend:])
1165PHP_CONFIGURE_PART([Configuring Zend])
1166
1167AC_ARG_ENABLE([fiber-asm],
1168  [AS_HELP_STRING([--disable-fiber-asm],
1169    [Disable the use of boost fiber assembly files])],
1170  [fiber_asm=$enableval], [fiber_asm='yes'])
1171
1172AS_CASE([$host_cpu],
1173  [x86_64*|amd64*], [fiber_cpu="x86_64"],
1174  [x86*|amd*|i?86*|pentium], [fiber_cpu="i386"],
1175  [aarch64*|arm64*], [fiber_cpu="arm64"],
1176  [arm*], [fiber_cpu="arm32"],
1177  [ppc64*|powerpc64*], [fiber_cpu="ppc64"],
1178  [ppc*|powerpc*], [fiber_cpu="ppc32"],
1179  [riscv64*], [fiber_cpu="riscv64"],
1180  [sparc64], [fiber_cpu="sparc64"],
1181  [s390x*], [fiber_cpu="s390x"],
1182  [loongarch64*], [fiber_cpu="loongarch64"],
1183  [mips64*], [fiber_cpu="mips64"],
1184  [mips*], [fiber_cpu="mips32"],
1185  [fiber_cpu="unknown"]
1186)
1187
1188AS_CASE([$host_os],
1189  [darwin*], [fiber_os="mac"],
1190  [aix*|os400*], [fiber_os="aix"],
1191  [freebsd*], [fiber_os="freebsd"],
1192  [midipix], [fiber_os="midipix"],
1193  [fiber_os="other"]
1194)
1195
1196AS_CASE([$fiber_cpu],
1197  [x86_64], [fiber_asm_file_prefix="x86_64_sysv"],
1198  [i386], [fiber_asm_file_prefix="i386_sysv"],
1199  [arm64], [fiber_asm_file_prefix="arm64_aapcs"],
1200  [arm32], [fiber_asm_file_prefix="arm_aapcs"],
1201  [ppc64], [fiber_asm_file_prefix="ppc64_sysv"],
1202  [ppc32], [fiber_asm_file_prefix="ppc32_sysv"],
1203  [riscv64], [fiber_asm_file_prefix="riscv64_sysv"],
1204  [sparc64], [fiber_asm_file_prefix="sparc64_sysv"],
1205  [s390x], [fiber_asm_file_prefix="s390x_sysv"],
1206  [loongarch64], [fiber_asm_file_prefix="loongarch64_sysv"],
1207  [mips64], [fiber_asm_file_prefix="mips64_n64"],
1208  [mips32], [fiber_asm_file_prefix="mips32_o32"],
1209  [fiber_asm_file_prefix="unknown"]
1210)
1211
1212if test "$fiber_os" = 'mac'; then
1213  fiber_asm_file="combined_sysv_macho_gas"
1214elif test "$fiber_os" = 'aix'; then
1215  # AIX uses a different calling convention (shared with non-_CALL_ELF Linux).
1216  # The AIX assembler isn't GNU, but the file is compatible.
1217  fiber_asm_file="${fiber_asm_file_prefix}_xcoff_gas"
1218elif test "$fiber_os" = 'freebsd'; then
1219  case $fiber_cpu in
1220    i386*)
1221      fiber_asm="no"
1222      ;;
1223    *)
1224      fiber_asm_file="${fiber_asm_file_prefix}_elf_gas"
1225      ;;
1226  esac
1227elif test "$fiber_os" = 'midipix'; then
1228  case $fiber_cpu in
1229    i386*)
1230      fiber_asm="no"
1231      ;;
1232    x86_64)
1233      fiber_asm_file="x86_64_ms_pe_gas"
1234      ;;
1235  esac
1236elif test "$fiber_asm_file_prefix" != 'unknown'; then
1237  fiber_asm_file="${fiber_asm_file_prefix}_elf_gas"
1238else
1239  fiber_asm="no"
1240fi
1241
1242AC_CACHE_CHECK([whether syscall to create shadow stack exists],
1243[php_cv_have_shadow_stack_syscall],
1244[AC_RUN_IFELSE([AC_LANG_SOURCE([
1245#include <unistd.h>
1246#include <sys/mman.h>
1247int main(void) {
1248  /* test if syscall 451, i.e., map_shadow_stack is available */
1249  void* base = (void *)syscall(451, 0, 0x20000, 0x1);
1250  if (base != (void*)-1) {
1251    munmap(base, 0x20000);
1252    return 0;
1253  }
1254  return 1;
1255}
1256])],
1257  [php_cv_have_shadow_stack_syscall=yes],
1258  [php_cv_have_shadow_stack_syscall=no],
1259  [php_cv_have_shadow_stack_syscall=no])
1260])
1261dnl The asm files can't see macro from AC_DEFINE, workaround this via cflag. If
1262dnl the syscall doesn't exist, we may block the final ELF from __PROPERTY_SHSTK
1263dnl via redefine macro as "-D__CET__=1".
1264AS_VAR_IF([php_cv_have_shadow_stack_syscall], [yes],
1265  [fiber_asm_cflag="-DSHADOW_STACK_SYSCALL=1"],
1266  [fiber_asm_cflag="-DSHADOW_STACK_SYSCALL=0"])
1267
1268if test "$fiber_asm" = 'yes'; then
1269  AC_MSG_CHECKING([for fiber switching context])
1270  PHP_ADD_SOURCES([Zend/asm],
1271    [make_${fiber_asm_file}.S jump_${fiber_asm_file}.S],
1272    [$fiber_asm_cflag])
1273  AC_MSG_RESULT([$fiber_asm_file])
1274else
1275  AS_VAR_IF([fiber_os], [mac], [AC_DEFINE([_XOPEN_SOURCE], [1], [ ])])
1276  AC_CHECK_HEADER([ucontext.h],
1277    [AC_DEFINE([ZEND_FIBER_UCONTEXT], [1],
1278      [Define to 1 if Zend fiber uses ucontext instead of boost context.])],
1279    [AC_MSG_FAILURE([fibers not available on this platform])])
1280fi
1281
1282ZEND_INIT
1283
1284ZEND_EXTRA_LIBS=$LIBS
1285unset LIBS
1286
1287PHP_ADD_INCLUDE([$abs_srcdir], [1])
1288PHP_ADD_INCLUDE([$abs_srcdir/main], [1])
1289PHP_ADD_INCLUDE([$abs_builddir], [1])
1290PHP_ADD_INCLUDE([$abs_builddir/main], [1])
1291PHP_ADD_INCLUDE([$abs_builddir/TSRM])
1292PHP_ADD_INCLUDE([$abs_builddir/Zend])
1293PHP_ADD_INCLUDE([$abs_srcdir/Zend])
1294PHP_ADD_INCLUDE([$abs_srcdir/TSRM])
1295
1296EXTRA_LDFLAGS="$EXTRA_LDFLAGS $LDFLAGS"
1297EXTRA_LDFLAGS_PROGRAM="$EXTRA_LDFLAGS_PROGRAM $LDFLAGS"
1298unset LDFLAGS
1299
1300AC_ARG_PROGRAM
1301
1302AS_VAR_IF([prefix], [NONE], [prefix=/usr/local])
1303AS_VAR_IF([exec_prefix], [NONE], [exec_prefix='${prefix}'])
1304AS_VAR_IF([program_prefix], [NONE], [program_prefix=])
1305AS_VAR_IF([program_suffix], [NONE], [program_suffix=])
1306
1307orig_libdir=$libdir
1308AS_CASE([$libdir],
1309  ['${exec_prefix}/lib'], [libdir=$libdir/php])
1310
1311AS_CASE([$(eval echo $datadir)],
1312  ['${prefix}/share'], [datadir=$datadir/php])
1313
1314phptempdir=$(pwd)/libs
1315
1316old_exec_prefix=$exec_prefix
1317old_libdir=$libdir
1318old_datadir=$datadir
1319exec_prefix=$(eval echo $exec_prefix)
1320libdir=$(eval echo $libdir)
1321datadir=$(eval eval echo $datadir)
1322
1323dnl Build extension directory path.
1324ZEND_MODULE_API_NO=$($EGREP '#define ZEND_MODULE_API_NO ' $srcdir/Zend/zend_modules.h|"${SED}" 's/#define ZEND_MODULE_API_NO //')
1325
1326AC_ARG_VAR([EXTENSION_DIR],
1327  [Default directory for dynamically loadable PHP extensions. If left empty, it
1328  is determined automatically. Can be overridden using the PHP 'extension_dir'
1329  INI directive.])
1330AS_VAR_IF([EXTENSION_DIR],, [
1331  extbasedir=$ZEND_MODULE_API_NO
1332  AS_VAR_IF([oldstyleextdir], [yes], [
1333    AS_VAR_IF([PHP_DEBUG], [1], [part1=debug], [part1=no-debug])
1334    AS_VAR_IF([PHP_THREAD_SAFETY], [yes], [part2=zts], [part2=non-zts])
1335    extbasedir=$part1-$part2-$extbasedir
1336    EXTENSION_DIR=$libdir/extensions/$extbasedir
1337  ], [
1338    AS_VAR_IF([PHP_THREAD_SAFETY], [yes], [extbasedir=$extbasedir-zts])
1339    AS_VAR_IF([PHP_DEBUG], [1], [extbasedir=$extbasedir-debug])
1340    EXTENSION_DIR=$libdir/$extbasedir
1341  ])
1342])
1343
1344AS_CASE([$PHP_LAYOUT],
1345  [GNU], [datarootdir=$prefix/share],
1346  [datarootdir=$prefix/php])
1347
1348dnl Expand all directory names for use in macros/constants.
1349EXPANDED_PEAR_INSTALLDIR=$(eval echo $PEAR_INSTALLDIR)
1350EXPANDED_EXTENSION_DIR=$(eval echo $EXTENSION_DIR)
1351EXPANDED_LOCALSTATEDIR=$(eval echo $localstatedir)
1352EXPANDED_BINDIR=$(eval echo $bindir)
1353EXPANDED_SBINDIR=$(eval echo $sbindir)
1354EXPANDED_MANDIR=$(eval echo $mandir)
1355EXPANDED_LIBDIR=$libdir
1356EXPANDED_SYSCONFDIR=$(eval echo $sysconfdir)
1357EXPANDED_DATADIR=$datadir
1358EXPANDED_PHP_CONFIG_FILE_PATH=$(eval echo "$PHP_CONFIG_FILE_PATH")
1359EXPANDED_PHP_CONFIG_FILE_SCAN_DIR=$(eval echo "$PHP_CONFIG_FILE_SCAN_DIR")
1360INCLUDE_PATH=.:$EXPANDED_PEAR_INSTALLDIR
1361
1362exec_prefix=$old_exec_prefix
1363libdir=$old_libdir
1364datadir=$old_datadir
1365
1366AC_SUBST([INCLUDE_PATH])
1367AC_SUBST([EXPANDED_PEAR_INSTALLDIR])
1368AC_SUBST([EXPANDED_EXTENSION_DIR])
1369AC_SUBST([EXPANDED_BINDIR])
1370AC_SUBST([EXPANDED_SBINDIR])
1371AC_SUBST([EXPANDED_MANDIR])
1372AC_SUBST([EXPANDED_LIBDIR])
1373AC_SUBST([EXPANDED_DATADIR])
1374AC_SUBST([EXPANDED_SYSCONFDIR])
1375AC_SUBST([EXPANDED_LOCALSTATEDIR])
1376AC_SUBST([EXPANDED_PHP_CONFIG_FILE_PATH])
1377AC_SUBST([EXPANDED_PHP_CONFIG_FILE_SCAN_DIR])
1378AC_SUBST([PHP_INSTALLED_SAPIS])
1379AC_SUBST([SAPI_LIBNAME_SHARED])
1380AC_SUBST([SAPI_LIBNAME_STATIC])
1381AC_SUBST([PHP_VERSION])
1382AC_SUBST([PHP_VERSION_ID])
1383AC_SUBST([PHP_LDFLAGS])
1384
1385PHP_UTILIZE_RPATHS
1386
1387PHP_REMOVE_USR_LIB([PHP_LDFLAGS])
1388PHP_REMOVE_USR_LIB([LDFLAGS])
1389
1390EXTRA_LDFLAGS="$EXTRA_LDFLAGS $PHP_LDFLAGS"
1391EXTRA_LDFLAGS_PROGRAM="$EXTRA_LDFLAGS_PROGRAM $PHP_LDFLAGS"
1392
1393AC_ARG_VAR([PHP_UNAME],
1394  [System information (defaults to the 'uname -a' output)])
1395AS_VAR_IF([PHP_UNAME],, [PHP_UNAME=$(uname -a | xargs)])
1396AC_DEFINE_UNQUOTED([PHP_UNAME], ["$PHP_UNAME"], [The 'uname -a' output.])
1397
1398PHP_OS=$(uname | xargs)
1399AC_DEFINE_UNQUOTED([PHP_OS], ["$PHP_OS"], [The 'uname' output.])
1400
1401AC_ARG_VAR([PHP_BUILD_SYSTEM],
1402  [The system that PHP was built on (defaults to the 'uname -a' output)])
1403AS_VAR_IF([PHP_BUILD_SYSTEM],, [PHP_BUILD_SYSTEM=$PHP_UNAME])
1404AC_DEFINE_UNQUOTED([PHP_BUILD_SYSTEM], ["$PHP_BUILD_SYSTEM"],
1405  [The system that PHP was built on.])
1406
1407AC_ARG_VAR([PHP_BUILD_PROVIDER], [The PHP build provider information])
1408AS_VAR_IF([PHP_BUILD_PROVIDER],,,
1409  [AC_DEFINE_UNQUOTED([PHP_BUILD_PROVIDER], ["$PHP_BUILD_PROVIDER"],
1410    [The PHP build provider information.])])
1411
1412AC_ARG_VAR([PHP_BUILD_COMPILER],
1413  [Information about the compiler used for the PHP build])
1414AS_VAR_IF([PHP_BUILD_COMPILER],,,
1415  [AC_DEFINE_UNQUOTED([PHP_BUILD_COMPILER], ["$PHP_BUILD_COMPILER"],
1416    [The compiler used for the PHP build.])])
1417
1418AC_ARG_VAR([PHP_BUILD_ARCH], [The build architecture])
1419AS_VAR_IF([PHP_BUILD_ARCH],,,
1420  [AC_DEFINE_UNQUOTED([PHP_BUILD_ARCH], ["$PHP_BUILD_ARCH"],
1421    [The build architecture.])])
1422
1423PHP_SUBST([PHP_FASTCGI_OBJS])
1424PHP_SUBST([PHP_SAPI_OBJS])
1425PHP_SUBST([PHP_BINARY_OBJS])
1426PHP_SUBST([PHP_GLOBAL_OBJS])
1427PHP_SUBST([PHP_BINARIES])
1428PHP_SUBST([PHP_MODULES])
1429PHP_SUBST([PHP_ZEND_EX])
1430PHP_SUBST([bindir])
1431PHP_SUBST([sbindir])
1432PHP_SUBST([exec_prefix])
1433PHP_SUBST_OLD([program_prefix])
1434PHP_SUBST_OLD([program_suffix])
1435PHP_SUBST([includedir])
1436PHP_SUBST_OLD([orig_libdir])
1437PHP_SUBST([libdir])
1438PHP_SUBST([mandir])
1439PHP_SUBST([phptempdir])
1440PHP_SUBST([prefix])
1441PHP_SUBST([localstatedir])
1442PHP_SUBST([datadir])
1443PHP_SUBST([datarootdir])
1444PHP_SUBST([sysconfdir])
1445PHP_SUBST([EXEEXT])
1446PHP_SUBST([CC])
1447PHP_SUBST([BUILD_CC])
1448PHP_SUBST([CFLAGS])
1449PHP_SUBST([CFLAGS_CLEAN])
1450PHP_SUBST([CPP])
1451PHP_SUBST([CPPFLAGS])
1452PHP_SUBST([CXX])
1453PHP_SUBST([CXXFLAGS])
1454PHP_SUBST([CXXFLAGS_CLEAN])
1455PHP_SUBST_OLD([EXTENSION_DIR])
1456PHP_SUBST([EXTRA_LDFLAGS])
1457PHP_SUBST([EXTRA_LDFLAGS_PROGRAM])
1458PHP_SUBST_OLD([EXTRA_LIBS])
1459PHP_SUBST([ZEND_EXTRA_LIBS])
1460PHP_SUBST([INCLUDES])
1461PHP_SUBST([EXTRA_INCLUDES])
1462PHP_SUBST([INSTALL_IT])
1463PHP_SUBST([LIBTOOL])
1464PHP_SUBST([LN_S])
1465PHP_SUBST([NATIVE_RPATHS])
1466PHP_SUBST([OVERALL_TARGET])
1467PHP_SUBST([PHP_RPATHS])
1468PHP_SUBST([PHP_SAPI])
1469PHP_SUBST([SHELL])
1470PHP_SUBST([PHP_FRAMEWORKS])
1471PHP_SUBST([PHP_FRAMEWORKPATH])
1472PHP_SUBST([INSTALL_HEADERS])
1473
1474if test "$PHP_THREAD_SAFETY" = "yes" && test -n "$ac_cv_pthreads_cflags"; then
1475  CXXFLAGS="$CXXFLAGS $ac_cv_pthreads_cflags"
1476  CPPFLAGS="$CPPFLAGS $ac_cv_pthreads_cflags"
1477fi
1478
1479dnl Enable -Werror late, because it may break configure checks throwing warnings.
1480AS_VAR_IF([PHP_WERROR], [yes], [
1481  CFLAGS="$CFLAGS -Werror"
1482  CXXFLAGS="$CXXFLAGS -Werror"
1483])
1484
1485if test "$PHP_MEMORY_SANITIZER" = "yes" &&
1486   test "$PHP_ADDRESS_SANITIZER" = "yes"; then
1487   AC_MSG_ERROR([MemorySanitizer and AddressSanitizer are mutually exclusive])
1488fi
1489
1490dnl Enable -fsanitize=memory late, because interceptors may break linking detection.
1491AS_VAR_IF([PHP_MEMORY_SANITIZER], [yes],
1492  [AX_CHECK_COMPILE_FLAG([-fsanitize=memory -fsanitize-memory-track-origins], [
1493    CFLAGS="$CFLAGS -fsanitize=memory -fsanitize-memory-track-origins"
1494    CXXFLAGS="$CXXFLAGS -fsanitize=memory -fsanitize-memory-track-origins"
1495  ], [AC_MSG_ERROR([MemorySanitizer is not available])])
1496])
1497
1498AS_VAR_IF([PHP_ADDRESS_SANITIZER], [yes],
1499  [AS_VAR_IF([PHP_VALGRIND], [no],, [AC_MSG_ERROR(m4_text_wrap([
1500    Valgrind and address sanitizer are not compatible. Either disable Valgrind
1501    (remove --with-valgrind) or disable address sanitizer (remove
1502    --enable-address-sanitizer).
1503  ]))])
1504
1505  AX_CHECK_COMPILE_FLAG([-fsanitize=address], [
1506    CFLAGS="$CFLAGS -fsanitize=address -DZEND_TRACK_ARENA_ALLOC"
1507    CXXFLAGS="$CXXFLAGS -fsanitize=address -DZEND_TRACK_ARENA_ALLOC"
1508  ], [AC_MSG_ERROR([AddressSanitizer is not available])])
1509])
1510
1511AS_VAR_IF([PHP_UNDEFINED_SANITIZER], [yes],
1512  [AX_CHECK_COMPILE_FLAG([-fsanitize=undefined], [
1513    CFLAGS="$CFLAGS -fsanitize=undefined -fno-sanitize-recover=undefined"
1514    CXXFLAGS="$CXXFLAGS -fsanitize=undefined -fno-sanitize-recover=undefined"
1515    AX_CHECK_COMPILE_FLAG([-fno-sanitize=object-size], [
1516      dnl Disable object-size sanitizer, because it is incompatible with our zend_function
1517      dnl union, and this can't be easily fixed.
1518      CFLAGS="$CFLAGS -fno-sanitize=object-size"
1519      CXXFLAGS="$CFLAGS -fno-sanitize=object-size"
1520    ])
1521
1522    dnl Clang 17 adds stricter function pointer compatibility checks where pointer args cannot be
1523    dnl cast to void*. In that case, set -fno-sanitize=function.
1524    OLD_CFLAGS=$CFLAGS
1525    CFLAGS="$CFLAGS -fno-sanitize-recover=undefined"
1526    AC_CACHE_CHECK([whether to add -fno-sanitize=function],
1527    [php_cv_ubsan_no_function],
1528    [AC_RUN_IFELSE([AC_LANG_SOURCE([
1529      void foo(char *string) { (void)string; }
1530      int main(void) {
1531        void (*f)(void *) = (void (*)(void *))foo;
1532        f("foo");
1533        return 0;
1534      }
1535    ])],
1536    [php_cv_ubsan_no_function=no],
1537    [php_cv_ubsan_no_function=yes],
1538    [php_cv_ubsan_no_function=no])])
1539    CFLAGS=$OLD_CFLAGS
1540    AS_VAR_IF([php_cv_ubsan_no_function], [yes], [
1541      CFLAGS="$CFLAGS -fno-sanitize=function"
1542      CXXFLAGS="$CFLAGS -fno-sanitize=function"
1543    ])
1544  ], [AC_MSG_ERROR([UndefinedBehaviorSanitizer is not available])])
1545])
1546
1547if test "$PHP_MEMORY_SANITIZER" = "yes" ||
1548   test "$PHP_ADDRESS_SANITIZER" = "yes" ||
1549   test "$PHP_UNDEFINED_SANITIZER" = "yes"; then
1550    CFLAGS="$CFLAGS -fno-omit-frame-pointer"
1551    CXXFLAGS="$CXXFLAGS -fno-omit-frame-pointer"
1552fi
1553
1554dnl
1555dnl Libtool creation.
1556dnl
1557
1558PHP_HELP_SEPARATOR([Libtool:])
1559PHP_CONFIGURE_PART([Configuring libtool])
1560
1561dnl Silence warning: "ar: 'u' modifier ignored since 'D' is the default".
1562dnl See https://github.com/php/php-src/pull/3017
1563AC_SUBST([AR_FLAGS], [cr])
1564
1565dnl Only allow AC_PROG_CXX and AC_PROG_CXXCPP if they are explicitly called (by
1566dnl PHP_REQUIRE_CXX). Otherwise AC_PROG_LIBTOOL fails if there is no working C++
1567dnl compiler.
1568AC_PROVIDE_IFELSE([PHP_REQUIRE_CXX], [], [
1569  undefine([AC_PROG_CXX])
1570  AC_DEFUN([AC_PROG_CXX], [])
1571  undefine([AC_PROG_CXXCPP])
1572  AC_DEFUN([AC_PROG_CXXCPP], [php_prog_cxxcpp=disabled])
1573])
1574AC_PROG_LIBTOOL
1575
1576PHP_SET_LIBTOOL_VARIABLE([--silent])
1577
1578dnl libtool 1.4.3 needs this.
1579PHP_SET_LIBTOOL_VARIABLE([--preserve-dup-deps])
1580
1581PHP_CONFIGURE_PART([Generating files])
1582
1583CXXFLAGS_CLEAN=$CXXFLAGS
1584CFLAGS_CLEAN="$CFLAGS \$(PROF_FLAGS)"
1585CFLAGS="\$(CFLAGS_CLEAN) $standard_libtool_flag"
1586CXXFLAGS="$CXXFLAGS $standard_libtool_flag \$(PROF_FLAGS)"
1587
1588if test "$PHP_PHAR" != "no" && test "$PHP_CLI" != "no"; then
1589  pharcmd=pharcmd
1590  pharcmd_install=install-pharcmd
1591else
1592  pharcmd=
1593  pharcmd_install=
1594fi;
1595
1596all_targets="\$(OVERALL_TARGET) \$(PHP_MODULES) \$(PHP_ZEND_EX) \$(PHP_BINARIES) $pharcmd"
1597install_targets="$install_sapi $install_modules $install_binaries install-build install-headers install-programs $install_pear $pharcmd_install"
1598
1599PHP_SUBST([all_targets])
1600PHP_SUBST([install_targets])
1601PHP_SUBST([install_binary_targets])
1602
1603PHP_INSTALL_HEADERS([Zend/ TSRM/ main/ main/streams/])
1604PHP_INSTALL_HEADERS([Zend/Optimizer], m4_normalize([
1605  zend_call_graph.h
1606  zend_cfg.h
1607  zend_dfg.h
1608  zend_dump.h
1609  zend_func_info.h
1610  zend_inference.h
1611  zend_optimizer.h
1612  zend_ssa.h
1613  zend_worklist.h
1614]))
1615
1616PHP_ADD_SOURCES([TSRM], [TSRM.c], [-DZEND_ENABLE_STATIC_TSRMLS_CACHE=1])
1617
1618PHP_ADD_SOURCES([main], m4_normalize([
1619    explicit_bzero.c
1620    fopen_wrappers.c
1621    getopt.c
1622    main.c
1623    network.c
1624    output.c
1625    php_content_types.c
1626    php_ini_builder.c
1627    php_ini.c
1628    php_odbc_utils.c
1629    php_open_temporary_file.c
1630    php_scandir.c
1631    php_syslog.c
1632    php_ticks.c
1633    php_variables.c
1634    reentrancy.c
1635    rfc1867.c
1636    safe_bcmp.c
1637    SAPI.c
1638    snprintf.c
1639    spprintf.c
1640    strlcat.c
1641    strlcpy.c
1642  ]),
1643  [-DZEND_ENABLE_STATIC_TSRMLS_CACHE=1])
1644
1645if printf "#if __ELF__\nelf\n#endif\n" | $CC -E - | grep elf > /dev/null; then
1646  PHP_ADD_SOURCES([main], [debug_gdb_scripts.c])
1647
1648  cat >> Makefile.objects <<EOF
1649$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
1650	@if test ! -z "\$(PHP)"; then \\
1651		\$(PHP) $abs_srcdir/scripts/gdb/debug_gdb_scripts_gen.php; \\
1652	fi;
1653EOF
1654fi
1655
1656PHP_ADD_SOURCES_X([main],
1657  [fastcgi.c],
1658  [-DZEND_ENABLE_STATIC_TSRMLS_CACHE=1],
1659  [PHP_FASTCGI_OBJS],
1660  [no])
1661
1662PHP_ADD_SOURCES([main/streams], m4_normalize([
1663    cast.c
1664    filter.c
1665    glob_wrapper.c
1666    memory.c
1667    mmap.c
1668    plain_wrapper.c
1669    streams.c
1670    transports.c
1671    userspace.c
1672    xp_socket.c
1673  ]),
1674  [-DZEND_ENABLE_STATIC_TSRMLS_CACHE=1])
1675
1676PHP_ADD_SOURCES([/main],
1677  [internal_functions.c],
1678  [-DZEND_ENABLE_STATIC_TSRMLS_CACHE=1],
1679  [sapi])
1680PHP_ADD_SOURCES_X([/main],
1681  [internal_functions_cli.c],
1682  [-DZEND_ENABLE_STATIC_TSRMLS_CACHE=1],
1683  [PHP_BINARY_OBJS])
1684
1685PHP_ADD_SOURCES([Zend], m4_normalize([
1686    Optimizer/block_pass.c
1687    Optimizer/compact_literals.c
1688    Optimizer/compact_vars.c
1689    Optimizer/dce.c
1690    Optimizer/dfa_pass.c
1691    Optimizer/escape_analysis.c
1692    Optimizer/nop_removal.c
1693    Optimizer/optimize_func_calls.c
1694    Optimizer/optimize_temp_vars_5.c
1695    Optimizer/pass1.c
1696    Optimizer/pass3.c
1697    Optimizer/sccp.c
1698    Optimizer/scdf.c
1699    Optimizer/zend_call_graph.c
1700    Optimizer/zend_cfg.c
1701    Optimizer/zend_dfg.c
1702    Optimizer/zend_dump.c
1703    Optimizer/zend_func_info.c
1704    Optimizer/zend_inference.c
1705    Optimizer/zend_optimizer.c
1706    Optimizer/zend_ssa.c
1707    zend_alloc.c
1708    zend_API.c
1709    zend_ast.c
1710    zend_atomic.c
1711    zend_attributes.c
1712    zend_builtin_functions.c
1713    zend_call_stack.c
1714    zend_closures.c
1715    zend_compile.c
1716    zend_constants.c
1717    zend_cpuinfo.c
1718    zend_default_classes.c
1719    zend_dtrace.c
1720    zend_enum.c
1721    zend_exceptions.c
1722    zend_execute_API.c
1723    zend_execute.c
1724    zend_extensions.c
1725    zend_fibers.c
1726    zend_float.c
1727    zend_frameless_function.c
1728    zend_gc.c
1729    zend_gdb.c
1730    zend_generators.c
1731    zend_hash.c
1732    zend_highlight.c
1733    zend_hrtime.c
1734    zend_inheritance.c
1735    zend_ini_parser.c
1736    zend_ini_scanner.c
1737    zend_ini.c
1738    zend_interfaces.c
1739    zend_iterators.c
1740    zend_language_parser.c
1741    zend_language_scanner.c
1742    zend_lazy_objects.c
1743    zend_list.c
1744    zend_llist.c
1745    zend_max_execution_timer.c
1746    zend_multibyte.c
1747    zend_object_handlers.c
1748    zend_objects_API.c
1749    zend_objects.c
1750    zend_observer.c
1751    zend_opcode.c
1752    zend_operators.c
1753    zend_property_hooks.c
1754    zend_ptr_stack.c
1755    zend_signal.c
1756    zend_smart_str.c
1757    zend_sort.c
1758    zend_stack.c
1759    zend_stream.c
1760    zend_string.c
1761    zend_strtod.c
1762    zend_system_id.c
1763    zend_variables.c
1764    zend_virtual_cwd.c
1765    zend_vm_opcodes.c
1766    zend_weakrefs.c
1767    zend.c
1768  ]),
1769  [-DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 $fiber_asm_cflag])
1770
1771PHP_ADD_MAKEFILE_FRAGMENT([$abs_srcdir/scripts/Makefile.frag],
1772  [$abs_srcdir/scripts],
1773  [scripts])
1774PHP_ADD_MAKEFILE_FRAGMENT([$abs_srcdir/Zend/Makefile.frag],
1775  [$abs_srcdir/Zend],
1776  [Zend])
1777
1778AC_DEFINE([HAVE_BUILD_DEFS_H], [1],
1779  [Define to 1 if PHP has the <main/build-defs.h> header file.])
1780
1781PHP_ADD_BUILD_DIR([
1782  main
1783  main/streams
1784  scripts
1785  scripts/man1
1786  TSRM
1787  Zend
1788  Zend/asm
1789  Zend/Optimizer
1790])
1791
1792AC_CONFIG_FILES([
1793  main/build-defs.h
1794  scripts/man1/php-config.1
1795  scripts/man1/phpize.1
1796  scripts/php-config
1797  scripts/phpize
1798])
1799
1800AC_CONFIG_COMMANDS_PRE([PHP_PATCH_CONFIG_HEADERS([main/php_config.h.in])])
1801
1802AC_CONFIG_COMMANDS([Zend/zend_config.h], [
1803cat >Zend/zend_config.h <<FEO
1804#include <../main/php_config.h>
1805FEO
1806])
1807
1808AC_CONFIG_COMMANDS([main/internal_functions.c], [], [
1809  AWK="$AWK" $SHELL $srcdir/build/genif.sh \
1810    $srcdir/main/internal_functions.c.in \
1811    "$EXT_STATIC" > main/internal_functions.c
1812])
1813
1814AC_CONFIG_COMMANDS([main/internal_functions_cli.c], [], [
1815  AWK="$AWK" $SHELL $srcdir/build/genif.sh \
1816    $srcdir/main/internal_functions.c.in \
1817    "$EXT_CLI_STATIC" > main/internal_functions_cli.c
1818])
1819
1820AC_CONFIG_COMMANDS([default], [
1821cat <<X
1822
1823+--------------------------------------------------------------------+
1824| License:                                                           |
1825| This software is subject to the PHP License, available in this     |
1826| distribution in the file LICENSE. By continuing this installation  |
1827| process, you are bound by the terms of this license agreement.     |
1828| If you do not agree with the terms of this license, you must abort |
1829| the installation process at this point.                            |
1830+--------------------------------------------------------------------+
1831
1832Thank you for using PHP.
1833
1834X
1835])
1836AC_OUTPUT
1837