xref: /PHP-7.3/sapi/fpm/config.m4 (revision 902d39a3)
1dnl config.m4 for sapi fpm
2
3PHP_ARG_ENABLE(fpm,,
4[  --enable-fpm            Enable building of the fpm SAPI executable], no, no)
5
6dnl configure checks {{{
7AC_DEFUN([AC_FPM_STDLIBS],
8[
9  AC_CHECK_FUNCS(setenv clearenv setproctitle setproctitle_fast)
10
11  AC_SEARCH_LIBS(socket, socket)
12  AC_SEARCH_LIBS(inet_addr, nsl)
13
14  AC_CHECK_HEADERS([errno.h fcntl.h stdio.h stdlib.h unistd.h sys/uio.h])
15  AC_CHECK_HEADERS([sys/select.h sys/socket.h sys/time.h])
16  AC_CHECK_HEADERS([arpa/inet.h netinet/in.h])
17  AC_CHECK_HEADERS([sysexits.h])
18])
19
20AC_DEFUN([AC_FPM_PRCTL],
21[
22  AC_MSG_CHECKING([for prctl])
23
24  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/prctl.h>]], [[prctl(0, 0, 0, 0, 0);]])], [
25    AC_DEFINE([HAVE_PRCTL], 1, [do we have prctl?])
26    AC_MSG_RESULT([yes])
27  ], [
28    AC_MSG_RESULT([no])
29  ])
30])
31
32AC_DEFUN([AC_FPM_CLOCK],
33[
34  have_clock_gettime=no
35
36  AC_MSG_CHECKING([for clock_gettime])
37
38  AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <time.h>]], [[struct timespec ts; clock_gettime(CLOCK_MONOTONIC, &ts);]])], [
39    have_clock_gettime=yes
40    AC_MSG_RESULT([yes])
41  ], [
42    AC_MSG_RESULT([no])
43  ])
44
45  if test "$have_clock_gettime" = "no"; then
46    AC_MSG_CHECKING([for clock_gettime in -lrt])
47
48    SAVED_LIBS="$LIBS"
49    LIBS="$LIBS -lrt"
50
51    AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <time.h>]], [[struct timespec ts; clock_gettime(CLOCK_MONOTONIC, &ts);]])], [
52      have_clock_gettime=yes
53      AC_MSG_RESULT([yes])
54    ], [
55      LIBS="$SAVED_LIBS"
56      AC_MSG_RESULT([no])
57    ])
58  fi
59
60  if test "$have_clock_gettime" = "yes"; then
61    AC_DEFINE([HAVE_CLOCK_GETTIME], 1, [do we have clock_gettime?])
62  fi
63
64  have_clock_get_time=no
65
66  if test "$have_clock_gettime" = "no"; then
67    AC_MSG_CHECKING([for clock_get_time])
68
69    AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <mach/mach.h>
70      #include <mach/clock.h>
71      #include <mach/mach_error.h>
72
73      int main()
74      {
75        kern_return_t ret; clock_serv_t aClock; mach_timespec_t aTime;
76        ret = host_get_clock_service(mach_host_self(), REALTIME_CLOCK, &aClock);
77
78        if (ret != KERN_SUCCESS) {
79          return 1;
80        }
81
82        ret = clock_get_time(aClock, &aTime);
83        if (ret != KERN_SUCCESS) {
84          return 2;
85        }
86
87        return 0;
88      }
89    ]])], [
90      have_clock_get_time=yes
91      AC_MSG_RESULT([yes])
92    ], [
93      AC_MSG_RESULT([no])
94    ], [AC_MSG_RESULT([no (cross-compiling)])])
95  fi
96
97  if test "$have_clock_get_time" = "yes"; then
98    AC_DEFINE([HAVE_CLOCK_GET_TIME], 1, [do we have clock_get_time?])
99  fi
100])
101
102AC_DEFUN([AC_FPM_TRACE],
103[
104  have_ptrace=no
105  have_broken_ptrace=no
106
107  AC_MSG_CHECKING([for ptrace])
108
109  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
110    #include <sys/types.h>
111    #include <sys/ptrace.h> ]], [[ptrace(0, 0, (void *) 0, 0);]])], [
112    have_ptrace=yes
113    AC_MSG_RESULT([yes])
114  ], [
115    AC_MSG_RESULT([no])
116  ])
117
118  if test "$have_ptrace" = "yes"; then
119    AC_MSG_CHECKING([whether ptrace works])
120
121    AC_RUN_IFELSE([AC_LANG_SOURCE([[
122      #include <unistd.h>
123      #include <signal.h>
124      #include <sys/wait.h>
125      #include <sys/types.h>
126      #include <sys/ptrace.h>
127      #include <errno.h>
128
129      #if !defined(PTRACE_ATTACH) && defined(PT_ATTACH)
130      #define PTRACE_ATTACH PT_ATTACH
131      #endif
132
133      #if !defined(PTRACE_DETACH) && defined(PT_DETACH)
134      #define PTRACE_DETACH PT_DETACH
135      #endif
136
137      #if !defined(PTRACE_PEEKDATA) && defined(PT_READ_D)
138      #define PTRACE_PEEKDATA PT_READ_D
139      #endif
140
141      int main()
142      {
143        long v1 = (unsigned int) -1; /* copy will fail if sizeof(long) == 8 and we've got "int ptrace()" */
144        long v2;
145        pid_t child;
146        int status;
147
148        if ( (child = fork()) ) { /* parent */
149          int ret = 0;
150
151          if (0 > ptrace(PTRACE_ATTACH, child, 0, 0)) {
152            return 2;
153          }
154
155          waitpid(child, &status, 0);
156
157      #ifdef PT_IO
158          struct ptrace_io_desc ptio = {
159            .piod_op = PIOD_READ_D,
160            .piod_offs = &v1,
161            .piod_addr = &v2,
162            .piod_len = sizeof(v1)
163          };
164
165          if (0 > ptrace(PT_IO, child, (void *) &ptio, 0)) {
166            ret = 3;
167          }
168      #else
169          errno = 0;
170
171          v2 = ptrace(PTRACE_PEEKDATA, child, (void *) &v1, 0);
172
173          if (errno) {
174            ret = 4;
175          }
176      #endif
177          ptrace(PTRACE_DETACH, child, (void *) 1, 0);
178
179          kill(child, SIGKILL);
180
181          return ret ? ret : (v1 != v2);
182        }
183        else { /* child */
184          sleep(10);
185          return 0;
186        }
187      }
188    ]])], [
189      AC_MSG_RESULT([yes])
190    ], [
191      have_ptrace=no
192      have_broken_ptrace=yes
193      AC_MSG_RESULT([no])
194    ], [
195      AC_MSG_RESULT([skipped (cross-compiling)])
196    ])
197  fi
198
199  if test "$have_ptrace" = "yes"; then
200    AC_DEFINE([HAVE_PTRACE], 1, [do we have ptrace?])
201  fi
202
203  have_mach_vm_read=no
204
205  if test "$have_broken_ptrace" = "yes"; then
206    AC_MSG_CHECKING([for mach_vm_read])
207
208    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <mach/mach.h>
209      #include <mach/mach_vm.h>
210    ]], [[
211      mach_vm_read((vm_map_t)0, (mach_vm_address_t)0, (mach_vm_size_t)0, (vm_offset_t *)0, (mach_msg_type_number_t*)0);
212    ]])], [
213      have_mach_vm_read=yes
214      AC_MSG_RESULT([yes])
215    ], [
216      AC_MSG_RESULT([no])
217    ])
218  fi
219
220  if test "$have_mach_vm_read" = "yes"; then
221    AC_DEFINE([HAVE_MACH_VM_READ], 1, [do we have mach_vm_read?])
222  fi
223
224  proc_mem_file=""
225
226  if test -r /proc/$$/mem ; then
227    proc_mem_file="mem"
228  else
229    if test -r /proc/$$/as ; then
230      proc_mem_file="as"
231    fi
232  fi
233
234  if test -n "$proc_mem_file" ; then
235    AC_MSG_CHECKING([for proc mem file])
236
237    AC_RUN_IFELSE([AC_LANG_SOURCE([[
238      #define _GNU_SOURCE
239      #define _FILE_OFFSET_BITS 64
240      #include <stdint.h>
241      #include <unistd.h>
242      #include <sys/types.h>
243      #include <sys/stat.h>
244      #include <fcntl.h>
245      #include <stdio.h>
246      int main()
247      {
248        long v1 = (unsigned int) -1, v2 = 0;
249        char buf[128];
250        int fd;
251        sprintf(buf, "/proc/%d/$proc_mem_file", getpid());
252        fd = open(buf, O_RDONLY);
253        if (0 > fd) {
254          return 1;
255        }
256        if (sizeof(long) != pread(fd, &v2, sizeof(long), (uintptr_t) &v1)) {
257          close(fd);
258          return 1;
259        }
260        close(fd);
261        return v1 != v2;
262      }
263    ]])], [
264      AC_MSG_RESULT([$proc_mem_file])
265    ], [
266      proc_mem_file=""
267      AC_MSG_RESULT([no])
268    ], [
269      AC_MSG_RESULT([skipped (cross-compiling)])
270    ])
271  fi
272
273  if test -n "$proc_mem_file"; then
274    AC_DEFINE_UNQUOTED([PROC_MEM_FILE], "$proc_mem_file", [/proc/pid/mem interface])
275  fi
276
277  fpm_trace_type=""
278
279  if test "$have_ptrace" = "yes"; then
280    fpm_trace_type=ptrace
281
282  elif test -n "$proc_mem_file"; then
283    fpm_trace_type=pread
284
285  elif test "$have_mach_vm_read" = "yes" ; then
286    fpm_trace_type=mach
287
288  else
289    AC_MSG_WARN([FPM Trace - ptrace, pread, or mach: could not be found])
290  fi
291
292])
293
294AC_DEFUN([AC_FPM_BUILTIN_ATOMIC],
295[
296  AC_MSG_CHECKING([if gcc supports __sync_bool_compare_and_swap])
297  AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[
298    int variable = 1;
299    return (__sync_bool_compare_and_swap(&variable, 1, 2)
300           && __sync_add_and_fetch(&variable, 1)) ? 1 : 0;
301  ]])], [
302    AC_MSG_RESULT([yes])
303    AC_DEFINE(HAVE_BUILTIN_ATOMIC, 1, [Define to 1 if gcc supports __sync_bool_compare_and_swap() a.o.])
304  ], [
305    AC_MSG_RESULT([no])
306  ])
307])
308
309AC_DEFUN([AC_FPM_LQ],
310[
311  have_lq=no
312
313  AC_MSG_CHECKING([for TCP_INFO])
314
315  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <netinet/tcp.h>]], [[struct tcp_info ti; int x = TCP_INFO;]])], [
316    have_lq=tcp_info
317    AC_MSG_RESULT([yes])
318  ], [
319    AC_MSG_RESULT([no])
320  ])
321
322  if test "$have_lq" = "tcp_info"; then
323    AC_DEFINE([HAVE_LQ_TCP_INFO], 1, [do we have TCP_INFO?])
324  fi
325
326  if test "$have_lq" = "no" ; then
327    AC_MSG_CHECKING([for SO_LISTENQLEN])
328
329    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]], [[int x = SO_LISTENQLIMIT; int y = SO_LISTENQLEN;]])], [
330      have_lq=so_listenq
331      AC_MSG_RESULT([yes])
332    ], [
333      AC_MSG_RESULT([no])
334    ])
335
336    if test "$have_lq" = "tcp_info"; then
337      AC_DEFINE([HAVE_LQ_SO_LISTENQ], 1, [do we have SO_LISTENQxxx?])
338    fi
339  fi
340])
341dnl }}}
342
343AC_DEFUN([AC_FPM_SYSCONF],
344[
345	AC_MSG_CHECKING([for sysconf])
346
347	AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <unistd.h>]], [[sysconf(_SC_CLK_TCK);]])],[
348		AC_DEFINE([HAVE_SYSCONF], 1, [do we have sysconf?])
349		AC_MSG_RESULT([yes])
350	], [
351		AC_MSG_RESULT([no])
352	])
353])
354dnl }}}
355
356AC_DEFUN([AC_FPM_TIMES],
357[
358	AC_MSG_CHECKING([for times])
359
360	AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/times.h>]], [[struct tms t; times(&t);]])],[
361		AC_DEFINE([HAVE_TIMES], 1, [do we have times?])
362		AC_MSG_RESULT([yes])
363	], [
364		AC_MSG_RESULT([no])
365	])
366])
367dnl }}}
368
369AC_DEFUN([AC_FPM_KQUEUE],
370[
371	AC_MSG_CHECKING([for kqueue])
372
373	AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
374		#include <sys/types.h>
375		#include <sys/event.h>
376		#include <sys/time.h>
377	]], [[
378		int kfd;
379		struct kevent k;
380		kfd = kqueue();
381		/* 0 -> STDIN_FILENO */
382		EV_SET(&k, 0, EVFILT_READ , EV_ADD | EV_CLEAR, 0, 0, NULL);
383	]])], [
384		AC_DEFINE([HAVE_KQUEUE], 1, [do we have kqueue?])
385		AC_MSG_RESULT([yes])
386	], [
387		AC_MSG_RESULT([no])
388	])
389])
390dnl }}}
391
392AC_DEFUN([AC_FPM_PORT],
393[
394	AC_MSG_CHECKING([for port framework])
395
396	AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
397		#include <port.h>
398	]], [[
399		int port;
400
401		port = port_create();
402		if (port < 0) {
403			return 1;
404		}
405	]])], [
406		AC_DEFINE([HAVE_PORT], 1, [do we have port framework?])
407		AC_MSG_RESULT([yes])
408	], [
409		AC_MSG_RESULT([no])
410	])
411])
412dnl }}}
413
414AC_DEFUN([AC_FPM_DEVPOLL],
415[
416	AC_MSG_CHECKING([for /dev/poll])
417
418	AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
419		#include <stdio.h>
420		#include <sys/devpoll.h>
421	]], [[
422		int n, dp;
423		struct dvpoll dvp;
424		dp = 0;
425		dvp.dp_fds = NULL;
426		dvp.dp_nfds = 0;
427		dvp.dp_timeout = 0;
428		n = ioctl(dp, DP_POLL, &dvp)
429	]])], [
430		AC_DEFINE([HAVE_DEVPOLL], 1, [do we have /dev/poll?])
431		AC_MSG_RESULT([yes])
432	], [
433		AC_MSG_RESULT([no])
434	])
435])
436dnl }}}
437
438AC_DEFUN([AC_FPM_EPOLL],
439[
440	AC_MSG_CHECKING([for epoll])
441
442	AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
443		#include <sys/epoll.h>
444	]], [[
445		int epollfd;
446		struct epoll_event e;
447
448		epollfd = epoll_create(1);
449		if (epollfd < 0) {
450			return 1;
451		}
452
453		e.events = EPOLLIN | EPOLLET;
454		e.data.fd = 0;
455
456		if (epoll_ctl(epollfd, EPOLL_CTL_ADD, 0, &e) == -1) {
457			return 1;
458		}
459
460		e.events = 0;
461		if (epoll_wait(epollfd, &e, 1, 1) < 0) {
462			return 1;
463		}
464	]])], [
465		AC_DEFINE([HAVE_EPOLL], 1, [do we have epoll?])
466		AC_MSG_RESULT([yes])
467	], [
468		AC_MSG_RESULT([no])
469	])
470])
471dnl }}}
472
473AC_DEFUN([AC_FPM_POLL],
474[
475	AC_MSG_CHECKING([for poll])
476
477	AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
478		#include <poll.h>
479	]], [[
480		struct pollfd fds[2];
481
482		fds[0].fd = 0;
483		fds[0].events = POLLIN;
484
485		fds[1].fd = 0;
486		fds[1].events = POLLIN;
487
488		 poll(fds, 2, 1);
489	]])], [
490		AC_DEFINE([HAVE_POLL], 1, [do we have poll?])
491		AC_MSG_RESULT([yes])
492	], [
493		AC_MSG_RESULT([no])
494	])
495])
496dnl }}}
497
498AC_DEFUN([AC_FPM_SELECT],
499[
500	AC_MSG_CHECKING([for select])
501
502	AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
503		/* According to POSIX.1-2001 */
504		#include <sys/select.h>
505
506		/* According to earlier standards */
507		#include <sys/time.h>
508		#include <sys/types.h>
509		#include <unistd.h>
510	]], [[
511		fd_set fds;
512		struct timeval t;
513		t.tv_sec = 0;
514		t.tv_usec = 42;
515		FD_ZERO(&fds);
516		/* 0 -> STDIN_FILENO */
517		FD_SET(0, &fds);
518		select(FD_SETSIZE, &fds, NULL, NULL, &t);
519	]])], [
520		AC_DEFINE([HAVE_SELECT], 1, [do we have select?])
521		AC_MSG_RESULT([yes])
522	], [
523		AC_MSG_RESULT([no])
524	])
525])
526dnl }}}
527
528AC_DEFUN([AC_FPM_APPARMOR],
529[
530	AC_MSG_CHECKING([for apparmor])
531
532	SAVED_LIBS="$LIBS"
533	LIBS="$LIBS -lapparmor"
534
535	AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/apparmor.h>]], [[change_hat("test", 0);]])], [
536		AC_DEFINE([HAVE_APPARMOR], 1, [do we have apparmor support?])
537		AC_MSG_RESULT([yes])
538	], [
539		LIBS="$SAVED_LIBS"
540		AC_MSG_RESULT([no])
541	])
542])
543
544
545AC_MSG_CHECKING(for FPM build)
546if test "$PHP_FPM" != "no"; then
547  AC_MSG_RESULT($PHP_FPM)
548
549  AC_FPM_STDLIBS
550  AC_FPM_PRCTL
551  AC_FPM_CLOCK
552  AC_FPM_TRACE
553  AC_FPM_BUILTIN_ATOMIC
554  AC_FPM_LQ
555  AC_FPM_SYSCONF
556  AC_FPM_TIMES
557  AC_FPM_KQUEUE
558  AC_FPM_PORT
559  AC_FPM_DEVPOLL
560  AC_FPM_EPOLL
561  AC_FPM_POLL
562  AC_FPM_SELECT
563  AC_FPM_APPARMOR
564
565  PHP_ARG_WITH(fpm-user,,
566  [  --with-fpm-user[=USER]    Set the user for php-fpm to run as. (default: nobody)], nobody, no)
567
568  PHP_ARG_WITH(fpm-group,,
569  [  --with-fpm-group[=GRP]    Set the group for php-fpm to run as. For a system user, this
570                          should usually be set to match the fpm username (default: nobody)], nobody, no)
571
572  PHP_ARG_WITH(fpm-systemd,,
573  [  --with-fpm-systemd      Activate systemd integration], no, no)
574
575  PHP_ARG_WITH(fpm-acl,,
576  [  --with-fpm-acl          Use POSIX Access Control Lists], no, no)
577
578  if test "$PHP_FPM_SYSTEMD" != "no" ; then
579    if test -z "$PKG_CONFIG"; then
580      AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
581    fi
582    unset SYSTEMD_LIBS
583    unset SYSTEMD_INCS
584
585    if test -x "$PKG_CONFIG" && $PKG_CONFIG --exists libsystemd; then
586      dnl systemd version >= 209 provides libsystemd
587      AC_MSG_CHECKING([for libsystemd])
588      SYSTEMD_LIBS=`$PKG_CONFIG --libs libsystemd`
589      SYSTEMD_INCS=`$PKG_CONFIG --cflags-only-I libsystemd`
590      SYSTEMD_VERS=`$PKG_CONFIG --modversion libsystemd`
591      AC_MSG_RESULT([version $SYSTEMD_VERS])
592
593    elif test -x "$PKG_CONFIG" && $PKG_CONFIG --exists libsystemd-daemon; then
594      dnl systemd version < 209 provides libsystemd-daemon
595      AC_MSG_CHECKING([for libsystemd-daemon])
596      SYSTEMD_LIBS=`$PKG_CONFIG --libs libsystemd-daemon`
597      SYSTEMD_INCS=`$PKG_CONFIG --cflags-only-I libsystemd-daemon`
598      SYSTEMD_VERS=`$PKG_CONFIG --modversion libsystemd-daemon`
599      AC_MSG_RESULT([version $SYSTEMD_VERS])
600
601    else
602      dnl failback when no pkg-config
603      AC_CHECK_LIB(systemd-daemon, sd_notify, SYSTEMD_LIBS="-lsystemd-daemon")
604    fi
605
606    AC_CHECK_HEADERS(systemd/sd-daemon.h, [HAVE_SD_DAEMON_H="yes"], [HAVE_SD_DAEMON_H="no"])
607    if test $HAVE_SD_DAEMON_H = "no" || test -z "${SYSTEMD_LIBS}"; then
608      AC_MSG_ERROR([Your system does not support systemd.])
609    else
610      AC_DEFINE(HAVE_SYSTEMD, 1, [FPM use systemd integration])
611      PHP_FPM_SD_FILES="fpm/fpm_systemd.c"
612      PHP_EVAL_LIBLINE($SYSTEMD_LIBS)
613      PHP_EVAL_INCLINE($SYSTEMD_INCS)
614      php_fpm_systemd=notify
615    fi
616  else
617    php_fpm_systemd=simple
618  fi
619
620  if test "$PHP_FPM_ACL" != "no" ; then
621    AC_CHECK_HEADERS([sys/acl.h])
622    dnl *BSD has acl_* built into libc
623    AC_CHECK_FUNC(acl_free, [
624      AC_DEFINE(HAVE_FPM_ACL, 1, [ POSIX Access Control List ])
625    ],[
626      AC_CHECK_LIB(acl, acl_free, [
627        PHP_ADD_LIBRARY(acl)
628        AC_DEFINE(HAVE_FPM_ACL, 1, [ POSIX Access Control List ])
629      ],[
630        AC_MSG_ERROR(libacl required not found)
631      ])
632    ])
633  fi
634
635  PHP_SUBST_OLD(php_fpm_systemd)
636  AC_DEFINE_UNQUOTED(PHP_FPM_SYSTEMD, "$php_fpm_systemd", [fpm systemd service type])
637
638  if test -z "$PHP_FPM_USER" -o "$PHP_FPM_USER" = "yes" -o "$PHP_FPM_USER" = "no"; then
639    php_fpm_user="nobody"
640  else
641    php_fpm_user="$PHP_FPM_USER"
642  fi
643
644  if test -z "$PHP_FPM_GROUP" -o "$PHP_FPM_GROUP" = "yes" -o "$PHP_FPM_GROUP" = "no"; then
645    php_fpm_group="nobody"
646  else
647    php_fpm_group="$PHP_FPM_GROUP"
648  fi
649
650  PHP_SUBST_OLD(php_fpm_user)
651  PHP_SUBST_OLD(php_fpm_group)
652  php_fpm_sysconfdir=`eval echo $sysconfdir`
653  PHP_SUBST_OLD(php_fpm_sysconfdir)
654  php_fpm_localstatedir=`eval echo $localstatedir`
655  PHP_SUBST_OLD(php_fpm_localstatedir)
656  php_fpm_prefix=`eval echo $prefix`
657  PHP_SUBST_OLD(php_fpm_prefix)
658
659  AC_DEFINE_UNQUOTED(PHP_FPM_USER, "$php_fpm_user", [fpm user name])
660  AC_DEFINE_UNQUOTED(PHP_FPM_GROUP, "$php_fpm_group", [fpm group name])
661
662  PHP_ADD_BUILD_DIR(sapi/fpm/fpm)
663  PHP_ADD_BUILD_DIR(sapi/fpm/fpm/events)
664  PHP_OUTPUT(sapi/fpm/php-fpm.conf sapi/fpm/www.conf sapi/fpm/init.d.php-fpm sapi/fpm/php-fpm.service sapi/fpm/php-fpm.8 sapi/fpm/status.html)
665  PHP_ADD_MAKEFILE_FRAGMENT([$abs_srcdir/sapi/fpm/Makefile.frag])
666
667  SAPI_FPM_PATH=sapi/fpm/php-fpm
668
669  if test "$fpm_trace_type" && test -f "$abs_srcdir/sapi/fpm/fpm/fpm_trace_$fpm_trace_type.c"; then
670    PHP_FPM_TRACE_FILES="fpm/fpm_trace.c fpm/fpm_trace_$fpm_trace_type.c"
671  fi
672
673  PHP_FPM_CFLAGS="-I$abs_srcdir/sapi/fpm"
674
675  PHP_FPM_FILES="fpm/fpm.c \
676    fpm/fpm_children.c \
677    fpm/fpm_cleanup.c \
678    fpm/fpm_clock.c \
679    fpm/fpm_conf.c \
680    fpm/fpm_env.c \
681    fpm/fpm_events.c \
682		fpm/fpm_log.c \
683    fpm/fpm_main.c \
684    fpm/fpm_php.c \
685    fpm/fpm_php_trace.c \
686    fpm/fpm_process_ctl.c \
687    fpm/fpm_request.c \
688    fpm/fpm_shm.c \
689    fpm/fpm_scoreboard.c \
690    fpm/fpm_signals.c \
691    fpm/fpm_sockets.c \
692    fpm/fpm_status.c \
693    fpm/fpm_stdio.c \
694    fpm/fpm_unix.c \
695    fpm/fpm_worker_pool.c \
696    fpm/zlog.c \
697		fpm/events/select.c \
698		fpm/events/poll.c \
699		fpm/events/epoll.c \
700		fpm/events/kqueue.c \
701		fpm/events/devpoll.c \
702		fpm/events/port.c \
703  "
704
705  PHP_SELECT_SAPI(fpm, program, $PHP_FPM_FILES $PHP_FPM_TRACE_FILES $PHP_FPM_SD_FILES, $PHP_FPM_CFLAGS, '$(SAPI_FPM_PATH)')
706
707  case $host_alias in
708      *aix*)
709        BUILD_FPM="echo '\#! .' > php.sym && echo >>php.sym && nm -BCpg \`echo \$(PHP_GLOBAL_OBJS) \$(PHP_BINARY_OBJS) \$(PHP_FPM_OBJS) | sed 's/\([A-Za-z0-9_]*\)\.lo/\1.o/g'\` | \$(AWK) '{ if (((\$\$2 == \"T\") || (\$\$2 == \"D\") || (\$\$2 == \"B\")) && (substr(\$\$3,1,1) != \".\")) { print \$\$3 } }' | sort -u >> php.sym && \$(LIBTOOL) --mode=link \$(CC) -export-dynamic \$(CFLAGS_CLEAN) \$(EXTRA_CFLAGS) \$(EXTRA_LDFLAGS_PROGRAM) \$(LDFLAGS) -Wl,-brtl -Wl,-bE:php.sym \$(PHP_RPATHS) \$(PHP_GLOBAL_OBJS) \$(PHP_BINARY_OBJS) \$(PHP_FASTCGI_OBJS) \$(PHP_FPM_OBJS) \$(EXTRA_LIBS) \$(FPM_EXTRA_LIBS) \$(ZEND_EXTRA_LIBS) -o \$(SAPI_FPM_PATH)"
710        ;;
711      *darwin*)
712        BUILD_FPM="\$(CC) \$(CFLAGS_CLEAN) \$(EXTRA_CFLAGS) \$(EXTRA_LDFLAGS_PROGRAM) \$(LDFLAGS) \$(NATIVE_RPATHS) \$(PHP_GLOBAL_OBJS:.lo=.o) \$(PHP_BINARY_OBJS:.lo=.o) \$(PHP_FASTCGI_OBJS:.lo=.o) \$(PHP_FPM_OBJS:.lo=.o) \$(PHP_FRAMEWORKS) \$(EXTRA_LIBS) \$(FPM_EXTRA_LIBS) \$(ZEND_EXTRA_LIBS) -o \$(SAPI_FPM_PATH)"
713      ;;
714      *)
715        BUILD_FPM="\$(LIBTOOL) --mode=link \$(CC) -export-dynamic \$(CFLAGS_CLEAN) \$(EXTRA_CFLAGS) \$(EXTRA_LDFLAGS_PROGRAM) \$(LDFLAGS) \$(PHP_RPATHS) \$(PHP_GLOBAL_OBJS) \$(PHP_BINARY_OBJS) \$(PHP_FASTCGI_OBJS) \$(PHP_FPM_OBJS) \$(EXTRA_LIBS) \$(FPM_EXTRA_LIBS) \$(ZEND_EXTRA_LIBS) -o \$(SAPI_FPM_PATH)"
716      ;;
717  esac
718
719  PHP_SUBST(SAPI_FPM_PATH)
720  PHP_SUBST(BUILD_FPM)
721
722else
723  AC_MSG_RESULT(no)
724fi
725