mirror of
https://github.com/curl/curl.git
synced 2024-12-27 06:59:43 +08:00
9597d2def7
lcrypto may depend on lz, and configure corrently fails with when statically linking as the order is "-lz -lcrypto". This commit switches the order to "-lcrypto -lz". Closes #7826
691 lines
21 KiB
Plaintext
691 lines
21 KiB
Plaintext
#***************************************************************************
|
|
# _ _ ____ _
|
|
# Project ___| | | | _ \| |
|
|
# / __| | | | |_) | |
|
|
# | (__| |_| | _ <| |___
|
|
# \___|\___/|_| \_\_____|
|
|
#
|
|
# Copyright (C) 1998 - 2021, Daniel Stenberg, <daniel@haxx.se>, et al.
|
|
#
|
|
# This software is licensed as described in the file COPYING, which
|
|
# you should have received as part of this distribution. The terms
|
|
# are also available at https://curl.se/docs/copyright.html.
|
|
#
|
|
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
|
# copies of the Software, and permit persons to whom the Software is
|
|
# furnished to do so, under the terms of the COPYING file.
|
|
#
|
|
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
# KIND, either express or implied.
|
|
#
|
|
#***************************************************************************
|
|
|
|
# File version for 'aclocal' use. Keep it a single number.
|
|
# serial 5
|
|
|
|
|
|
dnl CURL_CHECK_OPENSSL_API_HEADERS
|
|
dnl -------------------------------------------------
|
|
dnl Find out OpenSSL headers API version, as reported
|
|
dnl by OPENSSL_VERSION_NUMBER. No runtime checks
|
|
dnl allowed here for cross-compilation support.
|
|
dnl HAVE_OPENSSL_API_HEADERS is defined as appropriate
|
|
dnl only for systems which actually run the configure
|
|
dnl script. Config files generated manually or in any
|
|
dnl other way shall not define this.
|
|
|
|
AC_DEFUN([CURL_CHECK_OPENSSL_API_HEADERS], [
|
|
#
|
|
tst_api="unknown"
|
|
#
|
|
AC_MSG_CHECKING([for OpenSSL headers version])
|
|
CURL_CHECK_DEF([OPENSSL_VERSION_NUMBER], [
|
|
# ifdef USE_OPENSSL
|
|
# include <openssl/crypto.h>
|
|
# else
|
|
# include <crypto.h>
|
|
# endif
|
|
], [silent])
|
|
CURL_CHECK_DEF([OPENSSL_VERSION_STR], [
|
|
# include <openssl/crypto.h>
|
|
], [silent])
|
|
if test "$curl_cv_have_def_OPENSSL_VERSION_NUMBER" = "yes"; then
|
|
tst_verlen=`expr "$curl_cv_def_OPENSSL_VERSION_NUMBER" : '.*'`
|
|
case "x$tst_verlen" in
|
|
x6)
|
|
tst_vermaj=`echo $curl_cv_def_OPENSSL_VERSION_NUMBER | cut -c 3`
|
|
tst_vermin=`echo $curl_cv_def_OPENSSL_VERSION_NUMBER | cut -c 4`
|
|
tst_verfix=`echo $curl_cv_def_OPENSSL_VERSION_NUMBER | cut -c 5`
|
|
tst_api=0x$tst_vermaj$tst_vermin$tst_verfix
|
|
;;
|
|
x11|x10)
|
|
tst_vermaj=`echo $curl_cv_def_OPENSSL_VERSION_NUMBER | cut -c 3`
|
|
tst_vermin=`echo $curl_cv_def_OPENSSL_VERSION_NUMBER | cut -c 5`
|
|
tst_verfix=`echo $curl_cv_def_OPENSSL_VERSION_NUMBER | cut -c 7`
|
|
tst_api=0x$tst_vermaj$tst_vermin$tst_verfix
|
|
;;
|
|
*)
|
|
if test "$curl_cv_have_def_OPENSSL_VERSION_STR" = "yes"; then
|
|
ver=`echo $curl_cv_def_OPENSSL_VERSION_STR | sed 's/"//g'`;
|
|
tst_vermaj=`echo $ver | cut -d. -f1`
|
|
tst_vermin=`echo $ver | cut -d. -f2`
|
|
tst_verfix=`echo $ver | cut -d. -f3`
|
|
tst_show="$ver"
|
|
tst_api=0x$tst_vermaj$tst_vermin$tst_verfix
|
|
else
|
|
tst_api="unknown"
|
|
fi
|
|
;;
|
|
esac
|
|
case $tst_api in
|
|
0x111) tst_show="1.1.1" ;;
|
|
0x110) tst_show="1.1.0" ;;
|
|
0x102) tst_show="1.0.2" ;;
|
|
0x101) tst_show="1.0.1" ;;
|
|
0x100) tst_show="1.0.0" ;;
|
|
0x099) tst_show="0.9.9" ;;
|
|
0x098) tst_show="0.9.8" ;;
|
|
0x097) tst_show="0.9.7" ;;
|
|
0x096) tst_show="0.9.6" ;;
|
|
0x095) tst_show="0.9.5" ;;
|
|
0x094) tst_show="0.9.4" ;;
|
|
0x093) tst_show="0.9.3" ;;
|
|
0x092) tst_show="0.9.2" ;;
|
|
0x091) tst_show="0.9.1" ;;
|
|
*)
|
|
if test -z "$tst_show"; then
|
|
tst_show="unknown"
|
|
fi
|
|
;;
|
|
esac
|
|
tst_show="$tst_show - $tst_api"
|
|
else
|
|
tst_show="unknown"
|
|
fi
|
|
AC_MSG_RESULT([$tst_show])
|
|
#
|
|
dnl if test "$tst_api" != "unknown"; then
|
|
dnl AC_DEFINE_UNQUOTED(HAVE_OPENSSL_API_HEADERS, $tst_api,
|
|
dnl [OpenSSL headers configure time API. Defined only by configure script.
|
|
dnl No matter what, do not ever define this manually or by any other means.])
|
|
dnl fi
|
|
curl_openssl_api_headers=$tst_api
|
|
])
|
|
|
|
|
|
dnl CURL_CHECK_OPENSSL_API_LIBRARY
|
|
dnl -------------------------------------------------
|
|
dnl Find out OpenSSL library API version, performing
|
|
dnl only link tests in order to avoid getting fooled
|
|
dnl by mismatched OpenSSL headers. No runtime checks
|
|
dnl allowed here for cross-compilation support.
|
|
dnl HAVE_OPENSSL_API_LIBRARY is defined as appropriate
|
|
dnl only for systems which actually run the configure
|
|
dnl script. Config files generated manually or in any
|
|
dnl other way shall not define this.
|
|
dnl
|
|
dnl Most probably we should not bother attempting to
|
|
dnl detect OpenSSL library development API versions
|
|
dnl 0.9.9 and 1.1.0. For our intended use, detecting
|
|
dnl released versions should be good enough.
|
|
dnl
|
|
dnl Given that currently we are not using the result
|
|
dnl of this check, except for informative purposes,
|
|
dnl lets try to figure out everything.
|
|
|
|
AC_DEFUN([CURL_CHECK_OPENSSL_API_LIBRARY], [
|
|
#
|
|
tst_api="unknown"
|
|
#
|
|
AC_MSG_CHECKING([for OpenSSL library version])
|
|
if test "$tst_api" = "unknown"; then
|
|
AC_LINK_IFELSE([
|
|
AC_LANG_FUNC_LINK_TRY([SSL_CTX_load_verify_dir])
|
|
],[
|
|
tst_api="0x300"
|
|
])
|
|
fi
|
|
if test "$tst_api" = "unknown"; then
|
|
AC_LINK_IFELSE([
|
|
AC_LANG_FUNC_LINK_TRY([ERR_clear_last_mark])
|
|
],[
|
|
tst_api="0x111"
|
|
])
|
|
fi
|
|
if test "$tst_api" = "unknown"; then
|
|
case $host in
|
|
*-*-vms*)
|
|
AC_LINK_IFELSE([
|
|
AC_LANG_FUNC_LINK_TRY([SSL_CTX_set_not_resumbl_sess_cb])
|
|
],[
|
|
tst_api="0x110"
|
|
])
|
|
;;
|
|
*)
|
|
AC_LINK_IFELSE([
|
|
AC_LANG_FUNC_LINK_TRY([SSL_CTX_set_not_resumable_session_callback])
|
|
],[
|
|
tst_api="0x110"
|
|
])
|
|
;;
|
|
esac
|
|
fi
|
|
if test "$tst_api" = "unknown"; then
|
|
AC_LINK_IFELSE([
|
|
AC_LANG_FUNC_LINK_TRY([SSL_CONF_CTX_new])
|
|
],[
|
|
tst_api="0x102"
|
|
])
|
|
fi
|
|
if test "$tst_api" = "unknown"; then
|
|
AC_LINK_IFELSE([
|
|
AC_LANG_FUNC_LINK_TRY([SSL_renegotiate_abbreviated])
|
|
],[
|
|
tst_api="0x101"
|
|
])
|
|
fi
|
|
if test "$tst_api" = "unknown"; then
|
|
AC_LINK_IFELSE([
|
|
AC_LANG_FUNC_LINK_TRY([OBJ_add_sigid])
|
|
],[
|
|
tst_api="0x100"
|
|
])
|
|
fi
|
|
if test "$tst_api" = "unknown"; then
|
|
AC_LINK_IFELSE([
|
|
AC_LANG_FUNC_LINK_TRY([ERR_set_mark])
|
|
],[
|
|
tst_api="0x098"
|
|
])
|
|
fi
|
|
if test "$tst_api" = "unknown"; then
|
|
AC_LINK_IFELSE([
|
|
AC_LANG_FUNC_LINK_TRY([ERR_peek_last_error])
|
|
],[
|
|
tst_api="0x097"
|
|
])
|
|
fi
|
|
if test "$tst_api" = "unknown"; then
|
|
AC_LINK_IFELSE([
|
|
AC_LANG_FUNC_LINK_TRY([c2i_ASN1_OBJECT])
|
|
],[
|
|
tst_api="0x096"
|
|
])
|
|
fi
|
|
if test "$tst_api" = "unknown"; then
|
|
AC_LINK_IFELSE([
|
|
AC_LANG_FUNC_LINK_TRY([SSL_CTX_set_purpose])
|
|
],[
|
|
tst_api="0x095"
|
|
])
|
|
fi
|
|
if test "$tst_api" = "unknown"; then
|
|
AC_LINK_IFELSE([
|
|
AC_LANG_FUNC_LINK_TRY([OBJ_obj2txt])
|
|
],[
|
|
tst_api="0x094"
|
|
])
|
|
fi
|
|
if test "$tst_api" = "unknown"; then
|
|
AC_LINK_IFELSE([
|
|
AC_LANG_FUNC_LINK_TRY([SSL_get_verify_depth])
|
|
],[
|
|
tst_api="0x093"
|
|
])
|
|
fi
|
|
if test "$tst_api" = "unknown"; then
|
|
AC_LINK_IFELSE([
|
|
AC_LANG_FUNC_LINK_TRY([SSL_library_init])
|
|
],[
|
|
tst_api="0x092"
|
|
])
|
|
fi
|
|
if test "$tst_api" = "unknown"; then
|
|
AC_LINK_IFELSE([
|
|
AC_LANG_FUNC_LINK_TRY([SSL_CTX_set_cipher_list])
|
|
],[
|
|
tst_api="0x091"
|
|
])
|
|
fi
|
|
case $tst_api in
|
|
0x300) tst_show="3.0.0" ;;
|
|
0x111) tst_show="1.1.1" ;;
|
|
0x110) tst_show="1.1.0" ;;
|
|
0x102) tst_show="1.0.2" ;;
|
|
0x101) tst_show="1.0.1" ;;
|
|
0x100) tst_show="1.0.0" ;;
|
|
0x099) tst_show="0.9.9" ;;
|
|
0x098) tst_show="0.9.8" ;;
|
|
0x097) tst_show="0.9.7" ;;
|
|
0x096) tst_show="0.9.6" ;;
|
|
0x095) tst_show="0.9.5" ;;
|
|
0x094) tst_show="0.9.4" ;;
|
|
0x093) tst_show="0.9.3" ;;
|
|
0x092) tst_show="0.9.2" ;;
|
|
0x091) tst_show="0.9.1" ;;
|
|
*) tst_show="unknown" ;;
|
|
esac
|
|
AC_MSG_RESULT([$tst_show])
|
|
#
|
|
dnl if test "$tst_api" != "unknown"; then
|
|
dnl AC_DEFINE_UNQUOTED(HAVE_OPENSSL_API_LIBRARY, $tst_api,
|
|
dnl [OpenSSL library link time API. Defined only by configure script.
|
|
dnl No matter what, do not ever define this manually or by any other means.])
|
|
dnl fi
|
|
curl_openssl_api_library=$tst_api
|
|
])
|
|
|
|
|
|
dnl CURL_CHECK_OPENSSL_API
|
|
dnl -------------------------------------------------
|
|
|
|
AC_DEFUN([CURL_CHECK_OPENSSL_API], [
|
|
#
|
|
CURL_CHECK_OPENSSL_API_HEADERS
|
|
CURL_CHECK_OPENSSL_API_LIBRARY
|
|
#
|
|
tst_match="yes"
|
|
#
|
|
AC_MSG_CHECKING([for OpenSSL headers and library versions matching])
|
|
if test "$curl_openssl_api_headers" = "unknown" ||
|
|
test "$curl_openssl_api_library" = "unknown"; then
|
|
tst_match="fail"
|
|
tst_warns="Can not compare OpenSSL headers and library versions."
|
|
elif test "$curl_openssl_api_headers" != "$curl_openssl_api_library"; then
|
|
tst_match="no"
|
|
tst_warns="OpenSSL headers and library versions do not match."
|
|
fi
|
|
AC_MSG_RESULT([$tst_match])
|
|
if test "$tst_match" != "yes"; then
|
|
AC_MSG_WARN([$tst_warns])
|
|
fi
|
|
])
|
|
|
|
dnl **********************************************************************
|
|
dnl Check for OpenSSL libraries and headers
|
|
dnl **********************************************************************
|
|
|
|
AC_DEFUN([CURL_WITH_OPENSSL], [
|
|
if test "x$OPT_OPENSSL" != xno; then
|
|
ssl_msg=
|
|
|
|
dnl backup the pre-ssl variables
|
|
CLEANLDFLAGS="$LDFLAGS"
|
|
CLEANCPPFLAGS="$CPPFLAGS"
|
|
CLEANLIBS="$LIBS"
|
|
|
|
dnl This is for Msys/Mingw
|
|
case $host in
|
|
*-*-msys* | *-*-mingw*)
|
|
AC_MSG_CHECKING([for gdi32])
|
|
my_ac_save_LIBS=$LIBS
|
|
LIBS="-lgdi32 $LIBS"
|
|
AC_LINK_IFELSE([ AC_LANG_PROGRAM([[
|
|
#include <windef.h>
|
|
#include <wingdi.h>
|
|
]],
|
|
[[
|
|
GdiFlush();
|
|
]])],
|
|
[ dnl worked!
|
|
AC_MSG_RESULT([yes])],
|
|
[ dnl failed, restore LIBS
|
|
LIBS=$my_ac_save_LIBS
|
|
AC_MSG_RESULT(no)]
|
|
)
|
|
;;
|
|
esac
|
|
|
|
case "$OPT_OPENSSL" in
|
|
yes)
|
|
dnl --with-openssl (without path) used
|
|
PKGTEST="yes"
|
|
PREFIX_OPENSSL=
|
|
;;
|
|
*)
|
|
dnl check the given --with-openssl spot
|
|
PKGTEST="no"
|
|
PREFIX_OPENSSL=$OPT_OPENSSL
|
|
|
|
dnl Try pkg-config even when cross-compiling. Since we
|
|
dnl specify PKG_CONFIG_LIBDIR we're only looking where
|
|
dnl the user told us to look
|
|
OPENSSL_PCDIR="$OPT_OPENSSL/lib/pkgconfig"
|
|
if test -f "$OPENSSL_PCDIR/openssl.pc"; then
|
|
AC_MSG_NOTICE([PKG_CONFIG_LIBDIR will be set to "$OPENSSL_PCDIR"])
|
|
PKGTEST="yes"
|
|
fi
|
|
|
|
if test "$PKGTEST" != "yes"; then
|
|
# try lib64 instead
|
|
OPENSSL_PCDIR="$OPT_OPENSSL/lib64/pkgconfig"
|
|
if test -f "$OPENSSL_PCDIR/openssl.pc"; then
|
|
AC_MSG_NOTICE([PKG_CONFIG_LIBDIR will be set to "$OPENSSL_PCDIR"])
|
|
PKGTEST="yes"
|
|
fi
|
|
fi
|
|
|
|
if test "$PKGTEST" != "yes"; then
|
|
if test ! -f "$PREFIX_OPENSSL/include/openssl/ssl.h"; then
|
|
AC_MSG_ERROR([$PREFIX_OPENSSL is a bad --with-openssl prefix!])
|
|
fi
|
|
fi
|
|
|
|
dnl in case pkg-config comes up empty, use what we got
|
|
dnl via --with-openssl
|
|
LIB_OPENSSL="$PREFIX_OPENSSL/lib$libsuff"
|
|
if test "$PREFIX_OPENSSL" != "/usr" ; then
|
|
SSL_LDFLAGS="-L$LIB_OPENSSL"
|
|
SSL_CPPFLAGS="-I$PREFIX_OPENSSL/include"
|
|
fi
|
|
SSL_CPPFLAGS="$SSL_CPPFLAGS -I$PREFIX_OPENSSL/include/openssl"
|
|
;;
|
|
esac
|
|
|
|
if test "$PKGTEST" = "yes"; then
|
|
|
|
CURL_CHECK_PKGCONFIG(openssl, [$OPENSSL_PCDIR])
|
|
|
|
if test "$PKGCONFIG" != "no" ; then
|
|
SSL_LIBS=`CURL_EXPORT_PCDIR([$OPENSSL_PCDIR]) dnl
|
|
$PKGCONFIG --libs-only-l --libs-only-other openssl 2>/dev/null`
|
|
|
|
SSL_LDFLAGS=`CURL_EXPORT_PCDIR([$OPENSSL_PCDIR]) dnl
|
|
$PKGCONFIG --libs-only-L openssl 2>/dev/null`
|
|
|
|
SSL_CPPFLAGS=`CURL_EXPORT_PCDIR([$OPENSSL_PCDIR]) dnl
|
|
$PKGCONFIG --cflags-only-I openssl 2>/dev/null`
|
|
|
|
AC_SUBST(SSL_LIBS)
|
|
AC_MSG_NOTICE([pkg-config: SSL_LIBS: "$SSL_LIBS"])
|
|
AC_MSG_NOTICE([pkg-config: SSL_LDFLAGS: "$SSL_LDFLAGS"])
|
|
AC_MSG_NOTICE([pkg-config: SSL_CPPFLAGS: "$SSL_CPPFLAGS"])
|
|
|
|
LIB_OPENSSL=`echo $SSL_LDFLAGS | sed -e 's/^-L//'`
|
|
|
|
dnl use the values pkg-config reported. This is here
|
|
dnl instead of below with CPPFLAGS and LDFLAGS because we only
|
|
dnl learn about this via pkg-config. If we only have
|
|
dnl the argument to --with-openssl we don't know what
|
|
dnl additional libs may be necessary. Hope that we
|
|
dnl don't need any.
|
|
LIBS="$SSL_LIBS $LIBS"
|
|
fi
|
|
fi
|
|
|
|
dnl finally, set flags to use SSL
|
|
CPPFLAGS="$CPPFLAGS $SSL_CPPFLAGS"
|
|
LDFLAGS="$LDFLAGS $SSL_LDFLAGS"
|
|
|
|
AC_CHECK_LIB(crypto, HMAC_Update,[
|
|
HAVECRYPTO="yes"
|
|
LIBS="-lcrypto $LIBS"
|
|
],[
|
|
if test -n "$LIB_OPENSSL" ; then
|
|
LDFLAGS="$CLEANLDFLAGS -L$LIB_OPENSSL"
|
|
fi
|
|
if test "$PKGCONFIG" = "no" -a -n "$PREFIX_OPENSSL" ; then
|
|
# only set this if pkg-config wasn't used
|
|
CPPFLAGS="$CLEANCPPFLAGS -I$PREFIX_OPENSSL/include/openssl -I$PREFIX_OPENSSL/include"
|
|
fi
|
|
# Linking previously failed, try extra paths from --with-openssl or
|
|
# pkg-config. Use a different function name to avoid reusing the earlier
|
|
# cached result.
|
|
AC_CHECK_LIB(crypto, HMAC_Init_ex,[
|
|
HAVECRYPTO="yes"
|
|
LIBS="-lcrypto $LIBS"], [
|
|
|
|
dnl still no, but what about with -ldl?
|
|
AC_MSG_CHECKING([OpenSSL linking with -ldl])
|
|
LIBS="-lcrypto $CLEANLIBS -ldl"
|
|
AC_LINK_IFELSE([ AC_LANG_PROGRAM([[
|
|
#include <openssl/err.h>
|
|
]], [[
|
|
ERR_clear_error();
|
|
]]) ],
|
|
[
|
|
AC_MSG_RESULT(yes)
|
|
HAVECRYPTO="yes"
|
|
],
|
|
[
|
|
AC_MSG_RESULT(no)
|
|
dnl ok, so what about both -ldl and -lpthread?
|
|
dnl This may be necessary for static libraries.
|
|
|
|
AC_MSG_CHECKING([OpenSSL linking with -ldl and -lpthread])
|
|
LIBS="-lcrypto $CLEANLIBS -ldl -lpthread"
|
|
AC_LINK_IFELSE([
|
|
AC_LANG_PROGRAM([[
|
|
#include <openssl/err.h>
|
|
]], [[
|
|
ERR_clear_error();
|
|
]])],
|
|
[
|
|
AC_MSG_RESULT(yes)
|
|
HAVECRYPTO="yes"
|
|
],
|
|
[
|
|
AC_MSG_RESULT(no)
|
|
LDFLAGS="$CLEANLDFLAGS"
|
|
CPPFLAGS="$CLEANCPPFLAGS"
|
|
LIBS="$CLEANLIBS"
|
|
|
|
])
|
|
|
|
])
|
|
|
|
])
|
|
])
|
|
|
|
if test X"$HAVECRYPTO" = X"yes"; then
|
|
dnl This is only reasonable to do if crypto actually is there: check for
|
|
dnl SSL libs NOTE: it is important to do this AFTER the crypto lib
|
|
|
|
AC_CHECK_LIB(ssl, SSL_connect)
|
|
|
|
if test "$ac_cv_lib_ssl_SSL_connect" != yes; then
|
|
dnl we didn't find the SSL lib, try the RSAglue/rsaref stuff
|
|
AC_MSG_CHECKING(for ssl with RSAglue/rsaref libs in use);
|
|
OLIBS=$LIBS
|
|
LIBS="-lRSAglue -lrsaref $LIBS"
|
|
AC_CHECK_LIB(ssl, SSL_connect)
|
|
if test "$ac_cv_lib_ssl_SSL_connect" != yes; then
|
|
dnl still no SSL_connect
|
|
AC_MSG_RESULT(no)
|
|
LIBS=$OLIBS
|
|
else
|
|
AC_MSG_RESULT(yes)
|
|
fi
|
|
|
|
else
|
|
|
|
dnl Have the libraries--check for OpenSSL headers
|
|
AC_CHECK_HEADERS(openssl/x509.h openssl/rsa.h openssl/crypto.h \
|
|
openssl/pem.h openssl/ssl.h openssl/err.h,
|
|
ssl_msg="OpenSSL"
|
|
test openssl != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
|
|
OPENSSL_ENABLED=1
|
|
AC_DEFINE(USE_OPENSSL, 1, [if OpenSSL is in use]))
|
|
|
|
if test $ac_cv_header_openssl_x509_h = no; then
|
|
dnl we don't use the "action" part of the AC_CHECK_HEADERS macro
|
|
dnl since 'err.h' might in fact find a krb4 header with the same
|
|
dnl name
|
|
AC_CHECK_HEADERS(x509.h rsa.h crypto.h pem.h ssl.h err.h)
|
|
|
|
if test $ac_cv_header_x509_h = yes &&
|
|
test $ac_cv_header_crypto_h = yes &&
|
|
test $ac_cv_header_ssl_h = yes; then
|
|
dnl three matches
|
|
ssl_msg="OpenSSL"
|
|
OPENSSL_ENABLED=1
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
if test X"$OPENSSL_ENABLED" != X"1"; then
|
|
LIBS="$CLEANLIBS"
|
|
fi
|
|
|
|
if test X"$OPT_OPENSSL" != Xoff &&
|
|
test "$OPENSSL_ENABLED" != "1"; then
|
|
AC_MSG_ERROR([OpenSSL libs and/or directories were not found where specified!])
|
|
fi
|
|
fi
|
|
|
|
if test X"$OPENSSL_ENABLED" = X"1"; then
|
|
dnl These can only exist if OpenSSL exists
|
|
dnl OpenSSL_version is introduced in 3.0.0
|
|
|
|
AC_CHECK_FUNCS( RAND_egd \
|
|
SSLv2_client_method \
|
|
OpenSSL_version )
|
|
|
|
AC_MSG_CHECKING([for BoringSSL])
|
|
AC_COMPILE_IFELSE([
|
|
AC_LANG_PROGRAM([[
|
|
#include <openssl/base.h>
|
|
]],[[
|
|
#ifndef OPENSSL_IS_BORINGSSL
|
|
#error not boringssl
|
|
#endif
|
|
]])
|
|
],[
|
|
AC_MSG_RESULT([yes])
|
|
AC_DEFINE_UNQUOTED(HAVE_BORINGSSL, 1,
|
|
[Define to 1 if using BoringSSL.])
|
|
ssl_msg="BoringSSL"
|
|
],[
|
|
AC_MSG_RESULT([no])
|
|
])
|
|
|
|
AC_MSG_CHECKING([for libressl])
|
|
AC_COMPILE_IFELSE([
|
|
AC_LANG_PROGRAM([[
|
|
#include <openssl/opensslv.h>
|
|
]],[[
|
|
int dummy = LIBRESSL_VERSION_NUMBER;
|
|
]])
|
|
],[
|
|
AC_MSG_RESULT([yes])
|
|
AC_DEFINE_UNQUOTED(HAVE_LIBRESSL, 1,
|
|
[Define to 1 if using libressl.])
|
|
ssl_msg="libressl"
|
|
],[
|
|
AC_MSG_RESULT([no])
|
|
])
|
|
|
|
AC_MSG_CHECKING([for OpenSSL >= v3])
|
|
AC_COMPILE_IFELSE([
|
|
AC_LANG_PROGRAM([[
|
|
#include <openssl/opensslv.h>
|
|
]],[[
|
|
#if defined(OPENSSL_VERSION_MAJOR) && (OPENSSL_VERSION_MAJOR >= 3)
|
|
return 0;
|
|
#else
|
|
#error older than 3
|
|
#endif
|
|
]])
|
|
],[
|
|
AC_MSG_RESULT([yes])
|
|
AC_DEFINE_UNQUOTED(HAVE_OPENSSL3, 1,
|
|
[Define to 1 if using OpenSSL 3 or later.])
|
|
dnl OpenSSLv3 marks the DES functions deprecated but we have no
|
|
dnl replacements (yet) so tell the compiler to not warn for them
|
|
dnl
|
|
dnl Ask OpenSSL to suppress the warnings.
|
|
CPPFLAGS="$CPPFLAGS -DOPENSSL_SUPPRESS_DEPRECATED"
|
|
ssl_msg="OpenSSL v3+"
|
|
],[
|
|
AC_MSG_RESULT([no])
|
|
])
|
|
fi
|
|
|
|
if test "$OPENSSL_ENABLED" = "1"; then
|
|
if test -n "$LIB_OPENSSL"; then
|
|
dnl when the ssl shared libs were found in a path that the run-time
|
|
dnl linker doesn't search through, we need to add it to CURL_LIBRARY_PATH
|
|
dnl to prevent further configure tests to fail due to this
|
|
if test "x$cross_compiling" != "xyes"; then
|
|
CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$LIB_OPENSSL"
|
|
export CURL_LIBRARY_PATH
|
|
AC_MSG_NOTICE([Added $LIB_OPENSSL to CURL_LIBRARY_PATH])
|
|
fi
|
|
fi
|
|
CURL_CHECK_OPENSSL_API
|
|
check_for_ca_bundle=1
|
|
fi
|
|
|
|
test -z "$ssl_msg" || ssl_backends="${ssl_backends:+$ssl_backends, }$ssl_msg"
|
|
fi
|
|
|
|
if test X"$OPT_OPENSSL" != Xno &&
|
|
test "$OPENSSL_ENABLED" != "1"; then
|
|
AC_MSG_NOTICE([OPT_OPENSSL: $OPT_OPENSSL])
|
|
AC_MSG_NOTICE([OPENSSL_ENABLED: $OPENSSL_ENABLED])
|
|
AC_MSG_ERROR([--with-openssl was given but OpenSSL could not be detected])
|
|
fi
|
|
|
|
dnl **********************************************************************
|
|
dnl Check for the random seed preferences
|
|
dnl **********************************************************************
|
|
|
|
if test X"$OPENSSL_ENABLED" = X"1"; then
|
|
AC_ARG_WITH(egd-socket,
|
|
AS_HELP_STRING([--with-egd-socket=FILE],
|
|
[Entropy Gathering Daemon socket pathname]),
|
|
[ EGD_SOCKET="$withval" ]
|
|
)
|
|
if test -n "$EGD_SOCKET" ; then
|
|
AC_DEFINE_UNQUOTED(EGD_SOCKET, "$EGD_SOCKET",
|
|
[your Entropy Gathering Daemon socket pathname] )
|
|
fi
|
|
|
|
dnl Check for user-specified random device
|
|
AC_ARG_WITH(random,
|
|
AS_HELP_STRING([--with-random=FILE],
|
|
[read randomness from FILE (default=/dev/urandom)]),
|
|
[ RANDOM_FILE="$withval" ],
|
|
[
|
|
if test x$cross_compiling != xyes; then
|
|
dnl Check for random device
|
|
AC_CHECK_FILE("/dev/urandom", [ RANDOM_FILE="/dev/urandom"] )
|
|
else
|
|
AC_MSG_WARN([skipped the /dev/urandom detection when cross-compiling])
|
|
fi
|
|
]
|
|
)
|
|
if test -n "$RANDOM_FILE" && test X"$RANDOM_FILE" != Xno ; then
|
|
AC_SUBST(RANDOM_FILE)
|
|
AC_DEFINE_UNQUOTED(RANDOM_FILE, "$RANDOM_FILE",
|
|
[a suitable file to read random data from])
|
|
fi
|
|
fi
|
|
|
|
dnl ---
|
|
dnl We require OpenSSL with SRP support.
|
|
dnl ---
|
|
if test "$OPENSSL_ENABLED" = "1"; then
|
|
AC_CHECK_LIB(crypto, SRP_Calc_client_key,
|
|
[
|
|
AC_DEFINE(HAVE_OPENSSL_SRP, 1, [if you have the function SRP_Calc_client_key])
|
|
AC_SUBST(HAVE_OPENSSL_SRP, [1])
|
|
])
|
|
fi
|
|
|
|
dnl ---
|
|
dnl Whether the OpenSSL configuration will be loaded automatically
|
|
dnl ---
|
|
if test X"$OPENSSL_ENABLED" = X"1"; then
|
|
AC_ARG_ENABLE(openssl-auto-load-config,
|
|
AS_HELP_STRING([--enable-openssl-auto-load-config],[Enable automatic loading of OpenSSL configuration])
|
|
AS_HELP_STRING([--disable-openssl-auto-load-config],[Disable automatic loading of OpenSSL configuration]),
|
|
[ if test X"$enableval" = X"no"; then
|
|
AC_MSG_NOTICE([automatic loading of OpenSSL configuration disabled])
|
|
AC_DEFINE(CURL_DISABLE_OPENSSL_AUTO_LOAD_CONFIG, 1, [if the OpenSSL configuration won't be loaded automatically])
|
|
fi
|
|
])
|
|
fi
|
|
|
|
])
|