Skip to content
Snippets Groups Projects
acinclude.m4 93.2 KiB
Newer Older
  • Learn to ignore specific revisions
  • #***************************************************************************
    #                                  _   _ ____  _
    #  Project                     ___| | | |  _ \| |
    #                             / __| | | | |_) | |
    #                            | (__| |_| |  _ <| |___
    #                             \___|\___/|_| \_\_____|
    #
    
    # Copyright (C) 1998 - 2008, 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 http://curl.haxx.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.
    #
    # $Id$
    
    #***************************************************************************
    
    dnl CURL_CHECK_COMPILER_HALT_ON_ERROR
    dnl -------------------------------------------------
    dnl Verifies if the compiler actually halts after the
    dnl compilation phase without generating any object
    dnl code file, when the source compiles with errors.
    
    AC_DEFUN([CURL_CHECK_COMPILER_HALT_ON_ERROR], [
      AC_MSG_CHECKING([if compiler halts on compilation errors])
      AC_COMPILE_IFELSE([
        AC_LANG_PROGRAM([[
        ]],[[
          force compilation error
        ]])
      ],[
        AC_MSG_RESULT([no])
        AC_MSG_ERROR([compiler does not halt on compilation errors.])
      ],[
        AC_MSG_RESULT([yes])
      ])
    ])
    
    
    dnl CURL_CHECK_COMPILER_ARRAY_SIZE_NEGATIVE
    dnl -------------------------------------------------
    dnl Verifies if the compiler actually halts after the
    dnl compilation phase without generating any object
    dnl code file, when the source code tries to define a
    dnl type for a constant array with negative dimension.
    
    AC_DEFUN([CURL_CHECK_COMPILER_ARRAY_SIZE_NEGATIVE], [
      AC_REQUIRE([CURL_CHECK_COMPILER_HALT_ON_ERROR])dnl
      AC_MSG_CHECKING([if compiler halts on negative sized arrays])
      AC_COMPILE_IFELSE([
        AC_LANG_PROGRAM([[
          typedef char bad_t[sizeof(char) == sizeof(int) ? -1 : -1 ];
        ]],[[
          bad_t dummy;
        ]])
      ],[
        AC_MSG_RESULT([no])
        AC_MSG_ERROR([compiler does not halt on negative sized arrays.])
      ],[
        AC_MSG_RESULT([yes])
      ])
    ])
    
    
    dnl CURL_CHECK_DEF(SYMBOL, [INCLUDES], [SILENT])
    dnl -------------------------------------------------
    dnl Use the C preprocessor to find out if the given object-style symbol
    dnl is defined and get its expansion. This macro will not use default
    dnl includes even if no INCLUDES argument is given. This macro will run
    dnl silently when invoked with three arguments.
    
    AC_DEFUN([CURL_CHECK_DEF], [
      AS_VAR_PUSHDEF([ac_HaveDef], [curl_cv_have_def_$1])dnl
      AS_VAR_PUSHDEF([ac_Def], [curl_cv_def_$1])dnl
    
      if test -z "$SED"; then
        AC_MSG_ERROR([SED not set. Cannot continue without SED being set.])
      fi
      if test -z "$GREP"; then
        AC_MSG_ERROR([GREP not set. Cannot continue without GREP being set.])
      fi
    
      ifelse($3,,[AC_MSG_CHECKING([for preprocessor definition of $1])])
      tmp_exp=""
      AC_PREPROC_IFELSE([
        AC_LANG_SOURCE(
    ifelse($2,,,[$2])[[
    #ifdef $1
    CURL_DEF_TOKEN $1
    #endif
        ]])
      ],[
        tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \
          "$GREP" CURL_DEF_TOKEN 2>/dev/null | \
          "$SED" 's/.*CURL_DEF_TOKEN[[ ]]//' 2>/dev/null | \
          "$SED" 'q' 2>/dev/null`
        if test "$tmp_exp" = "$1"; then
          tmp_exp=""
        fi
      ])
      if test -z "$tmp_exp"; then
        AS_VAR_SET([ac_HaveDef], [no])
        ifelse($3,,[AC_MSG_RESULT([no])])
      else
        AS_VAR_SET([ac_HaveDef], [yes])
        AS_VAR_SET([ac_Def], [$tmp_exp])
        ifelse($3,,[AC_MSG_RESULT([$tmp_exp])])
      fi
      AS_VAR_POPDEF([ac_Def])dnl
      AS_VAR_POPDEF([ac_HaveDef])dnl
    ])
    
    
    
    dnl CURL_CHECK_HEADER_WINDOWS
    dnl -------------------------------------------------
    
    Yang Tse's avatar
    Yang Tse committed
    dnl Check for compilable and valid windows.h header 
    
    
    AC_DEFUN([CURL_CHECK_HEADER_WINDOWS], [
      AC_CACHE_CHECK([for windows.h], [ac_cv_header_windows_h], [
        AC_COMPILE_IFELSE([
    
          AC_LANG_PROGRAM([[
    
    #ifndef WIN32_LEAN_AND_MEAN
    
    #define WIN32_LEAN_AND_MEAN
    
    #include <windows.h>
    
    #if defined(__CYGWIN__) || defined(__CEGCC__)
    
            HAVE_WINDOWS_H shall not be defined.
    #else
    
            int dummy=2*WINVER;
    
        ],[
          ac_cv_header_windows_h="yes"
        ],[
          ac_cv_header_windows_h="no"
        ])
      ])
    
      case "$ac_cv_header_windows_h" in
        yes)
          AC_DEFINE_UNQUOTED(HAVE_WINDOWS_H, 1,
            [Define to 1 if you have the windows.h header file.])
          AC_DEFINE_UNQUOTED(WIN32_LEAN_AND_MEAN, 1,
            [Define to avoid automatic inclusion of winsock.h])
          ;;
      esac
    
    dnl CURL_CHECK_NATIVE_WINDOWS
    dnl -------------------------------------------------
    dnl Check if building a native Windows target
    
    AC_DEFUN([CURL_CHECK_NATIVE_WINDOWS], [
      AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
      AC_CACHE_CHECK([whether build target is a native Windows one], [ac_cv_native_windows], [
        if test "$ac_cv_header_windows_h" = "no"; then
          ac_cv_native_windows="no"
        else
          AC_COMPILE_IFELSE([
    
            AC_LANG_PROGRAM([[
            ]],[[
    
    #if defined(__MINGW32__) || defined(__MINGW32CE__) || \
       (defined(_MSC_VER) && (defined(_WIN32) || defined(_WIN64)))
    
              int dummy=1;
    #else
              Not a native Windows build target.
    #endif
    
          ],[
            ac_cv_native_windows="yes"
          ],[
            ac_cv_native_windows="no"
          ])
        fi
      ])
      case "$ac_cv_native_windows" in
        yes)
          AC_DEFINE_UNQUOTED(NATIVE_WINDOWS, 1,
            [Define to 1 if you are building a native Windows target.])
          ;;
      esac
    ])
    
    
    
    dnl CURL_CHECK_HEADER_WINSOCK
    dnl -------------------------------------------------
    
    Yang Tse's avatar
    Yang Tse committed
    dnl Check for compilable and valid winsock.h header 
    
    
    AC_DEFUN([CURL_CHECK_HEADER_WINSOCK], [
      AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
      AC_CACHE_CHECK([for winsock.h], [ac_cv_header_winsock_h], [
        AC_COMPILE_IFELSE([
    
          AC_LANG_PROGRAM([[
    
    #ifndef WIN32_LEAN_AND_MEAN
    
    #define WIN32_LEAN_AND_MEAN
    
    #include <windows.h>
    #include <winsock.h>
    
    #if defined(__CYGWIN__) || defined(__CEGCC__)
    
            HAVE_WINSOCK_H shall not be defined.
    #else
    
            int dummy=WSACleanup();
    
        ],[
          ac_cv_header_winsock_h="yes"
        ],[
          ac_cv_header_winsock_h="no"
        ])
      ])
    
      case "$ac_cv_header_winsock_h" in
        yes)
          AC_DEFINE_UNQUOTED(HAVE_WINSOCK_H, 1,
            [Define to 1 if you have the winsock.h header file.])
          ;;
      esac
    
    ])
    
    
    dnl CURL_CHECK_HEADER_WINSOCK2
    dnl -------------------------------------------------
    
    Yang Tse's avatar
    Yang Tse committed
    dnl Check for compilable and valid winsock2.h header 
    
    
    AC_DEFUN([CURL_CHECK_HEADER_WINSOCK2], [
      AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
      AC_CACHE_CHECK([for winsock2.h], [ac_cv_header_winsock2_h], [
        AC_COMPILE_IFELSE([
    
          AC_LANG_PROGRAM([[
    
    #ifndef WIN32_LEAN_AND_MEAN
    
    #define WIN32_LEAN_AND_MEAN
    
    #include <windows.h>
    #include <winsock2.h>
    
    #if defined(__CYGWIN__) || defined(__CEGCC__) || defined(__MINGW32CE__)
    
            HAVE_WINSOCK2_H shall not be defined.
    #else
    
            int dummy=2*IPPROTO_ESP;
    
        ],[
          ac_cv_header_winsock2_h="yes"
        ],[
          ac_cv_header_winsock2_h="no"
        ])
      ])
    
      case "$ac_cv_header_winsock2_h" in
        yes)
          AC_DEFINE_UNQUOTED(HAVE_WINSOCK2_H, 1,
            [Define to 1 if you have the winsock2.h header file.])
          ;;
      esac
    
    ])
    
    
    dnl CURL_CHECK_HEADER_WS2TCPIP
    dnl -------------------------------------------------
    
    Yang Tse's avatar
    Yang Tse committed
    dnl Check for compilable and valid ws2tcpip.h header
    
    
    AC_DEFUN([CURL_CHECK_HEADER_WS2TCPIP], [
      AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
      AC_CACHE_CHECK([for ws2tcpip.h], [ac_cv_header_ws2tcpip_h], [
        AC_COMPILE_IFELSE([
    
          AC_LANG_PROGRAM([[
    
    #ifndef WIN32_LEAN_AND_MEAN
    
    #define WIN32_LEAN_AND_MEAN
    
    #include <windows.h>
    #include <winsock2.h>
    #include <ws2tcpip.h>
    
    #if defined(__CYGWIN__) || defined(__CEGCC__) || defined(__MINGW32CE__)
    
            HAVE_WS2TCPIP_H shall not be defined.
    #else
    
            int dummy=2*IP_PKTINFO;
    
        ],[
          ac_cv_header_ws2tcpip_h="yes"
        ],[
          ac_cv_header_ws2tcpip_h="no"
        ])
      ])
    
      case "$ac_cv_header_ws2tcpip_h" in
        yes)
          AC_DEFINE_UNQUOTED(HAVE_WS2TCPIP_H, 1,
            [Define to 1 if you have the ws2tcpip.h header file.])
          ;;
      esac
    
    dnl CURL_CHECK_HEADER_WINLDAP
    dnl -------------------------------------------------
    dnl Check for compilable and valid winldap.h header
    
    AC_DEFUN([CURL_CHECK_HEADER_WINLDAP], [
      AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
      AC_CACHE_CHECK([for winldap.h], [ac_cv_header_winldap_h], [
        AC_COMPILE_IFELSE([
    
          AC_LANG_PROGRAM([[
    
    #undef inline
    
    #ifndef WIN32_LEAN_AND_MEAN
    #define WIN32_LEAN_AND_MEAN
    #endif
    #include <windows.h>
    
    #include <winldap.h>
    
    #if defined(__CYGWIN__) || defined(__CEGCC__)
    
            HAVE_WINLDAP_H shall not be defined.
    #else
            LDAP *ldp = ldap_init("dummy", LDAP_PORT);
            ULONG res = ldap_unbind(ldp);
    #endif
    
        ],[
          ac_cv_header_winldap_h="yes"
        ],[
          ac_cv_header_winldap_h="no"
        ])
      ])
      case "$ac_cv_header_winldap_h" in
        yes)
          AC_DEFINE_UNQUOTED(HAVE_WINLDAP_H, 1,
            [Define to 1 if you have the winldap.h header file.])
          ;;
      esac
    ])
    
    
    dnl CURL_CHECK_HEADER_WINBER
    dnl -------------------------------------------------
    dnl Check for compilable and valid winber.h header
    
    AC_DEFUN([CURL_CHECK_HEADER_WINBER], [
      AC_REQUIRE([CURL_CHECK_HEADER_WINLDAP])dnl
      AC_CACHE_CHECK([for winber.h], [ac_cv_header_winber_h], [
        AC_COMPILE_IFELSE([
    
          AC_LANG_PROGRAM([[
    
    #undef inline
    
    #ifndef WIN32_LEAN_AND_MEAN
    #define WIN32_LEAN_AND_MEAN
    #endif
    #include <windows.h>
    
    #include <winldap.h>
    #include <winber.h>
    
    #if defined(__CYGWIN__) || defined(__CEGCC__)
    
            HAVE_WINBER_H shall not be defined.
    #else
            BERVAL *bvp = NULL;
            BerElement *bep = ber_init(bvp);
            ber_free(bep, 1);
    #endif
    
        ],[
          ac_cv_header_winber_h="yes"
        ],[
          ac_cv_header_winber_h="no"
        ])
      ])
      case "$ac_cv_header_winber_h" in
        yes)
          AC_DEFINE_UNQUOTED(HAVE_WINBER_H, 1,
            [Define to 1 if you have the winber.h header file.])
          ;;
      esac
    ])
    
    
    
    dnl CURL_CHECK_HEADER_LBER
    dnl -------------------------------------------------
    dnl Check for compilable and valid lber.h header,
    dnl and check if it is needed even with ldap.h
    
    AC_DEFUN([CURL_CHECK_HEADER_LBER], [
      AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
      AC_CACHE_CHECK([for lber.h], [ac_cv_header_lber_h], [
        AC_COMPILE_IFELSE([
    
          AC_LANG_PROGRAM([[
    
    #undef inline
    #ifdef HAVE_WINDOWS_H
    #ifndef WIN32_LEAN_AND_MEAN
    #define WIN32_LEAN_AND_MEAN
    #endif
    #include <windows.h>
    #else
    #ifdef HAVE_SYS_TYPES_H
    #include <sys/types.h>
    #endif
    #endif
    
    #ifndef NULL
    #define NULL (void *)0
    #endif
    
            BerValue *bvp = NULL;
            BerElement *bep = ber_init(bvp);
            ber_free(bep, 1);
    
        ],[
          ac_cv_header_lber_h="yes"
        ],[
          ac_cv_header_lber_h="no"
        ])
      ])
      if test "$ac_cv_header_lber_h" = "yes"; then
        AC_DEFINE_UNQUOTED(HAVE_LBER_H, 1,
          [Define to 1 if you have the lber.h header file.])
        #
        AC_COMPILE_IFELSE([
    
          AC_LANG_PROGRAM([[
    
    #undef inline
    #ifdef HAVE_WINDOWS_H
    #ifndef WIN32_LEAN_AND_MEAN
    #define WIN32_LEAN_AND_MEAN
    #endif
    #include <windows.h>
    #else
    #ifdef HAVE_SYS_TYPES_H
    #include <sys/types.h>
    #endif
    #endif
    
    #ifndef NULL
    #define NULL (void *)0
    #endif
    
    #ifndef LDAP_DEPRECATED
    #define LDAP_DEPRECATED 1
    #endif
    #include <ldap.h>
    
            BerValue *bvp = NULL;
            BerElement *bep = ber_init(bvp);
            ber_free(bep, 1);
    
        ],[
          curl_cv_need_header_lber_h="no"
        ],[
          curl_cv_need_header_lber_h="yes"
        ])
        #
        case "$curl_cv_need_header_lber_h" in
          yes)
            AC_DEFINE_UNQUOTED(NEED_LBER_H, 1,
              [Define to 1 if you need the lber.h header file even with ldap.h])
            ;;
        esac
      fi
    ])
    
    
    dnl CURL_CHECK_HEADER_LDAP
    dnl -------------------------------------------------
    dnl Check for compilable and valid ldap.h header
    
    AC_DEFUN([CURL_CHECK_HEADER_LDAP], [
      AC_REQUIRE([CURL_CHECK_HEADER_LBER])dnl
      AC_CACHE_CHECK([for ldap.h], [ac_cv_header_ldap_h], [
        AC_COMPILE_IFELSE([
    
          AC_LANG_PROGRAM([[
    
    #undef inline
    #ifdef HAVE_WINDOWS_H
    #ifndef WIN32_LEAN_AND_MEAN
    #define WIN32_LEAN_AND_MEAN
    #endif
    #include <windows.h>
    #else
    #ifdef HAVE_SYS_TYPES_H
    #include <sys/types.h>
    #endif
    #endif
    #ifndef LDAP_DEPRECATED
    #define LDAP_DEPRECATED 1
    #endif
    #ifdef NEED_LBER_H
    #include <lber.h>
    #endif
    #include <ldap.h>
    
            LDAP *ldp = ldap_init("dummy", LDAP_PORT);
            int res = ldap_unbind(ldp);
    
        ],[
          ac_cv_header_ldap_h="yes"
        ],[
          ac_cv_header_ldap_h="no"
        ])
      ])
      case "$ac_cv_header_ldap_h" in
        yes)
          AC_DEFINE_UNQUOTED(HAVE_LDAP_H, 1,
            [Define to 1 if you have the ldap.h header file.])
          ;;
      esac
    ])
    
    
    dnl CURL_CHECK_HEADER_LDAP_SSL
    dnl -------------------------------------------------
    dnl Check for compilable and valid ldap_ssl.h header
    
    AC_DEFUN([CURL_CHECK_HEADER_LDAP_SSL], [
      AC_REQUIRE([CURL_CHECK_HEADER_LDAP])dnl
      AC_CACHE_CHECK([for ldap_ssl.h], [ac_cv_header_ldap_ssl_h], [
        AC_COMPILE_IFELSE([
    
          AC_LANG_PROGRAM([[
    
    #undef inline
    #ifdef HAVE_WINDOWS_H
    #ifndef WIN32_LEAN_AND_MEAN
    #define WIN32_LEAN_AND_MEAN
    #endif
    #include <windows.h>
    #else
    #ifdef HAVE_SYS_TYPES_H
    #include <sys/types.h>
    #endif
    #endif
    #ifndef LDAP_DEPRECATED
    #define LDAP_DEPRECATED 1
    #endif
    #ifdef NEED_LBER_H
    #include <lber.h>
    #endif
    #ifdef HAVE_LDAP_H
    #include <ldap.h>
    #endif
    #include <ldap_ssl.h>
    
            LDAP *ldp = ldapssl_init("dummy", LDAPS_PORT, 1);
    
        ],[
          ac_cv_header_ldap_ssl_h="yes"
        ],[
          ac_cv_header_ldap_ssl_h="no"
        ])
      ])
      case "$ac_cv_header_ldap_ssl_h" in
        yes)
          AC_DEFINE_UNQUOTED(HAVE_LDAP_SSL_H, 1,
            [Define to 1 if you have the ldap_ssl.h header file.])
          ;;
      esac
    ])
    
    
    dnl CURL_CHECK_HEADER_LDAPSSL
    dnl -------------------------------------------------
    dnl Check for compilable and valid ldapssl.h header
    
    AC_DEFUN([CURL_CHECK_HEADER_LDAPSSL], [
      AC_REQUIRE([CURL_CHECK_HEADER_LDAP])dnl
      AC_CACHE_CHECK([for ldapssl.h], [ac_cv_header_ldapssl_h], [
        AC_COMPILE_IFELSE([
    
          AC_LANG_PROGRAM([[
    
    #undef inline
    #ifdef HAVE_WINDOWS_H
    #ifndef WIN32_LEAN_AND_MEAN
    #define WIN32_LEAN_AND_MEAN
    #endif
    #include <windows.h>
    #else
    #ifdef HAVE_SYS_TYPES_H
    #include <sys/types.h>
    #endif
    #endif
    
    #ifndef NULL
    #define NULL (void *)0
    #endif
    
    #ifndef LDAP_DEPRECATED
    #define LDAP_DEPRECATED 1
    #endif
    #ifdef NEED_LBER_H
    #include <lber.h>
    #endif
    #ifdef HAVE_LDAP_H
    #include <ldap.h>
    #endif
    #include <ldapssl.h>
    
            char *cert_label = NULL;
            LDAP *ldp = ldap_ssl_init("dummy", LDAPS_PORT, cert_label);
    
        ],[
          ac_cv_header_ldapssl_h="yes"
        ],[
          ac_cv_header_ldapssl_h="no"
        ])
      ])
      case "$ac_cv_header_ldapssl_h" in
        yes)
          AC_DEFINE_UNQUOTED(HAVE_LDAPSSL_H, 1,
            [Define to 1 if you have the ldapssl.h header file.])
          ;;
      esac
    ])
    
    
    
    dnl CURL_CHECK_LIBS_WINLDAP
    dnl -------------------------------------------------
    dnl Check for libraries needed for WINLDAP support,
    dnl and prepended to LIBS any needed libraries.
    dnl This macro can take an optional parameter with a
    dnl white space separated list of libraries to check
    dnl before the WINLDAP default ones.
    
    AC_DEFUN([CURL_CHECK_LIBS_WINLDAP], [
      AC_REQUIRE([CURL_CHECK_HEADER_WINBER])dnl
      #
      AC_MSG_CHECKING([for WINLDAP libraries])
      #
      u_libs=""
      #
      ifelse($1,,,[
        for x_lib in $1; do
          case "$x_lib" in
            -l*)
              l_lib="$x_lib"
              ;;
            *)
              l_lib="-l$x_lib"
              ;;
          esac
          if test -z "$u_libs"; then
            u_libs="$l_lib"
          else
            u_libs="$u_libs $l_lib"
          fi
        done
      ])
      #
    
    Yang Tse's avatar
    Yang Tse committed
      curl_cv_save_LIBS="$LIBS"
    
      curl_cv_ldap_LIBS="unknown"
      #
      for x_nlibs in '' "$u_libs" \
        '-lwldap32' ; do
    
        if test "$curl_cv_ldap_LIBS" = "unknown"; then
          if test -z "$x_nlibs"; then
            LIBS="$curl_cv_save_LIBS"
          else
            LIBS="$x_nlibs $curl_cv_save_LIBS"
          fi
          AC_LINK_IFELSE([
            AC_LANG_PROGRAM([[
    
    #undef inline
    #ifdef HAVE_WINDOWS_H
    #ifndef WIN32_LEAN_AND_MEAN
    #define WIN32_LEAN_AND_MEAN
    #endif
    #include <windows.h>
    #ifdef HAVE_WINLDAP_H
    #include <winldap.h>
    #endif
    #ifdef HAVE_WINBER_H
    #include <winber.h>
    #endif
    #endif
    
            ]],[[
              BERVAL *bvp = NULL;
              BerElement *bep = ber_init(bvp);
              LDAP *ldp = ldap_init("dummy", LDAP_PORT);
              ULONG res = ldap_unbind(ldp);
              ber_free(bep, 1);
            ]])
          ],[
            curl_cv_ldap_LIBS="$x_nlibs"
          ])
        fi
    
    Yang Tse's avatar
    Yang Tse committed
      LIBS="$curl_cv_save_LIBS"
    
      #
      case X-"$curl_cv_ldap_LIBS" in
        X-unknown)
          AC_MSG_RESULT([cannot find WINLDAP libraries])
          ;;
        X-)
          AC_MSG_RESULT([no additional lib required])
          ;;
        *)
          if test -z "$curl_cv_save_LIBS"; then
            LIBS="$curl_cv_ldap_LIBS"
          else
            LIBS="$curl_cv_ldap_LIBS $curl_cv_save_LIBS"
          fi
          AC_MSG_RESULT([$curl_cv_ldap_LIBS])
          ;;
      esac
      #
    ])
    
    
    
    dnl CURL_CHECK_LIBS_LDAP
    dnl -------------------------------------------------
    dnl Check for libraries needed for LDAP support,
    dnl and prepended to LIBS any needed libraries.
    
    dnl This macro can take an optional parameter with a
    dnl white space separated list of libraries to check
    dnl before the default ones.
    
    
    AC_DEFUN([CURL_CHECK_LIBS_LDAP], [
      AC_REQUIRE([CURL_CHECK_HEADER_LDAP])dnl
      #
    
      AC_MSG_CHECKING([for LDAP libraries])
      #
    
      #
      ifelse($1,,,[
        for x_lib in $1; do
          case "$x_lib" in
            -l*)
              l_lib="$x_lib"
              ;;
            *)
              l_lib="-l$x_lib"
              ;;
          esac
          if test -z "$u_libs"; then
            u_libs="$l_lib"
          else
            u_libs="$u_libs $l_lib"
          fi
        done
      ])
    
    Yang Tse's avatar
    Yang Tse committed
      curl_cv_save_LIBS="$LIBS"
    
      curl_cv_ldap_LIBS="unknown"
      #
    
      for x_nlibs in '' "$u_libs" \
    
        '-lldap' \
        '-llber -lldap' \
        '-lldap -llber' \
        '-lldapssl -lldapx -lldapsdk' \
        '-lldapsdk -lldapx -lldapssl' ; do
    
        if test "$curl_cv_ldap_LIBS" = "unknown"; then
          if test -z "$x_nlibs"; then
            LIBS="$curl_cv_save_LIBS"
          else
            LIBS="$x_nlibs $curl_cv_save_LIBS"
          fi
          AC_LINK_IFELSE([
            AC_LANG_PROGRAM([[
    
    #undef inline
    #ifdef HAVE_WINDOWS_H
    #ifndef WIN32_LEAN_AND_MEAN
    #define WIN32_LEAN_AND_MEAN
    #endif
    #include <windows.h>
    #else
    #ifdef HAVE_SYS_TYPES_H
    #include <sys/types.h>
    #endif
    #endif
    
    #ifndef NULL
    #define NULL (void *)0
    #endif
    
    #ifndef LDAP_DEPRECATED
    #define LDAP_DEPRECATED 1
    #endif
    #ifdef NEED_LBER_H
    #include <lber.h>
    #endif
    #ifdef HAVE_LDAP_H
    #include <ldap.h>
    
            ]],[[
              BerValue *bvp = NULL;
              BerElement *bep = ber_init(bvp);
              LDAP *ldp = ldap_init("dummy", LDAP_PORT);
              int res = ldap_unbind(ldp);
              ber_free(bep, 1);
            ]])
          ],[
            curl_cv_ldap_LIBS="$x_nlibs"
          ])
        fi
    
    Yang Tse's avatar
    Yang Tse committed
      LIBS="$curl_cv_save_LIBS"
    
      #
      case X-"$curl_cv_ldap_LIBS" in
        X-unknown)
    
          AC_MSG_RESULT([cannot find LDAP libraries])
    
          ;;
        X-)
          AC_MSG_RESULT([no additional lib required])
          ;;
        *)
          if test -z "$curl_cv_save_LIBS"; then
            LIBS="$curl_cv_ldap_LIBS"
          else
            LIBS="$curl_cv_ldap_LIBS $curl_cv_save_LIBS"
          fi
          AC_MSG_RESULT([$curl_cv_ldap_LIBS])
          ;;
      esac
      #
    ])
    
    
    
    dnl CURL_CHECK_HEADER_MALLOC
    dnl -------------------------------------------------
    dnl Check for compilable and valid malloc.h header,
    dnl and check if it is needed even with stdlib.h
    
    AC_DEFUN([CURL_CHECK_HEADER_MALLOC], [
      AC_CACHE_CHECK([for malloc.h], [ac_cv_header_malloc_h], [
        AC_COMPILE_IFELSE([
    
          AC_LANG_PROGRAM([[
    
            void *p = malloc(10);
            void *q = calloc(10,10);
            free(p);
            free(q);
    
        ],[
          ac_cv_header_malloc_h="yes"
        ],[
          ac_cv_header_malloc_h="no"
        ])
      ])
      if test "$ac_cv_header_malloc_h" = "yes"; then
        AC_DEFINE_UNQUOTED(HAVE_MALLOC_H, 1,
          [Define to 1 if you have the malloc.h header file.])
        #
        AC_COMPILE_IFELSE([
    
          AC_LANG_PROGRAM([[
    
            void *p = malloc(10);
            void *q = calloc(10,10);
            free(p);
            free(q);
    
        ],[
          curl_cv_need_header_malloc_h="no"
        ],[
          curl_cv_need_header_malloc_h="yes"
        ])
        #
        case "$curl_cv_need_header_malloc_h" in
          yes)
            AC_DEFINE_UNQUOTED(NEED_MALLOC_H, 1,
    
              [Define to 1 if you need the malloc.h header file even with stdlib.h])
    
    dnl CURL_CHECK_TYPE_SOCKLEN_T
    dnl -------------------------------------------------
    
    Yang Tse's avatar
    Yang Tse committed
    dnl Check for existing socklen_t type, and provide
    dnl an equivalent type if socklen_t not available
    
    
    AC_DEFUN([CURL_CHECK_TYPE_SOCKLEN_T], [
      AC_REQUIRE([CURL_CHECK_HEADER_WS2TCPIP])dnl
    
        dnl socklen_t not available
        AC_CACHE_CHECK([for socklen_t equivalent],
    
    Yang Tse's avatar
    Yang Tse committed
          [curl_cv_socklen_t_equiv], [
    
    Yang Tse's avatar
    Yang Tse committed
          curl_cv_socklen_t_equiv="unknown"
    
          for arg1 in 'int' 'SOCKET'; do
            for arg2 in "struct sockaddr" void; do
              for t in int size_t unsigned long "unsigned long"; do
    
                if test "$curl_cv_socklen_t_equiv" = "unknown"; then
                  AC_COMPILE_IFELSE([
                    AC_LANG_PROGRAM([[
    
    #undef inline
    #ifdef HAVE_WINDOWS_H
    
    #ifndef WIN32_LEAN_AND_MEAN
    
    #define WIN32_LEAN_AND_MEAN
    
    #include <windows.h>
    #ifdef HAVE_WINSOCK2_H
    #include <winsock2.h>
    #else
    #ifdef HAVE_WINSOCK_H
    #include <winsock.h>
    #endif
    #endif
    
    #define GETPEERNCALLCONV PASCAL
    
    #else
    #ifdef HAVE_SYS_TYPES_H
    #include <sys/types.h>
    #endif
    #ifdef HAVE_SYS_SOCKET_H
    #include <sys/socket.h>
    #endif
    
                      extern int GETPEERNCALLCONV getpeername($arg1, $arg2 *, $t *);
                    ]],[[
                      $t len=0;
                      getpeername(0,0,&len);
                    ]])
                  ],[
                    curl_cv_socklen_t_equiv="$t"
                  ])
                fi
    
        case "$curl_cv_socklen_t_equiv" in
          unknown)
            AC_MSG_ERROR([Cannot find a type to use in place of socklen_t])
            ;;
          *)
            AC_DEFINE_UNQUOTED(socklen_t, $curl_cv_socklen_t_equiv,
    
              [Type to use in place of socklen_t when system does not provide it.])
    
    #undef inline
    
    #ifndef WIN32_LEAN_AND_MEAN
    #define WIN32_LEAN_AND_MEAN
    #endif
    #include <windows.h>
    #ifdef HAVE_WINSOCK2_H
    #include <winsock2.h>
    
    #ifdef HAVE_WS2TCPIP_H
    #include <ws2tcpip.h>
    #endif
    
    #else
    #ifdef HAVE_SYS_TYPES_H
    #include <sys/types.h>
    #endif
    #ifdef HAVE_SYS_SOCKET_H
    #include <sys/socket.h>
    #endif
    #endif
      ])
    ])
    
    
    
    dnl CURL_CHECK_FUNC_GETNAMEINFO
    
    dnl -------------------------------------------------
    
    dnl Test if the getnameinfo function is available, 
    dnl and check the types of five of its arguments.
    dnl If the function succeeds HAVE_GETNAMEINFO will be
    dnl defined, defining the types of the arguments in
    
    dnl GETNAMEINFO_TYPE_ARG1, GETNAMEINFO_TYPE_ARG2,
    
    dnl GETNAMEINFO_TYPE_ARG46 and GETNAMEINFO_TYPE_ARG7,
    dnl and also defining the type qualifier of first 
    dnl argument in GETNAMEINFO_QUAL_ARG1.
    
    AC_DEFUN([CURL_CHECK_FUNC_GETNAMEINFO], [
    
      AC_REQUIRE([CURL_CHECK_HEADER_WS2TCPIP])dnl
      AC_REQUIRE([CURL_CHECK_TYPE_SOCKLEN_T])dnl
    
      AC_CHECK_HEADERS(sys/types.h sys/socket.h netdb.h)
    
      #
      AC_MSG_CHECKING([for getnameinfo])
      AC_LINK_IFELSE([
    
        AC_LANG_FUNC_LINK_TRY([getnameinfo])
      ],[
        AC_MSG_RESULT([yes])
        curl_cv_getnameinfo="yes"
      ],[
        AC_MSG_RESULT([no])
        curl_cv_getnameinfo="no"
    
      ])
      #
      if test "$curl_cv_getnameinfo" != "yes"; then
        AC_MSG_CHECKING([deeper for getnameinfo])
    
          AC_LANG_PROGRAM([[
          ]],[[
    
        ],[
          AC_MSG_RESULT([yes])
          curl_cv_getnameinfo="yes"
        ],[
          AC_MSG_RESULT([but still no])
          curl_cv_getnameinfo="no"
    
        ])
      fi
      #
      if test "$curl_cv_getnameinfo" != "yes"; then
        AC_MSG_CHECKING([deeper and deeper for getnameinfo])
    
          AC_LANG_PROGRAM([[