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.43.0) 28 29# See versioning rule: 30# http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html 31set(LT_CURRENT 34) 32set(LT_REVISION 1) 33set(LT_AGE 20) 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 Python bindings and documentation 56# (Must be called before PythonLibs for matching versions.) 57find_package(PythonInterp) 58 59# Auto-detection of features that can be toggled 60find_package(OpenSSL 1.0.1) 61find_package(Libev 4.11) 62find_package(Libcares 1.7.5) 63find_package(ZLIB 1.2.3) 64if(OPENSSL_FOUND AND LIBEV_FOUND AND ZLIB_FOUND) 65 set(ENABLE_APP_DEFAULT ON) 66else() 67 set(ENABLE_APP_DEFAULT OFF) 68endif() 69find_package(Systemd 209) 70find_package(Jansson 2.5) 71set(ENABLE_HPACK_TOOLS_DEFAULT ${JANSSON_FOUND}) 72# 2.0.8 is required because we use evconnlistener_set_error_cb() 73find_package(Libevent 2.0.8 COMPONENTS libevent openssl) 74set(ENABLE_EXAMPLES_DEFAULT ${LIBEVENT_OPENSSL_FOUND}) 75find_package(Cython) 76find_package(PythonLibs) 77if(CYTHON_FOUND AND PYTHONLIBS_FOUND) 78 set(ENABLE_PYTHON_BINDINGS_DEFAULT ON) 79else() 80 set(ENABLE_PYTHON_BINDINGS_DEFAULT OFF) 81endif() 82 83find_package(LibXml2 2.6.26) 84set(WITH_LIBXML2_DEFAULT ${LIBXML2_FOUND}) 85find_package(Jemalloc) 86set(WITH_JEMALLOC_DEFAULT ${JEMALLOC_FOUND}) 87 88include(CMakeOptions.txt) 89 90if(ENABLE_LIB_ONLY AND (ENABLE_APP OR ENABLE_HPACK_TOOLS OR ENABLE_EXAMPLES OR 91 ENABLE_PYTHON_BINDINGS)) 92 # Remember when disabled options are disabled for later diagnostics. 93 set(ENABLE_LIB_ONLY_DISABLED_OTHERS 1) 94else() 95 set(ENABLE_LIB_ONLY_DISABLED_OTHERS 0) 96endif() 97if(ENABLE_LIB_ONLY) 98 set(ENABLE_APP OFF) 99 set(ENABLE_HPACK_TOOLS OFF) 100 set(ENABLE_EXAMPLES OFF) 101 set(ENABLE_PYTHON_BINDINGS OFF) 102endif() 103 104# Do not disable assertions based on CMAKE_BUILD_TYPE. 105foreach(_build_type "Release" "MinSizeRel" "RelWithDebInfo") 106 foreach(_lang C CXX) 107 string(TOUPPER "CMAKE_${_lang}_FLAGS_${_build_type}" _var) 108 string(REGEX REPLACE "(^| )[/-]D *NDEBUG($| )" " " ${_var} "${${_var}}") 109 endforeach() 110endforeach() 111 112if(CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Clang") 113 set(HINT_NORETURN "__attribute__((noreturn))") 114else() 115 set(HINT_NORETURN) 116endif() 117 118include(ExtractValidFlags) 119foreach(_cxx1x_flag -std=c++14) 120 extract_valid_cxx_flags(_cxx1x_flag_supported ${_cxx1x_flag}) 121 if(_cxx1x_flag_supported) 122 set(CXX1XCXXFLAGS ${_cxx1x_flag}) 123 break() 124 endif() 125endforeach() 126 127include(CMakePushCheckState) 128include(CheckCXXSourceCompiles) 129cmake_push_check_state() 130set(CMAKE_REQUIRED_DEFINITIONS "${CXX1XCXXFLAGS}") 131# Check that std::future is available. 132check_cxx_source_compiles(" 133#include <vector> 134#include <future> 135int main() { std::vector<std::future<int>> v; }" HAVE_STD_FUTURE) 136# Check that std::map::emplace is available for g++-4.7. 137check_cxx_source_compiles(" 138#include <map> 139int main() { std::map<int, int>().emplace(1, 2); }" HAVE_STD_MAP_EMPLACE) 140cmake_pop_check_state() 141 142 143# Checks for libraries. 144# Additional libraries required for programs under src directory. 145set(APP_LIBRARIES) 146 147if(ENABLE_PYTHON_BINDINGS) 148 if(NOT (CYTHON_FOUND AND PYTHONLIBS_FOUND)) 149 message(FATAL_ERROR "python bindings were requested " 150 "(ENABLE_PYTHON_BINDINGS=1) but dependencies are not met.") 151 endif() 152 if(NOT PYTHON_VERSION_STRING STREQUAL PYTHONLIBS_VERSION_STRING) 153 message(FATAL_ERROR 154 "Python executable and library must have the same version!" 155 " Found Python ${PYTHON_VERSION_STRING} and" 156 " PythonLibs ${PYTHONLIBS_VERSION_STRING}" 157 ) 158 endif() 159endif() 160 161set(CMAKE_THREAD_PREFER_PTHREAD 1) 162find_package(Threads) 163if(CMAKE_USE_PTHREADS_INIT) 164 list(APPEND APP_LIBRARIES ${CMAKE_THREAD_LIBS_INIT}) 165endif() 166# XXX android and C++, is this still needed in cmake? 167# case "$host" in 168# *android*) 169# android_build=yes 170# # android does not need -pthread, but needs followng 3 libs for C++ 171# APPLDFLAGS="$APPLDFLAGS -lstdc++ -latomic -lsupc++" 172 173# dl: openssl requires libdl when it is statically linked. 174# XXX shouldn't ${CMAKE_DL_LIBS} be appended to OPENSSL_LIBRARIES instead of 175# APP_LIBRARIES if it is really specific to OpenSSL? 176 177find_package(CUnit 2.1) 178enable_testing() 179set(HAVE_CUNIT ${CUNIT_FOUND}) 180if(HAVE_CUNIT) 181 add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND}) 182endif() 183 184# openssl (for src) 185set(HAVE_OPENSSL ${OPENSSL_FOUND}) 186if(OPENSSL_FOUND) 187 set(OPENSSL_INCLUDE_DIRS ${OPENSSL_INCLUDE_DIR}) 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 222if(ENABLE_ASIO_LIB) 223 find_package(Boost 1.54.0 REQUIRED system thread) 224endif() 225 226# The nghttp, nghttpd and nghttpx under src depend on zlib, OpenSSL and libev 227if(ENABLE_APP AND NOT (ZLIB_FOUND AND OPENSSL_FOUND AND LIBEV_FOUND)) 228 message(FATAL_ERROR "Applications were requested (ENABLE_APP=1) but dependencies are not met.") 229endif() 230 231# HPACK tools requires jansson 232if(ENABLE_HPACK_TOOLS AND NOT HAVE_JANSSON) 233 message(FATAL_ERROR "HPACK tools were requested (ENABLE_HPACK_TOOLS=1) but dependencies are not met.") 234endif() 235 236# C++ library libnghttp2_asio 237if(ENABLE_EXAMPLES AND NOT (OPENSSL_FOUND AND LIBEVENT_OPENSSL_FOUND)) 238 message(FATAL_ERROR "examples were requested (ENABLE_EXAMPLES=1) but dependencies are not met.") 239endif() 240 241# third-party http-parser only be built when needed 242if(ENABLE_EXAMPLES OR ENABLE_APP OR ENABLE_HPACK_TOOLS OR ENABLE_ASIO_LIB) 243 set(ENABLE_THIRD_PARTY 1) 244 # mruby (for src/nghttpx) 245 set(HAVE_MRUBY ${WITH_MRUBY}) 246 set(HAVE_NEVERBLEED ${WITH_NEVERBLEED}) 247else() 248 set(HAVE_MRUBY 0) 249 set(HAVE_NEVERBLEED 0) 250endif() 251 252# Checks for header files. 253include(CheckIncludeFile) 254check_include_file("arpa/inet.h" HAVE_ARPA_INET_H) 255check_include_file("fcntl.h" HAVE_FCNTL_H) 256check_include_file("inttypes.h" HAVE_INTTYPES_H) 257check_include_file("limits.h" HAVE_LIMITS_H) 258check_include_file("netdb.h" HAVE_NETDB_H) 259check_include_file("netinet/in.h" HAVE_NETINET_IN_H) 260check_include_file("pwd.h" HAVE_PWD_H) 261check_include_file("sys/socket.h" HAVE_SYS_SOCKET_H) 262check_include_file("sys/time.h" HAVE_SYS_TIME_H) 263check_include_file("syslog.h" HAVE_SYSLOG_H) 264check_include_file("time.h" HAVE_TIME_H) 265check_include_file("unistd.h" HAVE_UNISTD_H) 266 267include(CheckTypeSize) 268# Checks for typedefs, structures, and compiler characteristics. 269# AC_TYPE_SIZE_T 270check_type_size("ssize_t" SIZEOF_SSIZE_T) 271if(SIZEOF_SSIZE_T STREQUAL "") 272 # ssize_t is a signed type in POSIX storing at least -1. 273 # Set it to "int" to match the behavior of AC_TYPE_SSIZE_T (autotools). 274 set(ssize_t int) 275endif() 276# AC_TYPE_UINT8_T 277# AC_TYPE_UINT16_T 278# AC_TYPE_UINT32_T 279# AC_TYPE_UINT64_T 280# AC_TYPE_INT8_T 281# AC_TYPE_INT16_T 282# AC_TYPE_INT32_T 283# AC_TYPE_INT64_T 284# AC_TYPE_OFF_T 285# AC_TYPE_PID_T 286# AC_TYPE_UID_T 287# XXX To support inline for crappy compilers, see https://cmake.org/Wiki/CMakeTestInline 288# AC_C_INLINE 289# XXX is AC_SYS_LARGEFILE still needed for modern systems? 290# add_definitions(-D_FILE_OFFSET_BITS=64) 291 292include(CheckStructHasMember) 293check_struct_has_member("struct tm" tm_gmtoff time.h HAVE_STRUCT_TM_TM_GMTOFF) 294 295# Check size of pointer to decide we need 8 bytes alignment adjustment. 296check_type_size("int *" SIZEOF_INT_P) 297check_type_size("time_t" SIZEOF_TIME_T) 298 299# Checks for library functions. 300include(CheckFunctionExists) 301check_function_exists(_Exit HAVE__EXIT) 302check_function_exists(accept4 HAVE_ACCEPT4) 303check_function_exists(mkostemp HAVE_MKOSTEMP) 304 305include(CheckSymbolExists) 306# XXX does this correctly detect initgroups (un)availability on cygwin? 307check_symbol_exists(initgroups grp.h HAVE_DECL_INITGROUPS) 308if(NOT HAVE_DECL_INITGROUPS AND HAVE_UNISTD_H) 309 # FreeBSD declares initgroups() in unistd.h 310 check_symbol_exists(initgroups unistd.h HAVE_DECL_INITGROUPS2) 311 if(HAVE_DECL_INITGROUPS2) 312 set(HAVE_DECL_INITGROUPS 1) 313 endif() 314endif() 315 316set(WARNCFLAGS) 317set(WARNCXXFLAGS) 318if(CMAKE_C_COMPILER_ID MATCHES "MSVC") 319 if(ENABLE_WERROR) 320 set(WARNCFLAGS /WX) 321 set(WARNCXXFLAGS /WX) 322 endif() 323else() 324 if(ENABLE_WERROR) 325 extract_valid_c_flags(WARNCFLAGS -Werror) 326 extract_valid_c_flags(WARNCXXFLAGS -Werror) 327 endif() 328 329 # For C compiler 330 extract_valid_c_flags(WARNCFLAGS 331 -Wall 332 -Wextra 333 -Wmissing-prototypes 334 -Wstrict-prototypes 335 -Wmissing-declarations 336 -Wpointer-arith 337 -Wdeclaration-after-statement 338 -Wformat-security 339 -Wwrite-strings 340 -Wshadow 341 -Winline 342 -Wnested-externs 343 -Wfloat-equal 344 -Wundef 345 -Wendif-labels 346 -Wempty-body 347 -Wcast-align 348 -Wclobbered 349 -Wvla 350 -Wpragmas 351 -Wunreachable-code 352 -Waddress 353 -Wattributes 354 -Wdiv-by-zero 355 -Wshorten-64-to-32 356 357 -Wconversion 358 -Wextended-offsetof 359 -Wformat-nonliteral 360 -Wlanguage-extension-token 361 -Wmissing-field-initializers 362 -Wmissing-noreturn 363 -Wmissing-variable-declarations 364 # Not used because we cannot change public structs 365 # -Wpadded 366 -Wsign-conversion 367 # Not used because this basically disallows default case 368 # -Wswitch-enum 369 -Wunreachable-code-break 370 -Wunused-macros 371 -Wunused-parameter 372 -Wredundant-decls 373 # Only work with Clang for the moment 374 -Wheader-guard 375 # This is required because we pass format string as "const char*. 376 -Wno-format-nonliteral 377 ) 378 379 extract_valid_cxx_flags(WARNCXXFLAGS 380 # For C++ compiler 381 -Wall 382 -Wformat-security 383 ) 384endif() 385 386if(ENABLE_STATIC_CRT) 387 foreach(lang C CXX) 388 foreach(suffix "" _DEBUG _MINSIZEREL _RELEASE _RELWITHDEBINFO) 389 set(var "CMAKE_${lang}_FLAGS${suffix}") 390 string(REPLACE "/MD" "/MT" ${var} "${${var}}") 391 endforeach() 392 endforeach() 393endif() 394 395if(ENABLE_DEBUG) 396 set(DEBUGBUILD 1) 397endif() 398 399# Some platform does not have working std::future. We disable 400# threading for those platforms. 401if(NOT ENABLE_THREADS OR NOT HAVE_STD_FUTURE) 402 set(NOTHREADS 1) 403endif() 404 405add_definitions(-DHAVE_CONFIG_H) 406configure_file(cmakeconfig.h.in config.h) 407# autotools-compatible names 408# Sphinx expects relative paths in the .rst files. Use the fact that the files 409# below are all one directory level deep. 410file(RELATIVE_PATH top_srcdir "${CMAKE_CURRENT_BINARY_DIR}/dir" "${CMAKE_CURRENT_SOURCE_DIR}") 411file(RELATIVE_PATH top_builddir "${CMAKE_CURRENT_BINARY_DIR}/dir" "${CMAKE_CURRENT_BINARY_DIR}") 412set(abs_top_srcdir "${CMAKE_CURRENT_SOURCE_DIR}") 413set(abs_top_builddir "${CMAKE_CURRENT_BINARY_DIR}") 414# libnghttp2.pc (pkg-config file) 415set(prefix "${CMAKE_INSTALL_PREFIX}") 416set(exec_prefix "${CMAKE_INSTALL_PREFIX}") 417set(libdir "${CMAKE_INSTALL_FULL_LIBDIR}") 418set(includedir "${CMAKE_INSTALL_FULL_INCLUDEDIR}") 419set(VERSION "${PACKAGE_VERSION}") 420# For init scripts and systemd service file (in contrib/) 421set(bindir "${CMAKE_INSTALL_FULL_BINDIR}") 422set(sbindir "${CMAKE_INSTALL_FULL_SBINDIR}") 423foreach(name 424 lib/libnghttp2.pc 425 lib/includes/nghttp2/nghttp2ver.h 426 src/libnghttp2_asio.pc 427 python/setup.py 428 integration-tests/config.go 429 integration-tests/setenv 430 doc/conf.py 431 doc/index.rst 432 doc/package_README.rst 433 doc/tutorial-client.rst 434 doc/tutorial-server.rst 435 doc/tutorial-hpack.rst 436 doc/nghttpx-howto.rst 437 doc/h2load-howto.rst 438 doc/libnghttp2_asio.rst 439 doc/python-apiref.rst 440 doc/building-android-binary.rst 441 doc/nghttp2.h.rst 442 doc/nghttp2ver.h.rst 443 doc/asio_http2.h.rst 444 doc/asio_http2_server.h.rst 445 doc/asio_http2_client.h.rst 446 doc/contribute.rst 447) 448 configure_file("${name}.in" "${name}" @ONLY) 449endforeach() 450 451include_directories( 452 "${CMAKE_CURRENT_BINARY_DIR}" # for config.h 453) 454# For use in src/CMakeLists.txt 455set(PKGDATADIR "${CMAKE_INSTALL_FULL_DATADIR}/${CMAKE_PROJECT_NAME}") 456 457install(FILES README.rst DESTINATION "${CMAKE_INSTALL_DOCDIR}") 458 459add_subdirectory(lib) 460#add_subdirectory(lib/includes) 461add_subdirectory(third-party) 462add_subdirectory(src) 463#add_subdirectory(src/includes) 464add_subdirectory(examples) 465add_subdirectory(python) 466add_subdirectory(tests) 467#add_subdirectory(tests/testdata) 468add_subdirectory(integration-tests) 469add_subdirectory(doc) 470add_subdirectory(contrib) 471add_subdirectory(script) 472 473 474string(TOUPPER "${CMAKE_BUILD_TYPE}" _build_type) 475message(STATUS "summary of build options: 476 477 Package version: ${VERSION} 478 Library version: ${LT_CURRENT}:${LT_REVISION}:${LT_AGE} 479 Install prefix: ${CMAKE_INSTALL_PREFIX} 480 Target system: ${CMAKE_SYSTEM_NAME} 481 Compiler: 482 Build type: ${CMAKE_BUILD_TYPE} 483 C compiler: ${CMAKE_C_COMPILER} 484 CFLAGS: ${CMAKE_C_FLAGS_${_build_type}} ${CMAKE_C_FLAGS} 485 C++ compiler: ${CMAKE_CXX_COMPILER} 486 CXXFLAGS: ${CMAKE_CXX_FLAGS_${_build_type}} ${CMAKE_CXX_FLAGS} 487 WARNCFLAGS: ${WARNCFLAGS} 488 CXX1XCXXFLAGS: ${CXX1XCXXFLAGS} 489 Python: 490 Python: ${PYTHON_EXECUTABLE} 491 PYTHON_VERSION: ${PYTHON_VERSION_STRING} 492 Library version:${PYTHONLIBS_VERSION_STRING} 493 Cython: ${CYTHON_EXECUTABLE} 494 Test: 495 CUnit: ${HAVE_CUNIT} (LIBS='${CUNIT_LIBRARIES}') 496 Failmalloc: ${ENABLE_FAILMALLOC} 497 Libs: 498 OpenSSL: ${HAVE_OPENSSL} (LIBS='${OPENSSL_LIBRARIES}') 499 Libxml2: ${HAVE_LIBXML2} (LIBS='${LIBXML2_LIBRARIES}') 500 Libev: ${HAVE_LIBEV} (LIBS='${LIBEV_LIBRARIES}') 501 Libc-ares: ${HAVE_LIBCARES} (LIBS='${LIBCARES_LIBRARIES}') 502 Libevent(SSL): ${HAVE_LIBEVENT_OPENSSL} (LIBS='${LIBEVENT_OPENSSL_LIBRARIES}') 503 Jansson: ${HAVE_JANSSON} (LIBS='${JANSSON_LIBRARIES}') 504 Jemalloc: ${HAVE_JEMALLOC} (LIBS='${JEMALLOC_LIBRARIES}') 505 Zlib: ${HAVE_ZLIB} (LIBS='${ZLIB_LIBRARIES}') 506 Systemd: ${HAVE_SYSTEMD} (LIBS='${SYSTEMD_LIBRARIES}') 507 Boost::System: ${Boost_SYSTEM_LIBRARY} 508 Boost::Thread: ${Boost_THREAD_LIBRARY} 509 Third-party: 510 http-parser: ${ENABLE_THIRD_PARTY} 511 MRuby: ${HAVE_MRUBY} 512 Neverbleed: ${HAVE_NEVERBLEED} 513 Features: 514 Applications: ${ENABLE_APP} 515 HPACK tools: ${ENABLE_HPACK_TOOLS} 516 Libnghttp2_asio:${ENABLE_ASIO_LIB} 517 Examples: ${ENABLE_EXAMPLES} 518 Python bindings:${ENABLE_PYTHON_BINDINGS} 519 Threading: ${ENABLE_THREADS} 520") 521if(ENABLE_LIB_ONLY_DISABLED_OTHERS) 522 message("Only the library will be built. To build other components " 523 "(such as applications and examples), set ENABLE_LIB_ONLY=OFF.") 524endif() 525