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