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.14) 26# XXX using 1.8.90 instead of 1.9.0-DEV 27project(nghttp2 VERSION 1.62.1) 28 29# See versioning rule: 30# https://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html 31set(LT_CURRENT 42) 32set(LT_REVISION 1) 33set(LT_AGE 28) 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) 54include(CMakeDependentOption) 55 56# For documentation 57find_package(Python3 COMPONENTS Interpreter) 58 59# Auto-detection of features that can be toggled 60if(NOT ENABLE_LIB_ONLY) 61 find_package(Libev 4.11) 62 find_package(Libcares 1.7.5) 63 find_package(ZLIB 1.2.3) 64 find_package(Libbrotlienc 1.0.9) 65 find_package(Libbrotlidec 1.0.9) 66endif() 67 68find_package(OpenSSL 1.1.1) 69find_package(Libngtcp2 1.0.0) 70find_package(Libngtcp2_crypto_quictls 1.0.0) 71if(LIBNGTCP2_CRYPTO_QUICTLS_FOUND) 72 set(HAVE_LIBNGTCP2_CRYPTO_QUICTLS 1) 73endif() 74find_package(Libnghttp3 1.1.0) 75if(WITH_LIBBPF) 76 find_package(Libbpf 0.7.0) 77 if(NOT LIBBPF_FOUND) 78 message(FATAL_ERROR "libbpf was requested (WITH_LIBBPF=1) but not found.") 79 endif() 80endif() 81if(OPENSSL_FOUND AND LIBEV_FOUND AND ZLIB_FOUND) 82 set(ENABLE_APP_DEFAULT ON) 83else() 84 set(ENABLE_APP_DEFAULT OFF) 85endif() 86find_package(Systemd 209) 87find_package(Jansson 2.5) 88set(ENABLE_HPACK_TOOLS_DEFAULT ${JANSSON_FOUND}) 89# 2.0.8 is required because we use evconnlistener_set_error_cb() 90find_package(Libevent 2.0.8 COMPONENTS core extra openssl) 91set(ENABLE_EXAMPLES_DEFAULT ${LIBEVENT_OPENSSL_FOUND}) 92 93find_package(LibXml2 2.6.26) 94set(WITH_LIBXML2_DEFAULT ${LIBXML2_FOUND}) 95find_package(Jemalloc) 96set(WITH_JEMALLOC_DEFAULT ${JEMALLOC_FOUND}) 97 98include(CMakeOptions.txt) 99 100if(ENABLE_LIB_ONLY AND (ENABLE_APP OR ENABLE_HPACK_TOOLS OR ENABLE_EXAMPLES)) 101 # Remember when disabled options are disabled for later diagnostics. 102 set(ENABLE_LIB_ONLY_DISABLED_OTHERS 1) 103else() 104 set(ENABLE_LIB_ONLY_DISABLED_OTHERS 0) 105endif() 106if(ENABLE_LIB_ONLY) 107 set(ENABLE_APP OFF) 108 set(ENABLE_HPACK_TOOLS OFF) 109 set(ENABLE_EXAMPLES OFF) 110endif() 111 112# Do not disable assertions based on CMAKE_BUILD_TYPE. 113foreach(_build_type "Release" "MinSizeRel" "RelWithDebInfo") 114 foreach(_lang C CXX) 115 string(TOUPPER "CMAKE_${_lang}_FLAGS_${_build_type}" _var) 116 string(REGEX REPLACE "(^| )[/-]D *NDEBUG($| )" " " ${_var} "${${_var}}") 117 endforeach() 118endforeach() 119 120if(CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Clang") 121 set(HINT_NORETURN "__attribute__((noreturn))") 122else() 123 set(HINT_NORETURN) 124endif() 125 126include(ExtractValidFlags) 127foreach(_cxx1x_flag -std=c++20) 128 extract_valid_cxx_flags(_cxx1x_flag_supported ${_cxx1x_flag}) 129 if(_cxx1x_flag_supported) 130 set(CXX1XCXXFLAGS ${_cxx1x_flag}) 131 break() 132 endif() 133endforeach() 134 135include(CMakePushCheckState) 136include(CheckCXXSourceCompiles) 137cmake_push_check_state() 138set(CMAKE_REQUIRED_DEFINITIONS "${CXX1XCXXFLAGS}") 139# Check that std::future is available. 140check_cxx_source_compiles(" 141#include <vector> 142#include <future> 143int main() { std::vector<std::future<int>> v; }" HAVE_STD_FUTURE) 144# Check that std::map::emplace is available for g++-4.7. 145check_cxx_source_compiles(" 146#include <map> 147int main() { std::map<int, int>().emplace(1, 2); }" HAVE_STD_MAP_EMPLACE) 148cmake_pop_check_state() 149 150 151# Checks for libraries. 152# Additional libraries required for programs under src directory. 153set(APP_LIBRARIES) 154 155set(CMAKE_THREAD_PREFER_PTHREAD 1) 156find_package(Threads) 157if(CMAKE_USE_PTHREADS_INIT) 158 list(APPEND APP_LIBRARIES ${CMAKE_THREAD_LIBS_INIT}) 159endif() 160# XXX android and C++, is this still needed in cmake? 161# case "$host" in 162# *android*) 163# android_build=yes 164# # android does not need -pthread, but needs following 3 libs for C++ 165# APPLDFLAGS="$APPLDFLAGS -lstdc++ -latomic -lsupc++" 166 167# dl: openssl requires libdl when it is statically linked. 168# XXX shouldn't ${CMAKE_DL_LIBS} be appended to OPENSSL_LIBRARIES instead of 169# APP_LIBRARIES if it is really specific to OpenSSL? 170 171enable_testing() 172add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND}) 173 174# openssl (for src) 175include(CheckSymbolExists) 176set(HAVE_OPENSSL ${OPENSSL_FOUND}) 177if(OPENSSL_FOUND) 178 set(OPENSSL_INCLUDE_DIRS ${OPENSSL_INCLUDE_DIR}) 179 cmake_push_check_state() 180 set(CMAKE_REQUIRED_INCLUDES "${OPENSSL_INCLUDE_DIR}") 181 set(CMAKE_REQUIRED_LIBRARIES "${OPENSSL_LIBRARIES}") 182 if(WIN32) 183 set(CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES}" "ws2_32" "bcrypt") 184 endif() 185 if(ENABLE_HTTP3) 186 check_symbol_exists(SSL_provide_quic_data "openssl/ssl.h" HAVE_SSL_PROVIDE_QUIC_DATA) 187 if(NOT HAVE_SSL_PROVIDE_QUIC_DATA) 188 message(WARNING "OpenSSL in ${OPENSSL_LIBRARIES} does not have SSL_provide_quic_data. HTTP/3 support cannot be enabled") 189 endif() 190 endif() 191 cmake_pop_check_state() 192else() 193 set(OPENSSL_INCLUDE_DIRS "") 194 set(OPENSSL_LIBRARIES "") 195endif() 196# libev (for src) 197set(HAVE_LIBEV ${LIBEV_FOUND}) 198set(HAVE_ZLIB ${ZLIB_FOUND}) 199set(HAVE_SYSTEMD ${SYSTEMD_FOUND}) 200set(HAVE_LIBEVENT_OPENSSL ${LIBEVENT_FOUND}) 201if(LIBEVENT_FOUND) 202 # Must both link the core and openssl libraries. 203 set(LIBEVENT_OPENSSL_LIBRARIES ${LIBEVENT_LIBRARIES}) 204endif() 205# libc-ares (for src) 206set(HAVE_LIBCARES ${LIBCARES_FOUND}) 207if(LIBCARES_FOUND) 208 set(LIBCARES_INCLUDE_DIRS ${LIBCARES_INCLUDE_DIR}) 209else() 210 set(LIBCARES_INCLUDE_DIRS "") 211 set(LIBCARES_LIBRARIES "") 212endif() 213# jansson (for src/nghttp, src/deflatehd and src/inflatehd) 214set(HAVE_JANSSON ${JANSSON_FOUND}) 215# libxml2 (for src/nghttp) 216set(HAVE_LIBXML2 ${LIBXML2_FOUND}) 217if(LIBXML2_FOUND) 218 set(LIBXML2_INCLUDE_DIRS ${LIBXML2_INCLUDE_DIR}) 219else() 220 set(LIBXML2_INCLUDE_DIRS "") 221 set(LIBXML2_LIBRARIES "") 222endif() 223# jemalloc 224set(HAVE_JEMALLOC ${JEMALLOC_FOUND}) 225 226# libbrotli (for src) 227set(HAVE_LIBBROTLIENC ${LIBBROTLIENC_FOUND}) 228set(HAVE_LIBBROTLIDEC ${LIBBROTLIDEC_FOUND}) 229if(LIBBROTLIENC_FOUND AND LIBBROTLIDEC_FOUND) 230 set(HAVE_LIBBROTLI 1) 231endif() 232 233# libbpf (for bpf) 234set(HAVE_LIBBPF ${LIBBPF_FOUND}) 235if(LIBBPF_FOUND) 236 set(BPFCFLAGS -Wall -O2 -g) 237 if(CMAKE_SYSTEM_NAME STREQUAL "Linux") 238 # For Debian/Ubuntu 239 set(EXTRABPFCFLAGS -I/usr/include/${CMAKE_SYSTEM_PROCESSOR}-linux-gnu) 240 endif() 241 242 check_c_source_compiles(" 243#include <linux/bpf.h> 244int main() { enum bpf_stats_type foo; (void)foo; }" HAVE_BPF_STATS_TYPE) 245endif() 246 247# The nghttp, nghttpd and nghttpx under src depend on zlib, OpenSSL and libev 248if(ENABLE_APP AND NOT (ZLIB_FOUND AND OPENSSL_FOUND AND LIBEV_FOUND)) 249 message(FATAL_ERROR "Applications were requested (ENABLE_APP=1) but dependencies are not met.") 250endif() 251 252# HTTP/3 requires quictls/openssl, libngtcp2, libngtcp2_crypto_quictls 253# and libnghttp3. 254if(ENABLE_HTTP3 AND NOT (HAVE_SSL_PROVIDE_QUIC_DATA AND LIBNGTCP2_FOUND AND LIBNGTCP2_CRYPTO_QUICTLS_FOUND AND LIBNGHTTP3_FOUND)) 255 message(FATAL_ERROR "HTTP/3 was requested (ENABLE_HTTP3=1) but dependencies are not met.") 256endif() 257 258# HPACK tools requires jansson 259if(ENABLE_HPACK_TOOLS AND NOT HAVE_JANSSON) 260 message(FATAL_ERROR "HPACK tools were requested (ENABLE_HPACK_TOOLS=1) but dependencies are not met.") 261endif() 262 263# examples 264if(ENABLE_EXAMPLES AND NOT (OPENSSL_FOUND AND LIBEVENT_OPENSSL_FOUND)) 265 message(FATAL_ERROR "examples were requested (ENABLE_EXAMPLES=1) but dependencies are not met.") 266endif() 267 268# third-party http-parser only be built when needed 269if(ENABLE_EXAMPLES OR ENABLE_APP OR ENABLE_HPACK_TOOLS) 270 set(ENABLE_THIRD_PARTY 1) 271 # mruby (for src/nghttpx) 272 set(HAVE_MRUBY ${WITH_MRUBY}) 273 set(HAVE_NEVERBLEED ${WITH_NEVERBLEED}) 274else() 275 set(HAVE_MRUBY 0) 276 set(HAVE_NEVERBLEED 0) 277endif() 278 279# Checks for header files. 280include(CheckIncludeFile) 281check_include_file("arpa/inet.h" HAVE_ARPA_INET_H) 282check_include_file("fcntl.h" HAVE_FCNTL_H) 283check_include_file("inttypes.h" HAVE_INTTYPES_H) 284check_include_file("limits.h" HAVE_LIMITS_H) 285check_include_file("netdb.h" HAVE_NETDB_H) 286check_include_file("netinet/in.h" HAVE_NETINET_IN_H) 287check_include_file("netinet/ip.h" HAVE_NETINET_IP_H) 288check_include_file("pwd.h" HAVE_PWD_H) 289check_include_file("sys/socket.h" HAVE_SYS_SOCKET_H) 290check_include_file("sys/time.h" HAVE_SYS_TIME_H) 291check_include_file("syslog.h" HAVE_SYSLOG_H) 292check_include_file("unistd.h" HAVE_UNISTD_H) 293check_include_file("windows.h" HAVE_WINDOWS_H) 294 295include(CheckTypeSize) 296# Checks for typedefs, structures, and compiler characteristics. 297# AC_TYPE_SIZE_T 298check_type_size("ssize_t" SIZEOF_SSIZE_T) 299if(SIZEOF_SSIZE_T STREQUAL "") 300 # ssize_t is a signed type in POSIX storing at least -1. 301 # Set it to "int" to match the behavior of AC_TYPE_SSIZE_T (autotools). 302 set(ssize_t int) 303endif() 304# AC_TYPE_UINT8_T 305# AC_TYPE_UINT16_T 306# AC_TYPE_UINT32_T 307# AC_TYPE_UINT64_T 308# AC_TYPE_INT8_T 309# AC_TYPE_INT16_T 310# AC_TYPE_INT32_T 311# AC_TYPE_INT64_T 312# AC_TYPE_OFF_T 313# AC_TYPE_PID_T 314# AC_TYPE_UID_T 315# XXX To support inline for crappy compilers, see https://cmake.org/Wiki/CMakeTestInline 316# AC_C_INLINE 317# XXX is AC_SYS_LARGEFILE still needed for modern systems? 318# add_definitions(-D_FILE_OFFSET_BITS=64) 319 320include(CheckStructHasMember) 321check_struct_has_member("struct tm" tm_gmtoff time.h HAVE_STRUCT_TM_TM_GMTOFF) 322 323# Checks for library functions. 324include(CheckFunctionExists) 325check_function_exists(_Exit HAVE__EXIT) 326check_function_exists(accept4 HAVE_ACCEPT4) 327check_function_exists(clock_gettime HAVE_CLOCK_GETTIME) 328check_function_exists(mkostemp HAVE_MKOSTEMP) 329 330check_symbol_exists(GetTickCount64 sysinfoapi.h HAVE_GETTICKCOUNT64) 331 332include(CheckSymbolExists) 333# XXX does this correctly detect initgroups (un)availability on cygwin? 334check_symbol_exists(initgroups grp.h HAVE_DECL_INITGROUPS) 335if(NOT HAVE_DECL_INITGROUPS AND HAVE_UNISTD_H) 336 # FreeBSD declares initgroups() in unistd.h 337 check_symbol_exists(initgroups unistd.h HAVE_DECL_INITGROUPS2) 338 if(HAVE_DECL_INITGROUPS2) 339 set(HAVE_DECL_INITGROUPS 1) 340 endif() 341endif() 342 343check_symbol_exists(CLOCK_MONOTONIC "time.h" HAVE_DECL_CLOCK_MONOTONIC) 344 345set(WARNCFLAGS) 346set(WARNCXXFLAGS) 347if(CMAKE_C_COMPILER_ID MATCHES "MSVC") 348 if(ENABLE_WERROR) 349 set(WARNCFLAGS /WX) 350 set(WARNCXXFLAGS /WX) 351 endif() 352else() 353 if(ENABLE_WERROR) 354 set(WARNCFLAGS "-Werror") 355 set(WARNCXXFLAGS "-Werror") 356 endif() 357 358 include(PickyWarningsC) 359 include(PickyWarningsCXX) 360endif() 361 362if(ENABLE_STATIC_CRT) 363 foreach(lang C CXX) 364 foreach(suffix "" _DEBUG _MINSIZEREL _RELEASE _RELWITHDEBINFO) 365 set(var "CMAKE_${lang}_FLAGS${suffix}") 366 string(REPLACE "/MD" "/MT" ${var} "${${var}}") 367 endforeach() 368 endforeach() 369endif() 370 371if(ENABLE_DEBUG) 372 set(DEBUGBUILD 1) 373endif() 374 375# Some platform does not have working std::future. We disable 376# threading for those platforms. 377if(NOT ENABLE_THREADS OR NOT HAVE_STD_FUTURE) 378 set(NOTHREADS 1) 379endif() 380 381add_definitions(-DHAVE_CONFIG_H) 382configure_file(cmakeconfig.h.in config.h) 383# autotools-compatible names 384# Sphinx expects relative paths in the .rst files. Use the fact that the files 385# below are all one directory level deep. 386file(RELATIVE_PATH top_srcdir "${CMAKE_CURRENT_BINARY_DIR}/dir" "${CMAKE_CURRENT_SOURCE_DIR}") 387file(RELATIVE_PATH top_builddir "${CMAKE_CURRENT_BINARY_DIR}/dir" "${CMAKE_CURRENT_BINARY_DIR}") 388set(abs_top_srcdir "${CMAKE_CURRENT_SOURCE_DIR}") 389set(abs_top_builddir "${CMAKE_CURRENT_BINARY_DIR}") 390# libnghttp2.pc (pkg-config file) 391set(prefix "${CMAKE_INSTALL_PREFIX}") 392set(exec_prefix "${CMAKE_INSTALL_PREFIX}") 393set(libdir "${CMAKE_INSTALL_FULL_LIBDIR}") 394set(includedir "${CMAKE_INSTALL_FULL_INCLUDEDIR}") 395set(VERSION "${PACKAGE_VERSION}") 396# For init scripts and systemd service file (in contrib/) 397set(bindir "${CMAKE_INSTALL_FULL_BINDIR}") 398set(sbindir "${CMAKE_INSTALL_FULL_SBINDIR}") 399foreach(name 400 lib/libnghttp2.pc 401 lib/includes/nghttp2/nghttp2ver.h 402 integration-tests/config.go 403 integration-tests/setenv 404 doc/conf.py 405 doc/index.rst 406 doc/package_README.rst 407 doc/tutorial-client.rst 408 doc/tutorial-server.rst 409 doc/tutorial-hpack.rst 410 doc/nghttpx-howto.rst 411 doc/h2load-howto.rst 412 doc/building-android-binary.rst 413 doc/nghttp2.h.rst 414 doc/nghttp2ver.h.rst 415 doc/contribute.rst 416) 417 configure_file("${name}.in" "${name}" @ONLY) 418endforeach() 419 420if(APPLE) 421 add_definitions(-D__APPLE_USE_RFC_3542) 422endif() 423 424include_directories( 425 "${CMAKE_CURRENT_BINARY_DIR}" # for config.h 426) 427# For use in src/CMakeLists.txt 428set(PKGDATADIR "${CMAKE_INSTALL_FULL_DATADIR}/${CMAKE_PROJECT_NAME}") 429set(PKGLIBDIR "${CMAKE_INSTALL_FULL_LIBDIR}/${CMAKE_PROJECT_NAME}") 430 431install(FILES README.rst DESTINATION "${CMAKE_INSTALL_DOCDIR}") 432 433add_subdirectory(lib) 434#add_subdirectory(lib/includes) 435add_subdirectory(third-party) 436add_subdirectory(src) 437add_subdirectory(examples) 438if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME AND BUILD_TESTING) 439 add_subdirectory(tests) 440 #add_subdirectory(tests/testdata) 441 add_subdirectory(integration-tests) 442endif() 443if(ENABLE_DOC) 444 add_subdirectory(doc) 445endif() 446add_subdirectory(contrib) 447add_subdirectory(script) 448add_subdirectory(bpf) 449 450 451string(TOUPPER "${CMAKE_BUILD_TYPE}" _build_type) 452message(STATUS "summary of build options: 453 454 Package version: ${VERSION} 455 Library version: ${LT_CURRENT}:${LT_REVISION}:${LT_AGE} 456 Install prefix: ${CMAKE_INSTALL_PREFIX} 457 Target system: ${CMAKE_SYSTEM_NAME} 458 Compiler: 459 Build type: ${CMAKE_BUILD_TYPE} 460 C compiler: ${CMAKE_C_COMPILER} 461 CFLAGS: ${CMAKE_C_FLAGS_${_build_type}} ${CMAKE_C_FLAGS} 462 C++ compiler: ${CMAKE_CXX_COMPILER} 463 CXXFLAGS: ${CMAKE_CXX_FLAGS_${_build_type}} ${CMAKE_CXX_FLAGS} 464 WARNCFLAGS: ${WARNCFLAGS} 465 CXX1XCXXFLAGS: ${CXX1XCXXFLAGS} 466 WARNCXXFLAGS: ${WARNCXXFLAGS} 467 Python: 468 Python: ${Python3_EXECUTABLE} 469 Python3_VERSION: ${Python3_VERSION} 470 Test: 471 Failmalloc: ${ENABLE_FAILMALLOC} 472 Build Test: ${BUILD_TESTING} 473 Libs: 474 OpenSSL: ${HAVE_OPENSSL} (LIBS='${OPENSSL_LIBRARIES}') 475 Libxml2: ${HAVE_LIBXML2} (LIBS='${LIBXML2_LIBRARIES}') 476 Libev: ${HAVE_LIBEV} (LIBS='${LIBEV_LIBRARIES}') 477 Libc-ares: ${HAVE_LIBCARES} (LIBS='${LIBCARES_LIBRARIES}') 478 Libngtcp2: ${HAVE_LIBNGTCP2} (LIBS='${LIBNGTCP2_LIBRARIES}') 479 Libngtcp2_crypto_quictls: ${HAVE_LIBNGTCP2_CRYPTO_QUICTLS} (LIBS='${LIBNGTCP2_CRYPTO_QUICTLS_LIBRARIES}') 480 Libnghttp3: ${HAVE_LIBNGHTTP3} (LIBS='${LIBNGHTTP3_LIBRARIES}') 481 Libbpf: ${HAVE_LIBBPF} (LIBS='${LIBBPF_LIBRARIES}') 482 Libevent(SSL): ${HAVE_LIBEVENT_OPENSSL} (LIBS='${LIBEVENT_OPENSSL_LIBRARIES}') 483 Jansson: ${HAVE_JANSSON} (LIBS='${JANSSON_LIBRARIES}') 484 Jemalloc: ${HAVE_JEMALLOC} (LIBS='${JEMALLOC_LIBRARIES}') 485 Zlib: ${HAVE_ZLIB} (LIBS='${ZLIB_LIBRARIES}') 486 Systemd: ${HAVE_SYSTEMD} (LIBS='${SYSTEMD_LIBRARIES}') 487 Libbrotlienc: ${HAVE_LIBBROTLIENC} (LIBS='${LIBBROTLIENC_LIBRARIES}') 488 Libbrotlidec: ${HAVE_LIBBROTLIDEC} (LIBS='${LIBBROTLIDEC_LIBRARIES}') 489 Third-party: 490 http-parser: ${ENABLE_THIRD_PARTY} 491 MRuby: ${HAVE_MRUBY} 492 Neverbleed: ${HAVE_NEVERBLEED} 493 Features: 494 Applications: ${ENABLE_APP} 495 HPACK tools: ${ENABLE_HPACK_TOOLS} 496 Examples: ${ENABLE_EXAMPLES} 497 Threading: ${ENABLE_THREADS} 498 HTTP/3(EXPERIMENTAL): ${ENABLE_HTTP3} 499") 500if(ENABLE_LIB_ONLY_DISABLED_OTHERS) 501 message("Only the library will be built. To build other components " 502 "(such as applications and examples), set ENABLE_LIB_ONLY=OFF.") 503endif() 504