| # Distributed under the OSI-approved BSD 3-Clause License. See accompanying | |
| # file LICENSE.rst or https://cmake.org/licensing for details. | |
| #[=======================================================================[.rst: | |
| FindGnuTLS | |
| ---------- | |
| Finds the GNU Transport Layer Security library (GnuTLS): | |
| .. code-block:: cmake | |
| find_package(GnuTLS [<version>] [...]) | |
| The GnuTLS package includes the main libraries (libgnutls and libdane), as | |
| well as the optional gnutls-openssl compatibility extra library. They are | |
| all distributed as part of the same release. This module checks for the | |
| presence of the main libgnutls library and provides usage requirements for | |
| integrating GnuTLS into CMake projects. | |
| Imported Targets | |
| ^^^^^^^^^^^^^^^^ | |
| This module provides the following :ref:`Imported Targets`: | |
| ``GnuTLS::GnuTLS`` | |
| .. versionadded:: 3.16 | |
| Target encapsulating the GnuTLS usage requirements, available if GnuTLS is | |
| found. | |
| Result Variables | |
| ^^^^^^^^^^^^^^^^ | |
| This module defines the following variables: | |
| ``GnuTLS_FOUND`` | |
| .. versionadded:: 3.3 | |
| Boolean indicating whether (the requested version of) GnuTLS was found. | |
| ``GnuTLS_VERSION`` | |
| .. versionadded:: 4.2 | |
| The version of GnuTLS found. | |
| ``GNUTLS_INCLUDE_DIRS`` | |
| Include directories needed to use GnuTLS. | |
| ``GNUTLS_LIBRARIES`` | |
| Libraries needed to link against to use GnuTLS. | |
| ``GNUTLS_DEFINITIONS`` | |
| Compiler options required for using GnuTLS. | |
| Cache Variables | |
| ^^^^^^^^^^^^^^^ | |
| The following cache variables may also be set: | |
| ``GNUTLS_INCLUDE_DIR`` | |
| The directory containing the ``gnutls/gnutls.h`` header file. | |
| ``GNUTLS_LIBRARY`` | |
| The path to the GnuTLS library. | |
| Deprecated Variables | |
| ^^^^^^^^^^^^^^^^^^^^ | |
| The following variables are provided for backward compatibility: | |
| ``GNUTLS_FOUND`` | |
| .. deprecated:: 4.2 | |
| Use ``GnuTLS_FOUND``, which has the same value. | |
| Boolean indicating whether (the requested version of) GnuTLS was found. | |
| ``GNUTLS_VERSION_STRING`` | |
| .. deprecated:: 3.16 | |
| Use the ``GnuTLS_VERSION``, which has the same value. | |
| ``GNUTLS_VERSION`` | |
| .. versionadded:: 3.16 | |
| .. deprecated:: 4.2 | |
| Use the ``GnuTLS_VERSION``, which has the same value. | |
| Examples | |
| ^^^^^^^^ | |
| Finding GnuTLS and linking it to a project target: | |
| .. code-block:: cmake | |
| find_package(GnuTLS) | |
| target_link_libraries(project_target PRIVATE GnuTLS::GnuTLS) | |
| #]=======================================================================] | |
| cmake_policy(PUSH) | |
| cmake_policy(SET CMP0159 NEW) # file(STRINGS) with REGEX updates CMAKE_MATCH_<n> | |
| if (GNUTLS_INCLUDE_DIR AND GNUTLS_LIBRARY) | |
| # in cache already | |
| set(gnutls_FIND_QUIETLY TRUE) | |
| endif () | |
| if (NOT WIN32) | |
| # try using pkg-config to get the directories and then use these values | |
| # in the find_path() and find_library() calls | |
| # also fills in GNUTLS_DEFINITIONS, although that isn't normally useful | |
| find_package(PkgConfig QUIET) | |
| if(PkgConfig_FOUND) | |
| pkg_check_modules(PC_GNUTLS QUIET gnutls) | |
| endif() | |
| set(GNUTLS_DEFINITIONS ${PC_GNUTLS_CFLAGS_OTHER}) | |
| endif () | |
| find_path(GNUTLS_INCLUDE_DIR gnutls/gnutls.h | |
| HINTS | |
| ${PC_GNUTLS_INCLUDEDIR} | |
| ${PC_GNUTLS_INCLUDE_DIRS} | |
| ) | |
| find_library(GNUTLS_LIBRARY NAMES gnutls libgnutls | |
| HINTS | |
| ${PC_GNUTLS_LIBDIR} | |
| ${PC_GNUTLS_LIBRARY_DIRS} | |
| ) | |
| mark_as_advanced(GNUTLS_INCLUDE_DIR GNUTLS_LIBRARY) | |
| if(GNUTLS_INCLUDE_DIR AND EXISTS "${GNUTLS_INCLUDE_DIR}/gnutls/gnutls.h") | |
| file( | |
| STRINGS | |
| "${GNUTLS_INCLUDE_DIR}/gnutls/gnutls.h" | |
| gnutls_version | |
| # GnuTLS versions prior to 2.7.2 defined LIBGNUTLS_VERSION instead of the | |
| # current GNUTLS_VERSION. | |
| REGEX "^#define[\t ]+(LIB)?GNUTLS_VERSION[\t ]+\".*\"" | |
| ) | |
| string( | |
| REGEX REPLACE | |
| "^.*GNUTLS_VERSION[\t ]+\"([^\"]*)\".*$" | |
| "\\1" | |
| GnuTLS_VERSION | |
| "${gnutls_version}" | |
| ) | |
| unset(gnutls_version) | |
| # Fallback to version defined by pkg-config if not successful. | |
| if( | |
| NOT GnuTLS_VERSION | |
| AND PC_GNUTLS_VERSION | |
| AND GNUTLS_INCLUDE_DIR IN_LIST PC_GNUTLS_INCLUDE_DIRS | |
| ) | |
| set(GnuTLS_VERSION "${PC_GNUTLS_VERSION}") | |
| endif() | |
| # For backward compatibility. | |
| set(GNUTLS_VERSION "${GnuTLS_VERSION}") | |
| set(GNUTLS_VERSION_STRING "${GnuTLS_VERSION}") | |
| endif() | |
| include(FindPackageHandleStandardArgs) | |
| find_package_handle_standard_args(GnuTLS | |
| REQUIRED_VARS GNUTLS_LIBRARY GNUTLS_INCLUDE_DIR | |
| VERSION_VAR GnuTLS_VERSION) | |
| if(GnuTLS_FOUND) | |
| set(GNUTLS_LIBRARIES ${GNUTLS_LIBRARY}) | |
| set(GNUTLS_INCLUDE_DIRS ${GNUTLS_INCLUDE_DIR}) | |
| if(NOT TARGET GnuTLS::GnuTLS) | |
| add_library(GnuTLS::GnuTLS UNKNOWN IMPORTED) | |
| set_target_properties(GnuTLS::GnuTLS PROPERTIES | |
| INTERFACE_INCLUDE_DIRECTORIES "${GNUTLS_INCLUDE_DIRS}" | |
| INTERFACE_COMPILE_DEFINITIONS "${GNUTLS_DEFINITIONS}" | |
| IMPORTED_LINK_INTERFACE_LANGUAGES "C" | |
| IMPORTED_LOCATION "${GNUTLS_LIBRARIES}") | |
| endif() | |
| endif() | |
| cmake_policy(POP) |