1: dnl
2: dnl $Id: config.m4,v 1.1.1.1 2012/02/21 23:48:06 misho Exp $
3: dnl
4:
5: PHP_ARG_ENABLE(fpm,,
6: [ --enable-fpm EXPERIMENTAL: Enable building of the fpm SAPI executable], no, no)
7:
8: dnl configure checks {{{
9: AC_DEFUN([AC_FPM_STDLIBS],
10: [
11: AC_CHECK_FUNCS(setenv clearenv setproctitle)
12:
13: AC_SEARCH_LIBS(socket, socket)
14: AC_SEARCH_LIBS(inet_addr, nsl)
15:
16: AC_CHECK_HEADERS([errno.h fcntl.h stdio.h stdlib.h unistd.h sys/uio.h])
17: AC_CHECK_HEADERS([sys/select.h sys/socket.h sys/time.h])
18: AC_CHECK_HEADERS([arpa/inet.h netinet/in.h])
19: ])
20:
21: AC_DEFUN([AC_FPM_PRCTL],
22: [
23: AC_MSG_CHECKING([for prctl])
24:
25: AC_TRY_COMPILE([ #include <sys/prctl.h> ], [prctl(0, 0, 0, 0, 0);], [
26: AC_DEFINE([HAVE_PRCTL], 1, [do we have prctl?])
27: AC_MSG_RESULT([yes])
28: ], [
29: AC_MSG_RESULT([no])
30: ])
31: ])
32:
33: AC_DEFUN([AC_FPM_CLOCK],
34: [
35: have_clock_gettime=no
36:
37: AC_MSG_CHECKING([for clock_gettime])
38:
39: AC_TRY_LINK([ #include <time.h> ], [struct timespec ts; clock_gettime(CLOCK_MONOTONIC, &ts);], [
40: have_clock_gettime=yes
41: AC_MSG_RESULT([yes])
42: ], [
43: AC_MSG_RESULT([no])
44: ])
45:
46: if test "$have_clock_gettime" = "no"; then
47: AC_MSG_CHECKING([for clock_gettime in -lrt])
48:
49: SAVED_LIBS="$LIBS"
50: LIBS="$LIBS -lrt"
51:
52: AC_TRY_LINK([ #include <time.h> ], [struct timespec ts; clock_gettime(CLOCK_MONOTONIC, &ts);], [
53: have_clock_gettime=yes
54: AC_MSG_RESULT([yes])
55: ], [
56: LIBS="$SAVED_LIBS"
57: AC_MSG_RESULT([no])
58: ])
59: fi
60:
61: if test "$have_clock_gettime" = "yes"; then
62: AC_DEFINE([HAVE_CLOCK_GETTIME], 1, [do we have clock_gettime?])
63: fi
64:
65: have_clock_get_time=no
66:
67: if test "$have_clock_gettime" = "no"; then
68: AC_MSG_CHECKING([for clock_get_time])
69:
70: AC_TRY_RUN([ #include <mach/mach.h>
71: #include <mach/clock.h>
72: #include <mach/mach_error.h>
73:
74: int main()
75: {
76: kern_return_t ret; clock_serv_t aClock; mach_timespec_t aTime;
77: ret = host_get_clock_service(mach_host_self(), REALTIME_CLOCK, &aClock);
78:
79: if (ret != KERN_SUCCESS) {
80: return 1;
81: }
82:
83: ret = clock_get_time(aClock, &aTime);
84: if (ret != KERN_SUCCESS) {
85: return 2;
86: }
87:
88: return 0;
89: }
90: ], [
91: have_clock_get_time=yes
92: AC_MSG_RESULT([yes])
93: ], [
94: AC_MSG_RESULT([no])
95: ])
96: fi
97:
98: if test "$have_clock_get_time" = "yes"; then
99: AC_DEFINE([HAVE_CLOCK_GET_TIME], 1, [do we have clock_get_time?])
100: fi
101: ])
102:
103: AC_DEFUN([AC_FPM_TRACE],
104: [
105: have_ptrace=no
106: have_broken_ptrace=no
107:
108: AC_MSG_CHECKING([for ptrace])
109:
110: AC_TRY_COMPILE([
111: #include <sys/types.h>
112: #include <sys/ptrace.h> ], [ptrace(0, 0, (void *) 0, 0);], [
113: have_ptrace=yes
114: AC_MSG_RESULT([yes])
115: ], [
116: AC_MSG_RESULT([no])
117: ])
118:
119: if test "$have_ptrace" = "yes"; then
120: AC_MSG_CHECKING([whether ptrace works])
121:
122: AC_TRY_RUN([
123: #include <unistd.h>
124: #include <signal.h>
125: #include <sys/wait.h>
126: #include <sys/types.h>
127: #include <sys/ptrace.h>
128: #include <errno.h>
129:
130: #if !defined(PTRACE_ATTACH) && defined(PT_ATTACH)
131: #define PTRACE_ATTACH PT_ATTACH
132: #endif
133:
134: #if !defined(PTRACE_DETACH) && defined(PT_DETACH)
135: #define PTRACE_DETACH PT_DETACH
136: #endif
137:
138: #if !defined(PTRACE_PEEKDATA) && defined(PT_READ_D)
139: #define PTRACE_PEEKDATA PT_READ_D
140: #endif
141:
142: int main()
143: {
144: long v1 = (unsigned int) -1; /* copy will fail if sizeof(long) == 8 and we've got "int ptrace()" */
145: long v2;
146: pid_t child;
147: int status;
148:
149: if ( (child = fork()) ) { /* parent */
150: int ret = 0;
151:
152: if (0 > ptrace(PTRACE_ATTACH, child, 0, 0)) {
153: return 2;
154: }
155:
156: waitpid(child, &status, 0);
157:
158: #ifdef PT_IO
159: struct ptrace_io_desc ptio = {
160: .piod_op = PIOD_READ_D,
161: .piod_offs = &v1,
162: .piod_addr = &v2,
163: .piod_len = sizeof(v1)
164: };
165:
166: if (0 > ptrace(PT_IO, child, (void *) &ptio, 0)) {
167: ret = 3;
168: }
169: #else
170: errno = 0;
171:
172: v2 = ptrace(PTRACE_PEEKDATA, child, (void *) &v1, 0);
173:
174: if (errno) {
175: ret = 4;
176: }
177: #endif
178: ptrace(PTRACE_DETACH, child, (void *) 1, 0);
179:
180: kill(child, SIGKILL);
181:
182: return ret ? ret : (v1 != v2);
183: }
184: else { /* child */
185: sleep(10);
186: return 0;
187: }
188: }
189: ], [
190: AC_MSG_RESULT([yes])
191: ], [
192: have_ptrace=no
193: have_broken_ptrace=yes
194: AC_MSG_RESULT([no])
195: ])
196: fi
197:
198: if test "$have_ptrace" = "yes"; then
199: AC_DEFINE([HAVE_PTRACE], 1, [do we have ptrace?])
200: fi
201:
202: have_mach_vm_read=no
203:
204: if test "$have_broken_ptrace" = "yes"; then
205: AC_MSG_CHECKING([for mach_vm_read])
206:
207: AC_TRY_COMPILE([ #include <mach/mach.h>
208: #include <mach/mach_vm.h>
209: ], [
210: 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);
211: ], [
212: have_mach_vm_read=yes
213: AC_MSG_RESULT([yes])
214: ], [
215: AC_MSG_RESULT([no])
216: ])
217: fi
218:
219: if test "$have_mach_vm_read" = "yes"; then
220: AC_DEFINE([HAVE_MACH_VM_READ], 1, [do we have mach_vm_read?])
221: fi
222:
223: proc_mem_file=""
224:
225: if test -r /proc/$$/mem ; then
226: proc_mem_file="mem"
227: else
228: if test -r /proc/$$/as ; then
229: proc_mem_file="as"
230: fi
231: fi
232:
233: if test -n "$proc_mem_file" ; then
234: AC_MSG_CHECKING([for proc mem file])
235:
236: AC_TRY_RUN([
237: #define _GNU_SOURCE
238: #define _FILE_OFFSET_BITS 64
239: #include <stdint.h>
240: #include <unistd.h>
241: #include <sys/types.h>
242: #include <sys/stat.h>
243: #include <fcntl.h>
244: #include <stdio.h>
245: int main()
246: {
247: long v1 = (unsigned int) -1, v2 = 0;
248: char buf[128];
249: int fd;
250: sprintf(buf, "/proc/%d/$proc_mem_file", getpid());
251: fd = open(buf, O_RDONLY);
252: if (0 > fd) {
253: return 1;
254: }
255: if (sizeof(long) != pread(fd, &v2, sizeof(long), (uintptr_t) &v1)) {
256: close(fd);
257: return 1;
258: }
259: close(fd);
260: return v1 != v2;
261: }
262: ], [
263: AC_MSG_RESULT([$proc_mem_file])
264: ], [
265: proc_mem_file=""
266: AC_MSG_RESULT([no])
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:
291: AC_DEFUN([AC_FPM_BUILTIN_ATOMIC],
292: [
293: AC_MSG_CHECKING([if gcc supports __sync_bool_compare_and_swap])
294: AC_TRY_LINK(,
295: [
296: int variable = 1;
297: return (__sync_bool_compare_and_swap(&variable, 1, 2)
298: && __sync_add_and_fetch(&variable, 1)) ? 1 : 0;
299: ],
300: [
301: AC_MSG_RESULT([yes])
302: AC_DEFINE(HAVE_BUILTIN_ATOMIC, 1, [Define to 1 if gcc supports __sync_bool_compare_and_swap() a.o.])
303: ],
304: [
305: AC_MSG_RESULT([no])
306: ])
307: ])
308:
309: AC_DEFUN([AC_FPM_LQ],
310: [
311: have_lq=no
312:
313: AC_MSG_CHECKING([for TCP_INFO])
314:
315: AC_TRY_COMPILE([ #include <netinet/tcp.h> ], [struct tcp_info ti; ti.tcpi_sacked = 0; 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_TRY_COMPILE([ #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" = "so_listenq"; then
337: AC_DEFINE([HAVE_LQ_SO_LISTENQ], 1, [do we have SO_LISTENQxxx?])
338: fi
339: fi
340: ])
341: dnl }}}
342:
343: AC_DEFUN([AC_FPM_SYSCONF],
344: [
345: AC_MSG_CHECKING([for sysconf])
346:
347: AC_TRY_COMPILE([ #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: ])
354: dnl }}}
355:
356: AC_DEFUN([AC_FPM_TIMES],
357: [
358: AC_MSG_CHECKING([for times])
359:
360: AC_TRY_COMPILE([ #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: ])
367: dnl }}}
368:
369: AC_DEFUN([AC_FPM_KQUEUE],
370: [
371: AC_MSG_CHECKING([for kqueue])
372:
373: AC_TRY_COMPILE(
374: [
375: #include <sys/types.h>
376: #include <sys/event.h>
377: #include <sys/time.h>
378: ], [
379: int kfd;
380: struct kevent k;
381: kfd = kqueue();
382: /* 0 -> STDIN_FILENO */
383: EV_SET(&k, 0, EVFILT_READ , EV_ADD | EV_CLEAR, 0, 0, NULL);
384: ], [
385: AC_DEFINE([HAVE_KQUEUE], 1, [do we have kqueue?])
386: AC_MSG_RESULT([yes])
387: ], [
388: AC_MSG_RESULT([no])
389: ])
390: ])
391: dnl }}}
392:
393: AC_DEFUN([AC_FPM_PORT],
394: [
395: AC_MSG_CHECKING([for port framework])
396:
397: AC_TRY_COMPILE(
398: [
399: #include <port.h>
400: ], [
401: int port;
402:
403: port = port_create();
404: if (port < 0) {
405: return 1;
406: }
407: ], [
408: AC_DEFINE([HAVE_PORT], 1, [do we have port framework?])
409: AC_MSG_RESULT([yes])
410: ], [
411: AC_MSG_RESULT([no])
412: ])
413: ])
414: dnl }}}
415:
416: AC_DEFUN([AC_FPM_DEVPOLL],
417: [
418: AC_MSG_CHECKING([for /dev/poll])
419:
420: AC_TRY_COMPILE(
421: [
422: #include <stdio.h>
423: #include <sys/devpoll.h>
424: ], [
425: int n, dp;
426: struct dvpoll dvp;
427: dp = 0;
428: dvp.dp_fds = NULL;
429: dvp.dp_nfds = 0;
430: dvp.dp_timeout = 0;
431: n = ioctl(dp, DP_POLL, &dvp)
432: ], [
433: AC_DEFINE([HAVE_DEVPOLL], 1, [do we have /dev/poll?])
434: AC_MSG_RESULT([yes])
435: ], [
436: AC_MSG_RESULT([no])
437: ])
438: ])
439: dnl }}}
440:
441: AC_DEFUN([AC_FPM_EPOLL],
442: [
443: AC_MSG_CHECKING([for epoll])
444:
445: AC_TRY_COMPILE(
446: [
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: dnl }}}
476:
477: AC_DEFUN([AC_FPM_POLL],
478: [
479: AC_MSG_CHECKING([for poll])
480:
481: AC_TRY_COMPILE(
482: [
483: #include <poll.h>
484: ], [
485: struct pollfd fds[2];
486:
487: fds[0].fd = 0;
488: fds[0].events = POLLIN;
489:
490: fds[1].fd = 0;
491: fds[1].events = POLLIN;
492:
493: poll(fds, 2, 1);
494: ], [
495: AC_DEFINE([HAVE_POLL], 1, [do we have poll?])
496: AC_MSG_RESULT([yes])
497: ], [
498: AC_MSG_RESULT([no])
499: ])
500: ])
501: dnl }}}
502:
503: AC_DEFUN([AC_FPM_SELECT],
504: [
505: AC_MSG_CHECKING([for select])
506:
507: AC_TRY_COMPILE(
508: [
509: /* According to POSIX.1-2001 */
510: #include <sys/select.h>
511:
512: /* According to earlier standards */
513: #include <sys/time.h>
514: #include <sys/types.h>
515: #include <unistd.h>
516: ], [
517: fd_set fds;
518: struct timeval t;
519: t.tv_sec = 0;
520: t.tv_usec = 42;
521: FD_ZERO(&fds);
522: /* 0 -> STDIN_FILENO */
523: FD_SET(0, &fds);
524: select(FD_SETSIZE, &fds, NULL, NULL, &t);
525: ], [
526: AC_DEFINE([HAVE_SELECT], 1, [do we have select?])
527: AC_MSG_RESULT([yes])
528: ], [
529: AC_MSG_RESULT([no])
530: ])
531: ])
532: dnl }}}
533:
534:
535: AC_MSG_CHECKING(for FPM build)
536: if test "$PHP_FPM" != "no"; then
537: AC_MSG_RESULT($PHP_FPM)
538:
539: AC_FPM_STDLIBS
540: AC_FPM_PRCTL
541: AC_FPM_CLOCK
542: AC_FPM_TRACE
543: AC_FPM_BUILTIN_ATOMIC
544: AC_FPM_LQ
545: AC_FPM_SYSCONF
546: AC_FPM_TIMES
547: AC_FPM_KQUEUE
548: AC_FPM_PORT
549: AC_FPM_DEVPOLL
550: AC_FPM_EPOLL
551: AC_FPM_POLL
552: AC_FPM_SELECT
553:
554: PHP_ARG_WITH(fpm-user,,
555: [ --with-fpm-user[=USER] Set the user for php-fpm to run as. (default: nobody)], nobody, no)
556:
557: PHP_ARG_WITH(fpm-group,,
558: [ --with-fpm-group[=GRP] Set the group for php-fpm to run as. For a system user, this
559: should usually be set to match the fpm username (default: nobody)], nobody, no)
560:
561: if test -z "$PHP_FPM_USER" -o "$PHP_FPM_USER" = "yes" -o "$PHP_FPM_USER" = "no"; then
562: php_fpm_user="nobody"
563: else
564: php_fpm_user="$PHP_FPM_USER"
565: fi
566:
567: if test -z "$PHP_FPM_GROUP" -o "$PHP_FPM_GROUP" = "yes" -o "$PHP_FPM_GROUP" = "no"; then
568: php_fpm_group="nobody"
569: else
570: php_fpm_group="$PHP_FPM_GROUP"
571: fi
572:
573: PHP_SUBST_OLD(php_fpm_user)
574: PHP_SUBST_OLD(php_fpm_group)
575: php_fpm_sysconfdir=`eval echo $sysconfdir`
576: PHP_SUBST_OLD(php_fpm_sysconfdir)
577: php_fpm_localstatedir=`eval echo $localstatedir`
578: PHP_SUBST_OLD(php_fpm_localstatedir)
579: php_fpm_prefix=`eval echo $prefix`
580: PHP_SUBST_OLD(php_fpm_prefix)
581:
582: AC_DEFINE_UNQUOTED(PHP_FPM_USER, "$php_fpm_user", [fpm user name])
583: AC_DEFINE_UNQUOTED(PHP_FPM_GROUP, "$php_fpm_group", [fpm group name])
584:
585: PHP_OUTPUT(sapi/fpm/php-fpm.conf sapi/fpm/init.d.php-fpm sapi/fpm/php-fpm.8 sapi/fpm/status.html)
586: PHP_ADD_MAKEFILE_FRAGMENT([$abs_srcdir/sapi/fpm/Makefile.frag], [$abs_srcdir/sapi/fpm], [sapi/fpm])
587:
588: SAPI_FPM_PATH=sapi/fpm/php-fpm
589: PHP_SUBST(SAPI_FPM_PATH)
590:
591: if test "$fpm_trace_type" && test -f "$abs_srcdir/sapi/fpm/fpm/fpm_trace_$fpm_trace_type.c"; then
592: PHP_FPM_TRACE_FILES="fpm/fpm_trace.c fpm/fpm_trace_$fpm_trace_type.c"
593: fi
594:
595: PHP_FPM_CFLAGS="-I$abs_srcdir/sapi/fpm"
596:
597: if test "$PHP_SAPI" = "default"; then
598: PHP_SAPI="fpm"
599: fi
600: PHP_FPM_FILES="fpm/fastcgi.c \
601: fpm/fpm.c \
602: fpm/fpm_children.c \
603: fpm/fpm_cleanup.c \
604: fpm/fpm_clock.c \
605: fpm/fpm_conf.c \
606: fpm/fpm_env.c \
607: fpm/fpm_events.c \
608: fpm/fpm_log.c \
609: fpm/fpm_main.c \
610: fpm/fpm_php.c \
611: fpm/fpm_php_trace.c \
612: fpm/fpm_process_ctl.c \
613: fpm/fpm_request.c \
614: fpm/fpm_shm.c \
615: fpm/fpm_scoreboard.c \
616: fpm/fpm_signals.c \
617: fpm/fpm_sockets.c \
618: fpm/fpm_status.c \
619: fpm/fpm_stdio.c \
620: fpm/fpm_unix.c \
621: fpm/fpm_worker_pool.c \
622: fpm/zlog.c \
623: fpm/events/select.c \
624: fpm/events/poll.c \
625: fpm/events/epoll.c \
626: fpm/events/kqueue.c \
627: fpm/events/devpoll.c \
628: fpm/events/port.c \
629: "
630:
631: PHP_ADD_SOURCES(sapi/fpm, $PHP_FPM_FILES $PHP_FPM_TRACE_FILES, $PHP_FPM_CFLAGS, fpm)
632: PHP_ADD_SOURCES(/main, internal_functions.c,,fpm)
633:
634: case $host_alias in
635: *aix*)
636: BUILD_FPM="echo '\#! .' > php.sym && echo >>php.sym && nm -BCpg \`echo \$(PHP_GLOBAL_OBJS) \$(PHP_SAPI_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_SAPI_OBJS) \$(EXTRA_LIBS) \$(SAPI_EXTRA_LIBS) \$(ZEND_EXTRA_LIBS) -o \$(SAPI_FPM_PATH)"
637: ;;
638: *darwin*)
639: BUILD_FPM="\$(CC) \$(CFLAGS_CLEAN) \$(EXTRA_CFLAGS) \$(EXTRA_LDFLAGS_PROGRAM) \$(LDFLAGS) \$(NATIVE_RPATHS) \$(PHP_GLOBAL_OBJS:.lo=.o) \$(PHP_SAPI_OBJS:.lo=.o) \$(PHP_FRAMEWORKS) \$(EXTRA_LIBS) \$(SAPI_EXTRA_LIBS) \$(ZEND_EXTRA_LIBS) -o \$(SAPI_FPM_PATH)"
640: ;;
641: *)
642: BUILD_FPM="\$(LIBTOOL) --mode=link \$(CC) -export-dynamic \$(CFLAGS_CLEAN) \$(EXTRA_CFLAGS) \$(EXTRA_LDFLAGS_PROGRAM) \$(LDFLAGS) \$(PHP_RPATHS) \$(PHP_GLOBAL_OBJS) \$(PHP_FPM_OBJS) \$(EXTRA_LIBS) \$(ZEND_EXTRA_LIBS) -o \$(SAPI_FPM_PATH)"
643: ;;
644: esac
645:
646: PHP_FPM_TARGET="\$(SAPI_FPM_PATH)"
647: PHP_INSTALL_FPM_TARGET="install-fpm"
648: PHP_SUBST(BUILD_FPM)
649: PHP_SUBST(PHP_FPM_OBJS)
650: PHP_SUBST(PHP_FPM_TARGET)
651: PHP_SUBST(PHP_INSTALL_FPM_TARGET)
652: if test "$PHP_SAPI" = "fpm" ; then
653: PHP_BUILD_PROGRAM($SAPI_FPM_PATH)
654: fi
655: else
656: AC_MSG_RESULT(no)
657: fi
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>