1
2
3dnl CURL_CHECK_DEF (SYMBOL, [INCLUDES], [SILENT])
4dnl -------------------------------------------------
5dnl Use the C preprocessor to find out if the given object-style symbol
6dnl is defined and get its expansion. This macro will not use default
7dnl includes even if no INCLUDES argument is given. This macro will run
8dnl silently when invoked with three arguments. If the expansion would
9dnl result in a set of double-quoted strings the returned expansion will
10dnl actually be a single double-quoted string concatenating all them.
11
12AC_DEFUN([CURL_CHECK_DEF], [
13  AS_VAR_PUSHDEF([ac_HaveDef], [curl_cv_have_def_$1])dnl
14  AS_VAR_PUSHDEF([ac_Def], [curl_cv_def_$1])dnl
15  if test -z "$SED"; then
16    AC_MSG_ERROR([SED not set. Cannot continue without SED being set.])
17  fi
18  if test -z "$GREP"; then
19    AC_MSG_ERROR([GREP not set. Cannot continue without GREP being set.])
20  fi
21  ifelse($3,,[AC_MSG_CHECKING([for preprocessor definition of $1])])
22  tmp_exp=""
23  AC_PREPROC_IFELSE([
24    AC_LANG_SOURCE(
25ifelse($2,,,[$2])[[
26#ifdef $1
27CURL_DEF_TOKEN $1
28#endif
29    ]])
30  ],[
31    tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \
32      "$GREP" CURL_DEF_TOKEN 2>/dev/null | \
33      "$SED" 's/.*CURL_DEF_TOKEN[[ ]]//' 2>/dev/null | \
34      "$SED" 's/[["]][[ ]]*[["]]//g' 2>/dev/null`
35    if test -z "$tmp_exp" || test "$tmp_exp" = "$1"; then
36      tmp_exp=""
37    fi
38  ])
39  if test -z "$tmp_exp"; then
40    AS_VAR_SET(ac_HaveDef, no)
41    ifelse($3,,[AC_MSG_RESULT([no])])
42  else
43    AS_VAR_SET(ac_HaveDef, yes)
44    AS_VAR_SET(ac_Def, $tmp_exp)
45    ifelse($3,,[AC_MSG_RESULT([$tmp_exp])])
46  fi
47  AS_VAR_POPDEF([ac_Def])dnl
48  AS_VAR_POPDEF([ac_HaveDef])dnl
49])
50
51
52dnl CURL_CHECK_DEF_CC (SYMBOL, [INCLUDES], [SILENT])
53dnl -------------------------------------------------
54dnl Use the C compiler to find out only if the given symbol is defined
55dnl or not, this can not find out its expansion. This macro will not use
56dnl default includes even if no INCLUDES argument is given. This macro
57dnl will run silently when invoked with three arguments.
58
59AC_DEFUN([CURL_CHECK_DEF_CC], [
60  AS_VAR_PUSHDEF([ac_HaveDef], [curl_cv_have_def_$1])dnl
61  ifelse($3,,[AC_MSG_CHECKING([for compiler definition of $1])])
62  AC_COMPILE_IFELSE([
63    AC_LANG_SOURCE(
64ifelse($2,,,[$2])[[
65int main (void)
66{
67#ifdef $1
68  return 0;
69#else
70  force compilation error
71#endif
72}
73    ]])
74  ],[
75    tst_symbol_defined="yes"
76  ],[
77    tst_symbol_defined="no"
78  ])
79  if test "$tst_symbol_defined" = "yes"; then
80    AS_VAR_SET(ac_HaveDef, yes)
81    ifelse($3,,[AC_MSG_RESULT([yes])])
82  else
83    AS_VAR_SET(ac_HaveDef, no)
84    ifelse($3,,[AC_MSG_RESULT([no])])
85  fi
86  AS_VAR_POPDEF([ac_HaveDef])dnl
87])
88
89
90dnl CARES_CHECK_LIB_XNET
91dnl -------------------------------------------------
92dnl Verify if X/Open network library is required.
93
94AC_DEFUN([CARES_CHECK_LIB_XNET], [
95  AC_MSG_CHECKING([if X/Open network library is required])
96  tst_lib_xnet_required="no"
97  AC_COMPILE_IFELSE([
98    AC_LANG_SOURCE([[
99int main (void)
100{
101#if defined(__hpux) && defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 600)
102  return 0;
103#elif defined(__hpux) && defined(_XOPEN_SOURCE_EXTENDED)
104  return 0;
105#else
106  force compilation error
107#endif
108}
109    ]])
110  ],[
111    tst_lib_xnet_required="yes"
112    LIBS="$LIBS -lxnet"
113  ])
114  AC_MSG_RESULT([$tst_lib_xnet_required])
115])
116
117
118dnl CARES_CHECK_AIX_ALL_SOURCE
119dnl -------------------------------------------------
120dnl Provides a replacement of traditional AC_AIX with
121dnl an uniform behaviour across all autoconf versions,
122dnl and with our own placement rules.
123
124AC_DEFUN([CARES_CHECK_AIX_ALL_SOURCE], [
125  AH_VERBATIM([_ALL_SOURCE],
126    [/* Define to 1 if OS is AIX. */
127#ifndef _ALL_SOURCE
128#  undef _ALL_SOURCE
129#endif])
130  AC_BEFORE([$0], [AC_SYS_LARGEFILE])dnl
131  AC_BEFORE([$0], [CARES_CONFIGURE_REENTRANT])dnl
132  AC_MSG_CHECKING([if OS is AIX (to define _ALL_SOURCE)])
133  AC_EGREP_CPP([yes_this_is_aix],[
134#ifdef _AIX
135   yes_this_is_aix
136#endif
137  ],[
138    AC_MSG_RESULT([yes])
139    AC_DEFINE(_ALL_SOURCE)
140  ],[
141    AC_MSG_RESULT([no])
142  ])
143])
144
145
146dnl CURL_CHECK_HEADER_WINDOWS
147dnl -------------------------------------------------
148dnl Check for compilable and valid windows.h header
149
150AC_DEFUN([CURL_CHECK_HEADER_WINDOWS], [
151  AC_CACHE_CHECK([for windows.h], [ac_cv_header_windows_h], [
152    AC_COMPILE_IFELSE([
153      AC_LANG_PROGRAM([[
154#undef inline
155#ifndef WIN32_LEAN_AND_MEAN
156#define WIN32_LEAN_AND_MEAN
157#endif
158#include <windows.h>
159      ]],[[
160#if defined(__CYGWIN__) || defined(__CEGCC__)
161        HAVE_WINDOWS_H shall not be defined.
162#else
163        int dummy=2*WINVER;
164#endif
165      ]])
166    ],[
167      ac_cv_header_windows_h="yes"
168    ],[
169      ac_cv_header_windows_h="no"
170    ])
171  ])
172  case "$ac_cv_header_windows_h" in
173    yes)
174      AC_DEFINE_UNQUOTED(HAVE_WINDOWS_H, 1,
175        [Define to 1 if you have the windows.h header file.])
176      AC_DEFINE_UNQUOTED(WIN32_LEAN_AND_MEAN, 1,
177        [Define to avoid automatic inclusion of winsock.h])
178      ;;
179  esac
180])
181
182
183dnl CURL_CHECK_NATIVE_WINDOWS
184dnl -------------------------------------------------
185dnl Check if building a native Windows target
186
187AC_DEFUN([CURL_CHECK_NATIVE_WINDOWS], [
188  AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
189  AC_CACHE_CHECK([whether build target is a native Windows one], [ac_cv_native_windows], [
190    if test "$ac_cv_header_windows_h" = "no"; then
191      ac_cv_native_windows="no"
192    else
193      AC_COMPILE_IFELSE([
194        AC_LANG_PROGRAM([[
195        ]],[[
196#if defined(__MINGW32__) || defined(__MINGW32CE__) || \
197   (defined(_MSC_VER) && (defined(_WIN32) || defined(_WIN64)))
198          int dummy=1;
199#else
200          Not a native Windows build target.
201#endif
202        ]])
203      ],[
204        ac_cv_native_windows="yes"
205      ],[
206        ac_cv_native_windows="no"
207      ])
208    fi
209  ])
210  case "$ac_cv_native_windows" in
211    yes)
212      AC_DEFINE_UNQUOTED(NATIVE_WINDOWS, 1,
213        [Define to 1 if you are building a native Windows target.])
214      ;;
215  esac
216])
217
218
219dnl CURL_CHECK_HEADER_WINSOCK
220dnl -------------------------------------------------
221dnl Check for compilable and valid winsock.h header
222
223AC_DEFUN([CURL_CHECK_HEADER_WINSOCK], [
224  AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
225  AC_CACHE_CHECK([for winsock.h], [ac_cv_header_winsock_h], [
226    AC_COMPILE_IFELSE([
227      AC_LANG_PROGRAM([[
228#undef inline
229#ifndef WIN32_LEAN_AND_MEAN
230#define WIN32_LEAN_AND_MEAN
231#endif
232#include <windows.h>
233#include <winsock.h>
234      ]],[[
235#if defined(__CYGWIN__) || defined(__CEGCC__)
236        HAVE_WINSOCK_H shall not be defined.
237#else
238        int dummy=WSACleanup();
239#endif
240      ]])
241    ],[
242      ac_cv_header_winsock_h="yes"
243    ],[
244      ac_cv_header_winsock_h="no"
245    ])
246  ])
247  case "$ac_cv_header_winsock_h" in
248    yes)
249      AC_DEFINE_UNQUOTED(HAVE_WINSOCK_H, 1,
250        [Define to 1 if you have the winsock.h header file.])
251      ;;
252  esac
253])
254
255
256dnl CURL_CHECK_HEADER_WINSOCK2
257dnl -------------------------------------------------
258dnl Check for compilable and valid winsock2.h header
259
260AC_DEFUN([CURL_CHECK_HEADER_WINSOCK2], [
261  AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
262  AC_CACHE_CHECK([for winsock2.h], [ac_cv_header_winsock2_h], [
263    AC_COMPILE_IFELSE([
264      AC_LANG_PROGRAM([[
265#undef inline
266#ifndef WIN32_LEAN_AND_MEAN
267#define WIN32_LEAN_AND_MEAN
268#endif
269#include <windows.h>
270#include <winsock2.h>
271      ]],[[
272#if defined(__CYGWIN__) || defined(__CEGCC__) || defined(__MINGW32CE__)
273        HAVE_WINSOCK2_H shall not be defined.
274#else
275        int dummy=2*IPPROTO_ESP;
276#endif
277      ]])
278    ],[
279      ac_cv_header_winsock2_h="yes"
280    ],[
281      ac_cv_header_winsock2_h="no"
282    ])
283  ])
284  case "$ac_cv_header_winsock2_h" in
285    yes)
286      AC_DEFINE_UNQUOTED(HAVE_WINSOCK2_H, 1,
287        [Define to 1 if you have the winsock2.h header file.])
288      ;;
289  esac
290])
291
292
293dnl CURL_CHECK_HEADER_WS2TCPIP
294dnl -------------------------------------------------
295dnl Check for compilable and valid ws2tcpip.h header
296
297AC_DEFUN([CURL_CHECK_HEADER_WS2TCPIP], [
298  AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
299  AC_CACHE_CHECK([for ws2tcpip.h], [ac_cv_header_ws2tcpip_h], [
300    AC_COMPILE_IFELSE([
301      AC_LANG_PROGRAM([[
302#undef inline
303#ifndef WIN32_LEAN_AND_MEAN
304#define WIN32_LEAN_AND_MEAN
305#endif
306#include <windows.h>
307#include <winsock2.h>
308#include <ws2tcpip.h>
309      ]],[[
310#if defined(__CYGWIN__) || defined(__CEGCC__) || defined(__MINGW32CE__)
311        HAVE_WS2TCPIP_H shall not be defined.
312#else
313        int dummy=2*IP_PKTINFO;
314#endif
315      ]])
316    ],[
317      ac_cv_header_ws2tcpip_h="yes"
318    ],[
319      ac_cv_header_ws2tcpip_h="no"
320    ])
321  ])
322  case "$ac_cv_header_ws2tcpip_h" in
323    yes)
324      AC_DEFINE_UNQUOTED(HAVE_WS2TCPIP_H, 1,
325        [Define to 1 if you have the ws2tcpip.h header file.])
326      ;;
327  esac
328])
329
330
331dnl CURL_CHECK_HEADER_MALLOC
332dnl -------------------------------------------------
333dnl Check for compilable and valid malloc.h header,
334dnl and check if it is needed even with stdlib.h
335
336AC_DEFUN([CURL_CHECK_HEADER_MALLOC], [
337  AC_CACHE_CHECK([for malloc.h], [ac_cv_header_malloc_h], [
338    AC_COMPILE_IFELSE([
339      AC_LANG_PROGRAM([[
340#include <malloc.h>
341      ]],[[
342        void *p = malloc(10);
343        void *q = calloc(10,10);
344        free(p);
345        free(q);
346      ]])
347    ],[
348      ac_cv_header_malloc_h="yes"
349    ],[
350      ac_cv_header_malloc_h="no"
351    ])
352  ])
353  if test "$ac_cv_header_malloc_h" = "yes"; then
354    AC_DEFINE_UNQUOTED(HAVE_MALLOC_H, 1,
355      [Define to 1 if you have the malloc.h header file.])
356    #
357    AC_COMPILE_IFELSE([
358      AC_LANG_PROGRAM([[
359#include <stdlib.h>
360      ]],[[
361        void *p = malloc(10);
362        void *q = calloc(10,10);
363        free(p);
364        free(q);
365      ]])
366    ],[
367      curl_cv_need_header_malloc_h="no"
368    ],[
369      curl_cv_need_header_malloc_h="yes"
370    ])
371    #
372    case "$curl_cv_need_header_malloc_h" in
373      yes)
374        AC_DEFINE_UNQUOTED(NEED_MALLOC_H, 1,
375          [Define to 1 if you need the malloc.h header file even with stdlib.h])
376        ;;
377    esac
378  fi
379])
380
381
382dnl CURL_CHECK_HEADER_MEMORY
383dnl -------------------------------------------------
384dnl Check for compilable and valid memory.h header,
385dnl and check if it is needed even with stdlib.h for
386dnl memory related functions.
387
388AC_DEFUN([CURL_CHECK_HEADER_MEMORY], [
389  AC_CACHE_CHECK([for memory.h], [ac_cv_header_memory_h], [
390    AC_COMPILE_IFELSE([
391      AC_LANG_PROGRAM([[
392#include <memory.h>
393      ]],[[
394        void *p = malloc(10);
395        void *q = calloc(10,10);
396        free(p);
397        free(q);
398      ]])
399    ],[
400      ac_cv_header_memory_h="yes"
401    ],[
402      ac_cv_header_memory_h="no"
403    ])
404  ])
405  if test "$ac_cv_header_memory_h" = "yes"; then
406    AC_DEFINE_UNQUOTED(HAVE_MEMORY_H, 1,
407      [Define to 1 if you have the memory.h header file.])
408    #
409    AC_COMPILE_IFELSE([
410      AC_LANG_PROGRAM([[
411#include <stdlib.h>
412      ]],[[
413        void *p = malloc(10);
414        void *q = calloc(10,10);
415        free(p);
416        free(q);
417      ]])
418    ],[
419      curl_cv_need_header_memory_h="no"
420    ],[
421      curl_cv_need_header_memory_h="yes"
422    ])
423    #
424    case "$curl_cv_need_header_memory_h" in
425      yes)
426        AC_DEFINE_UNQUOTED(NEED_MEMORY_H, 1,
427          [Define to 1 if you need the memory.h header file even with stdlib.h])
428        ;;
429    esac
430  fi
431])
432
433
434dnl CURL_CHECK_FUNC_GETNAMEINFO
435dnl -------------------------------------------------
436dnl Test if the getnameinfo function is available,
437dnl and check the types of five of its arguments.
438dnl If the function succeeds HAVE_GETNAMEINFO will be
439dnl defined, defining the types of the arguments in
440dnl GETNAMEINFO_TYPE_ARG1, GETNAMEINFO_TYPE_ARG2,
441dnl GETNAMEINFO_TYPE_ARG46 and GETNAMEINFO_TYPE_ARG7,
442dnl and also defining the type qualifier of first
443dnl argument in GETNAMEINFO_QUAL_ARG1.
444
445AC_DEFUN([CURL_CHECK_FUNC_GETNAMEINFO], [
446  AC_REQUIRE([CURL_CHECK_HEADER_WS2TCPIP])dnl
447  AC_CHECK_HEADERS(sys/types.h sys/socket.h netdb.h)
448  #
449  AC_MSG_CHECKING([for getnameinfo])
450  AC_LINK_IFELSE([
451    AC_LANG_FUNC_LINK_TRY([getnameinfo])
452  ],[
453    AC_MSG_RESULT([yes])
454    curl_cv_getnameinfo="yes"
455  ],[
456    AC_MSG_RESULT([no])
457    curl_cv_getnameinfo="no"
458  ])
459  #
460  if test "$curl_cv_getnameinfo" != "yes"; then
461    AC_MSG_CHECKING([deeper for getnameinfo])
462    AC_LINK_IFELSE([
463      AC_LANG_PROGRAM([[
464      ]],[[
465        getnameinfo();
466      ]])
467    ],[
468      AC_MSG_RESULT([yes])
469      curl_cv_getnameinfo="yes"
470    ],[
471      AC_MSG_RESULT([but still no])
472      curl_cv_getnameinfo="no"
473    ])
474  fi
475  #
476  if test "$curl_cv_getnameinfo" != "yes"; then
477    AC_MSG_CHECKING([deeper and deeper for getnameinfo])
478    AC_LINK_IFELSE([
479      AC_LANG_PROGRAM([[
480#undef inline
481#ifdef HAVE_WINDOWS_H
482#ifndef WIN32_LEAN_AND_MEAN
483#define WIN32_LEAN_AND_MEAN
484#endif
485#include <windows.h>
486#ifdef HAVE_WINSOCK2_H
487#include <winsock2.h>
488#ifdef HAVE_WS2TCPIP_H
489#include <ws2tcpip.h>
490#endif
491#endif
492#else
493#ifdef HAVE_SYS_TYPES_H
494#include <sys/types.h>
495#endif
496#ifdef HAVE_SYS_SOCKET_H
497#include <sys/socket.h>
498#endif
499#ifdef HAVE_NETDB_H
500#include <netdb.h>
501#endif
502#endif
503      ]],[[
504        getnameinfo(0, 0, 0, 0, 0, 0, 0);
505      ]])
506    ],[
507      AC_MSG_RESULT([yes])
508      curl_cv_getnameinfo="yes"
509    ],[
510      AC_MSG_RESULT([but still no])
511      curl_cv_getnameinfo="no"
512    ])
513  fi
514  #
515  if test "$curl_cv_getnameinfo" = "yes"; then
516    AC_CACHE_CHECK([types of arguments for getnameinfo],
517      [curl_cv_func_getnameinfo_args], [
518      curl_cv_func_getnameinfo_args="unknown"
519      for gni_arg1 in 'struct sockaddr *' 'const struct sockaddr *' 'void *'; do
520        for gni_arg2 in 'socklen_t' 'size_t' 'int'; do
521          for gni_arg46 in 'size_t' 'int' 'socklen_t' 'unsigned int' 'DWORD'; do
522            for gni_arg7 in 'int' 'unsigned int'; do
523              if test "$curl_cv_func_getnameinfo_args" = "unknown"; then
524                AC_COMPILE_IFELSE([
525                  AC_LANG_PROGRAM([[
526#undef inline
527#ifdef HAVE_WINDOWS_H
528#ifndef WIN32_LEAN_AND_MEAN
529#define WIN32_LEAN_AND_MEAN
530#endif
531#if (!defined(_WIN32_WINNT)) || (_WIN32_WINNT < 0x0501)
532#undef _WIN32_WINNT
533#define _WIN32_WINNT 0x0501
534#endif
535#include <windows.h>
536#ifdef HAVE_WINSOCK2_H
537#include <winsock2.h>
538#ifdef HAVE_WS2TCPIP_H
539#include <ws2tcpip.h>
540#endif
541#endif
542#define GNICALLCONV WSAAPI
543#else
544#ifdef HAVE_SYS_TYPES_H
545#include <sys/types.h>
546#endif
547#ifdef HAVE_SYS_SOCKET_H
548#include <sys/socket.h>
549#endif
550#ifdef HAVE_NETDB_H
551#include <netdb.h>
552#endif
553#define GNICALLCONV
554#endif
555                    extern int GNICALLCONV getnameinfo($gni_arg1, $gni_arg2,
556                                           char *, $gni_arg46,
557                                           char *, $gni_arg46,
558                                           $gni_arg7);
559                  ]],[[
560                    $gni_arg2 salen=0;
561                    $gni_arg46 hostlen=0;
562                    $gni_arg46 servlen=0;
563                    $gni_arg7 flags=0;
564                    int res = getnameinfo(0, salen, 0, hostlen, 0, servlen, flags);
565                  ]])
566                ],[
567                  curl_cv_func_getnameinfo_args="$gni_arg1,$gni_arg2,$gni_arg46,$gni_arg7"
568                ])
569              fi
570            done
571          done
572        done
573      done
574    ]) # AC-CACHE-CHECK
575    if test "$curl_cv_func_getnameinfo_args" = "unknown"; then
576      AC_MSG_WARN([Cannot find proper types to use for getnameinfo args])
577      AC_MSG_WARN([HAVE_GETNAMEINFO will not be defined])
578    else
579      gni_prev_IFS=$IFS; IFS=','
580      set dummy `echo "$curl_cv_func_getnameinfo_args" | sed 's/\*/\*/g'`
581      IFS=$gni_prev_IFS
582      shift
583      #
584      gni_qual_type_arg1=$[1]
585      #
586      AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG2, $[2],
587        [Define to the type of arg 2 for getnameinfo.])
588      AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG46, $[3],
589        [Define to the type of args 4 and 6 for getnameinfo.])
590      AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG7, $[4],
591        [Define to the type of arg 7 for getnameinfo.])
592      #
593      prev_sh_opts=$-
594      #
595      case $prev_sh_opts in
596        *f*)
597          ;;
598        *)
599          set -f
600          ;;
601      esac
602      #
603      case "$gni_qual_type_arg1" in
604        const*)
605          gni_qual_arg1=const
606          gni_type_arg1=`echo $gni_qual_type_arg1 | sed 's/^const //'`
607        ;;
608        *)
609          gni_qual_arg1=
610          gni_type_arg1=$gni_qual_type_arg1
611        ;;
612      esac
613      #
614      AC_DEFINE_UNQUOTED(GETNAMEINFO_QUAL_ARG1, $gni_qual_arg1,
615        [Define to the type qualifier of arg 1 for getnameinfo.])
616      AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG1, $gni_type_arg1,
617        [Define to the type of arg 1 for getnameinfo.])
618      #
619      case $prev_sh_opts in
620        *f*)
621          ;;
622        *)
623          set +f
624          ;;
625      esac
626      #
627      AC_DEFINE_UNQUOTED(HAVE_GETNAMEINFO, 1,
628        [Define to 1 if you have the getnameinfo function.])
629      ac_cv_func_getnameinfo="yes"
630    fi
631  fi
632])
633
634
635dnl TYPE_SOCKADDR_STORAGE
636dnl -------------------------------------------------
637dnl Check for struct sockaddr_storage. Most IPv6-enabled
638dnl hosts have it, but AIX 4.3 is one known exception.
639
640AC_DEFUN([TYPE_SOCKADDR_STORAGE],
641[
642   AC_CHECK_TYPE([struct sockaddr_storage],
643        AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE, 1,
644                  [if struct sockaddr_storage is defined]), ,
645   [
646#undef inline
647#ifdef HAVE_WINDOWS_H
648#ifndef WIN32_LEAN_AND_MEAN
649#define WIN32_LEAN_AND_MEAN
650#endif
651#include <windows.h>
652#ifdef HAVE_WINSOCK2_H
653#include <winsock2.h>
654#endif
655#else
656#ifdef HAVE_SYS_TYPES_H
657#include <sys/types.h>
658#endif
659#ifdef HAVE_SYS_SOCKET_H
660#include <sys/socket.h>
661#endif
662#ifdef HAVE_NETINET_IN_H
663#include <netinet/in.h>
664#endif
665#ifdef HAVE_ARPA_INET_H
666#include <arpa/inet.h>
667#endif
668#endif
669   ])
670])
671
672
673dnl CURL_CHECK_NI_WITHSCOPEID
674dnl -------------------------------------------------
675dnl Check for working NI_WITHSCOPEID in getnameinfo()
676
677AC_DEFUN([CURL_CHECK_NI_WITHSCOPEID], [
678  AC_REQUIRE([CURL_CHECK_FUNC_GETNAMEINFO])dnl
679  AC_REQUIRE([TYPE_SOCKADDR_STORAGE])dnl
680  AC_CHECK_HEADERS(stdio.h sys/types.h sys/socket.h \
681                   netdb.h netinet/in.h arpa/inet.h)
682  #
683  AC_CACHE_CHECK([for working NI_WITHSCOPEID],
684    [ac_cv_working_ni_withscopeid], [
685    AC_RUN_IFELSE([
686      AC_LANG_PROGRAM([[
687#ifdef HAVE_STDLIB_H
688#include <stdlib.h>
689#endif
690#ifdef HAVE_STDIO_H
691#include <stdio.h>
692#endif
693#ifdef HAVE_SYS_TYPES_H
694#include <sys/types.h>
695#endif
696#ifdef HAVE_SYS_SOCKET_H
697#include <sys/socket.h>
698#endif
699#ifdef HAVE_NETDB_H
700#include <netdb.h>
701#endif
702#ifdef HAVE_NETINET_IN_H
703#include <netinet/in.h>
704#endif
705#ifdef HAVE_ARPA_INET_H
706#include <arpa/inet.h>
707#endif
708      ]],[[
709#if defined(NI_WITHSCOPEID) && defined(HAVE_GETNAMEINFO)
710#ifdef HAVE_STRUCT_SOCKADDR_STORAGE
711        struct sockaddr_storage sa;
712#else
713        unsigned char sa[256];
714#endif
715        char hostbuf[NI_MAXHOST];
716        int rc;
717        GETNAMEINFO_TYPE_ARG2 salen = (GETNAMEINFO_TYPE_ARG2)sizeof(sa);
718        GETNAMEINFO_TYPE_ARG46 hostlen = (GETNAMEINFO_TYPE_ARG46)sizeof(hostbuf);
719        GETNAMEINFO_TYPE_ARG7 flags = NI_NUMERICHOST | NI_NUMERICSERV | NI_WITHSCOPEID;
720        int fd = socket(AF_INET6, SOCK_STREAM, 0);
721        if(fd < 0) {
722          perror("socket()");
723          return 1; /* Error creating socket */
724        }
725        rc = getsockname(fd, (GETNAMEINFO_TYPE_ARG1)&sa, &salen);
726        if(rc) {
727          perror("getsockname()");
728          return 2; /* Error retrieving socket name */
729        }
730        rc = getnameinfo((GETNAMEINFO_TYPE_ARG1)&sa, salen, hostbuf, hostlen, NULL, 0, flags);
731        if(rc) {
732          printf("rc = %s\n", gai_strerror(rc));
733          return 3; /* Error translating socket address */
734        }
735        return 0; /* Ok, NI_WITHSCOPEID works */
736#else
737        return 4; /* Error, NI_WITHSCOPEID not defined or no getnameinfo() */
738#endif
739      ]]) # AC-LANG-PROGRAM
740    ],[
741      # Exit code == 0. Program worked.
742      ac_cv_working_ni_withscopeid="yes"
743    ],[
744      # Exit code != 0. Program failed.
745      ac_cv_working_ni_withscopeid="no"
746    ],[
747      # Program is not run when cross-compiling. So we assume
748      # NI_WITHSCOPEID will work if we are able to compile it.
749      AC_COMPILE_IFELSE([
750        AC_LANG_PROGRAM([[
751#include <sys/types.h>
752#include <sys/socket.h>
753#include <netdb.h>
754        ]],[[
755          unsigned int dummy= NI_NUMERICHOST | NI_NUMERICSERV | NI_WITHSCOPEID;
756        ]])
757      ],[
758        ac_cv_working_ni_withscopeid="yes"
759      ],[
760        ac_cv_working_ni_withscopeid="no"
761      ]) # AC-COMPILE-IFELSE
762    ]) # AC-RUN-IFELSE
763  ]) # AC-CACHE-CHECK
764  case "$ac_cv_working_ni_withscopeid" in
765    yes)
766      AC_DEFINE(HAVE_NI_WITHSCOPEID, 1,
767        [Define to 1 if NI_WITHSCOPEID exists and works.])
768      ;;
769  esac
770])
771
772
773dnl CURL_CHECK_FUNC_RECV
774dnl -------------------------------------------------
775dnl Test if the socket recv() function is available,
776dnl and check its return type and the types of its
777dnl arguments. If the function succeeds HAVE_RECV
778dnl will be defined, defining the types of the arguments
779dnl in RECV_TYPE_ARG1, RECV_TYPE_ARG2, RECV_TYPE_ARG3
780dnl and RECV_TYPE_ARG4, defining the type of the function
781dnl return value in RECV_TYPE_RETV.
782
783AC_DEFUN([CURL_CHECK_FUNC_RECV], [
784  AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl
785  AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
786  AC_CHECK_HEADERS(sys/types.h sys/socket.h)
787  #
788  AC_MSG_CHECKING([for recv])
789  AC_LINK_IFELSE([
790    AC_LANG_PROGRAM([[
791#undef inline
792#ifdef HAVE_WINDOWS_H
793#ifndef WIN32_LEAN_AND_MEAN
794#define WIN32_LEAN_AND_MEAN
795#endif
796#include <windows.h>
797#ifdef HAVE_WINSOCK2_H
798#include <winsock2.h>
799#else
800#ifdef HAVE_WINSOCK_H
801#include <winsock.h>
802#endif
803#endif
804#else
805#ifdef HAVE_SYS_TYPES_H
806#include <sys/types.h>
807#endif
808#ifdef HAVE_SYS_SOCKET_H
809#include <sys/socket.h>
810#endif
811#endif
812    ]],[[
813      recv(0, 0, 0, 0);
814    ]])
815  ],[
816    AC_MSG_RESULT([yes])
817    curl_cv_recv="yes"
818  ],[
819    AC_MSG_RESULT([no])
820    curl_cv_recv="no"
821  ])
822  #
823  if test "$curl_cv_recv" = "yes"; then
824    AC_CACHE_CHECK([types of args and return type for recv],
825      [curl_cv_func_recv_args], [
826      curl_cv_func_recv_args="unknown"
827      for recv_retv in 'int' 'ssize_t'; do
828        for recv_arg1 in 'int' 'ssize_t' 'SOCKET'; do
829          for recv_arg2 in 'char *' 'void *'; do
830            for recv_arg3 in 'size_t' 'int' 'socklen_t' 'unsigned int'; do
831              for recv_arg4 in 'int' 'unsigned int'; do
832                if test "$curl_cv_func_recv_args" = "unknown"; then
833                  AC_COMPILE_IFELSE([
834                    AC_LANG_PROGRAM([[
835#undef inline
836#ifdef HAVE_WINDOWS_H
837#ifndef WIN32_LEAN_AND_MEAN
838#define WIN32_LEAN_AND_MEAN
839#endif
840#include <windows.h>
841#ifdef HAVE_WINSOCK2_H
842#include <winsock2.h>
843#else
844#ifdef HAVE_WINSOCK_H
845#include <winsock.h>
846#endif
847#endif
848#define RECVCALLCONV PASCAL
849#else
850#ifdef HAVE_SYS_TYPES_H
851#include <sys/types.h>
852#endif
853#ifdef HAVE_SYS_SOCKET_H
854#include <sys/socket.h>
855#endif
856#define RECVCALLCONV
857#endif
858                      extern $recv_retv RECVCALLCONV
859                      recv($recv_arg1, $recv_arg2, $recv_arg3, $recv_arg4);
860                    ]],[[
861                      $recv_arg1 s=0;
862                      $recv_arg2 buf=0;
863                      $recv_arg3 len=0;
864                      $recv_arg4 flags=0;
865                      $recv_retv res = recv(s, buf, len, flags);
866                    ]])
867                  ],[
868                    curl_cv_func_recv_args="$recv_arg1,$recv_arg2,$recv_arg3,$recv_arg4,$recv_retv"
869                  ])
870                fi
871              done
872            done
873          done
874        done
875      done
876    ]) # AC-CACHE-CHECK
877    if test "$curl_cv_func_recv_args" = "unknown"; then
878      AC_MSG_ERROR([Cannot find proper types to use for recv args])
879    else
880      recv_prev_IFS=$IFS; IFS=','
881      set dummy `echo "$curl_cv_func_recv_args" | sed 's/\*/\*/g'`
882      IFS=$recv_prev_IFS
883      shift
884      #
885      AC_DEFINE_UNQUOTED(RECV_TYPE_ARG1, $[1],
886        [Define to the type of arg 1 for recv.])
887      AC_DEFINE_UNQUOTED(RECV_TYPE_ARG2, $[2],
888        [Define to the type of arg 2 for recv.])
889      AC_DEFINE_UNQUOTED(RECV_TYPE_ARG3, $[3],
890        [Define to the type of arg 3 for recv.])
891      AC_DEFINE_UNQUOTED(RECV_TYPE_ARG4, $[4],
892        [Define to the type of arg 4 for recv.])
893      AC_DEFINE_UNQUOTED(RECV_TYPE_RETV, $[5],
894        [Define to the function return type for recv.])
895      #
896      AC_DEFINE_UNQUOTED(HAVE_RECV, 1,
897        [Define to 1 if you have the recv function.])
898      ac_cv_func_recv="yes"
899    fi
900  else
901    AC_MSG_ERROR([Unable to link function recv])
902  fi
903])
904
905
906dnl CURL_CHECK_FUNC_SEND
907dnl -------------------------------------------------
908dnl Test if the socket send() function is available,
909dnl and check its return type and the types of its
910dnl arguments. If the function succeeds HAVE_SEND
911dnl will be defined, defining the types of the arguments
912dnl in SEND_TYPE_ARG1, SEND_TYPE_ARG2, SEND_TYPE_ARG3
913dnl and SEND_TYPE_ARG4, defining the type of the function
914dnl return value in SEND_TYPE_RETV, and also defining the
915dnl type qualifier of second argument in SEND_QUAL_ARG2.
916
917AC_DEFUN([CURL_CHECK_FUNC_SEND], [
918  AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl
919  AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
920  AC_CHECK_HEADERS(sys/types.h sys/socket.h)
921  #
922  AC_MSG_CHECKING([for send])
923  AC_LINK_IFELSE([
924    AC_LANG_PROGRAM([[
925#undef inline
926#ifdef HAVE_WINDOWS_H
927#ifndef WIN32_LEAN_AND_MEAN
928#define WIN32_LEAN_AND_MEAN
929#endif
930#include <windows.h>
931#ifdef HAVE_WINSOCK2_H
932#include <winsock2.h>
933#else
934#ifdef HAVE_WINSOCK_H
935#include <winsock.h>
936#endif
937#endif
938#else
939#ifdef HAVE_SYS_TYPES_H
940#include <sys/types.h>
941#endif
942#ifdef HAVE_SYS_SOCKET_H
943#include <sys/socket.h>
944#endif
945#endif
946    ]],[[
947      send(0, 0, 0, 0);
948    ]])
949  ],[
950    AC_MSG_RESULT([yes])
951    curl_cv_send="yes"
952  ],[
953    AC_MSG_RESULT([no])
954    curl_cv_send="no"
955  ])
956  #
957  if test "$curl_cv_send" = "yes"; then
958    AC_CACHE_CHECK([types of args and return type for send],
959      [curl_cv_func_send_args], [
960      curl_cv_func_send_args="unknown"
961      for send_retv in 'int' 'ssize_t'; do
962        for send_arg1 in 'int' 'ssize_t' 'SOCKET'; do
963          for send_arg2 in 'char *' 'void *' 'const char *' 'const void *'; do
964            for send_arg3 in 'size_t' 'int' 'socklen_t' 'unsigned int'; do
965              for send_arg4 in 'int' 'unsigned int'; do
966                if test "$curl_cv_func_send_args" = "unknown"; then
967                  AC_COMPILE_IFELSE([
968                    AC_LANG_PROGRAM([[
969#undef inline
970#ifdef HAVE_WINDOWS_H
971#ifndef WIN32_LEAN_AND_MEAN
972#define WIN32_LEAN_AND_MEAN
973#endif
974#include <windows.h>
975#ifdef HAVE_WINSOCK2_H
976#include <winsock2.h>
977#else
978#ifdef HAVE_WINSOCK_H
979#include <winsock.h>
980#endif
981#endif
982#define SENDCALLCONV PASCAL
983#else
984#ifdef HAVE_SYS_TYPES_H
985#include <sys/types.h>
986#endif
987#ifdef HAVE_SYS_SOCKET_H
988#include <sys/socket.h>
989#endif
990#define SENDCALLCONV
991#endif
992                      extern $send_retv SENDCALLCONV
993                      send($send_arg1, $send_arg2, $send_arg3, $send_arg4);
994                    ]],[[
995                      $send_arg1 s=0;
996                      $send_arg3 len=0;
997                      $send_arg4 flags=0;
998                      $send_retv res = send(s, 0, len, flags);
999                    ]])
1000                  ],[
1001                    curl_cv_func_send_args="$send_arg1,$send_arg2,$send_arg3,$send_arg4,$send_retv"
1002                  ])
1003                fi
1004              done
1005            done
1006          done
1007        done
1008      done
1009    ]) # AC-CACHE-CHECK
1010    if test "$curl_cv_func_send_args" = "unknown"; then
1011      AC_MSG_ERROR([Cannot find proper types to use for send args])
1012    else
1013      send_prev_IFS=$IFS; IFS=','
1014      set dummy `echo "$curl_cv_func_send_args" | sed 's/\*/\*/g'`
1015      IFS=$send_prev_IFS
1016      shift
1017      #
1018      send_qual_type_arg2=$[2]
1019      #
1020      AC_DEFINE_UNQUOTED(SEND_TYPE_ARG1, $[1],
1021        [Define to the type of arg 1 for send.])
1022      AC_DEFINE_UNQUOTED(SEND_TYPE_ARG3, $[3],
1023        [Define to the type of arg 3 for send.])
1024      AC_DEFINE_UNQUOTED(SEND_TYPE_ARG4, $[4],
1025        [Define to the type of arg 4 for send.])
1026      AC_DEFINE_UNQUOTED(SEND_TYPE_RETV, $[5],
1027        [Define to the function return type for send.])
1028      #
1029      prev_sh_opts=$-
1030      #
1031      case $prev_sh_opts in
1032        *f*)
1033          ;;
1034        *)
1035          set -f
1036          ;;
1037      esac
1038      #
1039      case "$send_qual_type_arg2" in
1040        const*)
1041          send_qual_arg2=const
1042          send_type_arg2=`echo $send_qual_type_arg2 | sed 's/^const //'`
1043        ;;
1044        *)
1045          send_qual_arg2=
1046          send_type_arg2=$send_qual_type_arg2
1047        ;;
1048      esac
1049      #
1050      AC_DEFINE_UNQUOTED(SEND_QUAL_ARG2, $send_qual_arg2,
1051        [Define to the type qualifier of arg 2 for send.])
1052      AC_DEFINE_UNQUOTED(SEND_TYPE_ARG2, $send_type_arg2,
1053        [Define to the type of arg 2 for send.])
1054      #
1055      case $prev_sh_opts in
1056        *f*)
1057          ;;
1058        *)
1059          set +f
1060          ;;
1061      esac
1062      #
1063      AC_DEFINE_UNQUOTED(HAVE_SEND, 1,
1064        [Define to 1 if you have the send function.])
1065      ac_cv_func_send="yes"
1066    fi
1067  else
1068    AC_MSG_ERROR([Unable to link function send])
1069  fi
1070])
1071
1072
1073dnl CURL_CHECK_FUNC_RECVFROM
1074dnl -------------------------------------------------
1075dnl Test if the socket recvfrom() function is available,
1076dnl and check its return type and the types of its
1077dnl arguments. If the function succeeds HAVE_RECVFROM
1078dnl will be defined, defining the types of the arguments
1079dnl in RECVFROM_TYPE_ARG1, RECVFROM_TYPE_ARG2, and so on
1080dnl to RECVFROM_TYPE_ARG6, defining also the type of the
1081dnl function return value in RECVFROM_TYPE_RETV.
1082dnl Notice that the types returned for pointer arguments
1083dnl will actually be the type pointed by the pointer.
1084
1085AC_DEFUN([CURL_CHECK_FUNC_RECVFROM], [
1086  AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl
1087  AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
1088  AC_CHECK_HEADERS(sys/types.h sys/socket.h)
1089  #
1090  AC_MSG_CHECKING([for recvfrom])
1091  AC_LINK_IFELSE([
1092    AC_LANG_PROGRAM([[
1093#undef inline
1094#ifdef HAVE_WINDOWS_H
1095#ifndef WIN32_LEAN_AND_MEAN
1096#define WIN32_LEAN_AND_MEAN
1097#endif
1098#include <windows.h>
1099#ifdef HAVE_WINSOCK2_H
1100#include <winsock2.h>
1101#else
1102#ifdef HAVE_WINSOCK_H
1103#include <winsock.h>
1104#endif
1105#endif
1106#else
1107#ifdef HAVE_SYS_TYPES_H
1108#include <sys/types.h>
1109#endif
1110#ifdef HAVE_SYS_SOCKET_H
1111#include <sys/socket.h>
1112#endif
1113#endif
1114    ]],[[
1115      recvfrom(0, 0, 0, 0, 0, 0);
1116    ]])
1117  ],[
1118    AC_MSG_RESULT([yes])
1119    curl_cv_recvfrom="yes"
1120  ],[
1121    AC_MSG_RESULT([no])
1122    curl_cv_recvfrom="no"
1123  ])
1124  #
1125  if test "$curl_cv_recvfrom" = "yes"; then
1126    AC_CACHE_CHECK([types of args and return type for recvfrom],
1127      [curl_cv_func_recvfrom_args], [
1128      curl_cv_func_recvfrom_args="unknown"
1129      for recvfrom_retv in 'int' 'ssize_t'; do
1130        for recvfrom_arg1 in 'int' 'ssize_t' 'SOCKET'; do
1131          for recvfrom_arg2 in 'char *' 'void *'; do
1132            for recvfrom_arg3 in 'size_t' 'int' 'socklen_t' 'unsigned int'; do
1133              for recvfrom_arg4 in 'int' 'unsigned int'; do
1134                for recvfrom_arg5 in 'struct sockaddr *' 'void *' 'const struct sockaddr *'; do
1135                  for recvfrom_arg6 in 'socklen_t *' 'int *' 'unsigned int *' 'size_t *' 'void *'; do
1136                    if test "$curl_cv_func_recvfrom_args" = "unknown"; then
1137                      AC_COMPILE_IFELSE([
1138                        AC_LANG_PROGRAM([[
1139#undef inline
1140#ifdef HAVE_WINDOWS_H
1141#ifndef WIN32_LEAN_AND_MEAN
1142#define WIN32_LEAN_AND_MEAN
1143#endif
1144#include <windows.h>
1145#ifdef HAVE_WINSOCK2_H
1146#include <winsock2.h>
1147#else
1148#ifdef HAVE_WINSOCK_H
1149#include <winsock.h>
1150#endif
1151#endif
1152#define RECVFROMCALLCONV PASCAL
1153#else
1154#ifdef HAVE_SYS_TYPES_H
1155#include <sys/types.h>
1156#endif
1157#ifdef HAVE_SYS_SOCKET_H
1158#include <sys/socket.h>
1159#endif
1160#define RECVFROMCALLCONV
1161#endif
1162                          extern $recvfrom_retv RECVFROMCALLCONV
1163                          recvfrom($recvfrom_arg1, $recvfrom_arg2,
1164                                   $recvfrom_arg3, $recvfrom_arg4,
1165                                   $recvfrom_arg5, $recvfrom_arg6);
1166                        ]],[[
1167                          $recvfrom_arg1 s=0;
1168                          $recvfrom_arg2 buf=0;
1169                          $recvfrom_arg3 len=0;
1170                          $recvfrom_arg4 flags=0;
1171                          $recvfrom_arg5 addr=0;
1172                          $recvfrom_arg6 addrlen=0;
1173                          $recvfrom_retv res=0;
1174                          res = recvfrom(s, buf, len, flags, addr, addrlen);
1175                        ]])
1176                      ],[
1177                        curl_cv_func_recvfrom_args="$recvfrom_arg1,$recvfrom_arg2,$recvfrom_arg3,$recvfrom_arg4,$recvfrom_arg5,$recvfrom_arg6,$recvfrom_retv"
1178                      ])
1179                    fi
1180                  done
1181                done
1182              done
1183            done
1184          done
1185        done
1186      done
1187    ]) # AC-CACHE-CHECK
1188    # Nearly last minute change for this release starts here
1189    AC_DEFINE_UNQUOTED(HAVE_RECVFROM, 1,
1190      [Define to 1 if you have the recvfrom function.])
1191    ac_cv_func_recvfrom="yes"
1192    # Nearly last minute change for this release ends here
1193    if test "$curl_cv_func_recvfrom_args" = "unknown"; then
1194      AC_MSG_WARN([Cannot find proper types to use for recvfrom args])
1195    else
1196      recvfrom_prev_IFS=$IFS; IFS=','
1197      set dummy `echo "$curl_cv_func_recvfrom_args" | sed 's/\*/\*/g'`
1198      IFS=$recvfrom_prev_IFS
1199      shift
1200      #
1201      recvfrom_ptrt_arg2=$[2]
1202      recvfrom_qual_ptrt_arg5=$[5]
1203      recvfrom_ptrt_arg6=$[6]
1204      #
1205      AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG1, $[1],
1206        [Define to the type of arg 1 for recvfrom.])
1207      AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG3, $[3],
1208        [Define to the type of arg 3 for recvfrom.])
1209      AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG4, $[4],
1210        [Define to the type of arg 4 for recvfrom.])
1211      AC_DEFINE_UNQUOTED(RECVFROM_TYPE_RETV, $[7],
1212        [Define to the function return type for recvfrom.])
1213      #
1214      prev_sh_opts=$-
1215      #
1216      case $prev_sh_opts in
1217        *f*)
1218          ;;
1219        *)
1220          set -f
1221          ;;
1222      esac
1223      #
1224      case "$recvfrom_qual_ptrt_arg5" in
1225        const*)
1226          recvfrom_qual_arg5=const
1227          recvfrom_ptrt_arg5=`echo $recvfrom_qual_ptrt_arg5 | sed 's/^const //'`
1228        ;;
1229        *)
1230          recvfrom_qual_arg5=
1231          recvfrom_ptrt_arg5=$recvfrom_qual_ptrt_arg5
1232        ;;
1233      esac
1234      #
1235      recvfrom_type_arg2=`echo $recvfrom_ptrt_arg2 | sed 's/ \*//'`
1236      recvfrom_type_arg5=`echo $recvfrom_ptrt_arg5 | sed 's/ \*//'`
1237      recvfrom_type_arg6=`echo $recvfrom_ptrt_arg6 | sed 's/ \*//'`
1238      #
1239      AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG2, $recvfrom_type_arg2,
1240        [Define to the type pointed by arg 2 for recvfrom.])
1241      AC_DEFINE_UNQUOTED(RECVFROM_QUAL_ARG5, $recvfrom_qual_arg5,
1242        [Define to the type qualifier pointed by arg 5 for recvfrom.])
1243      AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG5, $recvfrom_type_arg5,
1244        [Define to the type pointed by arg 5 for recvfrom.])
1245      AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG6, $recvfrom_type_arg6,
1246        [Define to the type pointed by arg 6 for recvfrom.])
1247      #
1248      if test "$recvfrom_type_arg2" = "void"; then
1249        AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG2_IS_VOID, 1,
1250          [Define to 1 if the type pointed by arg 2 for recvfrom is void.])
1251      fi
1252      if test "$recvfrom_type_arg5" = "void"; then
1253        AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG5_IS_VOID, 1,
1254          [Define to 1 if the type pointed by arg 5 for recvfrom is void.])
1255      fi
1256      if test "$recvfrom_type_arg6" = "void"; then
1257        AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG6_IS_VOID, 1,
1258          [Define to 1 if the type pointed by arg 6 for recvfrom is void.])
1259      fi
1260      #
1261      case $prev_sh_opts in
1262        *f*)
1263          ;;
1264        *)
1265          set +f
1266          ;;
1267      esac
1268      #
1269      AC_DEFINE_UNQUOTED(HAVE_RECVFROM, 1,
1270        [Define to 1 if you have the recvfrom function.])
1271      ac_cv_func_recvfrom="yes"
1272    fi
1273  else
1274    AC_MSG_WARN([Unable to link function recvfrom])
1275    AC_MSG_WARN([Your system will be vulnerable to some forms of DNS cache poisoning])
1276  fi
1277])
1278
1279
1280dnl CURL_CHECK_MSG_NOSIGNAL
1281dnl -------------------------------------------------
1282dnl Check for MSG_NOSIGNAL
1283
1284AC_DEFUN([CURL_CHECK_MSG_NOSIGNAL], [
1285  AC_CHECK_HEADERS(sys/types.h sys/socket.h)
1286  AC_CACHE_CHECK([for MSG_NOSIGNAL], [ac_cv_msg_nosignal], [
1287    AC_COMPILE_IFELSE([
1288      AC_LANG_PROGRAM([[
1289#undef inline
1290#ifdef HAVE_WINDOWS_H
1291#ifndef WIN32_LEAN_AND_MEAN
1292#define WIN32_LEAN_AND_MEAN
1293#endif
1294#include <windows.h>
1295#ifdef HAVE_WINSOCK2_H
1296#include <winsock2.h>
1297#else
1298#ifdef HAVE_WINSOCK_H
1299#include <winsock.h>
1300#endif
1301#endif
1302#else
1303#ifdef HAVE_SYS_TYPES_H
1304#include <sys/types.h>
1305#endif
1306#ifdef HAVE_SYS_SOCKET_H
1307#include <sys/socket.h>
1308#endif
1309#endif
1310      ]],[[
1311        int flag=MSG_NOSIGNAL;
1312      ]])
1313    ],[
1314      ac_cv_msg_nosignal="yes"
1315    ],[
1316      ac_cv_msg_nosignal="no"
1317    ])
1318  ])
1319  case "$ac_cv_msg_nosignal" in
1320    yes)
1321      AC_DEFINE_UNQUOTED(HAVE_MSG_NOSIGNAL, 1,
1322        [Define to 1 if you have the MSG_NOSIGNAL flag.])
1323      ;;
1324  esac
1325])
1326
1327
1328dnl CURL_CHECK_STRUCT_TIMEVAL
1329dnl -------------------------------------------------
1330dnl Check for timeval struct
1331
1332AC_DEFUN([CURL_CHECK_STRUCT_TIMEVAL], [
1333  AC_REQUIRE([AC_HEADER_TIME])dnl
1334  AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl
1335  AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
1336  AC_CHECK_HEADERS(sys/types.h sys/time.h time.h sys/socket.h)
1337  AC_CACHE_CHECK([for struct timeval], [ac_cv_struct_timeval], [
1338    AC_COMPILE_IFELSE([
1339      AC_LANG_PROGRAM([[
1340#undef inline
1341#ifdef HAVE_WINDOWS_H
1342#ifndef WIN32_LEAN_AND_MEAN
1343#define WIN32_LEAN_AND_MEAN
1344#endif
1345#include <windows.h>
1346#ifdef HAVE_WINSOCK2_H
1347#include <winsock2.h>
1348#else
1349#ifdef HAVE_WINSOCK_H
1350#include <winsock.h>
1351#endif
1352#endif
1353#endif
1354#ifdef HAVE_SYS_TYPES_H
1355#include <sys/types.h>
1356#endif
1357#ifdef HAVE_SYS_TIME_H
1358#include <sys/time.h>
1359#ifdef TIME_WITH_SYS_TIME
1360#include <time.h>
1361#endif
1362#else
1363#ifdef HAVE_TIME_H
1364#include <time.h>
1365#endif
1366#endif
1367#ifdef HAVE_SYS_SOCKET_H
1368#include <sys/socket.h>
1369#endif
1370      ]],[[
1371        struct timeval ts;
1372        ts.tv_sec  = 0;
1373        ts.tv_usec = 0;
1374      ]])
1375    ],[
1376      ac_cv_struct_timeval="yes"
1377    ],[
1378      ac_cv_struct_timeval="no"
1379    ])
1380  ])
1381  case "$ac_cv_struct_timeval" in
1382    yes)
1383      AC_DEFINE_UNQUOTED(HAVE_STRUCT_TIMEVAL, 1,
1384        [Define to 1 if you have the timeval struct.])
1385      ;;
1386  esac
1387])
1388
1389
1390dnl TYPE_SIG_ATOMIC_T
1391dnl -------------------------------------------------
1392dnl Check if the sig_atomic_t type is available, and
1393dnl verify if it is already defined as volatile.
1394
1395AC_DEFUN([TYPE_SIG_ATOMIC_T], [
1396  AC_CHECK_HEADERS(signal.h)
1397  AC_CHECK_TYPE([sig_atomic_t],[
1398    AC_DEFINE(HAVE_SIG_ATOMIC_T, 1,
1399      [Define to 1 if sig_atomic_t is an available typedef.])
1400  ], ,[
1401#ifdef HAVE_SIGNAL_H
1402#include <signal.h>
1403#endif
1404  ])
1405  case "$ac_cv_type_sig_atomic_t" in
1406    yes)
1407      #
1408      AC_MSG_CHECKING([if sig_atomic_t is already defined as volatile])
1409      AC_LINK_IFELSE([
1410        AC_LANG_PROGRAM([[
1411#ifdef HAVE_SIGNAL_H
1412#include <signal.h>
1413#endif
1414        ]],[[
1415          static volatile sig_atomic_t dummy = 0;
1416        ]])
1417      ],[
1418        AC_MSG_RESULT([no])
1419        ac_cv_sig_atomic_t_volatile="no"
1420      ],[
1421        AC_MSG_RESULT([yes])
1422        ac_cv_sig_atomic_t_volatile="yes"
1423      ])
1424      #
1425      if test "$ac_cv_sig_atomic_t_volatile" = "yes"; then
1426        AC_DEFINE(HAVE_SIG_ATOMIC_T_VOLATILE, 1,
1427          [Define to 1 if sig_atomic_t is already defined as volatile.])
1428      fi
1429      ;;
1430  esac
1431])
1432
1433
1434dnl TYPE_IN_ADDR_T
1435dnl -------------------------------------------------
1436dnl Check for in_addr_t: it is used to receive the return code of inet_addr()
1437dnl and a few other things.
1438
1439AC_DEFUN([TYPE_IN_ADDR_T], [
1440  AC_CHECK_TYPE([in_addr_t], ,[
1441    dnl in_addr_t not available
1442    AC_CACHE_CHECK([for in_addr_t equivalent],
1443      [curl_cv_in_addr_t_equiv], [
1444      curl_cv_in_addr_t_equiv="unknown"
1445      for t in "unsigned long" int size_t unsigned long; do
1446        if test "$curl_cv_in_addr_t_equiv" = "unknown"; then
1447          AC_LINK_IFELSE([
1448            AC_LANG_PROGRAM([[
1449#undef inline
1450#ifdef HAVE_WINDOWS_H
1451#ifndef WIN32_LEAN_AND_MEAN
1452#define WIN32_LEAN_AND_MEAN
1453#endif
1454#include <windows.h>
1455#ifdef HAVE_WINSOCK2_H
1456#include <winsock2.h>
1457#else
1458#ifdef HAVE_WINSOCK_H
1459#include <winsock.h>
1460#endif
1461#endif
1462#else
1463#ifdef HAVE_SYS_TYPES_H
1464#include <sys/types.h>
1465#endif
1466#ifdef HAVE_SYS_SOCKET_H
1467#include <sys/socket.h>
1468#endif
1469#ifdef HAVE_NETINET_IN_H
1470#include <netinet/in.h>
1471#endif
1472#ifdef HAVE_ARPA_INET_H
1473#include <arpa/inet.h>
1474#endif
1475#endif
1476            ]],[[
1477              $t data = inet_addr ("1.2.3.4");
1478            ]])
1479          ],[
1480            curl_cv_in_addr_t_equiv="$t"
1481          ])
1482        fi
1483      done
1484    ])
1485    case "$curl_cv_in_addr_t_equiv" in
1486      unknown)
1487        AC_MSG_ERROR([Cannot find a type to use in place of in_addr_t])
1488        ;;
1489      *)
1490        AC_DEFINE_UNQUOTED(in_addr_t, $curl_cv_in_addr_t_equiv,
1491          [Type to use in place of in_addr_t when system does not provide it.])
1492        ;;
1493    esac
1494  ],[
1495#undef inline
1496#ifdef HAVE_WINDOWS_H
1497#ifndef WIN32_LEAN_AND_MEAN
1498#define WIN32_LEAN_AND_MEAN
1499#endif
1500#include <windows.h>
1501#ifdef HAVE_WINSOCK2_H
1502#include <winsock2.h>
1503#else
1504#ifdef HAVE_WINSOCK_H
1505#include <winsock.h>
1506#endif
1507#endif
1508#else
1509#ifdef HAVE_SYS_TYPES_H
1510#include <sys/types.h>
1511#endif
1512#ifdef HAVE_SYS_SOCKET_H
1513#include <sys/socket.h>
1514#endif
1515#ifdef HAVE_NETINET_IN_H
1516#include <netinet/in.h>
1517#endif
1518#ifdef HAVE_ARPA_INET_H
1519#include <arpa/inet.h>
1520#endif
1521#endif
1522  ])
1523])
1524
1525
1526dnl CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC
1527dnl -------------------------------------------------
1528dnl Check if monotonic clock_gettime is available.
1529
1530AC_DEFUN([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC], [
1531  AC_REQUIRE([AC_HEADER_TIME])dnl
1532  AC_CHECK_HEADERS(sys/types.h sys/time.h time.h)
1533  AC_MSG_CHECKING([for monotonic clock_gettime])
1534  AC_COMPILE_IFELSE([
1535    AC_LANG_PROGRAM([[
1536#ifdef HAVE_SYS_TYPES_H
1537#include <sys/types.h>
1538#endif
1539#ifdef HAVE_SYS_TIME_H
1540#include <sys/time.h>
1541#ifdef TIME_WITH_SYS_TIME
1542#include <time.h>
1543#endif
1544#else
1545#ifdef HAVE_TIME_H
1546#include <time.h>
1547#endif
1548#endif
1549    ]],[[
1550      struct timespec ts;
1551      (void)clock_gettime(CLOCK_MONOTONIC, &ts);
1552    ]])
1553  ],[
1554    AC_MSG_RESULT([yes])
1555    ac_cv_func_clock_gettime="yes"
1556  ],[
1557    AC_MSG_RESULT([no])
1558    ac_cv_func_clock_gettime="no"
1559  ])
1560  dnl Definition of HAVE_CLOCK_GETTIME_MONOTONIC is intentionally postponed
1561  dnl until library linking and run-time checks for clock_gettime succeed.
1562])
1563
1564
1565dnl CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC
1566dnl -------------------------------------------------
1567dnl If monotonic clock_gettime is available then,
1568dnl check and prepended to LIBS any needed libraries.
1569
1570AC_DEFUN([CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC], [
1571  AC_REQUIRE([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC])dnl
1572  #
1573  if test "$ac_cv_func_clock_gettime" = "yes"; then
1574    #
1575    AC_MSG_CHECKING([for clock_gettime in libraries])
1576    #
1577    curl_cv_save_LIBS="$LIBS"
1578    curl_cv_gclk_LIBS="unknown"
1579    #
1580    for x_xlibs in '' '-lrt' '-lposix4' ; do
1581      if test "$curl_cv_gclk_LIBS" = "unknown"; then
1582        if test -z "$x_xlibs"; then
1583          LIBS="$curl_cv_save_LIBS"
1584        else
1585          LIBS="$x_xlibs $curl_cv_save_LIBS"
1586        fi
1587        AC_LINK_IFELSE([
1588          AC_LANG_PROGRAM([[
1589#ifdef HAVE_SYS_TYPES_H
1590#include <sys/types.h>
1591#endif
1592#ifdef HAVE_SYS_TIME_H
1593#include <sys/time.h>
1594#ifdef TIME_WITH_SYS_TIME
1595#include <time.h>
1596#endif
1597#else
1598#ifdef HAVE_TIME_H
1599#include <time.h>
1600#endif
1601#endif
1602          ]],[[
1603            struct timespec ts;
1604            (void)clock_gettime(CLOCK_MONOTONIC, &ts);
1605          ]])
1606        ],[
1607          curl_cv_gclk_LIBS="$x_xlibs"
1608        ])
1609      fi
1610    done
1611    #
1612    LIBS="$curl_cv_save_LIBS"
1613    #
1614    case X-"$curl_cv_gclk_LIBS" in
1615      X-unknown)
1616        AC_MSG_RESULT([cannot find clock_gettime])
1617        AC_MSG_WARN([HAVE_CLOCK_GETTIME_MONOTONIC will not be defined])
1618        ac_cv_func_clock_gettime="no"
1619        ;;
1620      X-)
1621        AC_MSG_RESULT([no additional lib required])
1622        ac_cv_func_clock_gettime="yes"
1623        ;;
1624      *)
1625        if test -z "$curl_cv_save_LIBS"; then
1626          LIBS="$curl_cv_gclk_LIBS"
1627        else
1628          LIBS="$curl_cv_gclk_LIBS $curl_cv_save_LIBS"
1629        fi
1630        AC_MSG_RESULT([$curl_cv_gclk_LIBS])
1631        ac_cv_func_clock_gettime="yes"
1632        ;;
1633    esac
1634    #
1635    dnl only do runtime verification when not cross-compiling
1636    if test "x$cross_compiling" != "xyes" &&
1637      test "$ac_cv_func_clock_gettime" = "yes"; then
1638      AC_MSG_CHECKING([if monotonic clock_gettime works])
1639      AC_RUN_IFELSE([
1640        AC_LANG_PROGRAM([[
1641#ifdef HAVE_STDLIB_H
1642#include <stdlib.h>
1643#endif
1644#ifdef HAVE_SYS_TYPES_H
1645#include <sys/types.h>
1646#endif
1647#ifdef HAVE_SYS_TIME_H
1648#include <sys/time.h>
1649#ifdef TIME_WITH_SYS_TIME
1650#include <time.h>
1651#endif
1652#else
1653#ifdef HAVE_TIME_H
1654#include <time.h>
1655#endif
1656#endif
1657        ]],[[
1658          struct timespec ts;
1659          if (0 == clock_gettime(CLOCK_MONOTONIC, &ts))
1660            exit(0);
1661          else
1662            exit(1);
1663        ]])
1664      ],[
1665        AC_MSG_RESULT([yes])
1666      ],[
1667        AC_MSG_RESULT([no])
1668        AC_MSG_WARN([HAVE_CLOCK_GETTIME_MONOTONIC will not be defined])
1669        ac_cv_func_clock_gettime="no"
1670        LIBS="$curl_cv_save_LIBS"
1671      ])
1672    fi
1673    #
1674    case "$ac_cv_func_clock_gettime" in
1675      yes)
1676        AC_DEFINE_UNQUOTED(HAVE_CLOCK_GETTIME_MONOTONIC, 1,
1677          [Define to 1 if you have the clock_gettime function and monotonic timer.])
1678        ;;
1679    esac
1680    #
1681  fi
1682  #
1683])
1684
1685
1686dnl CARES_CHECK_LIBS_CONNECT
1687dnl -------------------------------------------------
1688dnl Verify if network connect function is already available
1689dnl using current libraries or if another one is required.
1690
1691AC_DEFUN([CARES_CHECK_LIBS_CONNECT], [
1692  AC_REQUIRE([CARES_INCLUDES_WINSOCK2])dnl
1693  AC_MSG_CHECKING([for connect in libraries])
1694  tst_connect_save_LIBS="$LIBS"
1695  tst_connect_need_LIBS="unknown"
1696  for tst_lib in '' '-lsocket' ; do
1697    if test "$tst_connect_need_LIBS" = "unknown"; then
1698      LIBS="$tst_lib $tst_connect_save_LIBS"
1699      AC_LINK_IFELSE([
1700        AC_LANG_PROGRAM([[
1701          $cares_includes_winsock2
1702          #ifndef HAVE_WINDOWS_H
1703            int connect(int, void*, int);
1704          #endif
1705        ]],[[
1706          if(0 != connect(0, 0, 0))
1707            return 1;
1708        ]])
1709      ],[
1710        tst_connect_need_LIBS="$tst_lib"
1711      ])
1712    fi
1713  done
1714  LIBS="$tst_connect_save_LIBS"
1715  #
1716  case X-"$tst_connect_need_LIBS" in
1717    X-unknown)
1718      AC_MSG_RESULT([cannot find connect])
1719      AC_MSG_ERROR([cannot find connect function in libraries.])
1720      ;;
1721    X-)
1722      AC_MSG_RESULT([yes])
1723      ;;
1724    *)
1725      AC_MSG_RESULT([$tst_connect_need_LIBS])
1726      LIBS="$tst_connect_need_LIBS $tst_connect_save_LIBS"
1727      ;;
1728  esac
1729])
1730
1731
1732dnl CARES_DEFINE_UNQUOTED (VARIABLE, [VALUE])
1733dnl -------------------------------------------------
1734dnl Like AC_DEFINE_UNQUOTED this macro will define a C preprocessor
1735dnl symbol that can be further used in custom template configuration
1736dnl files. This macro, unlike AC_DEFINE_UNQUOTED, does not use a third
1737dnl argument for the description. Symbol definitions done with this
1738dnl macro are intended to be exclusively used in handcrafted *.h.in
1739dnl template files. Contrary to what AC_DEFINE_UNQUOTED does, this one
1740dnl prevents autoheader generation and insertion of symbol template
1741dnl stub and definition into the first configuration header file. Do
1742dnl not use this macro as a replacement for AC_DEFINE_UNQUOTED, each
1743dnl one serves different functional needs.
1744
1745AC_DEFUN([CARES_DEFINE_UNQUOTED], [
1746cat >>confdefs.h <<_EOF
1747[@%:@define] $1 ifelse($#, 2, [$2], 1)
1748_EOF
1749])
1750
1751
1752dnl CARES_CONFIGURE_LONG
1753dnl -------------------------------------------------
1754dnl Find out the size of long as reported by sizeof() and define
1755dnl CARES_SIZEOF_LONG as appropriate to be used in template file
1756dnl ares_build.h.in to properly configure the library.
1757dnl The size of long is a build time characteristic and as such
1758dnl must be recorded in ares_build.h
1759
1760AC_DEFUN([CARES_CONFIGURE_LONG], [
1761  if test -z "$ac_cv_sizeof_long" ||
1762    test "$ac_cv_sizeof_long" -eq "0"; then
1763    AC_MSG_ERROR([cannot find out size of long.])
1764  fi
1765  CARES_DEFINE_UNQUOTED([CARES_SIZEOF_LONG], [$ac_cv_sizeof_long])
1766])
1767
1768
1769dnl CARES_CONFIGURE_ARES_SOCKLEN_T
1770dnl -------------------------------------------------
1771dnl Find out suitable ares_socklen_t data type definition and size, making
1772dnl appropriate definitions for template file ares_build.h.in
1773dnl to properly configure and use the library.
1774dnl
1775dnl The need for the ares_socklen_t definition arises mainly to properly
1776dnl interface HP-UX systems which on one hand have a typedef'ed socklen_t
1777dnl data type which is 32 or 64-Bit wide depending on the data model being
1778dnl used, and that on the other hand is only actually used when interfacing
1779dnl the X/Open sockets provided in the xnet library.
1780
1781AC_DEFUN([CARES_CONFIGURE_ARES_SOCKLEN_T], [
1782  AC_REQUIRE([CARES_INCLUDES_WS2TCPIP])dnl
1783  AC_REQUIRE([CARES_INCLUDES_SYS_SOCKET])dnl
1784  AC_REQUIRE([CARES_PREPROCESS_CALLCONV])dnl
1785  #
1786  AC_MSG_CHECKING([for ares_socklen_t data type])
1787  cares_typeof_ares_socklen_t="unknown"
1788  for arg1 in int SOCKET; do
1789    for arg2 in 'struct sockaddr' void; do
1790      for t in socklen_t int size_t 'unsigned int' long 'unsigned long' void; do
1791        if test "$cares_typeof_ares_socklen_t" = "unknown"; then
1792          AC_COMPILE_IFELSE([
1793            AC_LANG_PROGRAM([[
1794              $cares_includes_ws2tcpip
1795              $cares_includes_sys_socket
1796              $cares_preprocess_callconv
1797              extern int FUNCALLCONV getpeername($arg1, $arg2 *, $t *);
1798            ]],[[
1799              $t *lenptr = 0;
1800              if(0 != getpeername(0, 0, lenptr))
1801                return 1;
1802            ]])
1803          ],[
1804            cares_typeof_ares_socklen_t="$t"
1805          ])
1806        fi
1807      done
1808    done
1809  done
1810  for t in socklen_t int; do
1811    if test "$cares_typeof_ares_socklen_t" = "void"; then
1812      AC_COMPILE_IFELSE([
1813        AC_LANG_PROGRAM([[
1814          $cares_includes_sys_socket
1815          typedef $t ares_socklen_t;
1816        ]],[[
1817          ares_socklen_t dummy;
1818        ]])
1819      ],[
1820        cares_typeof_ares_socklen_t="$t"
1821      ])
1822    fi
1823  done
1824  AC_MSG_RESULT([$cares_typeof_ares_socklen_t])
1825  if test "$cares_typeof_ares_socklen_t" = "void" ||
1826    test "$cares_typeof_ares_socklen_t" = "unknown"; then
1827    AC_MSG_ERROR([cannot find data type for ares_socklen_t.])
1828  fi
1829  #
1830  AC_MSG_CHECKING([size of ares_socklen_t])
1831  cares_sizeof_ares_socklen_t="unknown"
1832  cares_pull_headers_socklen_t="unknown"
1833  if test "$ac_cv_header_ws2tcpip_h" = "yes"; then
1834    tst_pull_header_checks='none ws2tcpip'
1835    tst_size_checks='4'
1836  else
1837    tst_pull_header_checks='none systypes syssocket'
1838    tst_size_checks='4 8 2'
1839  fi
1840  for tst_size in $tst_size_checks; do
1841    for tst_pull_headers in $tst_pull_header_checks; do
1842      if test "$cares_sizeof_ares_socklen_t" = "unknown"; then
1843        case $tst_pull_headers in
1844          ws2tcpip)
1845            tmp_includes="$cares_includes_ws2tcpip"
1846            ;;
1847          systypes)
1848            tmp_includes="$cares_includes_sys_types"
1849            ;;
1850          syssocket)
1851            tmp_includes="$cares_includes_sys_socket"
1852            ;;
1853          *)
1854            tmp_includes=""
1855            ;;
1856        esac
1857        AC_COMPILE_IFELSE([
1858          AC_LANG_PROGRAM([[
1859            $tmp_includes
1860            typedef $cares_typeof_ares_socklen_t ares_socklen_t;
1861            typedef char dummy_arr[sizeof(ares_socklen_t) == $tst_size ? 1 : -1];
1862          ]],[[
1863            ares_socklen_t dummy;
1864          ]])
1865        ],[
1866          cares_sizeof_ares_socklen_t="$tst_size"
1867          cares_pull_headers_socklen_t="$tst_pull_headers"
1868        ])
1869      fi
1870    done
1871  done
1872  AC_MSG_RESULT([$cares_sizeof_ares_socklen_t])
1873  if test "$cares_sizeof_ares_socklen_t" = "unknown"; then
1874    AC_MSG_ERROR([cannot find out size of ares_socklen_t.])
1875  fi
1876  #
1877  case $cares_pull_headers_socklen_t in
1878    ws2tcpip)
1879      CARES_DEFINE_UNQUOTED([CARES_PULL_WS2TCPIP_H])
1880      ;;
1881    systypes)
1882      CARES_DEFINE_UNQUOTED([CARES_PULL_SYS_TYPES_H])
1883      ;;
1884    syssocket)
1885      CARES_DEFINE_UNQUOTED([CARES_PULL_SYS_TYPES_H])
1886      CARES_DEFINE_UNQUOTED([CARES_PULL_SYS_SOCKET_H])
1887      ;;
1888  esac
1889  CARES_DEFINE_UNQUOTED([CARES_TYPEOF_ARES_SOCKLEN_T], [$cares_typeof_ares_socklen_t])
1890  CARES_DEFINE_UNQUOTED([CARES_SIZEOF_ARES_SOCKLEN_T], [$cares_sizeof_ares_socklen_t])
1891])
1892
1893
1894dnl This macro determines if the specified struct exists in the specified file
1895dnl Syntax:
1896dnl CARES_CHECK_STRUCT(headers, struct name, if found, [if not found])
1897
1898AC_DEFUN([CARES_CHECK_STRUCT], [
1899  AC_MSG_CHECKING([for struct $2])
1900  AC_TRY_COMPILE([$1],
1901    [
1902      struct $2 struct_instance;
1903    ], ac_struct="yes", ac_found="no")
1904  if test "$ac_struct" = "yes" ; then
1905    AC_MSG_RESULT(yes)
1906    $3
1907  else
1908    AC_MSG_RESULT(no)
1909    $4
1910  fi
1911])
1912
1913dnl This macro determines if the specified constant exists in the specified file
1914dnl Syntax:
1915dnl CARES_CHECK_CONSTANT(headers, constant name, if found, [if not found])
1916
1917AC_DEFUN([CARES_CHECK_CONSTANT], [
1918  AC_MSG_CHECKING([for $2])
1919  AC_EGREP_CPP(VARIABLEWASDEFINED,
1920   [
1921      $1
1922
1923      #ifdef $2
1924        VARIABLEWASDEFINED
1925      #else
1926        NJET
1927      #endif
1928    ], ac_constant="yes", ac_constant="no"
1929  )
1930  if test "$ac_constant" = "yes" ; then
1931    AC_MSG_RESULT(yes)
1932    $3
1933  else
1934    AC_MSG_RESULT(no)
1935    $4
1936  fi
1937])
1938
1939