File: FindGnuTLS.cmake

package info (click to toggle)
cmake 4.2.1-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 152,348 kB
  • sloc: ansic: 403,894; cpp: 303,807; sh: 4,097; python: 3,582; yacc: 3,106; lex: 1,279; f90: 538; asm: 471; lisp: 375; cs: 270; java: 266; fortran: 239; objc: 215; perl: 213; xml: 198; makefile: 108; javascript: 83; pascal: 63; tcl: 55; php: 25; ruby: 22
file content (182 lines) | stat: -rw-r--r-- 4,859 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
# 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)