From 3dd57e1f594db4e1567ae3fd83e132bf294a175b Mon Sep 17 00:00:00 2001 From: Peter Wu Date: Tue, 16 Feb 2016 14:01:44 +0100 Subject: [PATCH] cmake: fix feature availability reporting Some detected libraries were not reported when a feature is disabled. This change removes unnecessary second find_package calls and sets HAVE_xxx immediately based on xxx_FOUND. --- CMakeLists.txt | 118 ++++++++++++++----------------------------------- 1 file changed, 34 insertions(+), 84 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index dc6a0b1a..94eed97e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -57,7 +57,8 @@ else() endif() find_package(Jansson 2.5 QUIET) set(ENABLE_HPACK_TOOLS_DEFAULT ${JANSSON_FOUND}) -find_package(Libevent 2.0.8 QUIET COMPONENTS openssl) +# 2.0.8 is required because we use evconnlistener_set_error_cb() +find_package(Libevent 2.0.8 QUIET COMPONENTS libevent openssl) set(ENABLE_EXAMPLES_DEFAULT ${LIBEVENT_OPENSSL_FOUND}) find_package(Cython QUIET) find_package(PythonLibs QUIET) @@ -67,7 +68,7 @@ else() set(ENABLE_PYTHON_BINDINGS_DEFAULT OFF) endif() -find_package(LibXml2 QUIET) +find_package(LibXml2 2.7.7 QUIET) set(WITH_LIBXML2_DEFAULT ${LIBXML2_FOUND}) find_package(Jemalloc QUIET) set(WITH_JEMALLOC_DEFAULT ${JEMALLOC_FOUND}) @@ -76,6 +77,13 @@ set(WITH_SPDYLAY_DEFAULT ${SPDYLAY_FOUND}) include(CMakeOptions.txt) +if(ENABLE_LIB_ONLY AND (ENABLE_APP OR ENABLE_HPACK_TOOLS OR ENABLE_EXAMPLES OR + ENABLE_PYTHON_BINDINGS)) + # Remember when disabled options are disabled for later diagnostics. + set(ENABLE_LIB_ONLY_DISABLED_OTHERS 1) +else() + set(ENABLE_LIB_ONLY_DISABLED_OTHERS 0) +endif() if(ENABLE_LIB_ONLY) set(ENABLE_APP OFF) set(ENABLE_HPACK_TOOLS OFF) @@ -130,10 +138,12 @@ cmake_pop_check_state() set(APP_LIBRARIES) if(ENABLE_PYTHON_BINDINGS) - find_package(Cython REQUIRED) - find_package(PythonLibs REQUIRED) + if(NOT (CYTHON_FOUND AND PYTHONLIBS_FOUND)) + message(FATAL_ERROR "python bindings were requested " + "(ENABLE_PYTHON_BINDINGS=1) but dependencies are not met.") + endif() if(NOT PYTHON_VERSION_STRING STREQUAL PYTHONLIBS_VERSION_STRING) - message(SEND_ERROR + message(FATAL_ERROR "Python executable and library must have the same version!" " Found Python ${PYTHON_VERSION_STRING} and" " PythonLibs ${PYTHONLIBS_VERSION_STRING}" @@ -158,83 +168,30 @@ endif() # APP_LIBRARIES if it is really specific to OpenSSL? find_package(CUnit 2.1) -if(CUNIT_FOUND) - enable_testing() - set(HAVE_CUNIT 1) -else() - set(HAVE_CUNIT 0) -endif() - -if(ENABLE_APP) - find_package(OpenSSL 1.0.1 REQUIRED) - find_package(Libev 4.15 REQUIRED) - find_package(ZLIB 1.2.3 REQUIRED) -endif() +enable_testing() +set(HAVE_CUNIT ${CUNIT_FOUND}) # openssl (for src) +set(HAVE_OPENSSL ${OPENSSL_FOUND}) if(OPENSSL_FOUND) - set(HAVE_OPENSSL 1) set(OPENSSL_INCLUDE_DIRS ${OPENSSL_INCLUDE_DIR}) -else() - set(HAVE_OPENSSL 0) endif() # libev (for src) -if(LIBEV_FOUND) - set(HAVE_LIBEV 1) -else() - set(HAVE_LIBEV 0) -endif() -if(ZLIB_FOUND) - set(HAVE_ZLIB 1) -else() - set(HAVE_ZLIB 0) -endif() - -if(ENABLE_EXAMPLES) - # libevent_openssl (for examples) - # 2.0.8 is required because we use evconnlistener_set_error_cb() - find_package(Libevent 2.0.8 REQUIRED COMPONENTS libevent openssl) +set(HAVE_LIBEV ${LIBEV_FOUND}) +set(HAVE_ZLIB ${ZLIB_FOUND}) +set(HAVE_LIBEVENT_OPENSSL ${LIBEVENT_FOUND}) +if(LIBEVENT_FOUND) + # Must both link the core and openssl libraries. set(LIBEVENT_OPENSSL_LIBRARIES ${LIBEVENT_LIBRARIES}) - set(HAVE_LIBEVENT_OPENSSL 1) -else() - set(HAVE_LIBEVENT_OPENSSL 0) endif() - -if(ENABLE_HPACK_TOOLS) - # jansson (for src/nghttp, src/deflatehd and src/inflatehd) - find_package(Jansson 2.5 REQUIRED) - set(HAVE_JANSSON 1) -else() - set(HAVE_JANSSON 0) -endif() - +# jansson (for src/nghttp, src/deflatehd and src/inflatehd) +set(HAVE_JANSSON ${JANSSON_FOUND}) # libxml2 (for src/nghttp) -if(WITH_LIBXML2) - find_package(LibXml2 2.7.7 REQUIRED) - set(HAVE_LIBXML2 1) -else() - set(HAVE_LIBXML2 0) -endif() - +set(HAVE_LIBXML2 ${LIBXML2_FOUND}) # jemalloc -if(WITH_JEMALLOC) - find_package(Jemalloc REQUIRED) - if(JEMALLOC_FOUND) - set(HAVE_JEMALLOC 1) - else() - set(HAVE_JEMALLOC 0) - endif() -else() - set(HAVE_JEMALLOC 0) -endif() - +set(HAVE_JEMALLOC ${JEMALLOC_FOUND}) # spdylay (for src/nghttpx and src/h2load) -if(WITH_SPDYLAY) - find_package(Spdylay 1.3.2 REQUIRED) - set(HAVE_SPDYLAY 1) -else() - set(HAVE_SPDYLAY 0) -endif() +set(HAVE_SPDYLAY ${SPDYLAY_FOUND}) if(ENABLE_ASIO_LIB) find_package(Boost 1.54.0 REQUIRED system thread) @@ -259,19 +216,8 @@ endif() if(ENABLE_EXAMPLES OR ENABLE_APP OR ENABLE_HPACK_TOOLS OR ENABLE_ASIO_LIB) set(ENABLE_THIRD_PARTY 1) # mruby (for src/nghttpx) - if(WITH_MRUBY) - set(HAVE_MRUBY 1) - set(MRUBY_LIBRARY - "${CMAKE_BINARY_DIR}/third-party/mruby/build/lib/${CMAKE_STATIC_LIBRARY_PREFIX}mruby${CMAKE_STATIC_LIBRARY_SUFFIX}" - ) - else() - set(HAVE_MRUBY 0) - endif() - if(WITH_NEVERBLEED) - set(HAVE_NEVERBLEED 1) - else() - set(HAVE_NEVERBLEED 0) - endif() + set(HAVE_MRUBY ${WITH_MRUBY}) + set(HAVE_NEVERBLEED ${WITH_NEVERBLEED}) else() set(HAVE_MRUBY 0) set(HAVE_NEVERBLEED 0) @@ -533,3 +479,7 @@ message(STATUS "summary of build options: Python bindings:${ENABLE_PYTHON_BINDINGS} Threading: ${ENABLE_THREADS} ") +if(ENABLE_LIB_ONLY_DISABLED_OTHERS) + message("Only the library will be built. To build other components " + "(such as applications and examples), set ENABLE_LIB_ONLY=OFF.") +endif()