| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- # 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``
- Boolean indicating whether (the requested version of) GnuTLS is found. For
- backward compatibility, the ``GNUTLS_FOUND`` variable is also set to the same
- value.
- ``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_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(PKG_CONFIG_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)
|