diff --git a/CMake/curl-config.cmake.in b/CMake/curl-config.cmake.in index 2ce8625..a0c039c 100644 --- a/CMake/curl-config.cmake.in +++ b/CMake/curl-config.cmake.in @@ -31,6 +31,19 @@ if(@USE_ZLIB@) find_dependency(ZLIB @ZLIB_VERSION_MAJOR@) endif() +if("@USE_ARES@") + find_dependency(c-ares CONFIG) +endif() +if("@USE_LIBSSH2@") + find_dependency(Libssh2 CONFIG) +endif() +if("@HAVE_BROTLI@") + find_dependency(unofficial-brotli CONFIG) +endif() +if("@HAVE_ZSTD@") + find_dependency(zstd CONFIG) +endif() + include("${CMAKE_CURRENT_LIST_DIR}/@TARGETS_EXPORT_NAME@.cmake") check_required_components("@PROJECT_NAME@") diff --git a/CMakeLists.txt b/CMakeLists.txt index f9a775a..415206c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -163,7 +163,8 @@ set(LIBCURL_PC_REQUIRES_PRIVATE "") if(ENABLE_ARES) set(USE_ARES 1) - find_package(CARES REQUIRED) + find_package(CARES NAMES c-ares CONFIG REQUIRED) + set(CARES_LIBRARY c-ares::cares) list(APPEND CURL_LIBS ${CARES_LIBRARY}) list(APPEND LIBCURL_PC_REQUIRES_PRIVATE "libcares") endif() @@ -591,7 +592,9 @@ endif() option(CURL_BROTLI "Set to ON to enable building curl with brotli support." OFF) set(HAVE_BROTLI OFF) if(CURL_BROTLI) - find_package(Brotli REQUIRED) + find_package(BROTLI NAMES unofficial-brotli REQUIRED) + set(BROTLI_INCLUDE_DIRS "") + set(BROTLI_LIBRARIES "unofficial::brotli::brotlidec") if(BROTLI_FOUND) set(HAVE_BROTLI ON) list(APPEND CURL_LIBS ${BROTLI_LIBRARIES}) @@ -604,7 +607,9 @@ endif() option(CURL_ZSTD "Set to ON to enable building curl with zstd support." OFF) set(HAVE_ZSTD OFF) if(CURL_ZSTD) - find_package(Zstd REQUIRED) + find_package(Zstd NAMES zstd REQUIRED) + set(Zstd_INCLUDE_DIRS "") + set(Zstd_LIBRARIES zstd::libzstd) if(Zstd_FOUND AND NOT Zstd_VERSION VERSION_LESS "1.0.0") set(HAVE_ZSTD ON) list(APPEND CURL_LIBS ${Zstd_LIBRARIES}) @@ -913,8 +918,12 @@ endif() # Check for idn2 option(USE_LIBIDN2 "Use libidn2 for IDN support" ON) if(USE_LIBIDN2) - check_library_exists("idn2" "idn2_lookup_ul" "" HAVE_LIBIDN2) + find_package(PkgConfig REQUIRED) + pkg_check_modules(LIBIDN2 REQUIRED libidn2) + set(HAVE_LIBIDN2 TRUE) if(HAVE_LIBIDN2) + set(HAVE_IDN2_H TRUE) + elseif(0) set(LIBIDN2_LINK_LIBRARIES "idn2") check_include_file_concat("idn2.h" HAVE_IDN2_H) endif() @@ -963,12 +972,19 @@ mark_as_advanced(CURL_USE_LIBPSL) set(USE_LIBPSL OFF) if(CURL_USE_LIBPSL) - find_package(LibPSL) + find_package(PkgConfig REQUIRED) + pkg_check_modules(LIBPSL REQUIRED libpsl) if(LIBPSL_FOUND) - list(APPEND CURL_LIBS ${LIBPSL_LIBRARY}) + # Remove standard win32 libs pulled in transitively from icu + string(REPLACE " " "|" win32_standard_libraries "/(${CMAKE_C_STANDARD_LIBRARIES})[.]lib\$") + foreach(lib IN LISTS LIBPSL_LINK_LIBRARIES) + string(TOLOWER "${lib}" lib_lower) + if(lib_lower MATCHES win32_standard_libraries) + list(REMOVE_ITEM LIBPSL_LINK_LIBRARIES "${lib}") + endif() + endforeach() + list(APPEND CURL_LIBS ${LIBPSL_LINK_LIBRARIES}) list(APPEND LIBCURL_PC_REQUIRES_PRIVATE "libpsl") - list(APPEND CMAKE_REQUIRED_INCLUDES "${LIBPSL_INCLUDE_DIR}") - include_directories("${LIBPSL_INCLUDE_DIR}") set(USE_LIBPSL ON) endif() endif() @@ -979,7 +995,13 @@ mark_as_advanced(CURL_USE_LIBSSH2) set(USE_LIBSSH2 OFF) if(CURL_USE_LIBSSH2) - find_package(LibSSH2) + find_package(LIBSSH2 NAMES Libssh2 REQUIRED) + if(TARGET Libssh2::libssh2_shared) + set(LIBSSH2_LIBRARY Libssh2::libssh2_shared) + else() + set(LIBSSH2_LIBRARY Libssh2::libssh2_static) + endif() + get_target_property(LIBSSH2_INCLUDE_DIR "${LIBSSH2_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES) if(LIBSSH2_FOUND) list(APPEND CURL_LIBS ${LIBSSH2_LIBRARY}) list(APPEND LIBCURL_PC_REQUIRES_PRIVATE "libssh2") @@ -1012,11 +1034,24 @@ if(CURL_USE_GSASL) set(USE_GSASL ON) endif() +option(CURL_USE_GSASL "Use GSASL implementation" OFF) +mark_as_advanced(CURL_USE_GSASL) +if(CURL_USE_GSASL) + find_package(PkgConfig REQUIRED) + pkg_check_modules(GSASL REQUIRED libgsasl) + list(APPEND CURL_LIBS ${GSASL_LINK_LIBRARIES}) + set(USE_GSASL ON) +endif() + option(CURL_USE_GSSAPI "Use GSSAPI implementation (right now only Heimdal is supported with CMake build)" OFF) mark_as_advanced(CURL_USE_GSSAPI) if(CURL_USE_GSSAPI) - find_package(GSS) + find_package(PkgConfig REQUIRED) + pkg_check_modules(GSS REQUIRED krb5-gssapi) + list(APPEND CURL_LIBS ${GSS_LINK_LIBRARIES}) + list(APPEND CURL_LIBS resolv) # Fixme: move to krb5 pc files + pkg_get_variable(GSS_FLAVOUR krb5-gssapi vendor) set(HAVE_GSSAPI ${GSS_FOUND}) if(GSS_FOUND) @@ -1028,6 +1063,7 @@ if(CURL_USE_GSSAPI) check_include_file_concat("gssapi/gssapi_generic.h" HAVE_GSSAPI_GSSAPI_GENERIC_H) check_include_file_concat("gssapi/gssapi_krb5.h" HAVE_GSSAPI_GSSAPI_KRB5_H) + elseif(0) if(NOT GSS_FLAVOUR STREQUAL "Heimdal") # MIT set(_INCLUDE_LIST "")