From: Cristian Morales Vega Date: Thu, 19 Nov 2020 07:54:09 +0000 (+0000) Subject: cmake: make CURL_ZLIB a tri-state variable X-Git-Tag: curl-7_74_0~52 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f21cc62832a9d5c521d10da9177b075bfed43f2f;p=thirdparty%2Fcurl.git cmake: make CURL_ZLIB a tri-state variable By differentiating between ON and AUTO it can make a missing zlib library a hard error when CURL_ZLIB=ON is used. Reviewed-by: Jakub Zakrzewski Closes #6221 Fixes #6173 --- diff --git a/CMake/Macros.cmake b/CMake/Macros.cmake index 6c29856c49..d57dd6ad57 100644 --- a/CMake/Macros.cmake +++ b/CMake/Macros.cmake @@ -107,3 +107,14 @@ macro(curl_nroff_check) message(WARNING "Found no *nroff program") endif() endmacro() + +macro(optional_dependency DEPENDENCY) + set(CURL_${DEPENDENCY} AUTO CACHE STRING "Build curl with ${DEPENDENCY} support (AUTO, ON or OFF)") + set_property(CACHE CURL_${DEPENDENCY} PROPERTY STRINGS AUTO ON OFF) + + if(CURL_${DEPENDENCY} STREQUAL AUTO) + find_package(${DEPENDENCY}) + elseif(CURL_${DEPENDENCY}) + find_package(${DEPENDENCY} REQUIRED) + endif() +endmacro() diff --git a/CMakeLists.txt b/CMakeLists.txt index 29c588bcd7..7a2ad440bd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -623,28 +623,25 @@ check_library_exists_concat("idn2" idn2_lookup_ul HAVE_LIBIDN2) # Check for symbol dlopen (same as HAVE_LIBDL) check_library_exists("${CURL_LIBS}" dlopen "" HAVE_DLOPEN) -option(CURL_ZLIB "Set to ON to enable building curl with zlib support." ON) set(HAVE_LIBZ OFF) set(HAVE_ZLIB_H OFF) set(USE_ZLIB OFF) -if(CURL_ZLIB) - find_package(ZLIB QUIET) - if(ZLIB_FOUND) - set(HAVE_ZLIB_H ON) - set(HAVE_LIBZ ON) - set(USE_ZLIB ON) - - # Depend on ZLIB via imported targets if supported by the running - # version of CMake. This allows our dependents to get our dependencies - # transitively. - if(NOT CMAKE_VERSION VERSION_LESS 3.4) - list(APPEND CURL_LIBS ZLIB::ZLIB) - else() - list(APPEND CURL_LIBS ${ZLIB_LIBRARIES}) - include_directories(${ZLIB_INCLUDE_DIRS}) - endif() - list(APPEND CMAKE_REQUIRED_INCLUDES ${ZLIB_INCLUDE_DIRS}) +optional_dependency(ZLIB) +if(ZLIB_FOUND) + set(HAVE_ZLIB_H ON) + set(HAVE_LIBZ ON) + set(USE_ZLIB ON) + + # Depend on ZLIB via imported targets if supported by the running + # version of CMake. This allows our dependents to get our dependencies + # transitively. + if(NOT CMAKE_VERSION VERSION_LESS 3.4) + list(APPEND CURL_LIBS ZLIB::ZLIB) + else() + list(APPEND CURL_LIBS ${ZLIB_LIBRARIES}) + include_directories(${ZLIB_INCLUDE_DIRS}) endif() + list(APPEND CMAKE_REQUIRED_INCLUDES ${ZLIB_INCLUDE_DIRS}) endif() option(CURL_BROTLI "Set to ON to enable building curl with brotli support." OFF) diff --git a/docs/KNOWN_BUGS b/docs/KNOWN_BUGS index 04ada571d9..c427b3fb6d 100644 --- a/docs/KNOWN_BUGS +++ b/docs/KNOWN_BUGS @@ -129,9 +129,8 @@ problems may have been fixed or changed somewhat since this was written! 15.6 uses -lpthread instead of Threads::Threads 15.7 generated .pc file contains strange entries 15.8 libcurl.pc uses absolute library paths - 15.9 doesn't fail if zlib support is requested but not found - 15.10 cert paths autodetected when cross-compiling - 15.11 libspsl is not supported + 15.9 cert paths autodetected when cross-compiling + 15.10 libspsl is not supported ============================================================================== @@ -887,17 +886,13 @@ problems may have been fixed or changed somewhat since this was written! See https://github.com/curl/curl/issues/6169 -15.9 doesn't fail if zlib support is requested but not found - - See https://github.com/curl/curl/issues/6173 - -15.10 cert paths autodetected when cross-compiling +15.9 cert paths autodetected when cross-compiling The autotools build disables the ca_path/ca_bundle detection when cross-compiling. The cmake build keeps doing the detection. See https://github.com/curl/curl/issues/6178 -15.11 libspsl is not supported +15.10 libspsl is not supported See https://github.com/curl/curl/issues/6214