xref: /aosp_15_r20/external/curl/m4/curl-gnutls.m4 (revision 6236dae45794135f37c4eb022389c904c8b0090d)
1*6236dae4SAndroid Build Coastguard Worker#***************************************************************************
2*6236dae4SAndroid Build Coastguard Worker#                                  _   _ ____  _
3*6236dae4SAndroid Build Coastguard Worker#  Project                     ___| | | |  _ \| |
4*6236dae4SAndroid Build Coastguard Worker#                             / __| | | | |_) | |
5*6236dae4SAndroid Build Coastguard Worker#                            | (__| |_| |  _ <| |___
6*6236dae4SAndroid Build Coastguard Worker#                             \___|\___/|_| \_\_____|
7*6236dae4SAndroid Build Coastguard Worker#
8*6236dae4SAndroid Build Coastguard Worker# Copyright (C) Daniel Stenberg, <[email protected]>, et al.
9*6236dae4SAndroid Build Coastguard Worker#
10*6236dae4SAndroid Build Coastguard Worker# This software is licensed as described in the file COPYING, which
11*6236dae4SAndroid Build Coastguard Worker# you should have received as part of this distribution. The terms
12*6236dae4SAndroid Build Coastguard Worker# are also available at https://curl.se/docs/copyright.html.
13*6236dae4SAndroid Build Coastguard Worker#
14*6236dae4SAndroid Build Coastguard Worker# You may opt to use, copy, modify, merge, publish, distribute and/or sell
15*6236dae4SAndroid Build Coastguard Worker# copies of the Software, and permit persons to whom the Software is
16*6236dae4SAndroid Build Coastguard Worker# furnished to do so, under the terms of the COPYING file.
17*6236dae4SAndroid Build Coastguard Worker#
18*6236dae4SAndroid Build Coastguard Worker# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
19*6236dae4SAndroid Build Coastguard Worker# KIND, either express or implied.
20*6236dae4SAndroid Build Coastguard Worker#
21*6236dae4SAndroid Build Coastguard Worker# SPDX-License-Identifier: curl
22*6236dae4SAndroid Build Coastguard Worker#
23*6236dae4SAndroid Build Coastguard Worker#***************************************************************************
24*6236dae4SAndroid Build Coastguard Worker
25*6236dae4SAndroid Build Coastguard Workerdnl ----------------------------------------------------
26*6236dae4SAndroid Build Coastguard Workerdnl check for GnuTLS
27*6236dae4SAndroid Build Coastguard Workerdnl ----------------------------------------------------
28*6236dae4SAndroid Build Coastguard Worker
29*6236dae4SAndroid Build Coastguard WorkerAC_DEFUN([CURL_WITH_GNUTLS], [
30*6236dae4SAndroid Build Coastguard Workerif test "x$OPT_GNUTLS" != xno; then
31*6236dae4SAndroid Build Coastguard Worker  ssl_msg=
32*6236dae4SAndroid Build Coastguard Worker
33*6236dae4SAndroid Build Coastguard Worker  if test X"$OPT_GNUTLS" != Xno; then
34*6236dae4SAndroid Build Coastguard Worker
35*6236dae4SAndroid Build Coastguard Worker    addld=""
36*6236dae4SAndroid Build Coastguard Worker    addlib=""
37*6236dae4SAndroid Build Coastguard Worker    gtlslib=""
38*6236dae4SAndroid Build Coastguard Worker    version=""
39*6236dae4SAndroid Build Coastguard Worker    addcflags=""
40*6236dae4SAndroid Build Coastguard Worker
41*6236dae4SAndroid Build Coastguard Worker    if test "x$OPT_GNUTLS" = "xyes"; then
42*6236dae4SAndroid Build Coastguard Worker      dnl this is with no particular path given
43*6236dae4SAndroid Build Coastguard Worker      CURL_CHECK_PKGCONFIG(gnutls)
44*6236dae4SAndroid Build Coastguard Worker
45*6236dae4SAndroid Build Coastguard Worker      if test "$PKGCONFIG" != "no" ; then
46*6236dae4SAndroid Build Coastguard Worker        addlib=`$PKGCONFIG --libs-only-l gnutls`
47*6236dae4SAndroid Build Coastguard Worker        addld=`$PKGCONFIG --libs-only-L gnutls`
48*6236dae4SAndroid Build Coastguard Worker        addcflags=`$PKGCONFIG --cflags-only-I gnutls`
49*6236dae4SAndroid Build Coastguard Worker        version=`$PKGCONFIG --modversion gnutls`
50*6236dae4SAndroid Build Coastguard Worker        gtlslib=`echo $addld | $SED -e 's/^-L//'`
51*6236dae4SAndroid Build Coastguard Worker      else
52*6236dae4SAndroid Build Coastguard Worker        dnl without pkg-config, we try libgnutls-config as that was how it
53*6236dae4SAndroid Build Coastguard Worker        dnl used to be done
54*6236dae4SAndroid Build Coastguard Worker        check=`libgnutls-config --version 2>/dev/null`
55*6236dae4SAndroid Build Coastguard Worker        if test -n "$check"; then
56*6236dae4SAndroid Build Coastguard Worker          addlib=`libgnutls-config --libs`
57*6236dae4SAndroid Build Coastguard Worker          addcflags=`libgnutls-config --cflags`
58*6236dae4SAndroid Build Coastguard Worker          version=`libgnutls-config --version`
59*6236dae4SAndroid Build Coastguard Worker          gtlslib=`libgnutls-config --prefix`/lib$libsuff
60*6236dae4SAndroid Build Coastguard Worker        fi
61*6236dae4SAndroid Build Coastguard Worker      fi
62*6236dae4SAndroid Build Coastguard Worker    else
63*6236dae4SAndroid Build Coastguard Worker      dnl this is with a given path, first check if there's a libgnutls-config
64*6236dae4SAndroid Build Coastguard Worker      dnl there and if not, make an educated guess
65*6236dae4SAndroid Build Coastguard Worker      cfg=$OPT_GNUTLS/bin/libgnutls-config
66*6236dae4SAndroid Build Coastguard Worker      check=`$cfg --version 2>/dev/null`
67*6236dae4SAndroid Build Coastguard Worker      if test -n "$check"; then
68*6236dae4SAndroid Build Coastguard Worker        addlib=`$cfg --libs`
69*6236dae4SAndroid Build Coastguard Worker        addcflags=`$cfg --cflags`
70*6236dae4SAndroid Build Coastguard Worker        version=`$cfg --version`
71*6236dae4SAndroid Build Coastguard Worker        gtlslib=`$cfg --prefix`/lib$libsuff
72*6236dae4SAndroid Build Coastguard Worker      else
73*6236dae4SAndroid Build Coastguard Worker        dnl without pkg-config and libgnutls-config, we guess a lot!
74*6236dae4SAndroid Build Coastguard Worker        addlib=-lgnutls
75*6236dae4SAndroid Build Coastguard Worker        addld=-L$OPT_GNUTLS/lib$libsuff
76*6236dae4SAndroid Build Coastguard Worker        addcflags=-I$OPT_GNUTLS/include
77*6236dae4SAndroid Build Coastguard Worker        version="" # we just don't know
78*6236dae4SAndroid Build Coastguard Worker        gtlslib=$OPT_GNUTLS/lib$libsuff
79*6236dae4SAndroid Build Coastguard Worker      fi
80*6236dae4SAndroid Build Coastguard Worker    fi
81*6236dae4SAndroid Build Coastguard Worker
82*6236dae4SAndroid Build Coastguard Worker    if test -z "$version"; then
83*6236dae4SAndroid Build Coastguard Worker      dnl lots of efforts, still no go
84*6236dae4SAndroid Build Coastguard Worker      version="unknown"
85*6236dae4SAndroid Build Coastguard Worker    fi
86*6236dae4SAndroid Build Coastguard Worker
87*6236dae4SAndroid Build Coastguard Worker    if test -n "$addlib"; then
88*6236dae4SAndroid Build Coastguard Worker
89*6236dae4SAndroid Build Coastguard Worker      CLEANLIBS="$LIBS"
90*6236dae4SAndroid Build Coastguard Worker      CLEANCPPFLAGS="$CPPFLAGS"
91*6236dae4SAndroid Build Coastguard Worker      CLEANLDFLAGS="$LDFLAGS"
92*6236dae4SAndroid Build Coastguard Worker
93*6236dae4SAndroid Build Coastguard Worker      LIBS="$addlib $LIBS"
94*6236dae4SAndroid Build Coastguard Worker      LDFLAGS="$LDFLAGS $addld"
95*6236dae4SAndroid Build Coastguard Worker      if test "$addcflags" != "-I/usr/include"; then
96*6236dae4SAndroid Build Coastguard Worker        CPPFLAGS="$CPPFLAGS $addcflags"
97*6236dae4SAndroid Build Coastguard Worker      fi
98*6236dae4SAndroid Build Coastguard Worker
99*6236dae4SAndroid Build Coastguard Worker      dnl this function is selected since it was introduced in 3.1.10
100*6236dae4SAndroid Build Coastguard Worker      AC_CHECK_LIB(gnutls, gnutls_x509_crt_get_dn2,
101*6236dae4SAndroid Build Coastguard Worker        [
102*6236dae4SAndroid Build Coastguard Worker        AC_DEFINE(USE_GNUTLS, 1, [if GnuTLS is enabled])
103*6236dae4SAndroid Build Coastguard Worker        AC_SUBST(USE_GNUTLS, [1])
104*6236dae4SAndroid Build Coastguard Worker        GNUTLS_ENABLED=1
105*6236dae4SAndroid Build Coastguard Worker        USE_GNUTLS="yes"
106*6236dae4SAndroid Build Coastguard Worker        ssl_msg="GnuTLS"
107*6236dae4SAndroid Build Coastguard Worker        QUIC_ENABLED=yes
108*6236dae4SAndroid Build Coastguard Worker        test gnutls != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
109*6236dae4SAndroid Build Coastguard Worker        ],
110*6236dae4SAndroid Build Coastguard Worker        [
111*6236dae4SAndroid Build Coastguard Worker          LIBS="$CLEANLIBS"
112*6236dae4SAndroid Build Coastguard Worker          CPPFLAGS="$CLEANCPPFLAGS"
113*6236dae4SAndroid Build Coastguard Worker        ])
114*6236dae4SAndroid Build Coastguard Worker
115*6236dae4SAndroid Build Coastguard Worker      if test "x$USE_GNUTLS" = "xyes"; then
116*6236dae4SAndroid Build Coastguard Worker        AC_MSG_NOTICE([detected GnuTLS version $version])
117*6236dae4SAndroid Build Coastguard Worker        check_for_ca_bundle=1
118*6236dae4SAndroid Build Coastguard Worker        if test -n "$gtlslib"; then
119*6236dae4SAndroid Build Coastguard Worker          dnl when shared libs were found in a path that the run-time
120*6236dae4SAndroid Build Coastguard Worker          dnl linker doesn't search through, we need to add it to
121*6236dae4SAndroid Build Coastguard Worker          dnl CURL_LIBRARY_PATH to prevent further configure tests to fail
122*6236dae4SAndroid Build Coastguard Worker          dnl due to this
123*6236dae4SAndroid Build Coastguard Worker          if test "x$cross_compiling" != "xyes"; then
124*6236dae4SAndroid Build Coastguard Worker            CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$gtlslib"
125*6236dae4SAndroid Build Coastguard Worker            export CURL_LIBRARY_PATH
126*6236dae4SAndroid Build Coastguard Worker            AC_MSG_NOTICE([Added $gtlslib to CURL_LIBRARY_PATH])
127*6236dae4SAndroid Build Coastguard Worker          fi
128*6236dae4SAndroid Build Coastguard Worker        fi
129*6236dae4SAndroid Build Coastguard Worker        LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE gnutls nettle"
130*6236dae4SAndroid Build Coastguard Worker      fi
131*6236dae4SAndroid Build Coastguard Worker
132*6236dae4SAndroid Build Coastguard Worker    fi
133*6236dae4SAndroid Build Coastguard Worker
134*6236dae4SAndroid Build Coastguard Worker  fi dnl GNUTLS not disabled
135*6236dae4SAndroid Build Coastguard Worker
136*6236dae4SAndroid Build Coastguard Worker  test -z "$ssl_msg" || ssl_backends="${ssl_backends:+$ssl_backends, }$ssl_msg"
137*6236dae4SAndroid Build Coastguard Workerfi
138*6236dae4SAndroid Build Coastguard Worker
139*6236dae4SAndroid Build Coastguard Workerdnl ---
140*6236dae4SAndroid Build Coastguard Workerdnl Check which crypto backend GnuTLS uses
141*6236dae4SAndroid Build Coastguard Workerdnl ---
142*6236dae4SAndroid Build Coastguard Worker
143*6236dae4SAndroid Build Coastguard Workerif test "$GNUTLS_ENABLED" = "1"; then
144*6236dae4SAndroid Build Coastguard Worker  USE_GNUTLS_NETTLE=
145*6236dae4SAndroid Build Coastguard Worker  # First check if we can detect either crypto library via transitive linking
146*6236dae4SAndroid Build Coastguard Worker  AC_CHECK_LIB(gnutls, nettle_MD5Init, [ USE_GNUTLS_NETTLE=1 ])
147*6236dae4SAndroid Build Coastguard Worker
148*6236dae4SAndroid Build Coastguard Worker  # If not, try linking directly to both of them to see if they are available
149*6236dae4SAndroid Build Coastguard Worker  if test "$USE_GNUTLS_NETTLE" = ""; then
150*6236dae4SAndroid Build Coastguard Worker    AC_CHECK_LIB(nettle, nettle_MD5Init, [ USE_GNUTLS_NETTLE=1 ])
151*6236dae4SAndroid Build Coastguard Worker  fi
152*6236dae4SAndroid Build Coastguard Worker  if test "$USE_GNUTLS_NETTLE" = ""; then
153*6236dae4SAndroid Build Coastguard Worker    AC_MSG_ERROR([GnuTLS found, but nettle was not found])
154*6236dae4SAndroid Build Coastguard Worker  fi
155*6236dae4SAndroid Build Coastguard Worker  LIBS="-lnettle $LIBS"
156*6236dae4SAndroid Build Coastguard Workerfi
157*6236dae4SAndroid Build Coastguard Worker
158*6236dae4SAndroid Build Coastguard Workerdnl ---
159*6236dae4SAndroid Build Coastguard Workerdnl We require GnuTLS with SRP support.
160*6236dae4SAndroid Build Coastguard Workerdnl ---
161*6236dae4SAndroid Build Coastguard Workerif test "$GNUTLS_ENABLED" = "1"; then
162*6236dae4SAndroid Build Coastguard Worker  AC_CHECK_LIB(gnutls, gnutls_srp_verifier,
163*6236dae4SAndroid Build Coastguard Worker    [
164*6236dae4SAndroid Build Coastguard Worker      AC_DEFINE(HAVE_GNUTLS_SRP, 1, [if you have the function gnutls_srp_verifier])
165*6236dae4SAndroid Build Coastguard Worker      AC_SUBST(HAVE_GNUTLS_SRP, [1])
166*6236dae4SAndroid Build Coastguard Worker    ])
167*6236dae4SAndroid Build Coastguard Workerfi
168*6236dae4SAndroid Build Coastguard Worker
169*6236dae4SAndroid Build Coastguard Worker])
170