Skip to content
Snippets Groups Projects
configure.ac 73.7 KiB
Newer Older
  • Learn to ignore specific revisions
  • dnl check for gss stuff in the /usr as default
    
    GSSAPI_ROOT="/usr"
    
    AC_ARG_WITH(gssapi-includes,
      AC_HELP_STRING([--with-gssapi-includes=DIR],
                     [Specify location of GSSAPI header]),
    
    Guenter Knauf's avatar
    Guenter Knauf committed
      [ GSSAPI_INCS="-I$withval"
    
        want_gss="yes" ]
    )
    
    AC_ARG_WITH(gssapi-libs,
      AC_HELP_STRING([--with-gssapi-libs=DIR],
    
    Guenter Knauf's avatar
    Guenter Knauf committed
                     [Specify location of GSSAPI libs]),
    
      [ GSSAPI_LIB_DIR="-L$withval"
    
        want_gss="yes" ]
    )
    
    AC_ARG_WITH(gssapi,
      AC_HELP_STRING([--with-gssapi=DIR],
    
                     [Where to look for GSSAPI]), [
      GSSAPI_ROOT="$withval"
      if test x"$GSSAPI_ROOT" != xno; then
    
    Guenter Knauf's avatar
    Guenter Knauf committed
        want_gss="yes"
    
        if test x"$GSSAPI_ROOT" = xyes; then
          dnl if yes, then use default root
          GSSAPI_ROOT="/usr"
        fi
    
    AC_MSG_CHECKING([if GSSAPI support is requested])
    if test x"$want_gss" = xyes; then
    
      if test -z "$GSSAPI_INCS"; then
         if test -f "$GSSAPI_ROOT/bin/krb5-config"; then
    
            GSSAPI_INCS=`$GSSAPI_ROOT/bin/krb5-config --cflags gssapi`
    
            GSSAPI_LIBS=`$GSSAPI_ROOT/bin/krb5-config --libs gssapi`
    
         elif test "$GSSAPI_ROOT" != "yes"; then
    
            GSSAPI_INCS="-I$GSSAPI_ROOT/include"
    
      CPPFLAGS="$CPPFLAGS $GSSAPI_INCS"
    
    
      AC_CHECK_HEADER(gss.h,
        [
          dnl found in the given dirs
          AC_DEFINE(HAVE_GSSGNU, 1, [if you have the GNU gssapi libraries])
          gnu_gss=yes
        ],
        [
    
          dnl not found, check Heimdal or MIT
          AC_CHECK_HEADERS(
            [gssapi/gssapi.h gssapi/gssapi_generic.h gssapi/gssapi_krb5.h],
            [],
            [not_mit=1])
          if test "x$not_mit" = "x1"; then
            dnl MIT not found, check for Heimdal
            AC_CHECK_HEADER(gssapi.h,
    
    Guenter Knauf's avatar
    Guenter Knauf committed
                  dnl found
    
                  AC_DEFINE(HAVE_GSSHEIMDAL, 1, [if you have the Heimdal gssapi libraries])
    
                ],
                [
                  dnl no header found, disabling GSS
                  want_gss=no
                  AC_MSG_WARN(disabling GSSAPI since no header files was found)
                ]
              )
    
          else
            dnl MIT found
            AC_DEFINE(HAVE_GSSMIT, 1, [if you have the MIT gssapi libraries])
            dnl check if we have a really old MIT kerberos (<= 1.2)
            AC_MSG_CHECKING([if gssapi headers declare GSS_C_NT_HOSTBASED_SERVICE])
    
            AC_COMPILE_IFELSE([
              AC_LANG_PROGRAM([[
    
    #include <gssapi/gssapi.h>
    #include <gssapi/gssapi_generic.h>
    #include <gssapi/gssapi_krb5.h>
    
                gss_import_name(
                                (OM_uint32 *)0,
                                (gss_buffer_t)0,
                                GSS_C_NT_HOSTBASED_SERVICE,
                                (gss_name_t *)0);
    
              ]])
            ],[
              AC_MSG_RESULT([yes])
            ],[
              AC_MSG_RESULT([no])
              AC_DEFINE(HAVE_OLD_GSSMIT, 1,
                [if you have an old MIT gssapi library, lacking GSS_C_NT_HOSTBASED_SERVICE])
            ])
    
        ]
      )
    else
      AC_MSG_RESULT(no)
    fi
    if test x"$want_gss" = xyes; then
      AC_DEFINE(HAVE_GSSAPI, 1, [if you have the gssapi libraries])
    
      curl_gss_msg="enabled (MIT/Heimdal)"
    
      if test -n "$gnu_gss"; then
        curl_gss_msg="enabled (GNU GSS)"
    
        LDFLAGS="$LDFLAGS $GSSAPI_LIB_DIR"
        LIBS="$LIBS -lgss"
    
      elif test -z "$GSSAPI_LIB_DIR"; then
    
         if test -f "$GSSAPI_ROOT/bin/krb5-config"; then
    
            dnl krb5-config doesn't have --libs-only-L or similar, put everything
            dnl into LIBS
            gss_libs=`$GSSAPI_ROOT/bin/krb5-config --libs gssapi`
            LIBS="$LIBS $gss_libs"
    
         elif test "$GSSAPI_ROOT" != "yes"; then
    
            LDFLAGS="$LDFLAGS -L$GSSAPI_ROOT/lib$libsuff"
            LIBS="$LIBS -lgssapi"
    
         LDFLAGS="$LDFLAGS $GSSAPI_LIB_DIR"
         LIBS="$LIBS -lgssapi"
    
      CPPFLAGS="$save_CPPFLAGS"
    
    Daniel Stenberg's avatar
    Daniel Stenberg committed
    dnl **********************************************************************
    dnl Check for the presence of SSL libraries and headers
    dnl **********************************************************************
    
    dnl Default to compiler & linker defaults for SSL files & libraries.
    OPT_SSL=off
    
    dnl Default to no CA bundle
    ca="no"
    
    Daniel Stenberg's avatar
    Daniel Stenberg committed
    AC_ARG_WITH(ssl,dnl
    
    AC_HELP_STRING([--with-ssl=PATH],[Where to look for OpenSSL, PATH points to the SSL installation (default: /usr/local/ssl); when possible, set the PKG_CONFIG_PATH environment variable instead of using this option])
    
    AC_HELP_STRING([--without-ssl], [disable OpenSSL]),
    
    Daniel Stenberg's avatar
    Daniel Stenberg committed
    
    
      CLEANLDFLAGS="$LDFLAGS"
      CLEANCPPFLAGS="$CPPFLAGS"
    
      SAVE_PKG_CONFIG_LIBDIR="$PKG_CONFIG_LIBDIR"
    
        dnl --with-ssl (without path) used
    
        if test x$cross_compiling != xyes; then
          dnl only do pkg-config magic when not cross-compiling
          PKGTEST="yes"
        fi
    
        PREFIX_OPENSSL=/usr/local/ssl
        LIB_OPENSSL="$PREFIX_OPENSSL/lib$libsuff"
        ;;
    
        dnl no --with-ssl option given, just check default places
    
        if test x$cross_compiling != xyes; then
          dnl only do pkg-config magic when not cross-compiling
          PKGTEST="yes"
        fi
    
        dnl check the given --with-ssl spot
        PKGTEST="no"
    
    
        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
        PKG_CONFIG_LIBDIR=$OPT_SSL/lib/pkgconfig
        export PKG_CONFIG_LIBDIR
        AC_MSG_NOTICE([set PKG_CONFIG_LIBDIR to "$PKG_CONFIG_LIBDIR"])
        if test -e "$PKG_CONFIG_LIBDIR/openssl.pc"; then
          PKGTEST="yes"
        fi
    
        dnl in case pkg-config comes up empty, use what we got
        dnl via --with-ssl
    
        LIB_OPENSSL="$PREFIX_OPENSSL/lib$libsuff"
    
        if test "$PREFIX_OPENSSL" != "/usr" ; then
    
          SSL_LDFLAGS="-L$LIB_OPENSSL"
          SSL_CPPFLAGS="-I$PREFIX_OPENSSL/include"
    
        SSL_CPPFLAGS="$SSL_CPPFLAGS -I$PREFIX_OPENSSL/include/openssl"
    
          SSL_LIBS=`$PKGCONFIG --libs-only-l openssl 2>/dev/null`
          SSL_LDFLAGS=`$PKGCONFIG --libs-only-L openssl 2>/dev/null`
          SSL_CPPFLAGS=`$PKGCONFIG --cflags-only-I openssl 2>/dev/null`
    
          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//g'`
    
          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-ssl we don't know what
          dnl additional libs may be necessary.  Hope that we
          dnl don't need any.
    
      dnl we're done using pkg-config for openssl
      PKG_CONFIG_LIBDIR="$SAVE_PKG_CONFIG_LIBDIR"
      export PKG_CONFIG_LIBDIR
    
      dnl finally, set flags to use SSL
      CPPFLAGS="$CPPFLAGS $SSL_CPPFLAGS"
      LDFLAGS="$LDFLAGS $SSL_LDFLAGS"
    
    
      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_TRY_LINK([#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
    
    
      AC_CHECK_LIB(crypto, CRYPTO_lock,[
         HAVECRYPTO="yes"
    
         LDFLAGS="$CLEANLDFLAGS -L$LIB_OPENSSL"
         CPPFLAGS="$CLEANCPPFLAGS -I$PREFIX_OPENSSL/include/openssl -I$PREFIX_OPENSSL/include"
    
           HAVECRYPTO="yes"
           LIBS="-lcrypto $LIBS"], [
    
           LDFLAGS="$CLEANLDFLAGS"
           CPPFLAGS="$CLEANCPPFLAGS"
           LIBS="$CLEANLIBS"
    
    Daniel Stenberg's avatar
    Daniel Stenberg committed
        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
    
    Daniel Stenberg's avatar
    Daniel Stenberg committed
        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="$LIBS -lRSAglue -lrsaref"
            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
    
    
    Daniel Stenberg's avatar
    Daniel Stenberg committed
        else
    
    Daniel Stenberg's avatar
    Daniel Stenberg committed
          dnl Have the libraries--check for SSLeay/OpenSSL headers
          AC_CHECK_HEADERS(openssl/x509.h openssl/rsa.h openssl/crypto.h \
                           openssl/pem.h openssl/ssl.h openssl/err.h,
    
    Daniel Stenberg's avatar
    Daniel Stenberg committed
            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)
    
    
    Guenter Knauf's avatar
    Guenter Knauf committed
            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
    
        if test X"$OPENSSL_ENABLED" = X"1"; then
           AC_DEFINE(USE_SSLEAY, 1, [if SSL is enabled])
    
    
           dnl is there a pkcs12.h header present?
           AC_CHECK_HEADERS(openssl/pkcs12.h)
    
        dnl USE_SSLEAY is the historical name for what configure calls
        dnl OPENSSL_ENABLED; the names should really be unified
    
    Daniel Stenberg's avatar
    Daniel Stenberg committed
        USE_SSLEAY="$OPENSSL_ENABLED"
        AC_SUBST(USE_SSLEAY)
    
        if test X"$OPT_SSL" != Xoff &&
           test "$OPENSSL_ENABLED" != "1"; then
          AC_MSG_ERROR([OpenSSL libs and/or directories were not found where specified!])
    
    Daniel Stenberg's avatar
    Daniel Stenberg committed
      fi
    
      if test X"$OPENSSL_ENABLED" = X"1"; then
    
        dnl If the ENGINE library seems to be around, check for the OpenSSL engine
    
        dnl stuff, it is kind of "separated" from the main SSL check
        AC_CHECK_FUNC(ENGINE_init,
                  [
                    AC_CHECK_HEADERS(openssl/engine.h)
                    AC_CHECK_FUNCS( ENGINE_load_builtin_engines )
                  ])
    
        dnl these can only exist if openssl exists
    
        dnl yassl doesn't have SSL_get_shutdown
    
    
        AC_CHECK_FUNCS( RAND_status \
                        RAND_screen \
    
                        CRYPTO_cleanup_all_ex_data \
                        SSL_get_shutdown )
    
        dnl Make an attempt to detect if this is actually yassl's headers and
        dnl OpenSSL emulation layer. We still leave everything else believing
        dnl and acting like OpenSSL.
    
        AC_MSG_CHECKING([for yaSSL using OpenSSL compatibility mode])
    
        AC_COMPILE_IFELSE([
          AC_LANG_PROGRAM([[
    
    #if defined(YASSL_VERSION) && defined(OPENSSL_VERSION_NUMBER)
            int dummy = SSL_ERROR_NONE;
    #else
            Not the yaSSL OpenSSL compatibility header.
    #endif
    
          ]])
        ],[
          AC_MSG_RESULT([yes])
          AC_DEFINE_UNQUOTED(USE_YASSLEMUL, 1,
            [Define to 1 if using yaSSL in OpenSSL compatibility mode.])
          curl_ssl_msg="enabled (OpenSSL emulation by yaSSL)"
        ],[
          AC_MSG_RESULT([no])
    
    Daniel Stenberg's avatar
    Daniel Stenberg committed
      fi
    
    Daniel Stenberg's avatar
    Daniel Stenberg committed
      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 LD_LIBRARY_PATH
           dnl to prevent further configure tests to fail due to this
    
           LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$LIB_OPENSSL"
           export LD_LIBRARY_PATH
           AC_MSG_NOTICE([Added $LIB_OPENSSL to LD_LIBRARY_PATH])
        fi
    
    dnl **********************************************************************
    dnl Check for the presence of ZLIB libraries and headers
    dnl **********************************************************************
    
    dnl Check for & handle argument to --with-zlib.
    
    _cppflags=$CPPFLAGS
    _ldflags=$LDFLAGS
    AC_ARG_WITH(zlib,
    AC_HELP_STRING([--with-zlib=PATH],[search for zlib in PATH])
    AC_HELP_STRING([--without-zlib],[disable use of zlib]),
                   [OPT_ZLIB="$withval"])
    
    if test "$OPT_ZLIB" = "no" ; then
        AC_MSG_WARN([zlib disabled])
    else
      if test "$OPT_ZLIB" = "yes" ; then
         OPT_ZLIB=""
      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
    
        AC_CHECK_LIB(z, inflateEnd,
                       dnl libz found, set the variable
                       [HAVE_LIBZ="1"],
                       dnl if no lib found, try /usr/local
                       [OPT_ZLIB="/usr/local"])
    
      fi
    
      dnl Add a nonempty path to the compiler flags
      if test -n "$OPT_ZLIB"; then
         CPPFLAGS="$CPPFLAGS -I$OPT_ZLIB/include"
         LDFLAGS="$LDFLAGS -L$OPT_ZLIB/lib$libsuff"
      fi
    
      AC_CHECK_HEADER(zlib.h,
        [
        dnl zlib.h was found
        HAVE_ZLIB_H="1"
        dnl if the lib wasn't found already, try again with the new paths
        if test "$HAVE_LIBZ" != "1"; then
          AC_CHECK_LIB(z, gzread,
                       [
                       dnl the lib was found!
                       HAVE_LIBZ="1"
                       ],
                       [ CPPFLAGS=$_cppflags
                       LDFLAGS=$_ldflags])
        fi
        ],
        [
          dnl zlib.h was not found, restore the flags
          CPPFLAGS=$_cppflags
          LDFLAGS=$_ldflags]
        )
    
      if test "$HAVE_LIBZ" = "1" && test "$HAVE_ZLIB_H" != "1"
      then
        AC_MSG_WARN([configure found only the libz lib, not the header file!])
    
      elif test "$HAVE_LIBZ" != "1" && test "$HAVE_ZLIB_H" = "1"
      then
        AC_MSG_WARN([configure found only the libz header file, not the lib!])
      elif test "$HAVE_LIBZ" = "1" && test "$HAVE_ZLIB_H" = "1"
      then
        dnl both header and lib were found!
        AC_SUBST(HAVE_LIBZ)
        AC_DEFINE(HAVE_ZLIB_H, 1, [if you have the zlib.h header file])
        AC_DEFINE(HAVE_LIBZ, 1, [if zlib is available])
    
        CURL_LIBS="$CURL_LIBS -lz"
        LIBS="$LIBS -lz"
    
        dnl replace 'HAVE_LIBZ' in the automake makefile.ams
        AMFIXLIB="1"
        AC_MSG_NOTICE([found both libz and libz.h header])
        curl_zlib_msg="enabled"
      fi
    fi
    
    dnl set variable for use in automakefile(s)
    AM_CONDITIONAL(HAVE_LIBZ, test x"$AMFIXLIB" = x1)
    
    
    Daniel Stenberg's avatar
    Daniel Stenberg committed
    dnl **********************************************************************
    
    Guenter Knauf's avatar
    Guenter Knauf committed
    dnl Check for the random seed preferences
    
    Daniel Stenberg's avatar
    Daniel Stenberg committed
    dnl **********************************************************************
    
    if test X"$OPENSSL_ENABLED" = X"1"; then
      AC_ARG_WITH(egd-socket,
      AC_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,
      AC_HELP_STRING([--with-random=FILE],
                     [read randomness from FILE (default=/dev/urandom)]),
          [ RANDOM_FILE="$withval" ],
          [
              dnl Check for random device
              AC_CHECK_FILE("/dev/urandom", [ RANDOM_FILE="/dev/urandom"] )
          ]
      )
      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 ----------------------------------------------------
    
    dnl Default to compiler & linker defaults for GnuTLS files & libraries.
    
    Dan Fandrich's avatar
    Dan Fandrich committed
    OPT_GNUTLS=no
    
    
    AC_ARG_WITH(gnutls,dnl
    AC_HELP_STRING([--with-gnutls=PATH],[where to look for GnuTLS, PATH points to the installation root (default: /usr/local/)])
    AC_HELP_STRING([--without-gnutls], [disable GnuTLS detection]),
      OPT_GNUTLS=$withval)
    
    if test "$OPENSSL_ENABLED" != "1"; then
    
    
    Dan Fandrich's avatar
    Dan Fandrich committed
      if test X"$OPT_GNUTLS" != Xno; then
    
        if test "x$OPT_GNUTLS" = "xyes"; then
    
          dnl this is with no partiular path given
    
          CURL_CHECK_PKGCONFIG(gnutls)
    
          if test "$PKGCONFIG" != "no" ; then
            addlib=`$PKGCONFIG --libs-only-l gnutls`
            addld=`$PKGCONFIG --libs-only-L gnutls`
            addcflags=`$PKGCONFIG --cflags-only-I gnutls`
            version=`$PKGCONFIG --modversion gnutls`
            gtlslib=`echo $addld | $SED -e 's/-L//'`
    
          else
            dnl without pkg-config, we try libgnutls-config as that was how it
            dnl used to be done
            check=`libgnutls-config --version 2>/dev/null`
            if test -n "$check"; then
              addlib=`libgnutls-config --libs`
              addcflags=`libgnutls-config --cflags`
              version=`libgnutls-config --version`
              gtlslib=`libgnutls-config --prefix`/lib$libsuff
            fi
    
          dnl this is with a given path, first check if there's a libgnutls-config
          dnl there and if not, make an educated guess
    
          cfg=$OPT_GNUTLS/bin/libgnutls-config
          check=`$cfg --version 2>/dev/null`
    
            addlib=`$cfg --libs`
            addcflags=`$cfg --cflags`
            version=`$cfg --version`
            gtlslib=`$cfg --prefix`/lib$libsuff
    
          else
            dnl without pkg-config and libgnutls-config, we guess a lot!
            addlib=-lgnutls
            addld=-L$OPT_GNUTLS/lib$libsuff
            addcflags=-I$OPT_GNUTLS/include
            version="" # we just don't know
            gtlslib=$OPT_GNUTLS/lib$libsuff
          fi
    
        fi
    
        if test -z "$version"; then
          dnl lots of efforts, still no go
          version="unknown"
    
          if test "$addcflags" != "-I/usr/include"; then
             CPPFLAGS="$CPPFLAGS $addcflags"
          fi
    
          AC_CHECK_LIB(gnutls, gnutls_check_version,
    
           [
           AC_DEFINE(USE_GNUTLS, 1, [if GnuTLS is enabled])
           AC_SUBST(USE_GNUTLS, [1])
    
          if test "x$USE_GNUTLS" = "xyes"; then
            AC_MSG_NOTICE([detected GnuTLS version $version])
    
            if test -n "$gtlslib"; then
              dnl when shared libs were found in a path that the run-time
              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
    
              LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$gtlslib"
              export LD_LIBRARY_PATH
              AC_MSG_NOTICE([Added $gtlslib to LD_LIBRARY_PATH])
            fi
    
    dnl ----------------------------------------------------
    dnl NSS. Only check if GnuTLS and OpenSSL are not enabled
    dnl ----------------------------------------------------
    
    dnl Default to compiler & linker defaults for NSS files & libraries.
    OPT_NSS=no
    
    AC_ARG_WITH(nss,dnl
    AC_HELP_STRING([--with-nss=PATH],[where to look for NSS, PATH points to the installation root (default: /usr/local/)])
    AC_HELP_STRING([--without-nss], [disable NSS detection]),
      OPT_NSS=$withval)
    
    if test "$OPENSSL_ENABLED" != "1" -a "$GNUTLS_ENABLED" != "1"; then
    
      if test X"$OPT_NSS" != Xno; then
        if test "x$OPT_NSS" = "xyes"; then
    
    
          CURL_CHECK_PKGCONFIG(nss)
    
          if test "$PKGCONFIG" != "no" ; then
            addlib=`$PKGCONFIG --libs nss`
            addcflags=`$PKGCONFIG --cflags nss`
            version=`$PKGCONFIG --modversion nss`
            nssprefix=`$PKGCONFIG --variable=prefix nss`
    
          else
            dnl Without pkg-config, we check for nss-config
    
            check=`nss-config --version 2>/dev/null`
            if test -n "$check"; then
              addlib=`nss-config --libs`
              addcflags=`nss-config --cflags`
              version=`nss-config --version`
              nssprefix=`nss-config --prefix`
            else
              addlib="-lnss3"
              addcflags=""
              version="unknown"
            fi
    
        else	 
            # Without pkg-config, we'll kludge in some defaults	 
            addlib="-L$OPT_NSS/lib -lssl3 -lsmime3 -lnss3 -lplds4 -lplc4 -lnspr4 -lpthread -ldl"	 
            addcflags="-I$OPT_NSS/include"	 
            version="unknown"	 
            nssprefix=$OPT_NSS
    
        dnl Check for functionPK11_CreateGenericObject
        dnl this is needed for using the PEM PKCS#11 module
    
        AC_CHECK_LIB(nss3, PK11_CreateGenericObject,
    
         [
         AC_DEFINE(HAVE_PK11_CREATEGENERICOBJECT, 1, [if you have the function PK11_CreateGenericObject])
         AC_SUBST(HAVE_PK11_CREATEGENERICOBJECT, [1])
         ])
    
        if test -n "$addlib"; then
    
          CLEANLIBS="$LIBS"
          CLEANCPPFLAGS="$CPPFLAGS"
    
          LIBS="$LIBS $addlib"
          if test "$addcflags" != "-I/usr/include"; then
             CPPFLAGS="$CPPFLAGS $addcflags"
          fi
    
          AC_CHECK_LIB(nss3, NSS_Initialize,
           [
           AC_DEFINE(USE_NSS, 1, [if NSS is enabled])
           AC_SUBST(USE_NSS, [1])
           USE_NSS="yes"
           NSS_ENABLED=1
           curl_ssl_msg="enabled (NSS)"
           ],
           [
             LIBS="$CLEANLIBS"
             CPPFLAGS="$CLEANCPPFLAGS"
           ])
    
          if test "x$USE_NSS" = "xyes"; then
            AC_MSG_NOTICE([detected NSS version $version])
    
            dnl when shared libs were found in a path that the run-time
            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
    
            LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$nssprefix/lib$libsuff"
            export LD_LIBRARY_PATH
            AC_MSG_NOTICE([Added $nssprefix/lib$libsuff to LD_LIBRARY_PATH])
          fi
    
        fi
    
      fi dnl NSS not disabled
    
    fi dnl OPENSSL != 1 -a GNUTLS_ENABLED != 1
    
    if test "x$OPENSSL_ENABLED$GNUTLS_ENABLED$NSS_ENABLED" = "x"; then
      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 or --with-nss to address this.])
    
    else
      # SSL is enabled, genericly
      AC_SUBST(SSL_ENABLED)
      SSL_ENABLED="1"
    
    dnl **********************************************************************
    dnl Check for the CA bundle
    dnl **********************************************************************
    
    
    dnl **********************************************************************
    dnl Check for the presence of LIBSSH2 libraries and headers
    dnl **********************************************************************
    
    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 (default: /usr/local/lib); when possible, set the PKG_CONFIG_PATH environment variable instead of using this option])
    AC_HELP_STRING([--without-libssh2], [disable LIBSSH2]),
      OPT_LIBSSH2=$withval)
    
    if test X"$OPT_LIBSSH2" != Xno; then
      dnl backup the pre-libssh2 variables
      CLEANLDFLAGS="$LDFLAGS"
      CLEANCPPFLAGS="$CPPFLAGS"
      CLEANLIBS="$LIBS"
    
      case "$OPT_LIBSSH2" in
      yes)
        dnl --with-libssh2 (without path) used
    
        CURL_CHECK_PKGCONFIG(libssh2)
    
        if test "$PKGCONFIG" != "no" ; then
          LIB_SSH2=`$PKGCONFIG --libs-only-l libssh2`
          LD_SSH2=`$PKGCONFIG --libs-only-L libssh2`
          CPP_SSH2=`$PKGCONFIG --cflags-only-I libssh2`
          version=`$PKGCONFIG --modversion libssh2`
          DIR_SSH2=`echo $LD_SSH2 | $SED -e 's/-L//'`
        fi
        
    
        ;;
      off)
        dnl no --with-libssh2 option given, just check default places
        ;;
      *)
        dnl use the given --with-libssh2 spot
    
      dnl if given with a prefix, we set -L and -I based on that
      if test -n "$PREFIX_SSH2"; then
    
      fi
    
      LDFLAGS="$LDFLAGS $LD_SSH2"
      CPPFLAGS="$CPPFLAGS $CPP_SSH2"
      LIBS="$LIBS $LIB_SSH2"
    
    
      AC_CHECK_LIB(ssh2, libssh2_channel_open_ex)
    
      AC_CHECK_HEADERS(libssh2.h,
        curl_ssh_msg="enabled (libSSH2)"
        LIBSSH2_ENABLED=1
        AC_DEFINE(USE_LIBSSH2, 1, [if libSSH2 is in use])
        AC_SUBST(USE_LIBSSH2, [1])
      )
    
      if test X"$OPT_LIBSSH2" != Xoff &&
         test "$LIBSSH2_ENABLED" != "1"; then
        AC_MSG_ERROR([libSSH2 libs and/or directories were not found where specified!])
      fi
    
      if test "$LIBSSH2_ENABLED" = "1"; then
    
           dnl when the libssh2 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
    
           dnl libssh2_version is a post 1.0 addition
           AC_CHECK_FUNCS( libssh2_version )
    
    
           LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$DIR_SSH2"
    
           AC_MSG_NOTICE([Added $DIR_SSH2 to LD_LIBRARY_PATH])
    
        fi
      else
        dnl no libssh2, revert back to clean variables
        LDFLAGS=$CLEANLDFLAGS
        CPPFLAGS=$CLEANCPPFLAGS
        LIBS=$CLEANLIBS
      fi
    fi
    
    
    dnl **********************************************************************
    dnl Check for the presence of IDN libraries and headers
    dnl **********************************************************************
    
    
    Daniel Stenberg's avatar
    Daniel Stenberg committed
    AC_MSG_CHECKING([whether to build with libidn])
    
    AC_ARG_WITH(libidn,
    
    Daniel Stenberg's avatar
    Daniel Stenberg committed
    AC_HELP_STRING([--with-libidn=PATH],[Enable libidn usage])
    AC_HELP_STRING([--without-libidn],[Disable libidn usage]),
    
      [LIBIDN="$withval"])
    
    Daniel Stenberg's avatar
    Daniel Stenberg committed
    
    case "$LIBIDN" in
      no)
           AC_MSG_RESULT(no)
           ;;
      *)   AC_MSG_RESULT(yes)
    
    
           idn=""
           dnl if there is a given path, check that FIRST
    
           if test -n "$LIBIDN"; then
             if test "x$LIBIDN" != "xyes"; then
                oldLDFLAGS=$LDFLAGS
                oldCPPFLAGS=$CPPFLAGS
                LDFLAGS="$LDFLAGS -L$LIBIDN/lib"
                CPPFLAGS="$CPPFLAGS -I$LIBIDN/include"
                idn="yes"
                AC_CHECK_LIB(idn, idna_to_ascii_4i, ,
                             idn=""
                             LDFLAGS=$oldLDFLAGS
                             CPPFLAGS=$oldCPPFLAGS)
             fi
    
           fi
    
           if test "x$idn" != "xyes"; then
              dnl check with default paths
    
              idn="yes"
    
              AC_CHECK_LIB(idn, idna_to_ascii_lz, ,
                           idn="")
           fi
    
           if test "x$idn" = "xyes"; then
    
    Daniel Stenberg's avatar
    Daniel Stenberg committed
             curl_idn_msg="enabled"
    
             AC_SUBST(IDN_ENABLED, [1])
    
             dnl different versions of libidn have different setups of these:
    
    Daniel Stenberg's avatar
    Daniel Stenberg committed
             AC_CHECK_FUNCS( idn_free idna_strerror tld_strerror)
    
    Daniel Stenberg's avatar
    Daniel Stenberg committed
           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
    
    Daniel Stenberg's avatar
    Daniel Stenberg committed
    dnl **********************************************************************
    dnl Back to "normal" configuring
    dnl **********************************************************************
    
    dnl Checks for header files.
    AC_HEADER_STDC
    
    
    dnl Now check for the very most basic headers. Then we can use these
    
    dnl ones as default-headers when checking for the rest!
    AC_CHECK_HEADERS(
            sys/types.h \
            sys/time.h \
            sys/select.h \
            sys/socket.h \
    
            sys/ioctl.h \
    
    Daniel Stenberg's avatar
    Daniel Stenberg committed
            assert.h \
    
    Daniel Stenberg's avatar
    Daniel Stenberg committed
            unistd.h \
    
            limits.h \
    
    Daniel Stenberg's avatar
    Daniel Stenberg committed
            arpa/inet.h \
            net/if.h \
            netinet/in.h \
    
    Daniel Stenberg's avatar
    Daniel Stenberg committed
            netdb.h \
            sys/sockio.h \
            sys/stat.h \
            sys/param.h \
            termios.h \
            termio.h \
            sgtty.h \
            fcntl.h \
            alloca.h \
            time.h \
            io.h \
    
    Daniel Stenberg's avatar
    Daniel Stenberg committed
            utime.h \
    
    Daniel Stenberg's avatar
    Daniel Stenberg committed
            sys/poll.h \
    
    Yang Tse's avatar
     
    Yang Tse committed
            socket.h \
    
    Daniel Stenberg's avatar
    Daniel Stenberg committed
            errno.h \
    
            setjmp.h,
    dnl to do if not found
    [],
    dnl to do if found
    [],
    dnl default includes
    [
    #ifdef HAVE_SYS_TYPES_H
    #include <sys/types.h>
    #endif
    #ifdef HAVE_SYS_TIME_H
    #include <sys/time.h>
    #endif
    #ifdef HAVE_SYS_SELECT_H
    #include <sys/select.h>
    #endif
    #ifdef HAVE_SYS_SOCKET_H
    #include <sys/socket.h>
    #endif
    
    #ifdef HAVE_NETINET_IN_H
    #include <netinet/in.h>
    #endif
    
    Daniel Stenberg's avatar
    Daniel Stenberg committed
    )
    
    dnl Checks for typedefs, structures, and compiler characteristics.
    AC_C_CONST
    
    Daniel Stenberg's avatar
    Daniel Stenberg committed
    AC_TYPE_SIZE_T
    AC_HEADER_TIME
    
    CURL_CHECK_STRUCT_TIMEVAL
    
    Daniel Stenberg's avatar
    Daniel Stenberg committed
    
    
    AC_CHECK_SIZEOF(size_t)
    
    Daniel Stenberg's avatar
    Daniel Stenberg committed
    
    
    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
    
    
    
    Daniel Stenberg's avatar
    Daniel Stenberg committed
    AC_CHECK_TYPE(long long,
    
       [AC_DEFINE(HAVE_LONGLONG, 1,
          [Define to 1 if the compiler supports the 'long long' data type.])]
    
    Guenter Knauf's avatar
    Guenter Knauf committed
       longlong="yes"
    
    )
    
    if test "xyes" = "x$longlong"; then
      AC_MSG_CHECKING([if numberLL works])
      AC_COMPILE_IFELSE([long long val = 1000LL;],
       [AC_DEFINE(HAVE_LL, 1, [if your compiler supports LL])]
       AC_MSG_RESULT(yes),
       AC_MSG_RESULT(no)
      )
    fi
    
    
    Daniel Stenberg's avatar
    Daniel Stenberg committed
    
    
    Daniel Stenberg's avatar
    Daniel Stenberg committed
    # check for ssize_t
    
    Daniel Stenberg's avatar
    Daniel Stenberg committed
    AC_CHECK_TYPE(ssize_t, ,
       AC_DEFINE(ssize_t, int, [the signed version of size_t]))
    
    Daniel Stenberg's avatar
    Daniel Stenberg committed
    
    
    # check for bool type
    AC_CHECK_TYPE([bool],[
      AC_DEFINE(HAVE_BOOL_T, 1,
        [Define to 1 if bool is an available type.])
    ], ,[
    
    #ifdef HAVE_SYS_TYPES_H
    #include <sys/types.h>
    #endif
    
    #ifdef HAVE_STDBOOL_H
    #include <stdbool.h>
    #endif
    ])