1dnl $Id$ 2dnl config.m4 for extension swoole 3 4dnl +----------------------------------------------------------------------+ 5dnl | Swoole | 6dnl +----------------------------------------------------------------------+ 7dnl | This source file is subject to version 2.0 of the Apache license, | 8dnl | that is bundled with this package in the file LICENSE, and is | 9dnl | available through the world-wide-web at the following url: | 10dnl | http://www.apache.org/licenses/LICENSE-2.0.html | 11dnl | If you did not receive a copy of the Apache2.0 license and are unable| 12dnl | to obtain it through the world-wide-web, please send a note to | 13dnl | license@swoole.com so we can mail you a copy immediately. | 14dnl +----------------------------------------------------------------------+ 15dnl | Author: Tianfeng Han <mikan.tenny@gmail.com> | 16dnl | Author: Twosee <twose@qq.com> | 17dnl +----------------------------------------------------------------------+ 18 19PHP_ARG_ENABLE([debug-log], 20 [enable debug log], 21 [AS_HELP_STRING([--enable-debug-log], 22 [Enable swoole debug log])], [no], [no]) 23 24PHP_ARG_ENABLE([trace-log], 25 [enable trace log], 26 [AS_HELP_STRING([--enable-trace-log], 27 [Enable swoole trace log])], [no], [no]) 28 29PHP_ARG_ENABLE([sockets], 30 [enable sockets support], 31 [AS_HELP_STRING([--enable-sockets], 32 [Do you have sockets extension?])], [no], [no]) 33 34PHP_ARG_ENABLE([openssl], 35 [enable openssl support], 36 [AS_HELP_STRING([--enable-openssl], 37 [Use openssl])], [no], [no]) 38 39PHP_ARG_ENABLE([http2], 40 [enable http2.0 support], 41 [AS_HELP_STRING([--enable-http2], 42 [Use http2.0])], [no], [no]) 43 44PHP_ARG_ENABLE([swoole], 45 [swoole support], 46 [AS_HELP_STRING([--enable-swoole], 47 [Enable swoole support])], [enable_swoole="yes"]) 48 49PHP_ARG_ENABLE([mysqlnd], 50 [enable mysqlnd support], 51 [AS_HELP_STRING([--enable-mysqlnd], 52 [Enable mysqlnd])], [no], [no]) 53 54PHP_ARG_ENABLE([cares], 55 [enable c-ares support], 56 [AS_HELP_STRING([--enable-cares], 57 [Enable cares])], [no], [no]) 58 59PHP_ARG_WITH([openssl_dir], 60 [dir of openssl], 61 [AS_HELP_STRING([[--with-openssl-dir[=DIR]]], 62 [Include OpenSSL support (requires OpenSSL >= 1.0.2)])], [no], [no]) 63 64PHP_ARG_WITH([jemalloc_dir], 65 [dir of jemalloc], 66 [AS_HELP_STRING([[--with-jemalloc-dir[=DIR]]], 67 [Include jemalloc support])], [no], [no]) 68 69PHP_ARG_ENABLE([asan], 70 [enable asan], 71 [AS_HELP_STRING([--enable-asan], 72 [Enable asan])], [no], [no]) 73 74PHP_ARG_ENABLE([swoole-coverage], 75 [whether to enable swoole coverage support], 76 [AS_HELP_STRING([--enable-swoole-coverage], 77 [Enable swoole coverage support])], [no], [no]) 78 79PHP_ARG_ENABLE([swoole-dev], 80 [whether to enable Swoole developer build flags], 81 [AS_HELP_STRING([--enable-swoole-dev], 82 [Enable developer flags])], [no], [no]) 83 84PHP_ARG_ENABLE([swoole-json], 85 [whether to enable Swoole JSON build flags], 86 [AS_HELP_STRING([--enable-swoole-json], 87 [Enable JSON support])], [no], [no]) 88 89PHP_ARG_ENABLE([swoole-curl], 90 [whether to enable Swoole CURL build flags], 91 [AS_HELP_STRING([--enable-swoole-curl], 92 [Enable cURL support])], [no], [no]) 93 94PHP_ARG_ENABLE([thread-context], 95 [whether to enable thread context], 96 [AS_HELP_STRING([--enable-thread-context], 97 [Use thread context])], [no], [no]) 98 99AC_DEFUN([SWOOLE_HAVE_PHP_EXT], [ 100 extname=$1 101 haveext=$[PHP_]translit($1,a-z_-,A-Z__) 102 103 AC_MSG_CHECKING([for ext/$extname support]) 104 if test -x "$PHP_EXECUTABLE"; then 105 grepext=`$PHP_EXECUTABLE -m | $EGREP ^$extname\$` 106 if test "$grepext" = "$extname"; then 107 [PHP_HTTP_HAVE_EXT_]translit($1,a-z_-,A-Z__)=1 108 AC_MSG_RESULT([yes]) 109 $2 110 else 111 [PHP_HTTP_HAVE_EXT_]translit($1,a-z_-,A-Z__)= 112 AC_MSG_RESULT([no]) 113 $3 114 fi 115 elif test "$haveext" != "no" && test "x$haveext" != "x"; then 116 [PHP_HTTP_HAVE_EXT_]translit($1,a-z_-,A-Z__)=1 117 AC_MSG_RESULT([yes]) 118 $2 119 else 120 [PHP_HTTP_HAVE_EXT_]translit($1,a-z_-,A-Z__)= 121 AC_MSG_RESULT([no]) 122 $3 123 fi 124]) 125 126AC_DEFUN([AC_SWOOLE_CPU_AFFINITY], 127[ 128 AC_MSG_CHECKING([for cpu affinity]) 129 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 130 #ifdef __FreeBSD__ 131 #include <sys/types.h> 132 #include <sys/cpuset.h> 133 typedef cpuset_t cpu_set_t; 134 #else 135 #include <sched.h> 136 #endif 137 ]], [[ 138 cpu_set_t cpu_set; 139 CPU_ZERO(&cpu_set); 140 ]])],[ 141 AC_DEFINE([HAVE_CPU_AFFINITY], 1, [cpu affinity?]) 142 AC_MSG_RESULT([yes]) 143 ],[ 144 AC_MSG_RESULT([no]) 145 ]) 146]) 147 148AC_DEFUN([AC_SWOOLE_HAVE_REUSEPORT], 149[ 150 AC_MSG_CHECKING([for socket REUSEPORT]) 151 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 152 #include <sys/socket.h> 153 ]], [[ 154 int val = 1; 155 setsockopt(0, SOL_SOCKET, SO_REUSEPORT, &val, sizeof(val)); 156 ]])],[ 157 AC_DEFINE([HAVE_REUSEPORT], 1, [have SO_REUSEPORT?]) 158 AC_MSG_RESULT([yes]) 159 ],[ 160 AC_MSG_RESULT([no]) 161 ]) 162]) 163 164AC_DEFUN([AC_SWOOLE_HAVE_FUTEX], 165[ 166 AC_MSG_CHECKING([for futex]) 167 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 168 #include <linux/futex.h> 169 #include <syscall.h> 170 #include <unistd.h> 171 ]], [[ 172 int futex_addr; 173 int val1; 174 syscall(SYS_futex, &futex_addr, val1, NULL, NULL, 0); 175 ]])],[ 176 AC_DEFINE([HAVE_FUTEX], 1, [have FUTEX?]) 177 AC_MSG_RESULT([yes]) 178 ],[ 179 AC_MSG_RESULT([no]) 180 ]) 181]) 182 183AC_DEFUN([AC_SWOOLE_HAVE_UCONTEXT], 184[ 185 AC_MSG_CHECKING([for ucontext]) 186 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 187 #define _XOPEN_SOURCE 188 #include <stdio.h> 189 #include <ucontext.h> 190 #include <unistd.h> 191 ]], [[ 192 ucontext_t context; 193 getcontext(&context); 194 ]])],[ 195 AC_DEFINE([HAVE_UCONTEXT], 1, [have ucontext?]) 196 AC_MSG_RESULT([yes]) 197 ],[ 198 AC_MSG_RESULT([no]) 199 ]) 200]) 201 202AC_DEFUN([AC_SWOOLE_HAVE_VALGRIND], 203[ 204 AC_MSG_CHECKING([for valgrind]) 205 AC_LANG([C++]) 206 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 207 #include <valgrind/valgrind.h> 208 ]], [[ 209 210 ]])],[ 211 AC_DEFINE([HAVE_VALGRIND], 1, [have valgrind?]) 212 AC_MSG_RESULT([yes]) 213 ],[ 214 AC_MSG_RESULT([no]) 215 ]) 216]) 217 218AC_DEFUN([AC_SWOOLE_HAVE_BOOST_STACKTRACE], 219[ 220 AC_MSG_CHECKING([for valgrind]) 221 AC_LANG([C++]) 222 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 223 #include <boost/stacktrace.hpp> 224 ]], [[ 225 226 ]])],[ 227 AC_DEFINE([HAVE_BOOST_STACKTRACE], 1, [have boost-stacktrace?]) 228 AC_MSG_RESULT([yes]) 229 ],[ 230 AC_MSG_RESULT([no]) 231 ]) 232]) 233 234AC_DEFUN([AC_SWOOLE_CHECK_SOCKETS], [ 235 dnl Check for struct cmsghdr 236 AC_CACHE_CHECK([for struct cmsghdr], ac_cv_cmsghdr, 237 [ 238 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 239#include <sys/types.h> 240#include <sys/socket.h>]], [[struct cmsghdr s; s]])], [ac_cv_cmsghdr=yes], [ac_cv_cmsghdr=no]) 241 ]) 242 243 if test "$ac_cv_cmsghdr" = yes; then 244 AC_DEFINE(HAVE_CMSGHDR,1,[Whether you have struct cmsghdr]) 245 fi 246 247 AC_CHECK_FUNCS([hstrerror socketpair if_nametoindex if_indextoname]) 248 AC_CHECK_HEADERS([netdb.h netinet/tcp.h sys/un.h sys/sockio.h]) 249 AC_DEFINE([HAVE_SOCKETS], 1, [ ]) 250 251 dnl Check for fied ss_family in sockaddr_storage (missing in AIX until 5.3) 252 AC_CACHE_CHECK([for field ss_family in struct sockaddr_storage], ac_cv_ss_family, 253 [ 254 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 255#include <sys/socket.h> 256#include <sys/types.h> 257#include <netdb.h> 258 ]], [[struct sockaddr_storage sa_store; sa_store.ss_family = AF_INET6;]])], 259 [ac_cv_ss_family=yes], [ac_cv_ss_family=no]) 260 ]) 261 262 if test "$ac_cv_ss_family" = yes; then 263 AC_DEFINE(HAVE_SA_SS_FAMILY,1,[Whether you have sockaddr_storage.ss_family]) 264 fi 265 266 dnl Check for AI_V4MAPPED flag 267 AC_CACHE_CHECK([if getaddrinfo supports AI_V4MAPPED],[ac_cv_gai_ai_v4mapped], 268 [ 269 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 270#include <netdb.h> 271 ]], [[int flag = AI_V4MAPPED;]])], 272 [ac_cv_gai_ai_v4mapped=yes], [ac_cv_gai_ai_v4mapped=no]) 273 ]) 274 275 if test "$ac_cv_gai_ai_v4mapped" = yes; then 276 AC_DEFINE(HAVE_AI_V4MAPPED,1,[Whether you have AI_V4MAPPED]) 277 fi 278 279 dnl Check for AI_ALL flag 280 AC_CACHE_CHECK([if getaddrinfo supports AI_ALL],[ac_cv_gai_ai_all], 281 [ 282 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 283#include <netdb.h> 284 ]], [[int flag = AI_ALL;]])], 285 [ac_cv_gai_ai_all=yes], [ac_cv_gai_ai_all=no]) 286 ]) 287 288 if test "$ac_cv_gai_ai_all" = yes; then 289 AC_DEFINE(HAVE_AI_ALL,1,[Whether you have AI_ALL]) 290 fi 291 292 dnl Check for AI_IDN flag 293 AC_CACHE_CHECK([if getaddrinfo supports AI_IDN],[ac_cv_gai_ai_idn], 294 [ 295 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 296#include <netdb.h> 297 ]], [[int flag = AI_IDN;]])], 298 [ac_cv_gai_ai_idn=yes], [ac_cv_gai_ai_idn=no]) 299 ]) 300 301 if test "$ac_cv_gai_ai_idn" = yes; then 302 AC_DEFINE(HAVE_AI_IDN,1,[Whether you have AI_IDN]) 303 fi 304 305 AC_CACHE_CHECK([if gethostbyname2_r is supported],[ac_cv_gethostbyname2_r], 306 [ 307 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 308#include <sys/socket.h> 309#include <netdb.h> 310 ]], [[struct hostent s, *res; char ptr[256]; int err; gethostbyname2_r("example.com", AF_INET, &s, ptr, sizeof(ptr), &res, &err);]])], 311 [ac_cv_gethostbyname2_r=yes], [ac_cv_gethostbyname2_r=no]) 312 ]) 313 314 if test "$ac_cv_gethostbyname2_r" = yes; then 315 AC_DEFINE(HAVE_GETHOSTBYNAME2_R,1,[Whether you have gethostbyname2_r]) 316 fi 317]) 318 319AC_MSG_CHECKING([if compiling with clang]) 320AC_COMPILE_IFELSE([ 321 AC_LANG_PROGRAM([], [[ 322 #ifndef __clang__ 323 not clang 324 #endif 325 ]])], 326 [CLANG=yes], [CLANG=no] 327) 328AC_MSG_RESULT([$CLANG]) 329 330AC_PROG_CC_C99 331 332AC_CANONICAL_HOST 333 334if test "$PHP_SWOOLE" != "no"; then 335 336 AC_CHECK_LIB(c, accept4, AC_DEFINE(HAVE_ACCEPT4, 1, [have accept4])) 337 AC_CHECK_LIB(c, signalfd, AC_DEFINE(HAVE_SIGNALFD, 1, [have signalfd])) 338 AC_CHECK_LIB(c, eventfd, AC_DEFINE(HAVE_EVENTFD, 1, [have eventfd])) 339 AC_CHECK_LIB(c, epoll_create, AC_DEFINE(HAVE_EPOLL, 1, [have epoll])) 340 AC_CHECK_LIB(c, poll, AC_DEFINE(HAVE_POLL, 1, [have poll])) 341 AC_CHECK_LIB(c, sendfile, AC_DEFINE(HAVE_SENDFILE, 1, [have sendfile])) 342 AC_CHECK_LIB(c, kqueue, AC_DEFINE(HAVE_KQUEUE, 1, [have kqueue])) 343 AC_CHECK_LIB(execinfo, backtrace, AC_DEFINE(HAVE_EXECINFO, 1, [have execinfo])) 344 AC_CHECK_LIB(c, daemon, AC_DEFINE(HAVE_DAEMON, 1, [have daemon])) 345 AC_CHECK_LIB(c, mkostemp, AC_DEFINE(HAVE_MKOSTEMP, 1, [have mkostemp])) 346 AC_CHECK_LIB(c, inotify_init, AC_DEFINE(HAVE_INOTIFY, 1, [have inotify])) 347 AC_CHECK_LIB(c, malloc_trim, AC_DEFINE(HAVE_MALLOC_TRIM, 1, [have malloc_trim])) 348 AC_CHECK_LIB(c, inotify_init1, AC_DEFINE(HAVE_INOTIFY_INIT1, 1, [have inotify_init1])) 349 AC_CHECK_LIB(c, ptrace, AC_DEFINE(HAVE_PTRACE, 1, [have ptrace])) 350 AC_CHECK_LIB(c, getrandom, AC_DEFINE(HAVE_GETRANDOM, 1, [have getrandom])) 351 AC_CHECK_LIB(c, arc4random, AC_DEFINE(HAVE_ARC4RANDOM, 1, [have arc4random])) 352 AC_CHECK_LIB(c, CCRandomGenerateBytes, AC_DEFINE(HAVE_CCRANDOMGENERATEBYTES, 1, [have_ccrandomgeneratebytes])) 353 AC_CHECK_LIB(pthread, pthread_rwlock_init, AC_DEFINE(HAVE_RWLOCK, 1, [have pthread_rwlock_init])) 354 AC_CHECK_LIB(pthread, pthread_spin_lock, AC_DEFINE(HAVE_SPINLOCK, 1, [have pthread_spin_lock])) 355 AC_CHECK_LIB(pthread, pthread_mutex_timedlock, AC_DEFINE(HAVE_MUTEX_TIMEDLOCK, 1, [have pthread_mutex_timedlock])) 356 AC_CHECK_LIB(pthread, pthread_barrier_init, AC_DEFINE(HAVE_PTHREAD_BARRIER, 1, [have pthread_barrier_init])) 357 AC_CHECK_LIB(pthread, pthread_mutexattr_setpshared, AC_DEFINE(HAVE_PTHREAD_MUTEXATTR_SETPSHARED, 1, [have pthread_mutexattr_setpshared])) 358 AC_CHECK_LIB(pthread, pthread_mutexattr_setrobust, AC_DEFINE(HAVE_PTHREAD_MUTEXATTR_SETROBUST, 1, [have pthread_mutexattr_setrobust])) 359 AC_CHECK_LIB(pthread, pthread_mutex_consistent, AC_DEFINE(HAVE_PTHREAD_MUTEX_CONSISTENT, 1, [have pthread_mutex_consistent])) 360 AC_CHECK_LIB(pcre, pcre_compile, AC_DEFINE(HAVE_PCRE, 1, [have pcre])) 361 AC_CHECK_LIB(cares, ares_gethostbyname, AC_DEFINE(HAVE_CARES, 1, [have c-ares])) 362 363 if test "$PHP_SWOOLE_DEV" = "yes"; then 364 AX_CHECK_COMPILE_FLAG(-Wbool-conversion, _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wbool-conversion") 365 AX_CHECK_COMPILE_FLAG(-Wignored-qualifiers, _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wignored-qualifiers") 366 AX_CHECK_COMPILE_FLAG(-Wduplicate-enum, _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wduplicate-enum") 367 AX_CHECK_COMPILE_FLAG(-Wempty-body, _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wempty-body") 368 AX_CHECK_COMPILE_FLAG(-Wenum-compare, _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wenum-compare") 369 AX_CHECK_COMPILE_FLAG(-Wextra, _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wextra") 370 AX_CHECK_COMPILE_FLAG(-Wformat-security, _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wformat-security") 371 AX_CHECK_COMPILE_FLAG(-Wheader-guard, _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wheader-guard") 372 AX_CHECK_COMPILE_FLAG(-Wincompatible-pointer-types-discards-qualifiers, _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wincompatible-pointer-types-discards-qualifiers") 373 AX_CHECK_COMPILE_FLAG(-Winit-self, _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Winit-self") 374 AX_CHECK_COMPILE_FLAG(-Wlogical-not-parentheses, _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wlogical-not-parentheses") 375 AX_CHECK_COMPILE_FLAG(-Wlogical-op-parentheses, _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wlogical-op-parentheses") 376 AX_CHECK_COMPILE_FLAG(-Wloop-analysis, _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wloop-analysis") 377 AX_CHECK_COMPILE_FLAG(-Wuninitialized, _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wuninitialized") 378 AX_CHECK_COMPILE_FLAG(-Wno-missing-field-initializers, _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wno-missing-field-initializers") 379 AX_CHECK_COMPILE_FLAG(-Wno-sign-compare, _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wno-sign-compare") 380 AX_CHECK_COMPILE_FLAG(-Wno-unused-const-variable, _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wno-unused-const-variable") 381 AX_CHECK_COMPILE_FLAG(-Wno-unused-parameter, _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wno-unused-parameter") 382 AX_CHECK_COMPILE_FLAG(-Wno-variadic-macros, _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wno-variadic-macros") 383 AX_CHECK_COMPILE_FLAG(-Wparentheses, _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wparentheses") 384 AX_CHECK_COMPILE_FLAG(-Wpointer-bool-conversion, _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wpointer-bool-conversion") 385 AX_CHECK_COMPILE_FLAG(-Wsizeof-array-argument, _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wsizeof-array-argument") 386 AX_CHECK_COMPILE_FLAG(-Wwrite-strings, _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wwrite-strings") 387 AX_CHECK_COMPILE_FLAG(-fdiagnostics-show-option, _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -fdiagnostics-show-option") 388 AX_CHECK_COMPILE_FLAG(-fno-omit-frame-pointer, _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -fno-omit-frame-pointer") 389 AX_CHECK_COMPILE_FLAG(-fno-optimize-sibling-calls, _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -fno-optimize-sibling-calls") 390 AX_CHECK_COMPILE_FLAG(-fsanitize-address, _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -fsanitize-address") 391 AX_CHECK_COMPILE_FLAG(-fstack-protector, _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -fstack-protector") 392 393 EXTRA_CFLAGS="$_MAINTAINER_CFLAGS" 394 CFLAGS="-g -O0 -Wall $CFLAGS" 395 CXXFLAGS="-g -O0 -Wall $CXXFLAGS" 396 fi 397 398 if test "$PHP_SWOOLE_JSON" = "yes"; then 399 AC_DEFINE(SW_USE_JSON, 1, [do we enable json decoder]) 400 fi 401 402 if test "$PHP_SWOOLE_CURL" = "yes"; then 403 AC_DEFINE(SW_USE_CURL, 1, [do we enable cURL native client]) 404 fi 405 406 AC_CHECK_LIB(z, gzgets, [ 407 AC_DEFINE(SW_HAVE_COMPRESSION, 1, [have compression]) 408 AC_DEFINE(SW_HAVE_ZLIB, 1, [have zlib]) 409 PHP_ADD_LIBRARY(z, 1, SWOOLE_SHARED_LIBADD) 410 ]) 411 412 AC_CHECK_LIB(brotlienc, BrotliEncoderCreateInstance, [ 413 AC_CHECK_LIB(brotlidec, BrotliDecoderCreateInstance, [ 414 AC_DEFINE(SW_HAVE_COMPRESSION, 1, [have compression]) 415 AC_DEFINE(SW_HAVE_BROTLI, 1, [have brotli encoder]) 416 PHP_ADD_LIBRARY(brotlienc, 1, SWOOLE_SHARED_LIBADD) 417 PHP_ADD_LIBRARY(brotlidec, 1, SWOOLE_SHARED_LIBADD) 418 ]) 419 ]) 420 421 PHP_ADD_LIBRARY(pthread) 422 PHP_SUBST(SWOOLE_SHARED_LIBADD) 423 424 AC_ARG_ENABLE(debug, 425 [ --enable-debug, compile with debug symbols], 426 [PHP_DEBUG=$enableval], 427 [PHP_DEBUG=0] 428 ) 429 430 if test "$PHP_DEBUG_LOG" != "no"; then 431 AC_DEFINE(SW_DEBUG, 1, [do we enable swoole debug]) 432 PHP_DEBUG=1 433 fi 434 435 if test "$PHP_ASAN" != "no"; then 436 PHP_DEBUG=1 437 CFLAGS="$CFLAGS -fsanitize=address -fno-omit-frame-pointer" 438 CXXFLAGS="$CXXFLAGS -fsanitize=address -fno-omit-frame-pointer" 439 fi 440 441 if test "$PHP_TRACE_LOG" != "no"; then 442 AC_DEFINE(SW_LOG_TRACE_OPEN, 1, [enable trace log]) 443 fi 444 445 if test "$PHP_SOCKETS" = "yes"; then 446 AC_MSG_CHECKING([for php_sockets.h]) 447 448 AS_IF([test -f $abs_srcdir/ext/sockets/php_sockets.h], [AC_MSG_RESULT([ok, found in $abs_srcdir])], 449 [test -f $phpincludedir/ext/sockets/php_sockets.h], [AC_MSG_RESULT([ok, found in $phpincludedir])], 450 [AC_MSG_ERROR([cannot find php_sockets.h. Please check if sockets extension is installed.]) 451 ]) 452 453 AC_DEFINE(SW_SOCKETS, 1, [enable sockets support]) 454 455 dnl Some systems build and package PHP socket extension separately 456 dnl and php_config.h does not have HAVE_SOCKETS defined. 457 AC_DEFINE(HAVE_SOCKETS, 1, [whether sockets extension is enabled]) 458 459 PHP_ADD_EXTENSION_DEP(swoole, sockets, true) 460 fi 461 462 if test "$PHP_THREAD" = "yes"; then 463 AC_DEFINE(SW_USE_THREAD, 1, [enable thread support]) 464 fi 465 466 if test "$PHP_CARES" = "yes"; then 467 AC_DEFINE(SW_USE_CARES, 1, [do we enable c-ares support]) 468 PHP_ADD_LIBRARY(cares, 1, SWOOLE_SHARED_LIBADD) 469 fi 470 471 AC_SWOOLE_CPU_AFFINITY 472 AC_SWOOLE_HAVE_REUSEPORT 473 AC_SWOOLE_HAVE_FUTEX 474 AC_SWOOLE_HAVE_UCONTEXT 475 AC_SWOOLE_HAVE_VALGRIND 476 AC_SWOOLE_CHECK_SOCKETS 477 AC_SWOOLE_HAVE_BOOST_STACKTRACE 478 479 AS_CASE([$host_os], 480 [darwin*], [SW_OS="MAC"], 481 [cygwin*], [SW_OS="CYGWIN"], 482 [mingw*], [SW_OS="MINGW"], 483 [linux*], [SW_OS="LINUX"], 484 [*bsd*], [SW_OS="BSD"], 485 [] 486 ) 487 488 CFLAGS="-Wall -pthread $CFLAGS" 489 LDFLAGS="$LDFLAGS -lpthread" 490 491 if test "$SW_OS" = "MAC"; then 492 AC_CHECK_LIB(c, clock_gettime, AC_DEFINE(HAVE_CLOCK_GETTIME, 1, [have clock_gettime])) 493 else 494 AC_CHECK_LIB(rt, clock_gettime, AC_DEFINE(HAVE_CLOCK_GETTIME, 1, [have clock_gettime])) 495 PHP_ADD_LIBRARY(rt, 1, SWOOLE_SHARED_LIBADD) 496 fi 497 if test "$SW_OS" = "LINUX"; then 498 LDFLAGS="$LDFLAGS -z now" 499 fi 500 501 if test "$PHP_OPENSSL" != "no" || test "$PHP_OPENSSL_DIR" != "no"; then 502 if test "$PHP_OPENSSL_DIR" != "no"; then 503 AC_DEFINE(HAVE_OPENSSL, 1, [have openssl]) 504 PHP_ADD_INCLUDE("${PHP_OPENSSL_DIR}/include") 505 PHP_ADD_LIBRARY_WITH_PATH(ssl, "${PHP_OPENSSL_DIR}/${PHP_LIBDIR}") 506 else 507 AC_CHECK_LIB(ssl, SSL_connect, AC_DEFINE(HAVE_OPENSSL, 1, [have openssl])) 508 fi 509 510 AC_DEFINE(SW_USE_OPENSSL, 1, [enable openssl support]) 511 PHP_ADD_LIBRARY(ssl, 1, SWOOLE_SHARED_LIBADD) 512 PHP_ADD_LIBRARY(crypto, 1, SWOOLE_SHARED_LIBADD) 513 fi 514 515 if test "$PHP_JEMALLOC_DIR" != "no"; then 516 AC_DEFINE(SW_USE_JEMALLOC, 1, [use jemalloc]) 517 PHP_ADD_INCLUDE("${PHP_JEMALLOC_DIR}/include") 518 PHP_ADD_LIBRARY_WITH_PATH(jemalloc, "${PHP_JEMALLOC_DIR}/${PHP_LIBDIR}") 519 PHP_ADD_LIBRARY(jemalloc, 1, SWOOLE_SHARED_LIBADD) 520 fi 521 522 PHP_ADD_LIBRARY(pthread, 1, SWOOLE_SHARED_LIBADD) 523 524 if test "$PHP_HTTP2" = "yes"; then 525 AC_DEFINE(SW_USE_HTTP2, 1, [enable HTTP2 support]) 526 fi 527 528 if test "$PHP_MYSQLND" = "yes"; then 529 PHP_ADD_EXTENSION_DEP(mysqli, mysqlnd) 530 AC_DEFINE(SW_USE_MYSQLND, 1, [use mysqlnd]) 531 fi 532 533 swoole_source_file=" \ 534 ext-src/php_swoole.cc \ 535 ext-src/php_swoole_cxx.cc \ 536 ext-src/swoole_admin_server.cc \ 537 ext-src/swoole_async_coro.cc \ 538 ext-src/swoole_atomic.cc \ 539 ext-src/swoole_channel_coro.cc \ 540 ext-src/swoole_client.cc \ 541 ext-src/swoole_client_coro.cc \ 542 ext-src/swoole_coroutine.cc \ 543 ext-src/swoole_coroutine_scheduler.cc \ 544 ext-src/swoole_coroutine_system.cc \ 545 ext-src/swoole_curl.cc \ 546 ext-src/swoole_event.cc \ 547 ext-src/swoole_http2_client_coro.cc \ 548 ext-src/swoole_http2_server.cc \ 549 ext-src/swoole_http_client_coro.cc \ 550 ext-src/swoole_http_request.cc \ 551 ext-src/swoole_http_response.cc \ 552 ext-src/swoole_http_server.cc \ 553 ext-src/swoole_http_server_coro.cc \ 554 ext-src/swoole_lock.cc \ 555 ext-src/swoole_mysql_coro.cc \ 556 ext-src/swoole_mysql_proto.cc \ 557 ext-src/swoole_process.cc \ 558 ext-src/swoole_process_pool.cc \ 559 ext-src/swoole_redis_coro.cc \ 560 ext-src/swoole_redis_server.cc \ 561 ext-src/swoole_runtime.cc \ 562 ext-src/swoole_server.cc \ 563 ext-src/swoole_server_port.cc \ 564 ext-src/swoole_socket_coro.cc \ 565 ext-src/swoole_table.cc \ 566 ext-src/swoole_timer.cc \ 567 ext-src/swoole_websocket_server.cc \ 568 src/core/base.cc \ 569 src/core/channel.cc \ 570 src/core/crc32.cc \ 571 src/core/error.cc \ 572 src/core/heap.cc \ 573 src/core/log.cc \ 574 src/core/string.cc \ 575 src/core/timer.cc \ 576 src/coroutine/base.cc \ 577 src/coroutine/channel.cc \ 578 src/coroutine/context.cc \ 579 src/coroutine/file_lock.cc \ 580 src/coroutine/hook.cc \ 581 src/coroutine/socket.cc \ 582 src/coroutine/system.cc \ 583 src/coroutine/thread_context.cc \ 584 src/lock/mutex.cc \ 585 src/lock/rw_lock.cc \ 586 src/lock/spin_lock.cc \ 587 src/memory/buffer.cc \ 588 src/memory/fixed_pool.cc \ 589 src/memory/global_memory.cc \ 590 src/memory/ring_buffer.cc \ 591 src/memory/shared_memory.cc \ 592 src/memory/table.cc \ 593 src/network/address.cc \ 594 src/network/client.cc \ 595 src/network/dns.cc \ 596 src/network/socket.cc \ 597 src/network/stream.cc \ 598 src/os/async_thread.cc \ 599 src/os/base.cc \ 600 src/os/file.cc \ 601 src/os/msg_queue.cc \ 602 src/os/pipe.cc \ 603 src/os/process_pool.cc \ 604 src/os/sendfile.cc \ 605 src/os/signal.cc \ 606 src/os/timer.cc \ 607 src/os/unix_socket.cc \ 608 src/os/wait.cc \ 609 src/protocol/base.cc \ 610 src/protocol/base64.cc \ 611 src/protocol/dtls.cc \ 612 src/protocol/http.cc \ 613 src/protocol/http2.cc \ 614 src/protocol/mime_type.cc \ 615 src/protocol/mqtt.cc \ 616 src/protocol/redis.cc \ 617 src/protocol/socks5.cc \ 618 src/protocol/ssl.cc \ 619 src/protocol/websocket.cc \ 620 src/reactor/base.cc \ 621 src/reactor/epoll.cc \ 622 src/reactor/kqueue.cc \ 623 src/reactor/poll.cc \ 624 src/reactor/select.cc \ 625 src/server/base.cc \ 626 src/server/manager.cc \ 627 src/server/master.cc \ 628 src/server/message_bus.cc \ 629 src/server/port.cc \ 630 src/server/process.cc \ 631 src/server/reactor_process.cc \ 632 src/server/reactor_thread.cc \ 633 src/server/static_handler.cc \ 634 src/server/task_worker.cc \ 635 src/server/worker.cc \ 636 src/wrapper/event.cc \ 637 src/wrapper/timer.cc" 638 639 swoole_source_file="$swoole_source_file \ 640 thirdparty/php/curl/interface.cc \ 641 thirdparty/php/curl/multi.cc \ 642 thirdparty/php/sockets/multicast.cc \ 643 thirdparty/php/sockets/sendrecvmsg.cc \ 644 thirdparty/php/sockets/conversions.cc \ 645 thirdparty/php/sockets/sockaddr_conv.cc \ 646 thirdparty/php/standard/var_decoder.cc \ 647 thirdparty/php/standard/proc_open.cc" 648 649 swoole_source_file="$swoole_source_file \ 650 thirdparty/swoole_http_parser.c \ 651 thirdparty/multipart_parser.c" 652 653 swoole_source_file="$swoole_source_file \ 654 thirdparty/hiredis/hiredis.c \ 655 thirdparty/hiredis/alloc.c \ 656 thirdparty/hiredis/net.c \ 657 thirdparty/hiredis/read.c \ 658 thirdparty/hiredis/sds.c" 659 660 swoole_source_file="$swoole_source_file \ 661 thirdparty/nghttp2/nghttp2_hd.c \ 662 thirdparty/nghttp2/nghttp2_rcbuf.c \ 663 thirdparty/nghttp2/nghttp2_helper.c \ 664 thirdparty/nghttp2/nghttp2_buf.c \ 665 thirdparty/nghttp2/nghttp2_mem.c \ 666 thirdparty/nghttp2/nghttp2_hd_huffman.c \ 667 thirdparty/nghttp2/nghttp2_hd_huffman_data.c" 668 669 SW_ASM_DIR="thirdparty/boost/asm/" 670 SW_USE_ASM_CONTEXT="yes" 671 672 AS_CASE([$host_cpu], 673 [x86_64*], [SW_CPU="x86_64"], 674 [amd64*], [SW_CPU="x86_64"], 675 [x86*], [SW_CPU="x86"], 676 [i?86*], [SW_CPU="x86"], 677 [arm*], [SW_CPU="arm"], 678 [aarch64*], [SW_CPU="arm64"], 679 [arm64*], [SW_CPU="arm64"], 680 [mips64*], [SW_CPU="mips64"], 681 [mips*], [SW_CPU="mips32"], 682 [riscv64*], [SW_CPU="riscv64"], 683 [ 684 SW_USE_ASM_CONTEXT="no" 685 ] 686 ) 687 688 if test "$SW_OS" = "MAC"; then 689 SW_CONTEXT_ASM_FILE="combined_sysv_macho_gas.S" 690 elif test "$SW_CPU" = "x86_64"; then 691 if test "$SW_OS" = "LINUX" || test "$SW_OS" = "BSD"; then 692 SW_CONTEXT_ASM_FILE="x86_64_sysv_elf_gas.S" 693 else 694 SW_USE_ASM_CONTEXT="no" 695 fi 696 elif test "$SW_CPU" = "x86"; then 697 if test "$SW_OS" = "LINUX" || test "$SW_OS" = "BSD"; then 698 SW_CONTEXT_ASM_FILE="i386_sysv_elf_gas.S" 699 else 700 SW_USE_ASM_CONTEXT="no" 701 fi 702 elif test "$SW_CPU" = "arm"; then 703 if test "$SW_OS" = "LINUX" || test "$SW_OS" = "BSD"; then 704 SW_CONTEXT_ASM_FILE="arm_aapcs_elf_gas.S" 705 else 706 SW_USE_ASM_CONTEXT="no" 707 fi 708 elif test "$SW_CPU" = "arm64"; then 709 if test "$SW_OS" = "LINUX" || test "$SW_OS" = "BSD"; then 710 SW_CONTEXT_ASM_FILE="arm64_aapcs_elf_gas.S" 711 else 712 SW_USE_ASM_CONTEXT="no" 713 fi 714 elif test "$SW_CPU" = "ppc32"; then 715 if test "$SW_OS" = "LINUX"; then 716 SW_CONTEXT_ASM_FILE="ppc32_sysv_elf_gas.S" 717 else 718 SW_USE_ASM_CONTEXT="no" 719 fi 720 elif test "$SW_CPU" = "ppc64"; then 721 if test "$SW_OS" = "LINUX" || test "$SW_OS" = "BSD"; then 722 SW_CONTEXT_ASM_FILE="ppc64_sysv_elf_gas.S" 723 else 724 SW_USE_ASM_CONTEXT="no" 725 fi 726 elif test "$SW_CPU" = "mips64"; then 727 if test "$SW_OS" = "LINUX"; then 728 SW_CONTEXT_ASM_FILE="mips64_n64_elf_gas.S" 729 else 730 SW_USE_ASM_CONTEXT="no" 731 fi 732 elif test "$SW_CPU" = "mips32"; then 733 if test "$SW_OS" = "LINUX"; then 734 SW_CONTEXT_ASM_FILE="mips32_o32_elf_gas.S" 735 else 736 SW_USE_ASM_CONTEXT="no" 737 fi 738 elif test "$SW_CPU" = "riscv64"; then 739 if test "$SW_OS" = "LINUX"; then 740 SW_CONTEXT_ASM_FILE="riscv64_sysv_elf_gas.S" 741 else 742 SW_USE_ASM_CONTEXT="no" 743 fi 744 else 745 SW_USE_ASM_CONTEXT="no" 746 fi 747 748 if test "$PHP_THREAD_CONTEXT" != "no"; then 749 AC_DEFINE(SW_USE_THREAD_CONTEXT, 1, [do we enable thread context]) 750 SW_USE_ASM_CONTEXT="no" 751 fi 752 753 if test "$SW_USE_ASM_CONTEXT" = "yes"; then 754 swoole_source_file="$swoole_source_file \ 755 ${SW_ASM_DIR}make_${SW_CONTEXT_ASM_FILE} \ 756 ${SW_ASM_DIR}jump_${SW_CONTEXT_ASM_FILE} " 757 AC_DEFINE(SW_USE_ASM_CONTEXT, 1, [use boost asm context]) 758 fi 759 760 PHP_NEW_EXTENSION(swoole, $swoole_source_file, $ext_shared,, "$EXTRA_CFLAGS -DENABLE_PHP_SWOOLE", cxx) 761 762 PHP_ADD_INCLUDE([$ext_srcdir]) 763 PHP_ADD_INCLUDE([$ext_srcdir/include]) 764 PHP_ADD_INCLUDE([$ext_srcdir/ext-src]) 765 PHP_ADD_INCLUDE([$ext_srcdir/thirdparty]) 766 PHP_ADD_INCLUDE([$ext_srcdir/thirdparty/hiredis]) 767 768 AC_MSG_CHECKING([swoole coverage]) 769 if test "$PHP_SWOOLE_COVERAGE" != "no"; then 770 AC_MSG_RESULT([enabled]) 771 772 PHP_ADD_MAKEFILE_FRAGMENT 773 else 774 AC_MSG_RESULT([disabled]) 775 fi 776 777 PHP_INSTALL_HEADERS([ext/swoole], [ext-src/*.h config.h php_swoole.h \ 778 include/*.h \ 779 thirdparty/*.h \ 780 thirdparty/nghttp2/*.h \ 781 thirdparty/hiredis/*.h]) 782 783 PHP_REQUIRE_CXX() 784 785 CXXFLAGS="$CXXFLAGS -Wall -Wno-unused-function -Wno-deprecated -Wno-deprecated-declarations" 786 787 if test "$SW_OS" = "CYGWIN" || test "$SW_OS" = "MINGW"; then 788 CXXFLAGS="$CXXFLAGS -std=gnu++11" 789 else 790 CXXFLAGS="$CXXFLAGS -std=c++11" 791 fi 792 793 PHP_ADD_BUILD_DIR($ext_builddir/ext-src) 794 PHP_ADD_BUILD_DIR($ext_builddir/src/core) 795 PHP_ADD_BUILD_DIR($ext_builddir/src/memory) 796 PHP_ADD_BUILD_DIR($ext_builddir/src/reactor) 797 PHP_ADD_BUILD_DIR($ext_builddir/src/lock) 798 PHP_ADD_BUILD_DIR($ext_builddir/src/os) 799 PHP_ADD_BUILD_DIR($ext_builddir/src/network) 800 PHP_ADD_BUILD_DIR($ext_builddir/src/server) 801 PHP_ADD_BUILD_DIR($ext_builddir/src/protocol) 802 PHP_ADD_BUILD_DIR($ext_builddir/src/coroutine) 803 PHP_ADD_BUILD_DIR($ext_builddir/src/wrapper) 804 PHP_ADD_BUILD_DIR($ext_builddir/thirdparty/boost) 805 PHP_ADD_BUILD_DIR($ext_builddir/thirdparty/boost/asm) 806 PHP_ADD_BUILD_DIR($ext_builddir/thirdparty/hiredis) 807 PHP_ADD_BUILD_DIR($ext_builddir/thirdparty/nghttp2) 808 PHP_ADD_BUILD_DIR($ext_builddir/thirdparty/php/sockets) 809 PHP_ADD_BUILD_DIR($ext_builddir/thirdparty/php/standard) 810 PHP_ADD_BUILD_DIR($ext_builddir/thirdparty/php/curl) 811fi 812