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