X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=configure.ac;h=c261f49e1a93a77edd368e27f72176cdf1211992;hb=HEAD;hp=7d01eee6ce6270617c553db621ae7666aa063dd5;hpb=0be6abcfa9907d66495e75d33667479a62639bd9;p=platform%2Fupstream%2Fcurl.git diff --git a/configure.ac b/configure.ac old mode 100644 new mode 100755 index 7d01eee..c261f49 --- a/configure.ac +++ b/configure.ac @@ -5,7 +5,7 @@ # | (__| |_| | _ <| |___ # \___|\___/|_| \_\_____| # -# Copyright (C) 1998 - 2016, Daniel Stenberg, , et al. +# Copyright (C) 1998 - 2018, Daniel Stenberg, , et al. # # This software is licensed as described in the file COPYING, which # you should have received as part of this distribution. The terms @@ -31,12 +31,12 @@ XC_OVR_ZZ60 CURL_OVERRIDE_AUTOCONF dnl configure script copyright -AC_COPYRIGHT([Copyright (c) 1998 - 2016 Daniel Stenberg, +AC_COPYRIGHT([Copyright (c) 1998 - 2017 Daniel Stenberg, This configure script may be copied, distributed and modified under the terms of the curl license; see COPYING for more details]) AC_CONFIG_SRCDIR([lib/urldata.h]) -AC_CONFIG_HEADERS(lib/curl_config.h include/curl/curlbuild.h) +AC_CONFIG_HEADERS(lib/curl_config.h) AC_CONFIG_MACRO_DIR([m4]) AM_MAINTAINER_MODE m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) @@ -120,14 +120,16 @@ AC_SUBST([AR]) AC_SUBST(libext) -dnl Remove non-configure distributed curlbuild.h -if test -f ${srcdir}/include/curl/curlbuild.h; then - rm -f ${srcdir}/include/curl/curlbuild.h -fi - dnl figure out the libcurl version -CURLVERSION=`$SED -ne 's/^#define LIBCURL_VERSION "\(.*\)"/\1/p' ${srcdir}/include/curl/curlver.h` +CURLVERSION=`$SED -ne 's/^#define LIBCURL_VERSION "\(.*\)".*/\1/p' ${srcdir}/include/curl/curlver.h` XC_CHECK_PROG_CC + +dnl Check if gcc is being used before adding AX_CODE_COVERAGE +AS_IF([ test "$GCC" = "yes" ], [AX_CODE_COVERAGE], + # not using GCC so pass a test below - CODE_COVERAGE_ENABLED_TRUE is not zero length + CODE_COVERAGE_ENABLED_TRUE='#' +) + XC_AUTOMAKE AC_MSG_CHECKING([curl version]) AC_MSG_RESULT($CURLVERSION) @@ -136,12 +138,12 @@ AC_SUBST(CURLVERSION) dnl dnl we extract the numerical version for curl-config only -VERSIONNUM=`$SED -ne 's/^#define LIBCURL_VERSION_NUM 0x\(.*\)/\1/p' ${srcdir}/include/curl/curlver.h` +VERSIONNUM=`$SED -ne 's/^#define LIBCURL_VERSION_NUM 0x\([0-9A-Fa-f]*\).*/\1/p' ${srcdir}/include/curl/curlver.h` AC_SUBST(VERSIONNUM) dnl Solaris pkgadd support definitions PKGADD_PKG="HAXXcurl" -PKGADD_NAME="cURL - a client that groks URLs" +PKGADD_NAME="curl - a client that groks URLs" PKGADD_VENDOR="curl.haxx.se" AC_SUBST(PKGADD_PKG) AC_SUBST(PKGADD_NAME) @@ -152,12 +154,13 @@ dnl initialize all the info variables curl_ssl_msg="no (--with-{ssl,gnutls,nss,polarssl,mbedtls,cyassl,axtls,winssl,darwinssl} )" curl_ssh_msg="no (--with-libssh2)" curl_zlib_msg="no (--with-zlib)" + curl_brotli_msg="no (--with-brotli)" curl_gss_msg="no (--with-gssapi)" curl_tls_srp_msg="no (--enable-tls-srp)" curl_res_msg="default (--enable-ares / --enable-threaded-resolver)" curl_ipv6_msg="no (--enable-ipv6)" curl_unix_sockets_msg="no (--enable-unix-sockets)" - curl_idn_msg="no (--with-{libidn,winidn})" + curl_idn_msg="no (--with-{libidn2,winidn})" curl_manual_msg="no (--enable-manual)" curl_libcurl_msg="enabled (--disable-libcurl-option)" curl_verbose_msg="enabled (--disable-verbose)" @@ -169,7 +172,7 @@ curl_verbose_msg="enabled (--disable-verbose)" curl_mtlnk_msg="no (--with-libmetalink)" curl_psl_msg="no (--with-libpsl)" - init_ssl_msg=${curl_ssl_msg} + ssl_backends= dnl dnl Save some initial values the user might have provided @@ -187,9 +190,6 @@ AC_DEFINE_UNQUOTED(OS, "${host}", [cpu-machine-OS]) dnl Checks for programs. -dnl Our curl_off_t internal and external configure settings -CURL_CONFIGURE_CURL_OFF_T - dnl This defines _ALL_SOURCE for AIX CURL_CHECK_AIX_ALL_SOURCE @@ -339,7 +339,7 @@ dnl ********************************************************************** CURL_CHECK_HEADER_WINDOWS CURL_CHECK_NATIVE_WINDOWS -case X-"$ac_cv_native_windows" in +case X-"$curl_cv_native_windows" in X-yes) CURL_CHECK_HEADER_WINSOCK CURL_CHECK_HEADER_WINSOCK2 @@ -348,15 +348,18 @@ case X-"$ac_cv_native_windows" in CURL_CHECK_HEADER_WINBER ;; *) - ac_cv_header_winsock_h="no" - ac_cv_header_winsock2_h="no" - ac_cv_header_ws2tcpip_h="no" - ac_cv_header_winldap_h="no" - ac_cv_header_winber_h="no" + curl_cv_header_winsock_h="no" + curl_cv_header_winsock2_h="no" + curl_cv_header_ws2tcpip_h="no" + curl_cv_header_winldap_h="no" + curl_cv_header_winber_h="no" ;; esac CURL_CHECK_WIN32_LARGEFILE +CURL_MAC_CFLAGS +CURL_SUPPORTS_BUILTIN_AVAILABLE + dnl ************************************************************ dnl switch off particular protocols dnl @@ -368,6 +371,7 @@ AC_HELP_STRING([--disable-http],[Disable HTTP support]), no) AC_MSG_RESULT(no) AC_DEFINE(CURL_DISABLE_HTTP, 1, [to disable HTTP]) + disable_http="yes" AC_MSG_WARN([disable HTTP disables FTP over proxy and RTSP]) AC_SUBST(CURL_DISABLE_HTTP, [1]) AC_DEFINE(CURL_DISABLE_RTSP, 1, [to disable RTSP]) @@ -742,8 +746,8 @@ fi if test "$HAVE_GETHOSTBYNAME" != "1" then dnl This is for winsock systems - if test "$ac_cv_header_windows_h" = "yes"; then - if test "$ac_cv_header_winsock_h" = "yes"; then + if test "$curl_cv_header_windows_h" = "yes"; then + if test "$curl_cv_header_winsock_h" = "yes"; then case $host in *-*-mingw32ce*) winsock_LIB="-lwinsock" @@ -753,7 +757,7 @@ then ;; esac fi - if test "$ac_cv_header_winsock2_h" = "yes"; then + if test "$curl_cv_header_winsock2_h" = "yes"; then winsock_LIB="-lws2_32" fi if test ! -z "$winsock_LIB"; then @@ -851,17 +855,6 @@ if test "$HAVE_GETHOSTBYNAME" != "1"; then AC_MSG_ERROR([couldn't find libraries for gethostbyname()]) fi -dnl resolve lib? -AC_CHECK_FUNC(strcasecmp, , [ AC_CHECK_LIB(resolve, strcasecmp) ]) - -if test "$ac_cv_lib_resolve_strcasecmp" = "$ac_cv_func_strcasecmp"; then - AC_CHECK_LIB(resolve, strcasecmp, - [LIBS="-lresolve $LIBS"], - , - -lnsl) -fi -ac_cv_func_strcasecmp="no" - CURL_CHECK_LIBS_CONNECT CURL_NETWORK_LIBS=$LIBS @@ -903,16 +896,28 @@ else fi if test -z "$OPT_ZLIB" ; then - dnl check for the lib first without setting any new path, since many - dnl people have it in the default path + CURL_CHECK_PKGCONFIG(zlib) + + if test "$PKGCONFIG" != "no" ; then + LIBS="`$PKGCONFIG --libs-only-l zlib` $LIBS" + LDFLAGS="$LDFLAGS `$PKGCONFIG --libs-only-L zlib`" + CPPFLAGS="$CPPFLAGS `$PKGCONFIG --cflags-only-I zlib`" + OPT_ZLIB="" + HAVE_LIBZ="1" + fi + + if test -z "$HAVE_LIBZ"; then - AC_CHECK_LIB(z, inflateEnd, + dnl Check for the lib without setting any new path, since many + dnl people have it in the default path + + AC_CHECK_LIB(z, inflateEnd, dnl libz found, set the variable [HAVE_LIBZ="1" LIBS="-lz $LIBS"], dnl if no lib found, try /usr/local [OPT_ZLIB="/usr/local"]) - + fi fi dnl Add a nonempty path to the compiler flags @@ -978,6 +983,94 @@ AM_CONDITIONAL(HAVE_LIBZ, test x"$AMFIXLIB" = x1) AC_SUBST(ZLIB_LIBS) dnl ********************************************************************** +dnl Check for the presence of BROTLI decoder libraries and headers +dnl ********************************************************************** + +dnl Brotli project home page: https://github.com/google/brotli + +dnl Default to compiler & linker defaults for BROTLI files & libraries. +OPT_BROTLI=off +AC_ARG_WITH(brotli,dnl +AC_HELP_STRING([--with-brotli=PATH],[Where to look for brotli, PATH points to the BROTLI installation; when possible, set the PKG_CONFIG_PATH environment variable instead of using this option]) +AC_HELP_STRING([--without-brotli], [disable BROTLI]), + OPT_BROTLI=$withval) + +if test X"$OPT_BROTLI" != Xno; then + dnl backup the pre-brotli variables + CLEANLDFLAGS="$LDFLAGS" + CLEANCPPFLAGS="$CPPFLAGS" + CLEANLIBS="$LIBS" + + case "$OPT_BROTLI" in + yes) + dnl --with-brotli (without path) used + CURL_CHECK_PKGCONFIG(libbrotlidec) + + if test "$PKGCONFIG" != "no" ; then + LIB_BROTLI=`$PKGCONFIG --libs-only-l libbrotlidec` + LD_BROTLI=`$PKGCONFIG --libs-only-L libbrotlidec` + CPP_BROTLI=`$PKGCONFIG --cflags-only-I libbrotlidec` + version=`$PKGCONFIG --modversion libbrotlidec` + DIR_BROTLI=`echo $LD_BROTLI | $SED -e 's/-L//'` + fi + + ;; + off) + dnl no --with-brotli option given, just check default places + ;; + *) + dnl use the given --with-brotli spot + PREFIX_BROTLI=$OPT_BROTLI + ;; + esac + + dnl if given with a prefix, we set -L and -I based on that + if test -n "$PREFIX_BROTLI"; then + LIB_BROTLI="-lbrotlidec" + LD_BROTLI=-L${PREFIX_BROTLI}/lib$libsuff + CPP_BROTLI=-I${PREFIX_BROTLI}/include + DIR_BROTLI=${PREFIX_BROTLI}/lib$libsuff + fi + + LDFLAGS="$LDFLAGS $LD_BROTLI" + CPPFLAGS="$CPPFLAGS $CPP_BROTLI" + LIBS="$LIB_BROTLI $LIBS" + + AC_CHECK_LIB(brotlidec, BrotliDecoderDecompress) + + AC_CHECK_HEADERS(brotli/decode.h, + curl_brotli_msg="enabled (libbrotlidec)" + HAVE_BROTLI=1 + AC_DEFINE(HAVE_BROTLI, 1, [if BROTLI is in use]) + AC_SUBST(HAVE_BROTLI, [1]) + ) + + if test X"$OPT_BROTLI" != Xoff && + test "$HAVE_BROTLI" != "1"; then + AC_MSG_ERROR([BROTLI libs and/or directories were not found where specified!]) + fi + + if test "$HAVE_BROTLI" = "1"; then + if test -n "$DIR_BROTLI"; then + dnl when the brotli shared libs were found in a path that the run-time + dnl linker doesn't search through, we need to add it to LD_LIBRARY_PATH + dnl to prevent further configure tests to fail due to this + + if test "x$cross_compiling" != "xyes"; then + LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$DIR_BROTLI" + export LD_LIBRARY_PATH + AC_MSG_NOTICE([Added $DIR_BROTLI to LD_LIBRARY_PATH]) + fi + fi + else + dnl no brotli, revert back to clean variables + LDFLAGS=$CLEANLDFLAGS + CPPFLAGS=$CLEANCPPFLAGS + LIBS=$CLEANLIBS + fi +fi + +dnl ********************************************************************** dnl Check for LDAP dnl ********************************************************************** @@ -999,7 +1092,7 @@ if test x$CURL_DISABLE_LDAP != x1 ; then CURL_CHECK_HEADER_LDAP_SSL if test -z "$LDAPLIBNAME" ; then - if test "$ac_cv_native_windows" = "yes"; then + if test "$curl_cv_native_windows" = "yes"; then dnl Windows uses a single and unique LDAP library name LDAPLIBNAME="wldap32" LBERLIBNAME="no" @@ -1119,6 +1212,9 @@ if test "$ipv6" = yes; then #include #else #include +#if defined (__TANDEM) +# include +#endif #endif] , struct sockaddr_in6 s; s.sin6_scope_id = 0; , have_sin6_scope_id=yes) if test "$have_sin6_scope_id" = yes; then @@ -1336,6 +1432,41 @@ else CPPFLAGS="$save_CPPFLAGS" fi +build_libstubgss=no +if test x"$want_gss" = "xyes"; then + build_libstubgss=yes +fi + +AM_CONDITIONAL(BUILD_STUB_GSS, test "x$build_libstubgss" = "xyes") + +dnl ------------------------------------------------------------- +dnl parse --with-default-ssl-backend so it can be validated below +dnl ------------------------------------------------------------- + +DEFAULT_SSL_BACKEND=no +VALID_DEFAULT_SSL_BACKEND= +AC_ARG_WITH(default-ssl-backend, +AC_HELP_STRING([--with-default-ssl-backend=NAME],[Use NAME as default SSL backend]) +AC_HELP_STRING([--without-default-ssl-backend],[Use implicit default SSL backend]), + [DEFAULT_SSL_BACKEND=$withval]) +case "$DEFAULT_SSL_BACKEND" in + no) + dnl --without-default-ssl-backend option used + ;; + default|yes) + dnl --with-default-ssl-backend option used without name + AC_MSG_ERROR([The name of the default SSL backend is required.]) + ;; + *) + dnl --with-default-ssl-backend option used with name + AC_SUBST(DEFAULT_SSL_BACKEND) + dnl needs to be validated below + VALID_DEFAULT_SSL_BACKEND=no + ;; +esac + +dnl ********************************************************************** + dnl ------------------------------------------------- dnl check winssl option before other SSL libraries dnl ------------------------------------------------- @@ -1347,44 +1478,50 @@ AC_HELP_STRING([--without-winssl], [disable Windows native SSL/TLS]), OPT_WINSSL=$withval) AC_MSG_CHECKING([whether to enable Windows native SSL/TLS (Windows native builds only)]) -if test "$curl_ssl_msg" = "$init_ssl_msg"; then +if test -z "$ssl_backends" -o "x$OPT_WINSSL" != xno; then + ssl_msg= if test "x$OPT_WINSSL" != "xno" && - test "x$ac_cv_native_windows" = "xyes"; then + test "x$curl_cv_native_windows" = "xyes"; then AC_MSG_RESULT(yes) AC_DEFINE(USE_SCHANNEL, 1, [to enable Windows native SSL/TLS support]) AC_SUBST(USE_SCHANNEL, [1]) - curl_ssl_msg="enabled (Windows-native)" + ssl_msg="Windows-native" + test schannel != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes WINSSL_ENABLED=1 # --with-winssl implies --enable-sspi AC_DEFINE(USE_WINDOWS_SSPI, 1, [to enable SSPI support]) AC_SUBST(USE_WINDOWS_SSPI, [1]) curl_sspi_msg="enabled" + LIBS="-lcrypt32 $LIBS" else AC_MSG_RESULT(no) fi + test -z "$ssl_msg" || ssl_backends="${ssl_backends:+$ssl_backends, }$ssl_msg" else AC_MSG_RESULT(no) fi OPT_DARWINSSL=no AC_ARG_WITH(darwinssl,dnl -AC_HELP_STRING([--with-darwinssl],[enable iOS/Mac OS X native SSL/TLS]) -AC_HELP_STRING([--without-darwinssl], [disable iOS/Mac OS X native SSL/TLS]), +AC_HELP_STRING([--with-darwinssl],[enable Apple OS native SSL/TLS]) +AC_HELP_STRING([--without-darwinssl], [disable Apple OS native SSL/TLS]), OPT_DARWINSSL=$withval) -AC_MSG_CHECKING([whether to enable iOS/Mac OS X native SSL/TLS]) -if test "$curl_ssl_msg" = "$init_ssl_msg"; then +AC_MSG_CHECKING([whether to enable Apple OS native SSL/TLS]) +if test -z "$ssl_backends" -o "x$OPT_DARWINSSL" != xno; then if test "x$OPT_DARWINSSL" != "xno" && test -d "/System/Library/Frameworks/Security.framework"; then AC_MSG_RESULT(yes) - AC_DEFINE(USE_DARWINSSL, 1, [to enable iOS/Mac OS X native SSL/TLS support]) + AC_DEFINE(USE_DARWINSSL, 1, [to enable Apple OS native SSL/TLS support]) AC_SUBST(USE_DARWINSSL, [1]) - curl_ssl_msg="enabled (iOS/Mac OS X-native)" + ssl_msg="Apple OS-native" + test darwinssl != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes DARWINSSL_ENABLED=1 LDFLAGS="$LDFLAGS -framework CoreFoundation -framework Security" else AC_MSG_RESULT(no) fi + test -z "$ssl_msg" || ssl_backends="${ssl_backends:+$ssl_backends, }$ssl_msg" else AC_MSG_RESULT(no) fi @@ -1402,7 +1539,10 @@ AC_HELP_STRING([--with-ssl=PATH],[Where to look for OpenSSL, PATH points to the AC_HELP_STRING([--without-ssl], [disable OpenSSL]), OPT_SSL=$withval) -if test "$curl_ssl_msg" = "$init_ssl_msg" && test X"$OPT_SSL" != Xno; then +if test -z "$ssl_backends" -o "x$OPT_SSL" != xno && + test X"$OPT_SSL" != Xno; then + ssl_msg= + dnl backup the pre-ssl variables CLEANLDFLAGS="$LDFLAGS" CLEANCPPFLAGS="$CPPFLAGS" @@ -1513,52 +1653,50 @@ if test "$curl_ssl_msg" = "$init_ssl_msg" && test X"$OPT_SSL" != Xno; then AC_CHECK_LIB(crypto, HMAC_Init_ex,[ HAVECRYPTO="yes" LIBS="-lcrypto $LIBS"], [ - LDFLAGS="$CLEANLDFLAGS" - CPPFLAGS="$CLEANCPPFLAGS" - LIBS="$CLEANLIBS" - ]) - ]) - - if test X"$HAVECRYPTO" = X"yes"; then - AC_MSG_CHECKING([OpenSSL linking without -ldl]) - saved_libs=$LIBS - AC_TRY_LINK( - [ - #include - ], - [ - SSLeay_add_all_algorithms(); - ], - [ - AC_MSG_RESULT(yes) - LIBS="$saved_libs" - ], - [ - AC_MSG_RESULT(no) - AC_MSG_CHECKING([OpenSSL linking with -ldl]) - LIBS="-ldl $LIBS" - AC_TRY_LINK( - [ - #include - ], - [ - SSLeay_add_all_algorithms(); - ], - [ - AC_MSG_RESULT(yes) - LIBS="$saved_libs -ldl" - ], - [ - AC_MSG_RESULT(no) - LIBS="$saved_libs" - ] - ) + dnl still no, but what about with -ldl? + AC_MSG_CHECKING([OpenSSL linking with -ldl]) + LIBS="$LIBS -ldl" + AC_TRY_LINK( + [ + #include + ], + [ + ERR_clear_error(); + ], + [ + AC_MSG_RESULT(yes) + HAVECRYPTO="yes" + ], + [ + AC_MSG_RESULT(no) + dnl ok, so what about bouth -ldl and -lpthread? + + AC_MSG_CHECKING([OpenSSL linking with -ldl and -lpthread]) + LIBS="$LIBS -lpthread" + AC_TRY_LINK( + [ + #include + ], + [ + ERR_clear_error(); + ], + [ + AC_MSG_RESULT(yes) + HAVECRYPTO="yes" + ], + [ + AC_MSG_RESULT(no) + LDFLAGS="$CLEANLDFLAGS" + CPPFLAGS="$CLEANCPPFLAGS" + LIBS="$CLEANLIBS" + + ]) - ] - ) + ]) - fi + ]) + ]) if test X"$HAVECRYPTO" = X"yes"; then dnl This is only reasonable to do if crypto actually is there: check for @@ -1585,7 +1723,8 @@ if test "$curl_ssl_msg" = "$init_ssl_msg" && test X"$OPT_SSL" != Xno; then 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, - curl_ssl_msg="enabled (OpenSSL)" + 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])) @@ -1599,16 +1738,13 @@ if test "$curl_ssl_msg" = "$init_ssl_msg" && test X"$OPT_SSL" != Xno; then test $ac_cv_header_crypto_h = yes && test $ac_cv_header_ssl_h = yes; then dnl three matches - curl_ssl_msg="enabled (OpenSSL)" + ssl_msg="OpenSSL" OPENSSL_ENABLED=1 fi fi fi - if test X"$OPENSSL_ENABLED" = X"1"; then - dnl is there a pkcs12.h header present? - AC_CHECK_HEADERS(openssl/pkcs12.h) - else + if test X"$OPENSSL_ENABLED" != X"1"; then LIBS="$CLEANLIBS" fi @@ -1632,11 +1768,8 @@ if test "$curl_ssl_msg" = "$init_ssl_msg" && test X"$OPT_SSL" != Xno; then dnl SSL_get_shutdown (but this check won't actually detect it there dnl as it's a macro that needs the header files be included) - AC_CHECK_FUNCS( RAND_status \ - RAND_screen \ - RAND_egd \ + AC_CHECK_FUNCS( RAND_egd \ ENGINE_cleanup \ - CRYPTO_cleanup_all_ex_data \ SSL_get_shutdown \ SSLv2_client_method ) @@ -1653,7 +1786,7 @@ if test "$curl_ssl_msg" = "$init_ssl_msg" && test X"$OPT_SSL" != Xno; then AC_MSG_RESULT([yes]) AC_DEFINE_UNQUOTED(HAVE_BORINGSSL, 1, [Define to 1 if using BoringSSL.]) - curl_ssl_msg="enabled (BoringSSL)" + ssl_msg="BoringSSL" ],[ AC_MSG_RESULT([no]) ]) @@ -1669,7 +1802,7 @@ if test "$curl_ssl_msg" = "$init_ssl_msg" && test X"$OPT_SSL" != Xno; then AC_MSG_RESULT([yes]) AC_DEFINE_UNQUOTED(HAVE_LIBRESSL, 1, [Define to 1 if using libressl.]) - curl_ssl_msg="enabled (libressl)" + ssl_msg="libressl" ],[ AC_MSG_RESULT([no]) ]) @@ -1689,6 +1822,7 @@ if test "$curl_ssl_msg" = "$init_ssl_msg" && test X"$OPT_SSL" != Xno; then CURL_CHECK_OPENSSL_API fi + test -z "$ssl_msg" || ssl_backends="${ssl_backends:+$ssl_backends, }$ssl_msg" fi dnl ********************************************************************** @@ -1750,7 +1884,8 @@ AC_HELP_STRING([--with-gnutls=PATH],[where to look for GnuTLS, PATH points to th AC_HELP_STRING([--without-gnutls], [disable GnuTLS detection]), OPT_GNUTLS=$withval) -if test "$curl_ssl_msg" = "$init_ssl_msg"; then +if test -z "$ssl_backends" -o "x$OPT_GNUTLS" != xno; then + ssl_msg= if test X"$OPT_GNUTLS" != Xno; then @@ -1824,7 +1959,8 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then AC_SUBST(USE_GNUTLS, [1]) GNUTLS_ENABLED=1 USE_GNUTLS="yes" - curl_ssl_msg="enabled (GnuTLS)" + ssl_msg="GnuTLS" + test gnutls != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes ], [ LIBS="$CLEANLIBS" @@ -1839,19 +1975,20 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then dnl linker doesn't search through, we need to add it to dnl LD_LIBRARY_PATH to prevent further configure tests to fail dnl due to this - if test "x$cross_compiling" != "xyes"; then + if test "x$cross_compiling" != "xyes"; then LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$gtlslib" export LD_LIBRARY_PATH AC_MSG_NOTICE([Added $gtlslib to LD_LIBRARY_PATH]) fi fi - AC_CHECK_FUNCS(gnutls_certificate_set_x509_key_file2) + AC_CHECK_FUNCS([gnutls_certificate_set_x509_key_file2 gnutls_alpn_set_protocols gnutls_ocsp_req_init]) fi fi fi dnl GNUTLS not disabled + test -z "$ssl_msg" || ssl_backends="${ssl_backends:+$ssl_backends, }$ssl_msg" fi dnl --- @@ -1909,7 +2046,8 @@ AC_HELP_STRING([--with-polarssl=PATH],[where to look for PolarSSL, PATH points t AC_HELP_STRING([--without-polarssl], [disable PolarSSL detection]), OPT_POLARSSL=$withval) -if test "$curl_ssl_msg" = "$init_ssl_msg"; then +if test -z "$ssl_backends" -o "x$OPT_POLARSSL" != xno; then + ssl_msg= if test X"$OPT_POLARSSL" != Xno; then @@ -1927,7 +2065,8 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then AC_SUBST(USE_POLARSSL, [1]) POLARSSL_ENABLED=1 USE_POLARSSL="yes" - curl_ssl_msg="enabled (PolarSSL)" + ssl_msg="PolarSSL" + test polarssl != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes ]) fi @@ -1953,7 +2092,8 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then AC_SUBST(USE_POLARSSL, [1]) POLARSSL_ENABLED=1 USE_POLARSSL="yes" - curl_ssl_msg="enabled (PolarSSL)" + ssl_msg="PolarSSL" + test polarssl != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes ], [ CPPFLAGS=$_cppflags @@ -1981,6 +2121,7 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then fi dnl PolarSSL not disabled + test -z "$ssl_msg" || ssl_backends="${ssl_backends:+$ssl_backends, }$ssl_msg" fi dnl ---------------------------------------------------- @@ -1996,7 +2137,8 @@ AC_HELP_STRING([--with-mbedtls=PATH],[where to look for mbedTLS, PATH points to AC_HELP_STRING([--without-mbedtls], [disable mbedTLS detection]), OPT_MBEDTLS=$withval) -if test "$curl_ssl_msg" = "$init_ssl_msg"; then +if test -z "$ssl_backends" -o "x$OPT_MBEDTLS" != xno; then + ssl_msg= if test X"$OPT_MBEDTLS" != Xno; then @@ -2014,7 +2156,8 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then AC_SUBST(USE_MBEDTLS, [1]) MBEDTLS_ENABLED=1 USE_MBEDTLS="yes" - curl_ssl_msg="enabled (mbedTLS)" + ssl_msg="mbedTLS" + test mbedtls != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes ], [], -lmbedx509 -lmbedcrypto) fi @@ -2040,7 +2183,8 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then AC_SUBST(USE_MBEDTLS, [1]) MBEDTLS_ENABLED=1 USE_MBEDTLS="yes" - curl_ssl_msg="enabled (mbedTLS)" + ssl_msg="mbedTLS" + test mbedtls != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes ], [ CPPFLAGS=$_cppflags @@ -2068,6 +2212,7 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then fi dnl mbedTLS not disabled + test -z "$ssl_msg" || ssl_backends="${ssl_backends:+$ssl_backends, }$ssl_msg" fi dnl ---------------------------------------------------- @@ -2084,7 +2229,8 @@ AC_HELP_STRING([--with-cyassl=PATH],[where to look for CyaSSL, PATH points to th AC_HELP_STRING([--without-cyassl], [disable CyaSSL detection]), OPT_CYASSL=$withval) -if test "$curl_ssl_msg" = "$init_ssl_msg"; then +if test -z "$ssl_backends" -o "x$OPT_CYASSL" != xno; then + ssl_msg= if test X"$OPT_CYASSL" != Xno; then @@ -2106,7 +2252,8 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then AC_SUBST(USE_CYASSL, [1]) CYASSL_ENABLED=1 USE_CYASSL="yes" - curl_ssl_msg="enabled (CyaSSL)" + ssl_msg="CyaSSL" + test cyassl != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes ]) fi @@ -2132,7 +2279,8 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then AC_SUBST(USE_CYASSL, [1]) CYASSL_ENABLED=1 USE_CYASSL="yes" - curl_ssl_msg="enabled (CyaSSL)" + ssl_msg="CyaSSL" + test cyassl != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes ], [ CPPFLAGS=$_cppflags @@ -2177,7 +2325,8 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then AC_SUBST(USE_CYASSL, [1]) CYASSL_ENABLED=1 USE_CYASSL="yes" - curl_ssl_msg="enabled (WolfSSL)" + ssl_msg="WolfSSL" + test cyassl != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes ], [ AC_MSG_RESULT(no) @@ -2206,10 +2355,13 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then dnl Recent WolfSSL versions build without SSLv3 by default dnl WolfSSL needs configure --enable-opensslextra to have *get_peer* AC_CHECK_FUNCS(wolfSSLv3_client_method \ - wolfSSL_get_peer_certificate) + wolfSSL_CTX_UseSupportedCurve \ + wolfSSL_get_peer_certificate \ + wolfSSL_UseALPN) else dnl Cyassl needs configure --enable-opensslextra to have *get_peer* - AC_CHECK_FUNCS(CyaSSL_get_peer_certificate) + AC_CHECK_FUNCS(CyaSSL_CTX_UseSupportedCurve \ + CyaSSL_get_peer_certificate) fi if test -n "$cyassllib"; then @@ -2228,6 +2380,7 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then fi dnl CyaSSL not disabled + test -z "$ssl_msg" || ssl_backends="${ssl_backends:+$ssl_backends, }$ssl_msg" fi dnl ---------------------------------------------------- @@ -2242,7 +2395,8 @@ AC_HELP_STRING([--with-nss=PATH],[where to look for NSS, PATH points to the inst AC_HELP_STRING([--without-nss], [disable NSS detection]), OPT_NSS=$withval) -if test "$curl_ssl_msg" = "$init_ssl_msg"; then +if test -z "$ssl_backends" -o "x$OPT_NSS" != xno; then + ssl_msg= if test X"$OPT_NSS" != Xno; then @@ -2317,7 +2471,8 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then AC_SUBST(USE_NSS, [1]) USE_NSS="yes" NSS_ENABLED=1 - curl_ssl_msg="enabled (NSS)" + ssl_msg="NSS" + test nss != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes ], [ LDFLAGS="$CLEANLDFLAGS" @@ -2328,6 +2483,15 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then if test "x$USE_NSS" = "xyes"; then AC_MSG_NOTICE([detected NSS version $version]) + dnl PK11_CreateManagedGenericObject() was introduced in NSS 3.34 because + dnl PK11_DestroyGenericObject() does not release resources allocated by + dnl PK11_CreateGenericObject() early enough. + AC_CHECK_FUNC(PK11_CreateManagedGenericObject, + [ + AC_DEFINE(HAVE_PK11_CREATEMANAGEDGENERICOBJECT, 1, + [if you have the PK11_CreateManagedGenericObject function]) + ]) + dnl needed when linking the curl tool without USE_EXPLICIT_LIB_DEPS NSS_LIBS=$addlib AC_SUBST([NSS_LIBS]) @@ -2346,7 +2510,8 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then fi dnl NSS not disabled -fi dnl curl_ssl_msg = init_ssl_msg + test -z "$ssl_msg" || ssl_backends="${ssl_backends:+$ssl_backends, }$ssl_msg" +fi OPT_AXTLS=off @@ -2355,7 +2520,8 @@ AC_HELP_STRING([--with-axtls=PATH],[Where to look for axTLS, PATH points to the AC_HELP_STRING([--without-axtls], [disable axTLS]), OPT_AXTLS=$withval) -if test "$curl_ssl_msg" = "$init_ssl_msg"; then +if test -z "$ssl_backends" -o "x$OPT_AXTLS" != xno; then + ssl_msg= if test X"$OPT_AXTLS" != Xno; then dnl backup the pre-axtls variables CLEANLDFLAGS="$LDFLAGS" @@ -2389,7 +2555,8 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then AC_SUBST(USE_AXTLS, [1]) AXTLS_ENABLED=1 USE_AXTLS="yes" - curl_ssl_msg="enabled (axTLS)" + ssl_msg="axTLS" + test axtls != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes if test "x$cross_compiling" != "xyes"; then LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$LIB_AXTLS" @@ -2402,15 +2569,46 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then LIBS="$CLEANLIBS" ]) fi + test -z "$ssl_msg" || ssl_backends="${ssl_backends:+$ssl_backends, }$ssl_msg" fi -if test "x$OPENSSL_ENABLED$GNUTLS_ENABLED$NSS_ENABLED$POLARSSL_ENABLED$MBEDTLS_ENABLED$AXTLS_ENABLED$CYASSL_ENABLED$WINSSL_ENABLED$DARWINSSL_ENABLED" = "x"; then +case "x$OPENSSL_ENABLED$GNUTLS_ENABLED$NSS_ENABLED$POLARSSL_ENABLED$MBEDTLS_ENABLED$AXTLS_ENABLED$CYASSL_ENABLED$WINSSL_ENABLED$DARWINSSL_ENABLED" in +x) AC_MSG_WARN([SSL disabled, you will not be able to use HTTPS, FTPS, NTLM and more.]) AC_MSG_WARN([Use --with-ssl, --with-gnutls, --with-polarssl, --with-cyassl, --with-nss, --with-axtls, --with-winssl, or --with-darwinssl to address this.]) -else - # SSL is enabled, genericly + ;; +x1) + # one SSL backend is enabled + AC_SUBST(SSL_ENABLED) + SSL_ENABLED="1" + AC_MSG_NOTICE([built with one SSL backend]) + ;; +*) + # more than one SSL backend is enabled AC_SUBST(SSL_ENABLED) SSL_ENABLED="1" + AC_SUBST(CURL_WITH_MULTI_SSL) + CURL_WITH_MULTI_SSL="1" + AC_DEFINE(CURL_WITH_MULTI_SSL, 1, [built with multiple SSL backends]) + AC_MSG_NOTICE([built with multiple SSL backends]) + ;; +esac + +if test -n "$ssl_backends"; then + curl_ssl_msg="enabled ($ssl_backends)" +fi + +if test no = "$VALID_DEFAULT_SSL_BACKEND" +then + if test -n "$SSL_ENABLED" + then + AC_MSG_ERROR([Default SSL backend $DEFAULT_SSL_BACKEND not enabled!]) + else + AC_MSG_ERROR([Default SSL backend requires SSL!]) + fi +elif test yes = "$VALID_DEFAULT_SSL_BACKEND" +then + AC_DEFINE_UNQUOTED([CURL_DEFAULT_SSL_BACKEND], ["$DEFAULT_SSL_BACKEND"], [Default SSL backend]) fi dnl ********************************************************************** @@ -2491,8 +2689,8 @@ if test X"$OPT_LIBMETALINK" != Xno; then clean_CPPFLAGS="$CPPFLAGS" clean_LDFLAGS="$LDFLAGS" clean_LIBS="$LIBS" - CPPFLAGS="$addcflags $clean_CPPFLAGS" - LDFLAGS="$addld $clean_LDFLAGS" + CPPFLAGS="$clean_CPPFLAGS $addcflags" + LDFLAGS="$clean_LDFLAGS $addld" LIBS="$addlib $clean_LIBS" AC_MSG_CHECKING([if libmetalink is recent enough]) AC_LINK_IFELSE([ @@ -2536,8 +2734,15 @@ dnl Default to compiler & linker defaults for LIBSSH2 files & libraries. OPT_LIBSSH2=off AC_ARG_WITH(libssh2,dnl AC_HELP_STRING([--with-libssh2=PATH],[Where to look for libssh2, PATH points to the LIBSSH2 installation; when possible, set the PKG_CONFIG_PATH environment variable instead of using this option]) -AC_HELP_STRING([--without-libssh2], [disable LIBSSH2]), - OPT_LIBSSH2=$withval) +AC_HELP_STRING([--with-libssh2], [enable LIBSSH2]), + OPT_LIBSSH2=$withval, OPT_LIBSSH2=no) + + +OPT_LIBSSH=off +AC_ARG_WITH(libssh,dnl +AC_HELP_STRING([--with-libssh=PATH],[Where to look for libssh, PATH points to the LIBSSH installation; when possible, set the PKG_CONFIG_PATH environment variable instead of using this option]) +AC_HELP_STRING([--with-libssh], [enable LIBSSH]), + OPT_LIBSSH=$withval, OPT_LIBSSH=no) if test X"$OPT_LIBSSH2" != Xno; then dnl backup the pre-libssh2 variables @@ -2612,6 +2817,79 @@ if test X"$OPT_LIBSSH2" != Xno; then CPPFLAGS=$CLEANCPPFLAGS LIBS=$CLEANLIBS fi +elif test X"$OPT_LIBSSH" != Xno; then + dnl backup the pre-libssh variables + CLEANLDFLAGS="$LDFLAGS" + CLEANCPPFLAGS="$CPPFLAGS" + CLEANLIBS="$LIBS" + + case "$OPT_LIBSSH" in + yes) + dnl --with-libssh (without path) used + CURL_CHECK_PKGCONFIG(libssh) + + if test "$PKGCONFIG" != "no" ; then + LIB_SSH=`$PKGCONFIG --libs-only-l libssh` + LD_SSH=`$PKGCONFIG --libs-only-L libssh` + CPP_SSH=`$PKGCONFIG --cflags-only-I libssh` + version=`$PKGCONFIG --modversion libssh` + DIR_SSH=`echo $LD_SSH | $SED -e 's/-L//'` + fi + + ;; + off) + dnl no --with-libssh option given, just check default places + ;; + *) + dnl use the given --with-libssh spot + PREFIX_SSH=$OPT_LIBSSH + ;; + esac + + dnl if given with a prefix, we set -L and -I based on that + if test -n "$PREFIX_SSH"; then + LIB_SSH="-lssh" + LD_SSH=-L${PREFIX_SSH}/lib$libsuff + CPP_SSH=-I${PREFIX_SSH}/include + DIR_SSH=${PREFIX_SSH}/lib$libsuff + fi + + LDFLAGS="$LDFLAGS $LD_SSH" + CPPFLAGS="$CPPFLAGS $CPP_SSH" + LIBS="$LIB_SSH $LIBS" + + AC_CHECK_LIB(ssh, ssh_new) + + AC_CHECK_HEADERS(libssh/libssh.h, + curl_ssh_msg="enabled (libSSH)" + LIBSSH_ENABLED=1 + AC_DEFINE(USE_LIBSSH, 1, [if libSSH is in use]) + AC_SUBST(USE_LIBSSH, [1]) + ) + + if test X"$OPT_LIBSSH" != Xoff && + test "$LIBSSH_ENABLED" != "1"; then + AC_MSG_ERROR([libSSH libs and/or directories were not found where specified!]) + fi + + if test "$LIBSSH_ENABLED" = "1"; then + if test -n "$DIR_SSH"; then + dnl when the libssh shared libs were found in a path that the run-time + dnl linker doesn't search through, we need to add it to LD_LIBRARY_PATH + dnl to prevent further configure tests to fail due to this + + if test "x$cross_compiling" != "xyes"; then + LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$DIR_SSH" + export LD_LIBRARY_PATH + AC_MSG_NOTICE([Added $DIR_SSH to LD_LIBRARY_PATH]) + fi + fi + else + dnl no libssh, revert back to clean variables + LDFLAGS=$CLEANLDFLAGS + CPPFLAGS=$CLEANCPPFLAGS + LIBS=$CLEANLIBS + fi fi dnl ********************************************************************** @@ -2655,6 +2933,7 @@ if test X"$OPT_LIBRTMP" != Xno; then ;; *) dnl use the given --with-librtmp spot + LIB_RTMP="-lrtmp" PREFIX_RTMP=$OPT_LIBRTMP ;; esac @@ -2710,7 +2989,9 @@ AC_HELP_STRING([--disable-versioned-symbols], [Disable versioned symbols in shar AC_MSG_WARN([You need an ld version supporting the --version-script option]) else AC_MSG_RESULT(yes) - if test "x$OPENSSL_ENABLED" = "x1"; then + if test "x$CURL_WITH_MULTI_SSL" = "x1"; then + versioned_symbols_flavour="MULTISSL_" + elif test "x$OPENSSL_ENABLED" = "x1"; then versioned_symbols_flavour="OPENSSL_" elif test "x$GNUTLS_ENABLED" = "x1"; then versioned_symbols_flavour="GNUTLS_" @@ -2782,6 +3063,7 @@ if test "$want_winidn" = "yes"; then clean_LDFLAGS="$LDFLAGS" clean_LIBS="$LIBS" WINIDN_LIBS="-lnormaliz" + WINIDN_CPPFLAGS="-DWINVER=0x0600" # if test "$want_winidn_path" != "default"; then dnl path has been specified @@ -2791,13 +3073,17 @@ if test "$want_winidn" = "yes"; then WINIDN_DIR="$want_winidn_path/lib$libsuff" fi # - CPPFLAGS="$WINIDN_CPPFLAGS $CPPFLAGS" - LDFLAGS="$WINIDN_LDFLAGS $LDFLAGS" + CPPFLAGS="$CPPFLAGS $WINIDN_CPPFLAGS" + LDFLAGS="$LDFLAGS $WINIDN_LDFLAGS" LIBS="$WINIDN_LIBS $LIBS" # AC_MSG_CHECKING([if IdnToUnicode can be linked]) AC_LINK_IFELSE([ - AC_LANG_FUNC_LINK_TRY([IdnToUnicode]) + AC_LANG_PROGRAM([[ + #include + ]],[[ + IdnToUnicode(0, NULL, 0, NULL, 0); + ]]) ],[ AC_MSG_RESULT([yes]) tst_links_winidn="yes" @@ -2823,15 +3109,15 @@ dnl ********************************************************************** dnl Check for the presence of IDN libraries and headers dnl ********************************************************************** -AC_MSG_CHECKING([whether to build with libidn]) +AC_MSG_CHECKING([whether to build with libidn2]) OPT_IDN="default" -AC_ARG_WITH(libidn, -AC_HELP_STRING([--with-libidn=PATH],[Enable libidn usage]) -AC_HELP_STRING([--without-libidn],[Disable libidn usage]), +AC_ARG_WITH(libidn2, +AC_HELP_STRING([--with-libidn2=PATH],[Enable libidn2 usage]) +AC_HELP_STRING([--without-libidn2],[Disable libidn2 usage]), [OPT_IDN=$withval]) case "$OPT_IDN" in no) - dnl --without-libidn option used + dnl --without-libidn2 option used want_idn="no" AC_MSG_RESULT([no]) ;; @@ -2842,13 +3128,13 @@ case "$OPT_IDN" in AC_MSG_RESULT([(assumed) yes]) ;; yes) - dnl --with-libidn option used without path + dnl --with-libidn2 option used without path want_idn="yes" want_idn_path="default" AC_MSG_RESULT([yes]) ;; *) - dnl --with-libidn option used with path + dnl --with-libidn2 option used with path want_idn="yes" want_idn_path="$withval" AC_MSG_RESULT([yes ($withval)]) @@ -2865,33 +3151,33 @@ if test "$want_idn" = "yes"; then if test "$want_idn_path" != "default"; then dnl path has been specified IDN_PCDIR="$want_idn_path/lib$libsuff/pkgconfig" - CURL_CHECK_PKGCONFIG(libidn, [$IDN_PCDIR]) + CURL_CHECK_PKGCONFIG(libidn2, [$IDN_PCDIR]) if test "$PKGCONFIG" != "no"; then IDN_LIBS=`CURL_EXPORT_PCDIR([$IDN_PCDIR]) dnl - $PKGCONFIG --libs-only-l libidn 2>/dev/null` + $PKGCONFIG --libs-only-l libidn2 2>/dev/null` IDN_LDFLAGS=`CURL_EXPORT_PCDIR([$IDN_PCDIR]) dnl - $PKGCONFIG --libs-only-L libidn 2>/dev/null` + $PKGCONFIG --libs-only-L libidn2 2>/dev/null` IDN_CPPFLAGS=`CURL_EXPORT_PCDIR([$IDN_PCDIR]) dnl - $PKGCONFIG --cflags-only-I libidn 2>/dev/null` + $PKGCONFIG --cflags-only-I libidn2 2>/dev/null` IDN_DIR=`echo $IDN_LDFLAGS | $SED -e 's/-L//'` else dnl pkg-config not available or provides no info - IDN_LIBS="-lidn" + IDN_LIBS="-lidn2" IDN_LDFLAGS="-L$want_idn_path/lib$libsuff" IDN_CPPFLAGS="-I$want_idn_path/include" IDN_DIR="$want_idn_path/lib$libsuff" fi else dnl path not specified - CURL_CHECK_PKGCONFIG(libidn) + CURL_CHECK_PKGCONFIG(libidn2) if test "$PKGCONFIG" != "no"; then - IDN_LIBS=`$PKGCONFIG --libs-only-l libidn 2>/dev/null` - IDN_LDFLAGS=`$PKGCONFIG --libs-only-L libidn 2>/dev/null` - IDN_CPPFLAGS=`$PKGCONFIG --cflags-only-I libidn 2>/dev/null` + IDN_LIBS=`$PKGCONFIG --libs-only-l libidn2 2>/dev/null` + IDN_LDFLAGS=`$PKGCONFIG --libs-only-L libidn2 2>/dev/null` + IDN_CPPFLAGS=`$PKGCONFIG --cflags-only-I libidn2 2>/dev/null` IDN_DIR=`echo $IDN_LDFLAGS | $SED -e 's/-L//'` else dnl pkg-config not available or provides no info - IDN_LIBS="-lidn" + IDN_LIBS="-lidn2" fi fi # @@ -2907,13 +3193,13 @@ if test "$want_idn" = "yes"; then AC_MSG_NOTICE([IDN_DIR: "$IDN_DIR"]) fi # - CPPFLAGS="$IDN_CPPFLAGS $CPPFLAGS" - LDFLAGS="$IDN_LDFLAGS $LDFLAGS" + CPPFLAGS="$CPPFLAGS $IDN_CPPFLAGS" + LDFLAGS="$LDFLAGS $IDN_LDFLAGS" LIBS="$IDN_LIBS $LIBS" # - AC_MSG_CHECKING([if idna_to_ascii_4i can be linked]) + AC_MSG_CHECKING([if idn2_lookup_ul can be linked]) AC_LINK_IFELSE([ - AC_LANG_FUNC_LINK_TRY([idna_to_ascii_4i]) + AC_LANG_FUNC_LINK_TRY([idn2_lookup_ul]) ],[ AC_MSG_RESULT([yes]) tst_links_libidn="yes" @@ -2921,37 +3207,19 @@ if test "$want_idn" = "yes"; then AC_MSG_RESULT([no]) tst_links_libidn="no" ]) - if test "$tst_links_libidn" = "no"; then - AC_MSG_CHECKING([if idna_to_ascii_lz can be linked]) - AC_LINK_IFELSE([ - AC_LANG_FUNC_LINK_TRY([idna_to_ascii_lz]) - ],[ - AC_MSG_RESULT([yes]) - tst_links_libidn="yes" - ],[ - AC_MSG_RESULT([no]) - tst_links_libidn="no" - ]) - fi # + AC_CHECK_HEADERS( idn2.h ) + if test "$tst_links_libidn" = "yes"; then - AC_DEFINE(HAVE_LIBIDN, 1, [Define to 1 if you have the `idn' library (-lidn).]) + AC_DEFINE(HAVE_LIBIDN2, 1, [Define to 1 if you have the `idn2' library (-lidn2).]) dnl different versions of libidn have different setups of these: - AC_CHECK_FUNCS( idn_free idna_strerror tld_strerror ) - AC_CHECK_HEADERS( idn-free.h tld.h ) - if test "x$ac_cv_header_tld_h" = "xyes"; then - AC_SUBST([IDN_ENABLED], [1]) - curl_idn_msg="enabled" - if test -n "$IDN_DIR" -a "x$cross_compiling" != "xyes"; then - LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$IDN_DIR" - export LD_LIBRARY_PATH - AC_MSG_NOTICE([Added $IDN_DIR to LD_LIBRARY_PATH]) - fi - else - AC_MSG_WARN([Libraries for IDN support too old: IDN disabled]) - CPPFLAGS="$clean_CPPFLAGS" - LDFLAGS="$clean_LDFLAGS" - LIBS="$clean_LIBS" + + AC_SUBST([IDN_ENABLED], [1]) + curl_idn_msg="enabled (libidn2)" + if test -n "$IDN_DIR" -a "x$cross_compiling" != "xyes"; then + LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$IDN_DIR" + export LD_LIBRARY_PATH + AC_MSG_NOTICE([Added $IDN_DIR to LD_LIBRARY_PATH]) fi else AC_MSG_WARN([Cannot find libraries for IDN support: IDN disabled]) @@ -2966,12 +3234,158 @@ dnl Let's hope this split URL remains working: dnl http://publibn.boulder.ibm.com/doc_link/en_US/a_doc_lib/aixprggd/ \ dnl genprogc/thread_quick_ref.htm +dnl ********************************************************************** +dnl Check for ICU-UC (IDN support) +dnl ********************************************************************** + +AC_MSG_CHECKING([whether to build with icu-uc]) +OPT_IDN="default" +AC_ARG_WITH(icu-uc, +AC_HELP_STRING([--with-icu-uc=PATH],[Enable icu-uc usage]) +AC_HELP_STRING([--without-icu-uc],[Disable icu-uc usage]), + [OPT_IDN=$withval]) +case "$OPT_IDN" in + no) + dnl --without-icu-uc option used + want_idn="no" + AC_MSG_RESULT([no]) + ;; + default) + dnl configure option not specified + want_idn="yes" + want_idn_path="default" + AC_MSG_RESULT([(assumed) yes]) + ;; + yes) + dnl --with-icu-uc option used without path + want_idn="yes" + want_idn_path="default" + AC_MSG_RESULT([yes]) + ;; + *) + dnl --with-icu-uc option used with path + want_idn="yes" + want_idn_path="$withval" + AC_MSG_RESULT([yes ($withval)]) + ;; +esac + +if test "$want_idn" = "yes"; then + dnl idn library support has been requested + clean_CPPFLAGS="$CPPFLAGS" + clean_LDFLAGS="$LDFLAGS" + clean_LIBS="$LIBS" + PKGCONFIG="no" + # + if test "$want_idn_path" != "default"; then + dnl path has been specified + IDN_PCDIR="$want_idn_path/lib$libsuff/pkgconfig" + CURL_CHECK_PKGCONFIG(icu-uc, [$IDN_PCDIR]) + if test "$PKGCONFIG" != "no"; then + IDN_LIBS=`CURL_EXPORT_PCDIR([$IDN_PCDIR]) dnl + $PKGCONFIG --libs-only-l icu-uc 2>/dev/null` + IDN_LDFLAGS=`CURL_EXPORT_PCDIR([$IDN_PCDIR]) dnl + $PKGCONFIG --libs-only-L icu-uc 2>/dev/null` + IDN_CPPFLAGS=`CURL_EXPORT_PCDIR([$IDN_PCDIR]) dnl + $PKGCONFIG --cflags-only-I icu-uc 2>/dev/null` + IDN_DIR=`echo $IDN_LDFLAGS | $SED -e 's/-L//'` + else + dnl pkg-config not available or provides no info + IDN_LIBS="-licu-uc" + IDN_LDFLAGS="-L$want_idn_path/lib$libsuff" + IDN_CPPFLAGS="-I$want_idn_path/include" + IDN_DIR="$want_idn_path/lib$libsuff" + fi + else + dnl path not specified + CURL_CHECK_PKGCONFIG(icu-uc) + if test "$PKGCONFIG" != "no"; then + IDN_LIBS=`$PKGCONFIG --libs-only-l icu-uc 2>/dev/null` + IDN_LDFLAGS=`$PKGCONFIG --libs-only-L icu-uc 2>/dev/null` + IDN_CPPFLAGS=`$PKGCONFIG --cflags-only-I icu-uc 2>/dev/null` + IDN_DIR=`echo $IDN_LDFLAGS | $SED -e 's/-L//'` + else + dnl pkg-config not available or provides no info + IDN_LIBS="-licu-uc" + fi + fi + # + if test "$PKGCONFIG" != "no"; then + AC_MSG_NOTICE([pkg-config: IDN_LIBS: "$IDN_LIBS"]) + AC_MSG_NOTICE([pkg-config: IDN_LDFLAGS: "$IDN_LDFLAGS"]) + AC_MSG_NOTICE([pkg-config: IDN_CPPFLAGS: "$IDN_CPPFLAGS"]) + AC_MSG_NOTICE([pkg-config: IDN_DIR: "$IDN_DIR"]) + else + AC_MSG_NOTICE([IDN_LIBS: "$IDN_LIBS"]) + AC_MSG_NOTICE([IDN_LDFLAGS: "$IDN_LDFLAGS"]) + AC_MSG_NOTICE([IDN_CPPFLAGS: "$IDN_CPPFLAGS"]) + AC_MSG_NOTICE([IDN_DIR: "$IDN_DIR"]) + fi + # + CPPFLAGS="$IDN_CPPFLAGS $CPPFLAGS" + LDFLAGS="$IDN_LDFLAGS $LDFLAGS" + LIBS="$IDN_LIBS $LIBS" + # + AC_MSG_CHECKING([if uidna_nameToASCII_UTF8 can be linked]) + AC_LINK_IFELSE([ + AC_LANG_FUNC_LINK_TRY([uidna_nameToASCII_UTF8]) + ],[ + AC_MSG_RESULT([yes]) + tst_links_icu="yes" + ],[ + AC_MSG_RESULT([no]) + tst_links_icu="no" + ]) + # + if test "$tst_links_icu" = "yes"; then + AC_DEFINE(USE_ICU_IDNA, 1, [Define to 1 if you have the `icu-uc' library (-licu-uc).]) + dnl different versions of libidn have different setups of these: + + AC_SUBST([IDN_ENABLED], [1]) + curl_idn_msg="enabled (icu-uc)" + if test -n "$IDN_DIR" -a "x$cross_compiling" != "xyes"; then + LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$IDN_DIR" + export LD_LIBRARY_PATH + AC_MSG_NOTICE([Added $IDN_DIR to LD_LIBRARY_PATH]) + fi + else + AC_MSG_WARN([Cannot find libraries for IDN support: IDN disabled]) + CPPFLAGS="$clean_CPPFLAGS" + LDFLAGS="$clean_LDFLAGS" + LIBS="$clean_LIBS" + fi + +fi + +dnl Let's hope this split URL remains working: +dnl http://publibn.boulder.ibm.com/doc_link/en_US/a_doc_lib/aixprggd/ \ +dnl genprogc/thread_quick_ref.htm + +dnl ********************************************************************** +dnl Check for DLP +dnl ********************************************************************** + +AC_ARG_ENABLE([dlp], + AS_HELP_STRING([--enable-dlp], [Enable DLP usage])) + +AS_IF([test "x$enable_dlp" = "xyes"], [ + CPPFLAGS+=" -DUSE_TIZEN_FEATURE_DLP" +]) + +AM_CONDITIONAL(USE_TIZEN_FEATURE_DLP, test "x$enable_dlp" = "xyes") + dnl ********************************************************************** dnl Check for nghttp2 dnl ********************************************************************** OPT_H2="yes" + +if test "x$disable_http" = "xyes"; then + # without HTTP, nghttp2 is no use + OPT_H2="no" +fi + AC_ARG_WITH(nghttp2, AC_HELP_STRING([--with-nghttp2=PATH],[Enable nghttp2 usage]) AC_HELP_STRING([--without-nghttp2],[Disable nghttp2 usage]), @@ -3094,11 +3508,12 @@ AC_CHECK_HEADERS( assert.h \ unistd.h \ stdlib.h \ - limits.h \ arpa/inet.h \ net/if.h \ netinet/in.h \ + netinet/in6.h \ sys/un.h \ + linux/tcp.h \ netinet/tcp.h \ netdb.h \ sys/sockio.h \ @@ -3147,6 +3562,9 @@ dnl default includes #ifdef HAVE_NETINET_IN_H #include #endif +#ifdef HAVE_NETINET_IN6_H +#include +#endif #ifdef HAVE_SYS_UN_H #include #endif @@ -3165,18 +3583,15 @@ AC_CHECK_SIZEOF(size_t) AC_CHECK_SIZEOF(long) AC_CHECK_SIZEOF(int) AC_CHECK_SIZEOF(short) -CURL_CONFIGURE_LONG AC_CHECK_SIZEOF(time_t) AC_CHECK_SIZEOF(off_t) -soname_bump=no -if test x"$ac_cv_native_windows" != "xyes" && - test $ac_cv_sizeof_off_t -ne $curl_sizeof_curl_off_t; then - AC_MSG_WARN([This libcurl built is probably not ABI compatible with previous]) - AC_MSG_WARN([builds! You MUST read lib/README.curl_off_t to figure it out.]) - soname_bump=yes -fi - +o=$CPPFLAGS +CPPFLAGS="-I$srcdir/include $CPPFLAGS" +AC_CHECK_SIZEOF(curl_off_t, unused , [ +#include +]) +CPPFLAGS=$o AC_CHECK_TYPE(long long, [AC_DEFINE(HAVE_LONGLONG, 1, @@ -3217,6 +3632,23 @@ AC_CHECK_TYPE([bool],[ #endif ]) +AC_MSG_CHECKING([if time_t is unsigned]) +AC_RUN_IFELSE([ + AC_LANG_SOURCE([[ + #include + #include + time_t t = -1; + return (t > 0); + ]])] ,[ + AC_MSG_RESULT([yes]) + AC_DEFINE(HAVE_TIME_T_UNSIGNED, 1, [Define this if time_t is unsigned]) +],[ + AC_MSG_RESULT([no]) +],[ + dnl cross-compiling, most systems are unsigned + AC_MSG_RESULT([no]) +]) + CURL_CONFIGURE_CURL_SOCKLEN_T CURL_CONFIGURE_PULL_SYS_POLL @@ -3293,24 +3725,21 @@ case $host in ;; esac -AC_CHECK_FUNCS([fork \ - geteuid \ +AC_CHECK_FUNCS([geteuid \ getpass_r \ getppid \ - getprotobyname \ getpwuid \ getpwuid_r \ getrlimit \ gettimeofday \ if_nametoindex \ - inet_addr \ - perror \ + mach_absolute_time \ pipe \ setlocale \ setmode \ setrlimit \ - uname \ - utime + utime \ + utimes ],[ ],[ func="$ac_func" @@ -3338,7 +3767,7 @@ dnl and get the types of five of its arguments. CURL_CHECK_FUNC_GETNAMEINFO if test "$ipv6" = "yes"; then - if test "$ac_cv_func_getaddrinfo" = "yes"; then + if test "$curl_cv_func_getaddrinfo" = "yes"; then AC_DEFINE(ENABLE_IPV6, 1, [Define if you want to enable IPv6 support]) IPV6_ENABLED=1 AC_SUBST(IPV6_ENABLED) @@ -3405,7 +3834,7 @@ AM_CONDITIONAL(USE_MANUAL, test x"$USE_MANUAL" = x1) CURL_CHECK_LIB_ARES AM_CONDITIONAL(USE_EMBEDDED_ARES, test x$embedded_ares = xyes) -if test "x$ac_cv_native_windows" != "xyes" && +if test "x$curl_cv_native_windows" != "xyes" && test "x$enable_shared" = "xyes"; then build_libhostname=yes else @@ -3413,14 +3842,52 @@ else fi AM_CONDITIONAL(BUILD_LIBHOSTNAME, test x$build_libhostname = xyes) -CURL_CHECK_OPTION_THREADED_RESOLVER +if test "x$want_ares" != xyes; then + CURL_CHECK_OPTION_THREADED_RESOLVER +fi -if test "x$want_thres" = xyes && test "x$want_ares" = xyes; then - AC_MSG_ERROR( -[Options --enable-threaded-resolver and --enable-ares are mutually exclusive]) +dnl ************************************************************ +dnl disable POSIX threads +dnl +AC_MSG_CHECKING([whether to use POSIX threads for threaded resolver]) +AC_ARG_ENABLE(pthreads, +AC_HELP_STRING([--enable-pthreads], + [Enable POSIX threads (default for threaded resolver)]) +AC_HELP_STRING([--disable-pthreads],[Disable POSIX threads]), +[ case "$enableval" in + no) AC_MSG_RESULT(no) + want_pthreads=no + ;; + *) AC_MSG_RESULT(yes) + want_pthreads=yes + ;; + esac ], [ + AC_MSG_RESULT(auto) + want_pthreads=auto + ] +) + +dnl turn off pthreads if rt is disabled +if test "$want_pthreads" != "no"; then + if test "$want_pthreads" = "yes" && test "$dontwant_rt" = "yes"; then + AC_MSG_ERROR([options --enable-pthreads and --disable-rt are mutually exclusive]) + fi + if test "$dontwant_rt" != "no"; then + dnl if --enable-pthreads was explicit then warn it's being ignored + if test "$want_pthreads" = "yes"; then + AC_MSG_WARN([--enable-pthreads Ignored since librt is disabled.]) + fi + want_pthreads=no + fi fi -if test "$want_thres" = "yes" && test "$dontwant_rt" = "no"; then +dnl turn off pthreads if no threaded resolver +if test "$want_pthreads" != "no" && test "$want_thres" != "yes"; then + want_pthreads=no +fi + +dnl detect pthreads +if test "$want_pthreads" != "no"; then AC_CHECK_HEADER(pthread.h, [ AC_DEFINE(HAVE_PTHREAD_H, 1, [if you have ]) save_CFLAGS="$CFLAGS" @@ -3442,11 +3909,24 @@ if test "$want_thres" = "yes" && test "$dontwant_rt" = "no"; then AC_DEFINE(USE_THREADS_POSIX, 1, [if you want POSIX threaded DNS lookup]) curl_res_msg="POSIX threaded" fi - - ]) fi +dnl threaded resolver check +if test "$want_thres" = "yes" && test "x$USE_THREADS_POSIX" != "x1"; then + if test "$want_pthreads" = "yes"; then + AC_MSG_ERROR([--enable-pthreads but pthreads was not found]) + fi + dnl If native Windows fallback on Win32 threads since no POSIX threads + if test "$curl_cv_native_windows" = "yes"; then + USE_THREADS_WIN32=1 + AC_DEFINE(USE_THREADS_WIN32, 1, [if you want Win32 threaded DNS lookup]) + curl_res_msg="Win32 threaded" + else + AC_MSG_ERROR([Threaded resolver enabled but no thread library found]) + fi +fi + dnl ************************************************************ dnl disable verbose text strings dnl @@ -3475,7 +3955,7 @@ AC_HELP_STRING([--enable-sspi],[Enable SSPI]) AC_HELP_STRING([--disable-sspi],[Disable SSPI]), [ case "$enableval" in yes) - if test "$ac_cv_native_windows" = "yes"; then + if test "$curl_cv_native_windows" = "yes"; then AC_MSG_RESULT(yes) AC_DEFINE(USE_WINDOWS_SSPI, 1, [to enable SSPI support]) AC_SUBST(USE_WINDOWS_SSPI, [1]) @@ -3608,26 +4088,6 @@ dnl hiding of library internal symbols dnl CURL_CONFIGURE_SYMBOL_HIDING -dnl ************************************************************ -dnl enforce SONAME bump -dnl - -AC_MSG_CHECKING([whether to enforce SONAME bump]) -AC_ARG_ENABLE(soname-bump, -AC_HELP_STRING([--enable-soname-bump],[Enable enforced SONAME bump]) -AC_HELP_STRING([--disable-soname-bump],[Disable enforced SONAME bump]), -[ case "$enableval" in - yes) AC_MSG_RESULT(yes) - soname_bump=yes - ;; - *) - AC_MSG_RESULT(no) - ;; - esac ], - AC_MSG_RESULT($soname_bump) -) -AM_CONDITIONAL(SONAME_BUMP, test x$soname_bump = xyes) - dnl dnl All the library dependencies put into $LIB apply to libcurl only. dnl @@ -3674,7 +4134,11 @@ fi if test "x$HAVE_LIBZ" = "x1"; then SUPPORT_FEATURES="$SUPPORT_FEATURES libz" fi -if test "x$USE_ARES" = "x1" -o "x$USE_THREADS_POSIX" = "x1"; then +if test "x$HAVE_BROTLI" = "x1"; then + SUPPORT_FEATURES="$SUPPORT_FEATURES brotli" +fi +if test "x$USE_ARES" = "x1" -o "x$USE_THREADS_POSIX" = "x1" \ + -o "x$USE_THREADS_WIN32" = "x1"; then SUPPORT_FEATURES="$SUPPORT_FEATURES AsynchDNS" fi if test "x$IDN_ENABLED" = "x1"; then @@ -3704,8 +4168,8 @@ fi if test "x$CURL_DISABLE_CRYPTO_AUTH" != "x1"; then if test "x$OPENSSL_ENABLED" = "x1" -o "x$USE_WINDOWS_SSPI" = "x1" \ - -o "x$GNUTLS_ENABLED" = "x1" -o "x$NSS_ENABLED" = "x1" \ - -o "x$DARWINSSL_ENABLED" = "x1"; then + -o "x$GNUTLS_ENABLED" = "x1" -o "x$MBEDTLS_ENABLED" = "x1" \ + -o "x$NSS_ENABLED" = "x1" -o "x$DARWINSSL_ENABLED" = "x1"; then SUPPORT_FEATURES="$SUPPORT_FEATURES NTLM" if test "x$CURL_DISABLE_HTTP" != "x1" -a \ @@ -3723,6 +4187,15 @@ if test "x$USE_NGHTTP2" = "x1"; then SUPPORT_FEATURES="$SUPPORT_FEATURES HTTP2" fi +if test "x$CURL_WITH_MULTI_SSL" = "x1"; then + SUPPORT_FEATURES="$SUPPORT_FEATURES MultiSSL" +fi + +if test "x$OPENSSL_ENABLED" = "x1" -o "x$GNUTLS_ENABLED" = "x1" \ + -o "x$NSS_ENABLED" = "x1"; then + SUPPORT_FEATURES="$SUPPORT_FEATURES HTTPS-proxy" +fi + AC_SUBST(SUPPORT_FEATURES) dnl For supported protocols in pkg-config file @@ -3777,8 +4250,8 @@ fi if test "x$CURL_DISABLE_SMB" != "x1" \ -a "x$CURL_DISABLE_CRYPTO_AUTH" != "x1" \ -a \( "x$OPENSSL_ENABLED" = "x1" -o "x$USE_WINDOWS_SSPI" = "x1" \ - -o "x$GNUTLS_ENABLED" = "x1" -o "x$NSS_ENABLED" = "x1" \ - -o "x$DARWINSSL_ENABLED" = "x1" \); then + -o "x$GNUTLS_ENABLED" = "x1" -o "x$MBEDTLS_ENABLED" = "x1" \ + -o "x$NSS_ENABLED" = "x1" -o "x$DARWINSSL_ENABLED" = "x1" \); then SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SMB" if test "x$SSL_ENABLED" = "x1"; then SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SMBS" @@ -3794,6 +4267,10 @@ if test "x$USE_LIBSSH2" = "x1"; then SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SCP" SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SFTP" fi +if test "x$USE_LIBSSH" = "x1"; then + SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SCP" + SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SFTP" +fi if test "x$CURL_DISABLE_RTSP" != "x1"; then SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS RTSP" fi @@ -3825,6 +4302,9 @@ squeeze SUPPORT_PROTOCOLS XC_CHECK_BUILD_FLAGS +SSL_BACKENDS=${ssl_backends} +AC_SUBST(SSL_BACKENDS) + if test "x$want_curldebug_assumed" = "xyes" && test "x$want_curldebug" = "xyes" && test "x$USE_ARES" = "x1"; then ac_configure_args="$ac_configure_args --enable-curldebug" @@ -3835,10 +4315,13 @@ AC_CONFIG_FILES([Makefile \ docs/examples/Makefile \ docs/libcurl/Makefile \ docs/libcurl/opts/Makefile \ + docs/cmdline-opts/Makefile \ include/Makefile \ include/curl/Makefile \ src/Makefile \ lib/Makefile \ + extensions/Makefile \ + scripts/Makefile \ lib/libcurl.vers \ tests/Makefile \ tests/certs/Makefile \ @@ -3879,6 +4362,7 @@ AC_MSG_NOTICE([Configured to build curl/libcurl: SSL support: ${curl_ssl_msg} SSH support: ${curl_ssh_msg} zlib support: ${curl_zlib_msg} + brotli support: ${curl_brotli_msg} GSS-API support: ${curl_gss_msg} TLS-SRP support: ${curl_tls_srp_msg} resolver: ${curl_res_msg} @@ -3902,14 +4386,3 @@ AC_MSG_NOTICE([Configured to build curl/libcurl: HTTP2 support: ${curl_h2_msg} Protocols: ${SUPPORT_PROTOCOLS} ]) - -if test "x$soname_bump" = "xyes"; then - -cat <