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