mirror of
https://github.com/Kitware/CMake.git
synced 2025-10-14 02:08:27 +08:00

Since most of the find modules use the `<PackageName>_FOUND` result variables, this now also syncs it for the FindPkgConfig module. The `PkgConfig_FOUND` result variable is available since CMake 3.3 and contains the same value. There is also `PKGCONFIG_FOUND` result variable automatically set with the same value but for simplicity isn't documented. The uppercased `<PACKAGENAME>_FOUND` result variables set by find modules are also considered legacy variables.
177 lines
4.6 KiB
CMake
177 lines
4.6 KiB
CMake
# 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(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)
|