Home | History | Annotate | Download | only in curl
      1 #***************************************************************************
      2 #                                  _   _ ____  _
      3 #  Project                     ___| | | |  _ \| |
      4 #                             / __| | | | |_) | |
      5 #                            | (__| |_| |  _ <| |___
      6 #                             \___|\___/|_| \_\_____|
      7 #
      8 # Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel (a] haxx.se>, et al.
      9 #
     10 # This software is licensed as described in the file COPYING, which
     11 # you should have received as part of this distribution. The terms
     12 # are also available at https://curl.haxx.se/docs/copyright.html.
     13 #
     14 # You may opt to use, copy, modify, merge, publish, distribute and/or sell
     15 # copies of the Software, and permit persons to whom the Software is
     16 # furnished to do so, under the terms of the COPYING file.
     17 #
     18 # This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
     19 # KIND, either express or implied.
     20 #
     21 #***************************************************************************
     22 
     23 dnl CURL_CHECK_DEF (SYMBOL, [INCLUDES], [SILENT])
     24 dnl -------------------------------------------------
     25 dnl Use the C preprocessor to find out if the given object-style symbol
     26 dnl is defined and get its expansion. This macro will not use default
     27 dnl includes even if no INCLUDES argument is given. This macro will run
     28 dnl silently when invoked with three arguments. If the expansion would
     29 dnl result in a set of double-quoted strings the returned expansion will
     30 dnl actually be a single double-quoted string concatenating all them.
     31 
     32 AC_DEFUN([CURL_CHECK_DEF], [
     33   AC_REQUIRE([CURL_CPP_P])dnl
     34   OLDCPPFLAGS=$CPPFLAGS
     35   # CPPPFLAGS comes from CURL_CPP_P
     36   CPPFLAGS="$CPPPFLAGS"
     37   AS_VAR_PUSHDEF([ac_HaveDef], [curl_cv_have_def_$1])dnl
     38   AS_VAR_PUSHDEF([ac_Def], [curl_cv_def_$1])dnl
     39   if test -z "$SED"; then
     40     AC_MSG_ERROR([SED not set. Cannot continue without SED being set.])
     41   fi
     42   if test -z "$GREP"; then
     43     AC_MSG_ERROR([GREP not set. Cannot continue without GREP being set.])
     44   fi
     45   ifelse($3,,[AC_MSG_CHECKING([for preprocessor definition of $1])])
     46   tmp_exp=""
     47   AC_PREPROC_IFELSE([
     48     AC_LANG_SOURCE(
     49 ifelse($2,,,[$2])[[
     50 #ifdef $1
     51 CURL_DEF_TOKEN $1
     52 #endif
     53     ]])
     54   ],[
     55     tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \
     56       "$GREP" CURL_DEF_TOKEN 2>/dev/null | \
     57       "$SED" 's/.*CURL_DEF_TOKEN[[ ]][[ ]]*//' 2>/dev/null | \
     58       "$SED" 's/[["]][[ ]]*[["]]//g' 2>/dev/null`
     59     if test -z "$tmp_exp" || test "$tmp_exp" = "$1"; then
     60       tmp_exp=""
     61     fi
     62   ])
     63   if test -z "$tmp_exp"; then
     64     AS_VAR_SET(ac_HaveDef, no)
     65     ifelse($3,,[AC_MSG_RESULT([no])])
     66   else
     67     AS_VAR_SET(ac_HaveDef, yes)
     68     AS_VAR_SET(ac_Def, $tmp_exp)
     69     ifelse($3,,[AC_MSG_RESULT([$tmp_exp])])
     70   fi
     71   AS_VAR_POPDEF([ac_Def])dnl
     72   AS_VAR_POPDEF([ac_HaveDef])dnl
     73   CPPFLAGS=$OLDCPPFLAGS
     74 ])
     75 
     76 
     77 dnl CURL_CHECK_DEF_CC (SYMBOL, [INCLUDES], [SILENT])
     78 dnl -------------------------------------------------
     79 dnl Use the C compiler to find out only if the given symbol is defined
     80 dnl or not, this can not find out its expansion. This macro will not use
     81 dnl default includes even if no INCLUDES argument is given. This macro
     82 dnl will run silently when invoked with three arguments.
     83 
     84 AC_DEFUN([CURL_CHECK_DEF_CC], [
     85   AS_VAR_PUSHDEF([ac_HaveDef], [curl_cv_have_def_$1])dnl
     86   ifelse($3,,[AC_MSG_CHECKING([for compiler definition of $1])])
     87   AC_COMPILE_IFELSE([
     88     AC_LANG_SOURCE(
     89 ifelse($2,,,[$2])[[
     90 int main (void)
     91 {
     92 #ifdef $1
     93   return 0;
     94 #else
     95   force compilation error
     96 #endif
     97 }
     98     ]])
     99   ],[
    100     tst_symbol_defined="yes"
    101   ],[
    102     tst_symbol_defined="no"
    103   ])
    104   if test "$tst_symbol_defined" = "yes"; then
    105     AS_VAR_SET(ac_HaveDef, yes)
    106     ifelse($3,,[AC_MSG_RESULT([yes])])
    107   else
    108     AS_VAR_SET(ac_HaveDef, no)
    109     ifelse($3,,[AC_MSG_RESULT([no])])
    110   fi
    111   AS_VAR_POPDEF([ac_HaveDef])dnl
    112 ])
    113 
    114 
    115 dnl CURL_CHECK_LIB_XNET
    116 dnl -------------------------------------------------
    117 dnl Verify if X/Open network library is required.
    118 
    119 AC_DEFUN([CURL_CHECK_LIB_XNET], [
    120   AC_MSG_CHECKING([if X/Open network library is required])
    121   tst_lib_xnet_required="no"
    122   AC_COMPILE_IFELSE([
    123     AC_LANG_SOURCE([[
    124 int main (void)
    125 {
    126 #if defined(__hpux) && defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 600)
    127   return 0;
    128 #elif defined(__hpux) && defined(_XOPEN_SOURCE_EXTENDED)
    129   return 0;
    130 #else
    131   force compilation error
    132 #endif
    133 }
    134     ]])
    135   ],[
    136     tst_lib_xnet_required="yes"
    137     LIBS="-lxnet $LIBS"
    138   ])
    139   AC_MSG_RESULT([$tst_lib_xnet_required])
    140 ])
    141 
    142 
    143 dnl CURL_CHECK_AIX_ALL_SOURCE
    144 dnl -------------------------------------------------
    145 dnl Provides a replacement of traditional AC_AIX with
    146 dnl an uniform behaviour across all autoconf versions,
    147 dnl and with our own placement rules.
    148 
    149 AC_DEFUN([CURL_CHECK_AIX_ALL_SOURCE], [
    150   AH_VERBATIM([_ALL_SOURCE],
    151     [/* Define to 1 if OS is AIX. */
    152 #ifndef _ALL_SOURCE
    153 #  undef _ALL_SOURCE
    154 #endif])
    155   AC_BEFORE([$0], [AC_SYS_LARGEFILE])dnl
    156   AC_BEFORE([$0], [CURL_CONFIGURE_REENTRANT])dnl
    157   AC_BEFORE([$0], [CURL_CONFIGURE_PULL_SYS_POLL])dnl
    158   AC_MSG_CHECKING([if OS is AIX (to define _ALL_SOURCE)])
    159   AC_EGREP_CPP([yes_this_is_aix],[
    160 #ifdef _AIX
    161    yes_this_is_aix
    162 #endif
    163   ],[
    164     AC_MSG_RESULT([yes])
    165     AC_DEFINE(_ALL_SOURCE)
    166   ],[
    167     AC_MSG_RESULT([no])
    168   ])
    169 ])
    170 
    171 
    172 dnl CURL_CHECK_HEADER_WINDOWS
    173 dnl -------------------------------------------------
    174 dnl Check for compilable and valid windows.h header
    175 
    176 AC_DEFUN([CURL_CHECK_HEADER_WINDOWS], [
    177   AC_CACHE_CHECK([for windows.h], [curl_cv_header_windows_h], [
    178     AC_COMPILE_IFELSE([
    179       AC_LANG_PROGRAM([[
    180 #undef inline
    181 #ifndef WIN32_LEAN_AND_MEAN
    182 #define WIN32_LEAN_AND_MEAN
    183 #endif
    184 #include <windows.h>
    185       ]],[[
    186 #if defined(__CYGWIN__) || defined(__CEGCC__)
    187         HAVE_WINDOWS_H shall not be defined.
    188 #else
    189         int dummy=2*WINVER;
    190 #endif
    191       ]])
    192     ],[
    193       curl_cv_header_windows_h="yes"
    194     ],[
    195       curl_cv_header_windows_h="no"
    196     ])
    197   ])
    198   case "$curl_cv_header_windows_h" in
    199     yes)
    200       AC_DEFINE_UNQUOTED(HAVE_WINDOWS_H, 1,
    201         [Define to 1 if you have the windows.h header file.])
    202       AC_DEFINE_UNQUOTED(WIN32_LEAN_AND_MEAN, 1,
    203         [Define to avoid automatic inclusion of winsock.h])
    204       ;;
    205   esac
    206 ])
    207 
    208 
    209 dnl CURL_CHECK_NATIVE_WINDOWS
    210 dnl -------------------------------------------------
    211 dnl Check if building a native Windows target
    212 
    213 AC_DEFUN([CURL_CHECK_NATIVE_WINDOWS], [
    214   AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
    215   AC_CACHE_CHECK([whether build target is a native Windows one], [curl_cv_native_windows], [
    216     if test "$curl_cv_header_windows_h" = "no"; then
    217       curl_cv_native_windows="no"
    218     else
    219       AC_COMPILE_IFELSE([
    220         AC_LANG_PROGRAM([[
    221         ]],[[
    222 #if defined(__MINGW32__) || defined(__MINGW32CE__) || \
    223    (defined(_MSC_VER) && (defined(_WIN32) || defined(_WIN64)))
    224           int dummy=1;
    225 #else
    226           Not a native Windows build target.
    227 #endif
    228         ]])
    229       ],[
    230         curl_cv_native_windows="yes"
    231       ],[
    232         curl_cv_native_windows="no"
    233       ])
    234     fi
    235   ])
    236   AM_CONDITIONAL(DOING_NATIVE_WINDOWS, test "x$curl_cv_native_windows" = xyes)
    237 ])
    238 
    239 
    240 dnl CURL_CHECK_HEADER_WINSOCK
    241 dnl -------------------------------------------------
    242 dnl Check for compilable and valid winsock.h header
    243 
    244 AC_DEFUN([CURL_CHECK_HEADER_WINSOCK], [
    245   AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
    246   AC_CACHE_CHECK([for winsock.h], [curl_cv_header_winsock_h], [
    247     AC_COMPILE_IFELSE([
    248       AC_LANG_PROGRAM([[
    249 #undef inline
    250 #ifndef WIN32_LEAN_AND_MEAN
    251 #define WIN32_LEAN_AND_MEAN
    252 #endif
    253 #include <windows.h>
    254 #include <winsock.h>
    255       ]],[[
    256 #if defined(__CYGWIN__) || defined(__CEGCC__)
    257         HAVE_WINSOCK_H shall not be defined.
    258 #else
    259         int dummy=WSACleanup();
    260 #endif
    261       ]])
    262     ],[
    263       curl_cv_header_winsock_h="yes"
    264     ],[
    265       curl_cv_header_winsock_h="no"
    266     ])
    267   ])
    268   case "$curl_cv_header_winsock_h" in
    269     yes)
    270       AC_DEFINE_UNQUOTED(HAVE_WINSOCK_H, 1,
    271         [Define to 1 if you have the winsock.h header file.])
    272       ;;
    273   esac
    274 ])
    275 
    276 
    277 dnl CURL_CHECK_HEADER_WINSOCK2
    278 dnl -------------------------------------------------
    279 dnl Check for compilable and valid winsock2.h header
    280 
    281 AC_DEFUN([CURL_CHECK_HEADER_WINSOCK2], [
    282   AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
    283   AC_CACHE_CHECK([for winsock2.h], [curl_cv_header_winsock2_h], [
    284     AC_COMPILE_IFELSE([
    285       AC_LANG_PROGRAM([[
    286 #undef inline
    287 #ifndef WIN32_LEAN_AND_MEAN
    288 #define WIN32_LEAN_AND_MEAN
    289 #endif
    290 #include <windows.h>
    291 #include <winsock2.h>
    292       ]],[[
    293 #if defined(__CYGWIN__) || defined(__CEGCC__) || defined(__MINGW32CE__)
    294         HAVE_WINSOCK2_H shall not be defined.
    295 #else
    296         int dummy=2*IPPROTO_ESP;
    297 #endif
    298       ]])
    299     ],[
    300       curl_cv_header_winsock2_h="yes"
    301     ],[
    302       curl_cv_header_winsock2_h="no"
    303     ])
    304   ])
    305   case "$curl_cv_header_winsock2_h" in
    306     yes)
    307       AC_DEFINE_UNQUOTED(HAVE_WINSOCK2_H, 1,
    308         [Define to 1 if you have the winsock2.h header file.])
    309       ;;
    310   esac
    311 ])
    312 
    313 
    314 dnl CURL_CHECK_HEADER_WS2TCPIP
    315 dnl -------------------------------------------------
    316 dnl Check for compilable and valid ws2tcpip.h header
    317 
    318 AC_DEFUN([CURL_CHECK_HEADER_WS2TCPIP], [
    319   AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
    320   AC_CACHE_CHECK([for ws2tcpip.h], [curl_cv_header_ws2tcpip_h], [
    321     AC_COMPILE_IFELSE([
    322       AC_LANG_PROGRAM([[
    323 #undef inline
    324 #ifndef WIN32_LEAN_AND_MEAN
    325 #define WIN32_LEAN_AND_MEAN
    326 #endif
    327 #include <windows.h>
    328 #include <winsock2.h>
    329 #include <ws2tcpip.h>
    330       ]],[[
    331 #if defined(__CYGWIN__) || defined(__CEGCC__) || defined(__MINGW32CE__)
    332         HAVE_WS2TCPIP_H shall not be defined.
    333 #else
    334         int dummy=2*IP_PKTINFO;
    335 #endif
    336       ]])
    337     ],[
    338       curl_cv_header_ws2tcpip_h="yes"
    339     ],[
    340       curl_cv_header_ws2tcpip_h="no"
    341     ])
    342   ])
    343   case "$curl_cv_header_ws2tcpip_h" in
    344     yes)
    345       AC_DEFINE_UNQUOTED(HAVE_WS2TCPIP_H, 1,
    346         [Define to 1 if you have the ws2tcpip.h header file.])
    347       ;;
    348   esac
    349 ])
    350 
    351 
    352 dnl CURL_CHECK_HEADER_WINLDAP
    353 dnl -------------------------------------------------
    354 dnl Check for compilable and valid winldap.h header
    355 
    356 AC_DEFUN([CURL_CHECK_HEADER_WINLDAP], [
    357   AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
    358   AC_CACHE_CHECK([for winldap.h], [curl_cv_header_winldap_h], [
    359     AC_COMPILE_IFELSE([
    360       AC_LANG_PROGRAM([[
    361 #undef inline
    362 #ifdef HAVE_WINDOWS_H
    363 #ifndef WIN32_LEAN_AND_MEAN
    364 #define WIN32_LEAN_AND_MEAN
    365 #endif
    366 #include <windows.h>
    367 #endif
    368 #include <winldap.h>
    369       ]],[[
    370 #if defined(__CYGWIN__) || defined(__CEGCC__)
    371         HAVE_WINLDAP_H shall not be defined.
    372 #else
    373         LDAP *ldp = ldap_init("dummy", LDAP_PORT);
    374         ULONG res = ldap_unbind(ldp);
    375 #endif
    376       ]])
    377     ],[
    378       curl_cv_header_winldap_h="yes"
    379     ],[
    380       curl_cv_header_winldap_h="no"
    381     ])
    382   ])
    383   case "$curl_cv_header_winldap_h" in
    384     yes)
    385       AC_DEFINE_UNQUOTED(HAVE_WINLDAP_H, 1,
    386         [Define to 1 if you have the winldap.h header file.])
    387       ;;
    388   esac
    389 ])
    390 
    391 
    392 dnl CURL_CHECK_HEADER_WINBER
    393 dnl -------------------------------------------------
    394 dnl Check for compilable and valid winber.h header
    395 
    396 AC_DEFUN([CURL_CHECK_HEADER_WINBER], [
    397   AC_REQUIRE([CURL_CHECK_HEADER_WINLDAP])dnl
    398   AC_CACHE_CHECK([for winber.h], [curl_cv_header_winber_h], [
    399     AC_COMPILE_IFELSE([
    400       AC_LANG_PROGRAM([[
    401 #undef inline
    402 #ifdef HAVE_WINDOWS_H
    403 #ifndef WIN32_LEAN_AND_MEAN
    404 #define WIN32_LEAN_AND_MEAN
    405 #endif
    406 #include <windows.h>
    407 #endif
    408 #include <winldap.h>
    409 #include <winber.h>
    410       ]],[[
    411 #if defined(__CYGWIN__) || defined(__CEGCC__)
    412         HAVE_WINBER_H shall not be defined.
    413 #else
    414         BERVAL *bvp = NULL;
    415         BerElement *bep = ber_init(bvp);
    416         ber_free(bep, 1);
    417 #endif
    418       ]])
    419     ],[
    420       curl_cv_header_winber_h="yes"
    421     ],[
    422       curl_cv_header_winber_h="no"
    423     ])
    424   ])
    425   case "$curl_cv_header_winber_h" in
    426     yes)
    427       AC_DEFINE_UNQUOTED(HAVE_WINBER_H, 1,
    428         [Define to 1 if you have the winber.h header file.])
    429       ;;
    430   esac
    431 ])
    432 
    433 
    434 dnl CURL_CHECK_HEADER_LBER
    435 dnl -------------------------------------------------
    436 dnl Check for compilable and valid lber.h header,
    437 dnl and check if it is needed even with ldap.h
    438 
    439 AC_DEFUN([CURL_CHECK_HEADER_LBER], [
    440   AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
    441   AC_CACHE_CHECK([for lber.h], [curl_cv_header_lber_h], [
    442     AC_COMPILE_IFELSE([
    443       AC_LANG_PROGRAM([[
    444 #undef inline
    445 #ifdef HAVE_WINDOWS_H
    446 #ifndef WIN32_LEAN_AND_MEAN
    447 #define WIN32_LEAN_AND_MEAN
    448 #endif
    449 #include <windows.h>
    450 #else
    451 #ifdef HAVE_SYS_TYPES_H
    452 #include <sys/types.h>
    453 #endif
    454 #endif
    455 #ifndef NULL
    456 #define NULL (void *)0
    457 #endif
    458 #include <lber.h>
    459       ]],[[
    460         BerValue *bvp = NULL;
    461         BerElement *bep = ber_init(bvp);
    462         ber_free(bep, 1);
    463       ]])
    464     ],[
    465       curl_cv_header_lber_h="yes"
    466     ],[
    467       curl_cv_header_lber_h="no"
    468     ])
    469   ])
    470   if test "$curl_cv_header_lber_h" = "yes"; then
    471     AC_DEFINE_UNQUOTED(HAVE_LBER_H, 1,
    472       [Define to 1 if you have the lber.h header file.])
    473     #
    474     AC_COMPILE_IFELSE([
    475       AC_LANG_PROGRAM([[
    476 #undef inline
    477 #ifdef HAVE_WINDOWS_H
    478 #ifndef WIN32_LEAN_AND_MEAN
    479 #define WIN32_LEAN_AND_MEAN
    480 #endif
    481 #include <windows.h>
    482 #else
    483 #ifdef HAVE_SYS_TYPES_H
    484 #include <sys/types.h>
    485 #endif
    486 #endif
    487 #ifndef NULL
    488 #define NULL (void *)0
    489 #endif
    490 #ifndef LDAP_DEPRECATED
    491 #define LDAP_DEPRECATED 1
    492 #endif
    493 #include <ldap.h>
    494       ]],[[
    495         BerValue *bvp = NULL;
    496         BerElement *bep = ber_init(bvp);
    497         ber_free(bep, 1);
    498       ]])
    499     ],[
    500       curl_cv_need_header_lber_h="no"
    501     ],[
    502       curl_cv_need_header_lber_h="yes"
    503     ])
    504     #
    505     case "$curl_cv_need_header_lber_h" in
    506       yes)
    507         AC_DEFINE_UNQUOTED(NEED_LBER_H, 1,
    508           [Define to 1 if you need the lber.h header file even with ldap.h])
    509         ;;
    510     esac
    511   fi
    512 ])
    513 
    514 
    515 dnl CURL_CHECK_HEADER_LDAP
    516 dnl -------------------------------------------------
    517 dnl Check for compilable and valid ldap.h header
    518 
    519 AC_DEFUN([CURL_CHECK_HEADER_LDAP], [
    520   AC_REQUIRE([CURL_CHECK_HEADER_LBER])dnl
    521   AC_CACHE_CHECK([for ldap.h], [curl_cv_header_ldap_h], [
    522     AC_COMPILE_IFELSE([
    523       AC_LANG_PROGRAM([[
    524 #undef inline
    525 #ifdef HAVE_WINDOWS_H
    526 #ifndef WIN32_LEAN_AND_MEAN
    527 #define WIN32_LEAN_AND_MEAN
    528 #endif
    529 #include <windows.h>
    530 #else
    531 #ifdef HAVE_SYS_TYPES_H
    532 #include <sys/types.h>
    533 #endif
    534 #endif
    535 #ifndef LDAP_DEPRECATED
    536 #define LDAP_DEPRECATED 1
    537 #endif
    538 #ifdef NEED_LBER_H
    539 #include <lber.h>
    540 #endif
    541 #include <ldap.h>
    542       ]],[[
    543         LDAP *ldp = ldap_init("dummy", LDAP_PORT);
    544         int res = ldap_unbind(ldp);
    545       ]])
    546     ],[
    547       curl_cv_header_ldap_h="yes"
    548     ],[
    549       curl_cv_header_ldap_h="no"
    550     ])
    551   ])
    552   case "$curl_cv_header_ldap_h" in
    553     yes)
    554       AC_DEFINE_UNQUOTED(HAVE_LDAP_H, 1,
    555         [Define to 1 if you have the ldap.h header file.])
    556       ;;
    557   esac
    558 ])
    559 
    560 
    561 dnl CURL_CHECK_HEADER_LDAP_SSL
    562 dnl -------------------------------------------------
    563 dnl Check for compilable and valid ldap_ssl.h header
    564 
    565 AC_DEFUN([CURL_CHECK_HEADER_LDAP_SSL], [
    566   AC_REQUIRE([CURL_CHECK_HEADER_LDAP])dnl
    567   AC_CACHE_CHECK([for ldap_ssl.h], [curl_cv_header_ldap_ssl_h], [
    568     AC_COMPILE_IFELSE([
    569       AC_LANG_PROGRAM([[
    570 #undef inline
    571 #ifdef HAVE_WINDOWS_H
    572 #ifndef WIN32_LEAN_AND_MEAN
    573 #define WIN32_LEAN_AND_MEAN
    574 #endif
    575 #include <windows.h>
    576 #else
    577 #ifdef HAVE_SYS_TYPES_H
    578 #include <sys/types.h>
    579 #endif
    580 #endif
    581 #ifndef LDAP_DEPRECATED
    582 #define LDAP_DEPRECATED 1
    583 #endif
    584 #ifdef NEED_LBER_H
    585 #include <lber.h>
    586 #endif
    587 #ifdef HAVE_LDAP_H
    588 #include <ldap.h>
    589 #endif
    590 #include <ldap_ssl.h>
    591       ]],[[
    592         LDAP *ldp = ldapssl_init("dummy", LDAPS_PORT, 1);
    593       ]])
    594     ],[
    595       curl_cv_header_ldap_ssl_h="yes"
    596     ],[
    597       curl_cv_header_ldap_ssl_h="no"
    598     ])
    599   ])
    600   case "$curl_cv_header_ldap_ssl_h" in
    601     yes)
    602       AC_DEFINE_UNQUOTED(HAVE_LDAP_SSL_H, 1,
    603         [Define to 1 if you have the ldap_ssl.h header file.])
    604       ;;
    605   esac
    606 ])
    607 
    608 
    609 dnl CURL_CHECK_HEADER_LDAPSSL
    610 dnl -------------------------------------------------
    611 dnl Check for compilable and valid ldapssl.h header
    612 
    613 AC_DEFUN([CURL_CHECK_HEADER_LDAPSSL], [
    614   AC_REQUIRE([CURL_CHECK_HEADER_LDAP])dnl
    615   AC_CACHE_CHECK([for ldapssl.h], [curl_cv_header_ldapssl_h], [
    616     AC_COMPILE_IFELSE([
    617       AC_LANG_PROGRAM([[
    618 #undef inline
    619 #ifdef HAVE_WINDOWS_H
    620 #ifndef WIN32_LEAN_AND_MEAN
    621 #define WIN32_LEAN_AND_MEAN
    622 #endif
    623 #include <windows.h>
    624 #else
    625 #ifdef HAVE_SYS_TYPES_H
    626 #include <sys/types.h>
    627 #endif
    628 #endif
    629 #ifndef NULL
    630 #define NULL (void *)0
    631 #endif
    632 #ifndef LDAP_DEPRECATED
    633 #define LDAP_DEPRECATED 1
    634 #endif
    635 #ifdef NEED_LBER_H
    636 #include <lber.h>
    637 #endif
    638 #ifdef HAVE_LDAP_H
    639 #include <ldap.h>
    640 #endif
    641 #include <ldapssl.h>
    642       ]],[[
    643         char *cert_label = NULL;
    644         LDAP *ldp = ldap_ssl_init("dummy", LDAPS_PORT, cert_label);
    645       ]])
    646     ],[
    647       curl_cv_header_ldapssl_h="yes"
    648     ],[
    649       curl_cv_header_ldapssl_h="no"
    650     ])
    651   ])
    652   case "$curl_cv_header_ldapssl_h" in
    653     yes)
    654       AC_DEFINE_UNQUOTED(HAVE_LDAPSSL_H, 1,
    655         [Define to 1 if you have the ldapssl.h header file.])
    656       ;;
    657   esac
    658 ])
    659 
    660 
    661 dnl CURL_CHECK_LIBS_WINLDAP
    662 dnl -------------------------------------------------
    663 dnl Check for libraries needed for WINLDAP support,
    664 dnl and prepended to LIBS any needed libraries.
    665 dnl This macro can take an optional parameter with a
    666 dnl white space separated list of libraries to check
    667 dnl before the WINLDAP default ones.
    668 
    669 AC_DEFUN([CURL_CHECK_LIBS_WINLDAP], [
    670   AC_REQUIRE([CURL_CHECK_HEADER_WINBER])dnl
    671   #
    672   AC_MSG_CHECKING([for WINLDAP libraries])
    673   #
    674   u_libs=""
    675   #
    676   ifelse($1,,,[
    677     for x_lib in $1; do
    678       case "$x_lib" in
    679         -l*)
    680           l_lib="$x_lib"
    681           ;;
    682         *)
    683           l_lib="-l$x_lib"
    684           ;;
    685       esac
    686       if test -z "$u_libs"; then
    687         u_libs="$l_lib"
    688       else
    689         u_libs="$u_libs $l_lib"
    690       fi
    691     done
    692   ])
    693   #
    694   curl_cv_save_LIBS="$LIBS"
    695   curl_cv_ldap_LIBS="unknown"
    696   #
    697   for x_nlibs in '' "$u_libs" \
    698     '-lwldap32' ; do
    699     if test "$curl_cv_ldap_LIBS" = "unknown"; then
    700       if test -z "$x_nlibs"; then
    701         LIBS="$curl_cv_save_LIBS"
    702       else
    703         LIBS="$x_nlibs $curl_cv_save_LIBS"
    704       fi
    705       AC_LINK_IFELSE([
    706         AC_LANG_PROGRAM([[
    707 #undef inline
    708 #ifdef HAVE_WINDOWS_H
    709 #ifndef WIN32_LEAN_AND_MEAN
    710 #define WIN32_LEAN_AND_MEAN
    711 #endif
    712 #include <windows.h>
    713 #ifdef HAVE_WINLDAP_H
    714 #include <winldap.h>
    715 #endif
    716 #ifdef HAVE_WINBER_H
    717 #include <winber.h>
    718 #endif
    719 #endif
    720         ]],[[
    721           BERVAL *bvp = NULL;
    722           BerElement *bep = ber_init(bvp);
    723           LDAP *ldp = ldap_init("dummy", LDAP_PORT);
    724           ULONG res = ldap_unbind(ldp);
    725           ber_free(bep, 1);
    726         ]])
    727       ],[
    728         curl_cv_ldap_LIBS="$x_nlibs"
    729       ])
    730     fi
    731   done
    732   #
    733   LIBS="$curl_cv_save_LIBS"
    734   #
    735   case X-"$curl_cv_ldap_LIBS" in
    736     X-unknown)
    737       AC_MSG_RESULT([cannot find WINLDAP libraries])
    738       ;;
    739     X-)
    740       AC_MSG_RESULT([no additional lib required])
    741       ;;
    742     *)
    743       if test -z "$curl_cv_save_LIBS"; then
    744         LIBS="$curl_cv_ldap_LIBS"
    745       else
    746         LIBS="$curl_cv_ldap_LIBS $curl_cv_save_LIBS"
    747       fi
    748       AC_MSG_RESULT([$curl_cv_ldap_LIBS])
    749       ;;
    750   esac
    751   #
    752 ])
    753 
    754 
    755 dnl CURL_CHECK_LIBS_LDAP
    756 dnl -------------------------------------------------
    757 dnl Check for libraries needed for LDAP support,
    758 dnl and prepended to LIBS any needed libraries.
    759 dnl This macro can take an optional parameter with a
    760 dnl white space separated list of libraries to check
    761 dnl before the default ones.
    762 
    763 AC_DEFUN([CURL_CHECK_LIBS_LDAP], [
    764   AC_REQUIRE([CURL_CHECK_HEADER_LDAP])dnl
    765   #
    766   AC_MSG_CHECKING([for LDAP libraries])
    767   #
    768   u_libs=""
    769   #
    770   ifelse($1,,,[
    771     for x_lib in $1; do
    772       case "$x_lib" in
    773         -l*)
    774           l_lib="$x_lib"
    775           ;;
    776         *)
    777           l_lib="-l$x_lib"
    778           ;;
    779       esac
    780       if test -z "$u_libs"; then
    781         u_libs="$l_lib"
    782       else
    783         u_libs="$u_libs $l_lib"
    784       fi
    785     done
    786   ])
    787   #
    788   curl_cv_save_LIBS="$LIBS"
    789   curl_cv_ldap_LIBS="unknown"
    790   #
    791   for x_nlibs in '' "$u_libs" \
    792     '-lldap' \
    793     '-llber -lldap' \
    794     '-lldap -llber' \
    795     '-lldapssl -lldapx -lldapsdk' \
    796     '-lldapsdk -lldapx -lldapssl' ; do
    797     if test "$curl_cv_ldap_LIBS" = "unknown"; then
    798       if test -z "$x_nlibs"; then
    799         LIBS="$curl_cv_save_LIBS"
    800       else
    801         LIBS="$x_nlibs $curl_cv_save_LIBS"
    802       fi
    803       AC_LINK_IFELSE([
    804         AC_LANG_PROGRAM([[
    805 #undef inline
    806 #ifdef HAVE_WINDOWS_H
    807 #ifndef WIN32_LEAN_AND_MEAN
    808 #define WIN32_LEAN_AND_MEAN
    809 #endif
    810 #include <windows.h>
    811 #else
    812 #ifdef HAVE_SYS_TYPES_H
    813 #include <sys/types.h>
    814 #endif
    815 #endif
    816 #ifndef NULL
    817 #define NULL (void *)0
    818 #endif
    819 #ifndef LDAP_DEPRECATED
    820 #define LDAP_DEPRECATED 1
    821 #endif
    822 #ifdef NEED_LBER_H
    823 #include <lber.h>
    824 #endif
    825 #ifdef HAVE_LDAP_H
    826 #include <ldap.h>
    827 #endif
    828         ]],[[
    829           BerValue *bvp = NULL;
    830           BerElement *bep = ber_init(bvp);
    831           LDAP *ldp = ldap_init("dummy", LDAP_PORT);
    832           int res = ldap_unbind(ldp);
    833           ber_free(bep, 1);
    834         ]])
    835       ],[
    836         curl_cv_ldap_LIBS="$x_nlibs"
    837       ])
    838     fi
    839   done
    840   #
    841   LIBS="$curl_cv_save_LIBS"
    842   #
    843   case X-"$curl_cv_ldap_LIBS" in
    844     X-unknown)
    845       AC_MSG_RESULT([cannot find LDAP libraries])
    846       ;;
    847     X-)
    848       AC_MSG_RESULT([no additional lib required])
    849       ;;
    850     *)
    851       if test -z "$curl_cv_save_LIBS"; then
    852         LIBS="$curl_cv_ldap_LIBS"
    853       else
    854         LIBS="$curl_cv_ldap_LIBS $curl_cv_save_LIBS"
    855       fi
    856       AC_MSG_RESULT([$curl_cv_ldap_LIBS])
    857       ;;
    858   esac
    859   #
    860 ])
    861 
    862 
    863 dnl CURL_CHECK_HEADER_MALLOC
    864 dnl -------------------------------------------------
    865 dnl Check for compilable and valid malloc.h header,
    866 dnl and check if it is needed even with stdlib.h
    867 
    868 AC_DEFUN([CURL_CHECK_HEADER_MALLOC], [
    869   AC_CACHE_CHECK([for malloc.h], [curl_cv_header_malloc_h], [
    870     AC_COMPILE_IFELSE([
    871       AC_LANG_PROGRAM([[
    872 #include <malloc.h>
    873       ]],[[
    874         void *p = malloc(10);
    875         void *q = calloc(10,10);
    876         free(p);
    877         free(q);
    878       ]])
    879     ],[
    880       curl_cv_header_malloc_h="yes"
    881     ],[
    882       curl_cv_header_malloc_h="no"
    883     ])
    884   ])
    885   if test "$curl_cv_header_malloc_h" = "yes"; then
    886     AC_DEFINE_UNQUOTED(HAVE_MALLOC_H, 1,
    887       [Define to 1 if you have the malloc.h header file.])
    888     #
    889     AC_COMPILE_IFELSE([
    890       AC_LANG_PROGRAM([[
    891 #include <stdlib.h>
    892       ]],[[
    893         void *p = malloc(10);
    894         void *q = calloc(10,10);
    895         free(p);
    896         free(q);
    897       ]])
    898     ],[
    899       curl_cv_need_header_malloc_h="no"
    900     ],[
    901       curl_cv_need_header_malloc_h="yes"
    902     ])
    903     #
    904     case "$curl_cv_need_header_malloc_h" in
    905       yes)
    906         AC_DEFINE_UNQUOTED(NEED_MALLOC_H, 1,
    907           [Define to 1 if you need the malloc.h header file even with stdlib.h])
    908         ;;
    909     esac
    910   fi
    911 ])
    912 
    913 
    914 dnl CURL_CHECK_HEADER_MEMORY
    915 dnl -------------------------------------------------
    916 dnl Check for compilable and valid memory.h header,
    917 dnl and check if it is needed even with stdlib.h for
    918 dnl memory related functions.
    919 
    920 AC_DEFUN([CURL_CHECK_HEADER_MEMORY], [
    921   AC_CACHE_CHECK([for memory.h], [curl_cv_header_memory_h], [
    922     AC_COMPILE_IFELSE([
    923       AC_LANG_PROGRAM([[
    924 #include <memory.h>
    925       ]],[[
    926         void *p = malloc(10);
    927         void *q = calloc(10,10);
    928         free(p);
    929         free(q);
    930       ]])
    931     ],[
    932       curl_cv_header_memory_h="yes"
    933     ],[
    934       curl_cv_header_memory_h="no"
    935     ])
    936   ])
    937   if test "$curl_cv_header_memory_h" = "yes"; then
    938     AC_DEFINE_UNQUOTED(HAVE_MEMORY_H, 1,
    939       [Define to 1 if you have the memory.h header file.])
    940     #
    941     AC_COMPILE_IFELSE([
    942       AC_LANG_PROGRAM([[
    943 #include <stdlib.h>
    944       ]],[[
    945         void *p = malloc(10);
    946         void *q = calloc(10,10);
    947         free(p);
    948         free(q);
    949       ]])
    950     ],[
    951       curl_cv_need_header_memory_h="no"
    952     ],[
    953       curl_cv_need_header_memory_h="yes"
    954     ])
    955     #
    956     case "$curl_cv_need_header_memory_h" in
    957       yes)
    958         AC_DEFINE_UNQUOTED(NEED_MEMORY_H, 1,
    959           [Define to 1 if you need the memory.h header file even with stdlib.h])
    960         ;;
    961     esac
    962   fi
    963 ])
    964 
    965 
    966 dnl CURL_CHECK_FUNC_GETNAMEINFO
    967 dnl -------------------------------------------------
    968 dnl Test if the getnameinfo function is available,
    969 dnl and check the types of five of its arguments.
    970 dnl If the function succeeds HAVE_GETNAMEINFO will be
    971 dnl defined, defining the types of the arguments in
    972 dnl GETNAMEINFO_TYPE_ARG1, GETNAMEINFO_TYPE_ARG2,
    973 dnl GETNAMEINFO_TYPE_ARG46 and GETNAMEINFO_TYPE_ARG7,
    974 dnl and also defining the type qualifier of first
    975 dnl argument in GETNAMEINFO_QUAL_ARG1.
    976 
    977 AC_DEFUN([CURL_CHECK_FUNC_GETNAMEINFO], [
    978   AC_REQUIRE([CURL_CHECK_HEADER_WS2TCPIP])dnl
    979   AC_CHECK_HEADERS(sys/types.h sys/socket.h netdb.h)
    980   #
    981   AC_MSG_CHECKING([for getnameinfo])
    982   AC_LINK_IFELSE([
    983     AC_LANG_FUNC_LINK_TRY([getnameinfo])
    984   ],[
    985     AC_MSG_RESULT([yes])
    986     curl_cv_getnameinfo="yes"
    987   ],[
    988     AC_MSG_RESULT([no])
    989     curl_cv_getnameinfo="no"
    990   ])
    991   #
    992   if test "$curl_cv_getnameinfo" != "yes"; then
    993     AC_MSG_CHECKING([deeper for getnameinfo])
    994     AC_LINK_IFELSE([
    995       AC_LANG_PROGRAM([[
    996       ]],[[
    997         getnameinfo();
    998       ]])
    999     ],[
   1000       AC_MSG_RESULT([yes])
   1001       curl_cv_getnameinfo="yes"
   1002     ],[
   1003       AC_MSG_RESULT([but still no])
   1004       curl_cv_getnameinfo="no"
   1005     ])
   1006   fi
   1007   #
   1008   if test "$curl_cv_getnameinfo" != "yes"; then
   1009     AC_MSG_CHECKING([deeper and deeper for getnameinfo])
   1010     AC_LINK_IFELSE([
   1011       AC_LANG_PROGRAM([[
   1012 #undef inline
   1013 #ifdef HAVE_WINDOWS_H
   1014 #ifndef WIN32_LEAN_AND_MEAN
   1015 #define WIN32_LEAN_AND_MEAN
   1016 #endif
   1017 #include <windows.h>
   1018 #ifdef HAVE_WINSOCK2_H
   1019 #include <winsock2.h>
   1020 #ifdef HAVE_WS2TCPIP_H
   1021 #include <ws2tcpip.h>
   1022 #endif
   1023 #endif
   1024 #else
   1025 #ifdef HAVE_SYS_TYPES_H
   1026 #include <sys/types.h>
   1027 #endif
   1028 #ifdef HAVE_SYS_SOCKET_H
   1029 #include <sys/socket.h>
   1030 #endif
   1031 #ifdef HAVE_NETDB_H
   1032 #include <netdb.h>
   1033 #endif
   1034 #endif
   1035       ]],[[
   1036         getnameinfo(0, 0, 0, 0, 0, 0, 0);
   1037       ]])
   1038     ],[
   1039       AC_MSG_RESULT([yes])
   1040       curl_cv_getnameinfo="yes"
   1041     ],[
   1042       AC_MSG_RESULT([but still no])
   1043       curl_cv_getnameinfo="no"
   1044     ])
   1045   fi
   1046   #
   1047   if test "$curl_cv_getnameinfo" = "yes"; then
   1048     AC_CACHE_CHECK([types of arguments for getnameinfo],
   1049       [curl_cv_func_getnameinfo_args], [
   1050       curl_cv_func_getnameinfo_args="unknown"
   1051       for gni_arg1 in 'struct sockaddr *' 'const struct sockaddr *' 'void *'; do
   1052         for gni_arg2 in 'socklen_t' 'size_t' 'int'; do
   1053           for gni_arg46 in 'size_t' 'int' 'socklen_t' 'unsigned int' 'DWORD'; do
   1054             for gni_arg7 in 'int' 'unsigned int'; do
   1055               if test "$curl_cv_func_getnameinfo_args" = "unknown"; then
   1056                 AC_COMPILE_IFELSE([
   1057                   AC_LANG_PROGRAM([[
   1058 #undef inline
   1059 #ifdef HAVE_WINDOWS_H
   1060 #ifndef WIN32_LEAN_AND_MEAN
   1061 #define WIN32_LEAN_AND_MEAN
   1062 #endif
   1063 #if (!defined(_WIN32_WINNT)) || (_WIN32_WINNT < 0x0501)
   1064 #undef _WIN32_WINNT
   1065 #define _WIN32_WINNT 0x0501
   1066 #endif
   1067 #include <windows.h>
   1068 #ifdef HAVE_WINSOCK2_H
   1069 #include <winsock2.h>
   1070 #ifdef HAVE_WS2TCPIP_H
   1071 #include <ws2tcpip.h>
   1072 #endif
   1073 #endif
   1074 #define GNICALLCONV WSAAPI
   1075 #else
   1076 #ifdef HAVE_SYS_TYPES_H
   1077 #include <sys/types.h>
   1078 #endif
   1079 #ifdef HAVE_SYS_SOCKET_H
   1080 #include <sys/socket.h>
   1081 #endif
   1082 #ifdef HAVE_NETDB_H
   1083 #include <netdb.h>
   1084 #endif
   1085 #define GNICALLCONV
   1086 #endif
   1087                     extern int GNICALLCONV getnameinfo($gni_arg1, $gni_arg2,
   1088                                            char *, $gni_arg46,
   1089                                            char *, $gni_arg46,
   1090                                            $gni_arg7);
   1091                   ]],[[
   1092                     $gni_arg2 salen=0;
   1093                     $gni_arg46 hostlen=0;
   1094                     $gni_arg46 servlen=0;
   1095                     $gni_arg7 flags=0;
   1096                     int res = getnameinfo(0, salen, 0, hostlen, 0, servlen, flags);
   1097                   ]])
   1098                 ],[
   1099                   curl_cv_func_getnameinfo_args="$gni_arg1,$gni_arg2,$gni_arg46,$gni_arg7"
   1100                 ])
   1101               fi
   1102             done
   1103           done
   1104         done
   1105       done
   1106     ]) # AC-CACHE-CHECK
   1107     if test "$curl_cv_func_getnameinfo_args" = "unknown"; then
   1108       AC_MSG_WARN([Cannot find proper types to use for getnameinfo args])
   1109       AC_MSG_WARN([HAVE_GETNAMEINFO will not be defined])
   1110     else
   1111       gni_prev_IFS=$IFS; IFS=','
   1112       set dummy `echo "$curl_cv_func_getnameinfo_args" | sed 's/\*/\*/g'`
   1113       IFS=$gni_prev_IFS
   1114       shift
   1115       #
   1116       gni_qual_type_arg1=$[1]
   1117       #
   1118       AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG2, $[2],
   1119         [Define to the type of arg 2 for getnameinfo.])
   1120       AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG46, $[3],
   1121         [Define to the type of args 4 and 6 for getnameinfo.])
   1122       AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG7, $[4],
   1123         [Define to the type of arg 7 for getnameinfo.])
   1124       #
   1125       prev_sh_opts=$-
   1126       #
   1127       case $prev_sh_opts in
   1128         *f*)
   1129           ;;
   1130         *)
   1131           set -f
   1132           ;;
   1133       esac
   1134       #
   1135       case "$gni_qual_type_arg1" in
   1136         const*)
   1137           gni_qual_arg1=const
   1138           gni_type_arg1=`echo $gni_qual_type_arg1 | sed 's/^const //'`
   1139         ;;
   1140         *)
   1141           gni_qual_arg1=
   1142           gni_type_arg1=$gni_qual_type_arg1
   1143         ;;
   1144       esac
   1145       #
   1146       AC_DEFINE_UNQUOTED(GETNAMEINFO_QUAL_ARG1, $gni_qual_arg1,
   1147         [Define to the type qualifier of arg 1 for getnameinfo.])
   1148       AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG1, $gni_type_arg1,
   1149         [Define to the type of arg 1 for getnameinfo.])
   1150       #
   1151       case $prev_sh_opts in
   1152         *f*)
   1153           ;;
   1154         *)
   1155           set +f
   1156           ;;
   1157       esac
   1158       #
   1159       AC_DEFINE_UNQUOTED(HAVE_GETNAMEINFO, 1,
   1160         [Define to 1 if you have the getnameinfo function.])
   1161       curl_cv_func_getnameinfo="yes"
   1162     fi
   1163   fi
   1164 ])
   1165 
   1166 
   1167 dnl TYPE_SOCKADDR_STORAGE
   1168 dnl -------------------------------------------------
   1169 dnl Check for struct sockaddr_storage. Most IPv6-enabled
   1170 dnl hosts have it, but AIX 4.3 is one known exception.
   1171 
   1172 AC_DEFUN([TYPE_SOCKADDR_STORAGE],
   1173 [
   1174    AC_CHECK_TYPE([struct sockaddr_storage],
   1175         AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE, 1,
   1176                   [if struct sockaddr_storage is defined]), ,
   1177    [
   1178 #undef inline
   1179 #ifdef HAVE_WINDOWS_H
   1180 #ifndef WIN32_LEAN_AND_MEAN
   1181 #define WIN32_LEAN_AND_MEAN
   1182 #endif
   1183 #include <windows.h>
   1184 #ifdef HAVE_WINSOCK2_H
   1185 #include <winsock2.h>
   1186 #endif
   1187 #else
   1188 #ifdef HAVE_SYS_TYPES_H
   1189 #include <sys/types.h>
   1190 #endif
   1191 #ifdef HAVE_SYS_SOCKET_H
   1192 #include <sys/socket.h>
   1193 #endif
   1194 #ifdef HAVE_NETINET_IN_H
   1195 #include <netinet/in.h>
   1196 #endif
   1197 #ifdef HAVE_ARPA_INET_H
   1198 #include <arpa/inet.h>
   1199 #endif
   1200 #endif
   1201    ])
   1202 ])
   1203 
   1204 
   1205 dnl CURL_CHECK_NI_WITHSCOPEID
   1206 dnl -------------------------------------------------
   1207 dnl Check for working NI_WITHSCOPEID in getnameinfo()
   1208 
   1209 AC_DEFUN([CURL_CHECK_NI_WITHSCOPEID], [
   1210   AC_REQUIRE([CURL_CHECK_FUNC_GETNAMEINFO])dnl
   1211   AC_REQUIRE([TYPE_SOCKADDR_STORAGE])dnl
   1212   AC_CHECK_HEADERS(stdio.h sys/types.h sys/socket.h \
   1213                    netdb.h netinet/in.h arpa/inet.h)
   1214   #
   1215   AC_CACHE_CHECK([for working NI_WITHSCOPEID],
   1216     [curl_cv_working_ni_withscopeid], [
   1217     AC_RUN_IFELSE([
   1218       AC_LANG_PROGRAM([[
   1219 #ifdef HAVE_STDLIB_H
   1220 #include <stdlib.h>
   1221 #endif
   1222 #ifdef HAVE_STDIO_H
   1223 #include <stdio.h>
   1224 #endif
   1225 #ifdef HAVE_SYS_TYPES_H
   1226 #include <sys/types.h>
   1227 #endif
   1228 #ifdef HAVE_SYS_SOCKET_H
   1229 #include <sys/socket.h>
   1230 #endif
   1231 #ifdef HAVE_NETDB_H
   1232 #include <netdb.h>
   1233 #endif
   1234 #ifdef HAVE_NETINET_IN_H
   1235 #include <netinet/in.h>
   1236 #endif
   1237 #ifdef HAVE_ARPA_INET_H
   1238 #include <arpa/inet.h>
   1239 #endif
   1240       ]],[[
   1241 #if defined(NI_WITHSCOPEID) && defined(HAVE_GETNAMEINFO)
   1242 #ifdef HAVE_STRUCT_SOCKADDR_STORAGE
   1243         struct sockaddr_storage sa;
   1244 #else
   1245         unsigned char sa[256];
   1246 #endif
   1247         char hostbuf[NI_MAXHOST];
   1248         int rc;
   1249         GETNAMEINFO_TYPE_ARG2 salen = (GETNAMEINFO_TYPE_ARG2)sizeof(sa);
   1250         GETNAMEINFO_TYPE_ARG46 hostlen = (GETNAMEINFO_TYPE_ARG46)sizeof(hostbuf);
   1251         GETNAMEINFO_TYPE_ARG7 flags = NI_NUMERICHOST | NI_NUMERICSERV | NI_WITHSCOPEID;
   1252         int fd = socket(AF_INET6, SOCK_STREAM, 0);
   1253         if(fd < 0) {
   1254           perror("socket()");
   1255           return 1; /* Error creating socket */
   1256         }
   1257         rc = getsockname(fd, (GETNAMEINFO_TYPE_ARG1)&sa, &salen);
   1258         if(rc) {
   1259           perror("getsockname()");
   1260           return 2; /* Error retrieving socket name */
   1261         }
   1262         rc = getnameinfo((GETNAMEINFO_TYPE_ARG1)&sa, salen, hostbuf, hostlen, NULL, 0, flags);
   1263         if(rc) {
   1264           printf("rc = %s\n", gai_strerror(rc));
   1265           return 3; /* Error translating socket address */
   1266         }
   1267         return 0; /* Ok, NI_WITHSCOPEID works */
   1268 #else
   1269         return 4; /* Error, NI_WITHSCOPEID not defined or no getnameinfo() */
   1270 #endif
   1271       ]]) # AC-LANG-PROGRAM
   1272     ],[
   1273       # Exit code == 0. Program worked.
   1274       curl_cv_working_ni_withscopeid="yes"
   1275     ],[
   1276       # Exit code != 0. Program failed.
   1277       curl_cv_working_ni_withscopeid="no"
   1278     ],[
   1279       # Program is not run when cross-compiling. So we assume
   1280       # NI_WITHSCOPEID will work if we are able to compile it.
   1281       AC_COMPILE_IFELSE([
   1282         AC_LANG_PROGRAM([[
   1283 #include <sys/types.h>
   1284 #include <sys/socket.h>
   1285 #include <netdb.h>
   1286         ]],[[
   1287           unsigned int dummy= NI_NUMERICHOST | NI_NUMERICSERV | NI_WITHSCOPEID;
   1288         ]])
   1289       ],[
   1290         curl_cv_working_ni_withscopeid="yes"
   1291       ],[
   1292         curl_cv_working_ni_withscopeid="no"
   1293       ]) # AC-COMPILE-IFELSE
   1294     ]) # AC-RUN-IFELSE
   1295   ]) # AC-CACHE-CHECK
   1296   case "$curl_cv_working_ni_withscopeid" in
   1297     yes)
   1298       AC_DEFINE(HAVE_NI_WITHSCOPEID, 1,
   1299         [Define to 1 if NI_WITHSCOPEID exists and works.])
   1300       ;;
   1301   esac
   1302 ])
   1303 
   1304 
   1305 dnl CURL_CHECK_FUNC_RECV
   1306 dnl -------------------------------------------------
   1307 dnl Test if the socket recv() function is available,
   1308 dnl and check its return type and the types of its
   1309 dnl arguments. If the function succeeds HAVE_RECV
   1310 dnl will be defined, defining the types of the arguments
   1311 dnl in RECV_TYPE_ARG1, RECV_TYPE_ARG2, RECV_TYPE_ARG3
   1312 dnl and RECV_TYPE_ARG4, defining the type of the function
   1313 dnl return value in RECV_TYPE_RETV.
   1314 
   1315 AC_DEFUN([CURL_CHECK_FUNC_RECV], [
   1316   AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl
   1317   AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
   1318   AC_CHECK_HEADERS(sys/types.h sys/socket.h)
   1319   #
   1320   AC_MSG_CHECKING([for recv])
   1321   AC_LINK_IFELSE([
   1322     AC_LANG_PROGRAM([[
   1323 #undef inline
   1324 #ifdef HAVE_WINDOWS_H
   1325 #ifndef WIN32_LEAN_AND_MEAN
   1326 #define WIN32_LEAN_AND_MEAN
   1327 #endif
   1328 #include <windows.h>
   1329 #ifdef HAVE_WINSOCK2_H
   1330 #include <winsock2.h>
   1331 #else
   1332 #ifdef HAVE_WINSOCK_H
   1333 #include <winsock.h>
   1334 #endif
   1335 #endif
   1336 #else
   1337 #ifdef HAVE_SYS_TYPES_H
   1338 #include <sys/types.h>
   1339 #endif
   1340 #ifdef HAVE_SYS_SOCKET_H
   1341 #include <sys/socket.h>
   1342 #endif
   1343 #endif
   1344     ]],[[
   1345       recv(0, 0, 0, 0);
   1346     ]])
   1347   ],[
   1348     AC_MSG_RESULT([yes])
   1349     curl_cv_recv="yes"
   1350   ],[
   1351     AC_MSG_RESULT([no])
   1352     curl_cv_recv="no"
   1353   ])
   1354   #
   1355   if test "$curl_cv_recv" = "yes"; then
   1356     AC_CACHE_CHECK([types of args and return type for recv],
   1357       [curl_cv_func_recv_args], [
   1358       curl_cv_func_recv_args="unknown"
   1359       for recv_retv in 'int' 'ssize_t'; do
   1360         for recv_arg1 in 'int' 'ssize_t' 'SOCKET'; do
   1361           for recv_arg2 in 'char *' 'void *'; do
   1362             for recv_arg3 in 'size_t' 'int' 'socklen_t' 'unsigned int'; do
   1363               for recv_arg4 in 'int' 'unsigned int'; do
   1364                 if test "$curl_cv_func_recv_args" = "unknown"; then
   1365                   AC_COMPILE_IFELSE([
   1366                     AC_LANG_PROGRAM([[
   1367 #undef inline
   1368 #ifdef HAVE_WINDOWS_H
   1369 #ifndef WIN32_LEAN_AND_MEAN
   1370 #define WIN32_LEAN_AND_MEAN
   1371 #endif
   1372 #include <windows.h>
   1373 #ifdef HAVE_WINSOCK2_H
   1374 #include <winsock2.h>
   1375 #else
   1376 #ifdef HAVE_WINSOCK_H
   1377 #include <winsock.h>
   1378 #endif
   1379 #endif
   1380 #define RECVCALLCONV PASCAL
   1381 #else
   1382 #ifdef HAVE_SYS_TYPES_H
   1383 #include <sys/types.h>
   1384 #endif
   1385 #ifdef HAVE_SYS_SOCKET_H
   1386 #include <sys/socket.h>
   1387 #endif
   1388 #define RECVCALLCONV
   1389 #endif
   1390                       extern $recv_retv RECVCALLCONV
   1391                       recv($recv_arg1, $recv_arg2, $recv_arg3, $recv_arg4);
   1392                     ]],[[
   1393                       $recv_arg1 s=0;
   1394                       $recv_arg2 buf=0;
   1395                       $recv_arg3 len=0;
   1396                       $recv_arg4 flags=0;
   1397                       $recv_retv res = recv(s, buf, len, flags);
   1398                     ]])
   1399                   ],[
   1400                     curl_cv_func_recv_args="$recv_arg1,$recv_arg2,$recv_arg3,$recv_arg4,$recv_retv"
   1401                   ])
   1402                 fi
   1403               done
   1404             done
   1405           done
   1406         done
   1407       done
   1408     ]) # AC-CACHE-CHECK
   1409     if test "$curl_cv_func_recv_args" = "unknown"; then
   1410       AC_MSG_ERROR([Cannot find proper types to use for recv args])
   1411     else
   1412       recv_prev_IFS=$IFS; IFS=','
   1413       set dummy `echo "$curl_cv_func_recv_args" | sed 's/\*/\*/g'`
   1414       IFS=$recv_prev_IFS
   1415       shift
   1416       #
   1417       AC_DEFINE_UNQUOTED(RECV_TYPE_ARG1, $[1],
   1418         [Define to the type of arg 1 for recv.])
   1419       AC_DEFINE_UNQUOTED(RECV_TYPE_ARG2, $[2],
   1420         [Define to the type of arg 2 for recv.])
   1421       AC_DEFINE_UNQUOTED(RECV_TYPE_ARG3, $[3],
   1422         [Define to the type of arg 3 for recv.])
   1423       AC_DEFINE_UNQUOTED(RECV_TYPE_ARG4, $[4],
   1424         [Define to the type of arg 4 for recv.])
   1425       AC_DEFINE_UNQUOTED(RECV_TYPE_RETV, $[5],
   1426         [Define to the function return type for recv.])
   1427       #
   1428       AC_DEFINE_UNQUOTED(HAVE_RECV, 1,
   1429         [Define to 1 if you have the recv function.])
   1430       curl_cv_func_recv="yes"
   1431     fi
   1432   else
   1433     AC_MSG_ERROR([Unable to link function recv])
   1434   fi
   1435 ])
   1436 
   1437 
   1438 dnl CURL_CHECK_FUNC_SEND
   1439 dnl -------------------------------------------------
   1440 dnl Test if the socket send() function is available,
   1441 dnl and check its return type and the types of its
   1442 dnl arguments. If the function succeeds HAVE_SEND
   1443 dnl will be defined, defining the types of the arguments
   1444 dnl in SEND_TYPE_ARG1, SEND_TYPE_ARG2, SEND_TYPE_ARG3
   1445 dnl and SEND_TYPE_ARG4, defining the type of the function
   1446 dnl return value in SEND_TYPE_RETV, and also defining the
   1447 dnl type qualifier of second argument in SEND_QUAL_ARG2.
   1448 
   1449 AC_DEFUN([CURL_CHECK_FUNC_SEND], [
   1450   AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl
   1451   AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
   1452   AC_CHECK_HEADERS(sys/types.h sys/socket.h)
   1453   #
   1454   AC_MSG_CHECKING([for send])
   1455   AC_LINK_IFELSE([
   1456     AC_LANG_PROGRAM([[
   1457 #undef inline
   1458 #ifdef HAVE_WINDOWS_H
   1459 #ifndef WIN32_LEAN_AND_MEAN
   1460 #define WIN32_LEAN_AND_MEAN
   1461 #endif
   1462 #include <windows.h>
   1463 #ifdef HAVE_WINSOCK2_H
   1464 #include <winsock2.h>
   1465 #else
   1466 #ifdef HAVE_WINSOCK_H
   1467 #include <winsock.h>
   1468 #endif
   1469 #endif
   1470 #else
   1471 #ifdef HAVE_SYS_TYPES_H
   1472 #include <sys/types.h>
   1473 #endif
   1474 #ifdef HAVE_SYS_SOCKET_H
   1475 #include <sys/socket.h>
   1476 #endif
   1477 #endif
   1478     ]],[[
   1479       send(0, 0, 0, 0);
   1480     ]])
   1481   ],[
   1482     AC_MSG_RESULT([yes])
   1483     curl_cv_send="yes"
   1484   ],[
   1485     AC_MSG_RESULT([no])
   1486     curl_cv_send="no"
   1487   ])
   1488   #
   1489   if test "$curl_cv_send" = "yes"; then
   1490     AC_CACHE_CHECK([types of args and return type for send],
   1491       [curl_cv_func_send_args], [
   1492       curl_cv_func_send_args="unknown"
   1493       for send_retv in 'int' 'ssize_t'; do
   1494         for send_arg1 in 'int' 'ssize_t' 'SOCKET'; do
   1495           for send_arg2 in 'char *' 'void *' 'const char *' 'const void *'; do
   1496             for send_arg3 in 'size_t' 'int' 'socklen_t' 'unsigned int'; do
   1497               for send_arg4 in 'int' 'unsigned int'; do
   1498                 if test "$curl_cv_func_send_args" = "unknown"; then
   1499                   AC_COMPILE_IFELSE([
   1500                     AC_LANG_PROGRAM([[
   1501 #undef inline
   1502 #ifdef HAVE_WINDOWS_H
   1503 #ifndef WIN32_LEAN_AND_MEAN
   1504 #define WIN32_LEAN_AND_MEAN
   1505 #endif
   1506 #include <windows.h>
   1507 #ifdef HAVE_WINSOCK2_H
   1508 #include <winsock2.h>
   1509 #else
   1510 #ifdef HAVE_WINSOCK_H
   1511 #include <winsock.h>
   1512 #endif
   1513 #endif
   1514 #define SENDCALLCONV PASCAL
   1515 #else
   1516 #ifdef HAVE_SYS_TYPES_H
   1517 #include <sys/types.h>
   1518 #endif
   1519 #ifdef HAVE_SYS_SOCKET_H
   1520 #include <sys/socket.h>
   1521 #endif
   1522 #define SENDCALLCONV
   1523 #endif
   1524                       extern $send_retv SENDCALLCONV
   1525                       send($send_arg1, $send_arg2, $send_arg3, $send_arg4);
   1526                     ]],[[
   1527                       $send_arg1 s=0;
   1528                       $send_arg3 len=0;
   1529                       $send_arg4 flags=0;
   1530                       $send_retv res = send(s, 0, len, flags);
   1531                     ]])
   1532                   ],[
   1533                     curl_cv_func_send_args="$send_arg1,$send_arg2,$send_arg3,$send_arg4,$send_retv"
   1534                   ])
   1535                 fi
   1536               done
   1537             done
   1538           done
   1539         done
   1540       done
   1541     ]) # AC-CACHE-CHECK
   1542     if test "$curl_cv_func_send_args" = "unknown"; then
   1543       AC_MSG_ERROR([Cannot find proper types to use for send args])
   1544     else
   1545       send_prev_IFS=$IFS; IFS=','
   1546       set dummy `echo "$curl_cv_func_send_args" | sed 's/\*/\*/g'`
   1547       IFS=$send_prev_IFS
   1548       shift
   1549       #
   1550       send_qual_type_arg2=$[2]
   1551       #
   1552       AC_DEFINE_UNQUOTED(SEND_TYPE_ARG1, $[1],
   1553         [Define to the type of arg 1 for send.])
   1554       AC_DEFINE_UNQUOTED(SEND_TYPE_ARG3, $[3],
   1555         [Define to the type of arg 3 for send.])
   1556       AC_DEFINE_UNQUOTED(SEND_TYPE_ARG4, $[4],
   1557         [Define to the type of arg 4 for send.])
   1558       AC_DEFINE_UNQUOTED(SEND_TYPE_RETV, $[5],
   1559         [Define to the function return type for send.])
   1560       #
   1561       prev_sh_opts=$-
   1562       #
   1563       case $prev_sh_opts in
   1564         *f*)
   1565           ;;
   1566         *)
   1567           set -f
   1568           ;;
   1569       esac
   1570       #
   1571       case "$send_qual_type_arg2" in
   1572         const*)
   1573           send_qual_arg2=const
   1574           send_type_arg2=`echo $send_qual_type_arg2 | sed 's/^const //'`
   1575         ;;
   1576         *)
   1577           send_qual_arg2=
   1578           send_type_arg2=$send_qual_type_arg2
   1579         ;;
   1580       esac
   1581       #
   1582       AC_DEFINE_UNQUOTED(SEND_QUAL_ARG2, $send_qual_arg2,
   1583         [Define to the type qualifier of arg 2 for send.])
   1584       AC_DEFINE_UNQUOTED(SEND_TYPE_ARG2, $send_type_arg2,
   1585         [Define to the type of arg 2 for send.])
   1586       #
   1587       case $prev_sh_opts in
   1588         *f*)
   1589           ;;
   1590         *)
   1591           set +f
   1592           ;;
   1593       esac
   1594       #
   1595       AC_DEFINE_UNQUOTED(HAVE_SEND, 1,
   1596         [Define to 1 if you have the send function.])
   1597       curl_cv_func_send="yes"
   1598     fi
   1599   else
   1600     AC_MSG_ERROR([Unable to link function send])
   1601   fi
   1602 ])
   1603 
   1604 dnl CURL_CHECK_MSG_NOSIGNAL
   1605 dnl -------------------------------------------------
   1606 dnl Check for MSG_NOSIGNAL
   1607 
   1608 AC_DEFUN([CURL_CHECK_MSG_NOSIGNAL], [
   1609   AC_CHECK_HEADERS(sys/types.h sys/socket.h)
   1610   AC_CACHE_CHECK([for MSG_NOSIGNAL], [curl_cv_msg_nosignal], [
   1611     AC_COMPILE_IFELSE([
   1612       AC_LANG_PROGRAM([[
   1613 #undef inline
   1614 #ifdef HAVE_WINDOWS_H
   1615 #ifndef WIN32_LEAN_AND_MEAN
   1616 #define WIN32_LEAN_AND_MEAN
   1617 #endif
   1618 #include <windows.h>
   1619 #ifdef HAVE_WINSOCK2_H
   1620 #include <winsock2.h>
   1621 #else
   1622 #ifdef HAVE_WINSOCK_H
   1623 #include <winsock.h>
   1624 #endif
   1625 #endif
   1626 #else
   1627 #ifdef HAVE_SYS_TYPES_H
   1628 #include <sys/types.h>
   1629 #endif
   1630 #ifdef HAVE_SYS_SOCKET_H
   1631 #include <sys/socket.h>
   1632 #endif
   1633 #endif
   1634       ]],[[
   1635         int flag=MSG_NOSIGNAL;
   1636       ]])
   1637     ],[
   1638       curl_cv_msg_nosignal="yes"
   1639     ],[
   1640       curl_cv_msg_nosignal="no"
   1641     ])
   1642   ])
   1643   case "$curl_cv_msg_nosignal" in
   1644     yes)
   1645       AC_DEFINE_UNQUOTED(HAVE_MSG_NOSIGNAL, 1,
   1646         [Define to 1 if you have the MSG_NOSIGNAL flag.])
   1647       ;;
   1648   esac
   1649 ])
   1650 
   1651 
   1652 dnl CURL_CHECK_STRUCT_TIMEVAL
   1653 dnl -------------------------------------------------
   1654 dnl Check for timeval struct
   1655 
   1656 AC_DEFUN([CURL_CHECK_STRUCT_TIMEVAL], [
   1657   AC_REQUIRE([AC_HEADER_TIME])dnl
   1658   AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl
   1659   AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
   1660   AC_CHECK_HEADERS(sys/types.h sys/time.h time.h sys/socket.h)
   1661   AC_CACHE_CHECK([for struct timeval], [curl_cv_struct_timeval], [
   1662     AC_COMPILE_IFELSE([
   1663       AC_LANG_PROGRAM([[
   1664 #undef inline
   1665 #ifdef HAVE_WINDOWS_H
   1666 #ifndef WIN32_LEAN_AND_MEAN
   1667 #define WIN32_LEAN_AND_MEAN
   1668 #endif
   1669 #include <windows.h>
   1670 #ifdef HAVE_WINSOCK2_H
   1671 #include <winsock2.h>
   1672 #else
   1673 #ifdef HAVE_WINSOCK_H
   1674 #include <winsock.h>
   1675 #endif
   1676 #endif
   1677 #endif
   1678 #ifdef HAVE_SYS_TYPES_H
   1679 #include <sys/types.h>
   1680 #endif
   1681 #ifdef HAVE_SYS_TIME_H
   1682 #include <sys/time.h>
   1683 #ifdef TIME_WITH_SYS_TIME
   1684 #include <time.h>
   1685 #endif
   1686 #else
   1687 #ifdef HAVE_TIME_H
   1688 #include <time.h>
   1689 #endif
   1690 #endif
   1691 #ifdef HAVE_SYS_SOCKET_H
   1692 #include <sys/socket.h>
   1693 #endif
   1694       ]],[[
   1695         struct timeval ts;
   1696         ts.tv_sec  = 0;
   1697         ts.tv_usec = 0;
   1698       ]])
   1699     ],[
   1700       curl_cv_struct_timeval="yes"
   1701     ],[
   1702       curl_cv_struct_timeval="no"
   1703     ])
   1704   ])
   1705   case "$curl_cv_struct_timeval" in
   1706     yes)
   1707       AC_DEFINE_UNQUOTED(HAVE_STRUCT_TIMEVAL, 1,
   1708         [Define to 1 if you have the timeval struct.])
   1709       ;;
   1710   esac
   1711 ])
   1712 
   1713 
   1714 dnl TYPE_SIG_ATOMIC_T
   1715 dnl -------------------------------------------------
   1716 dnl Check if the sig_atomic_t type is available, and
   1717 dnl verify if it is already defined as volatile.
   1718 
   1719 AC_DEFUN([TYPE_SIG_ATOMIC_T], [
   1720   AC_CHECK_HEADERS(signal.h)
   1721   AC_CHECK_TYPE([sig_atomic_t],[
   1722     AC_DEFINE(HAVE_SIG_ATOMIC_T, 1,
   1723       [Define to 1 if sig_atomic_t is an available typedef.])
   1724   ], ,[
   1725 #ifdef HAVE_SIGNAL_H
   1726 #include <signal.h>
   1727 #endif
   1728   ])
   1729   case "$ac_cv_type_sig_atomic_t" in
   1730     yes)
   1731       #
   1732       AC_MSG_CHECKING([if sig_atomic_t is already defined as volatile])
   1733       AC_LINK_IFELSE([
   1734         AC_LANG_PROGRAM([[
   1735 #ifdef HAVE_SIGNAL_H
   1736 #include <signal.h>
   1737 #endif
   1738         ]],[[
   1739           static volatile sig_atomic_t dummy = 0;
   1740         ]])
   1741       ],[
   1742         AC_MSG_RESULT([no])
   1743         curl_cv_sig_atomic_t_volatile="no"
   1744       ],[
   1745         AC_MSG_RESULT([yes])
   1746         curl_cv_sig_atomic_t_volatile="yes"
   1747       ])
   1748       #
   1749       if test "$curl_cv_sig_atomic_t_volatile" = "yes"; then
   1750         AC_DEFINE(HAVE_SIG_ATOMIC_T_VOLATILE, 1,
   1751           [Define to 1 if sig_atomic_t is already defined as volatile.])
   1752       fi
   1753       ;;
   1754   esac
   1755 ])
   1756 
   1757 
   1758 dnl TYPE_IN_ADDR_T
   1759 dnl -------------------------------------------------
   1760 dnl Check for in_addr_t: it is used to receive the return code of inet_addr()
   1761 dnl and a few other things.
   1762 
   1763 AC_DEFUN([TYPE_IN_ADDR_T], [
   1764   AC_CHECK_TYPE([in_addr_t], ,[
   1765     dnl in_addr_t not available
   1766     AC_CACHE_CHECK([for in_addr_t equivalent],
   1767       [curl_cv_in_addr_t_equiv], [
   1768       curl_cv_in_addr_t_equiv="unknown"
   1769       for t in "unsigned long" int size_t unsigned long; do
   1770         if test "$curl_cv_in_addr_t_equiv" = "unknown"; then
   1771           AC_LINK_IFELSE([
   1772             AC_LANG_PROGRAM([[
   1773 #undef inline
   1774 #ifdef HAVE_WINDOWS_H
   1775 #ifndef WIN32_LEAN_AND_MEAN
   1776 #define WIN32_LEAN_AND_MEAN
   1777 #endif
   1778 #include <windows.h>
   1779 #ifdef HAVE_WINSOCK2_H
   1780 #include <winsock2.h>
   1781 #else
   1782 #ifdef HAVE_WINSOCK_H
   1783 #include <winsock.h>
   1784 #endif
   1785 #endif
   1786 #else
   1787 #ifdef HAVE_SYS_TYPES_H
   1788 #include <sys/types.h>
   1789 #endif
   1790 #ifdef HAVE_SYS_SOCKET_H
   1791 #include <sys/socket.h>
   1792 #endif
   1793 #ifdef HAVE_NETINET_IN_H
   1794 #include <netinet/in.h>
   1795 #endif
   1796 #ifdef HAVE_ARPA_INET_H
   1797 #include <arpa/inet.h>
   1798 #endif
   1799 #endif
   1800             ]],[[
   1801               $t data = inet_addr ("1.2.3.4");
   1802             ]])
   1803           ],[
   1804             curl_cv_in_addr_t_equiv="$t"
   1805           ])
   1806         fi
   1807       done
   1808     ])
   1809     case "$curl_cv_in_addr_t_equiv" in
   1810       unknown)
   1811         AC_MSG_ERROR([Cannot find a type to use in place of in_addr_t])
   1812         ;;
   1813       *)
   1814         AC_DEFINE_UNQUOTED(in_addr_t, $curl_cv_in_addr_t_equiv,
   1815           [Type to use in place of in_addr_t when system does not provide it.])
   1816         ;;
   1817     esac
   1818   ],[
   1819 #undef inline
   1820 #ifdef HAVE_WINDOWS_H
   1821 #ifndef WIN32_LEAN_AND_MEAN
   1822 #define WIN32_LEAN_AND_MEAN
   1823 #endif
   1824 #include <windows.h>
   1825 #ifdef HAVE_WINSOCK2_H
   1826 #include <winsock2.h>
   1827 #else
   1828 #ifdef HAVE_WINSOCK_H
   1829 #include <winsock.h>
   1830 #endif
   1831 #endif
   1832 #else
   1833 #ifdef HAVE_SYS_TYPES_H
   1834 #include <sys/types.h>
   1835 #endif
   1836 #ifdef HAVE_SYS_SOCKET_H
   1837 #include <sys/socket.h>
   1838 #endif
   1839 #ifdef HAVE_NETINET_IN_H
   1840 #include <netinet/in.h>
   1841 #endif
   1842 #ifdef HAVE_ARPA_INET_H
   1843 #include <arpa/inet.h>
   1844 #endif
   1845 #endif
   1846   ])
   1847 ])
   1848 
   1849 
   1850 dnl CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC
   1851 dnl -------------------------------------------------
   1852 dnl Check if monotonic clock_gettime is available.
   1853 
   1854 AC_DEFUN([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC], [
   1855   AC_REQUIRE([AC_HEADER_TIME])dnl
   1856   AC_CHECK_HEADERS(sys/types.h sys/time.h time.h)
   1857   AC_MSG_CHECKING([for monotonic clock_gettime])
   1858   #
   1859   if test "x$dontwant_rt" == "xno" ; then
   1860     AC_COMPILE_IFELSE([
   1861       AC_LANG_PROGRAM([[
   1862 #ifdef HAVE_SYS_TYPES_H
   1863 #include <sys/types.h>
   1864 #endif
   1865 #ifdef HAVE_SYS_TIME_H
   1866 #include <sys/time.h>
   1867 #ifdef TIME_WITH_SYS_TIME
   1868 #include <time.h>
   1869 #endif
   1870 #else
   1871 #ifdef HAVE_TIME_H
   1872 #include <time.h>
   1873 #endif
   1874 #endif
   1875       ]],[[
   1876         struct timespec ts;
   1877         (void)clock_gettime(CLOCK_MONOTONIC, &ts);
   1878       ]])
   1879     ],[
   1880       AC_MSG_RESULT([yes])
   1881       curl_func_clock_gettime="yes"
   1882     ],[
   1883       AC_MSG_RESULT([no])
   1884       curl_func_clock_gettime="no"
   1885     ])
   1886   fi
   1887   dnl Definition of HAVE_CLOCK_GETTIME_MONOTONIC is intentionally postponed
   1888   dnl until library linking and run-time checks for clock_gettime succeed.
   1889 ])
   1890 
   1891 
   1892 dnl CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC
   1893 dnl -------------------------------------------------
   1894 dnl If monotonic clock_gettime is available then,
   1895 dnl check and prepended to LIBS any needed libraries.
   1896 
   1897 AC_DEFUN([CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC], [
   1898   AC_REQUIRE([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC])dnl
   1899   #
   1900   if test "$curl_func_clock_gettime" = "yes"; then
   1901     #
   1902     AC_MSG_CHECKING([for clock_gettime in libraries])
   1903     #
   1904     curl_cv_save_LIBS="$LIBS"
   1905     curl_cv_gclk_LIBS="unknown"
   1906     #
   1907     for x_xlibs in '' '-lrt' '-lposix4' ; do
   1908       if test "$curl_cv_gclk_LIBS" = "unknown"; then
   1909         if test -z "$x_xlibs"; then
   1910           LIBS="$curl_cv_save_LIBS"
   1911         else
   1912           LIBS="$x_xlibs $curl_cv_save_LIBS"
   1913         fi
   1914         AC_LINK_IFELSE([
   1915           AC_LANG_PROGRAM([[
   1916 #ifdef HAVE_SYS_TYPES_H
   1917 #include <sys/types.h>
   1918 #endif
   1919 #ifdef HAVE_SYS_TIME_H
   1920 #include <sys/time.h>
   1921 #ifdef TIME_WITH_SYS_TIME
   1922 #include <time.h>
   1923 #endif
   1924 #else
   1925 #ifdef HAVE_TIME_H
   1926 #include <time.h>
   1927 #endif
   1928 #endif
   1929           ]],[[
   1930             struct timespec ts;
   1931             (void)clock_gettime(CLOCK_MONOTONIC, &ts);
   1932           ]])
   1933         ],[
   1934           curl_cv_gclk_LIBS="$x_xlibs"
   1935         ])
   1936       fi
   1937     done
   1938     #
   1939     LIBS="$curl_cv_save_LIBS"
   1940     #
   1941     case X-"$curl_cv_gclk_LIBS" in
   1942       X-unknown)
   1943         AC_MSG_RESULT([cannot find clock_gettime])
   1944         AC_MSG_WARN([HAVE_CLOCK_GETTIME_MONOTONIC will not be defined])
   1945         curl_func_clock_gettime="no"
   1946         ;;
   1947       X-)
   1948         AC_MSG_RESULT([no additional lib required])
   1949         curl_func_clock_gettime="yes"
   1950         ;;
   1951       *)
   1952         if test -z "$curl_cv_save_LIBS"; then
   1953           LIBS="$curl_cv_gclk_LIBS"
   1954         else
   1955           LIBS="$curl_cv_gclk_LIBS $curl_cv_save_LIBS"
   1956         fi
   1957         AC_MSG_RESULT([$curl_cv_gclk_LIBS])
   1958         curl_func_clock_gettime="yes"
   1959         ;;
   1960     esac
   1961     #
   1962     dnl only do runtime verification when not cross-compiling
   1963     if test "x$cross_compiling" != "xyes" &&
   1964       test "$curl_func_clock_gettime" = "yes"; then
   1965       AC_MSG_CHECKING([if monotonic clock_gettime works])
   1966       AC_RUN_IFELSE([
   1967         AC_LANG_PROGRAM([[
   1968 #ifdef HAVE_STDLIB_H
   1969 #include <stdlib.h>
   1970 #endif
   1971 #ifdef HAVE_SYS_TYPES_H
   1972 #include <sys/types.h>
   1973 #endif
   1974 #ifdef HAVE_SYS_TIME_H
   1975 #include <sys/time.h>
   1976 #ifdef TIME_WITH_SYS_TIME
   1977 #include <time.h>
   1978 #endif
   1979 #else
   1980 #ifdef HAVE_TIME_H
   1981 #include <time.h>
   1982 #endif
   1983 #endif
   1984         ]],[[
   1985           struct timespec ts;
   1986           if (0 == clock_gettime(CLOCK_MONOTONIC, &ts))
   1987             exit(0);
   1988           else
   1989             exit(1);
   1990         ]])
   1991       ],[
   1992         AC_MSG_RESULT([yes])
   1993       ],[
   1994         AC_MSG_RESULT([no])
   1995         AC_MSG_WARN([HAVE_CLOCK_GETTIME_MONOTONIC will not be defined])
   1996         curl_func_clock_gettime="no"
   1997         LIBS="$curl_cv_save_LIBS"
   1998       ])
   1999     fi
   2000     #
   2001     case "$curl_func_clock_gettime" in
   2002       yes)
   2003         AC_DEFINE_UNQUOTED(HAVE_CLOCK_GETTIME_MONOTONIC, 1,
   2004           [Define to 1 if you have the clock_gettime function and monotonic timer.])
   2005         ;;
   2006     esac
   2007     #
   2008   fi
   2009   #
   2010 ])
   2011 
   2012 
   2013 dnl CURL_CHECK_LIBS_CONNECT
   2014 dnl -------------------------------------------------
   2015 dnl Verify if network connect function is already available
   2016 dnl using current libraries or if another one is required.
   2017 
   2018 AC_DEFUN([CURL_CHECK_LIBS_CONNECT], [
   2019   AC_REQUIRE([CURL_INCLUDES_WINSOCK2])dnl
   2020   AC_MSG_CHECKING([for connect in libraries])
   2021   tst_connect_save_LIBS="$LIBS"
   2022   tst_connect_need_LIBS="unknown"
   2023   for tst_lib in '' '-lsocket' ; do
   2024     if test "$tst_connect_need_LIBS" = "unknown"; then
   2025       LIBS="$tst_lib $tst_connect_save_LIBS"
   2026       AC_LINK_IFELSE([
   2027         AC_LANG_PROGRAM([[
   2028           $curl_includes_winsock2
   2029           #ifndef HAVE_WINDOWS_H
   2030             int connect(int, void*, int);
   2031           #endif
   2032         ]],[[
   2033           if(0 != connect(0, 0, 0))
   2034             return 1;
   2035         ]])
   2036       ],[
   2037         tst_connect_need_LIBS="$tst_lib"
   2038       ])
   2039     fi
   2040   done
   2041   LIBS="$tst_connect_save_LIBS"
   2042   #
   2043   case X-"$tst_connect_need_LIBS" in
   2044     X-unknown)
   2045       AC_MSG_RESULT([cannot find connect])
   2046       AC_MSG_ERROR([cannot find connect function in libraries.])
   2047       ;;
   2048     X-)
   2049       AC_MSG_RESULT([yes])
   2050       ;;
   2051     *)
   2052       AC_MSG_RESULT([$tst_connect_need_LIBS])
   2053       LIBS="$tst_connect_need_LIBS $tst_connect_save_LIBS"
   2054       ;;
   2055   esac
   2056 ])
   2057 
   2058 
   2059 dnl CURL_DEFINE_UNQUOTED (VARIABLE, [VALUE])
   2060 dnl -------------------------------------------------
   2061 dnl Like AC_DEFINE_UNQUOTED this macro will define a C preprocessor
   2062 dnl symbol that can be further used in custom template configuration
   2063 dnl files. This macro, unlike AC_DEFINE_UNQUOTED, does not use a third
   2064 dnl argument for the description. Symbol definitions done with this
   2065 dnl macro are intended to be exclusively used in handcrafted *.h.in
   2066 dnl template files. Contrary to what AC_DEFINE_UNQUOTED does, this one
   2067 dnl prevents autoheader generation and insertion of symbol template
   2068 dnl stub and definition into the first configuration header file. Do
   2069 dnl not use this macro as a replacement for AC_DEFINE_UNQUOTED, each
   2070 dnl one serves different functional needs.
   2071 
   2072 AC_DEFUN([CURL_DEFINE_UNQUOTED], [
   2073 cat >>confdefs.h <<_EOF
   2074 [@%:@define] $1 ifelse($#, 2, [$2], 1)
   2075 _EOF
   2076 ])
   2077 
   2078 
   2079 dnl CURL_CONFIGURE_LONG
   2080 dnl -------------------------------------------------
   2081 dnl Find out the size of long as reported by sizeof() and define
   2082 dnl CURL_SIZEOF_LONG as appropriate to be used in template file
   2083 dnl include/curl/curlbuild.h.in to properly configure the library.
   2084 dnl The size of long is a build time characteristic and as such
   2085 dnl must be recorded in curlbuild.h
   2086 
   2087 AC_DEFUN([CURL_CONFIGURE_LONG], [
   2088   if test -z "$ac_cv_sizeof_long" ||
   2089     test "$ac_cv_sizeof_long" -eq "0"; then
   2090     AC_MSG_ERROR([cannot find out size of long.])
   2091   fi
   2092   CURL_DEFINE_UNQUOTED([CURL_SIZEOF_LONG], [$ac_cv_sizeof_long])
   2093 ])
   2094 
   2095 
   2096 dnl CURL_CONFIGURE_CURL_SOCKLEN_T
   2097 dnl -------------------------------------------------
   2098 dnl Find out suitable curl_socklen_t data type definition and size, making
   2099 dnl appropriate definitions for template file include/curl/curlbuild.h.in
   2100 dnl to properly configure and use the library.
   2101 dnl
   2102 dnl The need for the curl_socklen_t definition arises mainly to properly
   2103 dnl interface HP-UX systems which on one hand have a typedef'ed socklen_t
   2104 dnl data type which is 32 or 64-Bit wide depending on the data model being
   2105 dnl used, and that on the other hand is only actually used when interfacing
   2106 dnl the X/Open sockets provided in the xnet library.
   2107 
   2108 AC_DEFUN([CURL_CONFIGURE_CURL_SOCKLEN_T], [
   2109   AC_REQUIRE([CURL_INCLUDES_WS2TCPIP])dnl
   2110   AC_REQUIRE([CURL_INCLUDES_SYS_SOCKET])dnl
   2111   AC_REQUIRE([CURL_PREPROCESS_CALLCONV])dnl
   2112   #
   2113   AC_BEFORE([$0], [CURL_CONFIGURE_PULL_SYS_POLL])dnl
   2114   #
   2115   AC_MSG_CHECKING([for curl_socklen_t data type])
   2116   curl_typeof_curl_socklen_t="unknown"
   2117   for arg1 in int SOCKET; do
   2118     for arg2 in 'struct sockaddr' void; do
   2119       for t in socklen_t int size_t 'unsigned int' long 'unsigned long' void; do
   2120         if test "$curl_typeof_curl_socklen_t" = "unknown"; then
   2121           AC_COMPILE_IFELSE([
   2122             AC_LANG_PROGRAM([[
   2123               $curl_includes_ws2tcpip
   2124               $curl_includes_sys_socket
   2125               $curl_preprocess_callconv
   2126               extern int FUNCALLCONV getpeername($arg1, $arg2 *, $t *);
   2127             ]],[[
   2128               $t *lenptr = 0;
   2129               if(0 != getpeername(0, 0, lenptr))
   2130                 return 1;
   2131             ]])
   2132           ],[
   2133             curl_typeof_curl_socklen_t="$t"
   2134           ])
   2135         fi
   2136       done
   2137     done
   2138   done
   2139   for t in socklen_t int; do
   2140     if test "$curl_typeof_curl_socklen_t" = "void"; then
   2141       AC_COMPILE_IFELSE([
   2142         AC_LANG_PROGRAM([[
   2143           $curl_includes_sys_socket
   2144           typedef $t curl_socklen_t;
   2145         ]],[[
   2146           curl_socklen_t dummy;
   2147         ]])
   2148       ],[
   2149         curl_typeof_curl_socklen_t="$t"
   2150       ])
   2151     fi
   2152   done
   2153   AC_MSG_RESULT([$curl_typeof_curl_socklen_t])
   2154   if test "$curl_typeof_curl_socklen_t" = "void" ||
   2155     test "$curl_typeof_curl_socklen_t" = "unknown"; then
   2156     AC_MSG_ERROR([cannot find data type for curl_socklen_t.])
   2157   fi
   2158   #
   2159   AC_MSG_CHECKING([size of curl_socklen_t])
   2160   curl_sizeof_curl_socklen_t="unknown"
   2161   curl_pull_headers_socklen_t="unknown"
   2162   if test "$curl_cv_header_ws2tcpip_h" = "yes"; then
   2163     tst_pull_header_checks='none ws2tcpip'
   2164     tst_size_checks='4'
   2165   else
   2166     tst_pull_header_checks='none systypes syssocket'
   2167     tst_size_checks='4 8 2'
   2168   fi
   2169   for tst_size in $tst_size_checks; do
   2170     for tst_pull_headers in $tst_pull_header_checks; do
   2171       if test "$curl_sizeof_curl_socklen_t" = "unknown"; then
   2172         case $tst_pull_headers in
   2173           ws2tcpip)
   2174             tmp_includes="$curl_includes_ws2tcpip"
   2175             ;;
   2176           systypes)
   2177             tmp_includes="$curl_includes_sys_types"
   2178             ;;
   2179           syssocket)
   2180             tmp_includes="$curl_includes_sys_socket"
   2181             ;;
   2182           *)
   2183             tmp_includes=""
   2184             ;;
   2185         esac
   2186         AC_COMPILE_IFELSE([
   2187           AC_LANG_PROGRAM([[
   2188             $tmp_includes
   2189             typedef $curl_typeof_curl_socklen_t curl_socklen_t;
   2190             typedef char dummy_arr[sizeof(curl_socklen_t) == $tst_size ? 1 : -1];
   2191           ]],[[
   2192             curl_socklen_t dummy;
   2193           ]])
   2194         ],[
   2195           curl_sizeof_curl_socklen_t="$tst_size"
   2196           curl_pull_headers_socklen_t="$tst_pull_headers"
   2197         ])
   2198       fi
   2199     done
   2200   done
   2201   AC_MSG_RESULT([$curl_sizeof_curl_socklen_t])
   2202   if test "$curl_sizeof_curl_socklen_t" = "unknown"; then
   2203     AC_MSG_ERROR([cannot find out size of curl_socklen_t.])
   2204   fi
   2205   #
   2206   case $curl_pull_headers_socklen_t in
   2207     ws2tcpip)
   2208       CURL_DEFINE_UNQUOTED([CURL_PULL_WS2TCPIP_H])
   2209       ;;
   2210     systypes)
   2211       CURL_DEFINE_UNQUOTED([CURL_PULL_SYS_TYPES_H])
   2212       ;;
   2213     syssocket)
   2214       CURL_DEFINE_UNQUOTED([CURL_PULL_SYS_TYPES_H])
   2215       CURL_DEFINE_UNQUOTED([CURL_PULL_SYS_SOCKET_H])
   2216       ;;
   2217   esac
   2218   CURL_DEFINE_UNQUOTED([CURL_TYPEOF_CURL_SOCKLEN_T], [$curl_typeof_curl_socklen_t])
   2219   CURL_DEFINE_UNQUOTED([CURL_SIZEOF_CURL_SOCKLEN_T], [$curl_sizeof_curl_socklen_t])
   2220 ])
   2221 
   2222 
   2223 dnl CURL_CONFIGURE_PULL_SYS_POLL
   2224 dnl -------------------------------------------------
   2225 dnl Find out if system header file sys/poll.h must be included by the
   2226 dnl external interface, making appropriate definitions for template file
   2227 dnl include/curl/curlbuild.h.in to properly configure and use the library.
   2228 dnl
   2229 dnl The need for the sys/poll.h inclusion arises mainly to properly
   2230 dnl interface AIX systems which define macros 'events' and 'revents'.
   2231 
   2232 AC_DEFUN([CURL_CONFIGURE_PULL_SYS_POLL], [
   2233   AC_REQUIRE([CURL_INCLUDES_POLL])dnl
   2234   #
   2235   tst_poll_events_macro_defined="unknown"
   2236   #
   2237   AC_COMPILE_IFELSE([
   2238     AC_LANG_PROGRAM([[
   2239       $curl_includes_poll
   2240     ]],[[
   2241 #if defined(events) || defined(revents)
   2242       return 0;
   2243 #else
   2244       force compilation error
   2245 #endif
   2246     ]])
   2247   ],[
   2248     tst_poll_events_macro_defined="yes"
   2249   ],[
   2250     tst_poll_events_macro_defined="no"
   2251   ])
   2252   #
   2253   if test "$tst_poll_events_macro_defined" = "yes"; then
   2254     if test "x$ac_cv_header_sys_poll_h" = "xyes"; then
   2255       CURL_DEFINE_UNQUOTED([CURL_PULL_SYS_POLL_H])
   2256     fi
   2257   fi
   2258   #
   2259 ])
   2260 
   2261 
   2262 dnl CURL_CHECK_FUNC_SELECT
   2263 dnl -------------------------------------------------
   2264 dnl Test if the socket select() function is available,
   2265 dnl and check its return type and the types of its
   2266 dnl arguments. If the function succeeds HAVE_SELECT
   2267 dnl will be defined, defining the types of the
   2268 dnl arguments in SELECT_TYPE_ARG1, SELECT_TYPE_ARG234
   2269 dnl and SELECT_TYPE_ARG5, defining the type of the
   2270 dnl function return value in SELECT_TYPE_RETV, and
   2271 dnl also defining the type qualifier of fifth argument
   2272 dnl in SELECT_QUAL_ARG5.
   2273 
   2274 AC_DEFUN([CURL_CHECK_FUNC_SELECT], [
   2275   AC_REQUIRE([CURL_CHECK_STRUCT_TIMEVAL])dnl
   2276   AC_CHECK_HEADERS(sys/select.h sys/socket.h)
   2277   #
   2278   AC_MSG_CHECKING([for select])
   2279   AC_LINK_IFELSE([
   2280     AC_LANG_PROGRAM([[
   2281 #undef inline
   2282 #ifdef HAVE_WINDOWS_H
   2283 #ifndef WIN32_LEAN_AND_MEAN
   2284 #define WIN32_LEAN_AND_MEAN
   2285 #endif
   2286 #include <windows.h>
   2287 #ifdef HAVE_WINSOCK2_H
   2288 #include <winsock2.h>
   2289 #else
   2290 #ifdef HAVE_WINSOCK_H
   2291 #include <winsock.h>
   2292 #endif
   2293 #endif
   2294 #endif
   2295 #ifdef HAVE_SYS_TYPES_H
   2296 #include <sys/types.h>
   2297 #endif
   2298 #ifdef HAVE_SYS_TIME_H
   2299 #include <sys/time.h>
   2300 #ifdef TIME_WITH_SYS_TIME
   2301 #include <time.h>
   2302 #endif
   2303 #else
   2304 #ifdef HAVE_TIME_H
   2305 #include <time.h>
   2306 #endif
   2307 #endif
   2308 #ifndef HAVE_WINDOWS_H
   2309 #ifdef HAVE_SYS_SELECT_H
   2310 #include <sys/select.h>
   2311 #endif
   2312 #ifdef HAVE_SYS_SOCKET_H
   2313 #include <sys/socket.h>
   2314 #endif
   2315 #endif
   2316     ]],[[
   2317       select(0, 0, 0, 0, 0);
   2318     ]])
   2319   ],[
   2320     AC_MSG_RESULT([yes])
   2321     curl_cv_select="yes"
   2322   ],[
   2323     AC_MSG_RESULT([no])
   2324     curl_cv_select="no"
   2325   ])
   2326   #
   2327   if test "$curl_cv_select" = "yes"; then
   2328     AC_CACHE_CHECK([types of args and return type for select],
   2329       [curl_cv_func_select_args], [
   2330       curl_cv_func_select_args="unknown"
   2331       for sel_retv in 'int' 'ssize_t'; do
   2332         for sel_arg1 in 'int' 'ssize_t' 'size_t' 'unsigned long int' 'unsigned int'; do
   2333           for sel_arg234 in 'fd_set *' 'int *' 'void *'; do
   2334             for sel_arg5 in 'struct timeval *' 'const struct timeval *'; do
   2335               if test "$curl_cv_func_select_args" = "unknown"; then
   2336                 AC_COMPILE_IFELSE([
   2337                   AC_LANG_PROGRAM([[
   2338 #undef inline
   2339 #ifdef HAVE_WINDOWS_H
   2340 #ifndef WIN32_LEAN_AND_MEAN
   2341 #define WIN32_LEAN_AND_MEAN
   2342 #endif
   2343 #include <windows.h>
   2344 #ifdef HAVE_WINSOCK2_H
   2345 #include <winsock2.h>
   2346 #else
   2347 #ifdef HAVE_WINSOCK_H
   2348 #include <winsock.h>
   2349 #endif
   2350 #endif
   2351 #define SELECTCALLCONV PASCAL
   2352 #endif
   2353 #ifdef HAVE_SYS_TYPES_H
   2354 #include <sys/types.h>
   2355 #endif
   2356 #ifdef HAVE_SYS_TIME_H
   2357 #include <sys/time.h>
   2358 #ifdef TIME_WITH_SYS_TIME
   2359 #include <time.h>
   2360 #endif
   2361 #else
   2362 #ifdef HAVE_TIME_H
   2363 #include <time.h>
   2364 #endif
   2365 #endif
   2366 #ifndef HAVE_WINDOWS_H
   2367 #ifdef HAVE_SYS_SELECT_H
   2368 #include <sys/select.h>
   2369 #endif
   2370 #ifdef HAVE_SYS_SOCKET_H
   2371 #include <sys/socket.h>
   2372 #endif
   2373 #define SELECTCALLCONV
   2374 #endif
   2375 #ifndef HAVE_STRUCT_TIMEVAL
   2376                     struct timeval {
   2377                       long tv_sec;
   2378                       long tv_usec;
   2379                     };
   2380 #endif
   2381                     extern $sel_retv SELECTCALLCONV select($sel_arg1,
   2382                                                            $sel_arg234,
   2383                                                            $sel_arg234,
   2384                                                            $sel_arg234,
   2385                                                            $sel_arg5);
   2386                   ]],[[
   2387                     $sel_arg1   nfds=0;
   2388                     $sel_arg234 rfds=0;
   2389                     $sel_arg234 wfds=0;
   2390                     $sel_arg234 efds=0;
   2391                     $sel_retv res = select(nfds, rfds, wfds, efds, 0);
   2392                   ]])
   2393                 ],[
   2394                   curl_cv_func_select_args="$sel_arg1,$sel_arg234,$sel_arg5,$sel_retv"
   2395                 ])
   2396               fi
   2397             done
   2398           done
   2399         done
   2400       done
   2401     ]) # AC-CACHE-CHECK
   2402     if test "$curl_cv_func_select_args" = "unknown"; then
   2403       AC_MSG_WARN([Cannot find proper types to use for select args])
   2404       AC_MSG_WARN([HAVE_SELECT will not be defined])
   2405     else
   2406       select_prev_IFS=$IFS; IFS=','
   2407       set dummy `echo "$curl_cv_func_select_args" | sed 's/\*/\*/g'`
   2408       IFS=$select_prev_IFS
   2409       shift
   2410       #
   2411       sel_qual_type_arg5=$[3]
   2412       #
   2413       AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG1, $[1],
   2414         [Define to the type of arg 1 for select.])
   2415       AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG234, $[2],
   2416         [Define to the type of args 2, 3 and 4 for select.])
   2417       AC_DEFINE_UNQUOTED(SELECT_TYPE_RETV, $[4],
   2418         [Define to the function return type for select.])
   2419       #
   2420       prev_sh_opts=$-
   2421       #
   2422       case $prev_sh_opts in
   2423         *f*)
   2424           ;;
   2425         *)
   2426           set -f
   2427           ;;
   2428       esac
   2429       #
   2430       case "$sel_qual_type_arg5" in
   2431         const*)
   2432           sel_qual_arg5=const
   2433           sel_type_arg5=`echo $sel_qual_type_arg5 | sed 's/^const //'`
   2434         ;;
   2435         *)
   2436           sel_qual_arg5=
   2437           sel_type_arg5=$sel_qual_type_arg5
   2438         ;;
   2439       esac
   2440       #
   2441       AC_DEFINE_UNQUOTED(SELECT_QUAL_ARG5, $sel_qual_arg5,
   2442         [Define to the type qualifier of arg 5 for select.])
   2443       AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG5, $sel_type_arg5,
   2444         [Define to the type of arg 5 for select.])
   2445       #
   2446       case $prev_sh_opts in
   2447         *f*)
   2448           ;;
   2449         *)
   2450           set +f
   2451           ;;
   2452       esac
   2453       #
   2454       AC_DEFINE_UNQUOTED(HAVE_SELECT, 1,
   2455         [Define to 1 if you have the select function.])
   2456       curl_cv_func_select="yes"
   2457     fi
   2458   fi
   2459 ])
   2460 
   2461 
   2462 dnl CURL_VERIFY_RUNTIMELIBS
   2463 dnl -------------------------------------------------
   2464 dnl Verify that the shared libs found so far can be used when running
   2465 dnl programs, since otherwise the situation will create odd configure errors
   2466 dnl that are misleading people.
   2467 dnl
   2468 dnl Make sure this test is run BEFORE the first test in the script that
   2469 dnl runs anything, which at the time of this writing is the AC_CHECK_SIZEOF
   2470 dnl macro. It must also run AFTER all lib-checking macros are complete.
   2471 
   2472 AC_DEFUN([CURL_VERIFY_RUNTIMELIBS], [
   2473 
   2474   dnl this test is of course not sensible if we are cross-compiling!
   2475   if test "x$cross_compiling" != xyes; then
   2476 
   2477     dnl just run a program to verify that the libs checked for previous to this
   2478     dnl point also is available run-time!
   2479     AC_MSG_CHECKING([run-time libs availability])
   2480     AC_TRY_RUN([
   2481 main()
   2482 {
   2483   return 0;
   2484 }
   2485 ],
   2486     AC_MSG_RESULT([fine]),
   2487     AC_MSG_RESULT([failed])
   2488     AC_MSG_ERROR([one or more libs available at link-time are not available run-time. Libs used at link-time: $LIBS])
   2489     )
   2490 
   2491     dnl if this test fails, configure has already stopped
   2492   fi
   2493 ])
   2494 
   2495 
   2496 dnl CURL_CHECK_VARIADIC_MACROS
   2497 dnl -------------------------------------------------
   2498 dnl Check compiler support of variadic macros
   2499 
   2500 AC_DEFUN([CURL_CHECK_VARIADIC_MACROS], [
   2501   AC_CACHE_CHECK([for compiler support of C99 variadic macro style],
   2502     [curl_cv_variadic_macros_c99], [
   2503     AC_COMPILE_IFELSE([
   2504       AC_LANG_PROGRAM([[
   2505 #define c99_vmacro3(first, ...) fun3(first, __VA_ARGS__)
   2506 #define c99_vmacro2(first, ...) fun2(first, __VA_ARGS__)
   2507         int fun3(int arg1, int arg2, int arg3);
   2508         int fun2(int arg1, int arg2);
   2509         int fun3(int arg1, int arg2, int arg3)
   2510         { return arg1 + arg2 + arg3; }
   2511         int fun2(int arg1, int arg2)
   2512         { return arg1 + arg2; }
   2513       ]],[[
   2514         int res3 = c99_vmacro3(1, 2, 3);
   2515         int res2 = c99_vmacro2(1, 2);
   2516       ]])
   2517     ],[
   2518       curl_cv_variadic_macros_c99="yes"
   2519     ],[
   2520       curl_cv_variadic_macros_c99="no"
   2521     ])
   2522   ])
   2523   case "$curl_cv_variadic_macros_c99" in
   2524     yes)
   2525       AC_DEFINE_UNQUOTED(HAVE_VARIADIC_MACROS_C99, 1,
   2526         [Define to 1 if compiler supports C99 variadic macro style.])
   2527       ;;
   2528   esac
   2529   AC_CACHE_CHECK([for compiler support of old gcc variadic macro style],
   2530     [curl_cv_variadic_macros_gcc], [
   2531     AC_COMPILE_IFELSE([
   2532       AC_LANG_PROGRAM([[
   2533 #define gcc_vmacro3(first, args...) fun3(first, args)
   2534 #define gcc_vmacro2(first, args...) fun2(first, args)
   2535         int fun3(int arg1, int arg2, int arg3);
   2536         int fun2(int arg1, int arg2);
   2537         int fun3(int arg1, int arg2, int arg3)
   2538         { return arg1 + arg2 + arg3; }
   2539         int fun2(int arg1, int arg2)
   2540         { return arg1 + arg2; }
   2541       ]],[[
   2542         int res3 = gcc_vmacro3(1, 2, 3);
   2543         int res2 = gcc_vmacro2(1, 2);
   2544       ]])
   2545     ],[
   2546       curl_cv_variadic_macros_gcc="yes"
   2547     ],[
   2548       curl_cv_variadic_macros_gcc="no"
   2549     ])
   2550   ])
   2551   case "$curl_cv_variadic_macros_gcc" in
   2552     yes)
   2553       AC_DEFINE_UNQUOTED(HAVE_VARIADIC_MACROS_GCC, 1,
   2554         [Define to 1 if compiler supports old gcc variadic macro style.])
   2555       ;;
   2556   esac
   2557 ])
   2558 
   2559 
   2560 dnl CURL_CHECK_CA_BUNDLE
   2561 dnl -------------------------------------------------
   2562 dnl Check if a default ca-bundle should be used
   2563 dnl
   2564 dnl regarding the paths this will scan:
   2565 dnl /etc/ssl/certs/ca-certificates.crt Debian systems
   2566 dnl /etc/pki/tls/certs/ca-bundle.crt Redhat and Mandriva
   2567 dnl /usr/share/ssl/certs/ca-bundle.crt old(er) Redhat
   2568 dnl /usr/local/share/certs/ca-root-nss.crt FreeBSD
   2569 dnl /etc/ssl/cert.pem OpenBSD, FreeBSD (symlink)
   2570 dnl /etc/ssl/certs/ (ca path) SUSE
   2571 
   2572 AC_DEFUN([CURL_CHECK_CA_BUNDLE], [
   2573 
   2574   AC_MSG_CHECKING([default CA cert bundle/path])
   2575 
   2576   AC_ARG_WITH(ca-bundle,
   2577 AC_HELP_STRING([--with-ca-bundle=FILE],
   2578 [Path to a file containing CA certificates (example: /etc/ca-bundle.crt)])
   2579 AC_HELP_STRING([--without-ca-bundle], [Don't use a default CA bundle]),
   2580   [
   2581     want_ca="$withval"
   2582     if test "x$want_ca" = "xyes"; then
   2583       AC_MSG_ERROR([--with-ca-bundle=FILE requires a path to the CA bundle])
   2584     fi
   2585   ],
   2586   [ want_ca="unset" ])
   2587   AC_ARG_WITH(ca-path,
   2588 AC_HELP_STRING([--with-ca-path=DIRECTORY],
   2589 [Path to a directory containing CA certificates stored individually, with \
   2590 their filenames in a hash format. This option can be used with OpenSSL, \
   2591 GnuTLS and PolarSSL backends. Refer to OpenSSL c_rehash for details. \
   2592 (example: /etc/certificates)])
   2593 AC_HELP_STRING([--without-ca-path], [Don't use a default CA path]),
   2594   [
   2595     want_capath="$withval"
   2596     if test "x$want_capath" = "xyes"; then
   2597       AC_MSG_ERROR([--with-ca-path=DIRECTORY requires a path to the CA path directory])
   2598     fi
   2599   ],
   2600   [ want_capath="unset"])
   2601 
   2602   ca_warning="   (warning: certs not found)"
   2603   capath_warning="   (warning: certs not found)"
   2604   check_capath=""
   2605 
   2606   if test "x$want_ca" != "xno" -a "x$want_ca" != "xunset" -a \
   2607           "x$want_capath" != "xno" -a "x$want_capath" != "xunset"; then
   2608     dnl both given
   2609     ca="$want_ca"
   2610     capath="$want_capath"
   2611   elif test "x$want_ca" != "xno" -a "x$want_ca" != "xunset"; then
   2612     dnl --with-ca-bundle given
   2613     ca="$want_ca"
   2614     capath="no"
   2615   elif test "x$want_capath" != "xno" -a "x$want_capath" != "xunset"; then
   2616     dnl --with-ca-path given
   2617     if test "x$OPENSSL_ENABLED" != "x1" -a "x$GNUTLS_ENABLED" != "x1" -a "x$POLARSSL_ENABLED" != "x1"; then
   2618       AC_MSG_ERROR([--with-ca-path only works with OpenSSL, GnuTLS or PolarSSL])
   2619     fi
   2620     capath="$want_capath"
   2621     ca="no"
   2622   else
   2623     dnl first try autodetecting a CA bundle , then a CA path
   2624     dnl both autodetections can be skipped by --without-ca-*
   2625     ca="no"
   2626     capath="no"
   2627     if test "x$cross_compiling" != "xyes"; then
   2628       dnl NOT cross-compiling and...
   2629       dnl neither of the --with-ca-* options are provided
   2630       if test "x$want_ca" = "xunset"; then
   2631         dnl the path we previously would have installed the curl ca bundle
   2632         dnl to, and thus we now check for an already existing cert in that
   2633         dnl place in case we find no other
   2634         if test "x$prefix" != xNONE; then
   2635           cac="${prefix}/share/curl/curl-ca-bundle.crt"
   2636         else
   2637           cac="$ac_default_prefix/share/curl/curl-ca-bundle.crt"
   2638         fi
   2639 
   2640         for a in /etc/ssl/certs/ca-certificates.crt \
   2641                  /etc/pki/tls/certs/ca-bundle.crt \
   2642                  /usr/share/ssl/certs/ca-bundle.crt \
   2643                  /usr/local/share/certs/ca-root-nss.crt \
   2644                  /etc/ssl/cert.pem \
   2645                  "$cac"; do
   2646           if test -f "$a"; then
   2647             ca="$a"
   2648             break
   2649           fi
   2650         done
   2651       fi
   2652       if test "x$want_capath" = "xunset" -a "x$ca" = "xno" -a \
   2653               "x$OPENSSL_ENABLED" = "x1"; then
   2654         check_capath="/etc/ssl/certs/"
   2655       fi
   2656     else
   2657       dnl no option given and cross-compiling
   2658       AC_MSG_WARN([skipped the ca-cert path detection when cross-compiling])
   2659     fi
   2660   fi
   2661 
   2662   if test "x$ca" = "xno" || test -f "$ca"; then
   2663     ca_warning=""
   2664   fi
   2665 
   2666   if test "x$capath" != "xno"; then
   2667     check_capath="$capath"
   2668   fi
   2669 
   2670   if test ! -z "$check_capath"; then
   2671     for a in "$check_capath"; do
   2672       if test -d "$a" && ls "$a"/[[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]].0 >/dev/null 2>/dev/null; then
   2673         if test "x$capath" = "xno"; then
   2674           capath="$a"
   2675         fi
   2676         capath_warning=""
   2677         break
   2678       fi
   2679     done
   2680   fi
   2681 
   2682   if test "x$capath" = "xno"; then
   2683     capath_warning=""
   2684   fi
   2685 
   2686   if test "x$ca" != "xno"; then
   2687     CURL_CA_BUNDLE='"'$ca'"'
   2688     AC_DEFINE_UNQUOTED(CURL_CA_BUNDLE, "$ca", [Location of default ca bundle])
   2689     AC_SUBST(CURL_CA_BUNDLE)
   2690     AC_MSG_RESULT([$ca])
   2691   fi
   2692   if test "x$capath" != "xno"; then
   2693     CURL_CA_PATH="\"$capath\""
   2694     AC_DEFINE_UNQUOTED(CURL_CA_PATH, "$capath", [Location of default ca path])
   2695     AC_MSG_RESULT([$capath (capath)])
   2696   fi
   2697   if test "x$ca" = "xno" && test "x$capath" = "xno"; then
   2698     AC_MSG_RESULT([no])
   2699   fi
   2700 
   2701   AC_MSG_CHECKING([whether to use builtin CA store of SSL library])
   2702   AC_ARG_WITH(ca-fallback,
   2703 AC_HELP_STRING([--with-ca-fallback], [Use the built in CA store of the SSL library])
   2704 AC_HELP_STRING([--without-ca-fallback], [Don't use the built in CA store of the SSL library]),
   2705   [
   2706     if test "x$with_ca_fallback" != "xyes" -a "x$with_ca_fallback" != "xno"; then
   2707       AC_MSG_ERROR([--with-ca-fallback only allows yes or no as parameter])
   2708     fi
   2709   ],
   2710   [ with_ca_fallback="no"])
   2711   AC_MSG_RESULT([$with_ca_fallback])
   2712   if test "x$with_ca_fallback" = "xyes"; then
   2713     if test "x$OPENSSL_ENABLED" != "x1" -a "x$GNUTLS_ENABLED" != "x1"; then
   2714       AC_MSG_ERROR([--with-ca-fallback only works with OpenSSL or GnuTLS])
   2715     fi
   2716     AC_DEFINE_UNQUOTED(CURL_CA_FALLBACK, 1, [define "1" to use built in CA store of SSL library ])
   2717   fi
   2718 ])
   2719 
   2720 
   2721 dnl DO_CURL_OFF_T_CHECK (TYPE, SIZE)
   2722 dnl -------------------------------------------------
   2723 dnl Internal macro for CURL_CONFIGURE_CURL_OFF_T
   2724 
   2725 AC_DEFUN([DO_CURL_OFF_T_CHECK], [
   2726   AC_REQUIRE([CURL_INCLUDES_INTTYPES])dnl
   2727   if test "$curl_typeof_curl_off_t" = "unknown" && test ! -z "$1"; then
   2728     tmp_includes=""
   2729     tmp_source=""
   2730     tmp_fmt=""
   2731     case XC_SH_TR_SH([$1]) in
   2732       int64_t)
   2733         tmp_includes="$curl_includes_inttypes"
   2734         tmp_source="char f@<:@@:>@ = PRId64;"
   2735         tmp_fmt="PRId64"
   2736         ;;
   2737       int32_t)
   2738         tmp_includes="$curl_includes_inttypes"
   2739         tmp_source="char f@<:@@:>@ = PRId32;"
   2740         tmp_fmt="PRId32"
   2741         ;;
   2742       int16_t)
   2743         tmp_includes="$curl_includes_inttypes"
   2744         tmp_source="char f@<:@@:>@ = PRId16;"
   2745         tmp_fmt="PRId16"
   2746         ;;
   2747     esac
   2748     AC_COMPILE_IFELSE([
   2749       AC_LANG_PROGRAM([[
   2750         $tmp_includes
   2751         typedef $1 curl_off_t;
   2752         typedef char dummy_arr[sizeof(curl_off_t) == $2 ? 1 : -1];
   2753       ]],[[
   2754         $tmp_source
   2755         curl_off_t dummy;
   2756       ]])
   2757     ],[
   2758       if test -z "$tmp_fmt"; then
   2759         curl_typeof_curl_off_t="$1"
   2760         curl_sizeof_curl_off_t="$2"
   2761       else
   2762         CURL_CHECK_DEF([$tmp_fmt], [$curl_includes_inttypes], [silent])
   2763         AS_VAR_PUSHDEF([tmp_HaveFmtDef], [curl_cv_have_def_$tmp_fmt])dnl
   2764         AS_VAR_PUSHDEF([tmp_FmtDef], [curl_cv_def_$tmp_fmt])dnl
   2765         if test AS_VAR_GET(tmp_HaveFmtDef) = "yes"; then
   2766           curl_format_curl_off_t=AS_VAR_GET(tmp_FmtDef)
   2767           curl_typeof_curl_off_t="$1"
   2768           curl_sizeof_curl_off_t="$2"
   2769         fi
   2770         AS_VAR_POPDEF([tmp_FmtDef])dnl
   2771         AS_VAR_POPDEF([tmp_HaveFmtDef])dnl
   2772       fi
   2773     ])
   2774   fi
   2775 ])
   2776 
   2777 
   2778 dnl DO_CURL_OFF_T_SUFFIX_CHECK (TYPE)
   2779 dnl -------------------------------------------------
   2780 dnl Internal macro for CURL_CONFIGURE_CURL_OFF_T
   2781 
   2782 AC_DEFUN([DO_CURL_OFF_T_SUFFIX_CHECK], [
   2783   AC_REQUIRE([CURL_INCLUDES_INTTYPES])dnl
   2784   AC_MSG_CHECKING([constant suffix string for curl_off_t])
   2785   #
   2786   curl_suffix_curl_off_t="unknown"
   2787   curl_suffix_curl_off_tu="unknown"
   2788   #
   2789   case XC_SH_TR_SH([$1]) in
   2790     long_long | __longlong | __longlong_t)
   2791       tst_suffixes="LL::"
   2792       ;;
   2793     long)
   2794       tst_suffixes="L::"
   2795       ;;
   2796     int)
   2797       tst_suffixes="::"
   2798       ;;
   2799     __int64 | int64_t)
   2800       tst_suffixes="LL:i64::"
   2801       ;;
   2802     __int32 | int32_t)
   2803       tst_suffixes="L:i32::"
   2804       ;;
   2805     __int16 | int16_t)
   2806       tst_suffixes="L:i16::"
   2807       ;;
   2808     *)
   2809       AC_MSG_ERROR([unexpected data type $1])
   2810       ;;
   2811   esac
   2812   #
   2813   old_IFS=$IFS; IFS=':'
   2814   for tmp_ssuf in $tst_suffixes ; do
   2815     IFS=$old_IFS
   2816     if test "x$curl_suffix_curl_off_t" = "xunknown"; then
   2817       case $tmp_ssuf in
   2818         i64 | i32 | i16)
   2819           tmp_usuf="u$tmp_ssuf"
   2820           ;;
   2821         LL | L)
   2822           tmp_usuf="U$tmp_ssuf"
   2823           ;;
   2824         *)
   2825           tmp_usuf=""
   2826           ;;
   2827       esac
   2828       AC_COMPILE_IFELSE([
   2829         AC_LANG_PROGRAM([[
   2830           $curl_includes_inttypes
   2831           typedef $1 new_t;
   2832         ]],[[
   2833           new_t s1;
   2834           new_t s2;
   2835           s1 = -10$tmp_ssuf ;
   2836           s2 =  20$tmp_ssuf ;
   2837           if(s1 > s2)
   2838             return 1;
   2839         ]])
   2840       ],[
   2841         curl_suffix_curl_off_t="$tmp_ssuf"
   2842         curl_suffix_curl_off_tu="$tmp_usuf"
   2843       ])
   2844     fi
   2845   done
   2846   IFS=$old_IFS
   2847   #
   2848   if test "x$curl_suffix_curl_off_t" = "xunknown"; then
   2849     AC_MSG_ERROR([cannot find constant suffix string for curl_off_t.])
   2850   else
   2851     AC_MSG_RESULT([$curl_suffix_curl_off_t])
   2852     AC_MSG_CHECKING([constant suffix string for unsigned curl_off_t])
   2853     AC_MSG_RESULT([$curl_suffix_curl_off_tu])
   2854   fi
   2855   #
   2856 ])
   2857 
   2858 
   2859 dnl CURL_CONFIGURE_CURL_OFF_T
   2860 dnl -------------------------------------------------
   2861 dnl Find out suitable curl_off_t data type definition and associated
   2862 dnl items, and make the appropriate definitions used in template file
   2863 dnl include/curl/curlbuild.h.in to properly configure the library.
   2864 
   2865 AC_DEFUN([CURL_CONFIGURE_CURL_OFF_T], [
   2866   AC_REQUIRE([CURL_INCLUDES_INTTYPES])dnl
   2867   #
   2868   AC_BEFORE([$0],[AC_SYS_LARGEFILE])dnl
   2869   AC_BEFORE([$0],[CURL_CONFIGURE_REENTRANT])dnl
   2870   AC_BEFORE([$0],[CURL_CHECK_AIX_ALL_SOURCE])dnl
   2871   #
   2872   if test -z "$SED"; then
   2873     AC_MSG_ERROR([SED not set. Cannot continue without SED being set.])
   2874   fi
   2875   #
   2876   AC_CHECK_SIZEOF(long)
   2877   AC_CHECK_SIZEOF(void*)
   2878   #
   2879   if test -z "$ac_cv_sizeof_long" ||
   2880     test "$ac_cv_sizeof_long" -eq "0"; then
   2881     AC_MSG_ERROR([cannot find out size of long.])
   2882   fi
   2883   if test -z "$ac_cv_sizeof_voidp" ||
   2884      test "$ac_cv_sizeof_voidp" -eq "0"; then
   2885     AC_MSG_ERROR([cannot find out size of void*.])
   2886   fi
   2887   #
   2888   x_LP64_long=""
   2889   x_LP32_long=""
   2890   #
   2891   if test "$ac_cv_sizeof_long" -eq "8" &&
   2892      test "$ac_cv_sizeof_voidp" -ge "8"; then
   2893     x_LP64_long="long"
   2894   elif test "$ac_cv_sizeof_long" -eq "4" &&
   2895        test "$ac_cv_sizeof_voidp" -ge "4"; then
   2896     x_LP32_long="long"
   2897   fi
   2898   #
   2899   dnl DO_CURL_OFF_T_CHECK results are stored in next 3 vars
   2900   #
   2901   curl_typeof_curl_off_t="unknown"
   2902   curl_sizeof_curl_off_t="unknown"
   2903   curl_format_curl_off_t="unknown"
   2904   curl_format_curl_off_tu="unknown"
   2905   #
   2906   if test "$curl_typeof_curl_off_t" = "unknown"; then
   2907     AC_MSG_CHECKING([for 64-bit curl_off_t data type])
   2908     for t8 in          \
   2909       "$x_LP64_long"   \
   2910       'int64_t'        \
   2911       '__int64'        \
   2912       'long long'      \
   2913       '__longlong'     \
   2914       '__longlong_t'   ; do
   2915       DO_CURL_OFF_T_CHECK([$t8], [8])
   2916     done
   2917     AC_MSG_RESULT([$curl_typeof_curl_off_t])
   2918   fi
   2919   if test "$curl_typeof_curl_off_t" = "unknown"; then
   2920     AC_MSG_CHECKING([for 32-bit curl_off_t data type])
   2921     for t4 in          \
   2922       "$x_LP32_long"   \
   2923       'int32_t'        \
   2924       '__int32'        \
   2925       'int'            ; do
   2926       DO_CURL_OFF_T_CHECK([$t4], [4])
   2927     done
   2928     AC_MSG_RESULT([$curl_typeof_curl_off_t])
   2929   fi
   2930   if test "$curl_typeof_curl_off_t" = "unknown"; then
   2931     AC_MSG_ERROR([cannot find data type for curl_off_t.])
   2932   fi
   2933   #
   2934   AC_MSG_CHECKING([size of curl_off_t])
   2935   AC_MSG_RESULT([$curl_sizeof_curl_off_t])
   2936   #
   2937   AC_MSG_CHECKING([formatting string directive for curl_off_t])
   2938   if test "$curl_format_curl_off_t" != "unknown"; then
   2939     x_pull_headers="yes"
   2940     curl_format_curl_off_t=`echo "$curl_format_curl_off_t" | "$SED" 's/[["]]//g'`
   2941     curl_format_curl_off_tu=`echo "$curl_format_curl_off_t" | "$SED" 's/i$/u/'`
   2942     curl_format_curl_off_tu=`echo "$curl_format_curl_off_tu" | "$SED" 's/d$/u/'`
   2943     curl_format_curl_off_tu=`echo "$curl_format_curl_off_tu" | "$SED" 's/D$/U/'`
   2944   else
   2945     x_pull_headers="no"
   2946     case XC_SH_TR_SH([$curl_typeof_curl_off_t]) in
   2947       long_long | __longlong | __longlong_t)
   2948         curl_format_curl_off_t="lld"
   2949         curl_format_curl_off_tu="llu"
   2950         ;;
   2951       long)
   2952         curl_format_curl_off_t="ld"
   2953         curl_format_curl_off_tu="lu"
   2954         ;;
   2955       int)
   2956         curl_format_curl_off_t="d"
   2957         curl_format_curl_off_tu="u"
   2958         ;;
   2959       __int64)
   2960         curl_format_curl_off_t="I64d"
   2961         curl_format_curl_off_tu="I64u"
   2962         ;;
   2963       __int32)
   2964         curl_format_curl_off_t="I32d"
   2965         curl_format_curl_off_tu="I32u"
   2966         ;;
   2967       __int16)
   2968         curl_format_curl_off_t="I16d"
   2969         curl_format_curl_off_tu="I16u"
   2970         ;;
   2971       *)
   2972         AC_MSG_ERROR([cannot find print format string for curl_off_t.])
   2973         ;;
   2974     esac
   2975   fi
   2976   AC_MSG_RESULT(["$curl_format_curl_off_t"])
   2977   #
   2978   AC_MSG_CHECKING([formatting string directive for unsigned curl_off_t])
   2979   AC_MSG_RESULT(["$curl_format_curl_off_tu"])
   2980   #
   2981   DO_CURL_OFF_T_SUFFIX_CHECK([$curl_typeof_curl_off_t])
   2982   #
   2983   if test "$x_pull_headers" = "yes"; then
   2984     if test "x$ac_cv_header_sys_types_h" = "xyes"; then
   2985       CURL_DEFINE_UNQUOTED([CURL_PULL_SYS_TYPES_H])
   2986     fi
   2987     if test "x$ac_cv_header_stdint_h" = "xyes"; then
   2988       CURL_DEFINE_UNQUOTED([CURL_PULL_STDINT_H])
   2989     fi
   2990     if test "x$ac_cv_header_inttypes_h" = "xyes"; then
   2991       CURL_DEFINE_UNQUOTED([CURL_PULL_INTTYPES_H])
   2992     fi
   2993   fi
   2994   #
   2995   CURL_DEFINE_UNQUOTED([CURL_TYPEOF_CURL_OFF_T], [$curl_typeof_curl_off_t])
   2996   CURL_DEFINE_UNQUOTED([CURL_FORMAT_CURL_OFF_T], ["$curl_format_curl_off_t"])
   2997   CURL_DEFINE_UNQUOTED([CURL_FORMAT_CURL_OFF_TU], ["$curl_format_curl_off_tu"])
   2998   CURL_DEFINE_UNQUOTED([CURL_FORMAT_OFF_T], ["%$curl_format_curl_off_t"])
   2999   CURL_DEFINE_UNQUOTED([CURL_SIZEOF_CURL_OFF_T], [$curl_sizeof_curl_off_t])
   3000   CURL_DEFINE_UNQUOTED([CURL_SUFFIX_CURL_OFF_T], [$curl_suffix_curl_off_t])
   3001   CURL_DEFINE_UNQUOTED([CURL_SUFFIX_CURL_OFF_TU], [$curl_suffix_curl_off_tu])
   3002   #
   3003 ])
   3004 
   3005 
   3006 dnl CURL_CHECK_WIN32_LARGEFILE
   3007 dnl -------------------------------------------------
   3008 dnl Check if curl's WIN32 large file will be used
   3009 
   3010 AC_DEFUN([CURL_CHECK_WIN32_LARGEFILE], [
   3011   AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
   3012   AC_MSG_CHECKING([whether build target supports WIN32 file API])
   3013   curl_win32_file_api="no"
   3014   if test "$curl_cv_header_windows_h" = "yes"; then
   3015     if test x"$enable_largefile" != "xno"; then
   3016       AC_COMPILE_IFELSE([
   3017         AC_LANG_PROGRAM([[
   3018         ]],[[
   3019 #if !defined(_WIN32_WCE) && \
   3020     (defined(__MINGW32__) || \
   3021     (defined(_MSC_VER) && (defined(_WIN32) || defined(_WIN64))))
   3022           int dummy=1;
   3023 #else
   3024           WIN32 large file API not supported.
   3025 #endif
   3026         ]])
   3027       ],[
   3028         curl_win32_file_api="win32_large_files"
   3029       ])
   3030     fi
   3031     if test "$curl_win32_file_api" = "no"; then
   3032       AC_COMPILE_IFELSE([
   3033         AC_LANG_PROGRAM([[
   3034         ]],[[
   3035 #if defined(_WIN32_WCE) || defined(__MINGW32__) || defined(_MSC_VER)
   3036           int dummy=1;
   3037 #else
   3038           WIN32 small file API not supported.
   3039 #endif
   3040         ]])
   3041       ],[
   3042         curl_win32_file_api="win32_small_files"
   3043       ])
   3044     fi
   3045   fi
   3046   case "$curl_win32_file_api" in
   3047     win32_large_files)
   3048       AC_MSG_RESULT([yes (large file enabled)])
   3049       AC_DEFINE_UNQUOTED(USE_WIN32_LARGE_FILES, 1,
   3050         [Define to 1 if you are building a Windows target with large file support.])
   3051       ;;
   3052     win32_small_files)
   3053       AC_MSG_RESULT([yes (large file disabled)])
   3054       AC_DEFINE_UNQUOTED(USE_WIN32_SMALL_FILES, 1,
   3055         [Define to 1 if you are building a Windows target without large file support.])
   3056       ;;
   3057     *)
   3058       AC_MSG_RESULT([no])
   3059       ;;
   3060   esac
   3061 ])
   3062 
   3063 dnl CURL_EXPORT_PCDIR ($pcdir)
   3064 dnl ------------------------
   3065 dnl if $pcdir is not empty, set PKG_CONFIG_LIBDIR to $pcdir and export
   3066 dnl
   3067 dnl we need this macro since pkg-config distinguishes among empty and unset
   3068 dnl variable while checking PKG_CONFIG_LIBDIR
   3069 dnl
   3070 
   3071 AC_DEFUN([CURL_EXPORT_PCDIR], [
   3072     if test -n "$1"; then
   3073       PKG_CONFIG_LIBDIR="$1"
   3074       export PKG_CONFIG_LIBDIR
   3075     fi
   3076 ])
   3077 
   3078 dnl CURL_CHECK_PKGCONFIG ($module, [$pcdir])
   3079 dnl ------------------------
   3080 dnl search for the pkg-config tool. Set the PKGCONFIG variable to hold the
   3081 dnl path to it, or 'no' if not found/present.
   3082 dnl
   3083 dnl If pkg-config is present, check that it has info about the $module or
   3084 dnl return "no" anyway!
   3085 dnl
   3086 dnl Optionally PKG_CONFIG_LIBDIR may be given as $pcdir.
   3087 dnl
   3088 
   3089 AC_DEFUN([CURL_CHECK_PKGCONFIG], [
   3090     if test -n "$PKG_CONFIG"; then
   3091       PKGCONFIG="$PKG_CONFIG"
   3092     else
   3093       AC_PATH_TOOL([PKGCONFIG], [pkg-config], [no],
   3094         [$PATH:/usr/bin:/usr/local/bin])
   3095     fi
   3096 
   3097     if test "x$PKGCONFIG" != "xno"; then
   3098       AC_MSG_CHECKING([for $1 options with pkg-config])
   3099       dnl ask pkg-config about $1
   3100       itexists=`CURL_EXPORT_PCDIR([$2]) dnl
   3101         $PKGCONFIG --exists $1 >/dev/null 2>&1 && echo 1`
   3102 
   3103       if test -z "$itexists"; then
   3104         dnl pkg-config does not have info about the given module! set the
   3105         dnl variable to 'no'
   3106         PKGCONFIG="no"
   3107         AC_MSG_RESULT([no])
   3108       else
   3109         AC_MSG_RESULT([found])
   3110       fi
   3111     fi
   3112 ])
   3113 
   3114 
   3115 dnl CURL_GENERATE_CONFIGUREHELP_PM
   3116 dnl -------------------------------------------------
   3117 dnl Generate test harness configurehelp.pm module, defining and
   3118 dnl initializing some perl variables with values which are known
   3119 dnl when the configure script runs. For portability reasons, test
   3120 dnl harness needs information on how to run the C preprocessor.
   3121 
   3122 AC_DEFUN([CURL_GENERATE_CONFIGUREHELP_PM], [
   3123   AC_REQUIRE([AC_PROG_CPP])dnl
   3124   tmp_cpp=`eval echo "$ac_cpp" 2>/dev/null`
   3125   if test -z "$tmp_cpp"; then
   3126     tmp_cpp='cpp'
   3127   fi
   3128   cat >./tests/configurehelp.pm <<_EOF
   3129 [@%:@] This is a generated file.  Do not edit.
   3130 
   3131 package configurehelp;
   3132 
   3133 use strict;
   3134 use warnings;
   3135 use Exporter;
   3136 
   3137 use vars qw(
   3138     @ISA
   3139     @EXPORT_OK
   3140     \$Cpreprocessor
   3141     );
   3142 
   3143 @ISA = qw(Exporter);
   3144 
   3145 @EXPORT_OK = qw(
   3146     \$Cpreprocessor
   3147     );
   3148 
   3149 \$Cpreprocessor = '$tmp_cpp';
   3150 
   3151 1;
   3152 _EOF
   3153 ])
   3154 
   3155 dnl CURL_CPP_P
   3156 dnl
   3157 dnl Check if $cpp -P should be used for extract define values due to gcc 5
   3158 dnl splitting up strings and defines between line outputs. gcc by default
   3159 dnl (without -P) will show TEST EINVAL TEST as
   3160 dnl
   3161 dnl # 13 "conftest.c"
   3162 dnl TEST
   3163 dnl # 13 "conftest.c" 3 4
   3164 dnl     22
   3165 dnl # 13 "conftest.c"
   3166 dnl            TEST
   3167 
   3168 AC_DEFUN([CURL_CPP_P], [
   3169   AC_MSG_CHECKING([if cpp -P is needed])
   3170   AC_EGREP_CPP([TEST.*TEST], [
   3171  #include <errno.h>
   3172 TEST EINVAL TEST
   3173   ], [cpp=no], [cpp=yes])
   3174   AC_MSG_RESULT([$cpp])
   3175 
   3176   dnl we need cpp -P so check if it works then
   3177   if test "x$cpp" = "xyes"; then
   3178     AC_MSG_CHECKING([if cpp -P works])
   3179     OLDCPPFLAGS=$CPPFLAGS
   3180     CPPFLAGS="$CPPFLAGS -P"
   3181     AC_EGREP_CPP([TEST.*TEST], [
   3182  #include <errno.h>
   3183 TEST EINVAL TEST
   3184     ], [cpp_p=yes], [cpp_p=no])
   3185     AC_MSG_RESULT([$cpp_p])
   3186 
   3187     if test "x$cpp_p" = "xno"; then
   3188       AC_MSG_WARN([failed to figure out cpp -P alternative])
   3189       # without -P
   3190       CPPPFLAGS=$OLDCPPFLAGS
   3191     else
   3192       # with -P
   3193       CPPPFLAGS=$CPPFLAGS
   3194     fi
   3195     dnl restore CPPFLAGS
   3196     CPPFLAGS=$OLDCPPFLAGS
   3197   fi
   3198 ])
   3199