mirror of
https://github.com/curl/curl.git
synced 2026-05-19 13:06:20 +03:00
cmake: tidy up and document feature detections in dependencies
- update text on dependency feature detection variables, and move it to its own section in `docs/INSTALL-CMAKE.md`. Ref: #17032 (Discussion) - tidy up descriptions/comments, alpha-sort. - move comment to its own section in `docs/INSTALL-CMAKE.md`. - split `HAVE_SSL_SET_QUIC_USE_LEGACY_CODEPOINT` to distinct names for each TLS backend API. To make the names more stable and to sync them with autotools. Follow-up to07cc50f8eb#17018 Follow-up to342a654ef3#15873 - drop redundant condition while detecting QUICTLS API. Follow-up to07cc50f8eb#17018 - add config-comparison exception for `HAVE_SSL_SET_QUIC_TLS_CBS`. Follow-up to5eefdd71a3#17027 - detect `wolfSSL_get_peer_certificate` like autotools does. - detect `wolfSSL_UseALPN` like autotools does. Closes #17082
This commit is contained in:
parent
7bf576064c
commit
4bfc379b90
4 changed files with 61 additions and 31 deletions
1
.github/scripts/cmp-config.pl
vendored
1
.github/scripts/cmp-config.pl
vendored
|
|
@ -67,6 +67,7 @@ my %remove = (
|
|||
'#define HAVE_OPENSSL_SSL_H 1' => 1,
|
||||
'#define HAVE_OPENSSL_X509_H 1' => 1,
|
||||
'#define HAVE_QUICHE_H 1' => 1,
|
||||
'#define HAVE_SSL_SET_QUIC_TLS_CBS 1' => 1,
|
||||
'#define HAVE_SSL_SET_QUIC_USE_LEGACY_CODEPOINT 1' => 1,
|
||||
'#define HAVE_STDINT_H 1' => 1,
|
||||
'#define HAVE_STDIO_H 1' => 1,
|
||||
|
|
|
|||
|
|
@ -23,26 +23,6 @@
|
|||
###########################################################################
|
||||
# by Tetetest and Sukender (Benoit Neil)
|
||||
|
||||
# Note: By default this CMake build script detects the version of some
|
||||
# dependencies using `check_symbol_exists`. Those checks do not work in
|
||||
# the case that both CURL and its dependency are included as sub-projects
|
||||
# in a larger build using `FetchContent`. To support that case, additional
|
||||
# variables may be defined by the parent project, ideally in the "extra"
|
||||
# find package redirect file:
|
||||
# https://cmake.org/cmake/help/latest/module/FetchContent.html#integrating-with-find-package
|
||||
#
|
||||
# The following variables are available:
|
||||
# HAVE_SSL_SET0_WBIO: `SSL_set0_wbio` present in OpenSSL
|
||||
# HAVE_OPENSSL_SRP: `SSL_CTX_set_srp_username` present in OpenSSL
|
||||
# HAVE_GNUTLS_SRP: `gnutls_srp_verifier` present in GnuTLS
|
||||
# HAVE_SSL_SET_QUIC_USE_LEGACY_CODEPOINT: `SSL_set_quic_use_legacy_codepoint` present in OpenSSL/wolfSSL
|
||||
# HAVE_QUICHE_CONN_SET_QLOG_FD: `quiche_conn_set_qlog_fd` present in quiche
|
||||
# HAVE_ECH: ECH API checks for OpenSSL, BoringSSL, wolfSSL or rustls-ffi
|
||||
#
|
||||
# For each of the above variables, if the variable is DEFINED (either
|
||||
# to ON or OFF), the symbol detection is skipped. If the variable is
|
||||
# NOT DEFINED, the symbol detection is performed.
|
||||
|
||||
cmake_minimum_required(VERSION 3.7...3.16 FATAL_ERROR)
|
||||
message(STATUS "Using CMake version ${CMAKE_VERSION}")
|
||||
|
||||
|
|
@ -1048,26 +1028,32 @@ macro(curl_openssl_check_exists)
|
|||
cmake_pop_check_state()
|
||||
endmacro()
|
||||
|
||||
# Ensure that the OpenSSL fork actually supports QUIC.
|
||||
# Ensure that OpenSSL (or fork) or wolfSSL actually supports QUICTLS API.
|
||||
macro(curl_openssl_check_quic)
|
||||
if(NOT DEFINED HAVE_SSL_SET_QUIC_USE_LEGACY_CODEPOINT)
|
||||
if(USE_OPENSSL AND NOT USE_OPENSSL_QUIC)
|
||||
if(OPENSSL_VERSION VERSION_GREATER_EQUAL 3.5.0 AND NOT USE_OPENSSL_QUIC)
|
||||
curl_openssl_check_exists("SSL_set_quic_tls_cbs" HAVE_SSL_SET_QUIC_USE_LEGACY_CODEPOINT)
|
||||
else()
|
||||
if(USE_OPENSSL AND NOT USE_OPENSSL_QUIC)
|
||||
if(OPENSSL_VERSION VERSION_GREATER_EQUAL 3.5.0)
|
||||
if(NOT DEFINED HAVE_SSL_SET_QUIC_TLS_CBS)
|
||||
curl_openssl_check_exists("SSL_set_quic_tls_cbs" HAVE_SSL_SET_QUIC_TLS_CBS)
|
||||
endif()
|
||||
else()
|
||||
if(NOT DEFINED HAVE_SSL_SET_QUIC_USE_LEGACY_CODEPOINT)
|
||||
curl_openssl_check_exists("SSL_set_quic_use_legacy_codepoint" HAVE_SSL_SET_QUIC_USE_LEGACY_CODEPOINT)
|
||||
endif()
|
||||
endif()
|
||||
if(USE_WOLFSSL)
|
||||
curl_openssl_check_exists("wolfSSL_set_quic_use_legacy_codepoint" HAVE_SSL_SET_QUIC_USE_LEGACY_CODEPOINT)
|
||||
endif()
|
||||
endif()
|
||||
if(NOT HAVE_SSL_SET_QUIC_USE_LEGACY_CODEPOINT)
|
||||
message(FATAL_ERROR "QUIC support is missing in OpenSSL fork. Try setting -DOPENSSL_ROOT_DIR")
|
||||
if(USE_WOLFSSL AND NOT DEFINED HAVE_WOLFSSL_SET_QUIC_USE_LEGACY_CODEPOINT)
|
||||
curl_openssl_check_exists("wolfSSL_set_quic_use_legacy_codepoint" HAVE_WOLFSSL_SET_QUIC_USE_LEGACY_CODEPOINT)
|
||||
endif()
|
||||
if(NOT HAVE_SSL_SET_QUIC_TLS_CBS AND
|
||||
NOT HAVE_SSL_SET_QUIC_USE_LEGACY_CODEPOINT AND
|
||||
NOT HAVE_WOLFSSL_SET_QUIC_USE_LEGACY_CODEPOINT)
|
||||
message(FATAL_ERROR "QUICTLS API support is missing from OpenSSL/fork/wolfSSL. Try setting -DOPENSSL_ROOT_DIR")
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
if(USE_WOLFSSL)
|
||||
curl_openssl_check_exists("wolfSSL_get_peer_certificate" HAVE_WOLFSSL_GET_PEER_CERTIFICATE)
|
||||
curl_openssl_check_exists("wolfSSL_UseALPN" HAVE_WOLFSSL_USEALPN)
|
||||
curl_openssl_check_exists("wolfSSL_DES_ecb_encrypt" HAVE_WOLFSSL_DES_ECB_ENCRYPT)
|
||||
curl_openssl_check_exists("wolfSSL_BIO_new" HAVE_WOLFSSL_BIO)
|
||||
curl_openssl_check_exists("wolfSSL_BIO_set_shutdown" HAVE_WOLFSSL_FULL_BIO)
|
||||
|
|
|
|||
|
|
@ -464,6 +464,43 @@ Details via CMake
|
|||
- `TEST_NGHTTPX`: Default: `nghttpx`
|
||||
- `VSFTPD`: Default: `vsftps`
|
||||
|
||||
## Feature detection variables
|
||||
|
||||
By default this CMake build script detects the version of some dependencies
|
||||
using `check_symbol_exists`. Those checks do not work in the case that both
|
||||
CURL and its dependency are included as sub-projects in a larger build using
|
||||
`FetchContent`. To support that case, additional variables may be defined by
|
||||
the parent project, ideally in the "extra" find package redirect file:
|
||||
<https://cmake.org/cmake/help/latest/module/FetchContent.html#integrating-with-find-package>
|
||||
|
||||
Available variables:
|
||||
|
||||
- `HAVE_GNUTLS_SRP`: `gnutls_srp_verifier` present in GnuTLS.
|
||||
- `HAVE_GSS_C_NT_HOSTBASED_SERVICE`: `GSS_C_NT_HOSTBASED_SERVICE` present in GSS/Heimdal/Kerberos.
|
||||
- `HAVE_LDAP_INIT_FD`: `ldap_init_fd` present in LDAP library.
|
||||
- `HAVE_LDAP_URL_PARSE`: `ldap_url_parse` present in LDAP library.
|
||||
- `HAVE_OPENSSL_SRP`: `SSL_CTX_set_srp_username` present in OpenSSL (or fork).
|
||||
- `HAVE_QUICHE_CONN_SET_QLOG_FD`: `quiche_conn_set_qlog_fd` present in quiche.
|
||||
- `HAVE_RUSTLS_SUPPORTED_HPKE`: `rustls_supported_hpke` present in Rustls (unused if Rustls is detected via `pkg-config`).
|
||||
- `HAVE_SSL_SET0_WBIO`: `SSL_set0_wbio` present in OpenSSL (or fork).
|
||||
- `HAVE_SSL_SET1_ECH_CONFIG_LIST`: `SSL_set1_ech_config_list` present in OpenSSL (or fork).
|
||||
- `HAVE_SSL_SET_QUIC_TLS_CBS`: `SSL_set_quic_tls_cbs` in OpenSSL.
|
||||
- `HAVE_SSL_SET_QUIC_USE_LEGACY_CODEPOINT`: `SSL_set_quic_use_legacy_codepoint` in OpenSSL fork.
|
||||
- `HAVE_WOLFSSL_BIO`: `wolfSSL_BIO_new` present in wolfSSL.
|
||||
- `HAVE_WOLFSSL_CTX_GENERATEECHCONFIG`: `wolfSSL_CTX_GenerateEchConfig` present in wolfSSL.
|
||||
- `HAVE_WOLFSSL_DES_ECB_ENCRYPT`: `wolfSSL_DES_ecb_encrypt` present in wolfSSL.
|
||||
- `HAVE_WOLFSSL_FULL_BIO`: `wolfSSL_BIO_set_shutdown` present in wolfSSL.
|
||||
- `HAVE_WOLFSSL_GET_PEER_CERTIFICATE`: `wolfSSL_get_peer_certificate` present in wolfSSL.
|
||||
- `HAVE_WOLFSSL_SET_QUIC_USE_LEGACY_CODEPOINT`:
|
||||
`wolfSSL_set_quic_use_legacy_codepoint` present in wolfSSL.
|
||||
- `HAVE_WOLFSSL_USEALPN`: `wolfSSL_UseALPN` present in wolfSSL.
|
||||
|
||||
For each of the above variables, if the variable is *defined* (either to `ON`
|
||||
or `OFF`), the symbol detection is skipped. If the variable is *not defined*,
|
||||
the feature detection is performed.
|
||||
|
||||
Note: These variables are internal and subject to change.
|
||||
|
||||
# Migrating from Visual Studio IDE Project Files
|
||||
|
||||
We recommend using CMake to build curl with MSVC.
|
||||
|
|
|
|||
|
|
@ -703,6 +703,12 @@ ${SIZEOF_TIME_T_CODE}
|
|||
/* if wolfSSL is enabled */
|
||||
#cmakedefine USE_WOLFSSL 1
|
||||
|
||||
/* if wolfSSL has the wolfSSL_get_peer_certificate function. */
|
||||
#cmakedefine HAVE_WOLFSSL_GET_PEER_CERTIFICATE 1
|
||||
|
||||
/* if wolfSSL has the wolfSSL_UseALPN function. */
|
||||
#cmakedefine HAVE_WOLFSSL_USEALPN 1
|
||||
|
||||
/* if wolfSSL has the wolfSSL_DES_ecb_encrypt function. */
|
||||
#cmakedefine HAVE_WOLFSSL_DES_ECB_ENCRYPT 1
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue