xref: /PHP-7.4/configure.ac (revision e5d35a32)
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([TSRM/tsrm.m4])
15
16dnl Basic autoconf initialization, generation of config.nice.
17dnl ----------------------------------------------------------------------------
18
19AC_PREREQ([2.68])
20AC_INIT([PHP],[7.4.26-dev],[https://bugs.php.net],[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#ifndef ZEND_ACCONFIG_H_NO_C_PROTOS
47
48#include <stdlib.h>
49
50#ifdef HAVE_SYS_TYPES_H
51# include <sys/types.h>
52#endif
53
54#ifdef HAVE_SYS_SELECT_H
55#include <sys/select.h>
56#endif
57
58#ifdef HAVE_IEEEFP_H
59# include <ieeefp.h>
60#endif
61
62#include <string.h>
63
64#if defined(__cplusplus) && __cplusplus >= 201103L
65extern "C++" {
66#include <cmath>
67#define zend_isnan std::isnan
68#define zend_isinf std::isinf
69#define zend_finite std::isfinite
70}
71#else
72#include <math.h>
73
74#ifndef zend_isnan
75#if HAVE_DECL_ISNAN
76#define zend_isnan(a) isnan(a)
77#elif defined(HAVE_FPCLASS)
78#define zend_isnan(a) ((fpclass(a) == FP_SNAN) || (fpclass(a) == FP_QNAN))
79#else
80#define zend_isnan(a) ((a) != (a))
81#endif
82#endif
83
84#if HAVE_DECL_ISINF
85#define zend_isinf(a) isinf(a)
86#elif defined(INFINITY)
87/* Might not work, but is required by ISO C99 */
88#define zend_isinf(a) (((a)==INFINITY || (a)==-INFINITY)?1:0)
89#elif defined(HAVE_FPCLASS)
90#define zend_isinf(a) ((fpclass(a) == FP_PINF) || (fpclass(a) == FP_NINF))
91#else
92#define zend_isinf(a) 0
93#endif
94
95#if HAVE_DECL_ISFINITE
96#define zend_finite(a) isfinite(a)
97#elif defined(HAVE_FINITE)
98#define zend_finite(a) finite(a)
99#elif defined(fpclassify)
100#define zend_finite(a) ((fpclassify((a))!=FP_INFINITE&&fpclassify((a))!=FP_NAN)?1:0)
101#else
102#define zend_finite(a) (zend_isnan(a) ? 0 : zend_isinf(a) ? 0 : 1)
103#endif
104
105#endif
106#endif /* ifndef ZEND_ACCONFIG_H_NO_C_PROTOS */
107
108#endif /* PHP_CONFIG_H */
109])
110
111ac_IFS=$IFS; IFS="."
112set $(echo AC_PACKAGE_VERSION | "${SED}" 's/\([[0-9\.]]*\)\(.*\)/\1\.\2/')
113IFS=$ac_IFS
114PHP_MAJOR_VERSION=[$]1
115PHP_MINOR_VERSION=[$]2
116PHP_RELEASE_VERSION=[$]3
117PHP_EXTRA_VERSION=[$]4
118PHP_VERSION="$PHP_MAJOR_VERSION.$PHP_MINOR_VERSION.$PHP_RELEASE_VERSION$PHP_EXTRA_VERSION"
119PHP_VERSION_ID=`expr [$]PHP_MAJOR_VERSION \* 10000 + [$]PHP_MINOR_VERSION \* 100 + [$]PHP_RELEASE_VERSION`
120
121dnl Allow version values to be used in Makefile.
122PHP_SUBST(PHP_MAJOR_VERSION)
123PHP_SUBST(PHP_MINOR_VERSION)
124PHP_SUBST(PHP_RELEASE_VERSION)
125PHP_SUBST(PHP_EXTRA_VERSION)
126
127dnl Define where extension directories are located in the configure context.
128AC_DEFUN([PHP_EXT_BUILDDIR],[$config_m4_dir])dnl
129AC_DEFUN([PHP_EXT_DIR],[$config_m4_dir])dnl
130AC_DEFUN([PHP_EXT_SRCDIR],[$abs_srcdir/$config_m4_dir])dnl
131AC_DEFUN([PHP_ALWAYS_SHARED],[])dnl
132
133dnl Setting up the PHP version based on the information above.
134dnl ----------------------------------------------------------------------------
135
136echo "/* automatically generated by configure */" > php_version.h.new
137echo "/* edit configure.ac to change version number */" >> php_version.h.new
138echo "#define PHP_MAJOR_VERSION $PHP_MAJOR_VERSION" >> php_version.h.new
139echo "#define PHP_MINOR_VERSION $PHP_MINOR_VERSION" >> php_version.h.new
140echo "#define PHP_RELEASE_VERSION $PHP_RELEASE_VERSION" >> php_version.h.new
141echo "#define PHP_EXTRA_VERSION \"$PHP_EXTRA_VERSION\"" >> php_version.h.new
142echo "#define PHP_VERSION \"$PHP_VERSION\"" >> php_version.h.new
143echo "#define PHP_VERSION_ID $PHP_VERSION_ID" >> php_version.h.new
144cmp php_version.h.new $srcdir/main/php_version.h >/dev/null 2>&1
145if test $? -ne 0 ; then
146  rm -f $srcdir/main/php_version.h && mv php_version.h.new $srcdir/main/php_version.h && \
147  echo 'Updated main/php_version.h'
148else
149  rm -f php_version.h.new
150fi
151
152dnl Settings we want to make before the checks.
153dnl ----------------------------------------------------------------------------
154
155php_shtool=$srcdir/build/shtool
156T_MD=`$php_shtool echo -n -e %B`
157T_ME=`$php_shtool echo -n -e %b`
158
159PHP_INIT_BUILD_SYSTEM
160
161dnl We want this one before the checks, so the checks can modify CFLAGS.
162test -z "$CFLAGS" && auto_cflags=1
163
164abs_srcdir=`(cd $srcdir; pwd)`
165abs_builddir=`pwd`
166
167dnl Because `make install` is often performed by the superuser, we create the
168dnl libs subdirectory as the user who configures PHP. Otherwise, the current
169dnl user will not be able to delete libs or the contents of libs.
170
171$php_shtool mkdir -p libs
172rm -f libs/*
173
174dnl Checks for programs.
175dnl ----------------------------------------------------------------------------
176
177PKG_PROG_PKG_CONFIG
178AC_PROG_CC([cc gcc])
179PHP_DETECT_ICC
180PHP_DETECT_SUNCC
181AC_PROG_CPP
182AC_USE_SYSTEM_EXTENSIONS
183AC_PROG_LN_S
184
185dnl Support systems with system libraries in e.g. /usr/lib64.
186PHP_ARG_WITH([libdir],
187  [for system library directory],
188  [AS_HELP_STRING([--with-libdir=NAME],
189    [Look for libraries in .../NAME rather than .../lib])],
190  [lib],
191  [no])
192
193PHP_ARG_ENABLE([rpath],
194  [whether to enable runpaths],
195  [AS_HELP_STRING([--disable-rpath],
196    [Disable passing additional runtime library search paths])],
197  [yes],
198  [no])
199
200dnl Check for -R, etc. switch.
201PHP_RUNPATH_SWITCH
202
203dnl Checks for some support/generator progs.
204PHP_PROG_AWK
205PHP_PROG_BISON([3.0.0])
206PHP_PROG_RE2C([0.13.4])
207
208PHP_ARG_ENABLE([re2c-cgoto],
209  [whether to enable computed goto gcc extension with re2c],
210  [AS_HELP_STRING([--enable-re2c-cgoto],
211    [Enable -g flag to re2c to use computed goto gcc extension])],
212  [no],
213  [no])
214
215if test "$PHP_RE2C_CGOTO" = "no"; then
216  RE2C_FLAGS=""
217else
218  AC_MSG_CHECKING([whether re2c -g works])
219  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[
220int main(int argc, const char **argv)
221{
222  argc = argc;
223  argv = argv;
224label1:
225label2:
226  static void *adr[] = { &&label1, &&label2};
227  goto *adr[0];
228  return 0;
229}
230  ]])],[
231    RE2C_FLAGS=""
232    AC_MSG_RESULT([no])
233  ],[
234    RE2C_FLAGS="-g"
235    AC_MSG_RESULT([yes])
236  ])
237fi
238PHP_SUBST(RE2C_FLAGS)
239
240dnl Platform-specific compile settings.
241dnl ----------------------------------------------------------------------------
242
243dnl See bug #28605
244case $host_cpu in
245  alpha*)
246    if test "$GCC" = "yes"; then
247      CFLAGS="$CFLAGS -mieee"
248    else
249      CFLAGS="$CFLAGS -ieee"
250    fi
251    ;;
252  sparc*)
253    if test "$SUNCC" = "yes"; then
254      CFLAGS="$CFLAGS -xmemalign=8s"
255    fi
256    ;;
257esac
258
259dnl Mark symbols hidden by default if the compiler (for example, gcc >= 4)
260dnl supports it. This can help reduce the binary size and startup time.
261AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],
262                       [CFLAGS="$CFLAGS -fvisibility=hidden"])
263
264case $host_alias in
265  *solaris*)
266    CPPFLAGS="$CPPFLAGS -D_POSIX_PTHREAD_SEMANTICS"
267    if test "${enable_libgcc+set}" != "set" && test "$GCC" = "yes"; then
268      enable_libgcc=yes
269    fi
270    ;;
271  *dgux*)
272    CPPFLAGS="$CPPFLAGS -D_BSD_TIMEOFDAY_FLAVOR"
273    ;;
274  *darwin*)
275    if test -n "$GCC"; then
276      PHP_CHECK_GCC_ARG(-no-cpp-precomp, gcc_no_cpp_precomp=yes)
277      if test "$gcc_no_cpp_precomp" = "yes"; then
278        CPPFLAGS="$CPPFLAGS -no-cpp-precomp"
279      fi
280    fi
281    ;;
282  *mips*)
283    CPPFLAGS="$CPPFLAGS -D_XPG_IV"
284    ;;
285  *hpux*)
286    if test "$GCC" = "yes"; then
287      CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED"
288    fi
289    ;;
290esac
291
292dnl Disable PIC mode by default where it is known to be safe to do so, to avoid
293dnl the performance hit from the lost register.
294AC_MSG_CHECKING([whether to force non-PIC code in shared modules])
295case $host_alias in
296  i?86-*-linux*|i?86-*-freebsd*)
297    if test "${with_pic+set}" != "set" || test "$with_pic" = "no"; then
298      with_pic=no
299      AC_MSG_RESULT(yes)
300    else
301      AC_MSG_RESULT(no)
302    fi
303    ;;
304  *)
305    AC_MSG_RESULT(no)
306    ;;
307esac
308
309dnl Include Zend configurations.
310dnl ----------------------------------------------------------------------------
311
312sinclude(Zend/Zend.m4)
313
314dnl ----------------------------------------------------------------------------
315
316PTHREADS_CHECK
317PHP_HELP_SEPARATOR([SAPI modules:])
318PHP_SHLIB_SUFFIX_NAMES
319PHP_BUILD_PROGRAM
320PHP_SAPI=none
321
322dnl SAPI configuration.
323dnl ----------------------------------------------------------------------------
324
325dnl Paths to the targets are relative to the build directory.
326SAPI_SHARED=libs/libphp[]$PHP_MAJOR_VERSION[.]$SHLIB_DL_SUFFIX_NAME
327SAPI_STATIC=libs/libphp[]$PHP_MAJOR_VERSION[.a]
328SAPI_LIBTOOL=libphp[]$PHP_MAJOR_VERSION[.la]
329
330PHP_CONFIGURE_PART(Configuring SAPI modules)
331
332esyscmd(./build/config-stubs sapi)
333
334dnl Show which main SAPI was selected.
335AC_MSG_CHECKING([for chosen SAPI module])
336AC_MSG_RESULT([$PHP_SAPI])
337
338dnl Show which binaries were selected.
339AC_MSG_CHECKING([for executable SAPI binaries])
340if test "$PHP_BINARIES"; then
341  AC_MSG_RESULT([$PHP_BINARIES])
342else
343  AC_MSG_RESULT([none])
344fi
345
346dnl Exit early.
347if test -z "$PHP_INSTALLED_SAPIS"; then
348  AC_MSG_ERROR([Nothing to build.])
349fi
350
351dnl Force ZTS.
352if test "$enable_maintainer_zts" = "yes"; then
353  dnl Add pthreads linker and compiler flags.
354  if test -n "$ac_cv_pthreads_lib"; then
355    LIBS="$LIBS -l$ac_cv_pthreads_lib"
356  fi
357  if test -n "$ac_cv_pthreads_cflags"; then
358    CFLAGS="$CFLAGS $ac_cv_pthreads_cflags"
359  fi
360
361  PTHREADS_FLAGS
362fi
363
364dnl Starting system checks.
365dnl ----------------------------------------------------------------------------
366
367PHP_CONFIGURE_PART(Running system checks)
368
369dnl Find sendmail binary.
370PHP_PROG_SENDMAIL
371
372dnl Check whether the system uses EBCDIC (not ASCII) as its native codeset.
373PHP_EBCDIC
374
375dnl Check whether the system byte ordering is bigendian.
376PHP_C_BIGENDIAN
377
378dnl Check whether writing to stdout works.
379PHP_TEST_WRITE_STDOUT
380
381dnl Check for /usr/pkg/{lib,include} which is where NetBSD puts binary and
382dnl source packages. This should be harmless on other OSs.
383if test -d /usr/pkg/include -a -d /usr/pkg/lib ; then
384   CPPFLAGS="$CPPFLAGS -I/usr/pkg/include"
385   LDFLAGS="$LDFLAGS -L/usr/pkg/lib"
386fi
387test -d /usr/ucblib && PHP_ADD_LIBPATH(/usr/ucblib)
388
389dnl First, library checks.
390dnl ----------------------------------------------------------------------------
391
392dnl Some systems (OpenServer 5) dislike -lsocket -lnsl, so we try to avoid -lnsl
393dnl checks, if we already have the functions which are usually in libnsl. Also,
394dnl uClibc will bark at linking with glibc's libnsl.
395
396PHP_CHECK_FUNC(socket, socket)
397PHP_CHECK_FUNC(socketpair, socket)
398PHP_CHECK_FUNC(htonl, socket)
399PHP_CHECK_FUNC(gethostname, nsl)
400PHP_CHECK_FUNC(gethostbyaddr, nsl)
401PHP_CHECK_FUNC(dlopen, dl)
402PHP_CHECK_FUNC(dlsym, dl)
403if test "$ac_cv_func_dlopen" = "yes"; then
404  AC_DEFINE(HAVE_LIBDL, 1, [ ])
405fi
406AC_CHECK_LIB(m, sin)
407
408dnl Check for inet_aton in -lc, -lbind and -lresolv.
409PHP_CHECK_FUNC(inet_aton, resolv, bind)
410
411dnl Then headers.
412dnl ----------------------------------------------------------------------------
413
414dnl QNX requires unix.h to allow functions in libunix to work properly.
415dnl locale.h is checked for supporting old code in extensions such as imagick.
416AC_CHECK_HEADERS([ \
417inttypes.h \
418stdint.h \
419dirent.h \
420sys/param.h \
421sys/types.h \
422sys/time.h \
423netinet/in.h \
424alloca.h \
425arpa/inet.h \
426arpa/nameser.h \
427crypt.h \
428dns.h \
429fcntl.h \
430grp.h \
431ieeefp.h \
432langinfo.h \
433locale.h \
434malloc.h \
435monetary.h \
436netdb.h \
437poll.h \
438pwd.h \
439resolv.h \
440strings.h \
441syslog.h \
442sysexits.h \
443sys/auxv.h \
444sys/ioctl.h \
445sys/file.h \
446sys/mman.h \
447sys/mount.h \
448sys/poll.h \
449sys/resource.h \
450sys/select.h \
451sys/socket.h \
452sys/stat.h \
453sys/statfs.h \
454sys/statvfs.h \
455sys/vfs.h \
456sys/sysexits.h \
457sys/uio.h \
458sys/wait.h \
459sys/loadavg.h \
460termios.h \
461unistd.h \
462unix.h \
463utime.h \
464sys/utsname.h \
465sys/ipc.h \
466dlfcn.h \
467tmmintrin.h \
468nmmintrin.h \
469immintrin.h
470],[],[],[
471#ifdef HAVE_SYS_PARAM_H
472#include <sys/param.h>
473#endif
474#ifdef HAVE_SYS_TYPES_H
475#include <sys/types.h>
476#endif
477#ifdef HAVE_SYS_TIME_H
478#include <sys/time.h>
479#endif
480#ifdef HAVE_NETINET_IN_H
481#include <netinet/in.h>
482#endif
483#ifdef HAVE_ARPA_NAMESER_H
484#include <arpa/nameser.h>
485#endif
486])
487
488PHP_FOPENCOOKIE
489PHP_BROKEN_GETCWD
490if test "$GCC" = "yes"; then
491  PHP_BROKEN_GCC_STRLEN_OPT
492fi
493
494dnl Checks for typedefs, structures, and compiler characteristics.
495dnl ----------------------------------------------------------------------------
496
497AC_STRUCT_TIMEZONE
498
499PHP_MISSING_TIME_R_DECL
500PHP_MISSING_FCLOSE_DECL
501PHP_STRUCT_FLOCK
502
503AC_CHECK_TYPES(socklen_t, [], [], [
504  #ifdef HAVE_SYS_TYPES_H
505  # include <sys/types.h>
506  #endif
507  #ifdef HAVE_SYS_SOCKET_H
508  # include <sys/socket.h>
509  #endif
510])
511
512dnl These are defined elsewhere than stdio.h.
513PHP_CHECK_SIZEOF(intmax_t, 0)
514PHP_CHECK_SIZEOF(ssize_t, 8)
515PHP_CHECK_SIZEOF(ptrdiff_t, 8)
516
517dnl Check stdint types (must be after header check).
518PHP_CHECK_STDINT_TYPES
519
520dnl Check __builtin_expect
521PHP_CHECK_BUILTIN_EXPECT
522dnl Check __builtin_clz
523PHP_CHECK_BUILTIN_CLZ
524dnl Check __builtin_ctzl
525PHP_CHECK_BUILTIN_CTZL
526dnl Check __builtin_ctzll
527PHP_CHECK_BUILTIN_CTZLL
528dnl Check __builtin_smull_overflow
529PHP_CHECK_BUILTIN_SMULL_OVERFLOW
530dnl Check __builtin_smulll_overflow
531PHP_CHECK_BUILTIN_SMULLL_OVERFLOW
532dnl Check __builtin_saddl_overflow
533PHP_CHECK_BUILTIN_SADDL_OVERFLOW
534dnl Check __builtin_saddll_overflow
535PHP_CHECK_BUILTIN_SADDLL_OVERFLOW
536dnl Check __builtin_ssubl_overflow
537PHP_CHECK_BUILTIN_SSUBL_OVERFLOW
538dnl Check __builtin_ssubll_overflow
539PHP_CHECK_BUILTIN_SSUBLL_OVERFLOW
540dnl Check __builtin_cpu_init
541PHP_CHECK_BUILTIN_CPU_INIT
542dnl Check __builtin_cpu_supports
543PHP_CHECK_BUILTIN_CPU_SUPPORTS
544
545dnl Check instructions.
546PHP_CHECK_CPU_SUPPORTS([ssse3])
547PHP_CHECK_CPU_SUPPORTS([sse4.2])
548PHP_CHECK_CPU_SUPPORTS([avx])
549PHP_CHECK_CPU_SUPPORTS([avx2])
550
551dnl Check for structure members.
552AC_CHECK_MEMBERS([struct tm.tm_gmtoff],,,[#include <time.h>])
553AC_CHECK_MEMBERS([struct stat.st_blksize, struct stat.st_rdev])
554dnl AC_STRUCT_ST_BLOCKS will screw QNX because fileblocks.o does not exist.
555if test "`uname -s 2>/dev/null`" != "QNX"; then
556  AC_STRUCT_ST_BLOCKS
557fi
558
559dnl Checks for types.
560AC_TYPE_SIZE_T
561AC_TYPE_UID_T
562
563dnl Checks for sockaddr_storage and sockaddr.sa_len.
564PHP_SOCKADDR_CHECKS
565
566dnl Checks for GCC function attributes on all systems except ones without glibc
567dnl Fix for these systems is already included in GCC 7, but not on GCC 6.
568dnl
569dnl At least some versions of FreeBSD seem to have buggy ifunc support, see
570dnl bug #77284. Conservatively don't use ifuncs on FreeBSD.
571AS_CASE([$host_alias], [*-*-*android*|*-*-*uclibc*|*-*-*musl*|*freebsd*|*openbsd*], [true], [
572  AX_GCC_FUNC_ATTRIBUTE([ifunc])
573  AX_GCC_FUNC_ATTRIBUTE([target])
574])
575
576dnl Check for IPv6 support.
577AC_CACHE_CHECK([for IPv6 support], ac_cv_ipv6_support,
578[AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
579#include <sys/socket.h>
580#include <netinet/in.h>]], [[struct sockaddr_in6 s; struct in6_addr t=in6addr_any; int i=AF_INET6; s; t.s6_addr[0] = 0;]])],
581  [ac_cv_ipv6_support=yes], [ac_cv_ipv6_support=no])])
582
583dnl Checks for library functions.
584dnl ----------------------------------------------------------------------------
585
586AC_CHECK_FUNCS(
587alphasort \
588asctime_r \
589chroot \
590ctime_r \
591crypt \
592explicit_memset \
593flock \
594fpclass \
595ftok \
596funopen \
597gai_strerror \
598getcwd \
599getloadavg \
600getlogin \
601getprotobyname \
602getprotobynumber \
603getservbyname \
604getservbyport \
605getrusage \
606gettimeofday \
607gmtime_r \
608getpwnam_r \
609getgrnam_r \
610getpwuid_r \
611getwd \
612glob \
613grantpt \
614inet_ntoa \
615inet_ntop \
616inet_pton \
617localtime_r \
618lchown \
619mbrlen \
620memmove \
621mkstemp \
622mmap \
623nice \
624nl_langinfo \
625poll \
626ptsname \
627putenv \
628realpath \
629rand_r \
630scandir \
631setitimer \
632setenv \
633shutdown \
634sigprocmask \
635statfs \
636statvfs \
637std_syslog \
638strcasecmp \
639strfmon \
640strnlen \
641strptime \
642strtok_r \
643symlink \
644tzset \
645unlockpt \
646unsetenv \
647usleep \
648utime \
649vasprintf \
650asprintf \
651nanosleep \
652memmem \
653)
654
655AX_FUNC_WHICH_GETHOSTBYNAME_R
656
657dnl Some systems (like OpenSolaris) do not have nanosleep in libc.
658PHP_CHECK_FUNC_LIB(nanosleep, rt)
659
660dnl Check for getaddrinfo, should be a better way, but... Also check for working
661dnl getaddrinfo.
662AC_CACHE_CHECK([for getaddrinfo], ac_cv_func_getaddrinfo,
663[AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <netdb.h>]],
664  [[struct addrinfo *g,h;g=&h;getaddrinfo("","",g,&g);]])],[AC_RUN_IFELSE([AC_LANG_SOURCE([[
665#include <string.h>
666#include <netdb.h>
667#include <sys/types.h>
668#ifndef AF_INET
669# include <sys/socket.h>
670#endif
671int main(void) {
672  struct addrinfo *ai, *pai, hints;
673
674  memset(&hints, 0, sizeof(hints));
675  hints.ai_flags = AI_NUMERICHOST;
676
677  if (getaddrinfo("127.0.0.1", 0, &hints, &ai) < 0) {
678    return 1;
679  }
680
681  if (ai == 0) {
682    return 1;
683  }
684
685  pai = ai;
686
687  while (pai) {
688    if (pai->ai_family != AF_INET) {
689      /* 127.0.0.1/NUMERICHOST should only resolve ONE way */
690      return 1;
691    }
692    if (pai->ai_addr->sa_family != AF_INET) {
693      /* 127.0.0.1/NUMERICHOST should only resolve ONE way */
694      return 1;
695    }
696    pai = pai->ai_next;
697  }
698  freeaddrinfo(ai);
699  return 0;
700}
701  ]])],[ac_cv_func_getaddrinfo=yes], [ac_cv_func_getaddrinfo=no], [ac_cv_func_getaddrinfo=no])],
702[ac_cv_func_getaddrinfo=no])])
703if test "$ac_cv_func_getaddrinfo" = yes; then
704  AC_DEFINE(HAVE_GETADDRINFO,1,[Define if you have the getaddrinfo function])
705fi
706
707dnl Check for the __sync_fetch_and_add builtin.
708AC_CACHE_CHECK([for __sync_fetch_and_add], ac_cv_func_sync_fetch_and_add,
709[AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[int x;__sync_fetch_and_add(&x,1);]])],[ac_cv_func_sync_fetch_and_add=yes],[ac_cv_func_sync_fetch_and_add=no])])
710if test "$ac_cv_func_sync_fetch_and_add" = yes; then
711  AC_DEFINE(HAVE_SYNC_FETCH_AND_ADD,1,[Define if you have the __sync_fetch_and_add function])
712fi
713
714AC_REPLACE_FUNCS(strlcat strlcpy explicit_bzero getopt)
715AC_FUNC_ALLOCA
716PHP_TIME_R_TYPE
717PHP_CHECK_IN_ADDR_T
718
719AC_CHECK_FUNCS(crypt_r, [ php_crypt_r="1" ], [ php_crypt_r="0" ])
720if test "x$php_crypt_r" = "x1"; then
721  PHP_CRYPT_R_STYLE
722fi
723
724AC_CACHE_CHECK([for aarch64 CRC32 API], ac_cv_func___crc32d,
725[AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <arm_acle.h>]],[[__crc32d(0, 0);]])],[ac_cv_func___crc32d=yes],[ac_cv_func___crc32d="no"])])
726if test "$ac_cv_func___crc32d" = "yes"; then
727  AC_DEFINE([HAVE_AARCH64_CRC32], [1], [Define when aarch64 CRC32 API is available.])
728fi
729
730dnl Check for asm goto support.
731AC_CACHE_CHECK([for asm goto], ac_cv__asm_goto,
732[AC_RUN_IFELSE([AC_LANG_SOURCE([[
733int main(void) {
734#if defined(__x86_64__) || defined(__i386__)
735    __asm__ goto("jmp %l0\n" :::: end);
736#elif defined(__aarch64__)
737    __asm__ goto("b %l0\n" :::: end);
738#endif
739end:
740    return 0;
741}
742  ]])], [ac_cv__asm_goto=yes], [ac_cv__asm_goto=no], [ac_cv__asm_goto=no])])
743
744if test "$ac_cv__asm_goto" = yes; then
745  AC_DEFINE(HAVE_ASM_GOTO,1,[Define if asm goto support])
746fi
747
748dnl Check valgrind support.
749PHP_ARG_WITH([valgrind],
750  [whether to enable valgrind support],
751  [AS_HELP_STRING([--with-valgrind],
752    [Enable valgrind support])],
753  [yes],
754  [no])
755
756if test "$PHP_VALGRIND" != "no"; then
757  PKG_CHECK_MODULES([VALGRIND], [valgrind], [have_valgrind="yes"], [have_valgrind="no"])
758
759  if test "$have_valgrind" = "yes"; then
760    PHP_EVAL_INCLINE($VALGRIND_CFLAGS)
761    AC_DEFINE(HAVE_VALGRIND, 1, [ ])
762  else
763    if test "$with_valgrind" = "yes"; then
764      AC_MSG_ERROR([Valgrind not found. Please install Valgrind.])
765    fi
766  fi
767fi
768
769dnl General settings.
770dnl ----------------------------------------------------------------------------
771PHP_CONFIGURE_PART(General settings)
772
773PHP_HELP_SEPARATOR([General settings:])
774
775PHP_ARG_ENABLE([gcov],
776  [whether to include gcov symbols],
777  [AS_HELP_STRING([--enable-gcov],
778    [Enable GCOV code coverage - FOR DEVELOPERS ONLY!!])],
779  [no],
780  [no])
781
782if test "$PHP_GCOV" = "yes"; then
783
784  if test "$GCC" != "yes"; then
785    AC_MSG_ERROR([GCC is required for --enable-gcov])
786  fi
787
788  dnl Check if ccache is being used.
789  case `$php_shtool path $CC` in
790    *ccache*[)] gcc_ccache=yes;;
791    *[)] gcc_ccache=no;;
792  esac
793
794  if test "$gcc_ccache" = "yes" && (test -z "$CCACHE_DISABLE" || test "$CCACHE_DISABLE" != "1"); then
795    AC_MSG_ERROR([ccache must be disabled when --enable-gcov option is used. You can disable ccache by setting environment variable CCACHE_DISABLE=1.])
796  fi
797
798  AC_DEFINE(HAVE_GCOV, 1, [Whether you have gcov])
799  PHP_ADD_MAKEFILE_FRAGMENT($abs_srcdir/build/Makefile.gcov, $abs_srcdir)
800
801  dnl Remove all optimization flags from CFLAGS.
802  changequote({,})
803  CFLAGS=`echo "$CFLAGS" | "${SED}" -e 's/-O[0-9s]*//g'`
804  CXXFLAGS=`echo "$CXXFLAGS" | "${SED}" -e 's/-O[0-9s]*//g'`
805  changequote([,])
806
807  dnl Add the special gcc flags.
808  CFLAGS="$CFLAGS -O0 -fprofile-arcs -ftest-coverage"
809  CXXFLAGS="$CXXFLAGS -O0 -fprofile-arcs -ftest-coverage"
810fi
811
812PHP_ARG_ENABLE([debug],
813  [whether to include debugging symbols],
814  [AS_HELP_STRING([--enable-debug],
815    [Compile with debugging symbols])],
816  [no],
817  [no])
818
819if test "$PHP_DEBUG" = "yes"; then
820  PHP_DEBUG=1
821  ZEND_DEBUG=yes
822  changequote({,})
823  CFLAGS=`echo "$CFLAGS" | "${SED}" -e 's/-O[0-9s]*//g'`
824  CXXFLAGS=`echo "$CXXFLAGS" | "${SED}" -e 's/-O[0-9s]*//g'`
825  changequote([,])
826  dnl Add -O0 only if GCC or ICC is used.
827  if test "$GCC" = "yes" || test "$ICC" = "yes"; then
828    CFLAGS="$CFLAGS -O0"
829    CXXFLAGS="$CXXFLAGS -g -O0"
830  fi
831  if test "$SUNCC" = "yes"; then
832    if test -n "$auto_cflags"; then
833      CFLAGS="-g"
834      CXXFLAGS="-g"
835    else
836      CFLAGS="$CFLAGS -g"
837      CXXFLAGS="$CFLAGS -g"
838    fi
839  fi
840else
841  PHP_DEBUG=0
842  ZEND_DEBUG=no
843fi
844
845PHP_ARG_ENABLE([rtld-now],
846  [whether to dlopen extensions with RTLD_NOW instead of RTLD_LAZY],
847  [AS_HELP_STRING([--enable-rtld-now],
848    [Use dlopen with RTLD_NOW instead of RTLD_LAZY])],
849  [no],
850  [no])
851
852if test "$PHP_RTLD_NOW" = "yes"; then
853  AC_DEFINE(PHP_USE_RTLD_NOW, 1, [ Use dlopen with RTLD_NOW instead of RTLD_LAZY ])
854fi
855
856PHP_ARG_WITH([layout],
857  [layout of installed files],
858  [AS_HELP_STRING([--with-layout=TYPE],
859    [Set how installed files will be laid out. Type can be either PHP or GNU [PHP]])],
860  [PHP],
861  [no])
862
863case $PHP_LAYOUT in
864  GNU)
865    oldstyleextdir=no
866    ;;
867  *)
868    oldstyleextdir=yes
869    ;;
870esac
871
872PHP_ARG_WITH([config-file-path],
873  [path to configuration file],
874  [AS_HELP_STRING([--with-config-file-path=PATH],
875    [Set the path in which to look for php.ini [PREFIX/lib]])],
876  [DEFAULT],
877  [no])
878
879if test "$PHP_CONFIG_FILE_PATH" = "DEFAULT"; then
880  case $PHP_LAYOUT in
881    GNU)
882      PHP_CONFIG_FILE_PATH=$sysconfdir
883      ;;
884    *)
885      PHP_CONFIG_FILE_PATH=$libdir
886      ;;
887  esac
888fi
889
890AC_MSG_CHECKING([where to scan for configuration files])
891PHP_ARG_WITH([config-file-scan-dir],,
892  [AS_HELP_STRING([--with-config-file-scan-dir=PATH],
893    [Set the path where to scan for configuration files])],
894  [DEFAULT],
895  [no])
896
897if test "$PHP_CONFIG_FILE_SCAN_DIR" = "DEFAULT"; then
898  PHP_CONFIG_FILE_SCAN_DIR=
899fi
900AC_MSG_RESULT([$PHP_CONFIG_FILE_SCAN_DIR])
901
902test -n "$DEBUG_CFLAGS" && CFLAGS="$CFLAGS $DEBUG_CFLAGS"
903
904PHP_ARG_ENABLE([sigchild],
905  [whether to enable PHP's own SIGCHLD handler],
906  [AS_HELP_STRING([--enable-sigchild],
907    [Enable PHP's own SIGCHLD handler])],
908  [no],
909  [no])
910
911if test "$PHP_SIGCHILD" = "yes"; then
912  AC_DEFINE(PHP_SIGCHILD, 1, [ ])
913else
914  AC_DEFINE(PHP_SIGCHILD, 0, [ ])
915fi
916
917PHP_ARG_ENABLE([libgcc],
918  [whether to explicitly link against libgcc],
919  [AS_HELP_STRING([--enable-libgcc],
920    [Enable explicitly linking against libgcc])],
921  [no],
922  [no])
923
924if test "$PHP_LIBGCC" = "yes"; then
925  PHP_LIBGCC_LIBPATH(gcc)
926  if test -z "$libgcc_libpath"; then
927    AC_MSG_ERROR([Cannot locate libgcc. Make sure that gcc is in your path])
928  fi
929  PHP_ADD_LIBPATH($libgcc_libpath)
930  PHP_ADD_LIBRARY(gcc, yes)
931fi
932
933PHP_ARG_ENABLE([short-tags],
934  [whether to enable short tags by default],
935  [AS_HELP_STRING([--disable-short-tags],
936    [Disable the short-form <? start tag by default])],
937  [yes],
938  [no])
939
940if test "$PHP_SHORT_TAGS" = "yes"; then
941  AC_DEFINE(DEFAULT_SHORT_OPEN_TAG, "1", [ ])
942else
943  AC_DEFINE(DEFAULT_SHORT_OPEN_TAG, "0", [ ])
944fi
945
946PHP_ARG_ENABLE([dmalloc],
947  [whether to enable dmalloc],
948  [AS_HELP_STRING([--enable-dmalloc],
949    [Enable dmalloc])],
950  [no],
951  [no])
952
953if test "$PHP_DMALLOC" = "yes"; then
954  AC_CHECK_LIB(dmalloc, dmalloc_error, [
955    PHP_ADD_LIBRARY(dmalloc)
956    AC_DEFINE(HAVE_DMALLOC,1,[Whether you have dmalloc])
957    CPPFLAGS="$CPPFLAGS -DDMALLOC_FUNC_CHECK"
958  ], [
959    AC_MSG_ERROR([Problem with enabling dmalloc. Please check config.log for details.])
960  ])
961fi
962
963PHP_ARG_ENABLE([ipv6],
964  [whether to enable IPv6 support],
965  [AS_HELP_STRING([--disable-ipv6],
966    [Disable IPv6 support])],
967  [yes],
968  [no])
969
970if test "$PHP_IPV6" != "no" && test "$ac_cv_ipv6_support" = yes; then
971  AC_DEFINE(HAVE_IPV6, 1, [Whether to enable IPv6 support])
972fi
973
974dnl DTRACE checks. Note: this has to be done after SAPI configuration.
975PHP_ARG_ENABLE([dtrace],
976  [whether to enable DTrace support],
977  [AS_HELP_STRING([--enable-dtrace],
978    [Enable DTrace support])],
979  [no],
980  [no])
981
982if test "$PHP_DTRACE" = "yes"; then
983  AC_CHECK_HEADERS([sys/sdt.h], [
984    PHP_INIT_DTRACE([Zend/zend_dtrace.d],[Zend/zend_dtrace_gen.h],[main/main.c Zend/zend_API.c \
985      Zend/zend_execute.c Zend/zend_exceptions.c \
986      Zend/zend_dtrace.c Zend/zend.c])
987    AC_DEFINE(HAVE_DTRACE, 1, [Whether to enable DTrace support])
988    PHP_SUBST(PHP_DTRACE_OBJS)
989  ], [
990    AC_MSG_ERROR([Cannot find sys/sdt.h which is required for DTrace support])
991  ])
992fi
993
994AC_MSG_CHECKING([how big to make fd sets])
995PHP_ARG_ENABLE([fd-setsize],,
996  [AS_HELP_STRING([--enable-fd-setsize],
997    [Set size of descriptor sets])],
998  [no],
999  [no])
1000
1001if test "$PHP_FD_SETSIZE" != "no"; then
1002  if test "0$PHP_FD_SETSIZE" -gt 0 2>/dev/null; then
1003    CPPFLAGS="$CPPFLAGS -DFD_SETSIZE=$PHP_FD_SETSIZE"
1004    AC_MSG_RESULT([using $PHP_FD_SETSIZE])
1005  else
1006    AC_MSG_ERROR([Invalid value passed to --enable-fd-setsize!])
1007  fi
1008else
1009  AC_MSG_RESULT([using system default])
1010fi
1011
1012PHP_ARG_ENABLE([werror],,
1013  [AS_HELP_STRING([--enable-werror],
1014    [Enable -Werror])],
1015  [no],
1016  [no])
1017
1018dnl Extension configuration.
1019dnl ----------------------------------------------------------------------------
1020
1021PHP_HELP_SEPARATOR([Extensions:
1022
1023  --with-EXTENSION=[shared[,PATH]]
1024
1025    NOTE: Not all extensions can be build as 'shared'.
1026
1027    Example: --with-foobar=shared,/usr/local/foobar/
1028
1029      o Builds the foobar extension as shared extension.
1030      o foobar package install prefix is /usr/local/foobar/
1031])
1032
1033PHP_CONFIGURE_PART(Configuring extensions)
1034
1035dnl Check if all enabled by default extensions should be disabled.
1036AC_ARG_ENABLE([all],
1037  [AS_HELP_STRING([--disable-all],
1038    [Disable all extensions which are enabled by default])],
1039  [PHP_ENABLE_ALL=$enableval])
1040
1041dnl Reading config stubs.
1042esyscmd(./build/config-stubs ext)
1043
1044dnl Extensions post-config.
1045dnl ----------------------------------------------------------------------------
1046
1047dnl Align segments on huge page boundary
1048case $host_alias in
1049  i[[3456]]86-*-linux-* | x86_64-*-linux-*)
1050	AC_MSG_CHECKING(linker support for -zcommon-page-size=2097152)
1051    save_LDFLAGS=$LDFLAGS
1052    LDFLAGS="$LDFLAGS -Wl,-zcommon-page-size=2097152 -Wl,-zmax-page-size=2097152"
1053    AC_RUN_IFELSE(
1054        [AC_LANG_SOURCE([[int main() {return 0;}]])],
1055        [ac_cv_common_page_size=yes],
1056        [ac_cv_common_page_size=no],
1057        [ac_cv_common_page_size=no])
1058    LDFLAGS=$save_LDFLAGS
1059    if test "$ac_cv_common_page_size" = "yes"; then
1060        AC_MSG_RESULT([yes])
1061        EXTRA_LDFLAGS_PROGRAM="$EXTRA_LDFLAGS_PROGRAM -Wl,-zcommon-page-size=2097152 -Wl,-zmax-page-size=2097152"
1062    else
1063        AC_MSG_RESULT([no])
1064        AC_MSG_CHECKING(linker support for -zmax-page-size=2097152)
1065        save_LDFLAGS=$LDFLAGS
1066        LDFLAGS="$LDFLAGS -Wl,-zmax-page-size=2097152"
1067        AC_RUN_IFELSE(
1068            [AC_LANG_SOURCE([[int main() {return 0;}]])],
1069            [ac_cv_max_page_size=yes],
1070            [ac_cv_max_page_size=no],
1071            [ac_cv_max_page_size=no])
1072        LDFLAGS=$save_LDFLAGS
1073        if test "$ac_cv_max_page_size" = "yes"; then
1074            AC_MSG_RESULT([yes])
1075            EXTRA_LDFLAGS_PROGRAM="$EXTRA_LDFLAGS_PROGRAM -Wl,-zmax-page-size=2097152"
1076        else
1077            AC_MSG_RESULT([no])
1078        fi
1079    fi
1080    ;;
1081esac
1082
1083enable_shared=yes
1084enable_static=yes
1085
1086case $php_sapi_module in
1087  shared[)]
1088    enable_static=no
1089    case $with_pic in
1090      yes)
1091        standard_libtool_flag='-prefer-pic'
1092        ;;
1093      no)
1094        standard_libtool_flag='-prefer-non-pic'
1095        ;;
1096    esac
1097    EXTRA_LDFLAGS="$EXTRA_LDFLAGS -avoid-version -module"
1098    ;;
1099  *[)]
1100    standard_libtool_flag='-prefer-non-pic -static'
1101    if test -z "$PHP_MODULES" && test -z "$PHP_ZEND_EX"; then
1102      enable_shared=no
1103    fi
1104    ;;
1105esac
1106
1107EXTRA_LIBS="$EXTRA_LIBS $DLIBS $LIBS"
1108
1109dnl This has to be here to prevent the openssl crypt() from overriding the
1110dnl system provided crypt().
1111if test "$ac_cv_lib_crypt_crypt" = "yes"; then
1112  EXTRA_LIBS="-lcrypt $EXTRA_LIBS -lcrypt"
1113fi
1114
1115unset LIBS LDFLAGS
1116
1117dnl PEAR
1118dnl ----------------------------------------------------------------------------
1119
1120PHP_HELP_SEPARATOR([PEAR:])
1121PHP_CONFIGURE_PART(Configuring PEAR)
1122
1123dnl Compatibility
1124if test -z "$with_pear" && test "$enable_pear" = "no"; then
1125  with_pear=no
1126fi
1127
1128dnl If CLI is disabled disable PEAR.
1129if test "$PHP_CLI" = "no"; then
1130  with_pear=no
1131fi
1132
1133PHP_ARG_WITH([pear],
1134  [whether to install PEAR],
1135  [AS_HELP_STRING([[--with-pear[=DIR]]],
1136    [Install PEAR in DIR [PREFIX/lib/php]])],
1137  [no],
1138  [yes])
1139
1140if test "$PHP_PEAR" != "no"; then
1141
1142  dnl PEAR dependencies.
1143  if test "$PHP_XML" = "no"; then
1144    pear_error_msg="$pear_error_msg
1145                    PEAR requires XML to be enabled.     Add --enable-xml to the configure line. (or --without-pear)"
1146  fi
1147
1148  if test "$pear_error_msg"; then
1149    AC_MSG_ERROR([$pear_error_msg])
1150  fi
1151
1152  AC_MSG_WARN([The --with-pear option is deprecated])
1153
1154  install_pear="install-pear"
1155  PEAR_INSTALLDIR=$PHP_PEAR
1156
1157  if test "$PHP_PEAR" = "yes"; then
1158    case $PHP_LAYOUT in
1159      GNU) PEAR_INSTALLDIR=$datadir/pear;;
1160      *)   PEAR_INSTALLDIR=$libdir/php;;
1161    esac
1162  fi
1163
1164  PHP_ADD_MAKEFILE_FRAGMENT($abs_srcdir/pear/Makefile.frag,$abs_srcdir/pear,pear)
1165fi
1166
1167dnl Configuring Zend and TSRM.
1168dnl ----------------------------------------------------------------------------
1169
1170PHP_HELP_SEPARATOR([Zend:])
1171PHP_CONFIGURE_PART(Configuring Zend)
1172
1173LIBZEND_BASIC_CHECKS
1174LIBZEND_DLSYM_CHECK
1175LIBZEND_OTHER_CHECKS
1176
1177if test "$ZEND_MAINTAINER_ZTS" = "yes"; then
1178  AC_DEFINE(ZTS,1,[ ])
1179  PHP_THREAD_SAFETY=yes
1180else
1181  PHP_THREAD_SAFETY=no
1182fi
1183
1184INCLUDES="$INCLUDES -I\$(top_builddir)/TSRM"
1185INCLUDES="$INCLUDES -I\$(top_builddir)/Zend"
1186
1187if test "$abs_srcdir" != "$abs_builddir"; then
1188  INCLUDES="$INCLUDES -I\$(top_srcdir)/main -I\$(top_srcdir)/Zend"
1189  INCLUDES="$INCLUDES -I\$(top_srcdir)/TSRM -I\$(top_builddir)/"
1190fi
1191
1192ZEND_EXTRA_LIBS="$LIBS"
1193unset LIBS LDFLAGS
1194
1195PHP_HELP_SEPARATOR([TSRM:])
1196PHP_CONFIGURE_PART(Configuring TSRM)
1197if test "$PHP_THREAD_SAFETY" = "yes"; then
1198  TSRM_THREADS_CHECKS
1199fi
1200
1201EXTRA_LDFLAGS="$EXTRA_LDFLAGS $LDFLAGS"
1202EXTRA_LDFLAGS_PROGRAM="$EXTRA_LDFLAGS_PROGRAM $LDFLAGS"
1203EXTRA_LIBS="$EXTRA_LIBS $LIBS"
1204unset LIBS LDFLAGS
1205
1206AC_ARG_PROGRAM
1207
1208test "$prefix" = "NONE" && prefix=/usr/local
1209test "$exec_prefix" = "NONE" && exec_prefix='${prefix}'
1210test "$program_prefix" = "NONE" && program_prefix=
1211test "$program_suffix" = "NONE" && program_suffix=
1212
1213case $libdir in
1214  '${exec_prefix}/lib')
1215    libdir=$libdir/php
1216    ;;
1217esac
1218case `eval echo $datadir` in
1219  '${prefix}/share')
1220    datadir=$datadir/php
1221    ;;
1222esac
1223
1224phplibdir=`pwd`/modules
1225$php_shtool mkdir -p $phplibdir
1226phptempdir=`pwd`/libs
1227
1228old_exec_prefix=$exec_prefix
1229old_libdir=$libdir
1230old_datadir=$datadir
1231exec_prefix=`eval echo $exec_prefix`
1232libdir=`eval echo $libdir`
1233datadir=`eval eval echo $datadir`
1234
1235dnl Build extension directory path.
1236ZEND_MODULE_API_NO=`$EGREP '#define ZEND_MODULE_API_NO ' $srcdir/Zend/zend_modules.h|"${SED}" 's/#define ZEND_MODULE_API_NO //'`
1237
1238if test -z "$EXTENSION_DIR"; then
1239  extbasedir=$ZEND_MODULE_API_NO
1240  if test "$oldstyleextdir" = "yes"; then
1241    if test "$PHP_DEBUG" = "1"; then
1242      part1=debug
1243    else
1244      part1=no-debug
1245    fi
1246    if test "$enable_maintainer_zts" = "yes"; then
1247      part2=zts
1248    else
1249      part2=non-zts
1250    fi
1251    extbasedir=$part1-$part2-$extbasedir
1252    EXTENSION_DIR=$libdir/extensions/$extbasedir
1253  else
1254    if test "$enable_maintainer_zts" = "yes"; then
1255      extbasedir=$extbasedir-zts
1256    fi
1257
1258    if test "$PHP_DEBUG" = "1"; then
1259      extbasedir=$extbasedir-debug
1260    fi
1261    EXTENSION_DIR=$libdir/$extbasedir
1262  fi
1263fi
1264
1265case $PHP_LAYOUT in
1266  GNU)
1267    datarootdir=$prefix/share
1268    ;;
1269  *)
1270    datarootdir=$prefix/php
1271    ;;
1272esac
1273
1274dnl Expand all directory names for use in macros/constants.
1275EXPANDED_PEAR_INSTALLDIR=`eval echo $PEAR_INSTALLDIR`
1276EXPANDED_EXTENSION_DIR=`eval echo $EXTENSION_DIR`
1277EXPANDED_LOCALSTATEDIR=`eval echo $localstatedir`
1278EXPANDED_BINDIR=`eval echo $bindir`
1279EXPANDED_SBINDIR=`eval echo $sbindir`
1280EXPANDED_MANDIR=`eval echo $mandir`
1281EXPANDED_LIBDIR=$libdir
1282EXPANDED_SYSCONFDIR=`eval echo $sysconfdir`
1283EXPANDED_DATADIR=$datadir
1284EXPANDED_PHP_CONFIG_FILE_PATH=`eval echo "$PHP_CONFIG_FILE_PATH"`
1285EXPANDED_PHP_CONFIG_FILE_SCAN_DIR=`eval echo "$PHP_CONFIG_FILE_SCAN_DIR"`
1286INCLUDE_PATH=.:$EXPANDED_PEAR_INSTALLDIR
1287
1288exec_prefix=$old_exec_prefix
1289libdir=$old_libdir
1290datadir=$old_datadir
1291
1292AC_SUBST(INCLUDE_PATH)
1293AC_SUBST(EXPANDED_PEAR_INSTALLDIR)
1294AC_SUBST(EXPANDED_EXTENSION_DIR)
1295AC_SUBST(EXPANDED_BINDIR)
1296AC_SUBST(EXPANDED_SBINDIR)
1297AC_SUBST(EXPANDED_MANDIR)
1298AC_SUBST(EXPANDED_LIBDIR)
1299AC_SUBST(EXPANDED_DATADIR)
1300AC_SUBST(EXPANDED_SYSCONFDIR)
1301AC_SUBST(EXPANDED_LOCALSTATEDIR)
1302AC_SUBST(EXPANDED_PHP_CONFIG_FILE_PATH)
1303AC_SUBST(EXPANDED_PHP_CONFIG_FILE_SCAN_DIR)
1304
1305if test -n "$php_ldflags_add_usr_lib"; then
1306  PHP_RPATHS="$PHP_RPATHS /usr/lib"
1307fi
1308
1309PHP_UTILIZE_RPATHS
1310
1311if test -z "$php_ldflags_add_usr_lib"; then
1312  PHP_REMOVE_USR_LIB(PHP_LDFLAGS)
1313  PHP_REMOVE_USR_LIB(LDFLAGS)
1314fi
1315
1316EXTRA_LDFLAGS="$EXTRA_LDFLAGS $PHP_LDFLAGS"
1317EXTRA_LDFLAGS_PROGRAM="$EXTRA_LDFLAGS_PROGRAM $PHP_LDFLAGS"
1318
1319dnl SOURCE_DATE_EPOCH for reproducible builds
1320dnl https://reproducible-builds.org/specs/source-date-epoch/
1321PHP_BUILD_DATE=`date --utc --date="@${SOURCE_DATE_EPOCH:-$(date +%s)}" +%Y-%m-%d 2>/dev/null`
1322if test $? -ne 0 ; then
1323PHP_BUILD_DATE=`date -u +%Y-%m-%d`
1324fi
1325AC_DEFINE_UNQUOTED(PHP_BUILD_DATE,"$PHP_BUILD_DATE",[PHP build date])
1326
1327UNAME=`uname -a | xargs`
1328PHP_UNAME=${PHP_UNAME:-$UNAME}
1329AC_DEFINE_UNQUOTED(PHP_UNAME,"$PHP_UNAME",[uname -a output])
1330PHP_OS=`uname | xargs`
1331AC_DEFINE_UNQUOTED(PHP_OS,"$PHP_OS",[uname output])
1332
1333PHP_SUBST_OLD(PHP_INSTALLED_SAPIS)
1334
1335PHP_SUBST(PHP_FASTCGI_OBJS)
1336PHP_SUBST(PHP_SAPI_OBJS)
1337PHP_SUBST(PHP_BINARY_OBJS)
1338PHP_SUBST(PHP_GLOBAL_OBJS)
1339
1340PHP_SUBST(PHP_BINARIES)
1341PHP_SUBST(PHP_MODULES)
1342PHP_SUBST(PHP_ZEND_EX)
1343
1344PHP_SUBST(EXT_LIBS)
1345
1346PHP_SUBST_OLD(abs_builddir)
1347PHP_SUBST_OLD(abs_srcdir)
1348
1349PHP_SUBST(bindir)
1350PHP_SUBST(sbindir)
1351PHP_SUBST(exec_prefix)
1352PHP_SUBST_OLD(program_prefix)
1353PHP_SUBST_OLD(program_suffix)
1354PHP_SUBST(includedir)
1355PHP_SUBST(libdir)
1356PHP_SUBST(mandir)
1357PHP_SUBST(phplibdir)
1358PHP_SUBST(phptempdir)
1359PHP_SUBST(prefix)
1360PHP_SUBST(localstatedir)
1361PHP_SUBST(datadir)
1362PHP_SUBST(datarootdir)
1363PHP_SUBST(sysconfdir)
1364
1365PHP_SUBST(EXEEXT)
1366PHP_SUBST(CC)
1367PHP_SUBST(CFLAGS)
1368PHP_SUBST(CFLAGS_CLEAN)
1369PHP_SUBST(CPP)
1370PHP_SUBST(CPPFLAGS)
1371PHP_SUBST(CXX)
1372PHP_SUBST(CXXFLAGS)
1373PHP_SUBST(CXXFLAGS_CLEAN)
1374PHP_SUBST_OLD(DEBUG_CFLAGS)
1375PHP_SUBST_OLD(EXTENSION_DIR)
1376PHP_SUBST_OLD(EXTRA_LDFLAGS)
1377PHP_SUBST_OLD(EXTRA_LDFLAGS_PROGRAM)
1378PHP_SUBST_OLD(EXTRA_LIBS)
1379PHP_SUBST_OLD(ZEND_EXTRA_LIBS)
1380PHP_SUBST_OLD(INCLUDES)
1381PHP_SUBST_OLD(EXTRA_INCLUDES)
1382PHP_SUBST_OLD(INCLUDE_PATH)
1383PHP_SUBST_OLD(INSTALL_IT)
1384PHP_SUBST(LFLAGS)
1385PHP_SUBST(LIBTOOL)
1386PHP_SUBST(LN_S)
1387PHP_SUBST_OLD(NATIVE_RPATHS)
1388PHP_SUBST_OLD(PEAR_INSTALLDIR)
1389PHP_SUBST(PHP_BUILD_DATE)
1390PHP_SUBST_OLD(PHP_LDFLAGS)
1391PHP_SUBST_OLD(PHP_LIBS)
1392PHP_SUBST(OVERALL_TARGET)
1393PHP_SUBST(PHP_RPATHS)
1394PHP_SUBST(PHP_SAPI)
1395PHP_SUBST_OLD(PHP_VERSION)
1396PHP_SUBST_OLD(PHP_VERSION_ID)
1397PHP_SUBST(SHELL)
1398PHP_SUBST(SHARED_LIBTOOL)
1399PHP_SUBST(PHP_FRAMEWORKS)
1400PHP_SUBST(PHP_FRAMEWORKPATH)
1401PHP_SUBST(INSTALL_HEADERS)
1402
1403old_CC=$CC
1404
1405if test "$PHP_THREAD_SAFETY" = "yes" && test -n "$ac_cv_pthreads_cflags"; then
1406  CXXFLAGS="$CXXFLAGS $ac_cv_pthreads_cflags"
1407  INLINE_CFLAGS="$INLINE_CFLAGS $ac_cv_pthreads_cflags"
1408  CPPFLAGS="$CPPFLAGS $ac_cv_pthreads_cflags"
1409fi
1410
1411if test "$PHP_WERROR" = "yes"; then
1412  CFLAGS="$CFLAGS -Werror"
1413  CPPFLAGS="$CPPFLAGS -Werror"
1414fi
1415
1416dnl
1417dnl Libtool creation.
1418dnl
1419
1420PHP_HELP_SEPARATOR([Libtool:])
1421PHP_CONFIGURE_PART(Configuring libtool)
1422
1423dnl Silence warning: `ar: 'u' modifier ignored since 'D' is the default`
1424dnl See https://github.com/php/php-src/pull/3017
1425AC_SUBST(AR_FLAGS, [cr])
1426
1427dnl Only allow AC_PROG_CXX and AC_PROG_CXXCPP if they are explicitly called (by
1428dnl PHP_REQUIRE_CXX). Otherwise AC_PROG_LIBTOOL fails if there is no working C++
1429dnl compiler.
1430AC_PROVIDE_IFELSE([PHP_REQUIRE_CXX], [], [
1431  undefine([AC_PROG_CXX])
1432  AC_DEFUN([AC_PROG_CXX], [])
1433  undefine([AC_PROG_CXXCPP])
1434  AC_DEFUN([AC_PROG_CXXCPP], [php_prog_cxxcpp=disabled])
1435])
1436AC_PROG_LIBTOOL
1437
1438PHP_SET_LIBTOOL_VARIABLE([--silent])
1439
1440dnl libtool 1.4.3 needs this.
1441PHP_SET_LIBTOOL_VARIABLE([--preserve-dup-deps])
1442
1443test -z "$PHP_COMPILE" && PHP_COMPILE='$(LIBTOOL) --mode=compile $(COMPILE) -c $<'
1444test -z "$CXX_PHP_COMPILE" && CXX_PHP_COMPILE='$(LIBTOOL) --mode=compile $(CXX_COMPILE) -c $<'
1445SHARED_LIBTOOL='$(LIBTOOL)'
1446
1447CC=$old_CC
1448
1449PHP_CONFIGURE_PART(Generating files)
1450
1451CXXFLAGS_CLEAN=$CXXFLAGS
1452CFLAGS_CLEAN="$CFLAGS \$(PROF_FLAGS)"
1453CFLAGS="\$(CFLAGS_CLEAN) $standard_libtool_flag"
1454INLINE_CFLAGS="$INLINE_CFLAGS $standard_libtool_flag"
1455CXXFLAGS="$CXXFLAGS $standard_libtool_flag \$(PROF_FLAGS)"
1456
1457if test "$PHP_PHAR" != "no" && test "$PHP_CLI" != "no"; then
1458  pharcmd=pharcmd
1459  pharcmd_install=install-pharcmd
1460else
1461  pharcmd=
1462  pharcmd_install=
1463fi;
1464
1465all_targets="$lcov_target \$(OVERALL_TARGET) \$(PHP_MODULES) \$(PHP_ZEND_EX) \$(PHP_BINARIES) $pharcmd"
1466install_targets="$install_sapi $install_modules $install_binaries install-build install-headers install-programs $install_pear $pharcmd_install"
1467
1468PHP_SUBST(all_targets)
1469PHP_SUBST(install_targets)
1470PHP_SUBST(install_binary_targets)
1471
1472PHP_INSTALL_HEADERS([Zend/ TSRM/ include/ main/ main/streams/])
1473
1474PHP_ADD_SOURCES(TSRM, TSRM.c, -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1)
1475
1476PHP_ADD_SOURCES(main, main.c snprintf.c spprintf.c \
1477       fopen_wrappers.c alloca.c  php_scandir.c \
1478       php_ini.c SAPI.c rfc1867.c php_content_types.c strlcpy.c \
1479       strlcat.c explicit_bzero.c mergesort.c reentrancy.c php_variables.c php_ticks.c \
1480       network.c php_open_temporary_file.c \
1481       output.c getopt.c php_syslog.c, -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1)
1482
1483PHP_ADD_SOURCES_X(main, fastcgi.c, -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1, PHP_FASTCGI_OBJS, no)
1484
1485PHP_ADD_SOURCES(main/streams, streams.c cast.c memory.c filter.c \
1486       plain_wrapper.c userspace.c transports.c xp_socket.c mmap.c \
1487       glob_wrapper.c, -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1)
1488
1489PHP_ADD_SOURCES(/main, internal_functions.c, -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1, sapi)
1490PHP_ADD_SOURCES_X(/main, internal_functions_cli.c, -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1, PHP_BINARY_OBJS)
1491
1492PHP_ADD_SOURCES(Zend, \
1493    zend_language_parser.c zend_language_scanner.c \
1494    zend_ini_parser.c zend_ini_scanner.c \
1495    zend_alloc.c zend_compile.c zend_constants.c zend_dtrace.c \
1496    zend_execute_API.c zend_highlight.c zend_llist.c \
1497    zend_vm_opcodes.c zend_opcode.c zend_operators.c zend_ptr_stack.c zend_stack.c \
1498    zend_variables.c zend.c zend_API.c zend_extensions.c zend_hash.c \
1499    zend_list.c zend_builtin_functions.c \
1500    zend_ini.c zend_sort.c zend_multibyte.c zend_ts_hash.c zend_stream.c \
1501    zend_iterators.c zend_interfaces.c zend_exceptions.c zend_strtod.c zend_gc.c \
1502    zend_closures.c zend_weakrefs.c zend_float.c zend_string.c zend_signal.c zend_generators.c \
1503    zend_virtual_cwd.c zend_ast.c zend_objects.c zend_object_handlers.c zend_objects_API.c \
1504    zend_default_classes.c zend_inheritance.c zend_smart_str.c zend_cpuinfo.c, \
1505	-DZEND_ENABLE_STATIC_TSRMLS_CACHE=1)
1506
1507dnl Selectively disable optimization due to high RAM usage during compiling the
1508dnl executor.
1509if test -n "$GCC" && test "$ZEND_INLINE_OPTIMIZATION" != "yes"; then
1510  flag=-O0
1511else
1512  flag=
1513fi
1514
1515PHP_ADD_SOURCES_X(Zend, zend_execute.c, -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1,PHP_GLOBAL_OBJS,,$flag)
1516
1517PHP_ADD_BUILD_DIR(main main/streams)
1518PHP_ADD_BUILD_DIR(TSRM)
1519PHP_ADD_BUILD_DIR(Zend)
1520
1521PHP_ADD_MAKEFILE_FRAGMENT($abs_srcdir/scripts/Makefile.frag,$abs_srcdir/scripts,scripts)
1522PHP_ADD_MAKEFILE_FRAGMENT($abs_srcdir/Zend/Makefile.frag,$abs_srcdir/Zend,Zend)
1523
1524PHP_GEN_BUILD_DIRS
1525PHP_GEN_GLOBAL_MAKEFILE
1526
1527AC_DEFINE([HAVE_BUILD_DEFS_H], 1, [ ])
1528
1529dnl Make directories when building in a separate build directory.
1530$php_shtool mkdir -p pear
1531$php_shtool mkdir -p scripts
1532$php_shtool mkdir -p scripts/man1
1533
1534ALL_OUTPUT_FILES="main/build-defs.h \
1535scripts/phpize scripts/man1/phpize.1 \
1536scripts/php-config scripts/man1/php-config.1 \
1537$PHP_OUTPUT_FILES"
1538
1539dnl Generate build files.
1540AC_CONFIG_FILES([$ALL_OUTPUT_FILES])
1541
1542AC_CONFIG_COMMANDS_PRE([PHP_PATCH_CONFIG_HEADERS([main/php_config.h.in])])
1543
1544AC_CONFIG_COMMANDS([default],[
1545cat <<X
1546
1547+--------------------------------------------------------------------+
1548| License:                                                           |
1549| This software is subject to the PHP License, available in this     |
1550| distribution in the file LICENSE. By continuing this installation  |
1551| process, you are bound by the terms of this license agreement.     |
1552| If you do not agree with the terms of this license, you must abort |
1553| the installation process at this point.                            |
1554+--------------------------------------------------------------------+
1555
1556Thank you for using PHP.
1557
1558X
1559],[
1560
1561if test "\$CONFIG_FILES" = "$ALL_OUTPUT_FILES" || test "\$CONFIG_FILES" = " $ALL_OUTPUT_FILES" || test -z "\$CONFIG_FILES"; then
1562  REDO_ALL=yes
1563fi
1564
1565dnl Create configuration headers.
1566dnl ----------------------------------------------------------------------------
1567test -d Zend || $php_shtool mkdir Zend
1568
1569cat >Zend/zend_config.h <<FEO
1570#include <../main/php_config.h>
1571FEO
1572
1573dnl Run this only when generating all the files.
1574if test -n "\$REDO_ALL"; then
1575  echo "creating main/internal_functions.c"
1576  AWK="$AWK" sh $srcdir/build/genif.sh $srcdir/main/internal_functions.c.in "$EXT_STATIC" > main/internal_functions.c
1577
1578  echo "creating main/internal_functions_cli.c"
1579  AWK="$AWK" sh $srcdir/build/genif.sh $srcdir/main/internal_functions.c.in "$EXT_CLI_STATIC" > main/internal_functions_cli.c
1580
1581    if test "$PHP_SAPI" = "apache2handler"; then
1582      if test "$APACHE_VERSION" -ge 2004001; then
1583        if test -z "$APACHE_THREADED_MPM"; then
1584cat <<X
1585+--------------------------------------------------------------------+
1586|                        *** WARNING ***                             |
1587|                                                                    |
1588| You have built PHP for Apache's current non-threaded MPM.          |
1589| If you change Apache to use a threaded MPM you must reconfigure    |
1590| PHP with --enable-maintainer-zts                                   |
1591X
1592        fi
1593      fi
1594    fi
1595
1596  dnl Warn about Apache if oci8 extension is enabled on Linux.
1597  if test "$PHP_OCI8" != "no"; then
1598    if test "$PHP_SIGCHILD" != "yes"; then
1599      if test "$PHP_OCI8_INSTANT_CLIENT" = "no"; then
1600cat <<X
1601+--------------------------------------------------------------------+
1602| Notice:                                                            |
1603| If you encounter <defunc> processes when using a local Oracle      |
1604| database, set the value BEQUEATH_DETACH=YES in Oracle Net's        |
1605| sqlnet.ora file on the PHP host, or set the environment variable   |
1606| BEQUEATH_DETACH to YES before starting Apache.  If the problem     |
1607| still occurs, then recompile PHP and specify --enable-sigchild     |
1608| when configuring.                                                  |
1609X
1610      fi
1611    fi
1612  fi
1613
1614fi
1615])
1616AC_OUTPUT
1617