From a56ab9dbc84d6f20c3a91af8a11bc0edc2897b56 Mon Sep 17 00:00:00 2001 From: Viktor Szakats Date: Wed, 25 Mar 2026 20:05:32 +0100 Subject: [PATCH] cmake: add CMake Config-based dependency detection for c-ares, wolfSSL For wolfSSL it requires v5.2.1+, and with 5.9.0+ it's also supported when wolfSSL was built with autotools. Follow-up to 8fce3e17e6cb310cd6dbe38ff14869b8fe5827d2 #20814 Closes #21098 --- CMake/FindCares.cmake | 22 ++++++++++++++++++---- CMake/FindWolfSSL.cmake | 18 ++++++++++++++---- docs/INSTALL-CMAKE.md | 6 +++--- 3 files changed, 35 insertions(+), 11 deletions(-) diff --git a/CMake/FindCares.cmake b/CMake/FindCares.cmake index 19b6a03103..26efdf87ff 100644 --- a/CMake/FindCares.cmake +++ b/CMake/FindCares.cmake @@ -37,11 +37,15 @@ set(_cares_pc_requires "libcares") -if(CURL_USE_PKGCONFIG AND - NOT DEFINED CARES_INCLUDE_DIR AND +if(NOT DEFINED CARES_INCLUDE_DIR AND NOT DEFINED CARES_LIBRARY) - find_package(PkgConfig QUIET) - pkg_check_modules(_cares ${_cares_pc_requires}) + if(CURL_USE_PKGCONFIG) + find_package(PkgConfig QUIET) + pkg_check_modules(_cares ${_cares_pc_requires}) + endif() + if(NOT _cares_FOUND AND CURL_USE_CMAKECONFIG) + find_package(c-ares CONFIG QUIET) + endif() endif() if(_cares_FOUND) @@ -55,6 +59,16 @@ if(_cares_FOUND) set(_cares_LIBRARIES "${_cares_STATIC_LIBRARIES}") endif() message(STATUS "Found Cares (via pkg-config): ${_cares_INCLUDE_DIRS} (found version \"${CARES_VERSION}\")") +elseif(c-ares_CONFIG) + set(Cares_FOUND TRUE) + set(CARES_FOUND TRUE) + set(CARES_VERSION ${c-ares_VERSION}) + if(CARES_USE_STATIC_LIBS) + set(_cares_LIBRARIES c-ares::cares_static) + else() + set(_cares_LIBRARIES c-ares::cares) + endif() + message(STATUS "Found Cares (via CMake Config): ${c-ares_CONFIG} (found version \"${CARES_VERSION}\")") else() find_path(CARES_INCLUDE_DIR NAMES "ares.h") if(CARES_USE_STATIC_LIBS) diff --git a/CMake/FindWolfSSL.cmake b/CMake/FindWolfSSL.cmake index 606a67b8be..964320ad6b 100644 --- a/CMake/FindWolfSSL.cmake +++ b/CMake/FindWolfSSL.cmake @@ -45,11 +45,15 @@ endif() set(_wolfssl_pc_requires "wolfssl") -if(CURL_USE_PKGCONFIG AND - NOT DEFINED WOLFSSL_INCLUDE_DIR AND +if(NOT DEFINED WOLFSSL_INCLUDE_DIR AND NOT DEFINED WOLFSSL_LIBRARY) - find_package(PkgConfig QUIET) - pkg_check_modules(_wolfssl ${_wolfssl_pc_requires}) + if(CURL_USE_PKGCONFIG) + find_package(PkgConfig QUIET) + pkg_check_modules(_wolfssl ${_wolfssl_pc_requires}) + endif() + if(NOT _wolfssl_FOUND AND CURL_USE_CMAKECONFIG) + find_package(wolfssl CONFIG QUIET) + endif() endif() if(_wolfssl_FOUND) @@ -57,6 +61,12 @@ if(_wolfssl_FOUND) set(WOLFSSL_FOUND TRUE) set(WOLFSSL_VERSION ${_wolfssl_VERSION}) message(STATUS "Found WolfSSL (via pkg-config): ${_wolfssl_INCLUDE_DIRS} (found version \"${WOLFSSL_VERSION}\")") +elseif(wolfssl_CONFIG) + set(WolfSSL_FOUND TRUE) + set(WOLFSSL_FOUND TRUE) + set(WOLFSSL_VERSION ${wolfssl_VERSION}) + set(_wolfssl_LIBRARIES wolfssl::wolfssl) + message(STATUS "Found WolfSSL (via CMake Config): ${wolfssl_CONFIG} (found version \"${WOLFSSL_VERSION}\")") else() find_path(WOLFSSL_INCLUDE_DIR NAMES "wolfssl/ssl.h") find_library(WOLFSSL_LIBRARY NAMES "wolfssl") diff --git a/docs/INSTALL-CMAKE.md b/docs/INSTALL-CMAKE.md index 7bbc27749e..7585088f54 100644 --- a/docs/INSTALL-CMAKE.md +++ b/docs/INSTALL-CMAKE.md @@ -393,9 +393,9 @@ Details via CMake - `_DIR`: Absolute path to `` CMake Config directory where `*.cmake` files reside. Used when `CURL_USE_CMAKECONFIG` is enabled. `` may be: - `Libssh2`, `MbedTLS`, `NGHTTP2`, `NGHTTP3`, - `NGTCP2` 1.19.0+ (with non-fork OpenSSL only), - `Zstd` 1.4.5+. + `c-ares`, `Libssh2`, `MbedTLS`, `NGHTTP2`, `NGHTTP3`, + `NGTCP2` for 1.19.0+ (with non-fork OpenSSL only), + `wolfssl` for 5.2.1+, `Zstd` for 1.4.5+. ## Dependency options (tools)