aboutsummaryrefslogtreecommitdiffstats
path: root/cmake/modules/FindGNUTLS.cmake
blob: 9028529848a23ae319f9dd58fefa1892e5a98ff1 (plain)
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
#
# - Find gnutls
# Find the native GNUTLS includes and library
#
#  GNUTLS_INCLUDE_DIRS - where to find gnutls.h, etc.
#  GNUTLS_LIBRARIES    - List of libraries when using gnutls.
#  GNUTLS_FOUND        - True if gnutls found.
#  GNUTLS_DLL_DIR      - (Windows) Path to the GnuTLS DLLs.
#  GNUTLS_DLLS         - (Windows) List of required GnuTLS DLLs.


if(GNUTLS_INCLUDE_DIRS)
  # Already in cache, be silent
  set(GNUTLS_FIND_QUIETLY TRUE)
endif()

include(FindWSWinLibs)
findwswinlibs("gnutls-.*" "GNUTLS_HINTS")

if(NOT WIN32)
  find_package(PkgConfig)
  pkg_search_module(GNUTLS gnutls)
endif()

# sources include gnutls/gnutls.h, look for that location instead of gnutls.h.
find_path(GNUTLS_INCLUDE_DIR
  NAMES
    gnutls/gnutls.h
  HINTS
    "${GNUTLS_INCLUDEDIR}"
    "${GNUTLS_HINTS}/include"
)

find_library(GNUTLS_LIBRARY
  NAMES
    gnutls libgnutls-28 libgnutls-30
  HINTS
    "${GNUTLS_LIBDIR}"
    "${GNUTLS_HINTS}/bin"
)

# On systems without pkg-config (e.g. Windows), search its header
# (available since GnuTLS 0.1.3)
if(NOT GNUTLS_VERSION)
  if(GNUTLS_INCLUDE_DIR)
    set(_version_regex "^#define[ \t]+GNUTLS_VERSION[ \t]+\"([^\"]+)\".*")
    file(STRINGS "${GNUTLS_INCLUDE_DIR}/gnutls/gnutls.h" GNUTLS_VERSION REGEX "${_version_regex}")
    string(REGEX REPLACE "${_version_regex}" "\\1" GNUTLS_VERSION "${GNUTLS_VERSION}")
    unset(_version_regex)
  endif()
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(WIN32)
    set(GNUTLS_DLL_DIR "${GNUTLS_HINTS}/bin"
      CACHE PATH "Path to the GnuTLS DLLs"
    )
    # Note: 32-bit glib2-2.52.2-1.34-win32ws needs libgcc_s_sjlj-1.dll too.
    file(GLOB _gnutls_dlls RELATIVE "${GNUTLS_DLL_DIR}"
      "${GNUTLS_DLL_DIR}/libgmp-*.dll"
      "${GNUTLS_DLL_DIR}/libgcc_s_*.dll"
      "${GNUTLS_DLL_DIR}/libffi-*.dll"
      "${GNUTLS_DLL_DIR}/libgnutls-*.dll"
      "${GNUTLS_DLL_DIR}/libhogweed-*.dll"
      "${GNUTLS_DLL_DIR}/libnettle-*.dll"
      "${GNUTLS_DLL_DIR}/libp11-kit-*.dll"
      "${GNUTLS_DLL_DIR}/libtasn1-*.dll"
      "${GNUTLS_DLL_DIR}/libwinpthread-*.dll"
    )
    set(GNUTLS_DLLS ${_gnutls_dlls}
      # We're storing filenames only. Should we use STRING instead?
      CACHE FILEPATH "GnuTLS DLL list"
    )
    mark_as_advanced(GNUTLS_DLL_DIR GNUTLS_DLLS)
  endif()
else()
  set(GNUTLS_LIBRARIES)
  set(GNUTLS_INCLUDE_DIRS)
  set(GNUTLS_DLL_DIR)
  set(GNUTLS_DLLS)
endif()

mark_as_advanced(GNUTLS_LIBRARIES GNUTLS_INCLUDE_DIRS)