cmake: add CURL_USE_PKGCONFIG option

Add option to control whether to use `pkg-config` to detect
dependencies. Curl's CMake uses `pkg-config` by default for all targets
except for MSVC without vcpkg.

With the CMake option `-DCURL_USE_PKGCONFIG=ON` you can override it to
use `pkg-config` always.

If `pkg-config` is causing issues, e.g. in cross-builds or other cases,
`-DCURL_USE_PKGCONFIG=OFF` disables all use of `pkg-config`.

Also add it to `curl-config.cmake`. Not yet used, but will be once curl
starts referencing any curl-specific `Find*` module from this public
script.

Follow-up to 9dfdc6ff42 #14483
Closes #14504
This commit is contained in:
Viktor Szakats 2024-08-12 15:35:50 +02:00
parent fdc3e88bf0
commit b910122fe3
No known key found for this signature in database
GPG Key ID: B5ABD165E2AEF201
11 changed files with 30 additions and 14 deletions

View File

@ -53,7 +53,7 @@ set(_gss_root_hints
# Try to find library using system pkg-config if user did not specify root dir
if(NOT GSS_ROOT_DIR AND NOT "$ENV{GSS_ROOT_DIR}")
if(NOT MSVC OR VCPKG_TOOLCHAIN)
if(CURL_USE_PKGCONFIG)
find_package(PkgConfig QUIET)
pkg_search_module(_GSS ${_mit_modname} ${_heimdal_modname})
list(APPEND _gss_root_hints "${_GSS_PREFIX}")

View File

@ -29,7 +29,7 @@
# MSH3_INCLUDE_DIRS The msh3 include directories
# MSH3_LIBRARIES The libraries needed to use msh3
if(NOT MSVC OR VCPKG_TOOLCHAIN)
if(CURL_USE_PKGCONFIG)
find_package(PkgConfig QUIET)
pkg_search_module(PC_MSH3 "libmsh3")
endif()

View File

@ -30,7 +30,7 @@
# NGHTTP2_LIBRARIES The libraries needed to use nghttp2
# NGHTTP2_VERSION Version of nghttp2
if(NOT MSVC OR VCPKG_TOOLCHAIN)
if(CURL_USE_PKGCONFIG)
find_package(PkgConfig QUIET)
pkg_search_module(PC_NGHTTP2 "libnghttp2")
endif()

View File

@ -30,7 +30,7 @@
# NGHTTP3_LIBRARIES The libraries needed to use nghttp3
# NGHTTP3_VERSION Version of nghttp3
if(NOT MSVC OR VCPKG_TOOLCHAIN)
if(CURL_USE_PKGCONFIG)
find_package(PkgConfig QUIET)
pkg_search_module(PC_NGHTTP3 "libnghttp3")
endif()

View File

@ -38,7 +38,7 @@
# NGTCP2_LIBRARIES The libraries needed to use ngtcp2
# NGTCP2_VERSION Version of ngtcp2
if(NOT MSVC OR VCPKG_TOOLCHAIN)
if(CURL_USE_PKGCONFIG)
find_package(PkgConfig QUIET)
pkg_search_module(PC_NGTCP2 "libngtcp2")
endif()
@ -72,7 +72,7 @@ if(NGTCP2_FIND_COMPONENTS)
if(NGTCP2_CRYPTO_BACKEND)
string(TOLOWER "ngtcp2_crypto_${NGTCP2_CRYPTO_BACKEND}" _crypto_library)
if(NOT MSVC OR VCPKG_TOOLCHAIN)
if(CURL_USE_PKGCONFIG)
pkg_search_module(PC_${_crypto_library} "lib${_crypto_library}")
endif()
find_library(${_crypto_library}_LIBRARY

View File

@ -30,7 +30,7 @@
# NETTLE_LIBRARIES The nettle library names
# NETTLE_VERSION Version of nettle
if(NOT MSVC OR VCPKG_TOOLCHAIN)
if(CURL_USE_PKGCONFIG)
find_package(PkgConfig QUIET)
pkg_search_module(NETTLE "nettle")
endif()

View File

@ -29,7 +29,7 @@
# QUICHE_INCLUDE_DIRS The quiche include directories
# QUICHE_LIBRARIES The libraries needed to use quiche
if(NOT MSVC OR VCPKG_TOOLCHAIN)
if(CURL_USE_PKGCONFIG)
find_package(PkgConfig QUIET)
pkg_search_module(PC_QUICHE "quiche")
endif()

View File

@ -30,7 +30,7 @@
# WolfSSL_LIBRARIES The wolfssl library names
# WolfSSL_VERSION Version of wolfssl
if(NOT MSVC OR VCPKG_TOOLCHAIN)
if(CURL_USE_PKGCONFIG)
find_package(PkgConfig QUIET)
pkg_search_module(PC_WOLFSSL QUIET "wolfssl")
endif()

View File

@ -30,7 +30,7 @@
# Zstd_LIBRARIES The libraries needed to use zstd
# Zstd_VERSION Version of zstd
if(NOT MSVC OR VCPKG_TOOLCHAIN)
if(CURL_USE_PKGCONFIG)
find_package(PkgConfig QUIET)
pkg_search_module(PC_Zstd "libzstd")
endif()

View File

@ -23,6 +23,14 @@
###########################################################################
@PACKAGE_INIT@
if(NOT DEFINED CURL_USE_PKGCONFIG)
if(NOT MSVC OR VCPKG_TOOLCHAIN)
set(CURL_USE_PKGCONFIG ON)
else()
set(CURL_USE_PKGCONFIG OFF)
endif()
endif()
include(CMakeFindDependencyMacro)
if(@USE_OPENSSL@)
find_dependency(OpenSSL @OPENSSL_VERSION_MAJOR@)

View File

@ -201,6 +201,14 @@ else()
set(LIB_SELECTED ${LIB_STATIC})
endif()
# Override to force-disable or force-enable the use of pkg-config.
if(NOT MSVC OR VCPKG_TOOLCHAIN)
set(_curl_use_pkgconfig_default ON)
else()
set(_curl_use_pkgconfig_default OFF)
endif()
option(CURL_USE_PKGCONFIG "use pkg-config to detect dependencies" ${_curl_use_pkgconfig_default})
# Initialize CURL_LIBS
set(CURL_LIBS "")
set(LIBCURL_PC_REQUIRES_PRIVATE "")
@ -959,7 +967,7 @@ if(USE_LIBIDN2)
check_include_file_concat("idn2.h" HAVE_IDN2_H)
endif()
if(NOT HAVE_LIBIDN2 OR NOT HAVE_IDN2_H)
if(NOT MSVC OR VCPKG_TOOLCHAIN)
if(CURL_USE_PKGCONFIG)
find_package(PkgConfig QUIET)
pkg_search_module(LIBIDN2 "libidn2")
endif()
@ -1038,7 +1046,7 @@ if(NOT USE_LIBSSH2 AND CURL_USE_LIBSSH)
find_package(libssh CONFIG QUIET)
if(libssh_FOUND)
message(STATUS "Found libssh ${libssh_VERSION}")
elseif(NOT MSVC OR VCPKG_TOOLCHAIN)
elseif(CURL_USE_PKGCONFIG)
find_package(PkgConfig QUIET)
pkg_search_module(LIBSSH "libssh")
if(LIBSSH_FOUND)
@ -1058,7 +1066,7 @@ endif()
option(CURL_USE_GSASL "Use GSASL implementation" OFF)
mark_as_advanced(CURL_USE_GSASL)
if(CURL_USE_GSASL)
if(NOT MSVC OR VCPKG_TOOLCHAIN)
if(CURL_USE_PKGCONFIG)
find_package(PkgConfig REQUIRED)
pkg_search_module(GSASL REQUIRED "libgsasl")
else()
@ -1139,7 +1147,7 @@ if(CURL_USE_LIBUV)
if(NOT ENABLE_DEBUG)
message(FATAL_ERROR "Using libuv without debug support enabled is useless")
endif()
if(NOT MSVC OR VCPKG_TOOLCHAIN)
if(CURL_USE_PKGCONFIG)
find_package(PkgConfig QUIET)
pkg_check_modules(LIBUV "libuv")
endif()