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