1# nghttp2 - HTTP/2 C Library 2# 3# Copyright (c) 2012, 2013, 2014, 2015 Tatsuhiro Tsujikawa 4# Copyright (c) 2016 Peter Wu <peter@lekensteyn.nl> 5# 6# Permission is hereby granted, free of charge, to any person obtaining 7# a copy of this software and associated documentation files (the 8# "Software"), to deal in the Software without restriction, including 9# without limitation the rights to use, copy, modify, merge, publish, 10# distribute, sublicense, and/or sell copies of the Software, and to 11# permit persons to whom the Software is furnished to do so, subject to 12# the following conditions: 13# 14# The above copyright notice and this permission notice shall be 15# included in all copies or substantial portions of the Software. 16# 17# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 18# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 19# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 20# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 21# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 22# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 23# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 24 25cmake_minimum_required(VERSION 3.0) 26# XXX using 1.8.90 instead of 1.9.0-DEV 27project(nghttp2 VERSION 1.55.0) 28 29# See versioning rule: 30# https://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html 31set(LT_CURRENT 38) 32set(LT_REVISION 2) 33set(LT_AGE 24) 34 35set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH}) 36include(Version) 37 38math(EXPR LT_SOVERSION "${LT_CURRENT} - ${LT_AGE}") 39set(LT_VERSION "${LT_SOVERSION}.${LT_AGE}.${LT_REVISION}") 40set(PACKAGE_VERSION "${PROJECT_VERSION}") 41HexVersion(PACKAGE_VERSION_NUM ${PROJECT_VERSION_MAJOR} ${PROJECT_VERSION_MINOR} ${PROJECT_VERSION_PATCH}) 42 43if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) 44 set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Choose the build type" FORCE) 45 46 # Include "None" as option to disable any additional (optimization) flags, 47 # relying on just CMAKE_C_FLAGS and CMAKE_CXX_FLAGS (which are empty by 48 # default). These strings are presented in cmake-gui. 49 set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS 50 "None" "Debug" "Release" "MinSizeRel" "RelWithDebInfo") 51endif() 52 53include(GNUInstallDirs) 54 55# For documentation 56find_package(Python3 COMPONENTS Interpreter) 57 58# Auto-detection of features that can be toggled 59find_package(OpenSSL 1.0.1) 60find_package(Libev 4.11) 61find_package(Libcares 1.7.5) 62find_package(ZLIB 1.2.3) 63find_package(Libngtcp2 0.0.0) 64find_package(Libngtcp2_crypto_quictls 0.0.0) 65if(LIBNGTCP2_CRYPTO_QUICTLS_FOUND) 66 set(HAVE_LIBNGTCP2_CRYPTO_QUICTLS 1) 67endif() 68find_package(Libnghttp3 0.0.0) 69if(WITH_LIBBPF) 70 find_package(Libbpf 0.4.0) 71 if(NOT LIBBPF_FOUND) 72 message(FATAL_ERROR "libbpf was requested (WITH_LIBBPF=1) but not found.") 73 endif() 74endif() 75if(OPENSSL_FOUND AND LIBEV_FOUND AND ZLIB_FOUND) 76 set(ENABLE_APP_DEFAULT ON) 77else() 78 set(ENABLE_APP_DEFAULT OFF) 79endif() 80find_package(Systemd 209) 81find_package(Jansson 2.5) 82set(ENABLE_HPACK_TOOLS_DEFAULT ${JANSSON_FOUND}) 83# 2.0.8 is required because we use evconnlistener_set_error_cb() 84find_package(Libevent 2.0.8 COMPONENTS core extra openssl) 85set(ENABLE_EXAMPLES_DEFAULT ${LIBEVENT_OPENSSL_FOUND}) 86 87find_package(LibXml2 2.6.26) 88set(WITH_LIBXML2_DEFAULT ${LIBXML2_FOUND}) 89find_package(Jemalloc) 90set(WITH_JEMALLOC_DEFAULT ${JEMALLOC_FOUND}) 91 92include(CMakeOptions.txt) 93 94if(ENABLE_LIB_ONLY AND (ENABLE_APP OR ENABLE_HPACK_TOOLS OR ENABLE_EXAMPLES)) 95 # Remember when disabled options are disabled for later diagnostics. 96 set(ENABLE_LIB_ONLY_DISABLED_OTHERS 1) 97else() 98 set(ENABLE_LIB_ONLY_DISABLED_OTHERS 0) 99endif() 100if(ENABLE_LIB_ONLY) 101 set(ENABLE_APP OFF) 102 set(ENABLE_HPACK_TOOLS OFF) 103 set(ENABLE_EXAMPLES OFF) 104endif() 105 106# Do not disable assertions based on CMAKE_BUILD_TYPE. 107foreach(_build_type "Release" "MinSizeRel" "RelWithDebInfo") 108 foreach(_lang C CXX) 109 string(TOUPPER "CMAKE_${_lang}_FLAGS_${_build_type}" _var) 110 string(REGEX REPLACE "(^| )[/-]D *NDEBUG($| )" " " ${_var} "${${_var}}") 111 endforeach() 112endforeach() 113 114if(CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Clang") 115 set(HINT_NORETURN "__attribute__((noreturn))") 116else() 117 set(HINT_NORETURN) 118endif() 119 120include(ExtractValidFlags) 121foreach(_cxx1x_flag -std=c++14) 122 extract_valid_cxx_flags(_cxx1x_flag_supported ${_cxx1x_flag}) 123 if(_cxx1x_flag_supported) 124 set(CXX1XCXXFLAGS ${_cxx1x_flag}) 125 break() 126 endif() 127endforeach() 128 129include(CMakePushCheckState) 130include(CheckCXXSourceCompiles) 131cmake_push_check_state() 132set(CMAKE_REQUIRED_DEFINITIONS "${CXX1XCXXFLAGS}") 133# Check that std::future is available. 134check_cxx_source_compiles(" 135#include <vector> 136#include <future> 137int main() { std::vector<std::future<int>> v; }" HAVE_STD_FUTURE) 138# Check that std::map::emplace is available for g++-4.7. 139check_cxx_source_compiles(" 140#include <map> 141int main() { std::map<int, int>().emplace(1, 2); }" HAVE_STD_MAP_EMPLACE) 142cmake_pop_check_state() 143 144 145# Checks for libraries. 146# Additional libraries required for programs under src directory. 147set(APP_LIBRARIES) 148 149set(CMAKE_THREAD_PREFER_PTHREAD 1) 150find_package(Threads) 151if(CMAKE_USE_PTHREADS_INIT) 152 list(APPEND APP_LIBRARIES ${CMAKE_THREAD_LIBS_INIT}) 153endif() 154# XXX android and C++, is this still needed in cmake? 155# case "$host" in 156# *android*) 157# android_build=yes 158# # android does not need -pthread, but needs following 3 libs for C++ 159# APPLDFLAGS="$APPLDFLAGS -lstdc++ -latomic -lsupc++" 160 161# dl: openssl requires libdl when it is statically linked. 162# XXX shouldn't ${CMAKE_DL_LIBS} be appended to OPENSSL_LIBRARIES instead of 163# APP_LIBRARIES if it is really specific to OpenSSL? 164 165find_package(CUnit 2.1) 166enable_testing() 167set(HAVE_CUNIT ${CUNIT_FOUND}) 168if(HAVE_CUNIT) 169 add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND}) 170endif() 171 172# openssl (for src) 173include(CheckSymbolExists) 174set(HAVE_OPENSSL ${OPENSSL_FOUND}) 175if(OPENSSL_FOUND) 176 set(OPENSSL_INCLUDE_DIRS ${OPENSSL_INCLUDE_DIR}) 177 cmake_push_check_state() 178 set(CMAKE_REQUIRED_INCLUDES "${OPENSSL_INCLUDE_DIR}") 179 set(CMAKE_REQUIRED_LIBRARIES "${OPENSSL_LIBRARIES}") 180 if(WIN32) 181 set(CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES}" "ws2_32" "bcrypt") 182 endif() 183 check_symbol_exists(SSL_is_quic "openssl/ssl.h" HAVE_SSL_IS_QUIC) 184 if(NOT HAVE_SSL_IS_QUIC) 185 message(WARNING "OpenSSL in ${OPENSSL_LIBRARIES} does not have SSL_is_quic. HTTP/3 support cannot be enabled") 186 endif() 187 cmake_pop_check_state() 188else() 189 set(OPENSSL_INCLUDE_DIRS "") 190 set(OPENSSL_LIBRARIES "") 191endif() 192# libev (for src) 193set(HAVE_LIBEV ${LIBEV_FOUND}) 194set(HAVE_ZLIB ${ZLIB_FOUND}) 195set(HAVE_SYSTEMD ${SYSTEMD_FOUND}) 196set(HAVE_LIBEVENT_OPENSSL ${LIBEVENT_FOUND}) 197if(LIBEVENT_FOUND) 198 # Must both link the core and openssl libraries. 199 set(LIBEVENT_OPENSSL_LIBRARIES ${LIBEVENT_LIBRARIES}) 200endif() 201# libc-ares (for src) 202set(HAVE_LIBCARES ${LIBCARES_FOUND}) 203if(LIBCARES_FOUND) 204 set(LIBCARES_INCLUDE_DIRS ${LIBCARES_INCLUDE_DIR}) 205else() 206 set(LIBCARES_INCLUDE_DIRS "") 207 set(LIBCARES_LIBRARIES "") 208endif() 209# jansson (for src/nghttp, src/deflatehd and src/inflatehd) 210set(HAVE_JANSSON ${JANSSON_FOUND}) 211# libxml2 (for src/nghttp) 212set(HAVE_LIBXML2 ${LIBXML2_FOUND}) 213if(LIBXML2_FOUND) 214 set(LIBXML2_INCLUDE_DIRS ${LIBXML2_INCLUDE_DIR}) 215else() 216 set(LIBXML2_INCLUDE_DIRS "") 217 set(LIBXML2_LIBRARIES "") 218endif() 219# jemalloc 220set(HAVE_JEMALLOC ${JEMALLOC_FOUND}) 221 222# libbpf (for bpf) 223set(HAVE_LIBBPF ${LIBBPF_FOUND}) 224if(LIBBPF_FOUND) 225 set(BPFCFLAGS -Wall -O2 -g) 226 if(CMAKE_SYSTEM_NAME STREQUAL "Linux") 227 # For Debian/Ubuntu 228 set(EXTRABPFCFLAGS -I/usr/include/${CMAKE_SYSTEM_PROCESSOR}-linux-gnu) 229 endif() 230 231 check_c_source_compiles(" 232#include <linux/bpf.h> 233int main() { enum bpf_stats_type foo; (void)foo; }" HAVE_BPF_STATS_TYPE) 234endif() 235 236# The nghttp, nghttpd and nghttpx under src depend on zlib, OpenSSL and libev 237if(ENABLE_APP AND NOT (ZLIB_FOUND AND OPENSSL_FOUND AND LIBEV_FOUND)) 238 message(FATAL_ERROR "Applications were requested (ENABLE_APP=1) but dependencies are not met.") 239endif() 240 241# HTTP/3 requires quictls/openssl, libngtcp2, libngtcp2_crypto_quictls 242# and libnghttp3. 243if(ENABLE_HTTP3 AND NOT (HAVE_SSL_IS_QUIC AND LIBNGTCP2_FOUND AND LIBNGTCP2_CRYPTO_QUICTLS_FOUND AND LIBNGHTTP3_FOUND)) 244 message(FATAL_ERROR "HTTP/3 was requested (ENABLE_HTTP3=1) but dependencies are not met.") 245endif() 246 247# HPACK tools requires jansson 248if(ENABLE_HPACK_TOOLS AND NOT HAVE_JANSSON) 249 message(FATAL_ERROR "HPACK tools were requested (ENABLE_HPACK_TOOLS=1) but dependencies are not met.") 250endif() 251 252# examples 253if(ENABLE_EXAMPLES AND NOT (OPENSSL_FOUND AND LIBEVENT_OPENSSL_FOUND)) 254 message(FATAL_ERROR "examples were requested (ENABLE_EXAMPLES=1) but dependencies are not met.") 255endif() 256 257# third-party http-parser only be built when needed 258if(ENABLE_EXAMPLES OR ENABLE_APP OR ENABLE_HPACK_TOOLS) 259 set(ENABLE_THIRD_PARTY 1) 260 # mruby (for src/nghttpx) 261 set(HAVE_MRUBY ${WITH_MRUBY}) 262 set(HAVE_NEVERBLEED ${WITH_NEVERBLEED}) 263else() 264 set(HAVE_MRUBY 0) 265 set(HAVE_NEVERBLEED 0) 266endif() 267 268# Checks for header files. 269include(CheckIncludeFile) 270check_include_file("arpa/inet.h" HAVE_ARPA_INET_H) 271check_include_file("fcntl.h" HAVE_FCNTL_H) 272check_include_file("inttypes.h" HAVE_INTTYPES_H) 273check_include_file("limits.h" HAVE_LIMITS_H) 274check_include_file("netdb.h" HAVE_NETDB_H) 275check_include_file("netinet/in.h" HAVE_NETINET_IN_H) 276check_include_file("pwd.h" HAVE_PWD_H) 277check_include_file("sys/socket.h" HAVE_SYS_SOCKET_H) 278check_include_file("sys/time.h" HAVE_SYS_TIME_H) 279check_include_file("sysinfoapi.h" HAVE_SYSINFOAPI_H) 280check_include_file("syslog.h" HAVE_SYSLOG_H) 281check_include_file("time.h" HAVE_TIME_H) 282check_include_file("unistd.h" HAVE_UNISTD_H) 283 284include(CheckTypeSize) 285# Checks for typedefs, structures, and compiler characteristics. 286# AC_TYPE_SIZE_T 287check_type_size("ssize_t" SIZEOF_SSIZE_T) 288if(SIZEOF_SSIZE_T STREQUAL "") 289 # ssize_t is a signed type in POSIX storing at least -1. 290 # Set it to "int" to match the behavior of AC_TYPE_SSIZE_T (autotools). 291 set(ssize_t int) 292endif() 293# AC_TYPE_UINT8_T 294# AC_TYPE_UINT16_T 295# AC_TYPE_UINT32_T 296# AC_TYPE_UINT64_T 297# AC_TYPE_INT8_T 298# AC_TYPE_INT16_T 299# AC_TYPE_INT32_T 300# AC_TYPE_INT64_T 301# AC_TYPE_OFF_T 302# AC_TYPE_PID_T 303# AC_TYPE_UID_T 304# XXX To support inline for crappy compilers, see https://cmake.org/Wiki/CMakeTestInline 305# AC_C_INLINE 306# XXX is AC_SYS_LARGEFILE still needed for modern systems? 307# add_definitions(-D_FILE_OFFSET_BITS=64) 308 309include(CheckStructHasMember) 310check_struct_has_member("struct tm" tm_gmtoff time.h HAVE_STRUCT_TM_TM_GMTOFF) 311 312# Check size of pointer to decide we need 8 bytes alignment adjustment. 313check_type_size("int *" SIZEOF_INT_P) 314check_type_size("time_t" SIZEOF_TIME_T) 315 316# Checks for library functions. 317include(CheckFunctionExists) 318check_function_exists(_Exit HAVE__EXIT) 319check_function_exists(accept4 HAVE_ACCEPT4) 320check_function_exists(clock_gettime HAVE_CLOCK_GETTIME) 321check_function_exists(mkostemp HAVE_MKOSTEMP) 322 323check_symbol_exists(GetTickCount64 sysinfoapi.h HAVE_GETTICKCOUNT64) 324 325include(CheckSymbolExists) 326# XXX does this correctly detect initgroups (un)availability on cygwin? 327check_symbol_exists(initgroups grp.h HAVE_DECL_INITGROUPS) 328if(NOT HAVE_DECL_INITGROUPS AND HAVE_UNISTD_H) 329 # FreeBSD declares initgroups() in unistd.h 330 check_symbol_exists(initgroups unistd.h HAVE_DECL_INITGROUPS2) 331 if(HAVE_DECL_INITGROUPS2) 332 set(HAVE_DECL_INITGROUPS 1) 333 endif() 334endif() 335 336set(WARNCFLAGS) 337set(WARNCXXFLAGS) 338if(CMAKE_C_COMPILER_ID MATCHES "MSVC") 339 if(ENABLE_WERROR) 340 set(WARNCFLAGS /WX) 341 set(WARNCXXFLAGS /WX) 342 endif() 343else() 344 if(ENABLE_WERROR) 345 extract_valid_c_flags(WARNCFLAGS -Werror) 346 extract_valid_c_flags(WARNCXXFLAGS -Werror) 347 endif() 348 349 # For C compiler 350 extract_valid_c_flags(WARNCFLAGS 351 -Wall 352 -Wextra 353 -Wmissing-prototypes 354 -Wstrict-prototypes 355 -Wmissing-declarations 356 -Wpointer-arith 357 -Wdeclaration-after-statement 358 -Wformat-security 359 -Wwrite-strings 360 -Wshadow 361 -Winline 362 -Wnested-externs 363 -Wfloat-equal 364 -Wundef 365 -Wendif-labels 366 -Wempty-body 367 -Wcast-align 368 -Wclobbered 369 -Wvla 370 -Wpragmas 371 -Wunreachable-code 372 -Waddress 373 -Wattributes 374 -Wdiv-by-zero 375 -Wshorten-64-to-32 376 377 -Wconversion 378 -Wextended-offsetof 379 -Wformat-nonliteral 380 -Wlanguage-extension-token 381 -Wmissing-field-initializers 382 -Wmissing-noreturn 383 -Wmissing-variable-declarations 384 # Not used because we cannot change public structs 385 # -Wpadded 386 -Wsign-conversion 387 # Not used because this basically disallows default case 388 # -Wswitch-enum 389 -Wunreachable-code-break 390 -Wunused-macros 391 -Wunused-parameter 392 -Wredundant-decls 393 # Only work with Clang for the moment 394 -Wheader-guard 395 # This is required because we pass format string as "const char*. 396 -Wno-format-nonliteral 397 ) 398 399 extract_valid_cxx_flags(WARNCXXFLAGS 400 # For C++ compiler 401 -Wall 402 -Wformat-security 403 ) 404endif() 405 406if(ENABLE_STATIC_CRT) 407 foreach(lang C CXX) 408 foreach(suffix "" _DEBUG _MINSIZEREL _RELEASE _RELWITHDEBINFO) 409 set(var "CMAKE_${lang}_FLAGS${suffix}") 410 string(REPLACE "/MD" "/MT" ${var} "${${var}}") 411 endforeach() 412 endforeach() 413endif() 414 415if(ENABLE_DEBUG) 416 set(DEBUGBUILD 1) 417endif() 418 419# Some platform does not have working std::future. We disable 420# threading for those platforms. 421if(NOT ENABLE_THREADS OR NOT HAVE_STD_FUTURE) 422 set(NOTHREADS 1) 423endif() 424 425add_definitions(-DHAVE_CONFIG_H) 426configure_file(cmakeconfig.h.in config.h) 427# autotools-compatible names 428# Sphinx expects relative paths in the .rst files. Use the fact that the files 429# below are all one directory level deep. 430file(RELATIVE_PATH top_srcdir "${CMAKE_CURRENT_BINARY_DIR}/dir" "${CMAKE_CURRENT_SOURCE_DIR}") 431file(RELATIVE_PATH top_builddir "${CMAKE_CURRENT_BINARY_DIR}/dir" "${CMAKE_CURRENT_BINARY_DIR}") 432set(abs_top_srcdir "${CMAKE_CURRENT_SOURCE_DIR}") 433set(abs_top_builddir "${CMAKE_CURRENT_BINARY_DIR}") 434# libnghttp2.pc (pkg-config file) 435set(prefix "${CMAKE_INSTALL_PREFIX}") 436set(exec_prefix "${CMAKE_INSTALL_PREFIX}") 437set(libdir "${CMAKE_INSTALL_FULL_LIBDIR}") 438set(includedir "${CMAKE_INSTALL_FULL_INCLUDEDIR}") 439set(VERSION "${PACKAGE_VERSION}") 440# For init scripts and systemd service file (in contrib/) 441set(bindir "${CMAKE_INSTALL_FULL_BINDIR}") 442set(sbindir "${CMAKE_INSTALL_FULL_SBINDIR}") 443foreach(name 444 lib/libnghttp2.pc 445 lib/includes/nghttp2/nghttp2ver.h 446 integration-tests/config.go 447 integration-tests/setenv 448 doc/conf.py 449 doc/index.rst 450 doc/package_README.rst 451 doc/tutorial-client.rst 452 doc/tutorial-server.rst 453 doc/tutorial-hpack.rst 454 doc/nghttpx-howto.rst 455 doc/h2load-howto.rst 456 doc/building-android-binary.rst 457 doc/nghttp2.h.rst 458 doc/nghttp2ver.h.rst 459 doc/contribute.rst 460) 461 configure_file("${name}.in" "${name}" @ONLY) 462endforeach() 463 464if(APPLE) 465 add_definitions(-D__APPLE_USE_RFC_3542) 466endif() 467 468include_directories( 469 "${CMAKE_CURRENT_BINARY_DIR}" # for config.h 470) 471# For use in src/CMakeLists.txt 472set(PKGDATADIR "${CMAKE_INSTALL_FULL_DATADIR}/${CMAKE_PROJECT_NAME}") 473set(PKGLIBDIR "${CMAKE_INSTALL_FULL_LIBDIR}/${CMAKE_PROJECT_NAME}") 474 475install(FILES README.rst DESTINATION "${CMAKE_INSTALL_DOCDIR}") 476 477add_subdirectory(lib) 478#add_subdirectory(lib/includes) 479add_subdirectory(third-party) 480add_subdirectory(src) 481add_subdirectory(examples) 482add_subdirectory(tests) 483#add_subdirectory(tests/testdata) 484add_subdirectory(integration-tests) 485if(ENABLE_DOC) 486 add_subdirectory(doc) 487endif() 488add_subdirectory(contrib) 489add_subdirectory(script) 490add_subdirectory(bpf) 491 492 493string(TOUPPER "${CMAKE_BUILD_TYPE}" _build_type) 494message(STATUS "summary of build options: 495 496 Package version: ${VERSION} 497 Library version: ${LT_CURRENT}:${LT_REVISION}:${LT_AGE} 498 Install prefix: ${CMAKE_INSTALL_PREFIX} 499 Target system: ${CMAKE_SYSTEM_NAME} 500 Compiler: 501 Build type: ${CMAKE_BUILD_TYPE} 502 C compiler: ${CMAKE_C_COMPILER} 503 CFLAGS: ${CMAKE_C_FLAGS_${_build_type}} ${CMAKE_C_FLAGS} 504 C++ compiler: ${CMAKE_CXX_COMPILER} 505 CXXFLAGS: ${CMAKE_CXX_FLAGS_${_build_type}} ${CMAKE_CXX_FLAGS} 506 WARNCFLAGS: ${WARNCFLAGS} 507 CXX1XCXXFLAGS: ${CXX1XCXXFLAGS} 508 Python: 509 Python: ${Python3_EXECUTABLE} 510 Python3_VERSION: ${Python3_VERSION} 511 Test: 512 CUnit: ${HAVE_CUNIT} (LIBS='${CUNIT_LIBRARIES}') 513 Failmalloc: ${ENABLE_FAILMALLOC} 514 Libs: 515 OpenSSL: ${HAVE_OPENSSL} (LIBS='${OPENSSL_LIBRARIES}') 516 Libxml2: ${HAVE_LIBXML2} (LIBS='${LIBXML2_LIBRARIES}') 517 Libev: ${HAVE_LIBEV} (LIBS='${LIBEV_LIBRARIES}') 518 Libc-ares: ${HAVE_LIBCARES} (LIBS='${LIBCARES_LIBRARIES}') 519 Libngtcp2: ${HAVE_LIBNGTCP2} (LIBS='${LIBNGTCP2_LIBRARIES}') 520 Libngtcp2_crypto_quictls: ${HAVE_LIBNGTCP2_CRYPTO_QUICTLS} (LIBS='${LIBNGTCP2_CRYPTO_QUICTLS_LIBRARIES}') 521 Libnghttp3: ${HAVE_LIBNGHTTP3} (LIBS='${LIBNGHTTP3_LIBRARIES}') 522 Libbpf: ${HAVE_LIBBPF} (LIBS='${LIBBPF_LIBRARIES}') 523 Libevent(SSL): ${HAVE_LIBEVENT_OPENSSL} (LIBS='${LIBEVENT_OPENSSL_LIBRARIES}') 524 Jansson: ${HAVE_JANSSON} (LIBS='${JANSSON_LIBRARIES}') 525 Jemalloc: ${HAVE_JEMALLOC} (LIBS='${JEMALLOC_LIBRARIES}') 526 Zlib: ${HAVE_ZLIB} (LIBS='${ZLIB_LIBRARIES}') 527 Systemd: ${HAVE_SYSTEMD} (LIBS='${SYSTEMD_LIBRARIES}') 528 Third-party: 529 http-parser: ${ENABLE_THIRD_PARTY} 530 MRuby: ${HAVE_MRUBY} 531 Neverbleed: ${HAVE_NEVERBLEED} 532 Features: 533 Applications: ${ENABLE_APP} 534 HPACK tools: ${ENABLE_HPACK_TOOLS} 535 Examples: ${ENABLE_EXAMPLES} 536 Threading: ${ENABLE_THREADS} 537 HTTP/3(EXPERIMENTAL): ${ENABLE_HTTP3} 538") 539if(ENABLE_LIB_ONLY_DISABLED_OTHERS) 540 message("Only the library will be built. To build other components " 541 "(such as applications and examples), set ENABLE_LIB_ONLY=OFF.") 542endif() 543