From: Viktor Szakats Date: Sat, 27 Jul 2024 09:47:56 +0000 (+0200) Subject: cmake: detect `nettle` when building with GnuTLS X-Git-Tag: curl-8_9_1~20 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=669ce42275635dc1f881dab3dfc9a55c9ab49b21;p=thirdparty%2Fcurl.git cmake: detect `nettle` when building with GnuTLS `nettle` is a direct dependency of curl, when building with GnuTLS. Add a new `Find` module to detect it. Also: - GHA/macos: drop `nettle` hack no longer necessary. - add `nettle` to `libcurl.pc`. - also add `nettle` to `libcurl.pc` in autotools builds. Follow-up to 781242ffa44a9f9b95b6da5ac5a1bf6372ec6257 #11967 Closes #14285 --- diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index 2c4448bd0f..947ee2b491 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -294,8 +294,8 @@ jobs: generate: -DCURL_USE_WOLFSSL=ON -DCURL_DISABLE_LDAP=ON -DCURL_DISABLE_LDAPS=ON macos-version-min: '10.15' - name: 'GnuTLS !ldap' - install: gnutls - generate: -DCURL_USE_GNUTLS=ON -DCURL_USE_OPENSSL=OFF -DCURL_DISABLE_LDAP=ON -DCURL_DISABLE_LDAPS=ON -DCMAKE_SHARED_LINKER_FLAGS=-L$(brew --prefix nettle)/lib -DCMAKE_EXE_LINKER_FLAGS=-L$(brew --prefix nettle)/lib + install: gnutls nettle + generate: -DCURL_USE_GNUTLS=ON -DCURL_USE_OPENSSL=OFF -DCURL_DISABLE_LDAP=ON -DCURL_DISABLE_LDAPS=ON macos-version-min: '10.15' exclude: - { compiler: llvm@15, build: { macos-version-min: '10.15' } } diff --git a/CMake/FindNettle.cmake b/CMake/FindNettle.cmake new file mode 100644 index 0000000000..ec6d4cbd6e --- /dev/null +++ b/CMake/FindNettle.cmake @@ -0,0 +1,77 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### +# - Try to find the nettle library +# Once done this will define +# +# NETTLE_FOUND - system has nettle +# NETTLE_INCLUDE_DIRS - nettle include directories +# NETTLE_LIBRARIES - nettle library names + +if(UNIX) + find_package(PkgConfig QUIET) + if(PKG_CONFIG_FOUND) + pkg_check_modules(NETTLE "nettle") + endif() +endif() + +if(NETTLE_FOUND) + set(NETTLE_LIBRARIES ${NETTLE_LINK_LIBRARIES}) +else() + find_path(NETTLE_INCLUDE_DIR NAMES "nettle/sha2.h") + find_library(NETTLE_LIBRARY NAMES "nettle") + + if(NETTLE_INCLUDE_DIR) + if(EXISTS "${NETTLE_INCLUDE_DIR}/nettle/version.h") + set(_version_regex_major "^#define[ \t]+NETTLE_VERSION_MAJOR[ \t]+([0-9]+).*") + set(_version_regex_minor "^#define[ \t]+NETTLE_VERSION_MINOR[ \t]+([0-9]+).*") + file(STRINGS "${NETTLE_INCLUDE_DIR}/nettle/version.h" + _version_major REGEX "${_version_regex_major}") + file(STRINGS "${NETTLE_INCLUDE_DIR}/nettle/version.h" + _version_minor REGEX "${_version_regex_minor}") + string(REGEX REPLACE "${_version_regex_major}" "\\1" _version_major "${_version_major}") + string(REGEX REPLACE "${_version_regex_minor}" "\\1" _version_minor "${_version_minor}") + unset(_version_regex_major) + unset(_version_regex_minor) + set(NETTLE_VERSION "${_version_major}.${_version_minor}") + unset(_version_major) + unset(_version_minor) + else() + set(NETTLE_VERSION "0.0") + endif() + endif() + + include(FindPackageHandleStandardArgs) + find_package_handle_standard_args("nettle" + REQUIRED_VARS + NETTLE_INCLUDE_DIR + NETTLE_LIBRARY + VERSION_VAR NETTLE_VERSION) + + if(NETTLE_FOUND) + set(NETTLE_INCLUDE_DIRS ${NETTLE_INCLUDE_DIR}) + set(NETTLE_LIBRARIES ${NETTLE_LIBRARY}) + endif() + + mark_as_advanced(NETTLE_INCLUDE_DIR NETTLE_LIBRARY) +endif() diff --git a/CMakeLists.txt b/CMakeLists.txt index f57e6fd74e..8b864a8feb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -541,11 +541,12 @@ endif() if(CURL_USE_GNUTLS) find_package(GnuTLS REQUIRED) + find_package(nettle REQUIRED) set(SSL_ENABLED ON) set(USE_GNUTLS ON) - list(APPEND CURL_LIBS ${GNUTLS_LIBRARIES} "nettle") - list(APPEND LIBCURL_PC_REQUIRES_PRIVATE "gnutls") - include_directories(${GNUTLS_INCLUDE_DIRS}) + list(APPEND CURL_LIBS ${GNUTLS_LIBRARIES} ${NETTLE_LIBRARIES}) + list(APPEND LIBCURL_PC_REQUIRES_PRIVATE "gnutls" "nettle") + include_directories(${GNUTLS_INCLUDE_DIRS} ${NETTLE_INCLUDE_DIRS}) if(CURL_DEFAULT_SSL_BACKEND AND CURL_DEFAULT_SSL_BACKEND STREQUAL "gnutls") set(valid_default_ssl_backend TRUE) diff --git a/m4/curl-gnutls.m4 b/m4/curl-gnutls.m4 index dbe6441b87..6a297f6845 100644 --- a/m4/curl-gnutls.m4 +++ b/m4/curl-gnutls.m4 @@ -126,7 +126,7 @@ if test "x$OPT_GNUTLS" != xno; then AC_MSG_NOTICE([Added $gtlslib to CURL_LIBRARY_PATH]) fi fi - LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE gnutls" + LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE gnutls nettle" fi fi