mirror of
https://github.com/curl/curl.git
synced 2024-12-09 06:30:06 +08:00
ebef55a61d
- add QUIC/ngtcp2 detection in CMake with wolfSSL.
Because wolfSSL uses zlib if available, move compression detection
before TLS detection. (OpenSSL might also need this in the future.)
- wolfSSL 5.5.0 started using C99 types in its `quic.h` header, but it
doesn't #include the necessary C99 header itself, breaking builds
(unless another dependency pulled it by chance.) Add local workaround
for it. For this to work with all build tools, we had to fix our
header detection first. Ref: #10745
Ref: 6ad5f6ecc1
Closes #10739
116 lines
3.3 KiB
CMake
116 lines
3.3 KiB
CMake
#***************************************************************************
|
|
# _ _ ____ _
|
|
# Project ___| | | | _ \| |
|
|
# / __| | | | |_) | |
|
|
# | (__| |_| | _ <| |___
|
|
# \___|\___/|_| \_\_____|
|
|
#
|
|
# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, 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
|
|
#
|
|
###########################################################################
|
|
|
|
#[=======================================================================[.rst:
|
|
FindNGTCP2
|
|
----------
|
|
|
|
Find the ngtcp2 library
|
|
|
|
This module accepts optional COMPONENTS to control the crypto library (these are
|
|
mutually exclusive)::
|
|
|
|
OpenSSL: Use libngtcp2_crypto_openssl
|
|
GnuTLS: Use libngtcp2_crypto_gnutls
|
|
|
|
Result Variables
|
|
^^^^^^^^^^^^^^^^
|
|
|
|
``NGTCP2_FOUND``
|
|
System has ngtcp2
|
|
``NGTCP2_INCLUDE_DIRS``
|
|
The ngtcp2 include directories.
|
|
``NGTCP2_LIBRARIES``
|
|
The libraries needed to use ngtcp2
|
|
``NGTCP2_VERSION``
|
|
version of ngtcp2.
|
|
#]=======================================================================]
|
|
|
|
if(UNIX)
|
|
find_package(PkgConfig QUIET)
|
|
pkg_search_module(PC_NGTCP2 libngtcp2)
|
|
endif()
|
|
|
|
find_path(NGTCP2_INCLUDE_DIR ngtcp2/ngtcp2.h
|
|
HINTS
|
|
${PC_NGTCP2_INCLUDEDIR}
|
|
${PC_NGTCP2_INCLUDE_DIRS}
|
|
)
|
|
|
|
find_library(NGTCP2_LIBRARY NAMES ngtcp2
|
|
HINTS
|
|
${PC_NGTCP2_LIBDIR}
|
|
${PC_NGTCP2_LIBRARY_DIRS}
|
|
)
|
|
|
|
if(PC_NGTCP2_VERSION)
|
|
set(NGTCP2_VERSION ${PC_NGTCP2_VERSION})
|
|
endif()
|
|
|
|
if(NGTCP2_FIND_COMPONENTS)
|
|
set(NGTCP2_CRYPTO_BACKEND "")
|
|
foreach(component IN LISTS NGTCP2_FIND_COMPONENTS)
|
|
if(component MATCHES "^(BoringSSL|OpenSSL|wolfSSL|GnuTLS)")
|
|
if(NGTCP2_CRYPTO_BACKEND)
|
|
message(FATAL_ERROR "NGTCP2: Only one crypto library can be selected")
|
|
endif()
|
|
set(NGTCP2_CRYPTO_BACKEND ${component})
|
|
endif()
|
|
endforeach()
|
|
|
|
if(NGTCP2_CRYPTO_BACKEND)
|
|
string(TOLOWER "ngtcp2_crypto_${NGTCP2_CRYPTO_BACKEND}" _crypto_library)
|
|
if(UNIX)
|
|
pkg_search_module(PC_${_crypto_library} lib${_crypto_library})
|
|
endif()
|
|
find_library(${_crypto_library}_LIBRARY
|
|
NAMES
|
|
${_crypto_library}
|
|
HINTS
|
|
${PC_${_crypto_library}_LIBDIR}
|
|
${PC_${_crypto_library}_LIBRARY_DIRS}
|
|
)
|
|
if(${_crypto_library}_LIBRARY)
|
|
set(NGTCP2_${NGTCP2_CRYPTO_BACKEND}_FOUND TRUE)
|
|
set(NGTCP2_CRYPTO_LIBRARY ${${_crypto_library}_LIBRARY})
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
include(FindPackageHandleStandardArgs)
|
|
find_package_handle_standard_args(NGTCP2
|
|
REQUIRED_VARS
|
|
NGTCP2_LIBRARY
|
|
NGTCP2_INCLUDE_DIR
|
|
VERSION_VAR NGTCP2_VERSION
|
|
HANDLE_COMPONENTS
|
|
)
|
|
|
|
if(NGTCP2_FOUND)
|
|
set(NGTCP2_LIBRARIES ${NGTCP2_LIBRARY} ${NGTCP2_CRYPTO_LIBRARY})
|
|
set(NGTCP2_INCLUDE_DIRS ${NGTCP2_INCLUDE_DIR})
|
|
endif()
|
|
|
|
mark_as_advanced(NGTCP2_INCLUDE_DIRS NGTCP2_LIBRARIES)
|