• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#***************************************************************************
2#
3# Copyright (C) 2008 - 2012 by Daniel Stenberg et al
4#
5# Permission to use, copy, modify, and distribute this software and its
6# documentation for any purpose and without fee is hereby granted, provided
7# that the above copyright notice appear in all copies and that both that
8# copyright notice and this permission notice appear in supporting
9# documentation, and that the name of M.I.T. not be used in advertising or
10# publicity pertaining to distribution of the software without specific,
11# written prior permission.  M.I.T. makes no representations about the
12# suitability of this software for any purpose.  It is provided "as is"
13# without express or implied warranty.
14#
15#***************************************************************************
16
17# File version for 'aclocal' use. Keep it a single number.
18# serial 46
19
20
21dnl CARES_INCLUDES_ARPA_INET
22dnl -------------------------------------------------
23dnl Set up variable with list of headers that must be
24dnl included when arpa/inet.h is to be included.
25
26AC_DEFUN([CARES_INCLUDES_ARPA_INET], [
27cares_includes_arpa_inet="\
28/* includes start */
29#ifdef HAVE_SYS_TYPES_H
30#  include <sys/types.h>
31#endif
32#ifdef HAVE_SYS_SOCKET_H
33#  include <sys/socket.h>
34#endif
35#ifdef HAVE_NETINET_IN_H
36#  include <netinet/in.h>
37#endif
38#ifdef HAVE_ARPA_INET_H
39#  include <arpa/inet.h>
40#endif
41/* includes end */"
42  AC_CHECK_HEADERS(
43    sys/types.h sys/socket.h netinet/in.h arpa/inet.h,
44    [], [], [$cares_includes_arpa_inet])
45])
46
47
48dnl CARES_INCLUDES_FCNTL
49dnl -------------------------------------------------
50dnl Set up variable with list of headers that must be
51dnl included when fcntl.h is to be included.
52
53AC_DEFUN([CARES_INCLUDES_FCNTL], [
54cares_includes_fcntl="\
55/* includes start */
56#ifdef HAVE_SYS_TYPES_H
57#  include <sys/types.h>
58#endif
59#ifdef HAVE_UNISTD_H
60#  include <unistd.h>
61#endif
62#ifdef HAVE_FCNTL_H
63#  include <fcntl.h>
64#endif
65/* includes end */"
66  AC_CHECK_HEADERS(
67    sys/types.h unistd.h fcntl.h,
68    [], [], [$cares_includes_fcntl])
69])
70
71
72dnl CARES_INCLUDES_NETDB
73dnl -------------------------------------------------
74dnl Set up variable with list of headers that must be
75dnl included when netdb.h is to be included.
76
77AC_DEFUN([CARES_INCLUDES_NETDB], [
78cares_includes_netdb="\
79/* includes start */
80#ifdef HAVE_SYS_TYPES_H
81#  include <sys/types.h>
82#endif
83#ifdef HAVE_NETDB_H
84#  include <netdb.h>
85#endif
86/* includes end */"
87  AC_CHECK_HEADERS(
88    sys/types.h netdb.h,
89    [], [], [$cares_includes_netdb])
90])
91
92
93dnl CARES_INCLUDES_SOCKET
94dnl -------------------------------------------------
95dnl Set up variable with list of headers that must be
96dnl included when socket.h is to be included.
97
98AC_DEFUN([CARES_INCLUDES_SOCKET], [
99cares_includes_socket="\
100/* includes start */
101#ifdef HAVE_SYS_TYPES_H
102#  include <sys/types.h>
103#endif
104#ifdef HAVE_SOCKET_H
105#  include <socket.h>
106#endif
107/* includes end */"
108  AC_CHECK_HEADERS(
109    sys/types.h socket.h,
110    [], [], [$cares_includes_socket])
111])
112
113
114dnl CARES_INCLUDES_STDLIB
115dnl -------------------------------------------------
116dnl Set up variable with list of headers that must be
117dnl included when stdlib.h is to be included.
118
119AC_DEFUN([CARES_INCLUDES_STDLIB], [
120cares_includes_stdlib="\
121/* includes start */
122#ifdef HAVE_SYS_TYPES_H
123#  include <sys/types.h>
124#endif
125#ifdef HAVE_STDLIB_H
126#  include <stdlib.h>
127#endif
128/* includes end */"
129  AC_CHECK_HEADERS(
130    sys/types.h stdlib.h,
131    [], [], [$cares_includes_stdlib])
132])
133
134
135dnl CARES_INCLUDES_STRING
136dnl -------------------------------------------------
137dnl Set up variable with list of headers that must be
138dnl included when string(s).h is to be included.
139
140AC_DEFUN([CARES_INCLUDES_STRING], [
141cares_includes_string="\
142/* includes start */
143#ifdef HAVE_SYS_TYPES_H
144#  include <sys/types.h>
145#endif
146#ifdef HAVE_STRING_H
147#  include <string.h>
148#endif
149#ifdef HAVE_STRINGS_H
150#  include <strings.h>
151#endif
152/* includes end */"
153  AC_CHECK_HEADERS(
154    sys/types.h string.h strings.h,
155    [], [], [$cares_includes_string])
156])
157
158
159dnl CARES_INCLUDES_STROPTS
160dnl -------------------------------------------------
161dnl Set up variable with list of headers that must be
162dnl included when stropts.h is to be included.
163
164AC_DEFUN([CARES_INCLUDES_STROPTS], [
165cares_includes_stropts="\
166/* includes start */
167#ifdef HAVE_SYS_TYPES_H
168#  include <sys/types.h>
169#endif
170#ifdef HAVE_UNISTD_H
171#  include <unistd.h>
172#endif
173#ifdef HAVE_SYS_SOCKET_H
174#  include <sys/socket.h>
175#endif
176#ifdef HAVE_SYS_IOCTL_H
177#  include <sys/ioctl.h>
178#endif
179#ifdef HAVE_STROPTS_H
180#  include <stropts.h>
181#endif
182/* includes end */"
183  AC_CHECK_HEADERS(
184    sys/types.h unistd.h sys/socket.h sys/ioctl.h stropts.h,
185    [], [], [$cares_includes_stropts])
186])
187
188
189dnl CARES_INCLUDES_SYS_SOCKET
190dnl -------------------------------------------------
191dnl Set up variable with list of headers that must be
192dnl included when sys/socket.h is to be included.
193
194AC_DEFUN([CARES_INCLUDES_SYS_SOCKET], [
195cares_includes_sys_socket="\
196/* includes start */
197#ifdef HAVE_SYS_TYPES_H
198#  include <sys/types.h>
199#endif
200#ifdef HAVE_SYS_SOCKET_H
201#  include <sys/socket.h>
202#endif
203/* includes end */"
204  AC_CHECK_HEADERS(
205    sys/types.h sys/socket.h,
206    [], [], [$cares_includes_sys_socket])
207])
208
209
210dnl CARES_INCLUDES_SYS_TYPES
211dnl -------------------------------------------------
212dnl Set up variable with list of headers that must be
213dnl included when sys/types.h is to be included.
214
215AC_DEFUN([CARES_INCLUDES_SYS_TYPES], [
216cares_includes_sys_types="\
217/* includes start */
218#ifdef HAVE_SYS_TYPES_H
219#  include <sys/types.h>
220#endif
221/* includes end */"
222  AC_CHECK_HEADERS(
223    sys/types.h,
224    [], [], [$cares_includes_sys_types])
225])
226
227
228dnl CARES_INCLUDES_SYS_UIO
229dnl -------------------------------------------------
230dnl Set up variable with list of headers that must be
231dnl included when sys/uio.h is to be included.
232
233AC_DEFUN([CARES_INCLUDES_SYS_UIO], [
234cares_includes_sys_uio="\
235/* includes start */
236#ifdef HAVE_SYS_TYPES_H
237#  include <sys/types.h>
238#endif
239#ifdef HAVE_SYS_UIO_H
240#  include <sys/uio.h>
241#endif
242/* includes end */"
243  AC_CHECK_HEADERS(
244    sys/types.h sys/uio.h,
245    [], [], [$cares_includes_sys_uio])
246])
247
248
249dnl CARES_INCLUDES_UNISTD
250dnl -------------------------------------------------
251dnl Set up variable with list of headers that must be
252dnl included when unistd.h is to be included.
253
254AC_DEFUN([CARES_INCLUDES_UNISTD], [
255cares_includes_unistd="\
256/* includes start */
257#ifdef HAVE_SYS_TYPES_H
258#  include <sys/types.h>
259#endif
260#ifdef HAVE_UNISTD_H
261#  include <unistd.h>
262#endif
263/* includes end */"
264  AC_CHECK_HEADERS(
265    sys/types.h unistd.h,
266    [], [], [$cares_includes_unistd])
267])
268
269
270dnl CARES_INCLUDES_WINSOCK2
271dnl -------------------------------------------------
272dnl Set up variable with list of headers that must be
273dnl included when winsock(2).h is to be included.
274
275AC_DEFUN([CARES_INCLUDES_WINSOCK2], [
276cares_includes_winsock2="\
277/* includes start */
278#ifdef HAVE_WINDOWS_H
279#  ifndef WIN32_LEAN_AND_MEAN
280#    define WIN32_LEAN_AND_MEAN
281#  endif
282#  include <windows.h>
283#  ifdef HAVE_WINSOCK2_H
284#    include <winsock2.h>
285#  else
286#    ifdef HAVE_WINSOCK_H
287#      include <winsock.h>
288#    endif
289#  endif
290#endif
291/* includes end */"
292  CURL_CHECK_HEADER_WINDOWS
293  CURL_CHECK_HEADER_WINSOCK
294  CURL_CHECK_HEADER_WINSOCK2
295])
296
297
298dnl CARES_INCLUDES_WS2TCPIP
299dnl -------------------------------------------------
300dnl Set up variable with list of headers that must be
301dnl included when ws2tcpip.h is to be included.
302
303AC_DEFUN([CARES_INCLUDES_WS2TCPIP], [
304cares_includes_ws2tcpip="\
305/* includes start */
306#ifdef HAVE_WINDOWS_H
307#  ifndef WIN32_LEAN_AND_MEAN
308#    define WIN32_LEAN_AND_MEAN
309#  endif
310#  include <windows.h>
311#  ifdef HAVE_WINSOCK2_H
312#    include <winsock2.h>
313#    ifdef HAVE_WS2TCPIP_H
314#       include <ws2tcpip.h>
315#    endif
316#  endif
317#endif
318/* includes end */"
319  CURL_CHECK_HEADER_WINDOWS
320  CURL_CHECK_HEADER_WINSOCK2
321  CURL_CHECK_HEADER_WS2TCPIP
322])
323
324
325dnl CARES_PREPROCESS_CALLCONV
326dnl -------------------------------------------------
327dnl Set up variable with a preprocessor block which
328dnl defines function calling convention.
329
330AC_DEFUN([CARES_PREPROCESS_CALLCONV], [
331cares_preprocess_callconv="\
332/* preprocess start */
333#ifdef HAVE_WINDOWS_H
334#  define FUNCALLCONV __stdcall
335#else
336#  define FUNCALLCONV
337#endif
338/* preprocess end */"
339])
340
341
342dnl CARES_CHECK_FUNC_CLOSESOCKET
343dnl -------------------------------------------------
344dnl Verify if closesocket is available, prototyped, and
345dnl can be compiled. If all of these are true, and
346dnl usage has not been previously disallowed with
347dnl shell variable cares_disallow_closesocket, then
348dnl HAVE_CLOSESOCKET will be defined.
349
350AC_DEFUN([CARES_CHECK_FUNC_CLOSESOCKET], [
351  AC_REQUIRE([CARES_INCLUDES_WINSOCK2])dnl
352  AC_REQUIRE([CARES_INCLUDES_SOCKET])dnl
353  #
354  tst_links_closesocket="unknown"
355  tst_proto_closesocket="unknown"
356  tst_compi_closesocket="unknown"
357  tst_allow_closesocket="unknown"
358  #
359  AC_MSG_CHECKING([if closesocket can be linked])
360  AC_LINK_IFELSE([
361    AC_LANG_PROGRAM([[
362      $cares_includes_winsock2
363      $cares_includes_socket
364    ]],[[
365      if(0 != closesocket(0))
366        return 1;
367    ]])
368  ],[
369    AC_MSG_RESULT([yes])
370    tst_links_closesocket="yes"
371  ],[
372    AC_MSG_RESULT([no])
373    tst_links_closesocket="no"
374  ])
375  #
376  if test "$tst_links_closesocket" = "yes"; then
377    AC_MSG_CHECKING([if closesocket is prototyped])
378    AC_EGREP_CPP([closesocket],[
379      $cares_includes_winsock2
380      $cares_includes_socket
381    ],[
382      AC_MSG_RESULT([yes])
383      tst_proto_closesocket="yes"
384    ],[
385      AC_MSG_RESULT([no])
386      tst_proto_closesocket="no"
387    ])
388  fi
389  #
390  if test "$tst_proto_closesocket" = "yes"; then
391    AC_MSG_CHECKING([if closesocket is compilable])
392    AC_COMPILE_IFELSE([
393      AC_LANG_PROGRAM([[
394        $cares_includes_winsock2
395        $cares_includes_socket
396      ]],[[
397        if(0 != closesocket(0))
398          return 1;
399      ]])
400    ],[
401      AC_MSG_RESULT([yes])
402      tst_compi_closesocket="yes"
403    ],[
404      AC_MSG_RESULT([no])
405      tst_compi_closesocket="no"
406    ])
407  fi
408  #
409  if test "$tst_compi_closesocket" = "yes"; then
410    AC_MSG_CHECKING([if closesocket usage allowed])
411    if test "x$cares_disallow_closesocket" != "xyes"; then
412      AC_MSG_RESULT([yes])
413      tst_allow_closesocket="yes"
414    else
415      AC_MSG_RESULT([no])
416      tst_allow_closesocket="no"
417    fi
418  fi
419  #
420  AC_MSG_CHECKING([if closesocket might be used])
421  if test "$tst_links_closesocket" = "yes" &&
422     test "$tst_proto_closesocket" = "yes" &&
423     test "$tst_compi_closesocket" = "yes" &&
424     test "$tst_allow_closesocket" = "yes"; then
425    AC_MSG_RESULT([yes])
426    AC_DEFINE_UNQUOTED(HAVE_CLOSESOCKET, 1,
427      [Define to 1 if you have the closesocket function.])
428    ac_cv_func_closesocket="yes"
429  else
430    AC_MSG_RESULT([no])
431    ac_cv_func_closesocket="no"
432  fi
433])
434
435
436dnl CARES_CHECK_FUNC_CLOSESOCKET_CAMEL
437dnl -------------------------------------------------
438dnl Verify if CloseSocket is available, prototyped, and
439dnl can be compiled. If all of these are true, and
440dnl usage has not been previously disallowed with
441dnl shell variable cares_disallow_closesocket_camel,
442dnl then HAVE_CLOSESOCKET_CAMEL will be defined.
443
444AC_DEFUN([CARES_CHECK_FUNC_CLOSESOCKET_CAMEL], [
445  AC_REQUIRE([CARES_INCLUDES_SYS_SOCKET])dnl
446  #
447  tst_links_closesocket_camel="unknown"
448  tst_proto_closesocket_camel="unknown"
449  tst_compi_closesocket_camel="unknown"
450  tst_allow_closesocket_camel="unknown"
451  #
452  AC_MSG_CHECKING([if CloseSocket can be linked])
453  AC_LINK_IFELSE([
454    AC_LANG_PROGRAM([[
455      $cares_includes_sys_socket
456    ]],[[
457      if(0 != CloseSocket(0))
458        return 1;
459    ]])
460  ],[
461    AC_MSG_RESULT([yes])
462    tst_links_closesocket_camel="yes"
463  ],[
464    AC_MSG_RESULT([no])
465    tst_links_closesocket_camel="no"
466  ])
467  #
468  if test "$tst_links_closesocket_camel" = "yes"; then
469    AC_MSG_CHECKING([if CloseSocket is prototyped])
470    AC_EGREP_CPP([CloseSocket],[
471      $cares_includes_sys_socket
472    ],[
473      AC_MSG_RESULT([yes])
474      tst_proto_closesocket_camel="yes"
475    ],[
476      AC_MSG_RESULT([no])
477      tst_proto_closesocket_camel="no"
478    ])
479  fi
480  #
481  if test "$tst_proto_closesocket_camel" = "yes"; then
482    AC_MSG_CHECKING([if CloseSocket is compilable])
483    AC_COMPILE_IFELSE([
484      AC_LANG_PROGRAM([[
485        $cares_includes_sys_socket
486      ]],[[
487        if(0 != CloseSocket(0))
488          return 1;
489      ]])
490    ],[
491      AC_MSG_RESULT([yes])
492      tst_compi_closesocket_camel="yes"
493    ],[
494      AC_MSG_RESULT([no])
495      tst_compi_closesocket_camel="no"
496    ])
497  fi
498  #
499  if test "$tst_compi_closesocket_camel" = "yes"; then
500    AC_MSG_CHECKING([if CloseSocket usage allowed])
501    if test "x$cares_disallow_closesocket_camel" != "xyes"; then
502      AC_MSG_RESULT([yes])
503      tst_allow_closesocket_camel="yes"
504    else
505      AC_MSG_RESULT([no])
506      tst_allow_closesocket_camel="no"
507    fi
508  fi
509  #
510  AC_MSG_CHECKING([if CloseSocket might be used])
511  if test "$tst_links_closesocket_camel" = "yes" &&
512     test "$tst_proto_closesocket_camel" = "yes" &&
513     test "$tst_compi_closesocket_camel" = "yes" &&
514     test "$tst_allow_closesocket_camel" = "yes"; then
515    AC_MSG_RESULT([yes])
516    AC_DEFINE_UNQUOTED(HAVE_CLOSESOCKET_CAMEL, 1,
517      [Define to 1 if you have the CloseSocket camel case function.])
518    ac_cv_func_closesocket_camel="yes"
519  else
520    AC_MSG_RESULT([no])
521    ac_cv_func_closesocket_camel="no"
522  fi
523])
524
525
526dnl CARES_CHECK_FUNC_CONNECT
527dnl -------------------------------------------------
528dnl Verify if connect is available, prototyped, and
529dnl can be compiled. If all of these are true, and
530dnl usage has not been previously disallowed with
531dnl shell variable cares_disallow_connect, then
532dnl HAVE_CONNECT will be defined.
533
534AC_DEFUN([CARES_CHECK_FUNC_CONNECT], [
535  AC_REQUIRE([CARES_INCLUDES_WINSOCK2])dnl
536  AC_REQUIRE([CARES_INCLUDES_SYS_SOCKET])dnl
537  AC_REQUIRE([CARES_INCLUDES_SOCKET])dnl
538  #
539  tst_links_connect="unknown"
540  tst_proto_connect="unknown"
541  tst_compi_connect="unknown"
542  tst_allow_connect="unknown"
543  #
544  AC_MSG_CHECKING([if connect can be linked])
545  AC_LINK_IFELSE([
546    AC_LANG_PROGRAM([[
547      $cares_includes_winsock2
548      $cares_includes_sys_socket
549      $cares_includes_socket
550    ]],[[
551      if(0 != connect(0, 0, 0))
552        return 1;
553    ]])
554  ],[
555    AC_MSG_RESULT([yes])
556    tst_links_connect="yes"
557  ],[
558    AC_MSG_RESULT([no])
559    tst_links_connect="no"
560  ])
561  #
562  if test "$tst_links_connect" = "yes"; then
563    AC_MSG_CHECKING([if connect is prototyped])
564    AC_EGREP_CPP([connect],[
565      $cares_includes_winsock2
566      $cares_includes_sys_socket
567      $cares_includes_socket
568    ],[
569      AC_MSG_RESULT([yes])
570      tst_proto_connect="yes"
571    ],[
572      AC_MSG_RESULT([no])
573      tst_proto_connect="no"
574    ])
575  fi
576  #
577  if test "$tst_proto_connect" = "yes"; then
578    AC_MSG_CHECKING([if connect is compilable])
579    AC_COMPILE_IFELSE([
580      AC_LANG_PROGRAM([[
581        $cares_includes_winsock2
582        $cares_includes_sys_socket
583        $cares_includes_socket
584      ]],[[
585        if(0 != connect(0, 0, 0))
586          return 1;
587      ]])
588    ],[
589      AC_MSG_RESULT([yes])
590      tst_compi_connect="yes"
591    ],[
592      AC_MSG_RESULT([no])
593      tst_compi_connect="no"
594    ])
595  fi
596  #
597  if test "$tst_compi_connect" = "yes"; then
598    AC_MSG_CHECKING([if connect usage allowed])
599    if test "x$cares_disallow_connect" != "xyes"; then
600      AC_MSG_RESULT([yes])
601      tst_allow_connect="yes"
602    else
603      AC_MSG_RESULT([no])
604      tst_allow_connect="no"
605    fi
606  fi
607  #
608  AC_MSG_CHECKING([if connect might be used])
609  if test "$tst_links_connect" = "yes" &&
610     test "$tst_proto_connect" = "yes" &&
611     test "$tst_compi_connect" = "yes" &&
612     test "$tst_allow_connect" = "yes"; then
613    AC_MSG_RESULT([yes])
614    AC_DEFINE_UNQUOTED(HAVE_CONNECT, 1,
615      [Define to 1 if you have the connect function.])
616    ac_cv_func_connect="yes"
617  else
618    AC_MSG_RESULT([no])
619    ac_cv_func_connect="no"
620  fi
621])
622
623
624dnl CARES_CHECK_FUNC_FCNTL
625dnl -------------------------------------------------
626dnl Verify if fcntl is available, prototyped, and
627dnl can be compiled. If all of these are true, and
628dnl usage has not been previously disallowed with
629dnl shell variable cares_disallow_fcntl, then
630dnl HAVE_FCNTL will be defined.
631
632AC_DEFUN([CARES_CHECK_FUNC_FCNTL], [
633  AC_REQUIRE([CARES_INCLUDES_FCNTL])dnl
634  #
635  tst_links_fcntl="unknown"
636  tst_proto_fcntl="unknown"
637  tst_compi_fcntl="unknown"
638  tst_allow_fcntl="unknown"
639  #
640  AC_MSG_CHECKING([if fcntl can be linked])
641  AC_LINK_IFELSE([
642    AC_LANG_FUNC_LINK_TRY([fcntl])
643  ],[
644    AC_MSG_RESULT([yes])
645    tst_links_fcntl="yes"
646  ],[
647    AC_MSG_RESULT([no])
648    tst_links_fcntl="no"
649  ])
650  #
651  if test "$tst_links_fcntl" = "yes"; then
652    AC_MSG_CHECKING([if fcntl is prototyped])
653    AC_EGREP_CPP([fcntl],[
654      $cares_includes_fcntl
655    ],[
656      AC_MSG_RESULT([yes])
657      tst_proto_fcntl="yes"
658    ],[
659      AC_MSG_RESULT([no])
660      tst_proto_fcntl="no"
661    ])
662  fi
663  #
664  if test "$tst_proto_fcntl" = "yes"; then
665    AC_MSG_CHECKING([if fcntl is compilable])
666    AC_COMPILE_IFELSE([
667      AC_LANG_PROGRAM([[
668        $cares_includes_fcntl
669      ]],[[
670        if(0 != fcntl(0, 0, 0))
671          return 1;
672      ]])
673    ],[
674      AC_MSG_RESULT([yes])
675      tst_compi_fcntl="yes"
676    ],[
677      AC_MSG_RESULT([no])
678      tst_compi_fcntl="no"
679    ])
680  fi
681  #
682  if test "$tst_compi_fcntl" = "yes"; then
683    AC_MSG_CHECKING([if fcntl usage allowed])
684    if test "x$cares_disallow_fcntl" != "xyes"; then
685      AC_MSG_RESULT([yes])
686      tst_allow_fcntl="yes"
687    else
688      AC_MSG_RESULT([no])
689      tst_allow_fcntl="no"
690    fi
691  fi
692  #
693  AC_MSG_CHECKING([if fcntl might be used])
694  if test "$tst_links_fcntl" = "yes" &&
695     test "$tst_proto_fcntl" = "yes" &&
696     test "$tst_compi_fcntl" = "yes" &&
697     test "$tst_allow_fcntl" = "yes"; then
698    AC_MSG_RESULT([yes])
699    AC_DEFINE_UNQUOTED(HAVE_FCNTL, 1,
700      [Define to 1 if you have the fcntl function.])
701    ac_cv_func_fcntl="yes"
702    CARES_CHECK_FUNC_FCNTL_O_NONBLOCK
703  else
704    AC_MSG_RESULT([no])
705    ac_cv_func_fcntl="no"
706  fi
707])
708
709
710dnl CARES_CHECK_FUNC_FCNTL_O_NONBLOCK
711dnl -------------------------------------------------
712dnl Verify if fcntl with status flag O_NONBLOCK is
713dnl available, can be compiled, and seems to work. If
714dnl all of these are true, then HAVE_FCNTL_O_NONBLOCK
715dnl will be defined.
716
717AC_DEFUN([CARES_CHECK_FUNC_FCNTL_O_NONBLOCK], [
718  #
719  tst_compi_fcntl_o_nonblock="unknown"
720  tst_allow_fcntl_o_nonblock="unknown"
721  #
722  case $host_os in
723    sunos4* | aix3* | beos*)
724      dnl O_NONBLOCK does not work on these platforms
725      cares_disallow_fcntl_o_nonblock="yes"
726      ;;
727  esac
728  #
729  if test "$ac_cv_func_fcntl" = "yes"; then
730    AC_MSG_CHECKING([if fcntl O_NONBLOCK is compilable])
731    AC_COMPILE_IFELSE([
732      AC_LANG_PROGRAM([[
733        $cares_includes_fcntl
734      ]],[[
735        int flags = 0;
736        if(0 != fcntl(0, F_SETFL, flags | O_NONBLOCK))
737          return 1;
738      ]])
739    ],[
740      AC_MSG_RESULT([yes])
741      tst_compi_fcntl_o_nonblock="yes"
742    ],[
743      AC_MSG_RESULT([no])
744      tst_compi_fcntl_o_nonblock="no"
745    ])
746  fi
747  #
748  if test "$tst_compi_fcntl_o_nonblock" = "yes"; then
749    AC_MSG_CHECKING([if fcntl O_NONBLOCK usage allowed])
750    if test "x$cares_disallow_fcntl_o_nonblock" != "xyes"; then
751      AC_MSG_RESULT([yes])
752      tst_allow_fcntl_o_nonblock="yes"
753    else
754      AC_MSG_RESULT([no])
755      tst_allow_fcntl_o_nonblock="no"
756    fi
757  fi
758  #
759  AC_MSG_CHECKING([if fcntl O_NONBLOCK might be used])
760  if test "$tst_compi_fcntl_o_nonblock" = "yes" &&
761     test "$tst_allow_fcntl_o_nonblock" = "yes"; then
762    AC_MSG_RESULT([yes])
763    AC_DEFINE_UNQUOTED(HAVE_FCNTL_O_NONBLOCK, 1,
764      [Define to 1 if you have a working fcntl O_NONBLOCK function.])
765    ac_cv_func_fcntl_o_nonblock="yes"
766  else
767    AC_MSG_RESULT([no])
768    ac_cv_func_fcntl_o_nonblock="no"
769  fi
770])
771
772
773dnl CARES_CHECK_FUNC_FREEADDRINFO
774dnl -------------------------------------------------
775dnl Verify if freeaddrinfo is available, prototyped,
776dnl and can be compiled. If all of these are true,
777dnl and usage has not been previously disallowed with
778dnl shell variable cares_disallow_freeaddrinfo, then
779dnl HAVE_FREEADDRINFO will be defined.
780
781AC_DEFUN([CARES_CHECK_FUNC_FREEADDRINFO], [
782  AC_REQUIRE([CARES_INCLUDES_WS2TCPIP])dnl
783  AC_REQUIRE([CARES_INCLUDES_SYS_SOCKET])dnl
784  AC_REQUIRE([CARES_INCLUDES_NETDB])dnl
785  #
786  tst_links_freeaddrinfo="unknown"
787  tst_proto_freeaddrinfo="unknown"
788  tst_compi_freeaddrinfo="unknown"
789  tst_allow_freeaddrinfo="unknown"
790  #
791  AC_MSG_CHECKING([if freeaddrinfo can be linked])
792  AC_LINK_IFELSE([
793    AC_LANG_PROGRAM([[
794      $cares_includes_ws2tcpip
795      $cares_includes_sys_socket
796      $cares_includes_netdb
797    ]],[[
798      freeaddrinfo(0);
799    ]])
800  ],[
801    AC_MSG_RESULT([yes])
802    tst_links_freeaddrinfo="yes"
803  ],[
804    AC_MSG_RESULT([no])
805    tst_links_freeaddrinfo="no"
806  ])
807  #
808  if test "$tst_links_freeaddrinfo" = "yes"; then
809    AC_MSG_CHECKING([if freeaddrinfo is prototyped])
810    AC_EGREP_CPP([freeaddrinfo],[
811      $cares_includes_ws2tcpip
812      $cares_includes_sys_socket
813      $cares_includes_netdb
814    ],[
815      AC_MSG_RESULT([yes])
816      tst_proto_freeaddrinfo="yes"
817    ],[
818      AC_MSG_RESULT([no])
819      tst_proto_freeaddrinfo="no"
820    ])
821  fi
822  #
823  if test "$tst_proto_freeaddrinfo" = "yes"; then
824    AC_MSG_CHECKING([if freeaddrinfo is compilable])
825    AC_COMPILE_IFELSE([
826      AC_LANG_PROGRAM([[
827        $cares_includes_ws2tcpip
828        $cares_includes_sys_socket
829        $cares_includes_netdb
830      ]],[[
831        freeaddrinfo(0);
832      ]])
833    ],[
834      AC_MSG_RESULT([yes])
835      tst_compi_freeaddrinfo="yes"
836    ],[
837      AC_MSG_RESULT([no])
838      tst_compi_freeaddrinfo="no"
839    ])
840  fi
841  #
842  if test "$tst_compi_freeaddrinfo" = "yes"; then
843    AC_MSG_CHECKING([if freeaddrinfo usage allowed])
844    if test "x$cares_disallow_freeaddrinfo" != "xyes"; then
845      AC_MSG_RESULT([yes])
846      tst_allow_freeaddrinfo="yes"
847    else
848      AC_MSG_RESULT([no])
849      tst_allow_freeaddrinfo="no"
850    fi
851  fi
852  #
853  AC_MSG_CHECKING([if freeaddrinfo might be used])
854  if test "$tst_links_freeaddrinfo" = "yes" &&
855     test "$tst_proto_freeaddrinfo" = "yes" &&
856     test "$tst_compi_freeaddrinfo" = "yes" &&
857     test "$tst_allow_freeaddrinfo" = "yes"; then
858    AC_MSG_RESULT([yes])
859    AC_DEFINE_UNQUOTED(HAVE_FREEADDRINFO, 1,
860      [Define to 1 if you have the freeaddrinfo function.])
861    ac_cv_func_freeaddrinfo="yes"
862  else
863    AC_MSG_RESULT([no])
864    ac_cv_func_freeaddrinfo="no"
865  fi
866])
867
868
869dnl CARES_CHECK_FUNC_GETADDRINFO
870dnl -------------------------------------------------
871dnl Verify if getaddrinfo is available, prototyped, can
872dnl be compiled and seems to work. If all of these are
873dnl true, and usage has not been previously disallowed
874dnl with shell variable cares_disallow_getaddrinfo, then
875dnl HAVE_GETADDRINFO will be defined. Additionally when
876dnl HAVE_GETADDRINFO gets defined this will also attempt
877dnl to find out if getaddrinfo happens to be threadsafe,
878dnl defining HAVE_GETADDRINFO_THREADSAFE when true.
879
880AC_DEFUN([CARES_CHECK_FUNC_GETADDRINFO], [
881  AC_REQUIRE([CARES_INCLUDES_WS2TCPIP])dnl
882  AC_REQUIRE([CARES_INCLUDES_STDLIB])dnl
883  AC_REQUIRE([CARES_INCLUDES_STRING])dnl
884  AC_REQUIRE([CARES_INCLUDES_SYS_SOCKET])dnl
885  AC_REQUIRE([CARES_INCLUDES_NETDB])dnl
886  AC_REQUIRE([CURL_CHECK_NATIVE_WINDOWS])dnl
887  #
888  tst_links_getaddrinfo="unknown"
889  tst_proto_getaddrinfo="unknown"
890  tst_compi_getaddrinfo="unknown"
891  tst_works_getaddrinfo="unknown"
892  tst_allow_getaddrinfo="unknown"
893  tst_tsafe_getaddrinfo="unknown"
894  #
895  AC_MSG_CHECKING([if getaddrinfo can be linked])
896  AC_LINK_IFELSE([
897    AC_LANG_PROGRAM([[
898      $cares_includes_ws2tcpip
899      $cares_includes_sys_socket
900      $cares_includes_netdb
901    ]],[[
902      if(0 != getaddrinfo(0, 0, 0, 0))
903        return 1;
904    ]])
905  ],[
906    AC_MSG_RESULT([yes])
907    tst_links_getaddrinfo="yes"
908  ],[
909    AC_MSG_RESULT([no])
910    tst_links_getaddrinfo="no"
911  ])
912  #
913  if test "$tst_links_getaddrinfo" = "yes"; then
914    AC_MSG_CHECKING([if getaddrinfo is prototyped])
915    AC_EGREP_CPP([getaddrinfo],[
916      $cares_includes_ws2tcpip
917      $cares_includes_sys_socket
918      $cares_includes_netdb
919    ],[
920      AC_MSG_RESULT([yes])
921      tst_proto_getaddrinfo="yes"
922    ],[
923      AC_MSG_RESULT([no])
924      tst_proto_getaddrinfo="no"
925    ])
926  fi
927  #
928  if test "$tst_proto_getaddrinfo" = "yes"; then
929    AC_MSG_CHECKING([if getaddrinfo is compilable])
930    AC_COMPILE_IFELSE([
931      AC_LANG_PROGRAM([[
932        $cares_includes_ws2tcpip
933        $cares_includes_sys_socket
934        $cares_includes_netdb
935      ]],[[
936        if(0 != getaddrinfo(0, 0, 0, 0))
937          return 1;
938      ]])
939    ],[
940      AC_MSG_RESULT([yes])
941      tst_compi_getaddrinfo="yes"
942    ],[
943      AC_MSG_RESULT([no])
944      tst_compi_getaddrinfo="no"
945    ])
946  fi
947  #
948  dnl only do runtime verification when not cross-compiling
949  if test "x$cross_compiling" != "xyes" &&
950    test "$tst_compi_getaddrinfo" = "yes"; then
951    AC_MSG_CHECKING([if getaddrinfo seems to work])
952    AC_RUN_IFELSE([
953      AC_LANG_PROGRAM([[
954        $cares_includes_ws2tcpip
955        $cares_includes_stdlib
956        $cares_includes_string
957        $cares_includes_sys_socket
958        $cares_includes_netdb
959      ]],[[
960        struct addrinfo hints;
961        struct addrinfo *ai = 0;
962        int error;
963
964        memset(&hints, 0, sizeof(hints));
965        hints.ai_flags = AI_NUMERICHOST;
966        hints.ai_family = AF_UNSPEC;
967        hints.ai_socktype = SOCK_STREAM;
968        error = getaddrinfo("127.0.0.1", 0, &hints, &ai);
969        if(error || !ai)
970          exit(1); /* fail */
971        else
972          exit(0);
973      ]])
974    ],[
975      AC_MSG_RESULT([yes])
976      tst_works_getaddrinfo="yes"
977    ],[
978      AC_MSG_RESULT([no])
979      tst_works_getaddrinfo="no"
980    ])
981  fi
982  #
983  if test "$tst_compi_getaddrinfo" = "yes" &&
984    test "$tst_works_getaddrinfo" != "no"; then
985    AC_MSG_CHECKING([if getaddrinfo usage allowed])
986    if test "x$cares_disallow_getaddrinfo" != "xyes"; then
987      AC_MSG_RESULT([yes])
988      tst_allow_getaddrinfo="yes"
989    else
990      AC_MSG_RESULT([no])
991      tst_allow_getaddrinfo="no"
992    fi
993  fi
994  #
995  AC_MSG_CHECKING([if getaddrinfo might be used])
996  if test "$tst_links_getaddrinfo" = "yes" &&
997     test "$tst_proto_getaddrinfo" = "yes" &&
998     test "$tst_compi_getaddrinfo" = "yes" &&
999     test "$tst_allow_getaddrinfo" = "yes" &&
1000     test "$tst_works_getaddrinfo" != "no"; then
1001    AC_MSG_RESULT([yes])
1002    AC_DEFINE_UNQUOTED(HAVE_GETADDRINFO, 1,
1003      [Define to 1 if you have a working getaddrinfo function.])
1004    ac_cv_func_getaddrinfo="yes"
1005  else
1006    AC_MSG_RESULT([no])
1007    ac_cv_func_getaddrinfo="no"
1008    ac_cv_func_getaddrinfo_threadsafe="no"
1009  fi
1010  #
1011  if test "$ac_cv_func_getaddrinfo" = "yes"; then
1012    AC_MSG_CHECKING([if getaddrinfo is threadsafe])
1013    case $host_os in
1014      aix[[1234]].* | aix5.[[01]].*)
1015        dnl aix 5.1 and older
1016        tst_tsafe_getaddrinfo="no"
1017        ;;
1018      aix*)
1019        dnl aix 5.2 and newer
1020        tst_tsafe_getaddrinfo="yes"
1021        ;;
1022      darwin[[12345]].*)
1023        dnl darwin 5.0 and mac os x 10.1.X and older
1024        tst_tsafe_getaddrinfo="no"
1025        ;;
1026      darwin*)
1027        dnl darwin 6.0 and mac os x 10.2.X and newer
1028        tst_tsafe_getaddrinfo="yes"
1029        ;;
1030      freebsd[[1234]].* | freebsd5.[[1234]]*)
1031        dnl freebsd 5.4 and older
1032        tst_tsafe_getaddrinfo="no"
1033        ;;
1034      freebsd*)
1035        dnl freebsd 5.5 and newer
1036        tst_tsafe_getaddrinfo="yes"
1037        ;;
1038      hpux[[123456789]].* | hpux10.* | hpux11.0* | hpux11.10*)
1039        dnl hpux 11.10 and older
1040        tst_tsafe_getaddrinfo="no"
1041        ;;
1042      hpux*)
1043        dnl hpux 11.11 and newer
1044        tst_tsafe_getaddrinfo="yes"
1045        ;;
1046      netbsd[[123]].*)
1047        dnl netbsd 3.X and older
1048        tst_tsafe_getaddrinfo="no"
1049        ;;
1050      netbsd*)
1051        dnl netbsd 4.X and newer
1052        tst_tsafe_getaddrinfo="yes"
1053        ;;
1054      *bsd*)
1055        dnl All other bsd's
1056        tst_tsafe_getaddrinfo="no"
1057        ;;
1058      solaris2*)
1059        dnl solaris which have it
1060        tst_tsafe_getaddrinfo="yes"
1061        ;;
1062    esac
1063    if test "$tst_tsafe_getaddrinfo" = "unknown" &&
1064       test "$ac_cv_native_windows" = "yes"; then
1065      tst_tsafe_getaddrinfo="yes"
1066    fi
1067    if test "$tst_tsafe_getaddrinfo" = "unknown"; then
1068      CURL_CHECK_DEF_CC([h_errno], [
1069        $cares_includes_sys_socket
1070        $cares_includes_netdb
1071        ], [silent])
1072      if test "$curl_cv_have_def_h_errno" = "yes"; then
1073        tst_h_errno_macro="yes"
1074      else
1075        tst_h_errno_macro="no"
1076      fi
1077      AC_COMPILE_IFELSE([
1078        AC_LANG_PROGRAM([[
1079          $cares_includes_sys_socket
1080          $cares_includes_netdb
1081        ]],[[
1082          h_errno = 2;
1083          if(0 != h_errno)
1084            return 1;
1085        ]])
1086      ],[
1087        tst_h_errno_modifiable_lvalue="yes"
1088      ],[
1089        tst_h_errno_modifiable_lvalue="no"
1090      ])
1091      AC_COMPILE_IFELSE([
1092        AC_LANG_PROGRAM([[
1093        ]],[[
1094#if defined(_POSIX_C_SOURCE) && (_POSIX_C_SOURCE >= 200809L)
1095          return 0;
1096#elif defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 700)
1097          return 0;
1098#else
1099          force compilation error
1100#endif
1101        ]])
1102      ],[
1103        tst_h_errno_sbs_issue_7="yes"
1104      ],[
1105        tst_h_errno_sbs_issue_7="no"
1106      ])
1107      if test "$tst_h_errno_macro" = "no" &&
1108         test "$tst_h_errno_modifiable_lvalue" = "no" &&
1109         test "$tst_h_errno_sbs_issue_7" = "no"; then
1110        tst_tsafe_getaddrinfo="no"
1111      else
1112        tst_tsafe_getaddrinfo="yes"
1113      fi
1114    fi
1115    AC_MSG_RESULT([$tst_tsafe_getaddrinfo])
1116    if test "$tst_tsafe_getaddrinfo" = "yes"; then
1117      AC_DEFINE_UNQUOTED(HAVE_GETADDRINFO_THREADSAFE, 1,
1118        [Define to 1 if the getaddrinfo function is threadsafe.])
1119      ac_cv_func_getaddrinfo_threadsafe="yes"
1120    else
1121      ac_cv_func_getaddrinfo_threadsafe="no"
1122    fi
1123  fi
1124])
1125
1126
1127dnl CARES_CHECK_FUNC_GETENV
1128dnl -------------------------------------------------
1129dnl Verify if getenv is available, prototyped, and
1130dnl can be compiled. If all of these are true, and
1131dnl usage has not been previously disallowed with
1132dnl shell variable cares_disallow_getenv, then
1133dnl HAVE_GETENV will be defined.
1134
1135AC_DEFUN([CARES_CHECK_FUNC_GETENV], [
1136  AC_REQUIRE([CARES_INCLUDES_STDLIB])dnl
1137  #
1138  tst_links_getenv="unknown"
1139  tst_proto_getenv="unknown"
1140  tst_compi_getenv="unknown"
1141  tst_allow_getenv="unknown"
1142  #
1143  AC_MSG_CHECKING([if getenv can be linked])
1144  AC_LINK_IFELSE([
1145    AC_LANG_FUNC_LINK_TRY([getenv])
1146  ],[
1147    AC_MSG_RESULT([yes])
1148    tst_links_getenv="yes"
1149  ],[
1150    AC_MSG_RESULT([no])
1151    tst_links_getenv="no"
1152  ])
1153  #
1154  if test "$tst_links_getenv" = "yes"; then
1155    AC_MSG_CHECKING([if getenv is prototyped])
1156    AC_EGREP_CPP([getenv],[
1157      $cares_includes_stdlib
1158    ],[
1159      AC_MSG_RESULT([yes])
1160      tst_proto_getenv="yes"
1161    ],[
1162      AC_MSG_RESULT([no])
1163      tst_proto_getenv="no"
1164    ])
1165  fi
1166  #
1167  if test "$tst_proto_getenv" = "yes"; then
1168    AC_MSG_CHECKING([if getenv is compilable])
1169    AC_COMPILE_IFELSE([
1170      AC_LANG_PROGRAM([[
1171        $cares_includes_stdlib
1172      ]],[[
1173        if(0 != getenv(0))
1174          return 1;
1175      ]])
1176    ],[
1177      AC_MSG_RESULT([yes])
1178      tst_compi_getenv="yes"
1179    ],[
1180      AC_MSG_RESULT([no])
1181      tst_compi_getenv="no"
1182    ])
1183  fi
1184  #
1185  if test "$tst_compi_getenv" = "yes"; then
1186    AC_MSG_CHECKING([if getenv usage allowed])
1187    if test "x$cares_disallow_getenv" != "xyes"; then
1188      AC_MSG_RESULT([yes])
1189      tst_allow_getenv="yes"
1190    else
1191      AC_MSG_RESULT([no])
1192      tst_allow_getenv="no"
1193    fi
1194  fi
1195  #
1196  AC_MSG_CHECKING([if getenv might be used])
1197  if test "$tst_links_getenv" = "yes" &&
1198     test "$tst_proto_getenv" = "yes" &&
1199     test "$tst_compi_getenv" = "yes" &&
1200     test "$tst_allow_getenv" = "yes"; then
1201    AC_MSG_RESULT([yes])
1202    AC_DEFINE_UNQUOTED(HAVE_GETENV, 1,
1203      [Define to 1 if you have the getenv function.])
1204    ac_cv_func_getenv="yes"
1205  else
1206    AC_MSG_RESULT([no])
1207    ac_cv_func_getenv="no"
1208  fi
1209])
1210
1211
1212dnl CARES_CHECK_FUNC_GETHOSTBYADDR
1213dnl -------------------------------------------------
1214dnl Verify if gethostbyaddr is available, prototyped,
1215dnl and can be compiled. If all of these are true,
1216dnl and usage has not been previously disallowed with
1217dnl shell variable cares_disallow_gethostbyaddr, then
1218dnl HAVE_GETHOSTBYADDR will be defined.
1219
1220AC_DEFUN([CARES_CHECK_FUNC_GETHOSTBYADDR], [
1221  AC_REQUIRE([CARES_INCLUDES_WINSOCK2])dnl
1222  AC_REQUIRE([CARES_INCLUDES_NETDB])dnl
1223  #
1224  tst_links_gethostbyaddr="unknown"
1225  tst_proto_gethostbyaddr="unknown"
1226  tst_compi_gethostbyaddr="unknown"
1227  tst_allow_gethostbyaddr="unknown"
1228  #
1229  AC_MSG_CHECKING([if gethostbyaddr can be linked])
1230  AC_LINK_IFELSE([
1231    AC_LANG_PROGRAM([[
1232      $cares_includes_winsock2
1233      $cares_includes_netdb
1234    ]],[[
1235      if(0 != gethostbyaddr(0, 0, 0))
1236        return 1;
1237    ]])
1238  ],[
1239    AC_MSG_RESULT([yes])
1240    tst_links_gethostbyaddr="yes"
1241  ],[
1242    AC_MSG_RESULT([no])
1243    tst_links_gethostbyaddr="no"
1244  ])
1245  #
1246  if test "$tst_links_gethostbyaddr" = "yes"; then
1247    AC_MSG_CHECKING([if gethostbyaddr is prototyped])
1248    AC_EGREP_CPP([gethostbyaddr],[
1249      $cares_includes_winsock2
1250      $cares_includes_netdb
1251    ],[
1252      AC_MSG_RESULT([yes])
1253      tst_proto_gethostbyaddr="yes"
1254    ],[
1255      AC_MSG_RESULT([no])
1256      tst_proto_gethostbyaddr="no"
1257    ])
1258  fi
1259  #
1260  if test "$tst_proto_gethostbyaddr" = "yes"; then
1261    AC_MSG_CHECKING([if gethostbyaddr is compilable])
1262    AC_COMPILE_IFELSE([
1263      AC_LANG_PROGRAM([[
1264        $cares_includes_winsock2
1265        $cares_includes_netdb
1266      ]],[[
1267        if(0 != gethostbyaddr(0, 0, 0))
1268          return 1;
1269      ]])
1270    ],[
1271      AC_MSG_RESULT([yes])
1272      tst_compi_gethostbyaddr="yes"
1273    ],[
1274      AC_MSG_RESULT([no])
1275      tst_compi_gethostbyaddr="no"
1276    ])
1277  fi
1278  #
1279  if test "$tst_compi_gethostbyaddr" = "yes"; then
1280    AC_MSG_CHECKING([if gethostbyaddr usage allowed])
1281    if test "x$cares_disallow_gethostbyaddr" != "xyes"; then
1282      AC_MSG_RESULT([yes])
1283      tst_allow_gethostbyaddr="yes"
1284    else
1285      AC_MSG_RESULT([no])
1286      tst_allow_gethostbyaddr="no"
1287    fi
1288  fi
1289  #
1290  AC_MSG_CHECKING([if gethostbyaddr might be used])
1291  if test "$tst_links_gethostbyaddr" = "yes" &&
1292     test "$tst_proto_gethostbyaddr" = "yes" &&
1293     test "$tst_compi_gethostbyaddr" = "yes" &&
1294     test "$tst_allow_gethostbyaddr" = "yes"; then
1295    AC_MSG_RESULT([yes])
1296    AC_DEFINE_UNQUOTED(HAVE_GETHOSTBYADDR, 1,
1297      [Define to 1 if you have the gethostbyaddr function.])
1298    ac_cv_func_gethostbyaddr="yes"
1299  else
1300    AC_MSG_RESULT([no])
1301    ac_cv_func_gethostbyaddr="no"
1302  fi
1303])
1304
1305
1306dnl CARES_CHECK_FUNC_GETHOSTBYNAME
1307dnl -------------------------------------------------
1308dnl Verify if gethostbyname is available, prototyped,
1309dnl and can be compiled. If all of these are true,
1310dnl and usage has not been previously disallowed with
1311dnl shell variable cares_disallow_gethostbyname, then
1312dnl HAVE_GETHOSTBYNAME will be defined.
1313
1314AC_DEFUN([CARES_CHECK_FUNC_GETHOSTBYNAME], [
1315  AC_REQUIRE([CARES_INCLUDES_WINSOCK2])dnl
1316  AC_REQUIRE([CARES_INCLUDES_NETDB])dnl
1317  #
1318  tst_links_gethostbyname="unknown"
1319  tst_proto_gethostbyname="unknown"
1320  tst_compi_gethostbyname="unknown"
1321  tst_allow_gethostbyname="unknown"
1322  #
1323  AC_MSG_CHECKING([if gethostbyname can be linked])
1324  AC_LINK_IFELSE([
1325    AC_LANG_PROGRAM([[
1326      $cares_includes_winsock2
1327      $cares_includes_netdb
1328    ]],[[
1329      if(0 != gethostbyname(0))
1330        return 1;
1331    ]])
1332  ],[
1333    AC_MSG_RESULT([yes])
1334    tst_links_gethostbyname="yes"
1335  ],[
1336    AC_MSG_RESULT([no])
1337    tst_links_gethostbyname="no"
1338  ])
1339  #
1340  if test "$tst_links_gethostbyname" = "yes"; then
1341    AC_MSG_CHECKING([if gethostbyname is prototyped])
1342    AC_EGREP_CPP([gethostbyname],[
1343      $cares_includes_winsock2
1344      $cares_includes_netdb
1345    ],[
1346      AC_MSG_RESULT([yes])
1347      tst_proto_gethostbyname="yes"
1348    ],[
1349      AC_MSG_RESULT([no])
1350      tst_proto_gethostbyname="no"
1351    ])
1352  fi
1353  #
1354  if test "$tst_proto_gethostbyname" = "yes"; then
1355    AC_MSG_CHECKING([if gethostbyname is compilable])
1356    AC_COMPILE_IFELSE([
1357      AC_LANG_PROGRAM([[
1358        $cares_includes_winsock2
1359        $cares_includes_netdb
1360      ]],[[
1361        if(0 != gethostbyname(0))
1362          return 1;
1363      ]])
1364    ],[
1365      AC_MSG_RESULT([yes])
1366      tst_compi_gethostbyname="yes"
1367    ],[
1368      AC_MSG_RESULT([no])
1369      tst_compi_gethostbyname="no"
1370    ])
1371  fi
1372  #
1373  if test "$tst_compi_gethostbyname" = "yes"; then
1374    AC_MSG_CHECKING([if gethostbyname usage allowed])
1375    if test "x$cares_disallow_gethostbyname" != "xyes"; then
1376      AC_MSG_RESULT([yes])
1377      tst_allow_gethostbyname="yes"
1378    else
1379      AC_MSG_RESULT([no])
1380      tst_allow_gethostbyname="no"
1381    fi
1382  fi
1383  #
1384  AC_MSG_CHECKING([if gethostbyname might be used])
1385  if test "$tst_links_gethostbyname" = "yes" &&
1386     test "$tst_proto_gethostbyname" = "yes" &&
1387     test "$tst_compi_gethostbyname" = "yes" &&
1388     test "$tst_allow_gethostbyname" = "yes"; then
1389    AC_MSG_RESULT([yes])
1390    AC_DEFINE_UNQUOTED(HAVE_GETHOSTBYNAME, 1,
1391      [Define to 1 if you have the gethostbyname function.])
1392    ac_cv_func_gethostbyname="yes"
1393  else
1394    AC_MSG_RESULT([no])
1395    ac_cv_func_gethostbyname="no"
1396  fi
1397])
1398
1399
1400dnl CARES_CHECK_FUNC_GETHOSTNAME
1401dnl -------------------------------------------------
1402dnl Verify if gethostname is available, prototyped, and
1403dnl can be compiled. If all of these are true, and
1404dnl usage has not been previously disallowed with
1405dnl shell variable cares_disallow_gethostname, then
1406dnl HAVE_GETHOSTNAME will be defined.
1407
1408AC_DEFUN([CARES_CHECK_FUNC_GETHOSTNAME], [
1409  AC_REQUIRE([CARES_INCLUDES_WINSOCK2])dnl
1410  AC_REQUIRE([CARES_INCLUDES_UNISTD])dnl
1411  AC_REQUIRE([CARES_PREPROCESS_CALLCONV])dnl
1412  #
1413  tst_links_gethostname="unknown"
1414  tst_proto_gethostname="unknown"
1415  tst_compi_gethostname="unknown"
1416  tst_allow_gethostname="unknown"
1417  #
1418  AC_MSG_CHECKING([if gethostname can be linked])
1419  AC_LINK_IFELSE([
1420    AC_LANG_PROGRAM([[
1421      $cares_includes_winsock2
1422      $cares_includes_unistd
1423    ]],[[
1424      if(0 != gethostname(0, 0))
1425        return 1;
1426    ]])
1427  ],[
1428    AC_MSG_RESULT([yes])
1429    tst_links_gethostname="yes"
1430  ],[
1431    AC_MSG_RESULT([no])
1432    tst_links_gethostname="no"
1433  ])
1434  #
1435  if test "$tst_links_gethostname" = "yes"; then
1436    AC_MSG_CHECKING([if gethostname is prototyped])
1437    AC_EGREP_CPP([gethostname],[
1438      $cares_includes_winsock2
1439      $cares_includes_unistd
1440    ],[
1441      AC_MSG_RESULT([yes])
1442      tst_proto_gethostname="yes"
1443    ],[
1444      AC_MSG_RESULT([no])
1445      tst_proto_gethostname="no"
1446    ])
1447  fi
1448  #
1449  if test "$tst_proto_gethostname" = "yes"; then
1450    AC_MSG_CHECKING([if gethostname is compilable])
1451    AC_COMPILE_IFELSE([
1452      AC_LANG_PROGRAM([[
1453        $cares_includes_winsock2
1454        $cares_includes_unistd
1455      ]],[[
1456        if(0 != gethostname(0, 0))
1457          return 1;
1458      ]])
1459    ],[
1460      AC_MSG_RESULT([yes])
1461      tst_compi_gethostname="yes"
1462    ],[
1463      AC_MSG_RESULT([no])
1464      tst_compi_gethostname="no"
1465    ])
1466  fi
1467  #
1468  if test "$tst_compi_gethostname" = "yes"; then
1469    AC_MSG_CHECKING([for gethostname arg 2 data type])
1470    tst_gethostname_type_arg2="unknown"
1471    for tst_arg1 in 'char *' 'unsigned char *' 'void *'; do
1472      for tst_arg2 in 'int' 'unsigned int' 'size_t'; do
1473        if test "$tst_gethostname_type_arg2" = "unknown"; then
1474          AC_COMPILE_IFELSE([
1475            AC_LANG_PROGRAM([[
1476              $cares_includes_winsock2
1477              $cares_includes_unistd
1478              $cares_preprocess_callconv
1479              extern int FUNCALLCONV gethostname($tst_arg1, $tst_arg2);
1480            ]],[[
1481              if(0 != gethostname(0, 0))
1482                return 1;
1483            ]])
1484          ],[
1485            tst_gethostname_type_arg2="$tst_arg2"
1486          ])
1487        fi
1488      done
1489    done
1490    AC_MSG_RESULT([$tst_gethostname_type_arg2])
1491    if test "$tst_gethostname_type_arg2" != "unknown"; then
1492      AC_DEFINE_UNQUOTED(GETHOSTNAME_TYPE_ARG2, $tst_gethostname_type_arg2,
1493        [Define to the type of arg 2 for gethostname.])
1494    fi
1495  fi
1496  #
1497  if test "$tst_compi_gethostname" = "yes"; then
1498    AC_MSG_CHECKING([if gethostname usage allowed])
1499    if test "x$cares_disallow_gethostname" != "xyes"; then
1500      AC_MSG_RESULT([yes])
1501      tst_allow_gethostname="yes"
1502    else
1503      AC_MSG_RESULT([no])
1504      tst_allow_gethostname="no"
1505    fi
1506  fi
1507  #
1508  AC_MSG_CHECKING([if gethostname might be used])
1509  if test "$tst_links_gethostname" = "yes" &&
1510     test "$tst_proto_gethostname" = "yes" &&
1511     test "$tst_compi_gethostname" = "yes" &&
1512     test "$tst_allow_gethostname" = "yes"; then
1513    AC_MSG_RESULT([yes])
1514    AC_DEFINE_UNQUOTED(HAVE_GETHOSTNAME, 1,
1515      [Define to 1 if you have the gethostname function.])
1516    ac_cv_func_gethostname="yes"
1517  else
1518    AC_MSG_RESULT([no])
1519    ac_cv_func_gethostname="no"
1520  fi
1521])
1522
1523
1524dnl CARES_CHECK_FUNC_GETSERVBYPORT_R
1525dnl -------------------------------------------------
1526dnl Verify if getservbyport_r is available, prototyped,
1527dnl and can be compiled. If all of these are true, and
1528dnl usage has not been previously disallowed with
1529dnl shell variable cares_disallow_getservbyport_r, then
1530dnl HAVE_GETSERVBYPORT_R will be defined.
1531
1532AC_DEFUN([CARES_CHECK_FUNC_GETSERVBYPORT_R], [
1533  AC_REQUIRE([CARES_INCLUDES_NETDB])dnl
1534  #
1535  tst_links_getservbyport_r="unknown"
1536  tst_proto_getservbyport_r="unknown"
1537  tst_compi_getservbyport_r="unknown"
1538  tst_allow_getservbyport_r="unknown"
1539  tst_nargs_getservbyport_r="unknown"
1540  #
1541  AC_MSG_CHECKING([if getservbyport_r can be linked])
1542  AC_LINK_IFELSE([
1543    AC_LANG_FUNC_LINK_TRY([getservbyport_r])
1544  ],[
1545    AC_MSG_RESULT([yes])
1546    tst_links_getservbyport_r="yes"
1547  ],[
1548    AC_MSG_RESULT([no])
1549    tst_links_getservbyport_r="no"
1550  ])
1551  #
1552  if test "$tst_links_getservbyport_r" = "yes"; then
1553    AC_MSG_CHECKING([if getservbyport_r is prototyped])
1554    AC_EGREP_CPP([getservbyport_r],[
1555      $cares_includes_netdb
1556    ],[
1557      AC_MSG_RESULT([yes])
1558      tst_proto_getservbyport_r="yes"
1559    ],[
1560      AC_MSG_RESULT([no])
1561      tst_proto_getservbyport_r="no"
1562    ])
1563  fi
1564  #
1565  if test "$tst_proto_getservbyport_r" = "yes"; then
1566    if test "$tst_nargs_getservbyport_r" = "unknown"; then
1567      AC_MSG_CHECKING([if getservbyport_r takes 4 args.])
1568      AC_COMPILE_IFELSE([
1569        AC_LANG_PROGRAM([[
1570          $cares_includes_netdb
1571        ]],[[
1572          if(0 != getservbyport_r(0, 0, 0, 0))
1573            return 1;
1574        ]])
1575      ],[
1576        AC_MSG_RESULT([yes])
1577        tst_compi_getservbyport_r="yes"
1578        tst_nargs_getservbyport_r="4"
1579      ],[
1580        AC_MSG_RESULT([no])
1581        tst_compi_getservbyport_r="no"
1582      ])
1583    fi
1584    if test "$tst_nargs_getservbyport_r" = "unknown"; then
1585      AC_MSG_CHECKING([if getservbyport_r takes 5 args.])
1586      AC_COMPILE_IFELSE([
1587        AC_LANG_PROGRAM([[
1588          $cares_includes_netdb
1589        ]],[[
1590          if(0 != getservbyport_r(0, 0, 0, 0, 0))
1591            return 1;
1592        ]])
1593      ],[
1594        AC_MSG_RESULT([yes])
1595        tst_compi_getservbyport_r="yes"
1596        tst_nargs_getservbyport_r="5"
1597      ],[
1598        AC_MSG_RESULT([no])
1599        tst_compi_getservbyport_r="no"
1600      ])
1601    fi
1602    if test "$tst_nargs_getservbyport_r" = "unknown"; then
1603      AC_MSG_CHECKING([if getservbyport_r takes 6 args.])
1604      AC_COMPILE_IFELSE([
1605        AC_LANG_PROGRAM([[
1606          $cares_includes_netdb
1607        ]],[[
1608          if(0 != getservbyport_r(0, 0, 0, 0, 0, 0))
1609            return 1;
1610        ]])
1611      ],[
1612        AC_MSG_RESULT([yes])
1613        tst_compi_getservbyport_r="yes"
1614        tst_nargs_getservbyport_r="6"
1615      ],[
1616        AC_MSG_RESULT([no])
1617        tst_compi_getservbyport_r="no"
1618      ])
1619    fi
1620    AC_MSG_CHECKING([if getservbyport_r is compilable])
1621    if test "$tst_compi_getservbyport_r" = "yes"; then
1622      AC_MSG_RESULT([yes])
1623    else
1624      AC_MSG_RESULT([no])
1625    fi
1626  fi
1627  #
1628  if test "$tst_compi_getservbyport_r" = "yes"; then
1629    AC_MSG_CHECKING([if getservbyport_r usage allowed])
1630    if test "x$cares_disallow_getservbyport_r" != "xyes"; then
1631      AC_MSG_RESULT([yes])
1632      tst_allow_getservbyport_r="yes"
1633    else
1634      AC_MSG_RESULT([no])
1635      tst_allow_getservbyport_r="no"
1636    fi
1637  fi
1638  #
1639  AC_MSG_CHECKING([if getservbyport_r might be used])
1640  if test "$tst_links_getservbyport_r" = "yes" &&
1641     test "$tst_proto_getservbyport_r" = "yes" &&
1642     test "$tst_compi_getservbyport_r" = "yes" &&
1643     test "$tst_allow_getservbyport_r" = "yes"; then
1644    AC_MSG_RESULT([yes])
1645    AC_DEFINE_UNQUOTED(HAVE_GETSERVBYPORT_R, 1,
1646      [Define to 1 if you have the getservbyport_r function.])
1647    AC_DEFINE_UNQUOTED(GETSERVBYPORT_R_ARGS, $tst_nargs_getservbyport_r,
1648      [Specifies the number of arguments to getservbyport_r])
1649    if test "$tst_nargs_getservbyport_r" -eq "4"; then
1650      AC_DEFINE(GETSERVBYPORT_R_BUFSIZE, sizeof(struct servent_data),
1651        [Specifies the size of the buffer to pass to getservbyport_r])
1652    else
1653      AC_DEFINE(GETSERVBYPORT_R_BUFSIZE, 4096,
1654        [Specifies the size of the buffer to pass to getservbyport_r])
1655    fi
1656    ac_cv_func_getservbyport_r="yes"
1657  else
1658    AC_MSG_RESULT([no])
1659    ac_cv_func_getservbyport_r="no"
1660  fi
1661])
1662
1663
1664dnl CARES_CHECK_FUNC_INET_NET_PTON
1665dnl -------------------------------------------------
1666dnl Verify if inet_net_pton is available, prototyped, can
1667dnl be compiled and seems to work. If all of these are
1668dnl true, and usage has not been previously disallowed
1669dnl with shell variable cares_disallow_inet_net_pton, then
1670dnl HAVE_INET_NET_PTON will be defined.
1671
1672AC_DEFUN([CARES_CHECK_FUNC_INET_NET_PTON], [
1673  AC_REQUIRE([CARES_INCLUDES_STDLIB])dnl
1674  AC_REQUIRE([CARES_INCLUDES_ARPA_INET])dnl
1675  AC_REQUIRE([CARES_INCLUDES_STRING])dnl
1676  #
1677  tst_links_inet_net_pton="unknown"
1678  tst_proto_inet_net_pton="unknown"
1679  tst_compi_inet_net_pton="unknown"
1680  tst_works_inet_net_pton="unknown"
1681  tst_allow_inet_net_pton="unknown"
1682  #
1683  AC_MSG_CHECKING([if inet_net_pton can be linked])
1684  AC_LINK_IFELSE([
1685    AC_LANG_FUNC_LINK_TRY([inet_net_pton])
1686  ],[
1687    AC_MSG_RESULT([yes])
1688    tst_links_inet_net_pton="yes"
1689  ],[
1690    AC_MSG_RESULT([no])
1691    tst_links_inet_net_pton="no"
1692  ])
1693  #
1694  if test "$tst_links_inet_net_pton" = "yes"; then
1695    AC_MSG_CHECKING([if inet_net_pton is prototyped])
1696    AC_EGREP_CPP([inet_net_pton],[
1697      $cares_includes_arpa_inet
1698    ],[
1699      AC_MSG_RESULT([yes])
1700      tst_proto_inet_net_pton="yes"
1701    ],[
1702      AC_MSG_RESULT([no])
1703      tst_proto_inet_net_pton="no"
1704    ])
1705  fi
1706  #
1707  if test "$tst_proto_inet_net_pton" = "yes"; then
1708    AC_MSG_CHECKING([if inet_net_pton is compilable])
1709    AC_COMPILE_IFELSE([
1710      AC_LANG_PROGRAM([[
1711        $cares_includes_arpa_inet
1712      ]],[[
1713        if(0 != inet_net_pton(0, 0, 0, 0))
1714          return 1;
1715      ]])
1716    ],[
1717      AC_MSG_RESULT([yes])
1718      tst_compi_inet_net_pton="yes"
1719    ],[
1720      AC_MSG_RESULT([no])
1721      tst_compi_inet_net_pton="no"
1722    ])
1723  fi
1724  #
1725  dnl only do runtime verification when not cross-compiling
1726  if test "x$cross_compiling" != "xyes" &&
1727    test "$tst_compi_inet_net_pton" = "yes"; then
1728    AC_MSG_CHECKING([if inet_net_pton seems to work])
1729    AC_RUN_IFELSE([
1730      AC_LANG_PROGRAM([[
1731        $cares_includes_stdlib
1732        $cares_includes_arpa_inet
1733        $cares_includes_string
1734      ]],[[
1735        unsigned char ipv6a[16+1];
1736        unsigned char ipv4a[4+1];
1737        const char *ipv6net1 = "fe80::214:4fff:fe0b:76c8";
1738        const char *ipv6net2 = "::fffe:7f00:1";
1739        const char *ipv6net3 = "7f20:1::/64";
1740        const char *ipv6net4 = "7f20:1::/2147483649";
1741        const char *ipv4net1 = "192.168.100.1";
1742        const char *ipv4net2 = "192.168.100/32";
1743        const char *ipv4net3 = "192.168.100.1/2147483649";
1744        /* - */
1745        memset(ipv4a, 1, sizeof(ipv4a));
1746        if(32 != inet_net_pton(AF_INET, ipv4net1, ipv4a, 4))
1747          exit(1); /* fail */
1748        /* - */
1749        if( (ipv4a[0x00] != 0xc0) ||
1750            (ipv4a[0x01] != 0xa8) ||
1751            (ipv4a[0x02] != 0x64) ||
1752            (ipv4a[0x03] != 0x01) ||
1753            (ipv4a[0x04] != 0x01) )
1754          exit(1); /* fail */
1755        /* - */
1756        memset(ipv4a, 1, sizeof(ipv4a));
1757        if(32 != inet_net_pton(AF_INET, ipv4net2, ipv4a, 4))
1758          exit(1); /* fail */
1759        /* - */
1760        if( (ipv4a[0x00] != 0xc0) ||
1761            (ipv4a[0x01] != 0xa8) ||
1762            (ipv4a[0x02] != 0x64) ||
1763            (ipv4a[0x03] != 0x00) ||
1764            (ipv4a[0x04] != 0x01) )
1765          exit(1); /* fail */
1766        /* - */
1767        memset(ipv4a, 1, sizeof(ipv4a));
1768        if(-1 != inet_net_pton(AF_INET, ipv4net3, ipv4a, 4))
1769          exit(1); /* fail */
1770        /* - */
1771        memset(ipv6a, 1, sizeof(ipv6a));
1772        if(128 != inet_net_pton(AF_INET6, ipv6net1, ipv6a, 16))
1773          exit(1); /* fail */
1774        /* - */
1775        if( (ipv6a[0x00] != 0xfe) ||
1776            (ipv6a[0x01] != 0x80) ||
1777            (ipv6a[0x08] != 0x02) ||
1778            (ipv6a[0x09] != 0x14) ||
1779            (ipv6a[0x0a] != 0x4f) ||
1780            (ipv6a[0x0b] != 0xff) ||
1781            (ipv6a[0x0c] != 0xfe) ||
1782            (ipv6a[0x0d] != 0x0b) ||
1783            (ipv6a[0x0e] != 0x76) ||
1784            (ipv6a[0x0f] != 0xc8) ||
1785            (ipv6a[0x10] != 0x01) )
1786          exit(1); /* fail */
1787        /* - */
1788        if( (ipv6a[0x02] != 0x0) ||
1789            (ipv6a[0x03] != 0x0) ||
1790            (ipv6a[0x04] != 0x0) ||
1791            (ipv6a[0x05] != 0x0) ||
1792            (ipv6a[0x06] != 0x0) ||
1793            (ipv6a[0x07] != 0x0) )
1794          exit(1); /* fail */
1795        /* - */
1796        memset(ipv6a, 0, sizeof(ipv6a));
1797        ipv6a[0x10] = 0x01;
1798        if(128 != inet_net_pton(AF_INET6, ipv6net2, ipv6a, 16))
1799          exit(1); /* fail */
1800        /* - */
1801        if( (ipv6a[0x0a] != 0xff) ||
1802            (ipv6a[0x0b] != 0xfe) ||
1803            (ipv6a[0x0c] != 0x7f) ||
1804            (ipv6a[0x0f] != 0x01) ||
1805            (ipv6a[0x10] != 0x01) )
1806          exit(1); /* fail */
1807        /* - */
1808        if( (ipv6a[0x00] != 0x0) ||
1809            (ipv6a[0x01] != 0x0) ||
1810            (ipv6a[0x02] != 0x0) ||
1811            (ipv6a[0x03] != 0x0) ||
1812            (ipv6a[0x04] != 0x0) ||
1813            (ipv6a[0x05] != 0x0) ||
1814            (ipv6a[0x06] != 0x0) ||
1815            (ipv6a[0x07] != 0x0) ||
1816            (ipv6a[0x08] != 0x0) ||
1817            (ipv6a[0x09] != 0x0) ||
1818            (ipv6a[0x0d] != 0x0) ||
1819            (ipv6a[0x0e] != 0x0) )
1820          exit(1); /* fail */
1821        /* - */
1822        memset(ipv6a, 1, sizeof(ipv6a));
1823        if(64 != inet_net_pton(AF_INET6, ipv6net3, ipv6a, 16))
1824          exit(1); /* fail */
1825        if( (ipv6a[0x00] != 0x7f) ||
1826            (ipv6a[0x01] != 0x20) ||
1827            (ipv6a[0x03] != 0x01) ||
1828            (ipv6a[0x08] != 0x01) ||
1829            (ipv6a[0x09] != 0x01) ||
1830            (ipv6a[0x0a] != 0x01) ||
1831            (ipv6a[0x0b] != 0x01) ||
1832            (ipv6a[0x0c] != 0x01) ||
1833            (ipv6a[0x0d] != 0x01) ||
1834            (ipv6a[0x0e] != 0x01) ||
1835            (ipv6a[0x0f] != 0x01) ||
1836            (ipv6a[0x10] != 0x01) )
1837          exit(1); /* fail */
1838        if( (ipv6a[0x02] != 0x0) ||
1839            (ipv6a[0x04] != 0x0) ||
1840            (ipv6a[0x05] != 0x0) ||
1841            (ipv6a[0x06] != 0x0) ||
1842            (ipv6a[0x07] != 0x0) ||
1843            (ipv6a[0x07] != 0x0) )
1844          exit(1); /* fail */
1845        /* - */
1846        memset(ipv6a, 1, sizeof(ipv6a));
1847        if(-1 != inet_net_pton(AF_INET6, ipv6net4, ipv6a, 16))
1848          exit(1); /* fail */
1849        /* - */
1850        exit(0);
1851      ]])
1852    ],[
1853      AC_MSG_RESULT([yes])
1854      tst_works_inet_net_pton="yes"
1855    ],[
1856      AC_MSG_RESULT([no])
1857      tst_works_inet_net_pton="no"
1858    ])
1859  fi
1860  #
1861  if test "$tst_compi_inet_net_pton" = "yes" &&
1862    test "$tst_works_inet_net_pton" != "no"; then
1863    AC_MSG_CHECKING([if inet_net_pton usage allowed])
1864    if test "x$cares_disallow_inet_net_pton" != "xyes"; then
1865      AC_MSG_RESULT([yes])
1866      tst_allow_inet_net_pton="yes"
1867    else
1868      AC_MSG_RESULT([no])
1869      tst_allow_inet_net_pton="no"
1870    fi
1871  fi
1872  #
1873  AC_MSG_CHECKING([if inet_net_pton might be used])
1874  if test "$tst_links_inet_net_pton" = "yes" &&
1875     test "$tst_proto_inet_net_pton" = "yes" &&
1876     test "$tst_compi_inet_net_pton" = "yes" &&
1877     test "$tst_allow_inet_net_pton" = "yes" &&
1878     test "$tst_works_inet_net_pton" != "no"; then
1879    AC_MSG_RESULT([yes])
1880    AC_DEFINE_UNQUOTED(HAVE_INET_NET_PTON, 1,
1881      [Define to 1 if you have a IPv6 capable working inet_net_pton function.])
1882    ac_cv_func_inet_net_pton="yes"
1883  else
1884    AC_MSG_RESULT([no])
1885    ac_cv_func_inet_net_pton="no"
1886  fi
1887])
1888
1889
1890dnl CARES_CHECK_FUNC_INET_NTOP
1891dnl -------------------------------------------------
1892dnl Verify if inet_ntop is available, prototyped, can
1893dnl be compiled and seems to work. If all of these are
1894dnl true, and usage has not been previously disallowed
1895dnl with shell variable cares_disallow_inet_ntop, then
1896dnl HAVE_INET_NTOP will be defined.
1897
1898AC_DEFUN([CARES_CHECK_FUNC_INET_NTOP], [
1899  AC_REQUIRE([CARES_INCLUDES_STDLIB])dnl
1900  AC_REQUIRE([CARES_INCLUDES_ARPA_INET])dnl
1901  AC_REQUIRE([CARES_INCLUDES_STRING])dnl
1902  #
1903  tst_links_inet_ntop="unknown"
1904  tst_proto_inet_ntop="unknown"
1905  tst_compi_inet_ntop="unknown"
1906  tst_works_inet_ntop="unknown"
1907  tst_allow_inet_ntop="unknown"
1908  #
1909  AC_MSG_CHECKING([if inet_ntop can be linked])
1910  AC_LINK_IFELSE([
1911    AC_LANG_FUNC_LINK_TRY([inet_ntop])
1912  ],[
1913    AC_MSG_RESULT([yes])
1914    tst_links_inet_ntop="yes"
1915  ],[
1916    AC_MSG_RESULT([no])
1917    tst_links_inet_ntop="no"
1918  ])
1919  #
1920  if test "$tst_links_inet_ntop" = "yes"; then
1921    AC_MSG_CHECKING([if inet_ntop is prototyped])
1922    AC_EGREP_CPP([inet_ntop],[
1923      $cares_includes_arpa_inet
1924    ],[
1925      AC_MSG_RESULT([yes])
1926      tst_proto_inet_ntop="yes"
1927    ],[
1928      AC_MSG_RESULT([no])
1929      tst_proto_inet_ntop="no"
1930    ])
1931  fi
1932  #
1933  if test "$tst_proto_inet_ntop" = "yes"; then
1934    AC_MSG_CHECKING([if inet_ntop is compilable])
1935    AC_COMPILE_IFELSE([
1936      AC_LANG_PROGRAM([[
1937        $cares_includes_arpa_inet
1938      ]],[[
1939        if(0 != inet_ntop(0, 0, 0, 0))
1940          return 1;
1941      ]])
1942    ],[
1943      AC_MSG_RESULT([yes])
1944      tst_compi_inet_ntop="yes"
1945    ],[
1946      AC_MSG_RESULT([no])
1947      tst_compi_inet_ntop="no"
1948    ])
1949  fi
1950  #
1951  dnl only do runtime verification when not cross-compiling
1952  if test "x$cross_compiling" != "xyes" &&
1953    test "$tst_compi_inet_ntop" = "yes"; then
1954    AC_MSG_CHECKING([if inet_ntop seems to work])
1955    AC_RUN_IFELSE([
1956      AC_LANG_PROGRAM([[
1957        $cares_includes_stdlib
1958        $cares_includes_arpa_inet
1959        $cares_includes_string
1960      ]],[[
1961        char ipv6res[sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")];
1962        char ipv4res[sizeof "255.255.255.255"];
1963        unsigned char ipv6a[26];
1964        unsigned char ipv4a[5];
1965        char *ipv6ptr = 0;
1966        char *ipv4ptr = 0;
1967        /* - */
1968        ipv4res[0] = '\0';
1969        ipv4a[0] = 0xc0;
1970        ipv4a[1] = 0xa8;
1971        ipv4a[2] = 0x64;
1972        ipv4a[3] = 0x01;
1973        ipv4a[4] = 0x01;
1974        /* - */
1975        ipv4ptr = inet_ntop(AF_INET, ipv4a, ipv4res, sizeof(ipv4res));
1976        if(!ipv4ptr)
1977          exit(1); /* fail */
1978        if(ipv4ptr != ipv4res)
1979          exit(1); /* fail */
1980        if(!ipv4ptr[0])
1981          exit(1); /* fail */
1982        if(memcmp(ipv4res, "192.168.100.1", 13) != 0)
1983          exit(1); /* fail */
1984        /* - */
1985        ipv6res[0] = '\0';
1986        memset(ipv6a, 0, sizeof(ipv6a));
1987        ipv6a[0] = 0xfe;
1988        ipv6a[1] = 0x80;
1989        ipv6a[8] = 0x02;
1990        ipv6a[9] = 0x14;
1991        ipv6a[10] = 0x4f;
1992        ipv6a[11] = 0xff;
1993        ipv6a[12] = 0xfe;
1994        ipv6a[13] = 0x0b;
1995        ipv6a[14] = 0x76;
1996        ipv6a[15] = 0xc8;
1997        ipv6a[25] = 0x01;
1998        /* - */
1999        ipv6ptr = inet_ntop(AF_INET6, ipv6a, ipv6res, sizeof(ipv6res));
2000        if(!ipv6ptr)
2001          exit(1); /* fail */
2002        if(ipv6ptr != ipv6res)
2003          exit(1); /* fail */
2004        if(!ipv6ptr[0])
2005          exit(1); /* fail */
2006        if(memcmp(ipv6res, "fe80::214:4fff:fe0b:76c8", 24) != 0)
2007          exit(1); /* fail */
2008        /* - */
2009        exit(0);
2010      ]])
2011    ],[
2012      AC_MSG_RESULT([yes])
2013      tst_works_inet_ntop="yes"
2014    ],[
2015      AC_MSG_RESULT([no])
2016      tst_works_inet_ntop="no"
2017    ])
2018  fi
2019  #
2020  if test "$tst_compi_inet_ntop" = "yes" &&
2021    test "$tst_works_inet_ntop" != "no"; then
2022    AC_MSG_CHECKING([if inet_ntop usage allowed])
2023    if test "x$cares_disallow_inet_ntop" != "xyes"; then
2024      AC_MSG_RESULT([yes])
2025      tst_allow_inet_ntop="yes"
2026    else
2027      AC_MSG_RESULT([no])
2028      tst_allow_inet_ntop="no"
2029    fi
2030  fi
2031  #
2032  AC_MSG_CHECKING([if inet_ntop might be used])
2033  if test "$tst_links_inet_ntop" = "yes" &&
2034     test "$tst_proto_inet_ntop" = "yes" &&
2035     test "$tst_compi_inet_ntop" = "yes" &&
2036     test "$tst_allow_inet_ntop" = "yes" &&
2037     test "$tst_works_inet_ntop" != "no"; then
2038    AC_MSG_RESULT([yes])
2039    AC_DEFINE_UNQUOTED(HAVE_INET_NTOP, 1,
2040      [Define to 1 if you have a IPv6 capable working inet_ntop function.])
2041    ac_cv_func_inet_ntop="yes"
2042  else
2043    AC_MSG_RESULT([no])
2044    ac_cv_func_inet_ntop="no"
2045  fi
2046])
2047
2048
2049dnl CARES_CHECK_FUNC_INET_PTON
2050dnl -------------------------------------------------
2051dnl Verify if inet_pton is available, prototyped, can
2052dnl be compiled and seems to work. If all of these are
2053dnl true, and usage has not been previously disallowed
2054dnl with shell variable cares_disallow_inet_pton, then
2055dnl HAVE_INET_PTON will be defined.
2056
2057AC_DEFUN([CARES_CHECK_FUNC_INET_PTON], [
2058  AC_REQUIRE([CARES_INCLUDES_STDLIB])dnl
2059  AC_REQUIRE([CARES_INCLUDES_ARPA_INET])dnl
2060  AC_REQUIRE([CARES_INCLUDES_STRING])dnl
2061  #
2062  tst_links_inet_pton="unknown"
2063  tst_proto_inet_pton="unknown"
2064  tst_compi_inet_pton="unknown"
2065  tst_works_inet_pton="unknown"
2066  tst_allow_inet_pton="unknown"
2067  #
2068  AC_MSG_CHECKING([if inet_pton can be linked])
2069  AC_LINK_IFELSE([
2070    AC_LANG_FUNC_LINK_TRY([inet_pton])
2071  ],[
2072    AC_MSG_RESULT([yes])
2073    tst_links_inet_pton="yes"
2074  ],[
2075    AC_MSG_RESULT([no])
2076    tst_links_inet_pton="no"
2077  ])
2078  #
2079  if test "$tst_links_inet_pton" = "yes"; then
2080    AC_MSG_CHECKING([if inet_pton is prototyped])
2081    AC_EGREP_CPP([inet_pton],[
2082      $cares_includes_arpa_inet
2083    ],[
2084      AC_MSG_RESULT([yes])
2085      tst_proto_inet_pton="yes"
2086    ],[
2087      AC_MSG_RESULT([no])
2088      tst_proto_inet_pton="no"
2089    ])
2090  fi
2091  #
2092  if test "$tst_proto_inet_pton" = "yes"; then
2093    AC_MSG_CHECKING([if inet_pton is compilable])
2094    AC_COMPILE_IFELSE([
2095      AC_LANG_PROGRAM([[
2096        $cares_includes_arpa_inet
2097      ]],[[
2098        if(0 != inet_pton(0, 0, 0))
2099          return 1;
2100      ]])
2101    ],[
2102      AC_MSG_RESULT([yes])
2103      tst_compi_inet_pton="yes"
2104    ],[
2105      AC_MSG_RESULT([no])
2106      tst_compi_inet_pton="no"
2107    ])
2108  fi
2109  #
2110  dnl only do runtime verification when not cross-compiling
2111  if test "x$cross_compiling" != "xyes" &&
2112    test "$tst_compi_inet_pton" = "yes"; then
2113    AC_MSG_CHECKING([if inet_pton seems to work])
2114    AC_RUN_IFELSE([
2115      AC_LANG_PROGRAM([[
2116        $cares_includes_stdlib
2117        $cares_includes_arpa_inet
2118        $cares_includes_string
2119      ]],[[
2120        unsigned char ipv6a[16+1];
2121        unsigned char ipv4a[4+1];
2122        const char *ipv6src = "fe80::214:4fff:fe0b:76c8";
2123        const char *ipv4src = "192.168.100.1";
2124        /* - */
2125        memset(ipv4a, 1, sizeof(ipv4a));
2126        if(1 != inet_pton(AF_INET, ipv4src, ipv4a))
2127          exit(1); /* fail */
2128        /* - */
2129        if( (ipv4a[0] != 0xc0) ||
2130            (ipv4a[1] != 0xa8) ||
2131            (ipv4a[2] != 0x64) ||
2132            (ipv4a[3] != 0x01) ||
2133            (ipv4a[4] != 0x01) )
2134          exit(1); /* fail */
2135        /* - */
2136        memset(ipv6a, 1, sizeof(ipv6a));
2137        if(1 != inet_pton(AF_INET6, ipv6src, ipv6a))
2138          exit(1); /* fail */
2139        /* - */
2140        if( (ipv6a[0]  != 0xfe) ||
2141            (ipv6a[1]  != 0x80) ||
2142            (ipv6a[8]  != 0x02) ||
2143            (ipv6a[9]  != 0x14) ||
2144            (ipv6a[10] != 0x4f) ||
2145            (ipv6a[11] != 0xff) ||
2146            (ipv6a[12] != 0xfe) ||
2147            (ipv6a[13] != 0x0b) ||
2148            (ipv6a[14] != 0x76) ||
2149            (ipv6a[15] != 0xc8) ||
2150            (ipv6a[16] != 0x01) )
2151          exit(1); /* fail */
2152        /* - */
2153        if( (ipv6a[2]  != 0x0) ||
2154            (ipv6a[3]  != 0x0) ||
2155            (ipv6a[4]  != 0x0) ||
2156            (ipv6a[5]  != 0x0) ||
2157            (ipv6a[6]  != 0x0) ||
2158            (ipv6a[7]  != 0x0) )
2159          exit(1); /* fail */
2160        /* - */
2161        exit(0);
2162      ]])
2163    ],[
2164      AC_MSG_RESULT([yes])
2165      tst_works_inet_pton="yes"
2166    ],[
2167      AC_MSG_RESULT([no])
2168      tst_works_inet_pton="no"
2169    ])
2170  fi
2171  #
2172  if test "$tst_compi_inet_pton" = "yes" &&
2173    test "$tst_works_inet_pton" != "no"; then
2174    AC_MSG_CHECKING([if inet_pton usage allowed])
2175    if test "x$cares_disallow_inet_pton" != "xyes"; then
2176      AC_MSG_RESULT([yes])
2177      tst_allow_inet_pton="yes"
2178    else
2179      AC_MSG_RESULT([no])
2180      tst_allow_inet_pton="no"
2181    fi
2182  fi
2183  #
2184  AC_MSG_CHECKING([if inet_pton might be used])
2185  if test "$tst_links_inet_pton" = "yes" &&
2186     test "$tst_proto_inet_pton" = "yes" &&
2187     test "$tst_compi_inet_pton" = "yes" &&
2188     test "$tst_allow_inet_pton" = "yes" &&
2189     test "$tst_works_inet_pton" != "no"; then
2190    AC_MSG_RESULT([yes])
2191    AC_DEFINE_UNQUOTED(HAVE_INET_PTON, 1,
2192      [Define to 1 if you have a IPv6 capable working inet_pton function.])
2193    ac_cv_func_inet_pton="yes"
2194  else
2195    AC_MSG_RESULT([no])
2196    ac_cv_func_inet_pton="no"
2197  fi
2198])
2199
2200
2201dnl CARES_CHECK_FUNC_IOCTL
2202dnl -------------------------------------------------
2203dnl Verify if ioctl is available, prototyped, and
2204dnl can be compiled. If all of these are true, and
2205dnl usage has not been previously disallowed with
2206dnl shell variable cares_disallow_ioctl, then
2207dnl HAVE_IOCTL will be defined.
2208
2209AC_DEFUN([CARES_CHECK_FUNC_IOCTL], [
2210  AC_REQUIRE([CARES_INCLUDES_STROPTS])dnl
2211  #
2212  tst_links_ioctl="unknown"
2213  tst_proto_ioctl="unknown"
2214  tst_compi_ioctl="unknown"
2215  tst_allow_ioctl="unknown"
2216  #
2217  AC_MSG_CHECKING([if ioctl can be linked])
2218  AC_LINK_IFELSE([
2219    AC_LANG_FUNC_LINK_TRY([ioctl])
2220  ],[
2221    AC_MSG_RESULT([yes])
2222    tst_links_ioctl="yes"
2223  ],[
2224    AC_MSG_RESULT([no])
2225    tst_links_ioctl="no"
2226  ])
2227  #
2228  if test "$tst_links_ioctl" = "yes"; then
2229    AC_MSG_CHECKING([if ioctl is prototyped])
2230    AC_EGREP_CPP([ioctl],[
2231      $cares_includes_stropts
2232    ],[
2233      AC_MSG_RESULT([yes])
2234      tst_proto_ioctl="yes"
2235    ],[
2236      AC_MSG_RESULT([no])
2237      tst_proto_ioctl="no"
2238    ])
2239  fi
2240  #
2241  if test "$tst_proto_ioctl" = "yes"; then
2242    AC_MSG_CHECKING([if ioctl is compilable])
2243    AC_COMPILE_IFELSE([
2244      AC_LANG_PROGRAM([[
2245        $cares_includes_stropts
2246      ]],[[
2247        if(0 != ioctl(0, 0, 0))
2248          return 1;
2249      ]])
2250    ],[
2251      AC_MSG_RESULT([yes])
2252      tst_compi_ioctl="yes"
2253    ],[
2254      AC_MSG_RESULT([no])
2255      tst_compi_ioctl="no"
2256    ])
2257  fi
2258  #
2259  if test "$tst_compi_ioctl" = "yes"; then
2260    AC_MSG_CHECKING([if ioctl usage allowed])
2261    if test "x$cares_disallow_ioctl" != "xyes"; then
2262      AC_MSG_RESULT([yes])
2263      tst_allow_ioctl="yes"
2264    else
2265      AC_MSG_RESULT([no])
2266      tst_allow_ioctl="no"
2267    fi
2268  fi
2269  #
2270  AC_MSG_CHECKING([if ioctl might be used])
2271  if test "$tst_links_ioctl" = "yes" &&
2272     test "$tst_proto_ioctl" = "yes" &&
2273     test "$tst_compi_ioctl" = "yes" &&
2274     test "$tst_allow_ioctl" = "yes"; then
2275    AC_MSG_RESULT([yes])
2276    AC_DEFINE_UNQUOTED(HAVE_IOCTL, 1,
2277      [Define to 1 if you have the ioctl function.])
2278    ac_cv_func_ioctl="yes"
2279    CARES_CHECK_FUNC_IOCTL_FIONBIO
2280    CARES_CHECK_FUNC_IOCTL_SIOCGIFADDR
2281  else
2282    AC_MSG_RESULT([no])
2283    ac_cv_func_ioctl="no"
2284  fi
2285])
2286
2287
2288dnl CARES_CHECK_FUNC_IOCTL_FIONBIO
2289dnl -------------------------------------------------
2290dnl Verify if ioctl with the FIONBIO command is
2291dnl available, can be compiled, and seems to work. If
2292dnl all of these are true, then HAVE_IOCTL_FIONBIO
2293dnl will be defined.
2294
2295AC_DEFUN([CARES_CHECK_FUNC_IOCTL_FIONBIO], [
2296  #
2297  tst_compi_ioctl_fionbio="unknown"
2298  tst_allow_ioctl_fionbio="unknown"
2299  #
2300  if test "$ac_cv_func_ioctl" = "yes"; then
2301    AC_MSG_CHECKING([if ioctl FIONBIO is compilable])
2302    AC_COMPILE_IFELSE([
2303      AC_LANG_PROGRAM([[
2304        $cares_includes_stropts
2305      ]],[[
2306        int flags = 0;
2307        if(0 != ioctl(0, FIONBIO, &flags))
2308          return 1;
2309      ]])
2310    ],[
2311      AC_MSG_RESULT([yes])
2312      tst_compi_ioctl_fionbio="yes"
2313    ],[
2314      AC_MSG_RESULT([no])
2315      tst_compi_ioctl_fionbio="no"
2316    ])
2317  fi
2318  #
2319  if test "$tst_compi_ioctl_fionbio" = "yes"; then
2320    AC_MSG_CHECKING([if ioctl FIONBIO usage allowed])
2321    if test "x$cares_disallow_ioctl_fionbio" != "xyes"; then
2322      AC_MSG_RESULT([yes])
2323      tst_allow_ioctl_fionbio="yes"
2324    else
2325      AC_MSG_RESULT([no])
2326      tst_allow_ioctl_fionbio="no"
2327    fi
2328  fi
2329  #
2330  AC_MSG_CHECKING([if ioctl FIONBIO might be used])
2331  if test "$tst_compi_ioctl_fionbio" = "yes" &&
2332     test "$tst_allow_ioctl_fionbio" = "yes"; then
2333    AC_MSG_RESULT([yes])
2334    AC_DEFINE_UNQUOTED(HAVE_IOCTL_FIONBIO, 1,
2335      [Define to 1 if you have a working ioctl FIONBIO function.])
2336    ac_cv_func_ioctl_fionbio="yes"
2337  else
2338    AC_MSG_RESULT([no])
2339    ac_cv_func_ioctl_fionbio="no"
2340  fi
2341])
2342
2343
2344dnl CARES_CHECK_FUNC_IOCTL_SIOCGIFADDR
2345dnl -------------------------------------------------
2346dnl Verify if ioctl with the SIOCGIFADDR command is available,
2347dnl struct ifreq is defined, they can be compiled, and seem to
2348dnl work. If all of these are true, then HAVE_IOCTL_SIOCGIFADDR
2349dnl will be defined.
2350
2351AC_DEFUN([CARES_CHECK_FUNC_IOCTL_SIOCGIFADDR], [
2352  #
2353  tst_compi_ioctl_siocgifaddr="unknown"
2354  tst_allow_ioctl_siocgifaddr="unknown"
2355  #
2356  if test "$ac_cv_func_ioctl" = "yes"; then
2357    AC_MSG_CHECKING([if ioctl SIOCGIFADDR is compilable])
2358    AC_COMPILE_IFELSE([
2359      AC_LANG_PROGRAM([[
2360        $cares_includes_stropts
2361        #include <net/if.h>
2362      ]],[[
2363        struct ifreq ifr;
2364        if(0 != ioctl(0, SIOCGIFADDR, &ifr))
2365          return 1;
2366      ]])
2367    ],[
2368      AC_MSG_RESULT([yes])
2369      tst_compi_ioctl_siocgifaddr="yes"
2370    ],[
2371      AC_MSG_RESULT([no])
2372      tst_compi_ioctl_siocgifaddr="no"
2373    ])
2374  fi
2375  #
2376  if test "$tst_compi_ioctl_siocgifaddr" = "yes"; then
2377    AC_MSG_CHECKING([if ioctl SIOCGIFADDR usage allowed])
2378    if test "x$cares_disallow_ioctl_siocgifaddr" != "xyes"; then
2379      AC_MSG_RESULT([yes])
2380      tst_allow_ioctl_siocgifaddr="yes"
2381    else
2382      AC_MSG_RESULT([no])
2383      tst_allow_ioctl_siocgifaddr="no"
2384    fi
2385  fi
2386  #
2387  AC_MSG_CHECKING([if ioctl SIOCGIFADDR might be used])
2388  if test "$tst_compi_ioctl_siocgifaddr" = "yes" &&
2389     test "$tst_allow_ioctl_siocgifaddr" = "yes"; then
2390    AC_MSG_RESULT([yes])
2391    AC_DEFINE_UNQUOTED(HAVE_IOCTL_SIOCGIFADDR, 1,
2392      [Define to 1 if you have a working ioctl SIOCGIFADDR function.])
2393    ac_cv_func_ioctl_siocgifaddr="yes"
2394  else
2395    AC_MSG_RESULT([no])
2396    ac_cv_func_ioctl_siocgifaddr="no"
2397  fi
2398])
2399
2400
2401dnl CARES_CHECK_FUNC_IOCTLSOCKET
2402dnl -------------------------------------------------
2403dnl Verify if ioctlsocket is available, prototyped, and
2404dnl can be compiled. If all of these are true, and
2405dnl usage has not been previously disallowed with
2406dnl shell variable cares_disallow_ioctlsocket, then
2407dnl HAVE_IOCTLSOCKET will be defined.
2408
2409AC_DEFUN([CARES_CHECK_FUNC_IOCTLSOCKET], [
2410  AC_REQUIRE([CARES_INCLUDES_WINSOCK2])dnl
2411  #
2412  tst_links_ioctlsocket="unknown"
2413  tst_proto_ioctlsocket="unknown"
2414  tst_compi_ioctlsocket="unknown"
2415  tst_allow_ioctlsocket="unknown"
2416  #
2417  AC_MSG_CHECKING([if ioctlsocket can be linked])
2418  AC_LINK_IFELSE([
2419    AC_LANG_PROGRAM([[
2420      $cares_includes_winsock2
2421    ]],[[
2422      if(0 != ioctlsocket(0, 0, 0))
2423        return 1;
2424    ]])
2425  ],[
2426    AC_MSG_RESULT([yes])
2427    tst_links_ioctlsocket="yes"
2428  ],[
2429    AC_MSG_RESULT([no])
2430    tst_links_ioctlsocket="no"
2431  ])
2432  #
2433  if test "$tst_links_ioctlsocket" = "yes"; then
2434    AC_MSG_CHECKING([if ioctlsocket is prototyped])
2435    AC_EGREP_CPP([ioctlsocket],[
2436      $cares_includes_winsock2
2437    ],[
2438      AC_MSG_RESULT([yes])
2439      tst_proto_ioctlsocket="yes"
2440    ],[
2441      AC_MSG_RESULT([no])
2442      tst_proto_ioctlsocket="no"
2443    ])
2444  fi
2445  #
2446  if test "$tst_proto_ioctlsocket" = "yes"; then
2447    AC_MSG_CHECKING([if ioctlsocket is compilable])
2448    AC_COMPILE_IFELSE([
2449      AC_LANG_PROGRAM([[
2450        $cares_includes_winsock2
2451      ]],[[
2452        if(0 != ioctlsocket(0, 0, 0))
2453          return 1;
2454      ]])
2455    ],[
2456      AC_MSG_RESULT([yes])
2457      tst_compi_ioctlsocket="yes"
2458    ],[
2459      AC_MSG_RESULT([no])
2460      tst_compi_ioctlsocket="no"
2461    ])
2462  fi
2463  #
2464  if test "$tst_compi_ioctlsocket" = "yes"; then
2465    AC_MSG_CHECKING([if ioctlsocket usage allowed])
2466    if test "x$cares_disallow_ioctlsocket" != "xyes"; then
2467      AC_MSG_RESULT([yes])
2468      tst_allow_ioctlsocket="yes"
2469    else
2470      AC_MSG_RESULT([no])
2471      tst_allow_ioctlsocket="no"
2472    fi
2473  fi
2474  #
2475  AC_MSG_CHECKING([if ioctlsocket might be used])
2476  if test "$tst_links_ioctlsocket" = "yes" &&
2477     test "$tst_proto_ioctlsocket" = "yes" &&
2478     test "$tst_compi_ioctlsocket" = "yes" &&
2479     test "$tst_allow_ioctlsocket" = "yes"; then
2480    AC_MSG_RESULT([yes])
2481    AC_DEFINE_UNQUOTED(HAVE_IOCTLSOCKET, 1,
2482      [Define to 1 if you have the ioctlsocket function.])
2483    ac_cv_func_ioctlsocket="yes"
2484    CARES_CHECK_FUNC_IOCTLSOCKET_FIONBIO
2485  else
2486    AC_MSG_RESULT([no])
2487    ac_cv_func_ioctlsocket="no"
2488  fi
2489])
2490
2491
2492dnl CARES_CHECK_FUNC_IOCTLSOCKET_FIONBIO
2493dnl -------------------------------------------------
2494dnl Verify if ioctlsocket with the FIONBIO command is
2495dnl available, can be compiled, and seems to work. If
2496dnl all of these are true, then HAVE_IOCTLSOCKET_FIONBIO
2497dnl will be defined.
2498
2499AC_DEFUN([CARES_CHECK_FUNC_IOCTLSOCKET_FIONBIO], [
2500  #
2501  tst_compi_ioctlsocket_fionbio="unknown"
2502  tst_allow_ioctlsocket_fionbio="unknown"
2503  #
2504  if test "$ac_cv_func_ioctlsocket" = "yes"; then
2505    AC_MSG_CHECKING([if ioctlsocket FIONBIO is compilable])
2506    AC_COMPILE_IFELSE([
2507      AC_LANG_PROGRAM([[
2508        $cares_includes_winsock2
2509      ]],[[
2510        int flags = 0;
2511        if(0 != ioctlsocket(0, FIONBIO, &flags))
2512          return 1;
2513      ]])
2514    ],[
2515      AC_MSG_RESULT([yes])
2516      tst_compi_ioctlsocket_fionbio="yes"
2517    ],[
2518      AC_MSG_RESULT([no])
2519      tst_compi_ioctlsocket_fionbio="no"
2520    ])
2521  fi
2522  #
2523  if test "$tst_compi_ioctlsocket_fionbio" = "yes"; then
2524    AC_MSG_CHECKING([if ioctlsocket FIONBIO usage allowed])
2525    if test "x$cares_disallow_ioctlsocket_fionbio" != "xyes"; then
2526      AC_MSG_RESULT([yes])
2527      tst_allow_ioctlsocket_fionbio="yes"
2528    else
2529      AC_MSG_RESULT([no])
2530      tst_allow_ioctlsocket_fionbio="no"
2531    fi
2532  fi
2533  #
2534  AC_MSG_CHECKING([if ioctlsocket FIONBIO might be used])
2535  if test "$tst_compi_ioctlsocket_fionbio" = "yes" &&
2536     test "$tst_allow_ioctlsocket_fionbio" = "yes"; then
2537    AC_MSG_RESULT([yes])
2538    AC_DEFINE_UNQUOTED(HAVE_IOCTLSOCKET_FIONBIO, 1,
2539      [Define to 1 if you have a working ioctlsocket FIONBIO function.])
2540    ac_cv_func_ioctlsocket_fionbio="yes"
2541  else
2542    AC_MSG_RESULT([no])
2543    ac_cv_func_ioctlsocket_fionbio="no"
2544  fi
2545])
2546
2547
2548dnl CARES_CHECK_FUNC_IOCTLSOCKET_CAMEL
2549dnl -------------------------------------------------
2550dnl Verify if IoctlSocket is available, prototyped, and
2551dnl can be compiled. If all of these are true, and
2552dnl usage has not been previously disallowed with
2553dnl shell variable cares_disallow_ioctlsocket_camel,
2554dnl then HAVE_IOCTLSOCKET_CAMEL will be defined.
2555
2556AC_DEFUN([CARES_CHECK_FUNC_IOCTLSOCKET_CAMEL], [
2557  AC_REQUIRE([CARES_INCLUDES_STROPTS])dnl
2558  #
2559  tst_links_ioctlsocket_camel="unknown"
2560  tst_proto_ioctlsocket_camel="unknown"
2561  tst_compi_ioctlsocket_camel="unknown"
2562  tst_allow_ioctlsocket_camel="unknown"
2563  #
2564  AC_MSG_CHECKING([if IoctlSocket can be linked])
2565  AC_LINK_IFELSE([
2566    AC_LANG_FUNC_LINK_TRY([IoctlSocket])
2567  ],[
2568    AC_MSG_RESULT([yes])
2569    tst_links_ioctlsocket_camel="yes"
2570  ],[
2571    AC_MSG_RESULT([no])
2572    tst_links_ioctlsocket_camel="no"
2573  ])
2574  #
2575  if test "$tst_links_ioctlsocket_camel" = "yes"; then
2576    AC_MSG_CHECKING([if IoctlSocket is prototyped])
2577    AC_EGREP_CPP([IoctlSocket],[
2578      $cares_includes_stropts
2579    ],[
2580      AC_MSG_RESULT([yes])
2581      tst_proto_ioctlsocket_camel="yes"
2582    ],[
2583      AC_MSG_RESULT([no])
2584      tst_proto_ioctlsocket_camel="no"
2585    ])
2586  fi
2587  #
2588  if test "$tst_proto_ioctlsocket_camel" = "yes"; then
2589    AC_MSG_CHECKING([if IoctlSocket is compilable])
2590    AC_COMPILE_IFELSE([
2591      AC_LANG_PROGRAM([[
2592        $cares_includes_stropts
2593      ]],[[
2594        if(0 != IoctlSocket(0, 0, 0))
2595          return 1;
2596      ]])
2597    ],[
2598      AC_MSG_RESULT([yes])
2599      tst_compi_ioctlsocket_camel="yes"
2600    ],[
2601      AC_MSG_RESULT([no])
2602      tst_compi_ioctlsocket_camel="no"
2603    ])
2604  fi
2605  #
2606  if test "$tst_compi_ioctlsocket_camel" = "yes"; then
2607    AC_MSG_CHECKING([if IoctlSocket usage allowed])
2608    if test "x$cares_disallow_ioctlsocket_camel" != "xyes"; then
2609      AC_MSG_RESULT([yes])
2610      tst_allow_ioctlsocket_camel="yes"
2611    else
2612      AC_MSG_RESULT([no])
2613      tst_allow_ioctlsocket_camel="no"
2614    fi
2615  fi
2616  #
2617  AC_MSG_CHECKING([if IoctlSocket might be used])
2618  if test "$tst_links_ioctlsocket_camel" = "yes" &&
2619     test "$tst_proto_ioctlsocket_camel" = "yes" &&
2620     test "$tst_compi_ioctlsocket_camel" = "yes" &&
2621     test "$tst_allow_ioctlsocket_camel" = "yes"; then
2622    AC_MSG_RESULT([yes])
2623    AC_DEFINE_UNQUOTED(HAVE_IOCTLSOCKET_CAMEL, 1,
2624      [Define to 1 if you have the IoctlSocket camel case function.])
2625    ac_cv_func_ioctlsocket_camel="yes"
2626    CARES_CHECK_FUNC_IOCTLSOCKET_CAMEL_FIONBIO
2627  else
2628    AC_MSG_RESULT([no])
2629    ac_cv_func_ioctlsocket_camel="no"
2630  fi
2631])
2632
2633
2634dnl CARES_CHECK_FUNC_IOCTLSOCKET_CAMEL_FIONBIO
2635dnl -------------------------------------------------
2636dnl Verify if IoctlSocket with FIONBIO command is available,
2637dnl can be compiled, and seems to work. If all of these are
2638dnl true, then HAVE_IOCTLSOCKET_CAMEL_FIONBIO will be defined.
2639
2640AC_DEFUN([CARES_CHECK_FUNC_IOCTLSOCKET_CAMEL_FIONBIO], [
2641  #
2642  tst_compi_ioctlsocket_camel_fionbio="unknown"
2643  tst_allow_ioctlsocket_camel_fionbio="unknown"
2644  #
2645  if test "$ac_cv_func_ioctlsocket_camel" = "yes"; then
2646    AC_MSG_CHECKING([if IoctlSocket FIONBIO is compilable])
2647    AC_COMPILE_IFELSE([
2648      AC_LANG_PROGRAM([[
2649        $cares_includes_stropts
2650      ]],[[
2651        long flags = 0;
2652        if(0 != ioctlsocket(0, FIONBIO, &flags))
2653          return 1;
2654      ]])
2655    ],[
2656      AC_MSG_RESULT([yes])
2657      tst_compi_ioctlsocket_camel_fionbio="yes"
2658    ],[
2659      AC_MSG_RESULT([no])
2660      tst_compi_ioctlsocket_camel_fionbio="no"
2661    ])
2662  fi
2663  #
2664  if test "$tst_compi_ioctlsocket_camel_fionbio" = "yes"; then
2665    AC_MSG_CHECKING([if IoctlSocket FIONBIO usage allowed])
2666    if test "x$cares_disallow_ioctlsocket_camel_fionbio" != "xyes"; then
2667      AC_MSG_RESULT([yes])
2668      tst_allow_ioctlsocket_camel_fionbio="yes"
2669    else
2670      AC_MSG_RESULT([no])
2671      tst_allow_ioctlsocket_camel_fionbio="no"
2672    fi
2673  fi
2674  #
2675  AC_MSG_CHECKING([if IoctlSocket FIONBIO might be used])
2676  if test "$tst_compi_ioctlsocket_camel_fionbio" = "yes" &&
2677     test "$tst_allow_ioctlsocket_camel_fionbio" = "yes"; then
2678    AC_MSG_RESULT([yes])
2679    AC_DEFINE_UNQUOTED(HAVE_IOCTLSOCKET_CAMEL_FIONBIO, 1,
2680      [Define to 1 if you have a working IoctlSocket camel case FIONBIO function.])
2681    ac_cv_func_ioctlsocket_camel_fionbio="yes"
2682  else
2683    AC_MSG_RESULT([no])
2684    ac_cv_func_ioctlsocket_camel_fionbio="no"
2685  fi
2686])
2687
2688
2689dnl CARES_CHECK_FUNC_SETSOCKOPT
2690dnl -------------------------------------------------
2691dnl Verify if setsockopt is available, prototyped, and
2692dnl can be compiled. If all of these are true, and
2693dnl usage has not been previously disallowed with
2694dnl shell variable cares_disallow_setsockopt, then
2695dnl HAVE_SETSOCKOPT will be defined.
2696
2697AC_DEFUN([CARES_CHECK_FUNC_SETSOCKOPT], [
2698  AC_REQUIRE([CARES_INCLUDES_WINSOCK2])dnl
2699  AC_REQUIRE([CARES_INCLUDES_SYS_SOCKET])dnl
2700  #
2701  tst_links_setsockopt="unknown"
2702  tst_proto_setsockopt="unknown"
2703  tst_compi_setsockopt="unknown"
2704  tst_allow_setsockopt="unknown"
2705  #
2706  AC_MSG_CHECKING([if setsockopt can be linked])
2707  AC_LINK_IFELSE([
2708    AC_LANG_PROGRAM([[
2709      $cares_includes_winsock2
2710      $cares_includes_sys_socket
2711    ]],[[
2712      if(0 != setsockopt(0, 0, 0, 0, 0))
2713        return 1;
2714    ]])
2715  ],[
2716    AC_MSG_RESULT([yes])
2717    tst_links_setsockopt="yes"
2718  ],[
2719    AC_MSG_RESULT([no])
2720    tst_links_setsockopt="no"
2721  ])
2722  #
2723  if test "$tst_links_setsockopt" = "yes"; then
2724    AC_MSG_CHECKING([if setsockopt is prototyped])
2725    AC_EGREP_CPP([setsockopt],[
2726      $cares_includes_winsock2
2727      $cares_includes_sys_socket
2728    ],[
2729      AC_MSG_RESULT([yes])
2730      tst_proto_setsockopt="yes"
2731    ],[
2732      AC_MSG_RESULT([no])
2733      tst_proto_setsockopt="no"
2734    ])
2735  fi
2736  #
2737  if test "$tst_proto_setsockopt" = "yes"; then
2738    AC_MSG_CHECKING([if setsockopt is compilable])
2739    AC_COMPILE_IFELSE([
2740      AC_LANG_PROGRAM([[
2741        $cares_includes_winsock2
2742        $cares_includes_sys_socket
2743      ]],[[
2744        if(0 != setsockopt(0, 0, 0, 0, 0))
2745          return 1;
2746      ]])
2747    ],[
2748      AC_MSG_RESULT([yes])
2749      tst_compi_setsockopt="yes"
2750    ],[
2751      AC_MSG_RESULT([no])
2752      tst_compi_setsockopt="no"
2753    ])
2754  fi
2755  #
2756  if test "$tst_compi_setsockopt" = "yes"; then
2757    AC_MSG_CHECKING([if setsockopt usage allowed])
2758    if test "x$cares_disallow_setsockopt" != "xyes"; then
2759      AC_MSG_RESULT([yes])
2760      tst_allow_setsockopt="yes"
2761    else
2762      AC_MSG_RESULT([no])
2763      tst_allow_setsockopt="no"
2764    fi
2765  fi
2766  #
2767  AC_MSG_CHECKING([if setsockopt might be used])
2768  if test "$tst_links_setsockopt" = "yes" &&
2769     test "$tst_proto_setsockopt" = "yes" &&
2770     test "$tst_compi_setsockopt" = "yes" &&
2771     test "$tst_allow_setsockopt" = "yes"; then
2772    AC_MSG_RESULT([yes])
2773    AC_DEFINE_UNQUOTED(HAVE_SETSOCKOPT, 1,
2774      [Define to 1 if you have the setsockopt function.])
2775    ac_cv_func_setsockopt="yes"
2776    CARES_CHECK_FUNC_SETSOCKOPT_SO_NONBLOCK
2777  else
2778    AC_MSG_RESULT([no])
2779    ac_cv_func_setsockopt="no"
2780  fi
2781])
2782
2783
2784dnl CARES_CHECK_FUNC_SETSOCKOPT_SO_NONBLOCK
2785dnl -------------------------------------------------
2786dnl Verify if setsockopt with the SO_NONBLOCK command is
2787dnl available, can be compiled, and seems to work. If
2788dnl all of these are true, then HAVE_SETSOCKOPT_SO_NONBLOCK
2789dnl will be defined.
2790
2791AC_DEFUN([CARES_CHECK_FUNC_SETSOCKOPT_SO_NONBLOCK], [
2792  #
2793  tst_compi_setsockopt_so_nonblock="unknown"
2794  tst_allow_setsockopt_so_nonblock="unknown"
2795  #
2796  if test "$ac_cv_func_setsockopt" = "yes"; then
2797    AC_MSG_CHECKING([if setsockopt SO_NONBLOCK is compilable])
2798    AC_COMPILE_IFELSE([
2799      AC_LANG_PROGRAM([[
2800        $cares_includes_winsock2
2801        $cares_includes_sys_socket
2802      ]],[[
2803        if(0 != setsockopt(0, SOL_SOCKET, SO_NONBLOCK, 0, 0))
2804          return 1;
2805      ]])
2806    ],[
2807      AC_MSG_RESULT([yes])
2808      tst_compi_setsockopt_so_nonblock="yes"
2809    ],[
2810      AC_MSG_RESULT([no])
2811      tst_compi_setsockopt_so_nonblock="no"
2812    ])
2813  fi
2814  #
2815  if test "$tst_compi_setsockopt_so_nonblock" = "yes"; then
2816    AC_MSG_CHECKING([if setsockopt SO_NONBLOCK usage allowed])
2817    if test "x$cares_disallow_setsockopt_so_nonblock" != "xyes"; then
2818      AC_MSG_RESULT([yes])
2819      tst_allow_setsockopt_so_nonblock="yes"
2820    else
2821      AC_MSG_RESULT([no])
2822      tst_allow_setsockopt_so_nonblock="no"
2823    fi
2824  fi
2825  #
2826  AC_MSG_CHECKING([if setsockopt SO_NONBLOCK might be used])
2827  if test "$tst_compi_setsockopt_so_nonblock" = "yes" &&
2828     test "$tst_allow_setsockopt_so_nonblock" = "yes"; then
2829    AC_MSG_RESULT([yes])
2830    AC_DEFINE_UNQUOTED(HAVE_SETSOCKOPT_SO_NONBLOCK, 1,
2831      [Define to 1 if you have a working setsockopt SO_NONBLOCK function.])
2832    ac_cv_func_setsockopt_so_nonblock="yes"
2833  else
2834    AC_MSG_RESULT([no])
2835    ac_cv_func_setsockopt_so_nonblock="no"
2836  fi
2837])
2838
2839
2840dnl CARES_CHECK_FUNC_SOCKET
2841dnl -------------------------------------------------
2842dnl Verify if socket is available, prototyped, and
2843dnl can be compiled. If all of these are true, and
2844dnl usage has not been previously disallowed with
2845dnl shell variable cares_disallow_socket, then
2846dnl HAVE_SOCKET will be defined.
2847
2848AC_DEFUN([CARES_CHECK_FUNC_SOCKET], [
2849  AC_REQUIRE([CARES_INCLUDES_WINSOCK2])dnl
2850  AC_REQUIRE([CARES_INCLUDES_SYS_SOCKET])dnl
2851  AC_REQUIRE([CARES_INCLUDES_SOCKET])dnl
2852  #
2853  tst_links_socket="unknown"
2854  tst_proto_socket="unknown"
2855  tst_compi_socket="unknown"
2856  tst_allow_socket="unknown"
2857  #
2858  AC_MSG_CHECKING([if socket can be linked])
2859  AC_LINK_IFELSE([
2860    AC_LANG_PROGRAM([[
2861      $cares_includes_winsock2
2862      $cares_includes_sys_socket
2863      $cares_includes_socket
2864    ]],[[
2865      if(0 != socket(0, 0, 0))
2866        return 1;
2867    ]])
2868  ],[
2869    AC_MSG_RESULT([yes])
2870    tst_links_socket="yes"
2871  ],[
2872    AC_MSG_RESULT([no])
2873    tst_links_socket="no"
2874  ])
2875  #
2876  if test "$tst_links_socket" = "yes"; then
2877    AC_MSG_CHECKING([if socket is prototyped])
2878    AC_EGREP_CPP([socket],[
2879      $cares_includes_winsock2
2880      $cares_includes_sys_socket
2881      $cares_includes_socket
2882    ],[
2883      AC_MSG_RESULT([yes])
2884      tst_proto_socket="yes"
2885    ],[
2886      AC_MSG_RESULT([no])
2887      tst_proto_socket="no"
2888    ])
2889  fi
2890  #
2891  if test "$tst_proto_socket" = "yes"; then
2892    AC_MSG_CHECKING([if socket is compilable])
2893    AC_COMPILE_IFELSE([
2894      AC_LANG_PROGRAM([[
2895        $cares_includes_winsock2
2896        $cares_includes_sys_socket
2897        $cares_includes_socket
2898      ]],[[
2899        if(0 != socket(0, 0, 0))
2900          return 1;
2901      ]])
2902    ],[
2903      AC_MSG_RESULT([yes])
2904      tst_compi_socket="yes"
2905    ],[
2906      AC_MSG_RESULT([no])
2907      tst_compi_socket="no"
2908    ])
2909  fi
2910  #
2911  if test "$tst_compi_socket" = "yes"; then
2912    AC_MSG_CHECKING([if socket usage allowed])
2913    if test "x$cares_disallow_socket" != "xyes"; then
2914      AC_MSG_RESULT([yes])
2915      tst_allow_socket="yes"
2916    else
2917      AC_MSG_RESULT([no])
2918      tst_allow_socket="no"
2919    fi
2920  fi
2921  #
2922  AC_MSG_CHECKING([if socket might be used])
2923  if test "$tst_links_socket" = "yes" &&
2924     test "$tst_proto_socket" = "yes" &&
2925     test "$tst_compi_socket" = "yes" &&
2926     test "$tst_allow_socket" = "yes"; then
2927    AC_MSG_RESULT([yes])
2928    AC_DEFINE_UNQUOTED(HAVE_SOCKET, 1,
2929      [Define to 1 if you have the socket function.])
2930    ac_cv_func_socket="yes"
2931  else
2932    AC_MSG_RESULT([no])
2933    ac_cv_func_socket="no"
2934  fi
2935])
2936
2937
2938dnl CARES_CHECK_FUNC_STRCASECMP
2939dnl -------------------------------------------------
2940dnl Verify if strcasecmp is available, prototyped, and
2941dnl can be compiled. If all of these are true, and
2942dnl usage has not been previously disallowed with
2943dnl shell variable cares_disallow_strcasecmp, then
2944dnl HAVE_STRCASECMP will be defined.
2945
2946AC_DEFUN([CARES_CHECK_FUNC_STRCASECMP], [
2947  AC_REQUIRE([CARES_INCLUDES_STRING])dnl
2948  #
2949  tst_links_strcasecmp="unknown"
2950  tst_proto_strcasecmp="unknown"
2951  tst_compi_strcasecmp="unknown"
2952  tst_allow_strcasecmp="unknown"
2953  #
2954  AC_MSG_CHECKING([if strcasecmp can be linked])
2955  AC_LINK_IFELSE([
2956    AC_LANG_FUNC_LINK_TRY([strcasecmp])
2957  ],[
2958    AC_MSG_RESULT([yes])
2959    tst_links_strcasecmp="yes"
2960  ],[
2961    AC_MSG_RESULT([no])
2962    tst_links_strcasecmp="no"
2963  ])
2964  #
2965  if test "$tst_links_strcasecmp" = "yes"; then
2966    AC_MSG_CHECKING([if strcasecmp is prototyped])
2967    AC_EGREP_CPP([strcasecmp],[
2968      $cares_includes_string
2969    ],[
2970      AC_MSG_RESULT([yes])
2971      tst_proto_strcasecmp="yes"
2972    ],[
2973      AC_MSG_RESULT([no])
2974      tst_proto_strcasecmp="no"
2975    ])
2976  fi
2977  #
2978  if test "$tst_proto_strcasecmp" = "yes"; then
2979    AC_MSG_CHECKING([if strcasecmp is compilable])
2980    AC_COMPILE_IFELSE([
2981      AC_LANG_PROGRAM([[
2982        $cares_includes_string
2983      ]],[[
2984        if(0 != strcasecmp(0, 0))
2985          return 1;
2986      ]])
2987    ],[
2988      AC_MSG_RESULT([yes])
2989      tst_compi_strcasecmp="yes"
2990    ],[
2991      AC_MSG_RESULT([no])
2992      tst_compi_strcasecmp="no"
2993    ])
2994  fi
2995  #
2996  if test "$tst_compi_strcasecmp" = "yes"; then
2997    AC_MSG_CHECKING([if strcasecmp usage allowed])
2998    if test "x$cares_disallow_strcasecmp" != "xyes"; then
2999      AC_MSG_RESULT([yes])
3000      tst_allow_strcasecmp="yes"
3001    else
3002      AC_MSG_RESULT([no])
3003      tst_allow_strcasecmp="no"
3004    fi
3005  fi
3006  #
3007  AC_MSG_CHECKING([if strcasecmp might be used])
3008  if test "$tst_links_strcasecmp" = "yes" &&
3009     test "$tst_proto_strcasecmp" = "yes" &&
3010     test "$tst_compi_strcasecmp" = "yes" &&
3011     test "$tst_allow_strcasecmp" = "yes"; then
3012    AC_MSG_RESULT([yes])
3013    AC_DEFINE_UNQUOTED(HAVE_STRCASECMP, 1,
3014      [Define to 1 if you have the strcasecmp function.])
3015    ac_cv_func_strcasecmp="yes"
3016  else
3017    AC_MSG_RESULT([no])
3018    ac_cv_func_strcasecmp="no"
3019  fi
3020])
3021
3022
3023dnl CARES_CHECK_FUNC_STRCMPI
3024dnl -------------------------------------------------
3025dnl Verify if strcmpi is available, prototyped, and
3026dnl can be compiled. If all of these are true, and
3027dnl usage has not been previously disallowed with
3028dnl shell variable cares_disallow_strcmpi, then
3029dnl HAVE_STRCMPI will be defined.
3030
3031AC_DEFUN([CARES_CHECK_FUNC_STRCMPI], [
3032  AC_REQUIRE([CARES_INCLUDES_STRING])dnl
3033  #
3034  tst_links_strcmpi="unknown"
3035  tst_proto_strcmpi="unknown"
3036  tst_compi_strcmpi="unknown"
3037  tst_allow_strcmpi="unknown"
3038  #
3039  AC_MSG_CHECKING([if strcmpi can be linked])
3040  AC_LINK_IFELSE([
3041    AC_LANG_FUNC_LINK_TRY([strcmpi])
3042  ],[
3043    AC_MSG_RESULT([yes])
3044    tst_links_strcmpi="yes"
3045  ],[
3046    AC_MSG_RESULT([no])
3047    tst_links_strcmpi="no"
3048  ])
3049  #
3050  if test "$tst_links_strcmpi" = "yes"; then
3051    AC_MSG_CHECKING([if strcmpi is prototyped])
3052    AC_EGREP_CPP([strcmpi],[
3053      $cares_includes_string
3054    ],[
3055      AC_MSG_RESULT([yes])
3056      tst_proto_strcmpi="yes"
3057    ],[
3058      AC_MSG_RESULT([no])
3059      tst_proto_strcmpi="no"
3060    ])
3061  fi
3062  #
3063  if test "$tst_proto_strcmpi" = "yes"; then
3064    AC_MSG_CHECKING([if strcmpi is compilable])
3065    AC_COMPILE_IFELSE([
3066      AC_LANG_PROGRAM([[
3067        $cares_includes_string
3068      ]],[[
3069        if(0 != strcmpi(0, 0))
3070          return 1;
3071      ]])
3072    ],[
3073      AC_MSG_RESULT([yes])
3074      tst_compi_strcmpi="yes"
3075    ],[
3076      AC_MSG_RESULT([no])
3077      tst_compi_strcmpi="no"
3078    ])
3079  fi
3080  #
3081  if test "$tst_compi_strcmpi" = "yes"; then
3082    AC_MSG_CHECKING([if strcmpi usage allowed])
3083    if test "x$cares_disallow_strcmpi" != "xyes"; then
3084      AC_MSG_RESULT([yes])
3085      tst_allow_strcmpi="yes"
3086    else
3087      AC_MSG_RESULT([no])
3088      tst_allow_strcmpi="no"
3089    fi
3090  fi
3091  #
3092  AC_MSG_CHECKING([if strcmpi might be used])
3093  if test "$tst_links_strcmpi" = "yes" &&
3094     test "$tst_proto_strcmpi" = "yes" &&
3095     test "$tst_compi_strcmpi" = "yes" &&
3096     test "$tst_allow_strcmpi" = "yes"; then
3097    AC_MSG_RESULT([yes])
3098    AC_DEFINE_UNQUOTED(HAVE_STRCMPI, 1,
3099      [Define to 1 if you have the strcmpi function.])
3100    ac_cv_func_strcmpi="yes"
3101  else
3102    AC_MSG_RESULT([no])
3103    ac_cv_func_strcmpi="no"
3104  fi
3105])
3106
3107
3108dnl CARES_CHECK_FUNC_STRDUP
3109dnl -------------------------------------------------
3110dnl Verify if strdup is available, prototyped, and
3111dnl can be compiled. If all of these are true, and
3112dnl usage has not been previously disallowed with
3113dnl shell variable cares_disallow_strdup, then
3114dnl HAVE_STRDUP will be defined.
3115
3116AC_DEFUN([CARES_CHECK_FUNC_STRDUP], [
3117  AC_REQUIRE([CARES_INCLUDES_STRING])dnl
3118  #
3119  tst_links_strdup="unknown"
3120  tst_proto_strdup="unknown"
3121  tst_compi_strdup="unknown"
3122  tst_allow_strdup="unknown"
3123  #
3124  AC_MSG_CHECKING([if strdup can be linked])
3125  AC_LINK_IFELSE([
3126    AC_LANG_FUNC_LINK_TRY([strdup])
3127  ],[
3128    AC_MSG_RESULT([yes])
3129    tst_links_strdup="yes"
3130  ],[
3131    AC_MSG_RESULT([no])
3132    tst_links_strdup="no"
3133  ])
3134  #
3135  if test "$tst_links_strdup" = "yes"; then
3136    AC_MSG_CHECKING([if strdup is prototyped])
3137    AC_EGREP_CPP([strdup],[
3138      $cares_includes_string
3139    ],[
3140      AC_MSG_RESULT([yes])
3141      tst_proto_strdup="yes"
3142    ],[
3143      AC_MSG_RESULT([no])
3144      tst_proto_strdup="no"
3145    ])
3146  fi
3147  #
3148  if test "$tst_proto_strdup" = "yes"; then
3149    AC_MSG_CHECKING([if strdup is compilable])
3150    AC_COMPILE_IFELSE([
3151      AC_LANG_PROGRAM([[
3152        $cares_includes_string
3153      ]],[[
3154        if(0 != strdup(0))
3155          return 1;
3156      ]])
3157    ],[
3158      AC_MSG_RESULT([yes])
3159      tst_compi_strdup="yes"
3160    ],[
3161      AC_MSG_RESULT([no])
3162      tst_compi_strdup="no"
3163    ])
3164  fi
3165  #
3166  if test "$tst_compi_strdup" = "yes"; then
3167    AC_MSG_CHECKING([if strdup usage allowed])
3168    if test "x$cares_disallow_strdup" != "xyes"; then
3169      AC_MSG_RESULT([yes])
3170      tst_allow_strdup="yes"
3171    else
3172      AC_MSG_RESULT([no])
3173      tst_allow_strdup="no"
3174    fi
3175  fi
3176  #
3177  AC_MSG_CHECKING([if strdup might be used])
3178  if test "$tst_links_strdup" = "yes" &&
3179     test "$tst_proto_strdup" = "yes" &&
3180     test "$tst_compi_strdup" = "yes" &&
3181     test "$tst_allow_strdup" = "yes"; then
3182    AC_MSG_RESULT([yes])
3183    AC_DEFINE_UNQUOTED(HAVE_STRDUP, 1,
3184      [Define to 1 if you have the strdup function.])
3185    ac_cv_func_strdup="yes"
3186  else
3187    AC_MSG_RESULT([no])
3188    ac_cv_func_strdup="no"
3189  fi
3190])
3191
3192
3193dnl CARES_CHECK_FUNC_STRICMP
3194dnl -------------------------------------------------
3195dnl Verify if stricmp is available, prototyped, and
3196dnl can be compiled. If all of these are true, and
3197dnl usage has not been previously disallowed with
3198dnl shell variable cares_disallow_stricmp, then
3199dnl HAVE_STRICMP will be defined.
3200
3201AC_DEFUN([CARES_CHECK_FUNC_STRICMP], [
3202  AC_REQUIRE([CARES_INCLUDES_STRING])dnl
3203  #
3204  tst_links_stricmp="unknown"
3205  tst_proto_stricmp="unknown"
3206  tst_compi_stricmp="unknown"
3207  tst_allow_stricmp="unknown"
3208  #
3209  AC_MSG_CHECKING([if stricmp can be linked])
3210  AC_LINK_IFELSE([
3211    AC_LANG_FUNC_LINK_TRY([stricmp])
3212  ],[
3213    AC_MSG_RESULT([yes])
3214    tst_links_stricmp="yes"
3215  ],[
3216    AC_MSG_RESULT([no])
3217    tst_links_stricmp="no"
3218  ])
3219  #
3220  if test "$tst_links_stricmp" = "yes"; then
3221    AC_MSG_CHECKING([if stricmp is prototyped])
3222    AC_EGREP_CPP([stricmp],[
3223      $cares_includes_string
3224    ],[
3225      AC_MSG_RESULT([yes])
3226      tst_proto_stricmp="yes"
3227    ],[
3228      AC_MSG_RESULT([no])
3229      tst_proto_stricmp="no"
3230    ])
3231  fi
3232  #
3233  if test "$tst_proto_stricmp" = "yes"; then
3234    AC_MSG_CHECKING([if stricmp is compilable])
3235    AC_COMPILE_IFELSE([
3236      AC_LANG_PROGRAM([[
3237        $cares_includes_string
3238      ]],[[
3239        if(0 != stricmp(0, 0))
3240          return 1;
3241      ]])
3242    ],[
3243      AC_MSG_RESULT([yes])
3244      tst_compi_stricmp="yes"
3245    ],[
3246      AC_MSG_RESULT([no])
3247      tst_compi_stricmp="no"
3248    ])
3249  fi
3250  #
3251  if test "$tst_compi_stricmp" = "yes"; then
3252    AC_MSG_CHECKING([if stricmp usage allowed])
3253    if test "x$cares_disallow_stricmp" != "xyes"; then
3254      AC_MSG_RESULT([yes])
3255      tst_allow_stricmp="yes"
3256    else
3257      AC_MSG_RESULT([no])
3258      tst_allow_stricmp="no"
3259    fi
3260  fi
3261  #
3262  AC_MSG_CHECKING([if stricmp might be used])
3263  if test "$tst_links_stricmp" = "yes" &&
3264     test "$tst_proto_stricmp" = "yes" &&
3265     test "$tst_compi_stricmp" = "yes" &&
3266     test "$tst_allow_stricmp" = "yes"; then
3267    AC_MSG_RESULT([yes])
3268    AC_DEFINE_UNQUOTED(HAVE_STRICMP, 1,
3269      [Define to 1 if you have the stricmp function.])
3270    ac_cv_func_stricmp="yes"
3271  else
3272    AC_MSG_RESULT([no])
3273    ac_cv_func_stricmp="no"
3274  fi
3275])
3276
3277
3278dnl CARES_CHECK_FUNC_STRNCASECMP
3279dnl -------------------------------------------------
3280dnl Verify if strncasecmp is available, prototyped, and
3281dnl can be compiled. If all of these are true, and
3282dnl usage has not been previously disallowed with
3283dnl shell variable cares_disallow_strncasecmp, then
3284dnl HAVE_STRNCASECMP will be defined.
3285
3286AC_DEFUN([CARES_CHECK_FUNC_STRNCASECMP], [
3287  AC_REQUIRE([CARES_INCLUDES_STRING])dnl
3288  #
3289  tst_links_strncasecmp="unknown"
3290  tst_proto_strncasecmp="unknown"
3291  tst_compi_strncasecmp="unknown"
3292  tst_allow_strncasecmp="unknown"
3293  #
3294  AC_MSG_CHECKING([if strncasecmp can be linked])
3295  AC_LINK_IFELSE([
3296    AC_LANG_FUNC_LINK_TRY([strncasecmp])
3297  ],[
3298    AC_MSG_RESULT([yes])
3299    tst_links_strncasecmp="yes"
3300  ],[
3301    AC_MSG_RESULT([no])
3302    tst_links_strncasecmp="no"
3303  ])
3304  #
3305  if test "$tst_links_strncasecmp" = "yes"; then
3306    AC_MSG_CHECKING([if strncasecmp is prototyped])
3307    AC_EGREP_CPP([strncasecmp],[
3308      $cares_includes_string
3309    ],[
3310      AC_MSG_RESULT([yes])
3311      tst_proto_strncasecmp="yes"
3312    ],[
3313      AC_MSG_RESULT([no])
3314      tst_proto_strncasecmp="no"
3315    ])
3316  fi
3317  #
3318  if test "$tst_proto_strncasecmp" = "yes"; then
3319    AC_MSG_CHECKING([if strncasecmp is compilable])
3320    AC_COMPILE_IFELSE([
3321      AC_LANG_PROGRAM([[
3322        $cares_includes_string
3323      ]],[[
3324        if(0 != strncasecmp(0, 0, 0))
3325          return 1;
3326      ]])
3327    ],[
3328      AC_MSG_RESULT([yes])
3329      tst_compi_strncasecmp="yes"
3330    ],[
3331      AC_MSG_RESULT([no])
3332      tst_compi_strncasecmp="no"
3333    ])
3334  fi
3335  #
3336  if test "$tst_compi_strncasecmp" = "yes"; then
3337    AC_MSG_CHECKING([if strncasecmp usage allowed])
3338    if test "x$cares_disallow_strncasecmp" != "xyes"; then
3339      AC_MSG_RESULT([yes])
3340      tst_allow_strncasecmp="yes"
3341    else
3342      AC_MSG_RESULT([no])
3343      tst_allow_strncasecmp="no"
3344    fi
3345  fi
3346  #
3347  AC_MSG_CHECKING([if strncasecmp might be used])
3348  if test "$tst_links_strncasecmp" = "yes" &&
3349     test "$tst_proto_strncasecmp" = "yes" &&
3350     test "$tst_compi_strncasecmp" = "yes" &&
3351     test "$tst_allow_strncasecmp" = "yes"; then
3352    AC_MSG_RESULT([yes])
3353    AC_DEFINE_UNQUOTED(HAVE_STRNCASECMP, 1,
3354      [Define to 1 if you have the strncasecmp function.])
3355    ac_cv_func_strncasecmp="yes"
3356  else
3357    AC_MSG_RESULT([no])
3358    ac_cv_func_strncasecmp="no"
3359  fi
3360])
3361
3362
3363dnl CARES_CHECK_FUNC_STRNCMPI
3364dnl -------------------------------------------------
3365dnl Verify if strncmpi is available, prototyped, and
3366dnl can be compiled. If all of these are true, and
3367dnl usage has not been previously disallowed with
3368dnl shell variable cares_disallow_strncmpi, then
3369dnl HAVE_STRNCMPI will be defined.
3370
3371AC_DEFUN([CARES_CHECK_FUNC_STRNCMPI], [
3372  AC_REQUIRE([CARES_INCLUDES_STRING])dnl
3373  #
3374  tst_links_strncmpi="unknown"
3375  tst_proto_strncmpi="unknown"
3376  tst_compi_strncmpi="unknown"
3377  tst_allow_strncmpi="unknown"
3378  #
3379  AC_MSG_CHECKING([if strncmpi can be linked])
3380  AC_LINK_IFELSE([
3381    AC_LANG_FUNC_LINK_TRY([strncmpi])
3382  ],[
3383    AC_MSG_RESULT([yes])
3384    tst_links_strncmpi="yes"
3385  ],[
3386    AC_MSG_RESULT([no])
3387    tst_links_strncmpi="no"
3388  ])
3389  #
3390  if test "$tst_links_strncmpi" = "yes"; then
3391    AC_MSG_CHECKING([if strncmpi is prototyped])
3392    AC_EGREP_CPP([strncmpi],[
3393      $cares_includes_string
3394    ],[
3395      AC_MSG_RESULT([yes])
3396      tst_proto_strncmpi="yes"
3397    ],[
3398      AC_MSG_RESULT([no])
3399      tst_proto_strncmpi="no"
3400    ])
3401  fi
3402  #
3403  if test "$tst_proto_strncmpi" = "yes"; then
3404    AC_MSG_CHECKING([if strncmpi is compilable])
3405    AC_COMPILE_IFELSE([
3406      AC_LANG_PROGRAM([[
3407        $cares_includes_string
3408      ]],[[
3409        if(0 != strncmpi(0, 0))
3410          return 1;
3411      ]])
3412    ],[
3413      AC_MSG_RESULT([yes])
3414      tst_compi_strncmpi="yes"
3415    ],[
3416      AC_MSG_RESULT([no])
3417      tst_compi_strncmpi="no"
3418    ])
3419  fi
3420  #
3421  if test "$tst_compi_strncmpi" = "yes"; then
3422    AC_MSG_CHECKING([if strncmpi usage allowed])
3423    if test "x$cares_disallow_strncmpi" != "xyes"; then
3424      AC_MSG_RESULT([yes])
3425      tst_allow_strncmpi="yes"
3426    else
3427      AC_MSG_RESULT([no])
3428      tst_allow_strncmpi="no"
3429    fi
3430  fi
3431  #
3432  AC_MSG_CHECKING([if strncmpi might be used])
3433  if test "$tst_links_strncmpi" = "yes" &&
3434     test "$tst_proto_strncmpi" = "yes" &&
3435     test "$tst_compi_strncmpi" = "yes" &&
3436     test "$tst_allow_strncmpi" = "yes"; then
3437    AC_MSG_RESULT([yes])
3438    AC_DEFINE_UNQUOTED(HAVE_STRNCMPI, 1,
3439      [Define to 1 if you have the strncmpi function.])
3440    ac_cv_func_strncmpi="yes"
3441  else
3442    AC_MSG_RESULT([no])
3443    ac_cv_func_strncmpi="no"
3444  fi
3445])
3446
3447
3448dnl CARES_CHECK_FUNC_STRNICMP
3449dnl -------------------------------------------------
3450dnl Verify if strnicmp is available, prototyped, and
3451dnl can be compiled. If all of these are true, and
3452dnl usage has not been previously disallowed with
3453dnl shell variable cares_disallow_strnicmp, then
3454dnl HAVE_STRNICMP will be defined.
3455
3456AC_DEFUN([CARES_CHECK_FUNC_STRNICMP], [
3457  AC_REQUIRE([CARES_INCLUDES_STRING])dnl
3458  #
3459  tst_links_strnicmp="unknown"
3460  tst_proto_strnicmp="unknown"
3461  tst_compi_strnicmp="unknown"
3462  tst_allow_strnicmp="unknown"
3463  #
3464  AC_MSG_CHECKING([if strnicmp can be linked])
3465  AC_LINK_IFELSE([
3466    AC_LANG_FUNC_LINK_TRY([strnicmp])
3467  ],[
3468    AC_MSG_RESULT([yes])
3469    tst_links_strnicmp="yes"
3470  ],[
3471    AC_MSG_RESULT([no])
3472    tst_links_strnicmp="no"
3473  ])
3474  #
3475  if test "$tst_links_strnicmp" = "yes"; then
3476    AC_MSG_CHECKING([if strnicmp is prototyped])
3477    AC_EGREP_CPP([strnicmp],[
3478      $cares_includes_string
3479    ],[
3480      AC_MSG_RESULT([yes])
3481      tst_proto_strnicmp="yes"
3482    ],[
3483      AC_MSG_RESULT([no])
3484      tst_proto_strnicmp="no"
3485    ])
3486  fi
3487  #
3488  if test "$tst_proto_strnicmp" = "yes"; then
3489    AC_MSG_CHECKING([if strnicmp is compilable])
3490    AC_COMPILE_IFELSE([
3491      AC_LANG_PROGRAM([[
3492        $cares_includes_string
3493      ]],[[
3494        if(0 != strnicmp(0, 0))
3495          return 1;
3496      ]])
3497    ],[
3498      AC_MSG_RESULT([yes])
3499      tst_compi_strnicmp="yes"
3500    ],[
3501      AC_MSG_RESULT([no])
3502      tst_compi_strnicmp="no"
3503    ])
3504  fi
3505  #
3506  if test "$tst_compi_strnicmp" = "yes"; then
3507    AC_MSG_CHECKING([if strnicmp usage allowed])
3508    if test "x$cares_disallow_strnicmp" != "xyes"; then
3509      AC_MSG_RESULT([yes])
3510      tst_allow_strnicmp="yes"
3511    else
3512      AC_MSG_RESULT([no])
3513      tst_allow_strnicmp="no"
3514    fi
3515  fi
3516  #
3517  AC_MSG_CHECKING([if strnicmp might be used])
3518  if test "$tst_links_strnicmp" = "yes" &&
3519     test "$tst_proto_strnicmp" = "yes" &&
3520     test "$tst_compi_strnicmp" = "yes" &&
3521     test "$tst_allow_strnicmp" = "yes"; then
3522    AC_MSG_RESULT([yes])
3523    AC_DEFINE_UNQUOTED(HAVE_STRNICMP, 1,
3524      [Define to 1 if you have the strnicmp function.])
3525    ac_cv_func_strnicmp="yes"
3526  else
3527    AC_MSG_RESULT([no])
3528    ac_cv_func_strnicmp="no"
3529  fi
3530])
3531
3532
3533dnl CARES_CHECK_FUNC_WRITEV
3534dnl -------------------------------------------------
3535dnl Verify if writev is available, prototyped, and
3536dnl can be compiled. If all of these are true, and
3537dnl usage has not been previously disallowed with
3538dnl shell variable cares_disallow_writev, then
3539dnl HAVE_WRITEV will be defined.
3540
3541AC_DEFUN([CARES_CHECK_FUNC_WRITEV], [
3542  AC_REQUIRE([CARES_INCLUDES_SYS_UIO])dnl
3543  #
3544  tst_links_writev="unknown"
3545  tst_proto_writev="unknown"
3546  tst_compi_writev="unknown"
3547  tst_allow_writev="unknown"
3548  #
3549  AC_MSG_CHECKING([if writev can be linked])
3550  AC_LINK_IFELSE([
3551    AC_LANG_FUNC_LINK_TRY([writev])
3552  ],[
3553    AC_MSG_RESULT([yes])
3554    tst_links_writev="yes"
3555  ],[
3556    AC_MSG_RESULT([no])
3557    tst_links_writev="no"
3558  ])
3559  #
3560  if test "$tst_links_writev" = "yes"; then
3561    AC_MSG_CHECKING([if writev is prototyped])
3562    AC_EGREP_CPP([writev],[
3563      $cares_includes_sys_uio
3564    ],[
3565      AC_MSG_RESULT([yes])
3566      tst_proto_writev="yes"
3567    ],[
3568      AC_MSG_RESULT([no])
3569      tst_proto_writev="no"
3570    ])
3571  fi
3572  #
3573  if test "$tst_proto_writev" = "yes"; then
3574    AC_MSG_CHECKING([if writev is compilable])
3575    AC_COMPILE_IFELSE([
3576      AC_LANG_PROGRAM([[
3577        $cares_includes_sys_uio
3578      ]],[[
3579        if(0 != writev(0, 0, 0))
3580          return 1;
3581      ]])
3582    ],[
3583      AC_MSG_RESULT([yes])
3584      tst_compi_writev="yes"
3585    ],[
3586      AC_MSG_RESULT([no])
3587      tst_compi_writev="no"
3588    ])
3589  fi
3590  #
3591  if test "$tst_compi_writev" = "yes"; then
3592    AC_MSG_CHECKING([if writev usage allowed])
3593    if test "x$cares_disallow_writev" != "xyes"; then
3594      AC_MSG_RESULT([yes])
3595      tst_allow_writev="yes"
3596    else
3597      AC_MSG_RESULT([no])
3598      tst_allow_writev="no"
3599    fi
3600  fi
3601  #
3602  AC_MSG_CHECKING([if writev might be used])
3603  if test "$tst_links_writev" = "yes" &&
3604     test "$tst_proto_writev" = "yes" &&
3605     test "$tst_compi_writev" = "yes" &&
3606     test "$tst_allow_writev" = "yes"; then
3607    AC_MSG_RESULT([yes])
3608    AC_DEFINE_UNQUOTED(HAVE_WRITEV, 1,
3609      [Define to 1 if you have the writev function.])
3610    ac_cv_func_writev="yes"
3611  else
3612    AC_MSG_RESULT([no])
3613    ac_cv_func_writev="no"
3614  fi
3615])
3616