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