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
This commit is contained in:
Cristian Morales Vega 2020-11-19 07:54:09 +00:00 committed by Daniel Stenberg
parent 73b63876b1
commit f21cc62832
No known key found for this signature in database
GPG Key ID: 5CC908FDB71E12C2
3 changed files with 29 additions and 26 deletions

View File

@ -107,3 +107,14 @@ macro(curl_nroff_check)
message(WARNING "Found no *nroff program") message(WARNING "Found no *nroff program")
endif() endif()
endmacro() 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()

View File

@ -623,28 +623,25 @@ check_library_exists_concat("idn2" idn2_lookup_ul HAVE_LIBIDN2)
# Check for symbol dlopen (same as HAVE_LIBDL) # Check for symbol dlopen (same as HAVE_LIBDL)
check_library_exists("${CURL_LIBS}" dlopen "" HAVE_DLOPEN) 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_LIBZ OFF)
set(HAVE_ZLIB_H OFF) set(HAVE_ZLIB_H OFF)
set(USE_ZLIB OFF) set(USE_ZLIB OFF)
if(CURL_ZLIB) optional_dependency(ZLIB)
find_package(ZLIB QUIET) if(ZLIB_FOUND)
if(ZLIB_FOUND) set(HAVE_ZLIB_H ON)
set(HAVE_ZLIB_H ON) set(HAVE_LIBZ ON)
set(HAVE_LIBZ ON) set(USE_ZLIB ON)
set(USE_ZLIB ON)
# Depend on ZLIB via imported targets if supported by the running # Depend on ZLIB via imported targets if supported by the running
# version of CMake. This allows our dependents to get our dependencies # version of CMake. This allows our dependents to get our dependencies
# transitively. # transitively.
if(NOT CMAKE_VERSION VERSION_LESS 3.4) if(NOT CMAKE_VERSION VERSION_LESS 3.4)
list(APPEND CURL_LIBS ZLIB::ZLIB) list(APPEND CURL_LIBS ZLIB::ZLIB)
else() else()
list(APPEND CURL_LIBS ${ZLIB_LIBRARIES}) list(APPEND CURL_LIBS ${ZLIB_LIBRARIES})
include_directories(${ZLIB_INCLUDE_DIRS}) include_directories(${ZLIB_INCLUDE_DIRS})
endif()
list(APPEND CMAKE_REQUIRED_INCLUDES ${ZLIB_INCLUDE_DIRS})
endif() endif()
list(APPEND CMAKE_REQUIRED_INCLUDES ${ZLIB_INCLUDE_DIRS})
endif() endif()
option(CURL_BROTLI "Set to ON to enable building curl with brotli support." OFF) option(CURL_BROTLI "Set to ON to enable building curl with brotli support." OFF)

View File

@ -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.6 uses -lpthread instead of Threads::Threads
15.7 generated .pc file contains strange entries 15.7 generated .pc file contains strange entries
15.8 libcurl.pc uses absolute library paths 15.8 libcurl.pc uses absolute library paths
15.9 doesn't fail if zlib support is requested but not found 15.9 cert paths autodetected when cross-compiling
15.10 cert paths autodetected when cross-compiling 15.10 libspsl is not supported
15.11 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 See https://github.com/curl/curl/issues/6169
15.9 doesn't fail if zlib support is requested but not found 15.9 cert paths autodetected when cross-compiling
See https://github.com/curl/curl/issues/6173
15.10 cert paths autodetected when cross-compiling
The autotools build disables the ca_path/ca_bundle detection when The autotools build disables the ca_path/ca_bundle detection when
cross-compiling. The cmake build keeps doing the detection. cross-compiling. The cmake build keeps doing the detection.
See https://github.com/curl/curl/issues/6178 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 See https://github.com/curl/curl/issues/6214