1dnl nghttp2 - HTTP/2 C Library 2 3dnl Copyright (c) 2012, 2013, 2014, 2015 Tatsuhiro Tsujikawa 4 5dnl Permission is hereby granted, free of charge, to any person obtaining 6dnl a copy of this software and associated documentation files (the 7dnl "Software"), to deal in the Software without restriction, including 8dnl without limitation the rights to use, copy, modify, merge, publish, 9dnl distribute, sublicense, and/or sell copies of the Software, and to 10dnl permit persons to whom the Software is furnished to do so, subject to 11dnl the following conditions: 12 13dnl The above copyright notice and this permission notice shall be 14dnl included in all copies or substantial portions of the Software. 15 16dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17dnl EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18dnl MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19dnl NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 20dnl LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 21dnl OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 22dnl WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 24dnl Do not change user variables! 25dnl https://www.gnu.org/software/automake/manual/html_node/Flag-Variables-Ordering.html 26 27AC_PREREQ(2.61) 28AC_INIT([nghttp2], [1.46.0], [t-tujikawa@users.sourceforge.net]) 29AC_CONFIG_AUX_DIR([.]) 30AC_CONFIG_MACRO_DIR([m4]) 31AC_CONFIG_HEADERS([config.h]) 32AC_USE_SYSTEM_EXTENSIONS 33 34LT_PREREQ([2.2.6]) 35LT_INIT() 36 37AC_CANONICAL_BUILD 38AC_CANONICAL_HOST 39AC_CANONICAL_TARGET 40 41AM_INIT_AUTOMAKE([subdir-objects]) 42 43m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) 44 45dnl See versioning rule: 46dnl https://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html 47AC_SUBST(LT_CURRENT, 35) 48AC_SUBST(LT_REVISION, 1) 49AC_SUBST(LT_AGE, 21) 50 51major=`echo $PACKAGE_VERSION |cut -d. -f1 | sed -e "s/[^0-9]//g"` 52minor=`echo $PACKAGE_VERSION |cut -d. -f2 | sed -e "s/[^0-9]//g"` 53patch=`echo $PACKAGE_VERSION |cut -d. -f3 | cut -d- -f1 | sed -e "s/[^0-9]//g"` 54 55PACKAGE_VERSION_NUM=`printf "0x%02x%02x%02x" "$major" "$minor" "$patch"` 56 57AC_SUBST(PACKAGE_VERSION_NUM) 58 59dnl Checks for command-line options 60AC_ARG_ENABLE([werror], 61 [AS_HELP_STRING([--enable-werror], 62 [Turn on compile time warnings])], 63 [werror=$enableval], [werror=no]) 64 65AC_ARG_ENABLE([debug], 66 [AS_HELP_STRING([--enable-debug], 67 [Turn on debug output])], 68 [debug=$enableval], [debug=no]) 69 70AC_ARG_ENABLE([threads], 71 [AS_HELP_STRING([--disable-threads], 72 [Turn off threading in apps])], 73 [threads=$enableval], [threads=yes]) 74 75AC_ARG_ENABLE([app], 76 [AS_HELP_STRING([--enable-app], 77 [Build applications (nghttp, nghttpd, nghttpx and h2load) [default=check]])], 78 [request_app=$enableval], [request_app=check]) 79 80AC_ARG_ENABLE([hpack-tools], 81 [AS_HELP_STRING([--enable-hpack-tools], 82 [Build HPACK tools [default=check]])], 83 [request_hpack_tools=$enableval], [request_hpack_tools=check]) 84 85AC_ARG_ENABLE([asio-lib], 86 [AS_HELP_STRING([--enable-asio-lib], 87 [Build C++ libnghttp2_asio library [default=no]])], 88 [request_asio_lib=$enableval], [request_asio_lib=no]) 89 90AC_ARG_ENABLE([examples], 91 [AS_HELP_STRING([--enable-examples], 92 [Build examples [default=check]])], 93 [request_examples=$enableval], [request_examples=check]) 94 95AC_ARG_ENABLE([python-bindings], 96 [AS_HELP_STRING([--enable-python-bindings], 97 [Build Python bindings [default=check]])], 98 [request_python_bindings=$enableval], [request_python_bindings=check]) 99 100AC_ARG_ENABLE([failmalloc], 101 [AS_HELP_STRING([--disable-failmalloc], 102 [Do not build failmalloc test program])], 103 [request_failmalloc=$enableval], [request_failmalloc=yes]) 104 105AC_ARG_ENABLE([lib-only], 106 [AS_HELP_STRING([--enable-lib-only], 107 [Build libnghttp2 only. This is a short hand for --disable-app --disable-examples --disable-hpack-tools --disable-python-bindings])], 108 [request_lib_only=$enableval], [request_lib_only=no]) 109 110AC_ARG_ENABLE([http3], 111 [AS_HELP_STRING([--enable-http3], 112 [(EXPERIMENTAL) Enable HTTP/3. This requires ngtcp2, nghttp3, and a custom OpenSSL.])], 113 [request_http3=$enableval], [request_http3=no]) 114 115AC_ARG_WITH([libxml2], 116 [AS_HELP_STRING([--with-libxml2], 117 [Use libxml2 [default=check]])], 118 [request_libxml2=$withval], [request_libxml2=check]) 119 120AC_ARG_WITH([jansson], 121 [AS_HELP_STRING([--with-jansson], 122 [Use jansson [default=check]])], 123 [request_jansson=$withval], [request_jansson=check]) 124 125AC_ARG_WITH([zlib], 126 [AS_HELP_STRING([--with-zlib], 127 [Use zlib [default=check]])], 128 [request_zlib=$withval], [request_zlib=check]) 129 130AC_ARG_WITH([libevent-openssl], 131 [AS_HELP_STRING([--with-libevent-openssl], 132 [Use libevent_openssl [default=check]])], 133 [request_libevent_openssl=$withval], [request_libevent_openssl=check]) 134 135AC_ARG_WITH([libcares], 136 [AS_HELP_STRING([--with-libcares], 137 [Use libc-ares [default=check]])], 138 [request_libcares=$withval], [request_libcares=check]) 139 140AC_ARG_WITH([openssl], 141 [AS_HELP_STRING([--with-openssl], 142 [Use openssl [default=check]])], 143 [request_openssl=$withval], [request_openssl=check]) 144 145AC_ARG_WITH([libev], 146 [AS_HELP_STRING([--with-libev], 147 [Use libev [default=check]])], 148 [request_libev=$withval], [request_libev=check]) 149 150AC_ARG_WITH([cunit], 151 [AS_HELP_STRING([--with-cunit], 152 [Use cunit [default=check]])], 153 [request_cunit=$withval], [request_cunit=check]) 154 155AC_ARG_WITH([jemalloc], 156 [AS_HELP_STRING([--with-jemalloc], 157 [Use jemalloc [default=check]])], 158 [request_jemalloc=$withval], [request_jemalloc=check]) 159 160AC_ARG_WITH([systemd], 161 [AS_HELP_STRING([--with-systemd], 162 [Enable systemd support in nghttpx [default=check]])], 163 [request_systemd=$withval], [request_systemd=check]) 164 165AC_ARG_WITH([mruby], 166 [AS_HELP_STRING([--with-mruby], 167 [Use mruby [default=no]])], 168 [request_mruby=$withval], [request_mruby=no]) 169 170AC_ARG_WITH([neverbleed], 171 [AS_HELP_STRING([--with-neverbleed], 172 [Use neverbleed [default=no]])], 173 [request_neverbleed=$withval], [request_neverbleed=no]) 174 175AC_ARG_WITH([cython], 176 [AS_HELP_STRING([--with-cython=PATH], 177 [Use cython in given PATH])], 178 [cython_path=$withval], []) 179 180AC_ARG_WITH([libngtcp2], 181 [AS_HELP_STRING([--with-libngtcp2], 182 [Use libngtcp2 [default=check]])], 183 [request_libngtcp2=$withval], [request_libngtcp2=check]) 184 185AC_ARG_WITH([libnghttp3], 186 [AS_HELP_STRING([--with-libnghttp3], 187 [Use libnghttp3 [default=check]])], 188 [request_libnghttp3=$withval], [request_libnghttp3=check]) 189 190AC_ARG_WITH([libbpf], 191 [AS_HELP_STRING([--with-libbpf], 192 [Use libbpf [default=no]])], 193 [request_libbpf=$withval], [request_libbpf=no]) 194 195dnl Define variables 196AC_ARG_VAR([CYTHON], [the Cython executable]) 197 198AC_ARG_VAR([LIBEV_CFLAGS], [C compiler flags for libev, skipping any checks]) 199AC_ARG_VAR([LIBEV_LIBS], [linker flags for libev, skipping any checks]) 200 201AC_ARG_VAR([JEMALLOC_CFLAGS], 202 [C compiler flags for jemalloc, skipping any checks]) 203AC_ARG_VAR([JEMALLOC_LIBS], [linker flags for jemalloc, skipping any checks]) 204 205AC_ARG_VAR([LIBTOOL_LDFLAGS], 206 [libtool specific flags (e.g., -static-libtool-libs)]) 207 208AC_ARG_VAR([BPFCFLAGS], [C compiler flags for bpf program]) 209 210dnl Checks for programs 211AC_PROG_CC 212AC_PROG_CXX 213AC_PROG_CPP 214AC_PROG_INSTALL 215AC_PROG_LN_S 216AC_PROG_MAKE_SET 217AC_PROG_MKDIR_P 218 219PKG_PROG_PKG_CONFIG([0.20]) 220 221AM_PATH_PYTHON([3.8],, [:]) 222 223if test "x$request_python_bindings" = "xyes" && 224 test "x$PYTHON" = "x:"; then 225 AC_MSG_ERROR([python was requested (enable-python-bindings) but not found]) 226fi 227 228if [test "x$request_lib_only" = "xyes"]; then 229 request_app=no 230 request_hpack_tools=no 231 request_examples=no 232 request_python_bindings=no 233fi 234 235if test "x$request_python_bindings" != "xno" && 236 test "x$PYTHON" != "x:"; then 237 # version check is broken 238 AX_PYTHON_DEVEL() 239fi 240 241if test "x${cython_path}" = "x"; then 242 AC_CHECK_PROGS([CYTHON], [cython.py cython]) 243else 244 CYTHON=${cython_path} 245 AC_SUBST([CYTHON]) 246fi 247 248if test "x$GCC" = "xyes" -o "x$CC" = "xclang" ; then 249 AC_DEFINE([NGHTTP2_NORETURN], [__attribute__((noreturn))], [Hint to the compiler that a function never return]) 250else 251 AC_DEFINE([NGHTTP2_NORETURN], , [Hint to the compiler that a function never return]) 252fi 253 254save_CXXFLAGS="$CXXFLAGS" 255CXXFLAGS= 256 257AX_CXX_COMPILE_STDCXX([14], [noext], [optional]) 258 259CXX1XCXXFLAGS="$CXXFLAGS" 260CXXFLAGS="$save_CXXFLAGS" 261AC_SUBST([CXX1XCXXFLAGS]) 262 263AC_LANG_PUSH(C++) 264 265save_CXXFLAGS="$CXXFLAGS" 266CXXFLAGS="$CXXFLAGS $CXX1XCXXFLAGS" 267 268# Check that std::future is available. 269AC_MSG_CHECKING([whether std::future is available]) 270AC_COMPILE_IFELSE([AC_LANG_PROGRAM( 271[[ 272#include <vector> 273#include <future> 274]], 275[[ 276std::vector<std::future<int>> v; 277(void)v; 278]])], 279 [AC_DEFINE([HAVE_STD_FUTURE], [1], 280 [Define to 1 if you have the `std::future`.]) 281 have_std_future=yes 282 AC_MSG_RESULT([yes])], 283 [have_std_future=no 284 AC_MSG_RESULT([no])]) 285 286# Check that std::map::emplace is available for g++-4.7. 287AC_MSG_CHECKING([whether std::map::emplace is available]) 288AC_COMPILE_IFELSE([AC_LANG_PROGRAM( 289[[ 290#include <map> 291]], 292[[ 293std::map<int, int>().emplace(1, 2); 294]])], 295 [AC_DEFINE([HAVE_STD_MAP_EMPLACE], [1], 296 [Define to 1 if you have the `std::map::emplace`.]) 297 have_std_map_emplace=yes 298 AC_MSG_RESULT([yes])], 299 [have_std_map_emplace=no 300 AC_MSG_RESULT([no])]) 301 302# Check that std::atomic_* overloads for std::shared_ptr are 303# available. 304AC_MSG_CHECKING([whether std::atomic_* overloads for std::shared_ptr are available]) 305AC_COMPILE_IFELSE([AC_LANG_PROGRAM( 306[[ 307#include <memory> 308]], 309[[ 310auto a = std::make_shared<int>(1000000007); 311auto p = std::atomic_load(&a); 312++*p; 313std::atomic_store(&a, p); 314]])], 315 [AC_DEFINE([HAVE_ATOMIC_STD_SHARED_PTR], [1], 316 [Define to 1 if you have the std::atomic_* overloads for std::shared_ptr.]) 317 have_atomic_std_shared_ptr=yes 318 AC_MSG_RESULT([yes])], 319 [have_atomic_std_shared_ptr=no 320 AC_MSG_RESULT([no])]) 321 322# Check that thread_local storage specifier is available 323AC_MSG_CHECKING([whether thread_local storage class specifier is available.]) 324AC_COMPILE_IFELSE([AC_LANG_PROGRAM( 325, 326[[ 327thread_local int a = 0; 328(void)a; 329]])], 330 [AC_DEFINE([HAVE_THREAD_LOCAL], [1], 331 [Define to 1 if you have thread_local storage specifier.]) 332 have_thread_local=yes 333 AC_MSG_RESULT([yes])], 334 [have_Thread_local=no 335 AC_MSG_RESULT([no])]) 336 337CXXFLAGS=$save_CXXFLAGS 338 339AC_LANG_POP() 340 341# Checks for libraries. 342 343# Additional libraries required for tests. 344TESTLDADD= 345 346# Additional libraries required for programs under src directory. 347APPLDFLAGS= 348 349case "$host_os" in 350 *android*) 351 android_build=yes 352 # android does not need -pthread, but needs followng 3 libs for C++ 353 APPLDFLAGS="$APPLDFLAGS -lstdc++ -latomic -lsupc++" 354 ;; 355 *) 356 PTHREAD_LDFLAGS="-pthread" 357 APPLDFLAGS="$APPLDFLAGS $PTHREAD_LDFLAGS" 358 ;; 359esac 360 361case "$host_os" in 362 *solaris*) 363 APPLDFLAGS="$APPLDFLAGS -lsocket -lnsl" 364 ;; 365esac 366 367case "${build}" in 368 *-apple-darwin*) 369 EXTRA_DEFS="-D__APPLE_USE_RFC_3542" 370 AC_SUBST([EXTRA_DEFS]) 371 ;; 372esac 373 374# zlib 375have_zlib=no 376if test "x${request_zlib}" != "xno"; then 377 PKG_CHECK_MODULES([ZLIB], [zlib >= 1.2.3], [have_zlib=yes], [have_zlib=no]) 378 379 if test "x${have_zlib}" = "xno"; then 380 AC_MSG_NOTICE($ZLIB_PKG_ERRORS) 381 fi 382fi 383 384if test "x${request_zlib}" = "xyes" && 385 test "x${have_zlib}" != "xyes"; then 386 AC_MSG_ERROR([zlib was requested (--with-zlib) but not found]) 387fi 388 389# dl: openssl requires libdl when it is statically linked. 390case "${host_os}" in 391 *bsd*) 392 # dlopen is in libc on *BSD 393 ;; 394 *) 395 save_LIBS=$LIBS 396 AC_SEARCH_LIBS([dlopen], [dl], [APPLDFLAGS="-ldl $APPLDFLAGS"], [], []) 397 LIBS=$save_LIBS 398 ;; 399esac 400 401# cunit 402have_cunit=no 403if test "x${request_cunit}" != "xno"; then 404 PKG_CHECK_MODULES([CUNIT], [cunit >= 2.1], [have_cunit=yes], [have_cunit=no]) 405 # If pkg-config does not find cunit, check it using AC_CHECK_LIB. We 406 # do this because Debian (Ubuntu) lacks pkg-config file for cunit. 407 if test "x${have_cunit}" = "xno"; then 408 AC_MSG_WARN([${CUNIT_PKG_ERRORS}]) 409 AC_CHECK_LIB([cunit], [CU_initialize_registry], 410 [have_cunit=yes], [have_cunit=no]) 411 if test "x${have_cunit}" = "xyes"; then 412 CUNIT_LIBS="-lcunit" 413 CUNIT_CFLAGS="" 414 AC_SUBST([CUNIT_LIBS]) 415 AC_SUBST([CUNIT_CFLAGS]) 416 fi 417 fi 418 if test "x${have_cunit}" = "xyes"; then 419 # cunit in Mac OS X requires ncurses. Note that in Mac OS X, test 420 # program can be built without -lncurses, but it emits runtime 421 # error. 422 case "${build}" in 423 *-apple-darwin*) 424 CUNIT_LIBS="$CUNIT_LIBS -lncurses" 425 AC_SUBST([CUNIT_LIBS]) 426 ;; 427 esac 428 fi 429fi 430 431if test "x${request_cunit}" = "xyes" && 432 test "x${have_cunit}" != "xyes"; then 433 AC_MSG_ERROR([cunit was requested (--with-cunit) but not found]) 434fi 435 436AM_CONDITIONAL([HAVE_CUNIT], [ test "x${have_cunit}" = "xyes" ]) 437 438# libev (for src) 439have_libev=no 440if test "x${request_libev}" != "xno"; then 441 if test "x${LIBEV_LIBS}" = "x" && test "x${LIBEV_CFLAGS}" = "x"; then 442 # libev does not have pkg-config file. Check it in an old way. 443 save_LIBS=$LIBS 444 # android requires -lm for floor 445 AC_CHECK_LIB([ev], [ev_time], [have_libev=yes], [have_libev=no], [-lm]) 446 if test "x${have_libev}" = "xyes"; then 447 AC_CHECK_HEADER([ev.h], [have_libev=yes], [have_libev=no]) 448 if test "x${have_libev}" = "xyes"; then 449 LIBEV_LIBS=-lev 450 LIBEV_CFLAGS= 451 fi 452 fi 453 LIBS=$save_LIBS 454 else 455 have_libev=yes 456 fi 457fi 458 459if test "x${request_libev}" = "xyes" && 460 test "x${have_libev}" != "xyes"; then 461 AC_MSG_ERROR([libev was requested (--with-libev) but not found]) 462fi 463 464# openssl (for src) 465have_openssl=no 466if test "x${request_openssl}" != "xno"; then 467 PKG_CHECK_MODULES([OPENSSL], [openssl >= 1.0.1], 468 [have_openssl=yes], [have_openssl=no]) 469 if test "x${have_openssl}" = "xno"; then 470 AC_MSG_NOTICE($OPENSSL_PKG_ERRORS) 471 else 472 save_CFLAGS="$CFLAGS" 473 save_LIBS="$LIBS" 474 CFLAGS="$OPENSSL_CFLAGS $CFLAGS" 475 LIBS="$OPENSSL_LIBS $LIBS" 476 477 # quictls/openssl has SSL_is_quic. 478 have_ssl_is_quic=no 479 AC_MSG_CHECKING([for SSL_is_quic]) 480 AC_LINK_IFELSE([AC_LANG_PROGRAM([[ 481 #include <openssl/ssl.h> 482 ]], [[ 483 SSL *ssl = NULL; 484 SSL_is_quic(ssl); 485 ]])], 486 [AC_MSG_RESULT([yes]); have_ssl_is_quic=yes], 487 [AC_MSG_RESULT([no]); have_ssl_is_quic=no]) 488 489 # boringssl has SSL_set_quic_early_data_context. 490 AC_MSG_CHECKING([for SSL_set_quic_early_data_context]) 491 AC_LINK_IFELSE([AC_LANG_PROGRAM([[ 492 #include <openssl/ssl.h> 493 ]], [[ 494 SSL *ssl = NULL; 495 SSL_set_quic_early_data_context(ssl, NULL, 0); 496 ]])], 497 [AC_MSG_RESULT([yes]); have_boringssl_quic=yes], 498 [AC_MSG_RESULT([no]); have_boringssl_quic=no]) 499 500 CFLAGS="$save_CFLAGS" 501 LIBS="$save_LIBS" 502 fi 503fi 504 505if test "x${request_openssl}" = "xyes" && 506 test "x${have_openssl}" != "xyes"; then 507 AC_MSG_ERROR([openssl was requested (--with-openssl) but not found]) 508fi 509 510# c-ares (for src) 511have_libcares=no 512if test "x${request_libcares}" != "xno"; then 513 PKG_CHECK_MODULES([LIBCARES], [libcares >= 1.7.5], [have_libcares=yes], 514 [have_libcares=no]) 515 if test "x${have_libcares}" = "xno"; then 516 AC_MSG_NOTICE($LIBCARES_PKG_ERRORS) 517 fi 518fi 519 520if test "x${request_libcares}" = "xyes" && 521 test "x${have_libcares}" != "xyes"; then 522 AC_MSG_ERROR([libcares was requested (--with-libcares) but not found]) 523fi 524 525# ngtcp2 (for src) 526have_libngtcp2=no 527if test "x${request_libngtcp2}" != "xno"; then 528 PKG_CHECK_MODULES([LIBNGTCP2], [libngtcp2 >= 0.0.0], [have_libngtcp2=yes], 529 [have_libngtcp2=no]) 530 if test "x${have_libngtcp2}" = "xno"; then 531 AC_MSG_NOTICE($LIBNGTCP2_PKG_ERRORS) 532 fi 533fi 534 535if test "x${request_libngtcp2}" = "xyes" && 536 test "x${have_libngtcp2}" != "xyes"; then 537 AC_MSG_ERROR([libngtcp2 was requested (--with-libngtcp2) but not found]) 538fi 539 540# ngtcp2_crypto_openssl (for src) 541have_libngtcp2_crypto_openssl=no 542if test "x${have_ssl_is_quic}" = "xyes" && 543 test "x${request_libngtcp2}" != "xno"; then 544 PKG_CHECK_MODULES([LIBNGTCP2_CRYPTO_OPENSSL], 545 [libngtcp2_crypto_openssl >= 0.0.0], 546 [have_libngtcp2_crypto_openssl=yes], 547 [have_libngtcp2_crypto_openssl=no]) 548 if test "x${have_libngtcp2_crypto_openssl}" = "xno"; then 549 AC_MSG_NOTICE($LIBNGTCP2_CRYPTO_OPENSSL_PKG_ERRORS) 550 else 551 AC_DEFINE([HAVE_LIBNGTCP2_CRYPTO_OPENSSL], [1], 552 [Define to 1 if you have `libngtcp2_crypto_openssl` library.]) 553 fi 554fi 555 556if test "x${have_ssl_is_quic}" = "xyes" && 557 test "x${request_libngtcp2}" = "xyes" && 558 test "x${have_libngtcp2_crypto_openssl}" != "xyes"; then 559 AC_MSG_ERROR([libngtcp2_crypto_openssl was requested (--with-libngtcp2) but not found]) 560fi 561 562# ngtcp2_crypto_boringssl (for src) 563have_libngtcp2_crypto_boringssl=no 564if test "x${have_boringssl_quic}" = "xyes" && 565 test "x${request_libngtcp2}" != "xno"; then 566 PKG_CHECK_MODULES([LIBNGTCP2_CRYPTO_BORINGSSL], 567 [libngtcp2_crypto_boringssl >= 0.0.0], 568 [have_libngtcp2_crypto_boringssl=yes], 569 [have_libngtcp2_crypto_boringssl=no]) 570 if test "x${have_libngtcp2_crypto_boringssl}" = "xno"; then 571 AC_MSG_NOTICE($LIBNGTCP2_CRYPTO_BORINGSSL_PKG_ERRORS) 572 else 573 AC_DEFINE([HAVE_LIBNGTCP2_CRYPTO_BORINGSSL], [1], 574 [Define to 1 if you have `libngtcp2_crypto_boringssl` library.]) 575 fi 576fi 577 578if test "x${have_boringssl_quic}" = "xyes" && 579 test "x${request_libngtcp2}" = "xyes" && 580 test "x${have_libngtcp2_crypto_boringssl}" != "xyes"; then 581 AC_MSG_ERROR([libngtcp2_crypto_boringssl was requested (--with-libngtcp2) but not found]) 582fi 583 584# nghttp3 (for src) 585have_libnghttp3=no 586if test "x${request_libnghttp3}" != "xno"; then 587 PKG_CHECK_MODULES([LIBNGHTTP3], [libnghttp3 >= 0.0.0], [have_libnghttp3=yes], 588 [have_libnghttp3=no]) 589 if test "x${have_libnghttp3}" = "xno"; then 590 AC_MSG_NOTICE($LIBNGHTTP3_PKG_ERRORS) 591 fi 592fi 593 594if test "x${request_libnghttp3}" = "xyes" && 595 test "x${have_libnghttp3}" != "xyes"; then 596 AC_MSG_ERROR([libnghttp3 was requested (--with-libnghttp3) but not found]) 597fi 598 599# libbpf (for src) 600have_libbpf=no 601if test "x${request_libbpf}" != "xno"; then 602 PKG_CHECK_MODULES([LIBBPF], [libbpf >= 0.4.0], [have_libbpf=yes], 603 [have_libbpf=no]) 604 if test "x${have_libbpf}" = "xyes"; then 605 AC_DEFINE([HAVE_LIBBPF], [1], [Define to 1 if you have `libbpf` library.]) 606 if test "x${BPFCFLAGS}" = "x"; then 607 BPFCFLAGS="-Wall -O2 -g" 608 fi 609 # Add the include path for Debian 610 EXTRABPFCFLAGS="-I/usr/include/$host_cpu-$host_os" 611 AC_SUBST([EXTRABPFCFLAGS]) 612 613 AC_MSG_CHECKING([whether enum bpf_stats_type is defined in linux/bpf.h]) 614 AC_COMPILE_IFELSE([AC_LANG_PROGRAM( 615 [[ 616 #include <linux/bpf.h> 617 ]], 618 [[ 619 enum bpf_stats_type foo; 620 (void)foo; 621 ]])], 622 [have_bpf_stats_type=yes], 623 [have_bpf_stats_type=no]) 624 625 if test "x${have_bpf_stats_type}" = "xyes"; then 626 AC_MSG_RESULT([yes]) 627 AC_DEFINE([HAVE_BPF_STATS_TYPE], [1], 628 [Define to 1 if you have enum bpf_stats_type in linux/bpf.h.]) 629 else 630 AC_MSG_RESULT([no]) 631 fi 632 else 633 AC_MSG_NOTICE($LIBBPF_PKG_ERRORS) 634 fi 635fi 636 637if test "x${request_libbpf}" = "xyes" && 638 test "x${have_libbpf}" != "xyes"; then 639 AC_MSG_ERROR([libbpf was requested (--with-libbpf) but not found]) 640fi 641 642AM_CONDITIONAL([HAVE_LIBBPF], [ test "x${have_libbpf}" = "xyes" ]) 643 644# libevent_openssl (for examples) 645# 2.0.8 is required because we use evconnlistener_set_error_cb() 646have_libevent_openssl=no 647if test "x${request_libevent_openssl}" != "xno"; then 648 PKG_CHECK_MODULES([LIBEVENT_OPENSSL], [libevent_openssl >= 2.0.8], 649 [have_libevent_openssl=yes], [have_libevent_openssl=no]) 650 if test "x${have_libevent_openssl}" = "xno"; then 651 AC_MSG_NOTICE($LIBEVENT_OPENSSL_PKG_ERRORS) 652 fi 653fi 654 655if test "x${request_libevent_openssl}" = "xyes" && 656 test "x${have_libevent_openssl}" != "xyes"; then 657 AC_MSG_ERROR([libevent_openssl was requested (--with-libevent) but not found]) 658fi 659 660# jansson (for src/nghttp, src/deflatehd and src/inflatehd) 661have_jansson=no 662if test "x${request_jansson}" != "xno"; then 663 PKG_CHECK_MODULES([JANSSON], [jansson >= 2.5], 664 [have_jansson=yes], [have_jansson=no]) 665 if test "x${have_jansson}" = "xyes"; then 666 AC_DEFINE([HAVE_JANSSON], [1], 667 [Define to 1 if you have `libjansson` library.]) 668 else 669 AC_MSG_NOTICE($JANSSON_PKG_ERRORS) 670 fi 671fi 672 673if test "x${request_jansson}" = "xyes" && 674 test "x${have_jansson}" != "xyes"; then 675 AC_MSG_ERROR([jansson was requested (--with-jansson) but not found]) 676fi 677 678# libsystemd (for src/nghttpx) 679have_libsystemd=no 680if test "x${request_systemd}" != "xno"; then 681 PKG_CHECK_MODULES([SYSTEMD], [libsystemd >= 209], [have_libsystemd=yes], 682 [have_libsystemd=no]) 683 if test "x${have_libsystemd}" = "xyes"; then 684 AC_DEFINE([HAVE_LIBSYSTEMD], [1], 685 [Define to 1 if you have `libsystemd` library.]) 686 else 687 AC_MSG_NOTICE($SYSTEMD_PKG_ERRORS) 688 fi 689fi 690 691if test "x${request_systemd}" = "xyes" && 692 test "x${have_libsystemd}" != "xyes"; then 693 AC_MSG_ERROR([systemd was requested (--with-systemd) but not found]) 694fi 695 696# libxml2 (for src/nghttp) 697have_libxml2=no 698if test "x${request_libxml2}" != "xno"; then 699 PKG_CHECK_MODULES([LIBXML2], [libxml-2.0 >= 2.6.26], 700 [have_libxml2=yes], [have_libxml2=no]) 701 if test "x${have_libxml2}" = "xyes"; then 702 AC_DEFINE([HAVE_LIBXML2], [1], [Define to 1 if you have `libxml2` library.]) 703 else 704 AC_MSG_NOTICE($LIBXML2_PKG_ERRORS) 705 fi 706fi 707 708if test "x${request_libxml2}" = "xyes" && 709 test "x${have_libxml2}" != "xyes"; then 710 AC_MSG_ERROR([libxml2 was requested (--with-libxml2) but not found]) 711fi 712 713AM_CONDITIONAL([HAVE_LIBXML2], [ test "x${have_libxml2}" = "xyes" ]) 714 715# jemalloc 716have_jemalloc=no 717if test "x${request_jemalloc}" != "xno"; then 718 if test "x${JEMALLOC_LIBS}" = "x" && test "x${JEMALLOC_CFLAGS}" = "x"; then 719 save_LIBS=$LIBS 720 AC_SEARCH_LIBS([malloc_stats_print], [jemalloc], [have_jemalloc=yes], [], 721 [$PTHREAD_LDFLAGS]) 722 723 if test "x${have_jemalloc}" = "xyes"; then 724 jemalloc_libs=${ac_cv_search_malloc_stats_print} 725 else 726 # On Darwin, malloc_stats_print is je_malloc_stats_print 727 AC_SEARCH_LIBS([je_malloc_stats_print], [jemalloc], [have_jemalloc=yes], [], 728 [$PTHREAD_LDFLAGS]) 729 730 if test "x${have_jemalloc}" = "xyes"; then 731 jemalloc_libs=${ac_cv_search_je_malloc_stats_print} 732 fi 733 fi 734 735 LIBS=$save_LIBS 736 737 if test "x${have_jemalloc}" = "xyes" && 738 test "x${jemalloc_libs}" != "xnone required"; then 739 JEMALLOC_LIBS=${jemalloc_libs} 740 fi 741 else 742 have_jemalloc=yes 743 fi 744fi 745 746if test "x${request_jemalloc}" = "xyes" && 747 test "x${have_jemalloc}" != "xyes"; then 748 AC_MSG_ERROR([jemalloc was requested (--with-jemalloc) but not found]) 749fi 750 751# Check Boost Asio library 752have_asio_lib=no 753 754if test "x${request_asio_lib}" = "xyes"; then 755 AX_BOOST_BASE([1.54.0], [have_boost_base=yes], [have_boost_base=no]) 756 757 if test "x${have_boost_base}" = "xyes"; then 758 AX_BOOST_ASIO() 759 AX_BOOST_SYSTEM() 760 AX_BOOST_THREAD() 761 762 if test "x${ax_cv_boost_asio}" = "xyes" && 763 test "x${ax_cv_boost_system}" = "xyes" && 764 test "x${ax_cv_boost_thread}" = "xyes"; then 765 have_asio_lib=yes 766 fi 767 fi 768fi 769 770# The nghttp, nghttpd and nghttpx under src depend on zlib, OpenSSL, 771# libev, and libc-ares. 772enable_app=no 773if test "x${request_app}" != "xno" && 774 test "x${have_zlib}" = "xyes" && 775 test "x${have_openssl}" = "xyes" && 776 test "x${have_libev}" = "xyes" && 777 test "x${have_libcares}" = "xyes"; then 778 enable_app=yes 779fi 780 781if test "x${request_app}" = "xyes" && 782 test "x${enable_app}" != "xyes"; then 783 AC_MSG_ERROR([applications were requested (--enable-app) but dependencies are not met.]) 784fi 785 786AM_CONDITIONAL([ENABLE_APP], [ test "x${enable_app}" = "xyes" ]) 787 788# Check HTTP/3 support 789enable_http3=no 790if test "x${request_http3}" != "xno" && 791 (test "x${have_ssl_is_quic}" = "xyes" || 792 test "x${have_boringssl_quic}" = "xyes") && 793 test "x${have_libngtcp2}" = "xyes" && 794 (test "x${have_libngtcp2_crypto_openssl}" = "xyes" || 795 test "x${have_libngtcp2_crypto_boringssl}" = "xyes") && 796 test "x${have_libnghttp3}" = "xyes"; then 797 enable_http3=yes 798 AC_DEFINE([ENABLE_HTTP3], [1], [Define to 1 if HTTP/3 is enabled.]) 799fi 800 801if test "x${request_http3}" = "xyes" && 802 test "x${enable_http3}" != "xyes"; then 803 AC_MSG_ERROR([HTTP/3 was requested (--enable-http3) but dependencies are not met.]) 804fi 805 806AM_CONDITIONAL([ENABLE_HTTP3], [ test "x${enable_http3}" = "xyes" ]) 807 808enable_hpack_tools=no 809# HPACK tools requires jansson 810if test "x${request_hpack_tools}" != "xno" && 811 test "x${have_jansson}" = "xyes"; then 812 enable_hpack_tools=yes 813fi 814 815if test "x${request_hpack_tools}" = "xyes" && 816 test "x${enable_hpack_tools}" != "xyes"; then 817 AC_MSG_ERROR([HPACK tools were requested (--enable-hpack-tools) but dependencies are not met.]) 818fi 819 820AM_CONDITIONAL([ENABLE_HPACK_TOOLS], [ test "x${enable_hpack_tools}" = "xyes" ]) 821 822# C++ library libnghttp2_asio 823 824enable_asio_lib=no 825if test "x${request_asio_lib}" != "xno" && 826 test "x${have_asio_lib}" = "xyes"; then 827 enable_asio_lib=yes 828fi 829 830AM_CONDITIONAL([ENABLE_ASIO_LIB], [ test "x${enable_asio_lib}" = "xyes" ]) 831 832# The example programs depend on OpenSSL and libevent_openssl 833enable_examples=no 834if test "x${request_examples}" != "xno" && 835 test "x${have_openssl}" = "xyes" && 836 test "x${have_libevent_openssl}" = "xyes"; then 837 enable_examples=yes 838fi 839 840if test "x${request_examples}" = "xyes" && 841 test "x${enable_examples}" != "xyes"; then 842 AC_MSG_ERROR([examples were requested (--enable-examples) but dependencies are not met.]) 843fi 844 845AM_CONDITIONAL([ENABLE_EXAMPLES], [ test "x${enable_examples}" = "xyes" ]) 846 847# third-party only be built when needed 848 849enable_third_party=no 850have_mruby=no 851have_neverbleed=no 852if test "x${enable_examples}" = "xyes" || 853 test "x${enable_app}" = "xyes" || 854 test "x${enable_hpack_tools}" = "xyes" || 855 test "x${enable_asio_lib}" = "xyes"; then 856 enable_third_party=yes 857 858 # mruby (for src/nghttpx) 859 if test "x${request_mruby}" = "xyes"; then 860 # We are going to build mruby 861 have_mruby=yes 862 AC_DEFINE([HAVE_MRUBY], [1], [Define to 1 if you have `mruby` library.]) 863 LIBMRUBY_LIBS="-lmruby -lm" 864 LIBMRUBY_CFLAGS= 865 AC_SUBST([LIBMRUBY_LIBS]) 866 AC_SUBST([LIBMRUBY_CFLAGS]) 867 fi 868 869 # neverbleed (for src/nghttpx) 870 if test "x${request_neverbleed}" = "xyes"; then 871 have_neverbleed=yes 872 AC_DEFINE([HAVE_NEVERBLEED], [1], [Define to 1 if you have `neverbleed` library.]) 873 fi 874fi 875 876AM_CONDITIONAL([ENABLE_THIRD_PARTY], [ test "x${enable_third_party}" = "xyes" ]) 877AM_CONDITIONAL([HAVE_MRUBY], [test "x${have_mruby}" = "xyes"]) 878AM_CONDITIONAL([HAVE_NEVERBLEED], [test "x${have_neverbleed}" = "xyes"]) 879 880# Python bindings 881enable_python_bindings=no 882if test "x${request_python_bindings}" != "xno" && 883 test "x${CYTHON}" != "x" && 884 test "x${PYTHON}" != "x:" && 885 test "x${PYTHON_VERSION}" != "x"; then 886 enable_python_bindings=yes 887fi 888 889if test "x${request_python_bindings}" = "xyes" && 890 test "x${enable_python_bindings}" != "xyes"; then 891 AC_MSG_ERROR([python bindings were requested (--enable-python-bindings) but dependencies are not met.]) 892fi 893 894AM_CONDITIONAL([ENABLE_PYTHON_BINDINGS], 895 [test "x${enable_python_bindings}" = "xyes"]) 896 897# Produce cython conditional, so that we can distribute generated C 898# source 899AM_CONDITIONAL([HAVE_CYTHON], [test "x${CYTHON}" != "x"]) 900 901# failmalloc tests 902enable_failmalloc=no 903if test "x${request_failmalloc}" = "xyes"; then 904 enable_failmalloc=yes 905fi 906 907AM_CONDITIONAL([ENABLE_FAILMALLOC], [ test "x${enable_failmalloc}" = "xyes" ]) 908 909# Checks for header files. 910AC_HEADER_ASSERT 911AC_CHECK_HEADERS([ \ 912 arpa/inet.h \ 913 fcntl.h \ 914 inttypes.h \ 915 limits.h \ 916 netdb.h \ 917 netinet/in.h \ 918 pwd.h \ 919 stddef.h \ 920 stdint.h \ 921 stdlib.h \ 922 string.h \ 923 sys/socket.h \ 924 sys/time.h \ 925 syslog.h \ 926 time.h \ 927 unistd.h \ 928]) 929 930# Checks for typedefs, structures, and compiler characteristics. 931AC_TYPE_SIZE_T 932AC_TYPE_SSIZE_T 933AC_TYPE_UINT8_T 934AC_TYPE_UINT16_T 935AC_TYPE_UINT32_T 936AC_TYPE_UINT64_T 937AC_TYPE_INT8_T 938AC_TYPE_INT16_T 939AC_TYPE_INT32_T 940AC_TYPE_INT64_T 941AC_TYPE_OFF_T 942AC_TYPE_PID_T 943AC_TYPE_UID_T 944AC_CHECK_TYPES([ptrdiff_t]) 945AC_C_BIGENDIAN 946AC_C_INLINE 947AC_SYS_LARGEFILE 948 949AC_CHECK_MEMBER([struct tm.tm_gmtoff], [have_struct_tm_tm_gmtoff=yes], 950 [have_struct_tm_tm_gmtoff=no], [[#include <time.h>]]) 951 952AC_CHECK_MEMBER([struct sockaddr_in.sin_len], 953 [AC_DEFINE([HAVE_SOCKADDR_IN_SIN_LEN],[1], 954 [Define to 1 if struct sockaddr_in has sin_len member.])], 955 [], 956 [[ 957#include <sys/types.h> 958#include <sys/socket.h> 959#include <netinet/in.h> 960]]) 961 962AC_CHECK_MEMBER([struct sockaddr_in6.sin6_len], 963 [AC_DEFINE([HAVE_SOCKADDR_IN6_SIN6_LEN],[1], 964 [Define to 1 if struct sockaddr_in6 has sin6_len member.])], 965 [], 966 [[ 967#include <sys/types.h> 968#include <sys/socket.h> 969#include <netinet/in.h> 970]]) 971 972if test "x$have_struct_tm_tm_gmtoff" = "xyes"; then 973 AC_DEFINE([HAVE_STRUCT_TM_TM_GMTOFF], [1], 974 [Define to 1 if you have `struct tm.tm_gmtoff` member.]) 975fi 976 977# Check size of pointer to decide we need 8 bytes alignment 978# adjustment. 979AC_CHECK_SIZEOF([int *]) 980 981AC_CHECK_SIZEOF([time_t]) 982 983# Checks for library functions. 984 985# Don't check malloc, since it does not play nicely with C++ stdlib 986# AC_FUNC_MALLOC 987 988AC_FUNC_CHOWN 989AC_FUNC_ERROR_AT_LINE 990AC_FUNC_FORK 991# Don't check realloc, since LeakSanitizer detects memory leak during check 992# AC_FUNC_REALLOC 993AC_FUNC_STRERROR_R 994AC_FUNC_STRNLEN 995 996AC_CHECK_FUNCS([ \ 997 _Exit \ 998 accept4 \ 999 dup2 \ 1000 getcwd \ 1001 getpwnam \ 1002 localtime_r \ 1003 memchr \ 1004 memmove \ 1005 memset \ 1006 mkostemp \ 1007 socket \ 1008 sqrt \ 1009 strchr \ 1010 strdup \ 1011 strerror \ 1012 strndup \ 1013 strstr \ 1014 strtol \ 1015 strtoul \ 1016 timegm \ 1017]) 1018 1019# timerfd_create was added in linux kernel 2.6.25 1020 1021AC_CHECK_FUNC([timerfd_create], 1022 [have_timerfd_create=yes], [have_timerfd_create=no]) 1023 1024# For cygwin: we can link initgroups, so AC_CHECK_FUNCS succeeds, but 1025# cygwin disables initgroups due to feature test macro magic with our 1026# configuration. FreeBSD declares initgroups() in unistd.h. 1027AC_CHECK_DECLS([initgroups], [], [], [[ 1028 #ifdef HAVE_UNISTD_H 1029 # include <unistd.h> 1030 #endif 1031 #include <grp.h> 1032]]) 1033 1034save_CFLAGS=$CFLAGS 1035save_CXXFLAGS=$CXXFLAGS 1036 1037CFLAGS= 1038CXXFLAGS= 1039 1040if test "x$werror" != "xno"; then 1041 # For C compiler 1042 AX_CHECK_COMPILE_FLAG([-Wall], [CFLAGS="$CFLAGS -Wall"]) 1043 AX_CHECK_COMPILE_FLAG([-Wextra], [CFLAGS="$CFLAGS -Wextra"]) 1044 AX_CHECK_COMPILE_FLAG([-Werror], [CFLAGS="$CFLAGS -Werror"]) 1045 AX_CHECK_COMPILE_FLAG([-Wmissing-prototypes], [CFLAGS="$CFLAGS -Wmissing-prototypes"]) 1046 AX_CHECK_COMPILE_FLAG([-Wstrict-prototypes], [CFLAGS="$CFLAGS -Wstrict-prototypes"]) 1047 AX_CHECK_COMPILE_FLAG([-Wmissing-declarations], [CFLAGS="$CFLAGS -Wmissing-declarations"]) 1048 AX_CHECK_COMPILE_FLAG([-Wpointer-arith], [CFLAGS="$CFLAGS -Wpointer-arith"]) 1049 AX_CHECK_COMPILE_FLAG([-Wdeclaration-after-statement], [CFLAGS="$CFLAGS -Wdeclaration-after-statement"]) 1050 AX_CHECK_COMPILE_FLAG([-Wformat-security], [CFLAGS="$CFLAGS -Wformat-security"]) 1051 AX_CHECK_COMPILE_FLAG([-Wwrite-strings], [CFLAGS="$CFLAGS -Wwrite-strings"]) 1052 AX_CHECK_COMPILE_FLAG([-Wshadow], [CFLAGS="$CFLAGS -Wshadow"]) 1053 AX_CHECK_COMPILE_FLAG([-Winline], [CFLAGS="$CFLAGS -Winline"]) 1054 AX_CHECK_COMPILE_FLAG([-Wnested-externs], [CFLAGS="$CFLAGS -Wnested-externs"]) 1055 AX_CHECK_COMPILE_FLAG([-Wfloat-equal], [CFLAGS="$CFLAGS -Wfloat-equal"]) 1056 AX_CHECK_COMPILE_FLAG([-Wundef], [CFLAGS="$CFLAGS -Wundef"]) 1057 AX_CHECK_COMPILE_FLAG([-Wendif-labels], [CFLAGS="$CFLAGS -Wendif-labels"]) 1058 AX_CHECK_COMPILE_FLAG([-Wempty-body], [CFLAGS="$CFLAGS -Wempty-body"]) 1059 AX_CHECK_COMPILE_FLAG([-Wcast-align], [CFLAGS="$CFLAGS -Wcast-align"]) 1060 AX_CHECK_COMPILE_FLAG([-Wclobbered], [CFLAGS="$CFLAGS -Wclobbered"]) 1061 AX_CHECK_COMPILE_FLAG([-Wvla], [CFLAGS="$CFLAGS -Wvla"]) 1062 AX_CHECK_COMPILE_FLAG([-Wpragmas], [CFLAGS="$CFLAGS -Wpragmas"]) 1063 AX_CHECK_COMPILE_FLAG([-Wunreachable-code], [CFLAGS="$CFLAGS -Wunreachable-code"]) 1064 AX_CHECK_COMPILE_FLAG([-Waddress], [CFLAGS="$CFLAGS -Waddress"]) 1065 AX_CHECK_COMPILE_FLAG([-Wattributes], [CFLAGS="$CFLAGS -Wattributes"]) 1066 AX_CHECK_COMPILE_FLAG([-Wdiv-by-zero], [CFLAGS="$CFLAGS -Wdiv-by-zero"]) 1067 AX_CHECK_COMPILE_FLAG([-Wshorten-64-to-32], [CFLAGS="$CFLAGS -Wshorten-64-to-32"]) 1068 1069 AX_CHECK_COMPILE_FLAG([-Wconversion], [CFLAGS="$CFLAGS -Wconversion"]) 1070 AX_CHECK_COMPILE_FLAG([-Wextended-offsetof], [CFLAGS="$CFLAGS -Wextended-offsetof"]) 1071 AX_CHECK_COMPILE_FLAG([-Wformat-nonliteral], [CFLAGS="$CFLAGS -Wformat-nonliteral"]) 1072 AX_CHECK_COMPILE_FLAG([-Wlanguage-extension-token], [CFLAGS="$CFLAGS -Wlanguage-extension-token"]) 1073 AX_CHECK_COMPILE_FLAG([-Wmissing-field-initializers], [CFLAGS="$CFLAGS -Wmissing-field-initializers"]) 1074 AX_CHECK_COMPILE_FLAG([-Wmissing-noreturn], [CFLAGS="$CFLAGS -Wmissing-noreturn"]) 1075 AX_CHECK_COMPILE_FLAG([-Wmissing-variable-declarations], [CFLAGS="$CFLAGS -Wmissing-variable-declarations"]) 1076 # Not used because we cannot change public structs 1077 # AX_CHECK_COMPILE_FLAG([-Wpadded], [CFLAGS="$CFLAGS -Wpadded"]) 1078 AX_CHECK_COMPILE_FLAG([-Wsign-conversion], [CFLAGS="$CFLAGS -Wsign-conversion"]) 1079 # Not used because this basically disallows default case 1080 # AX_CHECK_COMPILE_FLAG([-Wswitch-enum], [CFLAGS="$CFLAGS -Wswitch-enum"]) 1081 AX_CHECK_COMPILE_FLAG([-Wunreachable-code-break], [CFLAGS="$CFLAGS -Wunreachable-code-break"]) 1082 AX_CHECK_COMPILE_FLAG([-Wunused-macros], [CFLAGS="$CFLAGS -Wunused-macros"]) 1083 AX_CHECK_COMPILE_FLAG([-Wunused-parameter], [CFLAGS="$CFLAGS -Wunused-parameter"]) 1084 AX_CHECK_COMPILE_FLAG([-Wredundant-decls], [CFLAGS="$CFLAGS -Wredundant-decls"]) 1085 # Only work with Clang for the moment 1086 AX_CHECK_COMPILE_FLAG([-Wheader-guard], [CFLAGS="$CFLAGS -Wheader-guard"]) 1087 AX_CHECK_COMPILE_FLAG([-Wsometimes-uninitialized], [CFLAGS="$CFLAGS -Wsometimes-uninitialized"]) 1088 1089 # This is required because we pass format string as "const char*. 1090 AX_CHECK_COMPILE_FLAG([-Wno-format-nonliteral], [CFLAGS="$CFLAGS -Wno-format-nonliteral"]) 1091 1092 # For C++ compiler 1093 AC_LANG_PUSH(C++) 1094 AX_CHECK_COMPILE_FLAG([-Wall], [CXXFLAGS="$CXXFLAGS -Wall"]) 1095 AX_CHECK_COMPILE_FLAG([-Werror], [CXXFLAGS="$CXXFLAGS -Werror"]) 1096 AX_CHECK_COMPILE_FLAG([-Wformat-security], [CXXFLAGS="$CXXFLAGS -Wformat-security"]) 1097 AX_CHECK_COMPILE_FLAG([-Wsometimes-uninitialized], [CXXFLAGS="$CXXFLAGS -Wsometimes-uninitialized"]) 1098 # Disable noexcept-type warning of g++-7. This is not harmful as 1099 # long as all source files are compiled with the same compiler. 1100 AX_CHECK_COMPILE_FLAG([-Wno-noexcept-type], [CXXFLAGS="$CXXFLAGS -Wno-noexcept-type"]) 1101 AC_LANG_POP() 1102fi 1103 1104WARNCFLAGS=$CFLAGS 1105WARNCXXFLAGS=$CXXFLAGS 1106 1107CFLAGS=$save_CFLAGS 1108CXXFLAGS=$save_CXXFLAGS 1109 1110AC_SUBST([WARNCFLAGS]) 1111AC_SUBST([WARNCXXFLAGS]) 1112 1113EXTRACFLAG= 1114AX_CHECK_COMPILE_FLAG([-fvisibility=hidden], [EXTRACFLAG="-fvisibility=hidden"]) 1115 1116AC_SUBST([EXTRACFLAG]) 1117 1118if test "x$debug" != "xno"; then 1119 AC_DEFINE([DEBUGBUILD], [1], [Define to 1 to enable debug output.]) 1120fi 1121 1122enable_threads=yes 1123# Some platform does not have working std::future. We disable 1124# threading for those platforms. 1125if test "x$threads" != "xyes" || 1126 test "x$have_std_future" != "xyes"; then 1127 enable_threads=no 1128 AC_DEFINE([NOTHREADS], [1], [Define to 1 if you want to disable threads.]) 1129fi 1130 1131# propagate $enable_static to tests/Makefile.am 1132AM_CONDITIONAL([ENABLE_STATIC], [test "x$enable_static" = "xyes"]) 1133 1134AC_SUBST([TESTLDADD]) 1135AC_SUBST([APPLDFLAGS]) 1136 1137AC_CONFIG_FILES([ 1138 Makefile 1139 lib/Makefile 1140 lib/libnghttp2.pc 1141 lib/includes/Makefile 1142 lib/includes/nghttp2/nghttp2ver.h 1143 tests/Makefile 1144 tests/testdata/Makefile 1145 third-party/Makefile 1146 src/Makefile 1147 src/includes/Makefile 1148 src/libnghttp2_asio.pc 1149 bpf/Makefile 1150 examples/Makefile 1151 python/Makefile 1152 python/setup.py 1153 integration-tests/Makefile 1154 integration-tests/config.go 1155 integration-tests/setenv 1156 doc/Makefile 1157 doc/conf.py 1158 doc/index.rst 1159 doc/package_README.rst 1160 doc/tutorial-client.rst 1161 doc/tutorial-server.rst 1162 doc/tutorial-hpack.rst 1163 doc/nghttpx-howto.rst 1164 doc/h2load-howto.rst 1165 doc/libnghttp2_asio.rst 1166 doc/python-apiref.rst 1167 doc/building-android-binary.rst 1168 doc/nghttp2.h.rst 1169 doc/nghttp2ver.h.rst 1170 doc/asio_http2.h.rst 1171 doc/asio_http2_server.h.rst 1172 doc/asio_http2_client.h.rst 1173 doc/contribute.rst 1174 contrib/Makefile 1175 script/Makefile 1176]) 1177AC_OUTPUT 1178 1179AC_MSG_NOTICE([summary of build options: 1180 1181 Package version: ${VERSION} 1182 Library version: $LT_CURRENT:$LT_REVISION:$LT_AGE 1183 Install prefix: ${prefix} 1184 System types: 1185 Build: ${build} 1186 Host: ${host} 1187 Target: ${target} 1188 Compiler: 1189 C compiler: ${CC} 1190 CFLAGS: ${CFLAGS} 1191 LDFLAGS: ${LDFLAGS} 1192 C++ compiler: ${CXX} 1193 CXXFLAGS: ${CXXFLAGS} 1194 CXXCPP: ${CXXCPP} 1195 C preprocessor: ${CPP} 1196 CPPFLAGS: ${CPPFLAGS} 1197 WARNCFLAGS: ${WARNCFLAGS} 1198 WARNCXXFLAGS: ${WARNCXXFLAGS} 1199 CXX1XCXXFLAGS: ${CXX1XCXXFLAGS} 1200 EXTRACFLAG: ${EXTRACFLAG} 1201 BPFCFLAGS: ${BPFCFLAGS} 1202 EXTRABPFCFLAGS: ${EXTRABPFCFLAGS} 1203 LIBS: ${LIBS} 1204 DEFS: ${DEFS} 1205 EXTRA_DEFS: ${EXTRA_DEFS} 1206 Library: 1207 Shared: ${enable_shared} 1208 Static: ${enable_static} 1209 Libtool: 1210 LIBTOOL_LDFLAGS: ${LIBTOOL_LDFLAGS} 1211 Python: 1212 Python: ${PYTHON} 1213 PYTHON_VERSION: ${PYTHON_VERSION} 1214 pyexecdir: ${pyexecdir} 1215 PYTHON_CPPFLAGS:${PYTHON_CPPFLAGS} 1216 PYTHON_LIBS: ${PYTHON_LIBS} 1217 Cython: ${CYTHON} 1218 Test: 1219 CUnit: ${have_cunit} (CFLAGS='${CUNIT_CFLAGS}' LIBS='${CUNIT_LIBS}') 1220 Failmalloc: ${enable_failmalloc} 1221 Libs: 1222 OpenSSL: ${have_openssl} (CFLAGS='${OPENSSL_CFLAGS}' LIBS='${OPENSSL_LIBS}') 1223 Libxml2: ${have_libxml2} (CFLAGS='${LIBXML2_CFLAGS}' LIBS='${LIBXML2_LIBS}') 1224 Libev: ${have_libev} (CFLAGS='${LIBEV_CFLAGS}' LIBS='${LIBEV_LIBS}') 1225 Libc-ares: ${have_libcares} (CFLAGS='${LIBCARES_CFLAGS}' LIBS='${LIBCARES_LIBS}') 1226 libngtcp2: ${have_libngtcp2} (CFLAGS='${LIBNGTCP2_CFLAGS}' LIBS='${LIBNGTCP2_LIBS}') 1227 libngtcp2_crypto_openssl: ${have_libngtcp2_crypto_openssl} (CFLAGS='${LIBNGTCP2_CRYPTO_OPENSSL_CFLAGS}' LIBS='${LIBNGTCP2_CRYPTO_OPENSSL_LIBS}') 1228 libngtcp2_crypto_boringssl: ${have_libngtcp2_crypto_boringssl} (CFLAGS='${LIBNGTCP2_CRYPTO_BORINGSSL_CFLAGS}' LIBS='${LIBNGTCP2_CRYPTO_BORINGSSL_LIBS}') 1229 libnghttp3: ${have_libnghttp3} (CFLAGS='${LIBNGHTTP3_CFLAGS}' LIBS='${LIBNGHTTP3_LIBS}') 1230 libbpf: ${have_libbpf} (CFLAGS='${LIBBPF_CFLAGS}' LIBS='${LIBBPF_LIBS}') 1231 Libevent(SSL): ${have_libevent_openssl} (CFLAGS='${LIBEVENT_OPENSSL_CFLAGS}' LIBS='${LIBEVENT_OPENSSL_LIBS}') 1232 Jansson: ${have_jansson} (CFLAGS='${JANSSON_CFLAGS}' LIBS='${JANSSON_LIBS}') 1233 Jemalloc: ${have_jemalloc} (CFLAGS='${JEMALLOC_CFLAGS}' LIBS='${JEMALLOC_LIBS}') 1234 Zlib: ${have_zlib} (CFLAGS='${ZLIB_CFLAGS}' LIBS='${ZLIB_LIBS}') 1235 Systemd: ${have_libsystemd} (CFLAGS='${SYSTEMD_CFLAGS}' LIBS='${SYSTEMD_LIBS}') 1236 Boost CPPFLAGS: ${BOOST_CPPFLAGS} 1237 Boost LDFLAGS: ${BOOST_LDFLAGS} 1238 Boost::ASIO: ${BOOST_ASIO_LIB} 1239 Boost::System: ${BOOST_SYSTEM_LIB} 1240 Boost::Thread: ${BOOST_THREAD_LIB} 1241 Third-party: 1242 http-parser: ${enable_third_party} 1243 MRuby: ${have_mruby} (CFLAGS='${LIBMRUBY_CFLAGS}' LIBS='${LIBMRUBY_LIBS}') 1244 Neverbleed: ${have_neverbleed} 1245 Features: 1246 Applications: ${enable_app} 1247 HPACK tools: ${enable_hpack_tools} 1248 Libnghttp2_asio:${enable_asio_lib} 1249 Examples: ${enable_examples} 1250 Python bindings:${enable_python_bindings} 1251 Threading: ${enable_threads} 1252 HTTP/3 (EXPERIMENTAL): ${enable_http3} 1253]) 1254