1#***************************************************************************
2#                                  _   _ ____  _
3#  Project                     ___| | | |  _ \| |
4#                             / __| | | | |_) | |
5#                            | (__| |_| |  _ <| |___
6#                             \___|\___/|_| \_\_____|
7#
8# Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
9#
10# This software is licensed as described in the file COPYING, which
11# you should have received as part of this distribution. The terms
12# are also available at http://curl.haxx.se/docs/copyright.html.
13#
14# You may opt to use, copy, modify, merge, publish, distribute and/or sell
15# copies of the Software, and permit persons to whom the Software is
16# furnished to do so, under the terms of the COPYING file.
17#
18# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
19# KIND, either express or implied.
20#
21#***************************************************************************
22
23# File version for 'aclocal' use. Keep it a single number.
24# serial 73
25
26
27dnl CURL_INCLUDES_ARPA_INET
28dnl -------------------------------------------------
29dnl Set up variable with list of headers that must be
30dnl included when arpa/inet.h is to be included.
31
32AC_DEFUN([CURL_INCLUDES_ARPA_INET], [
33curl_includes_arpa_inet="\
34/* includes start */
35#ifdef HAVE_SYS_TYPES_H
36#  include <sys/types.h>
37#endif
38#ifdef HAVE_SYS_SOCKET_H
39#  include <sys/socket.h>
40#endif
41#ifdef HAVE_NETINET_IN_H
42#  include <netinet/in.h>
43#endif
44#ifdef HAVE_ARPA_INET_H
45#  include <arpa/inet.h>
46#endif
47/* includes end */"
48  AC_CHECK_HEADERS(
49    sys/types.h sys/socket.h netinet/in.h arpa/inet.h,
50    [], [], [$curl_includes_arpa_inet])
51])
52
53
54dnl CURL_INCLUDES_FCNTL
55dnl -------------------------------------------------
56dnl Set up variable with list of headers that must be
57dnl included when fcntl.h is to be included.
58
59AC_DEFUN([CURL_INCLUDES_FCNTL], [
60curl_includes_fcntl="\
61/* includes start */
62#ifdef HAVE_SYS_TYPES_H
63#  include <sys/types.h>
64#endif
65#ifdef HAVE_UNISTD_H
66#  include <unistd.h>
67#endif
68#ifdef HAVE_FCNTL_H
69#  include <fcntl.h>
70#endif
71/* includes end */"
72  AC_CHECK_HEADERS(
73    sys/types.h unistd.h fcntl.h,
74    [], [], [$curl_includes_fcntl])
75])
76
77
78dnl CURL_INCLUDES_IFADDRS
79dnl -------------------------------------------------
80dnl Set up variable with list of headers that must be
81dnl included when ifaddrs.h is to be included.
82
83AC_DEFUN([CURL_INCLUDES_IFADDRS], [
84curl_includes_ifaddrs="\
85/* includes start */
86#ifdef HAVE_SYS_TYPES_H
87#  include <sys/types.h>
88#endif
89#ifdef HAVE_SYS_SOCKET_H
90#  include <sys/socket.h>
91#endif
92#ifdef HAVE_NETINET_IN_H
93#  include <netinet/in.h>
94#endif
95#ifdef HAVE_IFADDRS_H
96#  include <ifaddrs.h>
97#endif
98/* includes end */"
99  AC_CHECK_HEADERS(
100    sys/types.h sys/socket.h netinet/in.h ifaddrs.h,
101    [], [], [$curl_includes_ifaddrs])
102])
103
104
105dnl CURL_INCLUDES_INTTYPES
106dnl -------------------------------------------------
107dnl Set up variable with list of headers that must be
108dnl included when inttypes.h is to be included.
109
110AC_DEFUN([CURL_INCLUDES_INTTYPES], [
111curl_includes_inttypes="\
112/* includes start */
113#ifdef HAVE_SYS_TYPES_H
114# include <sys/types.h>
115#endif
116#ifdef HAVE_STDINT_H
117# include <stdint.h>
118#endif
119#ifdef HAVE_INTTYPES_H
120# include <inttypes.h>
121#endif
122/* includes end */"
123  case $host_os in
124    irix*)
125      ac_cv_header_stdint_h="no"
126      ;;
127  esac
128  AC_CHECK_HEADERS(
129    sys/types.h stdint.h inttypes.h,
130    [], [], [$curl_includes_inttypes])
131])
132
133
134dnl CURL_INCLUDES_LIBGEN
135dnl -------------------------------------------------
136dnl Set up variable with list of headers that must be
137dnl included when libgen.h is to be included.
138
139AC_DEFUN([CURL_INCLUDES_LIBGEN], [
140curl_includes_libgen="\
141/* includes start */
142#ifdef HAVE_SYS_TYPES_H
143#  include <sys/types.h>
144#endif
145#ifdef HAVE_LIBGEN_H
146#  include <libgen.h>
147#endif
148/* includes end */"
149  AC_CHECK_HEADERS(
150    sys/types.h libgen.h,
151    [], [], [$curl_includes_libgen])
152])
153
154
155dnl CURL_INCLUDES_NETDB
156dnl -------------------------------------------------
157dnl Set up variable with list of headers that must be
158dnl included when netdb.h is to be included.
159
160AC_DEFUN([CURL_INCLUDES_NETDB], [
161curl_includes_netdb="\
162/* includes start */
163#ifdef HAVE_SYS_TYPES_H
164#  include <sys/types.h>
165#endif
166#ifdef HAVE_NETDB_H
167#  include <netdb.h>
168#endif
169/* includes end */"
170  AC_CHECK_HEADERS(
171    sys/types.h netdb.h,
172    [], [], [$curl_includes_netdb])
173])
174
175
176dnl CURL_INCLUDES_POLL
177dnl -------------------------------------------------
178dnl Set up variable with list of headers that must be
179dnl included when poll.h is to be included.
180
181AC_DEFUN([CURL_INCLUDES_POLL], [
182curl_includes_poll="\
183/* includes start */
184#ifdef HAVE_SYS_TYPES_H
185#  include <sys/types.h>
186#endif
187#ifdef HAVE_POLL_H
188#  include <poll.h>
189#endif
190#ifdef HAVE_SYS_POLL_H
191#  include <sys/poll.h>
192#endif
193/* includes end */"
194  AC_CHECK_HEADERS(
195    sys/types.h poll.h sys/poll.h,
196    [], [], [$curl_includes_poll])
197])
198
199
200dnl CURL_INCLUDES_SETJMP
201dnl -------------------------------------------------
202dnl Set up variable with list of headers that must be
203dnl included when setjmp.h is to be included.
204
205AC_DEFUN([CURL_INCLUDES_SETJMP], [
206curl_includes_setjmp="\
207/* includes start */
208#ifdef HAVE_SYS_TYPES_H
209#  include <sys/types.h>
210#endif
211#ifdef HAVE_SETJMP_H
212#  include <setjmp.h>
213#endif
214/* includes end */"
215  AC_CHECK_HEADERS(
216    sys/types.h setjmp.h,
217    [], [], [$curl_includes_setjmp])
218])
219
220
221dnl CURL_INCLUDES_SIGNAL
222dnl -------------------------------------------------
223dnl Set up variable with list of headers that must be
224dnl included when signal.h is to be included.
225
226AC_DEFUN([CURL_INCLUDES_SIGNAL], [
227curl_includes_signal="\
228/* includes start */
229#ifdef HAVE_SYS_TYPES_H
230#  include <sys/types.h>
231#endif
232#ifdef HAVE_SIGNAL_H
233#  include <signal.h>
234#endif
235/* includes end */"
236  AC_CHECK_HEADERS(
237    sys/types.h signal.h,
238    [], [], [$curl_includes_signal])
239])
240
241
242dnl CURL_INCLUDES_SOCKET
243dnl -------------------------------------------------
244dnl Set up variable with list of headers that must be
245dnl included when socket.h is to be included.
246
247AC_DEFUN([CURL_INCLUDES_SOCKET], [
248curl_includes_socket="\
249/* includes start */
250#ifdef HAVE_SYS_TYPES_H
251#  include <sys/types.h>
252#endif
253#ifdef HAVE_SOCKET_H
254#  include <socket.h>
255#endif
256/* includes end */"
257  AC_CHECK_HEADERS(
258    sys/types.h socket.h,
259    [], [], [$curl_includes_socket])
260])
261
262
263dnl CURL_INCLUDES_STDIO
264dnl -------------------------------------------------
265dnl Set up variable with list of headers that must be
266dnl included when stdio.h is to be included.
267
268AC_DEFUN([CURL_INCLUDES_STDIO], [
269curl_includes_stdio="\
270/* includes start */
271#ifdef HAVE_SYS_TYPES_H
272#  include <sys/types.h>
273#endif
274#ifdef HAVE_STDIO_H
275#  include <stdio.h>
276#endif
277/* includes end */"
278  AC_CHECK_HEADERS(
279    sys/types.h stdio.h,
280    [], [], [$curl_includes_stdio])
281])
282
283
284dnl CURL_INCLUDES_STDLIB
285dnl -------------------------------------------------
286dnl Set up variable with list of headers that must be
287dnl included when stdlib.h is to be included.
288
289AC_DEFUN([CURL_INCLUDES_STDLIB], [
290curl_includes_stdlib="\
291/* includes start */
292#ifdef HAVE_SYS_TYPES_H
293#  include <sys/types.h>
294#endif
295#ifdef HAVE_STDLIB_H
296#  include <stdlib.h>
297#endif
298/* includes end */"
299  AC_CHECK_HEADERS(
300    sys/types.h stdlib.h,
301    [], [], [$curl_includes_stdlib])
302])
303
304
305dnl CURL_INCLUDES_STRING
306dnl -------------------------------------------------
307dnl Set up variable with list of headers that must be
308dnl included when string(s).h is to be included.
309
310AC_DEFUN([CURL_INCLUDES_STRING], [
311curl_includes_string="\
312/* includes start */
313#ifdef HAVE_SYS_TYPES_H
314#  include <sys/types.h>
315#endif
316#ifdef HAVE_STRING_H
317#  include <string.h>
318#endif
319#ifdef HAVE_STRINGS_H
320#  include <strings.h>
321#endif
322/* includes end */"
323  AC_CHECK_HEADERS(
324    sys/types.h string.h strings.h,
325    [], [], [$curl_includes_string])
326])
327
328
329dnl CURL_INCLUDES_STROPTS
330dnl -------------------------------------------------
331dnl Set up variable with list of headers that must be
332dnl included when stropts.h is to be included.
333
334AC_DEFUN([CURL_INCLUDES_STROPTS], [
335curl_includes_stropts="\
336/* includes start */
337#ifdef HAVE_SYS_TYPES_H
338#  include <sys/types.h>
339#endif
340#ifdef HAVE_UNISTD_H
341#  include <unistd.h>
342#endif
343#ifdef HAVE_SYS_SOCKET_H
344#  include <sys/socket.h>
345#endif
346#ifdef HAVE_SYS_IOCTL_H
347#  include <sys/ioctl.h>
348#endif
349#ifdef HAVE_STROPTS_H
350#  include <stropts.h>
351#endif
352/* includes end */"
353  AC_CHECK_HEADERS(
354    sys/types.h unistd.h sys/socket.h sys/ioctl.h stropts.h,
355    [], [], [$curl_includes_stropts])
356])
357
358
359dnl CURL_INCLUDES_SYS_SOCKET
360dnl -------------------------------------------------
361dnl Set up variable with list of headers that must be
362dnl included when sys/socket.h is to be included.
363
364AC_DEFUN([CURL_INCLUDES_SYS_SOCKET], [
365curl_includes_sys_socket="\
366/* includes start */
367#ifdef HAVE_SYS_TYPES_H
368#  include <sys/types.h>
369#endif
370#ifdef HAVE_SYS_SOCKET_H
371#  include <sys/socket.h>
372#endif
373/* includes end */"
374  AC_CHECK_HEADERS(
375    sys/types.h sys/socket.h,
376    [], [], [$curl_includes_sys_socket])
377])
378
379
380dnl CURL_INCLUDES_SYS_TYPES
381dnl -------------------------------------------------
382dnl Set up variable with list of headers that must be
383dnl included when sys/types.h is to be included.
384
385AC_DEFUN([CURL_INCLUDES_SYS_TYPES], [
386curl_includes_sys_types="\
387/* includes start */
388#ifdef HAVE_SYS_TYPES_H
389#  include <sys/types.h>
390#endif
391/* includes end */"
392  AC_CHECK_HEADERS(
393    sys/types.h,
394    [], [], [$curl_includes_sys_types])
395])
396
397
398dnl CURL_INCLUDES_SYS_UIO
399dnl -------------------------------------------------
400dnl Set up variable with list of headers that must be
401dnl included when sys/uio.h is to be included.
402
403AC_DEFUN([CURL_INCLUDES_SYS_UIO], [
404curl_includes_sys_uio="\
405/* includes start */
406#ifdef HAVE_SYS_TYPES_H
407#  include <sys/types.h>
408#endif
409#ifdef HAVE_SYS_UIO_H
410#  include <sys/uio.h>
411#endif
412/* includes end */"
413  AC_CHECK_HEADERS(
414    sys/types.h sys/uio.h,
415    [], [], [$curl_includes_sys_uio])
416])
417
418
419dnl CURL_INCLUDES_SYS_XATTR
420dnl -------------------------------------------------
421dnl Set up variable with list of headers that must be
422dnl included when sys/xattr.h is to be included.
423
424AC_DEFUN([CURL_INCLUDES_SYS_XATTR], [
425curl_includes_sys_xattr="\
426/* includes start */
427#ifdef HAVE_SYS_TYPES_H
428#  include <sys/types.h>
429#endif
430#ifdef HAVE_SYS_XATTR_H
431#  include <sys/xattr.h>
432#endif
433/* includes end */"
434  AC_CHECK_HEADERS(
435    sys/types.h sys/xattr.h,
436    [], [], [$curl_includes_sys_xattr])
437])
438
439dnl CURL_INCLUDES_TIME
440dnl -------------------------------------------------
441dnl Set up variable with list of headers that must be
442dnl included when time.h is to be included.
443
444AC_DEFUN([CURL_INCLUDES_TIME], [
445AC_REQUIRE([AC_HEADER_TIME])dnl
446curl_includes_time="\
447/* includes start */
448#ifdef HAVE_SYS_TYPES_H
449#  include <sys/types.h>
450#endif
451#ifdef HAVE_SYS_TIME_H
452#  include <sys/time.h>
453#  ifdef TIME_WITH_SYS_TIME
454#    include <time.h>
455#  endif
456#else
457#  ifdef HAVE_TIME_H
458#    include <time.h>
459#  endif
460#endif
461/* includes end */"
462  AC_CHECK_HEADERS(
463    sys/types.h sys/time.h time.h,
464    [], [], [$curl_includes_time])
465])
466
467
468dnl CURL_INCLUDES_UNISTD
469dnl -------------------------------------------------
470dnl Set up variable with list of headers that must be
471dnl included when unistd.h is to be included.
472
473AC_DEFUN([CURL_INCLUDES_UNISTD], [
474curl_includes_unistd="\
475/* includes start */
476#ifdef HAVE_SYS_TYPES_H
477#  include <sys/types.h>
478#endif
479#ifdef HAVE_UNISTD_H
480#  include <unistd.h>
481#endif
482/* includes end */"
483  AC_CHECK_HEADERS(
484    sys/types.h unistd.h,
485    [], [], [$curl_includes_unistd])
486])
487
488
489dnl CURL_INCLUDES_WINSOCK2
490dnl -------------------------------------------------
491dnl Set up variable with list of headers that must be
492dnl included when winsock(2).h is to be included.
493
494AC_DEFUN([CURL_INCLUDES_WINSOCK2], [
495curl_includes_winsock2="\
496/* includes start */
497#ifdef HAVE_WINDOWS_H
498#  ifndef WIN32_LEAN_AND_MEAN
499#    define WIN32_LEAN_AND_MEAN
500#  endif
501#  include <windows.h>
502#  ifdef HAVE_WINSOCK2_H
503#    include <winsock2.h>
504#  else
505#    ifdef HAVE_WINSOCK_H
506#      include <winsock.h>
507#    endif
508#  endif
509#endif
510/* includes end */"
511  CURL_CHECK_HEADER_WINDOWS
512  CURL_CHECK_HEADER_WINSOCK
513  CURL_CHECK_HEADER_WINSOCK2
514])
515
516
517dnl CURL_INCLUDES_WS2TCPIP
518dnl -------------------------------------------------
519dnl Set up variable with list of headers that must be
520dnl included when ws2tcpip.h is to be included.
521
522AC_DEFUN([CURL_INCLUDES_WS2TCPIP], [
523curl_includes_ws2tcpip="\
524/* includes start */
525#ifdef HAVE_WINDOWS_H
526#  ifndef WIN32_LEAN_AND_MEAN
527#    define WIN32_LEAN_AND_MEAN
528#  endif
529#  include <windows.h>
530#  ifdef HAVE_WINSOCK2_H
531#    include <winsock2.h>
532#    ifdef HAVE_WS2TCPIP_H
533#       include <ws2tcpip.h>
534#    endif
535#  endif
536#endif
537/* includes end */"
538  CURL_CHECK_HEADER_WINDOWS
539  CURL_CHECK_HEADER_WINSOCK2
540  CURL_CHECK_HEADER_WS2TCPIP
541])
542
543
544dnl CURL_PREPROCESS_CALLCONV
545dnl -------------------------------------------------
546dnl Set up variable with a preprocessor block which
547dnl defines function calling convention.
548
549AC_DEFUN([CURL_PREPROCESS_CALLCONV], [
550curl_preprocess_callconv="\
551/* preprocess start */
552#ifdef HAVE_WINDOWS_H
553#  define FUNCALLCONV __stdcall
554#else
555#  define FUNCALLCONV
556#endif
557/* preprocess end */"
558])
559
560
561dnl CURL_CHECK_FUNC_ALARM
562dnl -------------------------------------------------
563dnl Verify if alarm is available, prototyped, and
564dnl can be compiled. If all of these are true, and
565dnl usage has not been previously disallowed with
566dnl shell variable curl_disallow_alarm, then
567dnl HAVE_ALARM will be defined.
568
569AC_DEFUN([CURL_CHECK_FUNC_ALARM], [
570  AC_REQUIRE([CURL_INCLUDES_UNISTD])dnl
571  #
572  tst_links_alarm="unknown"
573  tst_proto_alarm="unknown"
574  tst_compi_alarm="unknown"
575  tst_allow_alarm="unknown"
576  #
577  AC_MSG_CHECKING([if alarm can be linked])
578  AC_LINK_IFELSE([
579    AC_LANG_FUNC_LINK_TRY([alarm])
580  ],[
581    AC_MSG_RESULT([yes])
582    tst_links_alarm="yes"
583  ],[
584    AC_MSG_RESULT([no])
585    tst_links_alarm="no"
586  ])
587  #
588  if test "$tst_links_alarm" = "yes"; then
589    AC_MSG_CHECKING([if alarm is prototyped])
590    AC_EGREP_CPP([alarm],[
591      $curl_includes_unistd
592    ],[
593      AC_MSG_RESULT([yes])
594      tst_proto_alarm="yes"
595    ],[
596      AC_MSG_RESULT([no])
597      tst_proto_alarm="no"
598    ])
599  fi
600  #
601  if test "$tst_proto_alarm" = "yes"; then
602    AC_MSG_CHECKING([if alarm is compilable])
603    AC_COMPILE_IFELSE([
604      AC_LANG_PROGRAM([[
605        $curl_includes_unistd
606      ]],[[
607        if(0 != alarm(0))
608          return 1;
609      ]])
610    ],[
611      AC_MSG_RESULT([yes])
612      tst_compi_alarm="yes"
613    ],[
614      AC_MSG_RESULT([no])
615      tst_compi_alarm="no"
616    ])
617  fi
618  #
619  if test "$tst_compi_alarm" = "yes"; then
620    AC_MSG_CHECKING([if alarm usage allowed])
621    if test "x$curl_disallow_alarm" != "xyes"; then
622      AC_MSG_RESULT([yes])
623      tst_allow_alarm="yes"
624    else
625      AC_MSG_RESULT([no])
626      tst_allow_alarm="no"
627    fi
628  fi
629  #
630  AC_MSG_CHECKING([if alarm might be used])
631  if test "$tst_links_alarm" = "yes" &&
632     test "$tst_proto_alarm" = "yes" &&
633     test "$tst_compi_alarm" = "yes" &&
634     test "$tst_allow_alarm" = "yes"; then
635    AC_MSG_RESULT([yes])
636    AC_DEFINE_UNQUOTED(HAVE_ALARM, 1,
637      [Define to 1 if you have the alarm function.])
638    ac_cv_func_alarm="yes"
639  else
640    AC_MSG_RESULT([no])
641    ac_cv_func_alarm="no"
642  fi
643])
644
645
646dnl CURL_CHECK_FUNC_BASENAME
647dnl -------------------------------------------------
648dnl Verify if basename is available, prototyped, and
649dnl can be compiled. If all of these are true, and
650dnl usage has not been previously disallowed with
651dnl shell variable curl_disallow_basename, then
652dnl HAVE_BASENAME will be defined.
653
654AC_DEFUN([CURL_CHECK_FUNC_BASENAME], [
655  AC_REQUIRE([CURL_INCLUDES_STRING])dnl
656  AC_REQUIRE([CURL_INCLUDES_LIBGEN])dnl
657  AC_REQUIRE([CURL_INCLUDES_UNISTD])dnl
658  #
659  tst_links_basename="unknown"
660  tst_proto_basename="unknown"
661  tst_compi_basename="unknown"
662  tst_allow_basename="unknown"
663  #
664  AC_MSG_CHECKING([if basename can be linked])
665  AC_LINK_IFELSE([
666    AC_LANG_FUNC_LINK_TRY([basename])
667  ],[
668    AC_MSG_RESULT([yes])
669    tst_links_basename="yes"
670  ],[
671    AC_MSG_RESULT([no])
672    tst_links_basename="no"
673  ])
674  #
675  if test "$tst_links_basename" = "yes"; then
676    AC_MSG_CHECKING([if basename is prototyped])
677    AC_EGREP_CPP([basename],[
678      $curl_includes_string
679      $curl_includes_libgen
680      $curl_includes_unistd
681    ],[
682      AC_MSG_RESULT([yes])
683      tst_proto_basename="yes"
684    ],[
685      AC_MSG_RESULT([no])
686      tst_proto_basename="no"
687    ])
688  fi
689  #
690  if test "$tst_proto_basename" = "yes"; then
691    AC_MSG_CHECKING([if basename is compilable])
692    AC_COMPILE_IFELSE([
693      AC_LANG_PROGRAM([[
694        $curl_includes_string
695        $curl_includes_libgen
696        $curl_includes_unistd
697      ]],[[
698        if(0 != basename(0))
699          return 1;
700      ]])
701    ],[
702      AC_MSG_RESULT([yes])
703      tst_compi_basename="yes"
704    ],[
705      AC_MSG_RESULT([no])
706      tst_compi_basename="no"
707    ])
708  fi
709  #
710  if test "$tst_compi_basename" = "yes"; then
711    AC_MSG_CHECKING([if basename usage allowed])
712    if test "x$curl_disallow_basename" != "xyes"; then
713      AC_MSG_RESULT([yes])
714      tst_allow_basename="yes"
715    else
716      AC_MSG_RESULT([no])
717      tst_allow_basename="no"
718    fi
719  fi
720  #
721  AC_MSG_CHECKING([if basename might be used])
722  if test "$tst_links_basename" = "yes" &&
723     test "$tst_proto_basename" = "yes" &&
724     test "$tst_compi_basename" = "yes" &&
725     test "$tst_allow_basename" = "yes"; then
726    AC_MSG_RESULT([yes])
727    AC_DEFINE_UNQUOTED(HAVE_BASENAME, 1,
728      [Define to 1 if you have the basename function.])
729    ac_cv_func_basename="yes"
730  else
731    AC_MSG_RESULT([no])
732    ac_cv_func_basename="no"
733  fi
734])
735
736
737dnl CURL_CHECK_FUNC_CLOSESOCKET
738dnl -------------------------------------------------
739dnl Verify if closesocket is available, prototyped, and
740dnl can be compiled. If all of these are true, and
741dnl usage has not been previously disallowed with
742dnl shell variable curl_disallow_closesocket, then
743dnl HAVE_CLOSESOCKET will be defined.
744
745AC_DEFUN([CURL_CHECK_FUNC_CLOSESOCKET], [
746  AC_REQUIRE([CURL_INCLUDES_WINSOCK2])dnl
747  AC_REQUIRE([CURL_INCLUDES_SOCKET])dnl
748  #
749  tst_links_closesocket="unknown"
750  tst_proto_closesocket="unknown"
751  tst_compi_closesocket="unknown"
752  tst_allow_closesocket="unknown"
753  #
754  AC_MSG_CHECKING([if closesocket can be linked])
755  AC_LINK_IFELSE([
756    AC_LANG_PROGRAM([[
757      $curl_includes_winsock2
758      $curl_includes_socket
759    ]],[[
760      if(0 != closesocket(0))
761        return 1;
762    ]])
763  ],[
764    AC_MSG_RESULT([yes])
765    tst_links_closesocket="yes"
766  ],[
767    AC_MSG_RESULT([no])
768    tst_links_closesocket="no"
769  ])
770  #
771  if test "$tst_links_closesocket" = "yes"; then
772    AC_MSG_CHECKING([if closesocket is prototyped])
773    AC_EGREP_CPP([closesocket],[
774      $curl_includes_winsock2
775      $curl_includes_socket
776    ],[
777      AC_MSG_RESULT([yes])
778      tst_proto_closesocket="yes"
779    ],[
780      AC_MSG_RESULT([no])
781      tst_proto_closesocket="no"
782    ])
783  fi
784  #
785  if test "$tst_proto_closesocket" = "yes"; then
786    AC_MSG_CHECKING([if closesocket is compilable])
787    AC_COMPILE_IFELSE([
788      AC_LANG_PROGRAM([[
789        $curl_includes_winsock2
790        $curl_includes_socket
791      ]],[[
792        if(0 != closesocket(0))
793          return 1;
794      ]])
795    ],[
796      AC_MSG_RESULT([yes])
797      tst_compi_closesocket="yes"
798    ],[
799      AC_MSG_RESULT([no])
800      tst_compi_closesocket="no"
801    ])
802  fi
803  #
804  if test "$tst_compi_closesocket" = "yes"; then
805    AC_MSG_CHECKING([if closesocket usage allowed])
806    if test "x$curl_disallow_closesocket" != "xyes"; then
807      AC_MSG_RESULT([yes])
808      tst_allow_closesocket="yes"
809    else
810      AC_MSG_RESULT([no])
811      tst_allow_closesocket="no"
812    fi
813  fi
814  #
815  AC_MSG_CHECKING([if closesocket might be used])
816  if test "$tst_links_closesocket" = "yes" &&
817     test "$tst_proto_closesocket" = "yes" &&
818     test "$tst_compi_closesocket" = "yes" &&
819     test "$tst_allow_closesocket" = "yes"; then
820    AC_MSG_RESULT([yes])
821    AC_DEFINE_UNQUOTED(HAVE_CLOSESOCKET, 1,
822      [Define to 1 if you have the closesocket function.])
823    ac_cv_func_closesocket="yes"
824  else
825    AC_MSG_RESULT([no])
826    ac_cv_func_closesocket="no"
827  fi
828])
829
830
831dnl CURL_CHECK_FUNC_CLOSESOCKET_CAMEL
832dnl -------------------------------------------------
833dnl Verify if CloseSocket is available, prototyped, and
834dnl can be compiled. If all of these are true, and
835dnl usage has not been previously disallowed with
836dnl shell variable curl_disallow_closesocket_camel,
837dnl then HAVE_CLOSESOCKET_CAMEL will be defined.
838
839AC_DEFUN([CURL_CHECK_FUNC_CLOSESOCKET_CAMEL], [
840  AC_REQUIRE([CURL_INCLUDES_SYS_SOCKET])dnl
841  #
842  tst_links_closesocket_camel="unknown"
843  tst_proto_closesocket_camel="unknown"
844  tst_compi_closesocket_camel="unknown"
845  tst_allow_closesocket_camel="unknown"
846  #
847  AC_MSG_CHECKING([if CloseSocket can be linked])
848  AC_LINK_IFELSE([
849    AC_LANG_PROGRAM([[
850      $curl_includes_sys_socket
851    ]],[[
852      if(0 != CloseSocket(0))
853        return 1;
854    ]])
855  ],[
856    AC_MSG_RESULT([yes])
857    tst_links_closesocket_camel="yes"
858  ],[
859    AC_MSG_RESULT([no])
860    tst_links_closesocket_camel="no"
861  ])
862  #
863  if test "$tst_links_closesocket_camel" = "yes"; then
864    AC_MSG_CHECKING([if CloseSocket is prototyped])
865    AC_EGREP_CPP([CloseSocket],[
866      $curl_includes_sys_socket
867    ],[
868      AC_MSG_RESULT([yes])
869      tst_proto_closesocket_camel="yes"
870    ],[
871      AC_MSG_RESULT([no])
872      tst_proto_closesocket_camel="no"
873    ])
874  fi
875  #
876  if test "$tst_proto_closesocket_camel" = "yes"; then
877    AC_MSG_CHECKING([if CloseSocket is compilable])
878    AC_COMPILE_IFELSE([
879      AC_LANG_PROGRAM([[
880        $curl_includes_sys_socket
881      ]],[[
882        if(0 != CloseSocket(0))
883          return 1;
884      ]])
885    ],[
886      AC_MSG_RESULT([yes])
887      tst_compi_closesocket_camel="yes"
888    ],[
889      AC_MSG_RESULT([no])
890      tst_compi_closesocket_camel="no"
891    ])
892  fi
893  #
894  if test "$tst_compi_closesocket_camel" = "yes"; then
895    AC_MSG_CHECKING([if CloseSocket usage allowed])
896    if test "x$curl_disallow_closesocket_camel" != "xyes"; then
897      AC_MSG_RESULT([yes])
898      tst_allow_closesocket_camel="yes"
899    else
900      AC_MSG_RESULT([no])
901      tst_allow_closesocket_camel="no"
902    fi
903  fi
904  #
905  AC_MSG_CHECKING([if CloseSocket might be used])
906  if test "$tst_links_closesocket_camel" = "yes" &&
907     test "$tst_proto_closesocket_camel" = "yes" &&
908     test "$tst_compi_closesocket_camel" = "yes" &&
909     test "$tst_allow_closesocket_camel" = "yes"; then
910    AC_MSG_RESULT([yes])
911    AC_DEFINE_UNQUOTED(HAVE_CLOSESOCKET_CAMEL, 1,
912      [Define to 1 if you have the CloseSocket camel case function.])
913    ac_cv_func_closesocket_camel="yes"
914  else
915    AC_MSG_RESULT([no])
916    ac_cv_func_closesocket_camel="no"
917  fi
918])
919
920
921dnl CURL_CHECK_FUNC_CONNECT
922dnl -------------------------------------------------
923dnl Verify if connect is available, prototyped, and
924dnl can be compiled. If all of these are true, and
925dnl usage has not been previously disallowed with
926dnl shell variable curl_disallow_connect, then
927dnl HAVE_CONNECT will be defined.
928
929AC_DEFUN([CURL_CHECK_FUNC_CONNECT], [
930  AC_REQUIRE([CURL_INCLUDES_WINSOCK2])dnl
931  AC_REQUIRE([CURL_INCLUDES_SYS_SOCKET])dnl
932  AC_REQUIRE([CURL_INCLUDES_SOCKET])dnl
933  #
934  tst_links_connect="unknown"
935  tst_proto_connect="unknown"
936  tst_compi_connect="unknown"
937  tst_allow_connect="unknown"
938  #
939  AC_MSG_CHECKING([if connect can be linked])
940  AC_LINK_IFELSE([
941    AC_LANG_PROGRAM([[
942      $curl_includes_winsock2
943      $curl_includes_sys_socket
944      $curl_includes_socket
945    ]],[[
946      if(0 != connect(0, 0, 0))
947        return 1;
948    ]])
949  ],[
950    AC_MSG_RESULT([yes])
951    tst_links_connect="yes"
952  ],[
953    AC_MSG_RESULT([no])
954    tst_links_connect="no"
955  ])
956  #
957  if test "$tst_links_connect" = "yes"; then
958    AC_MSG_CHECKING([if connect is prototyped])
959    AC_EGREP_CPP([connect],[
960      $curl_includes_winsock2
961      $curl_includes_sys_socket
962      $curl_includes_socket
963    ],[
964      AC_MSG_RESULT([yes])
965      tst_proto_connect="yes"
966    ],[
967      AC_MSG_RESULT([no])
968      tst_proto_connect="no"
969    ])
970  fi
971  #
972  if test "$tst_proto_connect" = "yes"; then
973    AC_MSG_CHECKING([if connect is compilable])
974    AC_COMPILE_IFELSE([
975      AC_LANG_PROGRAM([[
976        $curl_includes_winsock2
977        $curl_includes_sys_socket
978        $curl_includes_socket
979      ]],[[
980        if(0 != connect(0, 0, 0))
981          return 1;
982      ]])
983    ],[
984      AC_MSG_RESULT([yes])
985      tst_compi_connect="yes"
986    ],[
987      AC_MSG_RESULT([no])
988      tst_compi_connect="no"
989    ])
990  fi
991  #
992  if test "$tst_compi_connect" = "yes"; then
993    AC_MSG_CHECKING([if connect usage allowed])
994    if test "x$curl_disallow_connect" != "xyes"; then
995      AC_MSG_RESULT([yes])
996      tst_allow_connect="yes"
997    else
998      AC_MSG_RESULT([no])
999      tst_allow_connect="no"
1000    fi
1001  fi
1002  #
1003  AC_MSG_CHECKING([if connect might be used])
1004  if test "$tst_links_connect" = "yes" &&
1005     test "$tst_proto_connect" = "yes" &&
1006     test "$tst_compi_connect" = "yes" &&
1007     test "$tst_allow_connect" = "yes"; then
1008    AC_MSG_RESULT([yes])
1009    AC_DEFINE_UNQUOTED(HAVE_CONNECT, 1,
1010      [Define to 1 if you have the connect function.])
1011    ac_cv_func_connect="yes"
1012  else
1013    AC_MSG_RESULT([no])
1014    ac_cv_func_connect="no"
1015  fi
1016])
1017
1018
1019dnl CURL_CHECK_FUNC_FCNTL
1020dnl -------------------------------------------------
1021dnl Verify if fcntl is available, prototyped, and
1022dnl can be compiled. If all of these are true, and
1023dnl usage has not been previously disallowed with
1024dnl shell variable curl_disallow_fcntl, then
1025dnl HAVE_FCNTL will be defined.
1026
1027AC_DEFUN([CURL_CHECK_FUNC_FCNTL], [
1028  AC_REQUIRE([CURL_INCLUDES_FCNTL])dnl
1029  #
1030  tst_links_fcntl="unknown"
1031  tst_proto_fcntl="unknown"
1032  tst_compi_fcntl="unknown"
1033  tst_allow_fcntl="unknown"
1034  #
1035  AC_MSG_CHECKING([if fcntl can be linked])
1036  AC_LINK_IFELSE([
1037    AC_LANG_FUNC_LINK_TRY([fcntl])
1038  ],[
1039    AC_MSG_RESULT([yes])
1040    tst_links_fcntl="yes"
1041  ],[
1042    AC_MSG_RESULT([no])
1043    tst_links_fcntl="no"
1044  ])
1045  #
1046  if test "$tst_links_fcntl" = "yes"; then
1047    AC_MSG_CHECKING([if fcntl is prototyped])
1048    AC_EGREP_CPP([fcntl],[
1049      $curl_includes_fcntl
1050    ],[
1051      AC_MSG_RESULT([yes])
1052      tst_proto_fcntl="yes"
1053    ],[
1054      AC_MSG_RESULT([no])
1055      tst_proto_fcntl="no"
1056    ])
1057  fi
1058  #
1059  if test "$tst_proto_fcntl" = "yes"; then
1060    AC_MSG_CHECKING([if fcntl is compilable])
1061    AC_COMPILE_IFELSE([
1062      AC_LANG_PROGRAM([[
1063        $curl_includes_fcntl
1064      ]],[[
1065        if(0 != fcntl(0, 0, 0))
1066          return 1;
1067      ]])
1068    ],[
1069      AC_MSG_RESULT([yes])
1070      tst_compi_fcntl="yes"
1071    ],[
1072      AC_MSG_RESULT([no])
1073      tst_compi_fcntl="no"
1074    ])
1075  fi
1076  #
1077  if test "$tst_compi_fcntl" = "yes"; then
1078    AC_MSG_CHECKING([if fcntl usage allowed])
1079    if test "x$curl_disallow_fcntl" != "xyes"; then
1080      AC_MSG_RESULT([yes])
1081      tst_allow_fcntl="yes"
1082    else
1083      AC_MSG_RESULT([no])
1084      tst_allow_fcntl="no"
1085    fi
1086  fi
1087  #
1088  AC_MSG_CHECKING([if fcntl might be used])
1089  if test "$tst_links_fcntl" = "yes" &&
1090     test "$tst_proto_fcntl" = "yes" &&
1091     test "$tst_compi_fcntl" = "yes" &&
1092     test "$tst_allow_fcntl" = "yes"; then
1093    AC_MSG_RESULT([yes])
1094    AC_DEFINE_UNQUOTED(HAVE_FCNTL, 1,
1095      [Define to 1 if you have the fcntl function.])
1096    ac_cv_func_fcntl="yes"
1097    CURL_CHECK_FUNC_FCNTL_O_NONBLOCK
1098  else
1099    AC_MSG_RESULT([no])
1100    ac_cv_func_fcntl="no"
1101  fi
1102])
1103
1104
1105dnl CURL_CHECK_FUNC_FCNTL_O_NONBLOCK
1106dnl -------------------------------------------------
1107dnl Verify if fcntl with status flag O_NONBLOCK is
1108dnl available, can be compiled, and seems to work. If
1109dnl all of these are true, then HAVE_FCNTL_O_NONBLOCK
1110dnl will be defined.
1111
1112AC_DEFUN([CURL_CHECK_FUNC_FCNTL_O_NONBLOCK], [
1113  #
1114  tst_compi_fcntl_o_nonblock="unknown"
1115  tst_allow_fcntl_o_nonblock="unknown"
1116  #
1117  case $host_os in
1118    sunos4* | aix3* | beos*)
1119      dnl O_NONBLOCK does not work on these platforms
1120      curl_disallow_fcntl_o_nonblock="yes"
1121      ;;
1122  esac
1123  #
1124  if test "$ac_cv_func_fcntl" = "yes"; then
1125    AC_MSG_CHECKING([if fcntl O_NONBLOCK is compilable])
1126    AC_COMPILE_IFELSE([
1127      AC_LANG_PROGRAM([[
1128        $curl_includes_fcntl
1129      ]],[[
1130        int flags = 0;
1131        if(0 != fcntl(0, F_SETFL, flags | O_NONBLOCK))
1132          return 1;
1133      ]])
1134    ],[
1135      AC_MSG_RESULT([yes])
1136      tst_compi_fcntl_o_nonblock="yes"
1137    ],[
1138      AC_MSG_RESULT([no])
1139      tst_compi_fcntl_o_nonblock="no"
1140    ])
1141  fi
1142  #
1143  if test "$tst_compi_fcntl_o_nonblock" = "yes"; then
1144    AC_MSG_CHECKING([if fcntl O_NONBLOCK usage allowed])
1145    if test "x$curl_disallow_fcntl_o_nonblock" != "xyes"; then
1146      AC_MSG_RESULT([yes])
1147      tst_allow_fcntl_o_nonblock="yes"
1148    else
1149      AC_MSG_RESULT([no])
1150      tst_allow_fcntl_o_nonblock="no"
1151    fi
1152  fi
1153  #
1154  AC_MSG_CHECKING([if fcntl O_NONBLOCK might be used])
1155  if test "$tst_compi_fcntl_o_nonblock" = "yes" &&
1156     test "$tst_allow_fcntl_o_nonblock" = "yes"; then
1157    AC_MSG_RESULT([yes])
1158    AC_DEFINE_UNQUOTED(HAVE_FCNTL_O_NONBLOCK, 1,
1159      [Define to 1 if you have a working fcntl O_NONBLOCK function.])
1160    ac_cv_func_fcntl_o_nonblock="yes"
1161  else
1162    AC_MSG_RESULT([no])
1163    ac_cv_func_fcntl_o_nonblock="no"
1164  fi
1165])
1166
1167
1168dnl CURL_CHECK_FUNC_FDOPEN
1169dnl -------------------------------------------------
1170dnl Verify if fdopen is available, prototyped, and
1171dnl can be compiled. If all of these are true, and
1172dnl usage has not been previously disallowed with
1173dnl shell variable curl_disallow_fdopen, then
1174dnl HAVE_FDOPEN will be defined.
1175
1176AC_DEFUN([CURL_CHECK_FUNC_FDOPEN], [
1177  AC_REQUIRE([CURL_INCLUDES_STDIO])dnl
1178  #
1179  tst_links_fdopen="unknown"
1180  tst_proto_fdopen="unknown"
1181  tst_compi_fdopen="unknown"
1182  tst_allow_fdopen="unknown"
1183  #
1184  AC_MSG_CHECKING([if fdopen can be linked])
1185  AC_LINK_IFELSE([
1186    AC_LANG_FUNC_LINK_TRY([fdopen])
1187  ],[
1188    AC_MSG_RESULT([yes])
1189    tst_links_fdopen="yes"
1190  ],[
1191    AC_MSG_RESULT([no])
1192    tst_links_fdopen="no"
1193  ])
1194  #
1195  if test "$tst_links_fdopen" = "yes"; then
1196    AC_MSG_CHECKING([if fdopen is prototyped])
1197    AC_EGREP_CPP([fdopen],[
1198      $curl_includes_stdio
1199    ],[
1200      AC_MSG_RESULT([yes])
1201      tst_proto_fdopen="yes"
1202    ],[
1203      AC_MSG_RESULT([no])
1204      tst_proto_fdopen="no"
1205    ])
1206  fi
1207  #
1208  if test "$tst_proto_fdopen" = "yes"; then
1209    AC_MSG_CHECKING([if fdopen is compilable])
1210    AC_COMPILE_IFELSE([
1211      AC_LANG_PROGRAM([[
1212        $curl_includes_stdio
1213      ]],[[
1214        if(0 != fdopen(0, 0))
1215          return 1;
1216      ]])
1217    ],[
1218      AC_MSG_RESULT([yes])
1219      tst_compi_fdopen="yes"
1220    ],[
1221      AC_MSG_RESULT([no])
1222      tst_compi_fdopen="no"
1223    ])
1224  fi
1225  #
1226  if test "$tst_compi_fdopen" = "yes"; then
1227    AC_MSG_CHECKING([if fdopen usage allowed])
1228    if test "x$curl_disallow_fdopen" != "xyes"; then
1229      AC_MSG_RESULT([yes])
1230      tst_allow_fdopen="yes"
1231    else
1232      AC_MSG_RESULT([no])
1233      tst_allow_fdopen="no"
1234    fi
1235  fi
1236  #
1237  AC_MSG_CHECKING([if fdopen might be used])
1238  if test "$tst_links_fdopen" = "yes" &&
1239     test "$tst_proto_fdopen" = "yes" &&
1240     test "$tst_compi_fdopen" = "yes" &&
1241     test "$tst_allow_fdopen" = "yes"; then
1242    AC_MSG_RESULT([yes])
1243    AC_DEFINE_UNQUOTED(HAVE_FDOPEN, 1,
1244      [Define to 1 if you have the fdopen function.])
1245    ac_cv_func_fdopen="yes"
1246  else
1247    AC_MSG_RESULT([no])
1248    ac_cv_func_fdopen="no"
1249  fi
1250])
1251
1252
1253dnl CURL_CHECK_FUNC_FGETXATTR
1254dnl -------------------------------------------------
1255dnl Verify if fgetxattr is available, prototyped, and
1256dnl can be compiled. If all of these are true, and
1257dnl usage has not been previously disallowed with
1258dnl shell variable curl_disallow_fgetxattr, then
1259dnl HAVE_FGETXATTR will be defined.
1260
1261AC_DEFUN([CURL_CHECK_FUNC_FGETXATTR], [
1262  AC_REQUIRE([CURL_INCLUDES_SYS_XATTR])dnl
1263  #
1264  tst_links_fgetxattr="unknown"
1265  tst_proto_fgetxattr="unknown"
1266  tst_compi_fgetxattr="unknown"
1267  tst_allow_fgetxattr="unknown"
1268  tst_nargs_fgetxattr="unknown"
1269  #
1270  AC_MSG_CHECKING([if fgetxattr can be linked])
1271  AC_LINK_IFELSE([
1272    AC_LANG_FUNC_LINK_TRY([fgetxattr])
1273  ],[
1274    AC_MSG_RESULT([yes])
1275    tst_links_fgetxattr="yes"
1276  ],[
1277    AC_MSG_RESULT([no])
1278    tst_links_fgetxattr="no"
1279  ])
1280  #
1281  if test "$tst_links_fgetxattr" = "yes"; then
1282    AC_MSG_CHECKING([if fgetxattr is prototyped])
1283    AC_EGREP_CPP([fgetxattr],[
1284      $curl_includes_sys_xattr
1285    ],[
1286      AC_MSG_RESULT([yes])
1287      tst_proto_fgetxattr="yes"
1288    ],[
1289      AC_MSG_RESULT([no])
1290      tst_proto_fgetxattr="no"
1291    ])
1292  fi
1293  #
1294  if test "$tst_proto_fgetxattr" = "yes"; then
1295    if test "$tst_nargs_fgetxattr" = "unknown"; then
1296      AC_MSG_CHECKING([if fgetxattr takes 4 args.])
1297      AC_COMPILE_IFELSE([
1298        AC_LANG_PROGRAM([[
1299          $curl_includes_sys_xattr
1300        ]],[[
1301          if(0 != fgetxattr(0, 0, 0, 0))
1302            return 1;
1303        ]])
1304      ],[
1305        AC_MSG_RESULT([yes])
1306        tst_compi_fgetxattr="yes"
1307        tst_nargs_fgetxattr="4"
1308      ],[
1309        AC_MSG_RESULT([no])
1310        tst_compi_fgetxattr="no"
1311      ])
1312    fi
1313    if test "$tst_nargs_fgetxattr" = "unknown"; then
1314      AC_MSG_CHECKING([if fgetxattr takes 6 args.])
1315      AC_COMPILE_IFELSE([
1316        AC_LANG_PROGRAM([[
1317          $curl_includes_sys_xattr
1318        ]],[[
1319          if(0 != fgetxattr(0, 0, 0, 0, 0, 0))
1320            return 1;
1321        ]])
1322      ],[
1323        AC_MSG_RESULT([yes])
1324        tst_compi_fgetxattr="yes"
1325        tst_nargs_fgetxattr="6"
1326      ],[
1327        AC_MSG_RESULT([no])
1328        tst_compi_fgetxattr="no"
1329      ])
1330    fi
1331    AC_MSG_CHECKING([if fgetxattr is compilable])
1332    if test "$tst_compi_fgetxattr" = "yes"; then
1333      AC_MSG_RESULT([yes])
1334    else
1335      AC_MSG_RESULT([no])
1336    fi
1337  fi
1338  #
1339  if test "$tst_compi_fgetxattr" = "yes"; then
1340    AC_MSG_CHECKING([if fgetxattr usage allowed])
1341    if test "x$curl_disallow_fgetxattr" != "xyes"; then
1342      AC_MSG_RESULT([yes])
1343      tst_allow_fgetxattr="yes"
1344    else
1345      AC_MSG_RESULT([no])
1346      tst_allow_fgetxattr="no"
1347    fi
1348  fi
1349  #
1350  AC_MSG_CHECKING([if fgetxattr might be used])
1351  if test "$tst_links_fgetxattr" = "yes" &&
1352     test "$tst_proto_fgetxattr" = "yes" &&
1353     test "$tst_compi_fgetxattr" = "yes" &&
1354     test "$tst_allow_fgetxattr" = "yes"; then
1355    AC_MSG_RESULT([yes])
1356    AC_DEFINE_UNQUOTED(HAVE_FGETXATTR, 1,
1357      [Define to 1 if you have the fgetxattr function.])
1358    dnl AC_DEFINE_UNQUOTED(FGETXATTR_ARGS, $tst_nargs_fgetxattr,
1359    dnl   [Specifies the number of arguments to fgetxattr])
1360    #
1361    if test "$tst_nargs_fgetxattr" -eq "4"; then
1362      AC_DEFINE(HAVE_FGETXATTR_4, 1, [fgetxattr() takes 4 args])
1363    elif test "$tst_nargs_fgetxattr" -eq "6"; then
1364      AC_DEFINE(HAVE_FGETXATTR_6, 1, [fgetxattr() takes 6 args])
1365    fi
1366    #
1367    ac_cv_func_fgetxattr="yes"
1368  else
1369    AC_MSG_RESULT([no])
1370    ac_cv_func_fgetxattr="no"
1371  fi
1372])
1373
1374
1375dnl CURL_CHECK_FUNC_FLISTXATTR
1376dnl -------------------------------------------------
1377dnl Verify if flistxattr is available, prototyped, and
1378dnl can be compiled. If all of these are true, and
1379dnl usage has not been previously disallowed with
1380dnl shell variable curl_disallow_flistxattr, then
1381dnl HAVE_FLISTXATTR will be defined.
1382
1383AC_DEFUN([CURL_CHECK_FUNC_FLISTXATTR], [
1384  AC_REQUIRE([CURL_INCLUDES_SYS_XATTR])dnl
1385  #
1386  tst_links_flistxattr="unknown"
1387  tst_proto_flistxattr="unknown"
1388  tst_compi_flistxattr="unknown"
1389  tst_allow_flistxattr="unknown"
1390  tst_nargs_flistxattr="unknown"
1391  #
1392  AC_MSG_CHECKING([if flistxattr can be linked])
1393  AC_LINK_IFELSE([
1394    AC_LANG_FUNC_LINK_TRY([flistxattr])
1395  ],[
1396    AC_MSG_RESULT([yes])
1397    tst_links_flistxattr="yes"
1398  ],[
1399    AC_MSG_RESULT([no])
1400    tst_links_flistxattr="no"
1401  ])
1402  #
1403  if test "$tst_links_flistxattr" = "yes"; then
1404    AC_MSG_CHECKING([if flistxattr is prototyped])
1405    AC_EGREP_CPP([flistxattr],[
1406      $curl_includes_sys_xattr
1407    ],[
1408      AC_MSG_RESULT([yes])
1409      tst_proto_flistxattr="yes"
1410    ],[
1411      AC_MSG_RESULT([no])
1412      tst_proto_flistxattr="no"
1413    ])
1414  fi
1415  #
1416  if test "$tst_proto_flistxattr" = "yes"; then
1417    if test "$tst_nargs_flistxattr" = "unknown"; then
1418      AC_MSG_CHECKING([if flistxattr takes 3 args.])
1419      AC_COMPILE_IFELSE([
1420        AC_LANG_PROGRAM([[
1421          $curl_includes_sys_xattr
1422        ]],[[
1423          if(0 != flistxattr(0, 0, 0))
1424            return 1;
1425        ]])
1426      ],[
1427        AC_MSG_RESULT([yes])
1428        tst_compi_flistxattr="yes"
1429        tst_nargs_flistxattr="3"
1430      ],[
1431        AC_MSG_RESULT([no])
1432        tst_compi_flistxattr="no"
1433      ])
1434    fi
1435    if test "$tst_nargs_flistxattr" = "unknown"; then
1436      AC_MSG_CHECKING([if flistxattr takes 4 args.])
1437      AC_COMPILE_IFELSE([
1438        AC_LANG_PROGRAM([[
1439          $curl_includes_sys_xattr
1440        ]],[[
1441          if(0 != flistxattr(0, 0, 0, 0))
1442            return 1;
1443        ]])
1444      ],[
1445        AC_MSG_RESULT([yes])
1446        tst_compi_flistxattr="yes"
1447        tst_nargs_flistxattr="4"
1448      ],[
1449        AC_MSG_RESULT([no])
1450        tst_compi_flistxattr="no"
1451      ])
1452    fi
1453    AC_MSG_CHECKING([if flistxattr is compilable])
1454    if test "$tst_compi_flistxattr" = "yes"; then
1455      AC_MSG_RESULT([yes])
1456    else
1457      AC_MSG_RESULT([no])
1458    fi
1459  fi
1460  #
1461  if test "$tst_compi_flistxattr" = "yes"; then
1462    AC_MSG_CHECKING([if flistxattr usage allowed])
1463    if test "x$curl_disallow_flistxattr" != "xyes"; then
1464      AC_MSG_RESULT([yes])
1465      tst_allow_flistxattr="yes"
1466    else
1467      AC_MSG_RESULT([no])
1468      tst_allow_flistxattr="no"
1469    fi
1470  fi
1471  #
1472  AC_MSG_CHECKING([if flistxattr might be used])
1473  if test "$tst_links_flistxattr" = "yes" &&
1474     test "$tst_proto_flistxattr" = "yes" &&
1475     test "$tst_compi_flistxattr" = "yes" &&
1476     test "$tst_allow_flistxattr" = "yes"; then
1477    AC_MSG_RESULT([yes])
1478    AC_DEFINE_UNQUOTED(HAVE_FLISTXATTR, 1,
1479      [Define to 1 if you have the flistxattr function.])
1480    dnl AC_DEFINE_UNQUOTED(FLISTXATTR_ARGS, $tst_nargs_flistxattr,
1481    dnl   [Specifies the number of arguments to flistxattr])
1482    #
1483    if test "$tst_nargs_flistxattr" -eq "3"; then
1484      AC_DEFINE(HAVE_FLISTXATTR_3, 1, [flistxattr() takes 3 args])
1485    elif test "$tst_nargs_flistxattr" -eq "4"; then
1486      AC_DEFINE(HAVE_FLISTXATTR_4, 1, [flistxattr() takes 4 args])
1487    fi
1488    #
1489    ac_cv_func_flistxattr="yes"
1490  else
1491    AC_MSG_RESULT([no])
1492    ac_cv_func_flistxattr="no"
1493  fi
1494])
1495
1496
1497dnl CURL_CHECK_FUNC_FREEADDRINFO
1498dnl -------------------------------------------------
1499dnl Verify if freeaddrinfo is available, prototyped,
1500dnl and can be compiled. If all of these are true,
1501dnl and usage has not been previously disallowed with
1502dnl shell variable curl_disallow_freeaddrinfo, then
1503dnl HAVE_FREEADDRINFO will be defined.
1504
1505AC_DEFUN([CURL_CHECK_FUNC_FREEADDRINFO], [
1506  AC_REQUIRE([CURL_INCLUDES_WS2TCPIP])dnl
1507  AC_REQUIRE([CURL_INCLUDES_SYS_SOCKET])dnl
1508  AC_REQUIRE([CURL_INCLUDES_NETDB])dnl
1509  #
1510  tst_links_freeaddrinfo="unknown"
1511  tst_proto_freeaddrinfo="unknown"
1512  tst_compi_freeaddrinfo="unknown"
1513  tst_allow_freeaddrinfo="unknown"
1514  #
1515  AC_MSG_CHECKING([if freeaddrinfo can be linked])
1516  AC_LINK_IFELSE([
1517    AC_LANG_PROGRAM([[
1518      $curl_includes_ws2tcpip
1519      $curl_includes_sys_socket
1520      $curl_includes_netdb
1521    ]],[[
1522      freeaddrinfo(0);
1523    ]])
1524  ],[
1525    AC_MSG_RESULT([yes])
1526    tst_links_freeaddrinfo="yes"
1527  ],[
1528    AC_MSG_RESULT([no])
1529    tst_links_freeaddrinfo="no"
1530  ])
1531  #
1532  if test "$tst_links_freeaddrinfo" = "yes"; then
1533    AC_MSG_CHECKING([if freeaddrinfo is prototyped])
1534    AC_EGREP_CPP([freeaddrinfo],[
1535      $curl_includes_ws2tcpip
1536      $curl_includes_sys_socket
1537      $curl_includes_netdb
1538    ],[
1539      AC_MSG_RESULT([yes])
1540      tst_proto_freeaddrinfo="yes"
1541    ],[
1542      AC_MSG_RESULT([no])
1543      tst_proto_freeaddrinfo="no"
1544    ])
1545  fi
1546  #
1547  if test "$tst_proto_freeaddrinfo" = "yes"; then
1548    AC_MSG_CHECKING([if freeaddrinfo is compilable])
1549    AC_COMPILE_IFELSE([
1550      AC_LANG_PROGRAM([[
1551        $curl_includes_ws2tcpip
1552        $curl_includes_sys_socket
1553        $curl_includes_netdb
1554      ]],[[
1555        freeaddrinfo(0);
1556      ]])
1557    ],[
1558      AC_MSG_RESULT([yes])
1559      tst_compi_freeaddrinfo="yes"
1560    ],[
1561      AC_MSG_RESULT([no])
1562      tst_compi_freeaddrinfo="no"
1563    ])
1564  fi
1565  #
1566  if test "$tst_compi_freeaddrinfo" = "yes"; then
1567    AC_MSG_CHECKING([if freeaddrinfo usage allowed])
1568    if test "x$curl_disallow_freeaddrinfo" != "xyes"; then
1569      AC_MSG_RESULT([yes])
1570      tst_allow_freeaddrinfo="yes"
1571    else
1572      AC_MSG_RESULT([no])
1573      tst_allow_freeaddrinfo="no"
1574    fi
1575  fi
1576  #
1577  AC_MSG_CHECKING([if freeaddrinfo might be used])
1578  if test "$tst_links_freeaddrinfo" = "yes" &&
1579     test "$tst_proto_freeaddrinfo" = "yes" &&
1580     test "$tst_compi_freeaddrinfo" = "yes" &&
1581     test "$tst_allow_freeaddrinfo" = "yes"; then
1582    AC_MSG_RESULT([yes])
1583    AC_DEFINE_UNQUOTED(HAVE_FREEADDRINFO, 1,
1584      [Define to 1 if you have the freeaddrinfo function.])
1585    ac_cv_func_freeaddrinfo="yes"
1586  else
1587    AC_MSG_RESULT([no])
1588    ac_cv_func_freeaddrinfo="no"
1589  fi
1590])
1591
1592
1593dnl CURL_CHECK_FUNC_FREEIFADDRS
1594dnl -------------------------------------------------
1595dnl Verify if freeifaddrs is available, prototyped, and
1596dnl can be compiled. If all of these are true, and
1597dnl usage has not been previously disallowed with
1598dnl shell variable curl_disallow_freeifaddrs, then
1599dnl HAVE_FREEIFADDRS will be defined.
1600
1601AC_DEFUN([CURL_CHECK_FUNC_FREEIFADDRS], [
1602  AC_REQUIRE([CURL_INCLUDES_IFADDRS])dnl
1603  #
1604  tst_links_freeifaddrs="unknown"
1605  tst_proto_freeifaddrs="unknown"
1606  tst_compi_freeifaddrs="unknown"
1607  tst_allow_freeifaddrs="unknown"
1608  #
1609  AC_MSG_CHECKING([if freeifaddrs can be linked])
1610  AC_LINK_IFELSE([
1611    AC_LANG_FUNC_LINK_TRY([freeifaddrs])
1612  ],[
1613    AC_MSG_RESULT([yes])
1614    tst_links_freeifaddrs="yes"
1615  ],[
1616    AC_MSG_RESULT([no])
1617    tst_links_freeifaddrs="no"
1618  ])
1619  #
1620  if test "$tst_links_freeifaddrs" = "yes"; then
1621    AC_MSG_CHECKING([if freeifaddrs is prototyped])
1622    AC_EGREP_CPP([freeifaddrs],[
1623      $curl_includes_ifaddrs
1624    ],[
1625      AC_MSG_RESULT([yes])
1626      tst_proto_freeifaddrs="yes"
1627    ],[
1628      AC_MSG_RESULT([no])
1629      tst_proto_freeifaddrs="no"
1630    ])
1631  fi
1632  #
1633  if test "$tst_proto_freeifaddrs" = "yes"; then
1634    AC_MSG_CHECKING([if freeifaddrs is compilable])
1635    AC_COMPILE_IFELSE([
1636      AC_LANG_PROGRAM([[
1637        $curl_includes_ifaddrs
1638      ]],[[
1639        freeifaddrs(0);
1640      ]])
1641    ],[
1642      AC_MSG_RESULT([yes])
1643      tst_compi_freeifaddrs="yes"
1644    ],[
1645      AC_MSG_RESULT([no])
1646      tst_compi_freeifaddrs="no"
1647    ])
1648  fi
1649  #
1650  if test "$tst_compi_freeifaddrs" = "yes"; then
1651    AC_MSG_CHECKING([if freeifaddrs usage allowed])
1652    if test "x$curl_disallow_freeifaddrs" != "xyes"; then
1653      AC_MSG_RESULT([yes])
1654      tst_allow_freeifaddrs="yes"
1655    else
1656      AC_MSG_RESULT([no])
1657      tst_allow_freeifaddrs="no"
1658    fi
1659  fi
1660  #
1661  AC_MSG_CHECKING([if freeifaddrs might be used])
1662  if test "$tst_links_freeifaddrs" = "yes" &&
1663     test "$tst_proto_freeifaddrs" = "yes" &&
1664     test "$tst_compi_freeifaddrs" = "yes" &&
1665     test "$tst_allow_freeifaddrs" = "yes"; then
1666    AC_MSG_RESULT([yes])
1667    AC_DEFINE_UNQUOTED(HAVE_FREEIFADDRS, 1,
1668      [Define to 1 if you have the freeifaddrs function.])
1669    ac_cv_func_freeifaddrs="yes"
1670  else
1671    AC_MSG_RESULT([no])
1672    ac_cv_func_freeifaddrs="no"
1673  fi
1674])
1675
1676
1677dnl CURL_CHECK_FUNC_FREMOVEXATTR
1678dnl -------------------------------------------------
1679dnl Verify if fremovexattr is available, prototyped, and
1680dnl can be compiled. If all of these are true, and
1681dnl usage has not been previously disallowed with
1682dnl shell variable curl_disallow_fremovexattr, then
1683dnl HAVE_FREMOVEXATTR will be defined.
1684
1685AC_DEFUN([CURL_CHECK_FUNC_FREMOVEXATTR], [
1686  AC_REQUIRE([CURL_INCLUDES_SYS_XATTR])dnl
1687  #
1688  tst_links_fremovexattr="unknown"
1689  tst_proto_fremovexattr="unknown"
1690  tst_compi_fremovexattr="unknown"
1691  tst_allow_fremovexattr="unknown"
1692  tst_nargs_fremovexattr="unknown"
1693  #
1694  AC_MSG_CHECKING([if fremovexattr can be linked])
1695  AC_LINK_IFELSE([
1696    AC_LANG_FUNC_LINK_TRY([fremovexattr])
1697  ],[
1698    AC_MSG_RESULT([yes])
1699    tst_links_fremovexattr="yes"
1700  ],[
1701    AC_MSG_RESULT([no])
1702    tst_links_fremovexattr="no"
1703  ])
1704  #
1705  if test "$tst_links_fremovexattr" = "yes"; then
1706    AC_MSG_CHECKING([if fremovexattr is prototyped])
1707    AC_EGREP_CPP([fremovexattr],[
1708      $curl_includes_sys_xattr
1709    ],[
1710      AC_MSG_RESULT([yes])
1711      tst_proto_fremovexattr="yes"
1712    ],[
1713      AC_MSG_RESULT([no])
1714      tst_proto_fremovexattr="no"
1715    ])
1716  fi
1717  #
1718  if test "$tst_proto_fremovexattr" = "yes"; then
1719    if test "$tst_nargs_fremovexattr" = "unknown"; then
1720      AC_MSG_CHECKING([if fremovexattr takes 2 args.])
1721      AC_COMPILE_IFELSE([
1722        AC_LANG_PROGRAM([[
1723          $curl_includes_sys_xattr
1724        ]],[[
1725          if(0 != fremovexattr(0, 0))
1726            return 1;
1727        ]])
1728      ],[
1729        AC_MSG_RESULT([yes])
1730        tst_compi_fremovexattr="yes"
1731        tst_nargs_fremovexattr="2"
1732      ],[
1733        AC_MSG_RESULT([no])
1734        tst_compi_fremovexattr="no"
1735      ])
1736    fi
1737    if test "$tst_nargs_fremovexattr" = "unknown"; then
1738      AC_MSG_CHECKING([if fremovexattr takes 3 args.])
1739      AC_COMPILE_IFELSE([
1740        AC_LANG_PROGRAM([[
1741          $curl_includes_sys_xattr
1742        ]],[[
1743          if(0 != fremovexattr(0, 0, 0))
1744            return 1;
1745        ]])
1746      ],[
1747        AC_MSG_RESULT([yes])
1748        tst_compi_fremovexattr="yes"
1749        tst_nargs_fremovexattr="3"
1750      ],[
1751        AC_MSG_RESULT([no])
1752        tst_compi_fremovexattr="no"
1753      ])
1754    fi
1755    AC_MSG_CHECKING([if fremovexattr is compilable])
1756    if test "$tst_compi_fremovexattr" = "yes"; then
1757      AC_MSG_RESULT([yes])
1758    else
1759      AC_MSG_RESULT([no])
1760    fi
1761  fi
1762  #
1763  if test "$tst_compi_fremovexattr" = "yes"; then
1764    AC_MSG_CHECKING([if fremovexattr usage allowed])
1765    if test "x$curl_disallow_fremovexattr" != "xyes"; then
1766      AC_MSG_RESULT([yes])
1767      tst_allow_fremovexattr="yes"
1768    else
1769      AC_MSG_RESULT([no])
1770      tst_allow_fremovexattr="no"
1771    fi
1772  fi
1773  #
1774  AC_MSG_CHECKING([if fremovexattr might be used])
1775  if test "$tst_links_fremovexattr" = "yes" &&
1776     test "$tst_proto_fremovexattr" = "yes" &&
1777     test "$tst_compi_fremovexattr" = "yes" &&
1778     test "$tst_allow_fremovexattr" = "yes"; then
1779    AC_MSG_RESULT([yes])
1780    AC_DEFINE_UNQUOTED(HAVE_FREMOVEXATTR, 1,
1781      [Define to 1 if you have the fremovexattr function.])
1782    dnl AC_DEFINE_UNQUOTED(FREMOVEXATTR_ARGS, $tst_nargs_fremovexattr,
1783    dnl   [Specifies the number of arguments to fremovexattr])
1784    #
1785    if test "$tst_nargs_fremovexattr" -eq "2"; then
1786      AC_DEFINE(HAVE_FREMOVEXATTR_2, 1, [fremovexattr() takes 2 args])
1787    elif test "$tst_nargs_fremovexattr" -eq "3"; then
1788      AC_DEFINE(HAVE_FREMOVEXATTR_3, 1, [fremovexattr() takes 3 args])
1789    fi
1790    #
1791    ac_cv_func_fremovexattr="yes"
1792  else
1793    AC_MSG_RESULT([no])
1794    ac_cv_func_fremovexattr="no"
1795  fi
1796])
1797
1798
1799dnl CURL_CHECK_FUNC_FSETXATTR
1800dnl -------------------------------------------------
1801dnl Verify if fsetxattr is available, prototyped, and
1802dnl can be compiled. If all of these are true, and
1803dnl usage has not been previously disallowed with
1804dnl shell variable curl_disallow_fsetxattr, then
1805dnl HAVE_FSETXATTR will be defined.
1806
1807AC_DEFUN([CURL_CHECK_FUNC_FSETXATTR], [
1808  AC_REQUIRE([CURL_INCLUDES_SYS_XATTR])dnl
1809  #
1810  tst_links_fsetxattr="unknown"
1811  tst_proto_fsetxattr="unknown"
1812  tst_compi_fsetxattr="unknown"
1813  tst_allow_fsetxattr="unknown"
1814  tst_nargs_fsetxattr="unknown"
1815  #
1816  AC_MSG_CHECKING([if fsetxattr can be linked])
1817  AC_LINK_IFELSE([
1818    AC_LANG_FUNC_LINK_TRY([fsetxattr])
1819  ],[
1820    AC_MSG_RESULT([yes])
1821    tst_links_fsetxattr="yes"
1822  ],[
1823    AC_MSG_RESULT([no])
1824    tst_links_fsetxattr="no"
1825  ])
1826  #
1827  if test "$tst_links_fsetxattr" = "yes"; then
1828    AC_MSG_CHECKING([if fsetxattr is prototyped])
1829    AC_EGREP_CPP([fsetxattr],[
1830      $curl_includes_sys_xattr
1831    ],[
1832      AC_MSG_RESULT([yes])
1833      tst_proto_fsetxattr="yes"
1834    ],[
1835      AC_MSG_RESULT([no])
1836      tst_proto_fsetxattr="no"
1837    ])
1838  fi
1839  #
1840  if test "$tst_proto_fsetxattr" = "yes"; then
1841    if test "$tst_nargs_fsetxattr" = "unknown"; then
1842      AC_MSG_CHECKING([if fsetxattr takes 5 args.])
1843      AC_COMPILE_IFELSE([
1844        AC_LANG_PROGRAM([[
1845          $curl_includes_sys_xattr
1846        ]],[[
1847          if(0 != fsetxattr(0, 0, 0, 0, 0))
1848            return 1;
1849        ]])
1850      ],[
1851        AC_MSG_RESULT([yes])
1852        tst_compi_fsetxattr="yes"
1853        tst_nargs_fsetxattr="5"
1854      ],[
1855        AC_MSG_RESULT([no])
1856        tst_compi_fsetxattr="no"
1857      ])
1858    fi
1859    if test "$tst_nargs_fsetxattr" = "unknown"; then
1860      AC_MSG_CHECKING([if fsetxattr takes 6 args.])
1861      AC_COMPILE_IFELSE([
1862        AC_LANG_PROGRAM([[
1863          $curl_includes_sys_xattr
1864        ]],[[
1865          if(0 != fsetxattr(0, 0, 0, 0, 0, 0))
1866            return 1;
1867        ]])
1868      ],[
1869        AC_MSG_RESULT([yes])
1870        tst_compi_fsetxattr="yes"
1871        tst_nargs_fsetxattr="6"
1872      ],[
1873        AC_MSG_RESULT([no])
1874        tst_compi_fsetxattr="no"
1875      ])
1876    fi
1877    AC_MSG_CHECKING([if fsetxattr is compilable])
1878    if test "$tst_compi_fsetxattr" = "yes"; then
1879      AC_MSG_RESULT([yes])
1880    else
1881      AC_MSG_RESULT([no])
1882    fi
1883  fi
1884  #
1885  if test "$tst_compi_fsetxattr" = "yes"; then
1886    AC_MSG_CHECKING([if fsetxattr usage allowed])
1887    if test "x$curl_disallow_fsetxattr" != "xyes"; then
1888      AC_MSG_RESULT([yes])
1889      tst_allow_fsetxattr="yes"
1890    else
1891      AC_MSG_RESULT([no])
1892      tst_allow_fsetxattr="no"
1893    fi
1894  fi
1895  #
1896  AC_MSG_CHECKING([if fsetxattr might be used])
1897  if test "$tst_links_fsetxattr" = "yes" &&
1898     test "$tst_proto_fsetxattr" = "yes" &&
1899     test "$tst_compi_fsetxattr" = "yes" &&
1900     test "$tst_allow_fsetxattr" = "yes"; then
1901    AC_MSG_RESULT([yes])
1902    AC_DEFINE_UNQUOTED(HAVE_FSETXATTR, 1,
1903      [Define to 1 if you have the fsetxattr function.])
1904    dnl AC_DEFINE_UNQUOTED(FSETXATTR_ARGS, $tst_nargs_fsetxattr,
1905    dnl   [Specifies the number of arguments to fsetxattr])
1906    #
1907    if test "$tst_nargs_fsetxattr" -eq "5"; then
1908      AC_DEFINE(HAVE_FSETXATTR_5, 1, [fsetxattr() takes 5 args])
1909    elif test "$tst_nargs_fsetxattr" -eq "6"; then
1910      AC_DEFINE(HAVE_FSETXATTR_6, 1, [fsetxattr() takes 6 args])
1911    fi
1912    #
1913    ac_cv_func_fsetxattr="yes"
1914  else
1915    AC_MSG_RESULT([no])
1916    ac_cv_func_fsetxattr="no"
1917  fi
1918])
1919
1920
1921dnl CURL_CHECK_FUNC_FTRUNCATE
1922dnl -------------------------------------------------
1923dnl Verify if ftruncate is available, prototyped, and
1924dnl can be compiled. If all of these are true, and
1925dnl usage has not been previously disallowed with
1926dnl shell variable curl_disallow_ftruncate, then
1927dnl HAVE_FTRUNCATE will be defined.
1928
1929AC_DEFUN([CURL_CHECK_FUNC_FTRUNCATE], [
1930  AC_REQUIRE([CURL_INCLUDES_UNISTD])dnl
1931  #
1932  tst_links_ftruncate="unknown"
1933  tst_proto_ftruncate="unknown"
1934  tst_compi_ftruncate="unknown"
1935  tst_allow_ftruncate="unknown"
1936  #
1937  AC_MSG_CHECKING([if ftruncate can be linked])
1938  AC_LINK_IFELSE([
1939    AC_LANG_FUNC_LINK_TRY([ftruncate])
1940  ],[
1941    AC_MSG_RESULT([yes])
1942    tst_links_ftruncate="yes"
1943  ],[
1944    AC_MSG_RESULT([no])
1945    tst_links_ftruncate="no"
1946  ])
1947  #
1948  if test "$tst_links_ftruncate" = "yes"; then
1949    AC_MSG_CHECKING([if ftruncate is prototyped])
1950    AC_EGREP_CPP([ftruncate],[
1951      $curl_includes_unistd
1952    ],[
1953      AC_MSG_RESULT([yes])
1954      tst_proto_ftruncate="yes"
1955    ],[
1956      AC_MSG_RESULT([no])
1957      tst_proto_ftruncate="no"
1958    ])
1959  fi
1960  #
1961  if test "$tst_proto_ftruncate" = "yes"; then
1962    AC_MSG_CHECKING([if ftruncate is compilable])
1963    AC_COMPILE_IFELSE([
1964      AC_LANG_PROGRAM([[
1965        $curl_includes_unistd
1966      ]],[[
1967        if(0 != ftruncate(0, 0))
1968          return 1;
1969      ]])
1970    ],[
1971      AC_MSG_RESULT([yes])
1972      tst_compi_ftruncate="yes"
1973    ],[
1974      AC_MSG_RESULT([no])
1975      tst_compi_ftruncate="no"
1976    ])
1977  fi
1978  #
1979  if test "$tst_compi_ftruncate" = "yes"; then
1980    AC_MSG_CHECKING([if ftruncate usage allowed])
1981    if test "x$curl_disallow_ftruncate" != "xyes"; then
1982      AC_MSG_RESULT([yes])
1983      tst_allow_ftruncate="yes"
1984    else
1985      AC_MSG_RESULT([no])
1986      tst_allow_ftruncate="no"
1987    fi
1988  fi
1989  #
1990  AC_MSG_CHECKING([if ftruncate might be used])
1991  if test "$tst_links_ftruncate" = "yes" &&
1992     test "$tst_proto_ftruncate" = "yes" &&
1993     test "$tst_compi_ftruncate" = "yes" &&
1994     test "$tst_allow_ftruncate" = "yes"; then
1995    AC_MSG_RESULT([yes])
1996    AC_DEFINE_UNQUOTED(HAVE_FTRUNCATE, 1,
1997      [Define to 1 if you have the ftruncate function.])
1998    ac_cv_func_ftruncate="yes"
1999  else
2000    AC_MSG_RESULT([no])
2001    ac_cv_func_ftruncate="no"
2002  fi
2003])
2004
2005
2006dnl CURL_CHECK_FUNC_GETADDRINFO
2007dnl -------------------------------------------------
2008dnl Verify if getaddrinfo is available, prototyped, can
2009dnl be compiled and seems to work. If all of these are
2010dnl true, and usage has not been previously disallowed
2011dnl with shell variable curl_disallow_getaddrinfo, then
2012dnl HAVE_GETADDRINFO will be defined. Additionally when
2013dnl HAVE_GETADDRINFO gets defined this will also attempt
2014dnl to find out if getaddrinfo happens to be threadsafe,
2015dnl defining HAVE_GETADDRINFO_THREADSAFE when true.
2016
2017AC_DEFUN([CURL_CHECK_FUNC_GETADDRINFO], [
2018  AC_REQUIRE([CURL_INCLUDES_WS2TCPIP])dnl
2019  AC_REQUIRE([CURL_INCLUDES_STDLIB])dnl
2020  AC_REQUIRE([CURL_INCLUDES_STRING])dnl
2021  AC_REQUIRE([CURL_INCLUDES_SYS_SOCKET])dnl
2022  AC_REQUIRE([CURL_INCLUDES_NETDB])dnl
2023  AC_REQUIRE([CURL_CHECK_NATIVE_WINDOWS])dnl
2024  #
2025  tst_links_getaddrinfo="unknown"
2026  tst_proto_getaddrinfo="unknown"
2027  tst_compi_getaddrinfo="unknown"
2028  tst_works_getaddrinfo="unknown"
2029  tst_allow_getaddrinfo="unknown"
2030  tst_tsafe_getaddrinfo="unknown"
2031  #
2032  AC_MSG_CHECKING([if getaddrinfo can be linked])
2033  AC_LINK_IFELSE([
2034    AC_LANG_PROGRAM([[
2035      $curl_includes_ws2tcpip
2036      $curl_includes_sys_socket
2037      $curl_includes_netdb
2038    ]],[[
2039      if(0 != getaddrinfo(0, 0, 0, 0))
2040        return 1;
2041    ]])
2042  ],[
2043    AC_MSG_RESULT([yes])
2044    tst_links_getaddrinfo="yes"
2045  ],[
2046    AC_MSG_RESULT([no])
2047    tst_links_getaddrinfo="no"
2048  ])
2049  #
2050  if test "$tst_links_getaddrinfo" = "yes"; then
2051    AC_MSG_CHECKING([if getaddrinfo is prototyped])
2052    AC_EGREP_CPP([getaddrinfo],[
2053      $curl_includes_ws2tcpip
2054      $curl_includes_sys_socket
2055      $curl_includes_netdb
2056    ],[
2057      AC_MSG_RESULT([yes])
2058      tst_proto_getaddrinfo="yes"
2059    ],[
2060      AC_MSG_RESULT([no])
2061      tst_proto_getaddrinfo="no"
2062    ])
2063  fi
2064  #
2065  if test "$tst_proto_getaddrinfo" = "yes"; then
2066    AC_MSG_CHECKING([if getaddrinfo is compilable])
2067    AC_COMPILE_IFELSE([
2068      AC_LANG_PROGRAM([[
2069        $curl_includes_ws2tcpip
2070        $curl_includes_sys_socket
2071        $curl_includes_netdb
2072      ]],[[
2073        if(0 != getaddrinfo(0, 0, 0, 0))
2074          return 1;
2075      ]])
2076    ],[
2077      AC_MSG_RESULT([yes])
2078      tst_compi_getaddrinfo="yes"
2079    ],[
2080      AC_MSG_RESULT([no])
2081      tst_compi_getaddrinfo="no"
2082    ])
2083  fi
2084  #
2085  dnl only do runtime verification when not cross-compiling
2086  if test "x$cross_compiling" != "xyes" &&
2087    test "$tst_compi_getaddrinfo" = "yes"; then
2088    AC_MSG_CHECKING([if getaddrinfo seems to work])
2089    AC_RUN_IFELSE([
2090      AC_LANG_PROGRAM([[
2091        $curl_includes_ws2tcpip
2092        $curl_includes_stdlib
2093        $curl_includes_string
2094        $curl_includes_sys_socket
2095        $curl_includes_netdb
2096      ]],[[
2097        struct addrinfo hints;
2098        struct addrinfo *ai = 0;
2099        int error;
2100
2101        memset(&hints, 0, sizeof(hints));
2102        hints.ai_flags = AI_NUMERICHOST;
2103        hints.ai_family = AF_UNSPEC;
2104        hints.ai_socktype = SOCK_STREAM;
2105        error = getaddrinfo("127.0.0.1", 0, &hints, &ai);
2106        if(error || !ai)
2107          exit(1); /* fail */
2108        else
2109          exit(0);
2110      ]])
2111    ],[
2112      AC_MSG_RESULT([yes])
2113      tst_works_getaddrinfo="yes"
2114    ],[
2115      AC_MSG_RESULT([no])
2116      tst_works_getaddrinfo="no"
2117    ])
2118  fi
2119  #
2120  if test "$tst_compi_getaddrinfo" = "yes" &&
2121    test "$tst_works_getaddrinfo" != "no"; then
2122    AC_MSG_CHECKING([if getaddrinfo usage allowed])
2123    if test "x$curl_disallow_getaddrinfo" != "xyes"; then
2124      AC_MSG_RESULT([yes])
2125      tst_allow_getaddrinfo="yes"
2126    else
2127      AC_MSG_RESULT([no])
2128      tst_allow_getaddrinfo="no"
2129    fi
2130  fi
2131  #
2132  AC_MSG_CHECKING([if getaddrinfo might be used])
2133  if test "$tst_links_getaddrinfo" = "yes" &&
2134     test "$tst_proto_getaddrinfo" = "yes" &&
2135     test "$tst_compi_getaddrinfo" = "yes" &&
2136     test "$tst_allow_getaddrinfo" = "yes" &&
2137     test "$tst_works_getaddrinfo" != "no"; then
2138    AC_MSG_RESULT([yes])
2139    AC_DEFINE_UNQUOTED(HAVE_GETADDRINFO, 1,
2140      [Define to 1 if you have a working getaddrinfo function.])
2141    ac_cv_func_getaddrinfo="yes"
2142  else
2143    AC_MSG_RESULT([no])
2144    ac_cv_func_getaddrinfo="no"
2145    ac_cv_func_getaddrinfo_threadsafe="no"
2146  fi
2147  #
2148  if test "$ac_cv_func_getaddrinfo" = "yes"; then
2149    AC_MSG_CHECKING([if getaddrinfo is threadsafe])
2150    case $host_os in
2151      aix[[1234]].* | aix5.[[01]].*)
2152        dnl aix 5.1 and older
2153        tst_tsafe_getaddrinfo="no"
2154        ;;
2155      aix*)
2156        dnl aix 5.2 and newer
2157        tst_tsafe_getaddrinfo="yes"
2158        ;;
2159      darwin[[12345]].*)
2160        dnl darwin 5.0 and mac os x 10.1.X and older
2161        tst_tsafe_getaddrinfo="no"
2162        ;;
2163      darwin*)
2164        dnl darwin 6.0 and mac os x 10.2.X and newer
2165        tst_tsafe_getaddrinfo="yes"
2166        ;;
2167      freebsd[[1234]].* | freebsd5.[[1234]]*)
2168        dnl freebsd 5.4 and older
2169        tst_tsafe_getaddrinfo="no"
2170        ;;
2171      freebsd*)
2172        dnl freebsd 5.5 and newer
2173        tst_tsafe_getaddrinfo="yes"
2174        ;;
2175      hpux[[123456789]].* | hpux10.* | hpux11.0* | hpux11.10*)
2176        dnl hpux 11.10 and older
2177        tst_tsafe_getaddrinfo="no"
2178        ;;
2179      hpux*)
2180        dnl hpux 11.11 and newer
2181        tst_tsafe_getaddrinfo="yes"
2182        ;;
2183      netbsd[[123]].*)
2184        dnl netbsd 3.X and older
2185        tst_tsafe_getaddrinfo="no"
2186        ;;
2187      netbsd*)
2188        dnl netbsd 4.X and newer
2189        tst_tsafe_getaddrinfo="yes"
2190        ;;
2191      *bsd*)
2192        dnl All other bsd's
2193        tst_tsafe_getaddrinfo="no"
2194        ;;
2195      solaris2*)
2196        dnl solaris which have it
2197        tst_tsafe_getaddrinfo="yes"
2198        ;;
2199    esac
2200    if test "$tst_tsafe_getaddrinfo" = "unknown" &&
2201       test "$ac_cv_native_windows" = "yes"; then
2202      tst_tsafe_getaddrinfo="yes"
2203    fi
2204    if test "$tst_tsafe_getaddrinfo" = "unknown"; then
2205      CURL_CHECK_DEF_CC([h_errno], [
2206        $curl_includes_sys_socket
2207        $curl_includes_netdb
2208        ], [silent])
2209      if test "$curl_cv_have_def_h_errno" = "yes"; then
2210        tst_h_errno_macro="yes"
2211      else
2212        tst_h_errno_macro="no"
2213      fi
2214      AC_COMPILE_IFELSE([
2215        AC_LANG_PROGRAM([[
2216          $curl_includes_sys_socket
2217          $curl_includes_netdb
2218        ]],[[
2219          h_errno = 2;
2220          if(0 != h_errno)
2221            return 1;
2222        ]])
2223      ],[
2224        tst_h_errno_modifiable_lvalue="yes"
2225      ],[
2226        tst_h_errno_modifiable_lvalue="no"
2227      ])
2228      AC_COMPILE_IFELSE([
2229        AC_LANG_PROGRAM([[
2230        ]],[[
2231#if defined(_POSIX_C_SOURCE) && (_POSIX_C_SOURCE >= 200809L)
2232          return 0;
2233#elif defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 700)
2234          return 0;
2235#else
2236          force compilation error
2237#endif
2238        ]])
2239      ],[
2240        tst_h_errno_sbs_issue_7="yes"
2241      ],[
2242        tst_h_errno_sbs_issue_7="no"
2243      ])
2244      if test "$tst_h_errno_macro" = "no" &&
2245         test "$tst_h_errno_modifiable_lvalue" = "no" &&
2246         test "$tst_h_errno_sbs_issue_7" = "no"; then
2247        tst_tsafe_getaddrinfo="no"
2248      else
2249        tst_tsafe_getaddrinfo="yes"
2250      fi
2251    fi
2252    AC_MSG_RESULT([$tst_tsafe_getaddrinfo])
2253    if test "$tst_tsafe_getaddrinfo" = "yes"; then
2254      AC_DEFINE_UNQUOTED(HAVE_GETADDRINFO_THREADSAFE, 1,
2255        [Define to 1 if the getaddrinfo function is threadsafe.])
2256      ac_cv_func_getaddrinfo_threadsafe="yes"
2257    else
2258      ac_cv_func_getaddrinfo_threadsafe="no"
2259    fi
2260  fi
2261])
2262
2263
2264dnl CURL_CHECK_FUNC_GETHOSTBYADDR
2265dnl -------------------------------------------------
2266dnl Verify if gethostbyaddr is available, prototyped,
2267dnl and can be compiled. If all of these are true,
2268dnl and usage has not been previously disallowed with
2269dnl shell variable curl_disallow_gethostbyaddr, then
2270dnl HAVE_GETHOSTBYADDR will be defined.
2271
2272AC_DEFUN([CURL_CHECK_FUNC_GETHOSTBYADDR], [
2273  AC_REQUIRE([CURL_INCLUDES_WINSOCK2])dnl
2274  AC_REQUIRE([CURL_INCLUDES_NETDB])dnl
2275  #
2276  tst_links_gethostbyaddr="unknown"
2277  tst_proto_gethostbyaddr="unknown"
2278  tst_compi_gethostbyaddr="unknown"
2279  tst_allow_gethostbyaddr="unknown"
2280  #
2281  AC_MSG_CHECKING([if gethostbyaddr can be linked])
2282  AC_LINK_IFELSE([
2283    AC_LANG_PROGRAM([[
2284      $curl_includes_winsock2
2285      $curl_includes_netdb
2286    ]],[[
2287      if(0 != gethostbyaddr(0, 0, 0))
2288        return 1;
2289    ]])
2290  ],[
2291    AC_MSG_RESULT([yes])
2292    tst_links_gethostbyaddr="yes"
2293  ],[
2294    AC_MSG_RESULT([no])
2295    tst_links_gethostbyaddr="no"
2296  ])
2297  #
2298  if test "$tst_links_gethostbyaddr" = "yes"; then
2299    AC_MSG_CHECKING([if gethostbyaddr is prototyped])
2300    AC_EGREP_CPP([gethostbyaddr],[
2301      $curl_includes_winsock2
2302      $curl_includes_netdb
2303    ],[
2304      AC_MSG_RESULT([yes])
2305      tst_proto_gethostbyaddr="yes"
2306    ],[
2307      AC_MSG_RESULT([no])
2308      tst_proto_gethostbyaddr="no"
2309    ])
2310  fi
2311  #
2312  if test "$tst_proto_gethostbyaddr" = "yes"; then
2313    AC_MSG_CHECKING([if gethostbyaddr is compilable])
2314    AC_COMPILE_IFELSE([
2315      AC_LANG_PROGRAM([[
2316        $curl_includes_winsock2
2317        $curl_includes_netdb
2318      ]],[[
2319        if(0 != gethostbyaddr(0, 0, 0))
2320          return 1;
2321      ]])
2322    ],[
2323      AC_MSG_RESULT([yes])
2324      tst_compi_gethostbyaddr="yes"
2325    ],[
2326      AC_MSG_RESULT([no])
2327      tst_compi_gethostbyaddr="no"
2328    ])
2329  fi
2330  #
2331  if test "$tst_compi_gethostbyaddr" = "yes"; then
2332    AC_MSG_CHECKING([if gethostbyaddr usage allowed])
2333    if test "x$curl_disallow_gethostbyaddr" != "xyes"; then
2334      AC_MSG_RESULT([yes])
2335      tst_allow_gethostbyaddr="yes"
2336    else
2337      AC_MSG_RESULT([no])
2338      tst_allow_gethostbyaddr="no"
2339    fi
2340  fi
2341  #
2342  AC_MSG_CHECKING([if gethostbyaddr might be used])
2343  if test "$tst_links_gethostbyaddr" = "yes" &&
2344     test "$tst_proto_gethostbyaddr" = "yes" &&
2345     test "$tst_compi_gethostbyaddr" = "yes" &&
2346     test "$tst_allow_gethostbyaddr" = "yes"; then
2347    AC_MSG_RESULT([yes])
2348    AC_DEFINE_UNQUOTED(HAVE_GETHOSTBYADDR, 1,
2349      [Define to 1 if you have the gethostbyaddr function.])
2350    ac_cv_func_gethostbyaddr="yes"
2351  else
2352    AC_MSG_RESULT([no])
2353    ac_cv_func_gethostbyaddr="no"
2354  fi
2355])
2356
2357dnl CURL_CHECK_FUNC_GAI_STRERROR
2358dnl -------------------------------------------------
2359dnl Verify if gai_strerror is available, prototyped,
2360dnl and can be compiled. If all of these are true,
2361dnl and usage has not been previously disallowed with
2362dnl shell variable curl_disallow_gai_strerror, then
2363dnl HAVE_GAI_STRERROR will be defined.
2364
2365AC_DEFUN([CURL_CHECK_FUNC_GAI_STRERROR], [
2366  AC_REQUIRE([CURL_INCLUDES_WINSOCK2])dnl
2367  AC_REQUIRE([CURL_INCLUDES_NETDB])dnl
2368  #
2369  tst_links_gai_strerror="unknown"
2370  tst_proto_gai_strerror="unknown"
2371  tst_compi_gai_strerror="unknown"
2372  tst_allow_gai_strerror="unknown"
2373  #
2374  AC_MSG_CHECKING([if gai_strerror can be linked])
2375  AC_LINK_IFELSE([
2376    AC_LANG_PROGRAM([[
2377      $curl_includes_winsock2
2378      $curl_includes_netdb
2379    ]],[[
2380      if(0 != gai_strerror(0))
2381        return 1;
2382    ]])
2383  ],[
2384    AC_MSG_RESULT([yes])
2385    tst_links_gai_strerror="yes"
2386  ],[
2387    AC_MSG_RESULT([no])
2388    tst_links_gai_strerror="no"
2389  ])
2390  #
2391  if test "$tst_links_gai_strerror" = "yes"; then
2392    AC_MSG_CHECKING([if gai_strerror is prototyped])
2393    AC_EGREP_CPP([gai_strerror],[
2394      $curl_includes_winsock2
2395      $curl_includes_netdb
2396    ],[
2397      AC_MSG_RESULT([yes])
2398      tst_proto_gai_strerror="yes"
2399    ],[
2400      AC_MSG_RESULT([no])
2401      tst_proto_gai_strerror="no"
2402    ])
2403  fi
2404  #
2405  if test "$tst_proto_gai_strerror" = "yes"; then
2406    AC_MSG_CHECKING([if gai_strerror is compilable])
2407    AC_COMPILE_IFELSE([
2408      AC_LANG_PROGRAM([[
2409        $curl_includes_winsock2
2410        $curl_includes_netdb
2411      ]],[[
2412        if(0 != gai_strerror(0))
2413          return 1;
2414      ]])
2415    ],[
2416      AC_MSG_RESULT([yes])
2417      tst_compi_gai_strerror="yes"
2418    ],[
2419      AC_MSG_RESULT([no])
2420      tst_compi_gai_strerror="no"
2421    ])
2422  fi
2423  #
2424  if test "$tst_compi_gai_strerror" = "yes"; then
2425    AC_MSG_CHECKING([if gai_strerror usage allowed])
2426    if test "x$curl_disallow_gai_strerror" != "xyes"; then
2427      AC_MSG_RESULT([yes])
2428      tst_allow_gai_strerror="yes"
2429    else
2430      AC_MSG_RESULT([no])
2431      tst_allow_gai_strerror="no"
2432    fi
2433  fi
2434  #
2435  AC_MSG_CHECKING([if gai_strerror might be used])
2436  if test "$tst_links_gai_strerror" = "yes" &&
2437     test "$tst_proto_gai_strerror" = "yes" &&
2438     test "$tst_compi_gai_strerror" = "yes" &&
2439     test "$tst_allow_gai_strerror" = "yes"; then
2440    AC_MSG_RESULT([yes])
2441    AC_DEFINE_UNQUOTED(HAVE_GAI_STRERROR, 1,
2442      [Define to 1 if you have the gai_strerror function.])
2443    ac_cv_func_gai_strerror="yes"
2444  else
2445    AC_MSG_RESULT([no])
2446    ac_cv_func_gai_strerror="no"
2447  fi
2448])
2449
2450
2451dnl CURL_CHECK_FUNC_GETHOSTBYADDR_R
2452dnl -------------------------------------------------
2453dnl Verify if gethostbyaddr_r is available, prototyped,
2454dnl and can be compiled. If all of these are true, and
2455dnl usage has not been previously disallowed with
2456dnl shell variable curl_disallow_gethostbyaddr_r, then
2457dnl HAVE_GETHOSTBYADDR_R will be defined.
2458
2459AC_DEFUN([CURL_CHECK_FUNC_GETHOSTBYADDR_R], [
2460  AC_REQUIRE([CURL_INCLUDES_NETDB])dnl
2461  #
2462  tst_links_gethostbyaddr_r="unknown"
2463  tst_proto_gethostbyaddr_r="unknown"
2464  tst_compi_gethostbyaddr_r="unknown"
2465  tst_allow_gethostbyaddr_r="unknown"
2466  tst_nargs_gethostbyaddr_r="unknown"
2467  #
2468  AC_MSG_CHECKING([if gethostbyaddr_r can be linked])
2469  AC_LINK_IFELSE([
2470    AC_LANG_FUNC_LINK_TRY([gethostbyaddr_r])
2471  ],[
2472    AC_MSG_RESULT([yes])
2473    tst_links_gethostbyaddr_r="yes"
2474  ],[
2475    AC_MSG_RESULT([no])
2476    tst_links_gethostbyaddr_r="no"
2477  ])
2478  #
2479  if test "$tst_links_gethostbyaddr_r" = "yes"; then
2480    AC_MSG_CHECKING([if gethostbyaddr_r is prototyped])
2481    AC_EGREP_CPP([gethostbyaddr_r],[
2482      $curl_includes_netdb
2483    ],[
2484      AC_MSG_RESULT([yes])
2485      tst_proto_gethostbyaddr_r="yes"
2486    ],[
2487      AC_MSG_RESULT([no])
2488      tst_proto_gethostbyaddr_r="no"
2489    ])
2490  fi
2491  #
2492  if test "$tst_proto_gethostbyaddr_r" = "yes"; then
2493    if test "$tst_nargs_gethostbyaddr_r" = "unknown"; then
2494      AC_MSG_CHECKING([if gethostbyaddr_r takes 5 args.])
2495      AC_COMPILE_IFELSE([
2496        AC_LANG_PROGRAM([[
2497          $curl_includes_netdb
2498        ]],[[
2499          if(0 != gethostbyaddr_r(0, 0, 0, 0, 0))
2500            return 1;
2501        ]])
2502      ],[
2503        AC_MSG_RESULT([yes])
2504        tst_compi_gethostbyaddr_r="yes"
2505        tst_nargs_gethostbyaddr_r="5"
2506      ],[
2507        AC_MSG_RESULT([no])
2508        tst_compi_gethostbyaddr_r="no"
2509      ])
2510    fi
2511    if test "$tst_nargs_gethostbyaddr_r" = "unknown"; then
2512      AC_MSG_CHECKING([if gethostbyaddr_r takes 7 args.])
2513      AC_COMPILE_IFELSE([
2514        AC_LANG_PROGRAM([[
2515          $curl_includes_netdb
2516        ]],[[
2517          if(0 != gethostbyaddr_r(0, 0, 0, 0, 0, 0, 0))
2518            return 1;
2519        ]])
2520      ],[
2521        AC_MSG_RESULT([yes])
2522        tst_compi_gethostbyaddr_r="yes"
2523        tst_nargs_gethostbyaddr_r="7"
2524      ],[
2525        AC_MSG_RESULT([no])
2526        tst_compi_gethostbyaddr_r="no"
2527      ])
2528    fi
2529    if test "$tst_nargs_gethostbyaddr_r" = "unknown"; then
2530      AC_MSG_CHECKING([if gethostbyaddr_r takes 8 args.])
2531      AC_COMPILE_IFELSE([
2532        AC_LANG_PROGRAM([[
2533          $curl_includes_netdb
2534        ]],[[
2535          if(0 != gethostbyaddr_r(0, 0, 0, 0, 0, 0, 0, 0))
2536            return 1;
2537        ]])
2538      ],[
2539        AC_MSG_RESULT([yes])
2540        tst_compi_gethostbyaddr_r="yes"
2541        tst_nargs_gethostbyaddr_r="8"
2542      ],[
2543        AC_MSG_RESULT([no])
2544        tst_compi_gethostbyaddr_r="no"
2545      ])
2546    fi
2547    AC_MSG_CHECKING([if gethostbyaddr_r is compilable])
2548    if test "$tst_compi_gethostbyaddr_r" = "yes"; then
2549      AC_MSG_RESULT([yes])
2550    else
2551      AC_MSG_RESULT([no])
2552    fi
2553  fi
2554  #
2555  if test "$tst_compi_gethostbyaddr_r" = "yes"; then
2556    AC_MSG_CHECKING([if gethostbyaddr_r usage allowed])
2557    if test "x$curl_disallow_gethostbyaddr_r" != "xyes"; then
2558      AC_MSG_RESULT([yes])
2559      tst_allow_gethostbyaddr_r="yes"
2560    else
2561      AC_MSG_RESULT([no])
2562      tst_allow_gethostbyaddr_r="no"
2563    fi
2564  fi
2565  #
2566  AC_MSG_CHECKING([if gethostbyaddr_r might be used])
2567  if test "$tst_links_gethostbyaddr_r" = "yes" &&
2568     test "$tst_proto_gethostbyaddr_r" = "yes" &&
2569     test "$tst_compi_gethostbyaddr_r" = "yes" &&
2570     test "$tst_allow_gethostbyaddr_r" = "yes"; then
2571    AC_MSG_RESULT([yes])
2572    AC_DEFINE_UNQUOTED(HAVE_GETHOSTBYADDR_R, 1,
2573      [Define to 1 if you have the gethostbyaddr_r function.])
2574    dnl AC_DEFINE_UNQUOTED(GETHOSTBYADDR_R_ARGS, $tst_nargs_gethostbyaddr_r,
2575    dnl   [Specifies the number of arguments to gethostbyaddr_r])
2576    #
2577    if test "$tst_nargs_gethostbyaddr_r" -eq "5"; then
2578      AC_DEFINE(HAVE_GETHOSTBYADDR_R_5, 1, [gethostbyaddr_r() takes 5 args])
2579    elif test "$tst_nargs_gethostbyaddr_r" -eq "7"; then
2580      AC_DEFINE(HAVE_GETHOSTBYADDR_R_7, 1, [gethostbyaddr_r() takes 7 args])
2581    elif test "$tst_nargs_gethostbyaddr_r" -eq "8"; then
2582      AC_DEFINE(HAVE_GETHOSTBYADDR_R_8, 1, [gethostbyaddr_r() takes 8 args])
2583    fi
2584    #
2585    ac_cv_func_gethostbyaddr_r="yes"
2586  else
2587    AC_MSG_RESULT([no])
2588    ac_cv_func_gethostbyaddr_r="no"
2589  fi
2590])
2591
2592
2593dnl CURL_CHECK_FUNC_GETHOSTBYNAME
2594dnl -------------------------------------------------
2595dnl Verify if gethostbyname is available, prototyped,
2596dnl and can be compiled. If all of these are true,
2597dnl and usage has not been previously disallowed with
2598dnl shell variable curl_disallow_gethostbyname, then
2599dnl HAVE_GETHOSTBYNAME will be defined.
2600
2601AC_DEFUN([CURL_CHECK_FUNC_GETHOSTBYNAME], [
2602  AC_REQUIRE([CURL_INCLUDES_WINSOCK2])dnl
2603  AC_REQUIRE([CURL_INCLUDES_NETDB])dnl
2604  #
2605  tst_links_gethostbyname="unknown"
2606  tst_proto_gethostbyname="unknown"
2607  tst_compi_gethostbyname="unknown"
2608  tst_allow_gethostbyname="unknown"
2609  #
2610  AC_MSG_CHECKING([if gethostbyname can be linked])
2611  AC_LINK_IFELSE([
2612    AC_LANG_PROGRAM([[
2613      $curl_includes_winsock2
2614      $curl_includes_netdb
2615    ]],[[
2616      if(0 != gethostbyname(0))
2617        return 1;
2618    ]])
2619  ],[
2620    AC_MSG_RESULT([yes])
2621    tst_links_gethostbyname="yes"
2622  ],[
2623    AC_MSG_RESULT([no])
2624    tst_links_gethostbyname="no"
2625  ])
2626  #
2627  if test "$tst_links_gethostbyname" = "yes"; then
2628    AC_MSG_CHECKING([if gethostbyname is prototyped])
2629    AC_EGREP_CPP([gethostbyname],[
2630      $curl_includes_winsock2
2631      $curl_includes_netdb
2632    ],[
2633      AC_MSG_RESULT([yes])
2634      tst_proto_gethostbyname="yes"
2635    ],[
2636      AC_MSG_RESULT([no])
2637      tst_proto_gethostbyname="no"
2638    ])
2639  fi
2640  #
2641  if test "$tst_proto_gethostbyname" = "yes"; then
2642    AC_MSG_CHECKING([if gethostbyname is compilable])
2643    AC_COMPILE_IFELSE([
2644      AC_LANG_PROGRAM([[
2645        $curl_includes_winsock2
2646        $curl_includes_netdb
2647      ]],[[
2648        if(0 != gethostbyname(0))
2649          return 1;
2650      ]])
2651    ],[
2652      AC_MSG_RESULT([yes])
2653      tst_compi_gethostbyname="yes"
2654    ],[
2655      AC_MSG_RESULT([no])
2656      tst_compi_gethostbyname="no"
2657    ])
2658  fi
2659  #
2660  if test "$tst_compi_gethostbyname" = "yes"; then
2661    AC_MSG_CHECKING([if gethostbyname usage allowed])
2662    if test "x$curl_disallow_gethostbyname" != "xyes"; then
2663      AC_MSG_RESULT([yes])
2664      tst_allow_gethostbyname="yes"
2665    else
2666      AC_MSG_RESULT([no])
2667      tst_allow_gethostbyname="no"
2668    fi
2669  fi
2670  #
2671  AC_MSG_CHECKING([if gethostbyname might be used])
2672  if test "$tst_links_gethostbyname" = "yes" &&
2673     test "$tst_proto_gethostbyname" = "yes" &&
2674     test "$tst_compi_gethostbyname" = "yes" &&
2675     test "$tst_allow_gethostbyname" = "yes"; then
2676    AC_MSG_RESULT([yes])
2677    AC_DEFINE_UNQUOTED(HAVE_GETHOSTBYNAME, 1,
2678      [Define to 1 if you have the gethostbyname function.])
2679    ac_cv_func_gethostbyname="yes"
2680  else
2681    AC_MSG_RESULT([no])
2682    ac_cv_func_gethostbyname="no"
2683  fi
2684])
2685
2686
2687dnl CURL_CHECK_FUNC_GETHOSTBYNAME_R
2688dnl -------------------------------------------------
2689dnl Verify if gethostbyname_r is available, prototyped,
2690dnl and can be compiled. If all of these are true, and
2691dnl usage has not been previously disallowed with
2692dnl shell variable curl_disallow_gethostbyname_r, then
2693dnl HAVE_GETHOSTBYNAME_R will be defined.
2694
2695AC_DEFUN([CURL_CHECK_FUNC_GETHOSTBYNAME_R], [
2696  AC_REQUIRE([CURL_INCLUDES_NETDB])dnl
2697  #
2698  tst_links_gethostbyname_r="unknown"
2699  tst_proto_gethostbyname_r="unknown"
2700  tst_compi_gethostbyname_r="unknown"
2701  tst_allow_gethostbyname_r="unknown"
2702  tst_nargs_gethostbyname_r="unknown"
2703  #
2704  AC_MSG_CHECKING([if gethostbyname_r can be linked])
2705  AC_LINK_IFELSE([
2706    AC_LANG_FUNC_LINK_TRY([gethostbyname_r])
2707  ],[
2708    AC_MSG_RESULT([yes])
2709    tst_links_gethostbyname_r="yes"
2710  ],[
2711    AC_MSG_RESULT([no])
2712    tst_links_gethostbyname_r="no"
2713  ])
2714  #
2715  if test "$tst_links_gethostbyname_r" = "yes"; then
2716    AC_MSG_CHECKING([if gethostbyname_r is prototyped])
2717    AC_EGREP_CPP([gethostbyname_r],[
2718      $curl_includes_netdb
2719    ],[
2720      AC_MSG_RESULT([yes])
2721      tst_proto_gethostbyname_r="yes"
2722    ],[
2723      AC_MSG_RESULT([no])
2724      tst_proto_gethostbyname_r="no"
2725    ])
2726  fi
2727  #
2728  if test "$tst_proto_gethostbyname_r" = "yes"; then
2729    if test "$tst_nargs_gethostbyname_r" = "unknown"; then
2730      AC_MSG_CHECKING([if gethostbyname_r takes 3 args.])
2731      AC_COMPILE_IFELSE([
2732        AC_LANG_PROGRAM([[
2733          $curl_includes_netdb
2734        ]],[[
2735          if(0 != gethostbyname_r(0, 0, 0))
2736            return 1;
2737        ]])
2738      ],[
2739        AC_MSG_RESULT([yes])
2740        tst_compi_gethostbyname_r="yes"
2741        tst_nargs_gethostbyname_r="3"
2742      ],[
2743        AC_MSG_RESULT([no])
2744        tst_compi_gethostbyname_r="no"
2745      ])
2746    fi
2747    if test "$tst_nargs_gethostbyname_r" = "unknown"; then
2748      AC_MSG_CHECKING([if gethostbyname_r takes 5 args.])
2749      AC_COMPILE_IFELSE([
2750        AC_LANG_PROGRAM([[
2751          $curl_includes_netdb
2752        ]],[[
2753          if(0 != gethostbyname_r(0, 0, 0, 0, 0))
2754            return 1;
2755        ]])
2756      ],[
2757        AC_MSG_RESULT([yes])
2758        tst_compi_gethostbyname_r="yes"
2759        tst_nargs_gethostbyname_r="5"
2760      ],[
2761        AC_MSG_RESULT([no])
2762        tst_compi_gethostbyname_r="no"
2763      ])
2764    fi
2765    if test "$tst_nargs_gethostbyname_r" = "unknown"; then
2766      AC_MSG_CHECKING([if gethostbyname_r takes 6 args.])
2767      AC_COMPILE_IFELSE([
2768        AC_LANG_PROGRAM([[
2769          $curl_includes_netdb
2770        ]],[[
2771          if(0 != gethostbyname_r(0, 0, 0, 0, 0, 0))
2772            return 1;
2773        ]])
2774      ],[
2775        AC_MSG_RESULT([yes])
2776        tst_compi_gethostbyname_r="yes"
2777        tst_nargs_gethostbyname_r="6"
2778      ],[
2779        AC_MSG_RESULT([no])
2780        tst_compi_gethostbyname_r="no"
2781      ])
2782    fi
2783    AC_MSG_CHECKING([if gethostbyname_r is compilable])
2784    if test "$tst_compi_gethostbyname_r" = "yes"; then
2785      AC_MSG_RESULT([yes])
2786    else
2787      AC_MSG_RESULT([no])
2788    fi
2789  fi
2790  #
2791  if test "$tst_compi_gethostbyname_r" = "yes"; then
2792    AC_MSG_CHECKING([if gethostbyname_r usage allowed])
2793    if test "x$curl_disallow_gethostbyname_r" != "xyes"; then
2794      AC_MSG_RESULT([yes])
2795      tst_allow_gethostbyname_r="yes"
2796    else
2797      AC_MSG_RESULT([no])
2798      tst_allow_gethostbyname_r="no"
2799    fi
2800  fi
2801  #
2802  AC_MSG_CHECKING([if gethostbyname_r might be used])
2803  if test "$tst_links_gethostbyname_r" = "yes" &&
2804     test "$tst_proto_gethostbyname_r" = "yes" &&
2805     test "$tst_compi_gethostbyname_r" = "yes" &&
2806     test "$tst_allow_gethostbyname_r" = "yes"; then
2807    AC_MSG_RESULT([yes])
2808    AC_DEFINE_UNQUOTED(HAVE_GETHOSTBYNAME_R, 1,
2809      [Define to 1 if you have the gethostbyname_r function.])
2810    dnl AC_DEFINE_UNQUOTED(GETHOSTBYNAME_R_ARGS, $tst_nargs_gethostbyname_r,
2811    dnl   [Specifies the number of arguments to gethostbyname_r])
2812    #
2813    if test "$tst_nargs_gethostbyname_r" -eq "3"; then
2814      AC_DEFINE(HAVE_GETHOSTBYNAME_R_3, 1, [gethostbyname_r() takes 3 args])
2815    elif test "$tst_nargs_gethostbyname_r" -eq "5"; then
2816      AC_DEFINE(HAVE_GETHOSTBYNAME_R_5, 1, [gethostbyname_r() takes 5 args])
2817    elif test "$tst_nargs_gethostbyname_r" -eq "6"; then
2818      AC_DEFINE(HAVE_GETHOSTBYNAME_R_6, 1, [gethostbyname_r() takes 6 args])
2819    fi
2820    #
2821    ac_cv_func_gethostbyname_r="yes"
2822  else
2823    AC_MSG_RESULT([no])
2824    ac_cv_func_gethostbyname_r="no"
2825  fi
2826])
2827
2828
2829dnl CURL_CHECK_FUNC_GETHOSTNAME
2830dnl -------------------------------------------------
2831dnl Verify if gethostname is available, prototyped, and
2832dnl can be compiled. If all of these are true, and
2833dnl usage has not been previously disallowed with
2834dnl shell variable curl_disallow_gethostname, then
2835dnl HAVE_GETHOSTNAME will be defined.
2836
2837AC_DEFUN([CURL_CHECK_FUNC_GETHOSTNAME], [
2838  AC_REQUIRE([CURL_INCLUDES_WINSOCK2])dnl
2839  AC_REQUIRE([CURL_INCLUDES_UNISTD])dnl
2840  AC_REQUIRE([CURL_PREPROCESS_CALLCONV])dnl
2841  #
2842  tst_links_gethostname="unknown"
2843  tst_proto_gethostname="unknown"
2844  tst_compi_gethostname="unknown"
2845  tst_allow_gethostname="unknown"
2846  #
2847  AC_MSG_CHECKING([if gethostname can be linked])
2848  AC_LINK_IFELSE([
2849    AC_LANG_PROGRAM([[
2850      $curl_includes_winsock2
2851      $curl_includes_unistd
2852    ]],[[
2853      if(0 != gethostname(0, 0))
2854        return 1;
2855    ]])
2856  ],[
2857    AC_MSG_RESULT([yes])
2858    tst_links_gethostname="yes"
2859  ],[
2860    AC_MSG_RESULT([no])
2861    tst_links_gethostname="no"
2862  ])
2863  #
2864  if test "$tst_links_gethostname" = "yes"; then
2865    AC_MSG_CHECKING([if gethostname is prototyped])
2866    AC_EGREP_CPP([gethostname],[
2867      $curl_includes_winsock2
2868      $curl_includes_unistd
2869    ],[
2870      AC_MSG_RESULT([yes])
2871      tst_proto_gethostname="yes"
2872    ],[
2873      AC_MSG_RESULT([no])
2874      tst_proto_gethostname="no"
2875    ])
2876  fi
2877  #
2878  if test "$tst_proto_gethostname" = "yes"; then
2879    AC_MSG_CHECKING([if gethostname is compilable])
2880    AC_COMPILE_IFELSE([
2881      AC_LANG_PROGRAM([[
2882        $curl_includes_winsock2
2883        $curl_includes_unistd
2884      ]],[[
2885        if(0 != gethostname(0, 0))
2886          return 1;
2887      ]])
2888    ],[
2889      AC_MSG_RESULT([yes])
2890      tst_compi_gethostname="yes"
2891    ],[
2892      AC_MSG_RESULT([no])
2893      tst_compi_gethostname="no"
2894    ])
2895  fi
2896  #
2897  if test "$tst_compi_gethostname" = "yes"; then
2898    AC_MSG_CHECKING([for gethostname arg 2 data type])
2899    tst_gethostname_type_arg2="unknown"
2900    for tst_arg1 in 'char *' 'unsigned char *' 'void *'; do
2901      for tst_arg2 in 'int' 'unsigned int' 'size_t'; do
2902        if test "$tst_gethostname_type_arg2" = "unknown"; then
2903          AC_COMPILE_IFELSE([
2904            AC_LANG_PROGRAM([[
2905              $curl_includes_winsock2
2906              $curl_includes_unistd
2907              $curl_preprocess_callconv
2908              extern int FUNCALLCONV gethostname($tst_arg1, $tst_arg2);
2909            ]],[[
2910              if(0 != gethostname(0, 0))
2911                return 1;
2912            ]])
2913          ],[
2914            tst_gethostname_type_arg2="$tst_arg2"
2915          ])
2916        fi
2917      done
2918    done
2919    AC_MSG_RESULT([$tst_gethostname_type_arg2])
2920    if test "$tst_gethostname_type_arg2" != "unknown"; then
2921      AC_DEFINE_UNQUOTED(GETHOSTNAME_TYPE_ARG2, $tst_gethostname_type_arg2,
2922        [Define to the type of arg 2 for gethostname.])
2923    fi
2924  fi
2925  #
2926  if test "$tst_compi_gethostname" = "yes"; then
2927    AC_MSG_CHECKING([if gethostname usage allowed])
2928    if test "x$curl_disallow_gethostname" != "xyes"; then
2929      AC_MSG_RESULT([yes])
2930      tst_allow_gethostname="yes"
2931    else
2932      AC_MSG_RESULT([no])
2933      tst_allow_gethostname="no"
2934    fi
2935  fi
2936  #
2937  AC_MSG_CHECKING([if gethostname might be used])
2938  if test "$tst_links_gethostname" = "yes" &&
2939     test "$tst_proto_gethostname" = "yes" &&
2940     test "$tst_compi_gethostname" = "yes" &&
2941     test "$tst_allow_gethostname" = "yes"; then
2942    AC_MSG_RESULT([yes])
2943    AC_DEFINE_UNQUOTED(HAVE_GETHOSTNAME, 1,
2944      [Define to 1 if you have the gethostname function.])
2945    ac_cv_func_gethostname="yes"
2946  else
2947    AC_MSG_RESULT([no])
2948    ac_cv_func_gethostname="no"
2949  fi
2950])
2951
2952
2953dnl CURL_CHECK_FUNC_GETIFADDRS
2954dnl -------------------------------------------------
2955dnl Verify if getifaddrs is available, prototyped, can
2956dnl be compiled and seems to work. If all of these are
2957dnl true, and usage has not been previously disallowed
2958dnl with shell variable curl_disallow_getifaddrs, then
2959dnl HAVE_GETIFADDRS will be defined.
2960
2961AC_DEFUN([CURL_CHECK_FUNC_GETIFADDRS], [
2962  AC_REQUIRE([CURL_INCLUDES_STDLIB])dnl
2963  AC_REQUIRE([CURL_INCLUDES_IFADDRS])dnl
2964  #
2965  tst_links_getifaddrs="unknown"
2966  tst_proto_getifaddrs="unknown"
2967  tst_compi_getifaddrs="unknown"
2968  tst_works_getifaddrs="unknown"
2969  tst_allow_getifaddrs="unknown"
2970  #
2971  AC_MSG_CHECKING([if getifaddrs can be linked])
2972  AC_LINK_IFELSE([
2973    AC_LANG_FUNC_LINK_TRY([getifaddrs])
2974  ],[
2975    AC_MSG_RESULT([yes])
2976    tst_links_getifaddrs="yes"
2977  ],[
2978    AC_MSG_RESULT([no])
2979    tst_links_getifaddrs="no"
2980  ])
2981  #
2982  if test "$tst_links_getifaddrs" = "yes"; then
2983    AC_MSG_CHECKING([if getifaddrs is prototyped])
2984    AC_EGREP_CPP([getifaddrs],[
2985      $curl_includes_ifaddrs
2986    ],[
2987      AC_MSG_RESULT([yes])
2988      tst_proto_getifaddrs="yes"
2989    ],[
2990      AC_MSG_RESULT([no])
2991      tst_proto_getifaddrs="no"
2992    ])
2993  fi
2994  #
2995  if test "$tst_proto_getifaddrs" = "yes"; then
2996    AC_MSG_CHECKING([if getifaddrs is compilable])
2997    AC_COMPILE_IFELSE([
2998      AC_LANG_PROGRAM([[
2999        $curl_includes_ifaddrs
3000      ]],[[
3001        if(0 != getifaddrs(0))
3002          return 1;
3003      ]])
3004    ],[
3005      AC_MSG_RESULT([yes])
3006      tst_compi_getifaddrs="yes"
3007    ],[
3008      AC_MSG_RESULT([no])
3009      tst_compi_getifaddrs="no"
3010    ])
3011  fi
3012  #
3013  dnl only do runtime verification when not cross-compiling
3014  if test "x$cross_compiling" != "xyes" &&
3015    test "$tst_compi_getifaddrs" = "yes"; then
3016    AC_MSG_CHECKING([if getifaddrs seems to work])
3017    AC_RUN_IFELSE([
3018      AC_LANG_PROGRAM([[
3019        $curl_includes_stdlib
3020        $curl_includes_ifaddrs
3021      ]],[[
3022        struct ifaddrs *ifa = 0;
3023        int error;
3024
3025        error = getifaddrs(&ifa);
3026        if(error || !ifa)
3027          exit(1); /* fail */
3028        else
3029          exit(0);
3030      ]])
3031    ],[
3032      AC_MSG_RESULT([yes])
3033      tst_works_getifaddrs="yes"
3034    ],[
3035      AC_MSG_RESULT([no])
3036      tst_works_getifaddrs="no"
3037    ])
3038  fi
3039  #
3040  if test "$tst_compi_getifaddrs" = "yes" &&
3041    test "$tst_works_getifaddrs" != "no"; then
3042    AC_MSG_CHECKING([if getifaddrs usage allowed])
3043    if test "x$curl_disallow_getifaddrs" != "xyes"; then
3044      AC_MSG_RESULT([yes])
3045      tst_allow_getifaddrs="yes"
3046    else
3047      AC_MSG_RESULT([no])
3048      tst_allow_getifaddrs="no"
3049    fi
3050  fi
3051  #
3052  AC_MSG_CHECKING([if getifaddrs might be used])
3053  if test "$tst_links_getifaddrs" = "yes" &&
3054     test "$tst_proto_getifaddrs" = "yes" &&
3055     test "$tst_compi_getifaddrs" = "yes" &&
3056     test "$tst_allow_getifaddrs" = "yes" &&
3057     test "$tst_works_getifaddrs" != "no"; then
3058    AC_MSG_RESULT([yes])
3059    AC_DEFINE_UNQUOTED(HAVE_GETIFADDRS, 1,
3060      [Define to 1 if you have a working getifaddrs function.])
3061    ac_cv_func_getifaddrs="yes"
3062  else
3063    AC_MSG_RESULT([no])
3064    ac_cv_func_getifaddrs="no"
3065  fi
3066])
3067
3068
3069dnl CURL_CHECK_FUNC_GETSERVBYPORT_R
3070dnl -------------------------------------------------
3071dnl Verify if getservbyport_r is available, prototyped,
3072dnl and can be compiled. If all of these are true, and
3073dnl usage has not been previously disallowed with
3074dnl shell variable curl_disallow_getservbyport_r, then
3075dnl HAVE_GETSERVBYPORT_R will be defined.
3076
3077AC_DEFUN([CURL_CHECK_FUNC_GETSERVBYPORT_R], [
3078  AC_REQUIRE([CURL_INCLUDES_NETDB])dnl
3079  #
3080  tst_links_getservbyport_r="unknown"
3081  tst_proto_getservbyport_r="unknown"
3082  tst_compi_getservbyport_r="unknown"
3083  tst_allow_getservbyport_r="unknown"
3084  tst_nargs_getservbyport_r="unknown"
3085  #
3086  AC_MSG_CHECKING([if getservbyport_r can be linked])
3087  AC_LINK_IFELSE([
3088    AC_LANG_FUNC_LINK_TRY([getservbyport_r])
3089  ],[
3090    AC_MSG_RESULT([yes])
3091    tst_links_getservbyport_r="yes"
3092  ],[
3093    AC_MSG_RESULT([no])
3094    tst_links_getservbyport_r="no"
3095  ])
3096  #
3097  if test "$tst_links_getservbyport_r" = "yes"; then
3098    AC_MSG_CHECKING([if getservbyport_r is prototyped])
3099    AC_EGREP_CPP([getservbyport_r],[
3100      $curl_includes_netdb
3101    ],[
3102      AC_MSG_RESULT([yes])
3103      tst_proto_getservbyport_r="yes"
3104    ],[
3105      AC_MSG_RESULT([no])
3106      tst_proto_getservbyport_r="no"
3107    ])
3108  fi
3109  #
3110  if test "$tst_proto_getservbyport_r" = "yes"; then
3111    if test "$tst_nargs_getservbyport_r" = "unknown"; then
3112      AC_MSG_CHECKING([if getservbyport_r takes 4 args.])
3113      AC_COMPILE_IFELSE([
3114        AC_LANG_PROGRAM([[
3115          $curl_includes_netdb
3116        ]],[[
3117          if(0 != getservbyport_r(0, 0, 0, 0))
3118            return 1;
3119        ]])
3120      ],[
3121        AC_MSG_RESULT([yes])
3122        tst_compi_getservbyport_r="yes"
3123        tst_nargs_getservbyport_r="4"
3124      ],[
3125        AC_MSG_RESULT([no])
3126        tst_compi_getservbyport_r="no"
3127      ])
3128    fi
3129    if test "$tst_nargs_getservbyport_r" = "unknown"; then
3130      AC_MSG_CHECKING([if getservbyport_r takes 5 args.])
3131      AC_COMPILE_IFELSE([
3132        AC_LANG_PROGRAM([[
3133          $curl_includes_netdb
3134        ]],[[
3135          if(0 != getservbyport_r(0, 0, 0, 0, 0))
3136            return 1;
3137        ]])
3138      ],[
3139        AC_MSG_RESULT([yes])
3140        tst_compi_getservbyport_r="yes"
3141        tst_nargs_getservbyport_r="5"
3142      ],[
3143        AC_MSG_RESULT([no])
3144        tst_compi_getservbyport_r="no"
3145      ])
3146    fi
3147    if test "$tst_nargs_getservbyport_r" = "unknown"; then
3148      AC_MSG_CHECKING([if getservbyport_r takes 6 args.])
3149      AC_COMPILE_IFELSE([
3150        AC_LANG_PROGRAM([[
3151          $curl_includes_netdb
3152        ]],[[
3153          if(0 != getservbyport_r(0, 0, 0, 0, 0, 0))
3154            return 1;
3155        ]])
3156      ],[
3157        AC_MSG_RESULT([yes])
3158        tst_compi_getservbyport_r="yes"
3159        tst_nargs_getservbyport_r="6"
3160      ],[
3161        AC_MSG_RESULT([no])
3162        tst_compi_getservbyport_r="no"
3163      ])
3164    fi
3165    AC_MSG_CHECKING([if getservbyport_r is compilable])
3166    if test "$tst_compi_getservbyport_r" = "yes"; then
3167      AC_MSG_RESULT([yes])
3168    else
3169      AC_MSG_RESULT([no])
3170    fi
3171  fi
3172  #
3173  if test "$tst_compi_getservbyport_r" = "yes"; then
3174    AC_MSG_CHECKING([if getservbyport_r usage allowed])
3175    if test "x$curl_disallow_getservbyport_r" != "xyes"; then
3176      AC_MSG_RESULT([yes])
3177      tst_allow_getservbyport_r="yes"
3178    else
3179      AC_MSG_RESULT([no])
3180      tst_allow_getservbyport_r="no"
3181    fi
3182  fi
3183  #
3184  AC_MSG_CHECKING([if getservbyport_r might be used])
3185  if test "$tst_links_getservbyport_r" = "yes" &&
3186     test "$tst_proto_getservbyport_r" = "yes" &&
3187     test "$tst_compi_getservbyport_r" = "yes" &&
3188     test "$tst_allow_getservbyport_r" = "yes"; then
3189    AC_MSG_RESULT([yes])
3190    AC_DEFINE_UNQUOTED(HAVE_GETSERVBYPORT_R, 1,
3191      [Define to 1 if you have the getservbyport_r function.])
3192    AC_DEFINE_UNQUOTED(GETSERVBYPORT_R_ARGS, $tst_nargs_getservbyport_r,
3193      [Specifies the number of arguments to getservbyport_r])
3194    if test "$tst_nargs_getservbyport_r" -eq "4"; then
3195      AC_DEFINE(GETSERVBYPORT_R_BUFSIZE, sizeof(struct servent_data),
3196        [Specifies the size of the buffer to pass to getservbyport_r])
3197    else
3198      AC_DEFINE(GETSERVBYPORT_R_BUFSIZE, 4096,
3199        [Specifies the size of the buffer to pass to getservbyport_r])
3200    fi
3201    ac_cv_func_getservbyport_r="yes"
3202  else
3203    AC_MSG_RESULT([no])
3204    ac_cv_func_getservbyport_r="no"
3205  fi
3206])
3207
3208
3209dnl CURL_CHECK_FUNC_GETXATTR
3210dnl -------------------------------------------------
3211dnl Verify if getxattr is available, prototyped, and
3212dnl can be compiled. If all of these are true, and
3213dnl usage has not been previously disallowed with
3214dnl shell variable curl_disallow_getxattr, then
3215dnl HAVE_GETXATTR will be defined.
3216
3217AC_DEFUN([CURL_CHECK_FUNC_GETXATTR], [
3218  AC_REQUIRE([CURL_INCLUDES_SYS_XATTR])dnl
3219  #
3220  tst_links_getxattr="unknown"
3221  tst_proto_getxattr="unknown"
3222  tst_compi_getxattr="unknown"
3223  tst_allow_getxattr="unknown"
3224  tst_nargs_getxattr="unknown"
3225  #
3226  AC_MSG_CHECKING([if getxattr can be linked])
3227  AC_LINK_IFELSE([
3228    AC_LANG_FUNC_LINK_TRY([getxattr])
3229  ],[
3230    AC_MSG_RESULT([yes])
3231    tst_links_getxattr="yes"
3232  ],[
3233    AC_MSG_RESULT([no])
3234    tst_links_getxattr="no"
3235  ])
3236  #
3237  if test "$tst_links_getxattr" = "yes"; then
3238    AC_MSG_CHECKING([if getxattr is prototyped])
3239    AC_EGREP_CPP([getxattr],[
3240      $curl_includes_sys_xattr
3241    ],[
3242      AC_MSG_RESULT([yes])
3243      tst_proto_getxattr="yes"
3244    ],[
3245      AC_MSG_RESULT([no])
3246      tst_proto_getxattr="no"
3247    ])
3248  fi
3249  #
3250  if test "$tst_proto_getxattr" = "yes"; then
3251    if test "$tst_nargs_getxattr" = "unknown"; then
3252      AC_MSG_CHECKING([if getxattr takes 4 args.])
3253      AC_COMPILE_IFELSE([
3254        AC_LANG_PROGRAM([[
3255          $curl_includes_sys_xattr
3256        ]],[[
3257          if(0 != getxattr(0, 0, 0, 0))
3258            return 1;
3259        ]])
3260      ],[
3261        AC_MSG_RESULT([yes])
3262        tst_compi_getxattr="yes"
3263        tst_nargs_getxattr="4"
3264      ],[
3265        AC_MSG_RESULT([no])
3266        tst_compi_getxattr="no"
3267      ])
3268    fi
3269    if test "$tst_nargs_getxattr" = "unknown"; then
3270      AC_MSG_CHECKING([if getxattr takes 6 args.])
3271      AC_COMPILE_IFELSE([
3272        AC_LANG_PROGRAM([[
3273          $curl_includes_sys_xattr
3274        ]],[[
3275          if(0 != getxattr(0, 0, 0, 0, 0, 0))
3276            return 1;
3277        ]])
3278      ],[
3279        AC_MSG_RESULT([yes])
3280        tst_compi_getxattr="yes"
3281        tst_nargs_getxattr="6"
3282      ],[
3283        AC_MSG_RESULT([no])
3284        tst_compi_getxattr="no"
3285      ])
3286    fi
3287    AC_MSG_CHECKING([if getxattr is compilable])
3288    if test "$tst_compi_getxattr" = "yes"; then
3289      AC_MSG_RESULT([yes])
3290    else
3291      AC_MSG_RESULT([no])
3292    fi
3293  fi
3294  #
3295  if test "$tst_compi_getxattr" = "yes"; then
3296    AC_MSG_CHECKING([if getxattr usage allowed])
3297    if test "x$curl_disallow_getxattr" != "xyes"; then
3298      AC_MSG_RESULT([yes])
3299      tst_allow_getxattr="yes"
3300    else
3301      AC_MSG_RESULT([no])
3302      tst_allow_getxattr="no"
3303    fi
3304  fi
3305  #
3306  AC_MSG_CHECKING([if getxattr might be used])
3307  if test "$tst_links_getxattr" = "yes" &&
3308     test "$tst_proto_getxattr" = "yes" &&
3309     test "$tst_compi_getxattr" = "yes" &&
3310     test "$tst_allow_getxattr" = "yes"; then
3311    AC_MSG_RESULT([yes])
3312    AC_DEFINE_UNQUOTED(HAVE_GETXATTR, 1,
3313      [Define to 1 if you have the getxattr function.])
3314    dnl AC_DEFINE_UNQUOTED(GETXATTR_ARGS, $tst_nargs_getxattr,
3315    dnl   [Specifies the number of arguments to getxattr])
3316    #
3317    if test "$tst_nargs_getxattr" -eq "4"; then
3318      AC_DEFINE(HAVE_GETXATTR_4, 1, [getxattr() takes 4 args])
3319    elif test "$tst_nargs_getxattr" -eq "6"; then
3320      AC_DEFINE(HAVE_GETXATTR_6, 1, [getxattr() takes 6 args])
3321    fi
3322    #
3323    ac_cv_func_getxattr="yes"
3324  else
3325    AC_MSG_RESULT([no])
3326    ac_cv_func_getxattr="no"
3327  fi
3328])
3329
3330
3331dnl CURL_CHECK_FUNC_GMTIME_R
3332dnl -------------------------------------------------
3333dnl Verify if gmtime_r is available, prototyped, can
3334dnl be compiled and seems to work. If all of these are
3335dnl true, and usage has not been previously disallowed
3336dnl with shell variable curl_disallow_gmtime_r, then
3337dnl HAVE_GMTIME_R will be defined.
3338
3339AC_DEFUN([CURL_CHECK_FUNC_GMTIME_R], [
3340  AC_REQUIRE([CURL_INCLUDES_STDLIB])dnl
3341  AC_REQUIRE([CURL_INCLUDES_TIME])dnl
3342  #
3343  tst_links_gmtime_r="unknown"
3344  tst_proto_gmtime_r="unknown"
3345  tst_compi_gmtime_r="unknown"
3346  tst_works_gmtime_r="unknown"
3347  tst_allow_gmtime_r="unknown"
3348  #
3349  AC_MSG_CHECKING([if gmtime_r can be linked])
3350  AC_LINK_IFELSE([
3351    AC_LANG_FUNC_LINK_TRY([gmtime_r])
3352  ],[
3353    AC_MSG_RESULT([yes])
3354    tst_links_gmtime_r="yes"
3355  ],[
3356    AC_MSG_RESULT([no])
3357    tst_links_gmtime_r="no"
3358  ])
3359  #
3360  if test "$tst_links_gmtime_r" = "yes"; then
3361    AC_MSG_CHECKING([if gmtime_r is prototyped])
3362    AC_EGREP_CPP([gmtime_r],[
3363      $curl_includes_time
3364    ],[
3365      AC_MSG_RESULT([yes])
3366      tst_proto_gmtime_r="yes"
3367    ],[
3368      AC_MSG_RESULT([no])
3369      tst_proto_gmtime_r="no"
3370    ])
3371  fi
3372  #
3373  if test "$tst_proto_gmtime_r" = "yes"; then
3374    AC_MSG_CHECKING([if gmtime_r is compilable])
3375    AC_COMPILE_IFELSE([
3376      AC_LANG_PROGRAM([[
3377        $curl_includes_time
3378      ]],[[
3379        if(0 != gmtime_r(0, 0))
3380          return 1;
3381      ]])
3382    ],[
3383      AC_MSG_RESULT([yes])
3384      tst_compi_gmtime_r="yes"
3385    ],[
3386      AC_MSG_RESULT([no])
3387      tst_compi_gmtime_r="no"
3388    ])
3389  fi
3390  #
3391  dnl only do runtime verification when not cross-compiling
3392  if test "x$cross_compiling" != "xyes" &&
3393    test "$tst_compi_gmtime_r" = "yes"; then
3394    AC_MSG_CHECKING([if gmtime_r seems to work])
3395    AC_RUN_IFELSE([
3396      AC_LANG_PROGRAM([[
3397        $curl_includes_stdlib
3398        $curl_includes_time
3399      ]],[[
3400        time_t local = 1170352587;
3401        struct tm *gmt = 0;
3402        struct tm result;
3403        gmt = gmtime_r(&local, &result);
3404        if(gmt)
3405          exit(0);
3406        else
3407          exit(1);
3408      ]])
3409    ],[
3410      AC_MSG_RESULT([yes])
3411      tst_works_gmtime_r="yes"
3412    ],[
3413      AC_MSG_RESULT([no])
3414      tst_works_gmtime_r="no"
3415    ])
3416  fi
3417  #
3418  if test "$tst_compi_gmtime_r" = "yes" &&
3419    test "$tst_works_gmtime_r" != "no"; then
3420    AC_MSG_CHECKING([if gmtime_r usage allowed])
3421    if test "x$curl_disallow_gmtime_r" != "xyes"; then
3422      AC_MSG_RESULT([yes])
3423      tst_allow_gmtime_r="yes"
3424    else
3425      AC_MSG_RESULT([no])
3426      tst_allow_gmtime_r="no"
3427    fi
3428  fi
3429  #
3430  AC_MSG_CHECKING([if gmtime_r might be used])
3431  if test "$tst_links_gmtime_r" = "yes" &&
3432     test "$tst_proto_gmtime_r" = "yes" &&
3433     test "$tst_compi_gmtime_r" = "yes" &&
3434     test "$tst_allow_gmtime_r" = "yes" &&
3435     test "$tst_works_gmtime_r" != "no"; then
3436    AC_MSG_RESULT([yes])
3437    AC_DEFINE_UNQUOTED(HAVE_GMTIME_R, 1,
3438      [Define to 1 if you have a working gmtime_r function.])
3439    ac_cv_func_gmtime_r="yes"
3440  else
3441    AC_MSG_RESULT([no])
3442    ac_cv_func_gmtime_r="no"
3443  fi
3444])
3445
3446
3447dnl CURL_CHECK_FUNC_INET_NTOA_R
3448dnl -------------------------------------------------
3449dnl Verify if inet_ntoa_r is available, prototyped,
3450dnl and can be compiled. If all of these are true, and
3451dnl usage has not been previously disallowed with
3452dnl shell variable curl_disallow_inet_ntoa_r, then
3453dnl HAVE_INET_NTOA_R will be defined.
3454
3455AC_DEFUN([CURL_CHECK_FUNC_INET_NTOA_R], [
3456  AC_REQUIRE([CURL_INCLUDES_ARPA_INET])dnl
3457  #
3458  tst_links_inet_ntoa_r="unknown"
3459  tst_proto_inet_ntoa_r="unknown"
3460  tst_compi_inet_ntoa_r="unknown"
3461  tst_allow_inet_ntoa_r="unknown"
3462  tst_nargs_inet_ntoa_r="unknown"
3463  #
3464  AC_MSG_CHECKING([if inet_ntoa_r can be linked])
3465  AC_LINK_IFELSE([
3466    AC_LANG_FUNC_LINK_TRY([inet_ntoa_r])
3467  ],[
3468    AC_MSG_RESULT([yes])
3469    tst_links_inet_ntoa_r="yes"
3470  ],[
3471    AC_MSG_RESULT([no])
3472    tst_links_inet_ntoa_r="no"
3473  ])
3474  #
3475  if test "$tst_links_inet_ntoa_r" = "yes"; then
3476    AC_MSG_CHECKING([if inet_ntoa_r is prototyped])
3477    AC_EGREP_CPP([inet_ntoa_r],[
3478      $curl_includes_arpa_inet
3479    ],[
3480      AC_MSG_RESULT([yes])
3481      tst_proto_inet_ntoa_r="yes"
3482    ],[
3483      AC_MSG_RESULT([no])
3484      tst_proto_inet_ntoa_r="no"
3485    ])
3486  fi
3487  #
3488  if test "$tst_proto_inet_ntoa_r" = "yes"; then
3489    if test "$tst_nargs_inet_ntoa_r" = "unknown"; then
3490      AC_MSG_CHECKING([if inet_ntoa_r takes 2 args.])
3491      AC_COMPILE_IFELSE([
3492        AC_LANG_PROGRAM([[
3493          $curl_includes_arpa_inet
3494        ]],[[
3495          struct in_addr addr;
3496          if(0 != inet_ntoa_r(addr, 0))
3497            return 1;
3498        ]])
3499      ],[
3500        AC_MSG_RESULT([yes])
3501        tst_compi_inet_ntoa_r="yes"
3502        tst_nargs_inet_ntoa_r="2"
3503      ],[
3504        AC_MSG_RESULT([no])
3505        tst_compi_inet_ntoa_r="no"
3506      ])
3507    fi
3508    if test "$tst_nargs_inet_ntoa_r" = "unknown"; then
3509      AC_MSG_CHECKING([if inet_ntoa_r takes 3 args.])
3510      AC_COMPILE_IFELSE([
3511        AC_LANG_PROGRAM([[
3512          $curl_includes_arpa_inet
3513        ]],[[
3514          struct in_addr addr;
3515          if(0 != inet_ntoa_r(addr, 0, 0))
3516            return 1;
3517        ]])
3518      ],[
3519        AC_MSG_RESULT([yes])
3520        tst_compi_inet_ntoa_r="yes"
3521        tst_nargs_inet_ntoa_r="3"
3522      ],[
3523        AC_MSG_RESULT([no])
3524        tst_compi_inet_ntoa_r="no"
3525      ])
3526    fi
3527    AC_MSG_CHECKING([if inet_ntoa_r is compilable])
3528    if test "$tst_compi_inet_ntoa_r" = "yes"; then
3529      AC_MSG_RESULT([yes])
3530    else
3531      AC_MSG_RESULT([no])
3532    fi
3533  fi
3534  #
3535  if test "$tst_compi_inet_ntoa_r" = "yes"; then
3536    AC_MSG_CHECKING([if inet_ntoa_r usage allowed])
3537    if test "x$curl_disallow_inet_ntoa_r" != "xyes"; then
3538      AC_MSG_RESULT([yes])
3539      tst_allow_inet_ntoa_r="yes"
3540    else
3541      AC_MSG_RESULT([no])
3542      tst_allow_inet_ntoa_r="no"
3543    fi
3544  fi
3545  #
3546  AC_MSG_CHECKING([if inet_ntoa_r might be used])
3547  if test "$tst_links_inet_ntoa_r" = "yes" &&
3548     test "$tst_proto_inet_ntoa_r" = "yes" &&
3549     test "$tst_compi_inet_ntoa_r" = "yes" &&
3550     test "$tst_allow_inet_ntoa_r" = "yes"; then
3551    AC_MSG_RESULT([yes])
3552    AC_DEFINE_UNQUOTED(HAVE_INET_NTOA_R, 1,
3553      [Define to 1 if you have the inet_ntoa_r function.])
3554    dnl AC_DEFINE_UNQUOTED(INET_NTOA_R_ARGS, $tst_nargs_inet_ntoa_r,
3555    dnl   [Specifies the number of arguments to inet_ntoa_r])
3556    #
3557    if test "$tst_nargs_inet_ntoa_r" -eq "2"; then
3558      AC_DEFINE(HAVE_INET_NTOA_R_2, 1, [inet_ntoa_r() takes 2 args])
3559    elif test "$tst_nargs_inet_ntoa_r" -eq "3"; then
3560      AC_DEFINE(HAVE_INET_NTOA_R_3, 1, [inet_ntoa_r() takes 3 args])
3561    fi
3562    #
3563    ac_cv_func_inet_ntoa_r="yes"
3564  else
3565    AC_MSG_RESULT([no])
3566    ac_cv_func_inet_ntoa_r="no"
3567  fi
3568])
3569
3570
3571dnl CURL_CHECK_FUNC_INET_NTOP
3572dnl -------------------------------------------------
3573dnl Verify if inet_ntop is available, prototyped, can
3574dnl be compiled and seems to work. If all of these are
3575dnl true, and usage has not been previously disallowed
3576dnl with shell variable curl_disallow_inet_ntop, then
3577dnl HAVE_INET_NTOP will be defined.
3578
3579AC_DEFUN([CURL_CHECK_FUNC_INET_NTOP], [
3580  AC_REQUIRE([CURL_INCLUDES_STDLIB])dnl
3581  AC_REQUIRE([CURL_INCLUDES_ARPA_INET])dnl
3582  AC_REQUIRE([CURL_INCLUDES_STRING])dnl
3583  #
3584  tst_links_inet_ntop="unknown"
3585  tst_proto_inet_ntop="unknown"
3586  tst_compi_inet_ntop="unknown"
3587  tst_works_inet_ntop="unknown"
3588  tst_allow_inet_ntop="unknown"
3589  #
3590  AC_MSG_CHECKING([if inet_ntop can be linked])
3591  AC_LINK_IFELSE([
3592    AC_LANG_FUNC_LINK_TRY([inet_ntop])
3593  ],[
3594    AC_MSG_RESULT([yes])
3595    tst_links_inet_ntop="yes"
3596  ],[
3597    AC_MSG_RESULT([no])
3598    tst_links_inet_ntop="no"
3599  ])
3600  #
3601  if test "$tst_links_inet_ntop" = "yes"; then
3602    AC_MSG_CHECKING([if inet_ntop is prototyped])
3603    AC_EGREP_CPP([inet_ntop],[
3604      $curl_includes_arpa_inet
3605    ],[
3606      AC_MSG_RESULT([yes])
3607      tst_proto_inet_ntop="yes"
3608    ],[
3609      AC_MSG_RESULT([no])
3610      tst_proto_inet_ntop="no"
3611    ])
3612  fi
3613  #
3614  if test "$tst_proto_inet_ntop" = "yes"; then
3615    AC_MSG_CHECKING([if inet_ntop is compilable])
3616    AC_COMPILE_IFELSE([
3617      AC_LANG_PROGRAM([[
3618        $curl_includes_arpa_inet
3619      ]],[[
3620        if(0 != inet_ntop(0, 0, 0, 0))
3621          return 1;
3622      ]])
3623    ],[
3624      AC_MSG_RESULT([yes])
3625      tst_compi_inet_ntop="yes"
3626    ],[
3627      AC_MSG_RESULT([no])
3628      tst_compi_inet_ntop="no"
3629    ])
3630  fi
3631  #
3632  dnl only do runtime verification when not cross-compiling
3633  if test "x$cross_compiling" != "xyes" &&
3634    test "$tst_compi_inet_ntop" = "yes"; then
3635    AC_MSG_CHECKING([if inet_ntop seems to work])
3636    AC_RUN_IFELSE([
3637      AC_LANG_PROGRAM([[
3638        $curl_includes_stdlib
3639        $curl_includes_arpa_inet
3640        $curl_includes_string
3641      ]],[[
3642        char ipv6res[sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")];
3643        char ipv4res[sizeof "255.255.255.255"];
3644        unsigned char ipv6a[26];
3645        unsigned char ipv4a[5];
3646        char *ipv6ptr = 0;
3647        char *ipv4ptr = 0;
3648        /* - */
3649        ipv4res[0] = '\0';
3650        ipv4a[0] = 0xc0;
3651        ipv4a[1] = 0xa8;
3652        ipv4a[2] = 0x64;
3653        ipv4a[3] = 0x01;
3654        ipv4a[4] = 0x01;
3655        /* - */
3656        ipv4ptr = inet_ntop(AF_INET, ipv4a, ipv4res, sizeof(ipv4res));
3657        if(!ipv4ptr)
3658          exit(1); /* fail */
3659        if(ipv4ptr != ipv4res)
3660          exit(1); /* fail */
3661        if(!ipv4ptr[0])
3662          exit(1); /* fail */
3663        if(memcmp(ipv4res, "192.168.100.1", 13) != 0)
3664          exit(1); /* fail */
3665        /* - */
3666        ipv6res[0] = '\0';
3667        memset(ipv6a, 0, sizeof(ipv6a));
3668        ipv6a[0] = 0xfe;
3669        ipv6a[1] = 0x80;
3670        ipv6a[8] = 0x02;
3671        ipv6a[9] = 0x14;
3672        ipv6a[10] = 0x4f;
3673        ipv6a[11] = 0xff;
3674        ipv6a[12] = 0xfe;
3675        ipv6a[13] = 0x0b;
3676        ipv6a[14] = 0x76;
3677        ipv6a[15] = 0xc8;
3678        ipv6a[25] = 0x01;
3679        /* - */
3680        ipv6ptr = inet_ntop(AF_INET6, ipv6a, ipv6res, sizeof(ipv6res));
3681        if(!ipv6ptr)
3682          exit(1); /* fail */
3683        if(ipv6ptr != ipv6res)
3684          exit(1); /* fail */
3685        if(!ipv6ptr[0])
3686          exit(1); /* fail */
3687        if(memcmp(ipv6res, "fe80::214:4fff:fe0b:76c8", 24) != 0)
3688          exit(1); /* fail */
3689        /* - */
3690        exit(0);
3691      ]])
3692    ],[
3693      AC_MSG_RESULT([yes])
3694      tst_works_inet_ntop="yes"
3695    ],[
3696      AC_MSG_RESULT([no])
3697      tst_works_inet_ntop="no"
3698    ])
3699  fi
3700  #
3701  if test "$tst_compi_inet_ntop" = "yes" &&
3702    test "$tst_works_inet_ntop" != "no"; then
3703    AC_MSG_CHECKING([if inet_ntop usage allowed])
3704    if test "x$curl_disallow_inet_ntop" != "xyes"; then
3705      AC_MSG_RESULT([yes])
3706      tst_allow_inet_ntop="yes"
3707    else
3708      AC_MSG_RESULT([no])
3709      tst_allow_inet_ntop="no"
3710    fi
3711  fi
3712  #
3713  AC_MSG_CHECKING([if inet_ntop might be used])
3714  if test "$tst_links_inet_ntop" = "yes" &&
3715     test "$tst_proto_inet_ntop" = "yes" &&
3716     test "$tst_compi_inet_ntop" = "yes" &&
3717     test "$tst_allow_inet_ntop" = "yes" &&
3718     test "$tst_works_inet_ntop" != "no"; then
3719    AC_MSG_RESULT([yes])
3720    AC_DEFINE_UNQUOTED(HAVE_INET_NTOP, 1,
3721      [Define to 1 if you have a IPv6 capable working inet_ntop function.])
3722    ac_cv_func_inet_ntop="yes"
3723  else
3724    AC_MSG_RESULT([no])
3725    ac_cv_func_inet_ntop="no"
3726  fi
3727])
3728
3729
3730dnl CURL_CHECK_FUNC_INET_PTON
3731dnl -------------------------------------------------
3732dnl Verify if inet_pton is available, prototyped, can
3733dnl be compiled and seems to work. If all of these are
3734dnl true, and usage has not been previously disallowed
3735dnl with shell variable curl_disallow_inet_pton, then
3736dnl HAVE_INET_PTON will be defined.
3737
3738AC_DEFUN([CURL_CHECK_FUNC_INET_PTON], [
3739  AC_REQUIRE([CURL_INCLUDES_STDLIB])dnl
3740  AC_REQUIRE([CURL_INCLUDES_ARPA_INET])dnl
3741  AC_REQUIRE([CURL_INCLUDES_STRING])dnl
3742  #
3743  tst_links_inet_pton="unknown"
3744  tst_proto_inet_pton="unknown"
3745  tst_compi_inet_pton="unknown"
3746  tst_works_inet_pton="unknown"
3747  tst_allow_inet_pton="unknown"
3748  #
3749  AC_MSG_CHECKING([if inet_pton can be linked])
3750  AC_LINK_IFELSE([
3751    AC_LANG_FUNC_LINK_TRY([inet_pton])
3752  ],[
3753    AC_MSG_RESULT([yes])
3754    tst_links_inet_pton="yes"
3755  ],[
3756    AC_MSG_RESULT([no])
3757    tst_links_inet_pton="no"
3758  ])
3759  #
3760  if test "$tst_links_inet_pton" = "yes"; then
3761    AC_MSG_CHECKING([if inet_pton is prototyped])
3762    AC_EGREP_CPP([inet_pton],[
3763      $curl_includes_arpa_inet
3764    ],[
3765      AC_MSG_RESULT([yes])
3766      tst_proto_inet_pton="yes"
3767    ],[
3768      AC_MSG_RESULT([no])
3769      tst_proto_inet_pton="no"
3770    ])
3771  fi
3772  #
3773  if test "$tst_proto_inet_pton" = "yes"; then
3774    AC_MSG_CHECKING([if inet_pton is compilable])
3775    AC_COMPILE_IFELSE([
3776      AC_LANG_PROGRAM([[
3777        $curl_includes_arpa_inet
3778      ]],[[
3779        if(0 != inet_pton(0, 0, 0))
3780          return 1;
3781      ]])
3782    ],[
3783      AC_MSG_RESULT([yes])
3784      tst_compi_inet_pton="yes"
3785    ],[
3786      AC_MSG_RESULT([no])
3787      tst_compi_inet_pton="no"
3788    ])
3789  fi
3790  #
3791  dnl only do runtime verification when not cross-compiling
3792  if test "x$cross_compiling" != "xyes" &&
3793    test "$tst_compi_inet_pton" = "yes"; then
3794    AC_MSG_CHECKING([if inet_pton seems to work])
3795    AC_RUN_IFELSE([
3796      AC_LANG_PROGRAM([[
3797        $curl_includes_stdlib
3798        $curl_includes_arpa_inet
3799        $curl_includes_string
3800      ]],[[
3801        unsigned char ipv6a[16+1];
3802        unsigned char ipv4a[4+1];
3803        const char *ipv6src = "fe80::214:4fff:fe0b:76c8";
3804        const char *ipv4src = "192.168.100.1";
3805        /* - */
3806        memset(ipv4a, 1, sizeof(ipv4a));
3807        if(1 != inet_pton(AF_INET, ipv4src, ipv4a))
3808          exit(1); /* fail */
3809        /* - */
3810        if( (ipv4a[0] != 0xc0) ||
3811            (ipv4a[1] != 0xa8) ||
3812            (ipv4a[2] != 0x64) ||
3813            (ipv4a[3] != 0x01) ||
3814            (ipv4a[4] != 0x01) )
3815          exit(1); /* fail */
3816        /* - */
3817        memset(ipv6a, 1, sizeof(ipv6a));
3818        if(1 != inet_pton(AF_INET6, ipv6src, ipv6a))
3819          exit(1); /* fail */
3820        /* - */
3821        if( (ipv6a[0]  != 0xfe) ||
3822            (ipv6a[1]  != 0x80) ||
3823            (ipv6a[8]  != 0x02) ||
3824            (ipv6a[9]  != 0x14) ||
3825            (ipv6a[10] != 0x4f) ||
3826            (ipv6a[11] != 0xff) ||
3827            (ipv6a[12] != 0xfe) ||
3828            (ipv6a[13] != 0x0b) ||
3829            (ipv6a[14] != 0x76) ||
3830            (ipv6a[15] != 0xc8) ||
3831            (ipv6a[16] != 0x01) )
3832          exit(1); /* fail */
3833        /* - */
3834        if( (ipv6a[2]  != 0x0) ||
3835            (ipv6a[3]  != 0x0) ||
3836            (ipv6a[4]  != 0x0) ||
3837            (ipv6a[5]  != 0x0) ||
3838            (ipv6a[6]  != 0x0) ||
3839            (ipv6a[7]  != 0x0) )
3840          exit(1); /* fail */
3841        /* - */
3842        exit(0);
3843      ]])
3844    ],[
3845      AC_MSG_RESULT([yes])
3846      tst_works_inet_pton="yes"
3847    ],[
3848      AC_MSG_RESULT([no])
3849      tst_works_inet_pton="no"
3850    ])
3851  fi
3852  #
3853  if test "$tst_compi_inet_pton" = "yes" &&
3854    test "$tst_works_inet_pton" != "no"; then
3855    AC_MSG_CHECKING([if inet_pton usage allowed])
3856    if test "x$curl_disallow_inet_pton" != "xyes"; then
3857      AC_MSG_RESULT([yes])
3858      tst_allow_inet_pton="yes"
3859    else
3860      AC_MSG_RESULT([no])
3861      tst_allow_inet_pton="no"
3862    fi
3863  fi
3864  #
3865  AC_MSG_CHECKING([if inet_pton might be used])
3866  if test "$tst_links_inet_pton" = "yes" &&
3867     test "$tst_proto_inet_pton" = "yes" &&
3868     test "$tst_compi_inet_pton" = "yes" &&
3869     test "$tst_allow_inet_pton" = "yes" &&
3870     test "$tst_works_inet_pton" != "no"; then
3871    AC_MSG_RESULT([yes])
3872    AC_DEFINE_UNQUOTED(HAVE_INET_PTON, 1,
3873      [Define to 1 if you have a IPv6 capable working inet_pton function.])
3874    ac_cv_func_inet_pton="yes"
3875  else
3876    AC_MSG_RESULT([no])
3877    ac_cv_func_inet_pton="no"
3878  fi
3879])
3880
3881
3882dnl CURL_CHECK_FUNC_IOCTL
3883dnl -------------------------------------------------
3884dnl Verify if ioctl is available, prototyped, and
3885dnl can be compiled. If all of these are true, and
3886dnl usage has not been previously disallowed with
3887dnl shell variable curl_disallow_ioctl, then
3888dnl HAVE_IOCTL will be defined.
3889
3890AC_DEFUN([CURL_CHECK_FUNC_IOCTL], [
3891  AC_REQUIRE([CURL_INCLUDES_STROPTS])dnl
3892  #
3893  tst_links_ioctl="unknown"
3894  tst_proto_ioctl="unknown"
3895  tst_compi_ioctl="unknown"
3896  tst_allow_ioctl="unknown"
3897  #
3898  AC_MSG_CHECKING([if ioctl can be linked])
3899  AC_LINK_IFELSE([
3900    AC_LANG_FUNC_LINK_TRY([ioctl])
3901  ],[
3902    AC_MSG_RESULT([yes])
3903    tst_links_ioctl="yes"
3904  ],[
3905    AC_MSG_RESULT([no])
3906    tst_links_ioctl="no"
3907  ])
3908  #
3909  if test "$tst_links_ioctl" = "yes"; then
3910    AC_MSG_CHECKING([if ioctl is prototyped])
3911    AC_EGREP_CPP([ioctl],[
3912      $curl_includes_stropts
3913    ],[
3914      AC_MSG_RESULT([yes])
3915      tst_proto_ioctl="yes"
3916    ],[
3917      AC_MSG_RESULT([no])
3918      tst_proto_ioctl="no"
3919    ])
3920  fi
3921  #
3922  if test "$tst_proto_ioctl" = "yes"; then
3923    AC_MSG_CHECKING([if ioctl is compilable])
3924    AC_COMPILE_IFELSE([
3925      AC_LANG_PROGRAM([[
3926        $curl_includes_stropts
3927      ]],[[
3928        if(0 != ioctl(0, 0, 0))
3929          return 1;
3930      ]])
3931    ],[
3932      AC_MSG_RESULT([yes])
3933      tst_compi_ioctl="yes"
3934    ],[
3935      AC_MSG_RESULT([no])
3936      tst_compi_ioctl="no"
3937    ])
3938  fi
3939  #
3940  if test "$tst_compi_ioctl" = "yes"; then
3941    AC_MSG_CHECKING([if ioctl usage allowed])
3942    if test "x$curl_disallow_ioctl" != "xyes"; then
3943      AC_MSG_RESULT([yes])
3944      tst_allow_ioctl="yes"
3945    else
3946      AC_MSG_RESULT([no])
3947      tst_allow_ioctl="no"
3948    fi
3949  fi
3950  #
3951  AC_MSG_CHECKING([if ioctl might be used])
3952  if test "$tst_links_ioctl" = "yes" &&
3953     test "$tst_proto_ioctl" = "yes" &&
3954     test "$tst_compi_ioctl" = "yes" &&
3955     test "$tst_allow_ioctl" = "yes"; then
3956    AC_MSG_RESULT([yes])
3957    AC_DEFINE_UNQUOTED(HAVE_IOCTL, 1,
3958      [Define to 1 if you have the ioctl function.])
3959    ac_cv_func_ioctl="yes"
3960    CURL_CHECK_FUNC_IOCTL_FIONBIO
3961    CURL_CHECK_FUNC_IOCTL_SIOCGIFADDR
3962  else
3963    AC_MSG_RESULT([no])
3964    ac_cv_func_ioctl="no"
3965  fi
3966])
3967
3968
3969dnl CURL_CHECK_FUNC_IOCTL_FIONBIO
3970dnl -------------------------------------------------
3971dnl Verify if ioctl with the FIONBIO command is
3972dnl available, can be compiled, and seems to work. If
3973dnl all of these are true, then HAVE_IOCTL_FIONBIO
3974dnl will be defined.
3975
3976AC_DEFUN([CURL_CHECK_FUNC_IOCTL_FIONBIO], [
3977  #
3978  tst_compi_ioctl_fionbio="unknown"
3979  tst_allow_ioctl_fionbio="unknown"
3980  #
3981  if test "$ac_cv_func_ioctl" = "yes"; then
3982    AC_MSG_CHECKING([if ioctl FIONBIO is compilable])
3983    AC_COMPILE_IFELSE([
3984      AC_LANG_PROGRAM([[
3985        $curl_includes_stropts
3986      ]],[[
3987        int flags = 0;
3988        if(0 != ioctl(0, FIONBIO, &flags))
3989          return 1;
3990      ]])
3991    ],[
3992      AC_MSG_RESULT([yes])
3993      tst_compi_ioctl_fionbio="yes"
3994    ],[
3995      AC_MSG_RESULT([no])
3996      tst_compi_ioctl_fionbio="no"
3997    ])
3998  fi
3999  #
4000  if test "$tst_compi_ioctl_fionbio" = "yes"; then
4001    AC_MSG_CHECKING([if ioctl FIONBIO usage allowed])
4002    if test "x$curl_disallow_ioctl_fionbio" != "xyes"; then
4003      AC_MSG_RESULT([yes])
4004      tst_allow_ioctl_fionbio="yes"
4005    else
4006      AC_MSG_RESULT([no])
4007      tst_allow_ioctl_fionbio="no"
4008    fi
4009  fi
4010  #
4011  AC_MSG_CHECKING([if ioctl FIONBIO might be used])
4012  if test "$tst_compi_ioctl_fionbio" = "yes" &&
4013     test "$tst_allow_ioctl_fionbio" = "yes"; then
4014    AC_MSG_RESULT([yes])
4015    AC_DEFINE_UNQUOTED(HAVE_IOCTL_FIONBIO, 1,
4016      [Define to 1 if you have a working ioctl FIONBIO function.])
4017    ac_cv_func_ioctl_fionbio="yes"
4018  else
4019    AC_MSG_RESULT([no])
4020    ac_cv_func_ioctl_fionbio="no"
4021  fi
4022])
4023
4024
4025dnl CURL_CHECK_FUNC_IOCTL_SIOCGIFADDR
4026dnl -------------------------------------------------
4027dnl Verify if ioctl with the SIOCGIFADDR command is available,
4028dnl struct ifreq is defined, they can be compiled, and seem to
4029dnl work. If all of these are true, then HAVE_IOCTL_SIOCGIFADDR
4030dnl will be defined.
4031
4032AC_DEFUN([CURL_CHECK_FUNC_IOCTL_SIOCGIFADDR], [
4033  #
4034  tst_compi_ioctl_siocgifaddr="unknown"
4035  tst_allow_ioctl_siocgifaddr="unknown"
4036  #
4037  if test "$ac_cv_func_ioctl" = "yes"; then
4038    AC_MSG_CHECKING([if ioctl SIOCGIFADDR is compilable])
4039    AC_COMPILE_IFELSE([
4040      AC_LANG_PROGRAM([[
4041        $curl_includes_stropts
4042        #include <net/if.h>
4043      ]],[[
4044        struct ifreq ifr;
4045        if(0 != ioctl(0, SIOCGIFADDR, &ifr))
4046          return 1;
4047      ]])
4048    ],[
4049      AC_MSG_RESULT([yes])
4050      tst_compi_ioctl_siocgifaddr="yes"
4051    ],[
4052      AC_MSG_RESULT([no])
4053      tst_compi_ioctl_siocgifaddr="no"
4054    ])
4055  fi
4056  #
4057  if test "$tst_compi_ioctl_siocgifaddr" = "yes"; then
4058    AC_MSG_CHECKING([if ioctl SIOCGIFADDR usage allowed])
4059    if test "x$curl_disallow_ioctl_siocgifaddr" != "xyes"; then
4060      AC_MSG_RESULT([yes])
4061      tst_allow_ioctl_siocgifaddr="yes"
4062    else
4063      AC_MSG_RESULT([no])
4064      tst_allow_ioctl_siocgifaddr="no"
4065    fi
4066  fi
4067  #
4068  AC_MSG_CHECKING([if ioctl SIOCGIFADDR might be used])
4069  if test "$tst_compi_ioctl_siocgifaddr" = "yes" &&
4070     test "$tst_allow_ioctl_siocgifaddr" = "yes"; then
4071    AC_MSG_RESULT([yes])
4072    AC_DEFINE_UNQUOTED(HAVE_IOCTL_SIOCGIFADDR, 1,
4073      [Define to 1 if you have a working ioctl SIOCGIFADDR function.])
4074    ac_cv_func_ioctl_siocgifaddr="yes"
4075  else
4076    AC_MSG_RESULT([no])
4077    ac_cv_func_ioctl_siocgifaddr="no"
4078  fi
4079])
4080
4081
4082dnl CURL_CHECK_FUNC_IOCTLSOCKET
4083dnl -------------------------------------------------
4084dnl Verify if ioctlsocket is available, prototyped, and
4085dnl can be compiled. If all of these are true, and
4086dnl usage has not been previously disallowed with
4087dnl shell variable curl_disallow_ioctlsocket, then
4088dnl HAVE_IOCTLSOCKET will be defined.
4089
4090AC_DEFUN([CURL_CHECK_FUNC_IOCTLSOCKET], [
4091  AC_REQUIRE([CURL_INCLUDES_WINSOCK2])dnl
4092  #
4093  tst_links_ioctlsocket="unknown"
4094  tst_proto_ioctlsocket="unknown"
4095  tst_compi_ioctlsocket="unknown"
4096  tst_allow_ioctlsocket="unknown"
4097  #
4098  AC_MSG_CHECKING([if ioctlsocket can be linked])
4099  AC_LINK_IFELSE([
4100    AC_LANG_PROGRAM([[
4101      $curl_includes_winsock2
4102    ]],[[
4103      if(0 != ioctlsocket(0, 0, 0))
4104        return 1;
4105    ]])
4106  ],[
4107    AC_MSG_RESULT([yes])
4108    tst_links_ioctlsocket="yes"
4109  ],[
4110    AC_MSG_RESULT([no])
4111    tst_links_ioctlsocket="no"
4112  ])
4113  #
4114  if test "$tst_links_ioctlsocket" = "yes"; then
4115    AC_MSG_CHECKING([if ioctlsocket is prototyped])
4116    AC_EGREP_CPP([ioctlsocket],[
4117      $curl_includes_winsock2
4118    ],[
4119      AC_MSG_RESULT([yes])
4120      tst_proto_ioctlsocket="yes"
4121    ],[
4122      AC_MSG_RESULT([no])
4123      tst_proto_ioctlsocket="no"
4124    ])
4125  fi
4126  #
4127  if test "$tst_proto_ioctlsocket" = "yes"; then
4128    AC_MSG_CHECKING([if ioctlsocket is compilable])
4129    AC_COMPILE_IFELSE([
4130      AC_LANG_PROGRAM([[
4131        $curl_includes_winsock2
4132      ]],[[
4133        if(0 != ioctlsocket(0, 0, 0))
4134          return 1;
4135      ]])
4136    ],[
4137      AC_MSG_RESULT([yes])
4138      tst_compi_ioctlsocket="yes"
4139    ],[
4140      AC_MSG_RESULT([no])
4141      tst_compi_ioctlsocket="no"
4142    ])
4143  fi
4144  #
4145  if test "$tst_compi_ioctlsocket" = "yes"; then
4146    AC_MSG_CHECKING([if ioctlsocket usage allowed])
4147    if test "x$curl_disallow_ioctlsocket" != "xyes"; then
4148      AC_MSG_RESULT([yes])
4149      tst_allow_ioctlsocket="yes"
4150    else
4151      AC_MSG_RESULT([no])
4152      tst_allow_ioctlsocket="no"
4153    fi
4154  fi
4155  #
4156  AC_MSG_CHECKING([if ioctlsocket might be used])
4157  if test "$tst_links_ioctlsocket" = "yes" &&
4158     test "$tst_proto_ioctlsocket" = "yes" &&
4159     test "$tst_compi_ioctlsocket" = "yes" &&
4160     test "$tst_allow_ioctlsocket" = "yes"; then
4161    AC_MSG_RESULT([yes])
4162    AC_DEFINE_UNQUOTED(HAVE_IOCTLSOCKET, 1,
4163      [Define to 1 if you have the ioctlsocket function.])
4164    ac_cv_func_ioctlsocket="yes"
4165    CURL_CHECK_FUNC_IOCTLSOCKET_FIONBIO
4166  else
4167    AC_MSG_RESULT([no])
4168    ac_cv_func_ioctlsocket="no"
4169  fi
4170])
4171
4172
4173dnl CURL_CHECK_FUNC_IOCTLSOCKET_FIONBIO
4174dnl -------------------------------------------------
4175dnl Verify if ioctlsocket with the FIONBIO command is
4176dnl available, can be compiled, and seems to work. If
4177dnl all of these are true, then HAVE_IOCTLSOCKET_FIONBIO
4178dnl will be defined.
4179
4180AC_DEFUN([CURL_CHECK_FUNC_IOCTLSOCKET_FIONBIO], [
4181  #
4182  tst_compi_ioctlsocket_fionbio="unknown"
4183  tst_allow_ioctlsocket_fionbio="unknown"
4184  #
4185  if test "$ac_cv_func_ioctlsocket" = "yes"; then
4186    AC_MSG_CHECKING([if ioctlsocket FIONBIO is compilable])
4187    AC_COMPILE_IFELSE([
4188      AC_LANG_PROGRAM([[
4189        $curl_includes_winsock2
4190      ]],[[
4191        int flags = 0;
4192        if(0 != ioctlsocket(0, FIONBIO, &flags))
4193          return 1;
4194      ]])
4195    ],[
4196      AC_MSG_RESULT([yes])
4197      tst_compi_ioctlsocket_fionbio="yes"
4198    ],[
4199      AC_MSG_RESULT([no])
4200      tst_compi_ioctlsocket_fionbio="no"
4201    ])
4202  fi
4203  #
4204  if test "$tst_compi_ioctlsocket_fionbio" = "yes"; then
4205    AC_MSG_CHECKING([if ioctlsocket FIONBIO usage allowed])
4206    if test "x$curl_disallow_ioctlsocket_fionbio" != "xyes"; then
4207      AC_MSG_RESULT([yes])
4208      tst_allow_ioctlsocket_fionbio="yes"
4209    else
4210      AC_MSG_RESULT([no])
4211      tst_allow_ioctlsocket_fionbio="no"
4212    fi
4213  fi
4214  #
4215  AC_MSG_CHECKING([if ioctlsocket FIONBIO might be used])
4216  if test "$tst_compi_ioctlsocket_fionbio" = "yes" &&
4217     test "$tst_allow_ioctlsocket_fionbio" = "yes"; then
4218    AC_MSG_RESULT([yes])
4219    AC_DEFINE_UNQUOTED(HAVE_IOCTLSOCKET_FIONBIO, 1,
4220      [Define to 1 if you have a working ioctlsocket FIONBIO function.])
4221    ac_cv_func_ioctlsocket_fionbio="yes"
4222  else
4223    AC_MSG_RESULT([no])
4224    ac_cv_func_ioctlsocket_fionbio="no"
4225  fi
4226])
4227
4228
4229dnl CURL_CHECK_FUNC_IOCTLSOCKET_CAMEL
4230dnl -------------------------------------------------
4231dnl Verify if IoctlSocket is available, prototyped, and
4232dnl can be compiled. If all of these are true, and
4233dnl usage has not been previously disallowed with
4234dnl shell variable curl_disallow_ioctlsocket_camel,
4235dnl then HAVE_IOCTLSOCKET_CAMEL will be defined.
4236
4237AC_DEFUN([CURL_CHECK_FUNC_IOCTLSOCKET_CAMEL], [
4238  AC_REQUIRE([CURL_INCLUDES_STROPTS])dnl
4239  #
4240  tst_links_ioctlsocket_camel="unknown"
4241  tst_proto_ioctlsocket_camel="unknown"
4242  tst_compi_ioctlsocket_camel="unknown"
4243  tst_allow_ioctlsocket_camel="unknown"
4244  #
4245  AC_MSG_CHECKING([if IoctlSocket can be linked])
4246  AC_LINK_IFELSE([
4247    AC_LANG_FUNC_LINK_TRY([IoctlSocket])
4248  ],[
4249    AC_MSG_RESULT([yes])
4250    tst_links_ioctlsocket_camel="yes"
4251  ],[
4252    AC_MSG_RESULT([no])
4253    tst_links_ioctlsocket_camel="no"
4254  ])
4255  #
4256  if test "$tst_links_ioctlsocket_camel" = "yes"; then
4257    AC_MSG_CHECKING([if IoctlSocket is prototyped])
4258    AC_EGREP_CPP([IoctlSocket],[
4259      $curl_includes_stropts
4260    ],[
4261      AC_MSG_RESULT([yes])
4262      tst_proto_ioctlsocket_camel="yes"
4263    ],[
4264      AC_MSG_RESULT([no])
4265      tst_proto_ioctlsocket_camel="no"
4266    ])
4267  fi
4268  #
4269  if test "$tst_proto_ioctlsocket_camel" = "yes"; then
4270    AC_MSG_CHECKING([if IoctlSocket is compilable])
4271    AC_COMPILE_IFELSE([
4272      AC_LANG_PROGRAM([[
4273        $curl_includes_stropts
4274      ]],[[
4275        if(0 != IoctlSocket(0, 0, 0))
4276          return 1;
4277      ]])
4278    ],[
4279      AC_MSG_RESULT([yes])
4280      tst_compi_ioctlsocket_camel="yes"
4281    ],[
4282      AC_MSG_RESULT([no])
4283      tst_compi_ioctlsocket_camel="no"
4284    ])
4285  fi
4286  #
4287  if test "$tst_compi_ioctlsocket_camel" = "yes"; then
4288    AC_MSG_CHECKING([if IoctlSocket usage allowed])
4289    if test "x$curl_disallow_ioctlsocket_camel" != "xyes"; then
4290      AC_MSG_RESULT([yes])
4291      tst_allow_ioctlsocket_camel="yes"
4292    else
4293      AC_MSG_RESULT([no])
4294      tst_allow_ioctlsocket_camel="no"
4295    fi
4296  fi
4297  #
4298  AC_MSG_CHECKING([if IoctlSocket might be used])
4299  if test "$tst_links_ioctlsocket_camel" = "yes" &&
4300     test "$tst_proto_ioctlsocket_camel" = "yes" &&
4301     test "$tst_compi_ioctlsocket_camel" = "yes" &&
4302     test "$tst_allow_ioctlsocket_camel" = "yes"; then
4303    AC_MSG_RESULT([yes])
4304    AC_DEFINE_UNQUOTED(HAVE_IOCTLSOCKET_CAMEL, 1,
4305      [Define to 1 if you have the IoctlSocket camel case function.])
4306    ac_cv_func_ioctlsocket_camel="yes"
4307    CURL_CHECK_FUNC_IOCTLSOCKET_CAMEL_FIONBIO
4308  else
4309    AC_MSG_RESULT([no])
4310    ac_cv_func_ioctlsocket_camel="no"
4311  fi
4312])
4313
4314
4315dnl CURL_CHECK_FUNC_IOCTLSOCKET_CAMEL_FIONBIO
4316dnl -------------------------------------------------
4317dnl Verify if IoctlSocket with FIONBIO command is available,
4318dnl can be compiled, and seems to work. If all of these are
4319dnl true, then HAVE_IOCTLSOCKET_CAMEL_FIONBIO will be defined.
4320
4321AC_DEFUN([CURL_CHECK_FUNC_IOCTLSOCKET_CAMEL_FIONBIO], [
4322  #
4323  tst_compi_ioctlsocket_camel_fionbio="unknown"
4324  tst_allow_ioctlsocket_camel_fionbio="unknown"
4325  #
4326  if test "$ac_cv_func_ioctlsocket_camel" = "yes"; then
4327    AC_MSG_CHECKING([if IoctlSocket FIONBIO is compilable])
4328    AC_COMPILE_IFELSE([
4329      AC_LANG_PROGRAM([[
4330        $curl_includes_stropts
4331      ]],[[
4332        long flags = 0;
4333        if(0 != ioctlsocket(0, FIONBIO, &flags))
4334          return 1;
4335      ]])
4336    ],[
4337      AC_MSG_RESULT([yes])
4338      tst_compi_ioctlsocket_camel_fionbio="yes"
4339    ],[
4340      AC_MSG_RESULT([no])
4341      tst_compi_ioctlsocket_camel_fionbio="no"
4342    ])
4343  fi
4344  #
4345  if test "$tst_compi_ioctlsocket_camel_fionbio" = "yes"; then
4346    AC_MSG_CHECKING([if IoctlSocket FIONBIO usage allowed])
4347    if test "x$curl_disallow_ioctlsocket_camel_fionbio" != "xyes"; then
4348      AC_MSG_RESULT([yes])
4349      tst_allow_ioctlsocket_camel_fionbio="yes"
4350    else
4351      AC_MSG_RESULT([no])
4352      tst_allow_ioctlsocket_camel_fionbio="no"
4353    fi
4354  fi
4355  #
4356  AC_MSG_CHECKING([if IoctlSocket FIONBIO might be used])
4357  if test "$tst_compi_ioctlsocket_camel_fionbio" = "yes" &&
4358     test "$tst_allow_ioctlsocket_camel_fionbio" = "yes"; then
4359    AC_MSG_RESULT([yes])
4360    AC_DEFINE_UNQUOTED(HAVE_IOCTLSOCKET_CAMEL_FIONBIO, 1,
4361      [Define to 1 if you have a working IoctlSocket camel case FIONBIO function.])
4362    ac_cv_func_ioctlsocket_camel_fionbio="yes"
4363  else
4364    AC_MSG_RESULT([no])
4365    ac_cv_func_ioctlsocket_camel_fionbio="no"
4366  fi
4367])
4368
4369
4370dnl CURL_CHECK_FUNC_LISTXATTR
4371dnl -------------------------------------------------
4372dnl Verify if listxattr is available, prototyped, and
4373dnl can be compiled. If all of these are true, and
4374dnl usage has not been previously disallowed with
4375dnl shell variable curl_disallow_listxattr, then
4376dnl HAVE_LISTXATTR will be defined.
4377
4378AC_DEFUN([CURL_CHECK_FUNC_LISTXATTR], [
4379  AC_REQUIRE([CURL_INCLUDES_SYS_XATTR])dnl
4380  #
4381  tst_links_listxattr="unknown"
4382  tst_proto_listxattr="unknown"
4383  tst_compi_listxattr="unknown"
4384  tst_allow_listxattr="unknown"
4385  tst_nargs_listxattr="unknown"
4386  #
4387  AC_MSG_CHECKING([if listxattr can be linked])
4388  AC_LINK_IFELSE([
4389    AC_LANG_FUNC_LINK_TRY([listxattr])
4390  ],[
4391    AC_MSG_RESULT([yes])
4392    tst_links_listxattr="yes"
4393  ],[
4394    AC_MSG_RESULT([no])
4395    tst_links_listxattr="no"
4396  ])
4397  #
4398  if test "$tst_links_listxattr" = "yes"; then
4399    AC_MSG_CHECKING([if listxattr is prototyped])
4400    AC_EGREP_CPP([listxattr],[
4401      $curl_includes_sys_xattr
4402    ],[
4403      AC_MSG_RESULT([yes])
4404      tst_proto_listxattr="yes"
4405    ],[
4406      AC_MSG_RESULT([no])
4407      tst_proto_listxattr="no"
4408    ])
4409  fi
4410  #
4411  if test "$tst_proto_listxattr" = "yes"; then
4412    if test "$tst_nargs_listxattr" = "unknown"; then
4413      AC_MSG_CHECKING([if listxattr takes 3 args.])
4414      AC_COMPILE_IFELSE([
4415        AC_LANG_PROGRAM([[
4416          $curl_includes_sys_xattr
4417        ]],[[
4418          if(0 != listxattr(0, 0, 0))
4419            return 1;
4420        ]])
4421      ],[
4422        AC_MSG_RESULT([yes])
4423        tst_compi_listxattr="yes"
4424        tst_nargs_listxattr="3"
4425      ],[
4426        AC_MSG_RESULT([no])
4427        tst_compi_listxattr="no"
4428      ])
4429    fi
4430    if test "$tst_nargs_listxattr" = "unknown"; then
4431      AC_MSG_CHECKING([if listxattr takes 4 args.])
4432      AC_COMPILE_IFELSE([
4433        AC_LANG_PROGRAM([[
4434          $curl_includes_sys_xattr
4435        ]],[[
4436          if(0 != listxattr(0, 0, 0, 0))
4437            return 1;
4438        ]])
4439      ],[
4440        AC_MSG_RESULT([yes])
4441        tst_compi_listxattr="yes"
4442        tst_nargs_listxattr="4"
4443      ],[
4444        AC_MSG_RESULT([no])
4445        tst_compi_listxattr="no"
4446      ])
4447    fi
4448    AC_MSG_CHECKING([if listxattr is compilable])
4449    if test "$tst_compi_listxattr" = "yes"; then
4450      AC_MSG_RESULT([yes])
4451    else
4452      AC_MSG_RESULT([no])
4453    fi
4454  fi
4455  #
4456  if test "$tst_compi_listxattr" = "yes"; then
4457    AC_MSG_CHECKING([if listxattr usage allowed])
4458    if test "x$curl_disallow_listxattr" != "xyes"; then
4459      AC_MSG_RESULT([yes])
4460      tst_allow_listxattr="yes"
4461    else
4462      AC_MSG_RESULT([no])
4463      tst_allow_listxattr="no"
4464    fi
4465  fi
4466  #
4467  AC_MSG_CHECKING([if listxattr might be used])
4468  if test "$tst_links_listxattr" = "yes" &&
4469     test "$tst_proto_listxattr" = "yes" &&
4470     test "$tst_compi_listxattr" = "yes" &&
4471     test "$tst_allow_listxattr" = "yes"; then
4472    AC_MSG_RESULT([yes])
4473    AC_DEFINE_UNQUOTED(HAVE_LISTXATTR, 1,
4474      [Define to 1 if you have the listxattr function.])
4475    dnl AC_DEFINE_UNQUOTED(LISTXATTR_ARGS, $tst_nargs_listxattr,
4476    dnl   [Specifies the number of arguments to listxattr])
4477    #
4478    if test "$tst_nargs_listxattr" -eq "3"; then
4479      AC_DEFINE(HAVE_LISTXATTR_3, 1, [listxattr() takes 3 args])
4480    elif test "$tst_nargs_listxattr" -eq "4"; then
4481      AC_DEFINE(HAVE_LISTXATTR_4, 1, [listxattr() takes 4 args])
4482    fi
4483    #
4484    ac_cv_func_listxattr="yes"
4485  else
4486    AC_MSG_RESULT([no])
4487    ac_cv_func_listxattr="no"
4488  fi
4489])
4490
4491
4492dnl CURL_CHECK_FUNC_LOCALTIME_R
4493dnl -------------------------------------------------
4494dnl Verify if localtime_r is available, prototyped, can
4495dnl be compiled and seems to work. If all of these are
4496dnl true, and usage has not been previously disallowed
4497dnl with shell variable curl_disallow_localtime_r, then
4498dnl HAVE_LOCALTIME_R will be defined.
4499
4500AC_DEFUN([CURL_CHECK_FUNC_LOCALTIME_R], [
4501  AC_REQUIRE([CURL_INCLUDES_STDLIB])dnl
4502  AC_REQUIRE([CURL_INCLUDES_TIME])dnl
4503  #
4504  tst_links_localtime_r="unknown"
4505  tst_proto_localtime_r="unknown"
4506  tst_compi_localtime_r="unknown"
4507  tst_works_localtime_r="unknown"
4508  tst_allow_localtime_r="unknown"
4509  #
4510  AC_MSG_CHECKING([if localtime_r can be linked])
4511  AC_LINK_IFELSE([
4512    AC_LANG_FUNC_LINK_TRY([localtime_r])
4513  ],[
4514    AC_MSG_RESULT([yes])
4515    tst_links_localtime_r="yes"
4516  ],[
4517    AC_MSG_RESULT([no])
4518    tst_links_localtime_r="no"
4519  ])
4520  #
4521  if test "$tst_links_localtime_r" = "yes"; then
4522    AC_MSG_CHECKING([if localtime_r is prototyped])
4523    AC_EGREP_CPP([localtime_r],[
4524      $curl_includes_time
4525    ],[
4526      AC_MSG_RESULT([yes])
4527      tst_proto_localtime_r="yes"
4528    ],[
4529      AC_MSG_RESULT([no])
4530      tst_proto_localtime_r="no"
4531    ])
4532  fi
4533  #
4534  if test "$tst_proto_localtime_r" = "yes"; then
4535    AC_MSG_CHECKING([if localtime_r is compilable])
4536    AC_COMPILE_IFELSE([
4537      AC_LANG_PROGRAM([[
4538        $curl_includes_time
4539      ]],[[
4540        if(0 != localtime_r(0, 0))
4541          return 1;
4542      ]])
4543    ],[
4544      AC_MSG_RESULT([yes])
4545      tst_compi_localtime_r="yes"
4546    ],[
4547      AC_MSG_RESULT([no])
4548      tst_compi_localtime_r="no"
4549    ])
4550  fi
4551  #
4552  dnl only do runtime verification when not cross-compiling
4553  if test "x$cross_compiling" != "xyes" &&
4554    test "$tst_compi_localtime_r" = "yes"; then
4555    AC_MSG_CHECKING([if localtime_r seems to work])
4556    AC_RUN_IFELSE([
4557      AC_LANG_PROGRAM([[
4558        $curl_includes_stdlib
4559        $curl_includes_time
4560      ]],[[
4561        time_t clock = 1170352587;
4562        struct tm *tmp = 0;
4563        struct tm result;
4564        tmp = localtime_r(&clock, &result);
4565        if(tmp)
4566          exit(0);
4567        else
4568          exit(1);
4569      ]])
4570    ],[
4571      AC_MSG_RESULT([yes])
4572      tst_works_localtime_r="yes"
4573    ],[
4574      AC_MSG_RESULT([no])
4575      tst_works_localtime_r="no"
4576    ])
4577  fi
4578  #
4579  if test "$tst_compi_localtime_r" = "yes" &&
4580    test "$tst_works_localtime_r" != "no"; then
4581    AC_MSG_CHECKING([if localtime_r usage allowed])
4582    if test "x$curl_disallow_localtime_r" != "xyes"; then
4583      AC_MSG_RESULT([yes])
4584      tst_allow_localtime_r="yes"
4585    else
4586      AC_MSG_RESULT([no])
4587      tst_allow_localtime_r="no"
4588    fi
4589  fi
4590  #
4591  AC_MSG_CHECKING([if localtime_r might be used])
4592  if test "$tst_links_localtime_r" = "yes" &&
4593     test "$tst_proto_localtime_r" = "yes" &&
4594     test "$tst_compi_localtime_r" = "yes" &&
4595     test "$tst_allow_localtime_r" = "yes" &&
4596     test "$tst_works_localtime_r" != "no"; then
4597    AC_MSG_RESULT([yes])
4598    AC_DEFINE_UNQUOTED(HAVE_LOCALTIME_R, 1,
4599      [Define to 1 if you have a working localtime_r function.])
4600    ac_cv_func_localtime_r="yes"
4601  else
4602    AC_MSG_RESULT([no])
4603    ac_cv_func_localtime_r="no"
4604  fi
4605])
4606
4607
4608dnl CURL_CHECK_FUNC_MEMRCHR
4609dnl -------------------------------------------------
4610dnl Verify if memrchr is available, prototyped, and
4611dnl can be compiled. If all of these are true, and
4612dnl usage has not been previously disallowed with
4613dnl shell variable curl_disallow_memrchr, then
4614dnl HAVE_MEMRCHR will be defined.
4615
4616AC_DEFUN([CURL_CHECK_FUNC_MEMRCHR], [
4617  AC_REQUIRE([CURL_INCLUDES_STRING])dnl
4618  #
4619  tst_links_memrchr="unknown"
4620  tst_macro_memrchr="unknown"
4621  tst_proto_memrchr="unknown"
4622  tst_compi_memrchr="unknown"
4623  tst_allow_memrchr="unknown"
4624  #
4625  AC_MSG_CHECKING([if memrchr can be linked])
4626  AC_LINK_IFELSE([
4627    AC_LANG_FUNC_LINK_TRY([memrchr])
4628  ],[
4629    AC_MSG_RESULT([yes])
4630    tst_links_memrchr="yes"
4631  ],[
4632    AC_MSG_RESULT([no])
4633    tst_links_memrchr="no"
4634  ])
4635  #
4636  if test "$tst_links_memrchr" = "no"; then
4637    AC_MSG_CHECKING([if memrchr seems a macro])
4638    AC_LINK_IFELSE([
4639      AC_LANG_PROGRAM([[
4640        $curl_includes_string
4641      ]],[[
4642        if(0 != memrchr(0, 0, 0))
4643          return 1;
4644      ]])
4645    ],[
4646      AC_MSG_RESULT([yes])
4647      tst_macro_memrchr="yes"
4648    ],[
4649      AC_MSG_RESULT([no])
4650      tst_macro_memrchr="no"
4651    ])
4652  fi
4653  #
4654  if test "$tst_links_memrchr" = "yes"; then
4655    AC_MSG_CHECKING([if memrchr is prototyped])
4656    AC_EGREP_CPP([memrchr],[
4657      $curl_includes_string
4658    ],[
4659      AC_MSG_RESULT([yes])
4660      tst_proto_memrchr="yes"
4661    ],[
4662      AC_MSG_RESULT([no])
4663      tst_proto_memrchr="no"
4664    ])
4665  fi
4666  #
4667  if test "$tst_proto_memrchr" = "yes" ||
4668     test "$tst_macro_memrchr" = "yes"; then
4669    AC_MSG_CHECKING([if memrchr is compilable])
4670    AC_COMPILE_IFELSE([
4671      AC_LANG_PROGRAM([[
4672        $curl_includes_string
4673      ]],[[
4674        if(0 != memrchr(0, 0, 0))
4675          return 1;
4676      ]])
4677    ],[
4678      AC_MSG_RESULT([yes])
4679      tst_compi_memrchr="yes"
4680    ],[
4681      AC_MSG_RESULT([no])
4682      tst_compi_memrchr="no"
4683    ])
4684  fi
4685  #
4686  if test "$tst_compi_memrchr" = "yes"; then
4687    AC_MSG_CHECKING([if memrchr usage allowed])
4688    if test "x$curl_disallow_memrchr" != "xyes"; then
4689      AC_MSG_RESULT([yes])
4690      tst_allow_memrchr="yes"
4691    else
4692      AC_MSG_RESULT([no])
4693      tst_allow_memrchr="no"
4694    fi
4695  fi
4696  #
4697  AC_MSG_CHECKING([if memrchr might be used])
4698  if (test "$tst_proto_memrchr" = "yes" ||
4699      test "$tst_macro_memrchr" = "yes") &&
4700     test "$tst_compi_memrchr" = "yes" &&
4701     test "$tst_allow_memrchr" = "yes"; then
4702    AC_MSG_RESULT([yes])
4703    AC_DEFINE_UNQUOTED(HAVE_MEMRCHR, 1,
4704      [Define to 1 if you have the memrchr function or macro.])
4705    ac_cv_func_memrchr="yes"
4706  else
4707    AC_MSG_RESULT([no])
4708    ac_cv_func_memrchr="no"
4709  fi
4710])
4711
4712
4713dnl CURL_CHECK_FUNC_POLL
4714dnl -------------------------------------------------
4715dnl Verify if poll is available, prototyped, can
4716dnl be compiled and seems to work. If all of these are
4717dnl true, and usage has not been previously disallowed
4718dnl with shell variable curl_disallow_poll, then
4719dnl HAVE_POLL will be defined.
4720
4721AC_DEFUN([CURL_CHECK_FUNC_POLL], [
4722  AC_REQUIRE([CURL_INCLUDES_STDLIB])dnl
4723  AC_REQUIRE([CURL_INCLUDES_POLL])dnl
4724  #
4725  tst_links_poll="unknown"
4726  tst_proto_poll="unknown"
4727  tst_compi_poll="unknown"
4728  tst_works_poll="unknown"
4729  tst_allow_poll="unknown"
4730  #
4731  case $host_os in
4732    darwin*|interix*)
4733      dnl poll() does not work on these platforms
4734      dnl Interix: "does provide poll(), but the implementing developer must
4735      dnl have been in a bad mood, because poll() only works on the /proc
4736      dnl filesystem here"
4737      curl_disallow_poll="yes"
4738      ;;
4739  esac
4740  #
4741  AC_MSG_CHECKING([if poll can be linked])
4742  AC_LINK_IFELSE([
4743    AC_LANG_PROGRAM([[
4744      $curl_includes_poll
4745    ]],[[
4746      if(0 != poll(0, 0, 0))
4747        return 1;
4748    ]])
4749  ],[
4750    AC_MSG_RESULT([yes])
4751    tst_links_poll="yes"
4752  ],[
4753    AC_MSG_RESULT([no])
4754    tst_links_poll="no"
4755  ])
4756  #
4757  if test "$tst_links_poll" = "yes"; then
4758    AC_MSG_CHECKING([if poll is prototyped])
4759    AC_EGREP_CPP([poll],[
4760      $curl_includes_poll
4761    ],[
4762      AC_MSG_RESULT([yes])
4763      tst_proto_poll="yes"
4764    ],[
4765      AC_MSG_RESULT([no])
4766      tst_proto_poll="no"
4767    ])
4768  fi
4769  #
4770  if test "$tst_proto_poll" = "yes"; then
4771    AC_MSG_CHECKING([if poll is compilable])
4772    AC_COMPILE_IFELSE([
4773      AC_LANG_PROGRAM([[
4774        $curl_includes_poll
4775      ]],[[
4776        if(0 != poll(0, 0, 0))
4777          return 1;
4778      ]])
4779    ],[
4780      AC_MSG_RESULT([yes])
4781      tst_compi_poll="yes"
4782    ],[
4783      AC_MSG_RESULT([no])
4784      tst_compi_poll="no"
4785    ])
4786  fi
4787  #
4788  dnl only do runtime verification when not cross-compiling
4789  if test "x$cross_compiling" != "xyes" &&
4790    test "$tst_compi_poll" = "yes"; then
4791    AC_MSG_CHECKING([if poll seems to work])
4792    AC_RUN_IFELSE([
4793      AC_LANG_PROGRAM([[
4794        $curl_includes_stdlib
4795        $curl_includes_poll
4796      ]],[[
4797        if(0 != poll(0, 0, 10))
4798          exit(1); /* fail */
4799        else
4800          exit(0);
4801      ]])
4802    ],[
4803      AC_MSG_RESULT([yes])
4804      tst_works_poll="yes"
4805    ],[
4806      AC_MSG_RESULT([no])
4807      tst_works_poll="no"
4808    ])
4809  fi
4810  #
4811  if test "$tst_compi_poll" = "yes" &&
4812    test "$tst_works_poll" != "no"; then
4813    AC_MSG_CHECKING([if poll usage allowed])
4814    if test "x$curl_disallow_poll" != "xyes"; then
4815      AC_MSG_RESULT([yes])
4816      tst_allow_poll="yes"
4817    else
4818      AC_MSG_RESULT([no])
4819      tst_allow_poll="no"
4820    fi
4821  fi
4822  #
4823  AC_MSG_CHECKING([if poll might be used])
4824  if test "$tst_links_poll" = "yes" &&
4825     test "$tst_proto_poll" = "yes" &&
4826     test "$tst_compi_poll" = "yes" &&
4827     test "$tst_allow_poll" = "yes" &&
4828     test "$tst_works_poll" != "no"; then
4829    AC_MSG_RESULT([yes])
4830    AC_DEFINE_UNQUOTED(HAVE_POLL, 1,
4831      [Define to 1 if you have a working poll function.])
4832    AC_DEFINE_UNQUOTED(HAVE_POLL_FINE, 1,
4833      [If you have a fine poll])
4834    ac_cv_func_poll="yes"
4835  else
4836    AC_MSG_RESULT([no])
4837    ac_cv_func_poll="no"
4838  fi
4839])
4840
4841
4842dnl CURL_CHECK_FUNC_REMOVEXATTR
4843dnl -------------------------------------------------
4844dnl Verify if removexattr is available, prototyped, and
4845dnl can be compiled. If all of these are true, and
4846dnl usage has not been previously disallowed with
4847dnl shell variable curl_disallow_removexattr, then
4848dnl HAVE_REMOVEXATTR will be defined.
4849
4850AC_DEFUN([CURL_CHECK_FUNC_REMOVEXATTR], [
4851  AC_REQUIRE([CURL_INCLUDES_SYS_XATTR])dnl
4852  #
4853  tst_links_removexattr="unknown"
4854  tst_proto_removexattr="unknown"
4855  tst_compi_removexattr="unknown"
4856  tst_allow_removexattr="unknown"
4857  tst_nargs_removexattr="unknown"
4858  #
4859  AC_MSG_CHECKING([if removexattr can be linked])
4860  AC_LINK_IFELSE([
4861    AC_LANG_FUNC_LINK_TRY([removexattr])
4862  ],[
4863    AC_MSG_RESULT([yes])
4864    tst_links_removexattr="yes"
4865  ],[
4866    AC_MSG_RESULT([no])
4867    tst_links_removexattr="no"
4868  ])
4869  #
4870  if test "$tst_links_removexattr" = "yes"; then
4871    AC_MSG_CHECKING([if removexattr is prototyped])
4872    AC_EGREP_CPP([removexattr],[
4873      $curl_includes_sys_xattr
4874    ],[
4875      AC_MSG_RESULT([yes])
4876      tst_proto_removexattr="yes"
4877    ],[
4878      AC_MSG_RESULT([no])
4879      tst_proto_removexattr="no"
4880    ])
4881  fi
4882  #
4883  if test "$tst_proto_removexattr" = "yes"; then
4884    if test "$tst_nargs_removexattr" = "unknown"; then
4885      AC_MSG_CHECKING([if removexattr takes 2 args.])
4886      AC_COMPILE_IFELSE([
4887        AC_LANG_PROGRAM([[
4888          $curl_includes_sys_xattr
4889        ]],[[
4890          if(0 != removexattr(0, 0))
4891            return 1;
4892        ]])
4893      ],[
4894        AC_MSG_RESULT([yes])
4895        tst_compi_removexattr="yes"
4896        tst_nargs_removexattr="2"
4897      ],[
4898        AC_MSG_RESULT([no])
4899        tst_compi_removexattr="no"
4900      ])
4901    fi
4902    if test "$tst_nargs_removexattr" = "unknown"; then
4903      AC_MSG_CHECKING([if removexattr takes 3 args.])
4904      AC_COMPILE_IFELSE([
4905        AC_LANG_PROGRAM([[
4906          $curl_includes_sys_xattr
4907        ]],[[
4908          if(0 != removexattr(0, 0, 0))
4909            return 1;
4910        ]])
4911      ],[
4912        AC_MSG_RESULT([yes])
4913        tst_compi_removexattr="yes"
4914        tst_nargs_removexattr="3"
4915      ],[
4916        AC_MSG_RESULT([no])
4917        tst_compi_removexattr="no"
4918      ])
4919    fi
4920    AC_MSG_CHECKING([if removexattr is compilable])
4921    if test "$tst_compi_removexattr" = "yes"; then
4922      AC_MSG_RESULT([yes])
4923    else
4924      AC_MSG_RESULT([no])
4925    fi
4926  fi
4927  #
4928  if test "$tst_compi_removexattr" = "yes"; then
4929    AC_MSG_CHECKING([if removexattr usage allowed])
4930    if test "x$curl_disallow_removexattr" != "xyes"; then
4931      AC_MSG_RESULT([yes])
4932      tst_allow_removexattr="yes"
4933    else
4934      AC_MSG_RESULT([no])
4935      tst_allow_removexattr="no"
4936    fi
4937  fi
4938  #
4939  AC_MSG_CHECKING([if removexattr might be used])
4940  if test "$tst_links_removexattr" = "yes" &&
4941     test "$tst_proto_removexattr" = "yes" &&
4942     test "$tst_compi_removexattr" = "yes" &&
4943     test "$tst_allow_removexattr" = "yes"; then
4944    AC_MSG_RESULT([yes])
4945    AC_DEFINE_UNQUOTED(HAVE_REMOVEXATTR, 1,
4946      [Define to 1 if you have the removexattr function.])
4947    dnl AC_DEFINE_UNQUOTED(REMOVEXATTR_ARGS, $tst_nargs_removexattr,
4948    dnl   [Specifies the number of arguments to removexattr])
4949    #
4950    if test "$tst_nargs_removexattr" -eq "2"; then
4951      AC_DEFINE(HAVE_REMOVEXATTR_2, 1, [removexattr() takes 2 args])
4952    elif test "$tst_nargs_removexattr" -eq "3"; then
4953      AC_DEFINE(HAVE_REMOVEXATTR_3, 1, [removexattr() takes 3 args])
4954    fi
4955    #
4956    ac_cv_func_removexattr="yes"
4957  else
4958    AC_MSG_RESULT([no])
4959    ac_cv_func_removexattr="no"
4960  fi
4961])
4962
4963
4964dnl CURL_CHECK_FUNC_SETSOCKOPT
4965dnl -------------------------------------------------
4966dnl Verify if setsockopt is available, prototyped, and
4967dnl can be compiled. If all of these are true, and
4968dnl usage has not been previously disallowed with
4969dnl shell variable curl_disallow_setsockopt, then
4970dnl HAVE_SETSOCKOPT will be defined.
4971
4972AC_DEFUN([CURL_CHECK_FUNC_SETSOCKOPT], [
4973  AC_REQUIRE([CURL_INCLUDES_WINSOCK2])dnl
4974  AC_REQUIRE([CURL_INCLUDES_SYS_SOCKET])dnl
4975  #
4976  tst_links_setsockopt="unknown"
4977  tst_proto_setsockopt="unknown"
4978  tst_compi_setsockopt="unknown"
4979  tst_allow_setsockopt="unknown"
4980  #
4981  AC_MSG_CHECKING([if setsockopt can be linked])
4982  AC_LINK_IFELSE([
4983    AC_LANG_PROGRAM([[
4984      $curl_includes_winsock2
4985      $curl_includes_sys_socket
4986    ]],[[
4987      if(0 != setsockopt(0, 0, 0, 0, 0))
4988        return 1;
4989    ]])
4990  ],[
4991    AC_MSG_RESULT([yes])
4992    tst_links_setsockopt="yes"
4993  ],[
4994    AC_MSG_RESULT([no])
4995    tst_links_setsockopt="no"
4996  ])
4997  #
4998  if test "$tst_links_setsockopt" = "yes"; then
4999    AC_MSG_CHECKING([if setsockopt is prototyped])
5000    AC_EGREP_CPP([setsockopt],[
5001      $curl_includes_winsock2
5002      $curl_includes_sys_socket
5003    ],[
5004      AC_MSG_RESULT([yes])
5005      tst_proto_setsockopt="yes"
5006    ],[
5007      AC_MSG_RESULT([no])
5008      tst_proto_setsockopt="no"
5009    ])
5010  fi
5011  #
5012  if test "$tst_proto_setsockopt" = "yes"; then
5013    AC_MSG_CHECKING([if setsockopt is compilable])
5014    AC_COMPILE_IFELSE([
5015      AC_LANG_PROGRAM([[
5016        $curl_includes_winsock2
5017        $curl_includes_sys_socket
5018      ]],[[
5019        if(0 != setsockopt(0, 0, 0, 0, 0))
5020          return 1;
5021      ]])
5022    ],[
5023      AC_MSG_RESULT([yes])
5024      tst_compi_setsockopt="yes"
5025    ],[
5026      AC_MSG_RESULT([no])
5027      tst_compi_setsockopt="no"
5028    ])
5029  fi
5030  #
5031  if test "$tst_compi_setsockopt" = "yes"; then
5032    AC_MSG_CHECKING([if setsockopt usage allowed])
5033    if test "x$curl_disallow_setsockopt" != "xyes"; then
5034      AC_MSG_RESULT([yes])
5035      tst_allow_setsockopt="yes"
5036    else
5037      AC_MSG_RESULT([no])
5038      tst_allow_setsockopt="no"
5039    fi
5040  fi
5041  #
5042  AC_MSG_CHECKING([if setsockopt might be used])
5043  if test "$tst_links_setsockopt" = "yes" &&
5044     test "$tst_proto_setsockopt" = "yes" &&
5045     test "$tst_compi_setsockopt" = "yes" &&
5046     test "$tst_allow_setsockopt" = "yes"; then
5047    AC_MSG_RESULT([yes])
5048    AC_DEFINE_UNQUOTED(HAVE_SETSOCKOPT, 1,
5049      [Define to 1 if you have the setsockopt function.])
5050    ac_cv_func_setsockopt="yes"
5051    CURL_CHECK_FUNC_SETSOCKOPT_SO_NONBLOCK
5052  else
5053    AC_MSG_RESULT([no])
5054    ac_cv_func_setsockopt="no"
5055  fi
5056])
5057
5058
5059dnl CURL_CHECK_FUNC_SETSOCKOPT_SO_NONBLOCK
5060dnl -------------------------------------------------
5061dnl Verify if setsockopt with the SO_NONBLOCK command is
5062dnl available, can be compiled, and seems to work. If
5063dnl all of these are true, then HAVE_SETSOCKOPT_SO_NONBLOCK
5064dnl will be defined.
5065
5066AC_DEFUN([CURL_CHECK_FUNC_SETSOCKOPT_SO_NONBLOCK], [
5067  #
5068  tst_compi_setsockopt_so_nonblock="unknown"
5069  tst_allow_setsockopt_so_nonblock="unknown"
5070  #
5071  if test "$ac_cv_func_setsockopt" = "yes"; then
5072    AC_MSG_CHECKING([if setsockopt SO_NONBLOCK is compilable])
5073    AC_COMPILE_IFELSE([
5074      AC_LANG_PROGRAM([[
5075        $curl_includes_winsock2
5076        $curl_includes_sys_socket
5077      ]],[[
5078        if(0 != setsockopt(0, SOL_SOCKET, SO_NONBLOCK, 0, 0))
5079          return 1;
5080      ]])
5081    ],[
5082      AC_MSG_RESULT([yes])
5083      tst_compi_setsockopt_so_nonblock="yes"
5084    ],[
5085      AC_MSG_RESULT([no])
5086      tst_compi_setsockopt_so_nonblock="no"
5087    ])
5088  fi
5089  #
5090  if test "$tst_compi_setsockopt_so_nonblock" = "yes"; then
5091    AC_MSG_CHECKING([if setsockopt SO_NONBLOCK usage allowed])
5092    if test "x$curl_disallow_setsockopt_so_nonblock" != "xyes"; then
5093      AC_MSG_RESULT([yes])
5094      tst_allow_setsockopt_so_nonblock="yes"
5095    else
5096      AC_MSG_RESULT([no])
5097      tst_allow_setsockopt_so_nonblock="no"
5098    fi
5099  fi
5100  #
5101  AC_MSG_CHECKING([if setsockopt SO_NONBLOCK might be used])
5102  if test "$tst_compi_setsockopt_so_nonblock" = "yes" &&
5103     test "$tst_allow_setsockopt_so_nonblock" = "yes"; then
5104    AC_MSG_RESULT([yes])
5105    AC_DEFINE_UNQUOTED(HAVE_SETSOCKOPT_SO_NONBLOCK, 1,
5106      [Define to 1 if you have a working setsockopt SO_NONBLOCK function.])
5107    ac_cv_func_setsockopt_so_nonblock="yes"
5108  else
5109    AC_MSG_RESULT([no])
5110    ac_cv_func_setsockopt_so_nonblock="no"
5111  fi
5112])
5113
5114
5115dnl CURL_CHECK_FUNC_SETXATTR
5116dnl -------------------------------------------------
5117dnl Verify if setxattr is available, prototyped, and
5118dnl can be compiled. If all of these are true, and
5119dnl usage has not been previously disallowed with
5120dnl shell variable curl_disallow_setxattr, then
5121dnl HAVE_SETXATTR will be defined.
5122
5123AC_DEFUN([CURL_CHECK_FUNC_SETXATTR], [
5124  AC_REQUIRE([CURL_INCLUDES_SYS_XATTR])dnl
5125  #
5126  tst_links_setxattr="unknown"
5127  tst_proto_setxattr="unknown"
5128  tst_compi_setxattr="unknown"
5129  tst_allow_setxattr="unknown"
5130  tst_nargs_setxattr="unknown"
5131  #
5132  AC_MSG_CHECKING([if setxattr can be linked])
5133  AC_LINK_IFELSE([
5134    AC_LANG_FUNC_LINK_TRY([setxattr])
5135  ],[
5136    AC_MSG_RESULT([yes])
5137    tst_links_setxattr="yes"
5138  ],[
5139    AC_MSG_RESULT([no])
5140    tst_links_setxattr="no"
5141  ])
5142  #
5143  if test "$tst_links_setxattr" = "yes"; then
5144    AC_MSG_CHECKING([if setxattr is prototyped])
5145    AC_EGREP_CPP([setxattr],[
5146      $curl_includes_sys_xattr
5147    ],[
5148      AC_MSG_RESULT([yes])
5149      tst_proto_setxattr="yes"
5150    ],[
5151      AC_MSG_RESULT([no])
5152      tst_proto_setxattr="no"
5153    ])
5154  fi
5155  #
5156  if test "$tst_proto_setxattr" = "yes"; then
5157    if test "$tst_nargs_setxattr" = "unknown"; then
5158      AC_MSG_CHECKING([if setxattr takes 5 args.])
5159      AC_COMPILE_IFELSE([
5160        AC_LANG_PROGRAM([[
5161          $curl_includes_sys_xattr
5162        ]],[[
5163          if(0 != setxattr(0, 0, 0, 0, 0))
5164            return 1;
5165        ]])
5166      ],[
5167        AC_MSG_RESULT([yes])
5168        tst_compi_setxattr="yes"
5169        tst_nargs_setxattr="5"
5170      ],[
5171        AC_MSG_RESULT([no])
5172        tst_compi_setxattr="no"
5173      ])
5174    fi
5175    if test "$tst_nargs_setxattr" = "unknown"; then
5176      AC_MSG_CHECKING([if setxattr takes 6 args.])
5177      AC_COMPILE_IFELSE([
5178        AC_LANG_PROGRAM([[
5179          $curl_includes_sys_xattr
5180        ]],[[
5181          if(0 != setxattr(0, 0, 0, 0, 0, 0))
5182            return 1;
5183        ]])
5184      ],[
5185        AC_MSG_RESULT([yes])
5186        tst_compi_setxattr="yes"
5187        tst_nargs_setxattr="6"
5188      ],[
5189        AC_MSG_RESULT([no])
5190        tst_compi_setxattr="no"
5191      ])
5192    fi
5193    AC_MSG_CHECKING([if setxattr is compilable])
5194    if test "$tst_compi_setxattr" = "yes"; then
5195      AC_MSG_RESULT([yes])
5196    else
5197      AC_MSG_RESULT([no])
5198    fi
5199  fi
5200  #
5201  if test "$tst_compi_setxattr" = "yes"; then
5202    AC_MSG_CHECKING([if setxattr usage allowed])
5203    if test "x$curl_disallow_setxattr" != "xyes"; then
5204      AC_MSG_RESULT([yes])
5205      tst_allow_setxattr="yes"
5206    else
5207      AC_MSG_RESULT([no])
5208      tst_allow_setxattr="no"
5209    fi
5210  fi
5211  #
5212  AC_MSG_CHECKING([if setxattr might be used])
5213  if test "$tst_links_setxattr" = "yes" &&
5214     test "$tst_proto_setxattr" = "yes" &&
5215     test "$tst_compi_setxattr" = "yes" &&
5216     test "$tst_allow_setxattr" = "yes"; then
5217    AC_MSG_RESULT([yes])
5218    AC_DEFINE_UNQUOTED(HAVE_SETXATTR, 1,
5219      [Define to 1 if you have the setxattr function.])
5220    dnl AC_DEFINE_UNQUOTED(SETXATTR_ARGS, $tst_nargs_setxattr,
5221    dnl   [Specifies the number of arguments to setxattr])
5222    #
5223    if test "$tst_nargs_setxattr" -eq "5"; then
5224      AC_DEFINE(HAVE_SETXATTR_5, 1, [setxattr() takes 5 args])
5225    elif test "$tst_nargs_setxattr" -eq "6"; then
5226      AC_DEFINE(HAVE_SETXATTR_6, 1, [setxattr() takes 6 args])
5227    fi
5228    #
5229    ac_cv_func_setxattr="yes"
5230  else
5231    AC_MSG_RESULT([no])
5232    ac_cv_func_setxattr="no"
5233  fi
5234])
5235
5236
5237dnl CURL_CHECK_FUNC_SIGACTION
5238dnl -------------------------------------------------
5239dnl Verify if sigaction is available, prototyped, and
5240dnl can be compiled. If all of these are true, and
5241dnl usage has not been previously disallowed with
5242dnl shell variable curl_disallow_sigaction, then
5243dnl HAVE_SIGACTION will be defined.
5244
5245AC_DEFUN([CURL_CHECK_FUNC_SIGACTION], [
5246  AC_REQUIRE([CURL_INCLUDES_SIGNAL])dnl
5247  #
5248  tst_links_sigaction="unknown"
5249  tst_proto_sigaction="unknown"
5250  tst_compi_sigaction="unknown"
5251  tst_allow_sigaction="unknown"
5252  #
5253  AC_MSG_CHECKING([if sigaction can be linked])
5254  AC_LINK_IFELSE([
5255    AC_LANG_FUNC_LINK_TRY([sigaction])
5256  ],[
5257    AC_MSG_RESULT([yes])
5258    tst_links_sigaction="yes"
5259  ],[
5260    AC_MSG_RESULT([no])
5261    tst_links_sigaction="no"
5262  ])
5263  #
5264  if test "$tst_links_sigaction" = "yes"; then
5265    AC_MSG_CHECKING([if sigaction is prototyped])
5266    AC_EGREP_CPP([sigaction],[
5267      $curl_includes_signal
5268    ],[
5269      AC_MSG_RESULT([yes])
5270      tst_proto_sigaction="yes"
5271    ],[
5272      AC_MSG_RESULT([no])
5273      tst_proto_sigaction="no"
5274    ])
5275  fi
5276  #
5277  if test "$tst_proto_sigaction" = "yes"; then
5278    AC_MSG_CHECKING([if sigaction is compilable])
5279    AC_COMPILE_IFELSE([
5280      AC_LANG_PROGRAM([[
5281        $curl_includes_signal
5282      ]],[[
5283        if(0 != sigaction(0, 0, 0))
5284          return 1;
5285      ]])
5286    ],[
5287      AC_MSG_RESULT([yes])
5288      tst_compi_sigaction="yes"
5289    ],[
5290      AC_MSG_RESULT([no])
5291      tst_compi_sigaction="no"
5292    ])
5293  fi
5294  #
5295  if test "$tst_compi_sigaction" = "yes"; then
5296    AC_MSG_CHECKING([if sigaction usage allowed])
5297    if test "x$curl_disallow_sigaction" != "xyes"; then
5298      AC_MSG_RESULT([yes])
5299      tst_allow_sigaction="yes"
5300    else
5301      AC_MSG_RESULT([no])
5302      tst_allow_sigaction="no"
5303    fi
5304  fi
5305  #
5306  AC_MSG_CHECKING([if sigaction might be used])
5307  if test "$tst_links_sigaction" = "yes" &&
5308     test "$tst_proto_sigaction" = "yes" &&
5309     test "$tst_compi_sigaction" = "yes" &&
5310     test "$tst_allow_sigaction" = "yes"; then
5311    AC_MSG_RESULT([yes])
5312    AC_DEFINE_UNQUOTED(HAVE_SIGACTION, 1,
5313      [Define to 1 if you have the sigaction function.])
5314    ac_cv_func_sigaction="yes"
5315  else
5316    AC_MSG_RESULT([no])
5317    ac_cv_func_sigaction="no"
5318  fi
5319])
5320
5321
5322dnl CURL_CHECK_FUNC_SIGINTERRUPT
5323dnl -------------------------------------------------
5324dnl Verify if siginterrupt is available, prototyped, and
5325dnl can be compiled. If all of these are true, and
5326dnl usage has not been previously disallowed with
5327dnl shell variable curl_disallow_siginterrupt, then
5328dnl HAVE_SIGINTERRUPT will be defined.
5329
5330AC_DEFUN([CURL_CHECK_FUNC_SIGINTERRUPT], [
5331  AC_REQUIRE([CURL_INCLUDES_SIGNAL])dnl
5332  #
5333  tst_links_siginterrupt="unknown"
5334  tst_proto_siginterrupt="unknown"
5335  tst_compi_siginterrupt="unknown"
5336  tst_allow_siginterrupt="unknown"
5337  #
5338  AC_MSG_CHECKING([if siginterrupt can be linked])
5339  AC_LINK_IFELSE([
5340    AC_LANG_FUNC_LINK_TRY([siginterrupt])
5341  ],[
5342    AC_MSG_RESULT([yes])
5343    tst_links_siginterrupt="yes"
5344  ],[
5345    AC_MSG_RESULT([no])
5346    tst_links_siginterrupt="no"
5347  ])
5348  #
5349  if test "$tst_links_siginterrupt" = "yes"; then
5350    AC_MSG_CHECKING([if siginterrupt is prototyped])
5351    AC_EGREP_CPP([siginterrupt],[
5352      $curl_includes_signal
5353    ],[
5354      AC_MSG_RESULT([yes])
5355      tst_proto_siginterrupt="yes"
5356    ],[
5357      AC_MSG_RESULT([no])
5358      tst_proto_siginterrupt="no"
5359    ])
5360  fi
5361  #
5362  if test "$tst_proto_siginterrupt" = "yes"; then
5363    AC_MSG_CHECKING([if siginterrupt is compilable])
5364    AC_COMPILE_IFELSE([
5365      AC_LANG_PROGRAM([[
5366        $curl_includes_signal
5367      ]],[[
5368        if(0 != siginterrupt(0, 0))
5369          return 1;
5370      ]])
5371    ],[
5372      AC_MSG_RESULT([yes])
5373      tst_compi_siginterrupt="yes"
5374    ],[
5375      AC_MSG_RESULT([no])
5376      tst_compi_siginterrupt="no"
5377    ])
5378  fi
5379  #
5380  if test "$tst_compi_siginterrupt" = "yes"; then
5381    AC_MSG_CHECKING([if siginterrupt usage allowed])
5382    if test "x$curl_disallow_siginterrupt" != "xyes"; then
5383      AC_MSG_RESULT([yes])
5384      tst_allow_siginterrupt="yes"
5385    else
5386      AC_MSG_RESULT([no])
5387      tst_allow_siginterrupt="no"
5388    fi
5389  fi
5390  #
5391  AC_MSG_CHECKING([if siginterrupt might be used])
5392  if test "$tst_links_siginterrupt" = "yes" &&
5393     test "$tst_proto_siginterrupt" = "yes" &&
5394     test "$tst_compi_siginterrupt" = "yes" &&
5395     test "$tst_allow_siginterrupt" = "yes"; then
5396    AC_MSG_RESULT([yes])
5397    AC_DEFINE_UNQUOTED(HAVE_SIGINTERRUPT, 1,
5398      [Define to 1 if you have the siginterrupt function.])
5399    ac_cv_func_siginterrupt="yes"
5400  else
5401    AC_MSG_RESULT([no])
5402    ac_cv_func_siginterrupt="no"
5403  fi
5404])
5405
5406
5407dnl CURL_CHECK_FUNC_SIGNAL
5408dnl -------------------------------------------------
5409dnl Verify if signal is available, prototyped, and
5410dnl can be compiled. If all of these are true, and
5411dnl usage has not been previously disallowed with
5412dnl shell variable curl_disallow_signal, then
5413dnl HAVE_SIGNAL will be defined.
5414
5415AC_DEFUN([CURL_CHECK_FUNC_SIGNAL], [
5416  AC_REQUIRE([CURL_INCLUDES_SIGNAL])dnl
5417  #
5418  tst_links_signal="unknown"
5419  tst_proto_signal="unknown"
5420  tst_compi_signal="unknown"
5421  tst_allow_signal="unknown"
5422  #
5423  AC_MSG_CHECKING([if signal can be linked])
5424  AC_LINK_IFELSE([
5425    AC_LANG_FUNC_LINK_TRY([signal])
5426  ],[
5427    AC_MSG_RESULT([yes])
5428    tst_links_signal="yes"
5429  ],[
5430    AC_MSG_RESULT([no])
5431    tst_links_signal="no"
5432  ])
5433  #
5434  if test "$tst_links_signal" = "yes"; then
5435    AC_MSG_CHECKING([if signal is prototyped])
5436    AC_EGREP_CPP([signal],[
5437      $curl_includes_signal
5438    ],[
5439      AC_MSG_RESULT([yes])
5440      tst_proto_signal="yes"
5441    ],[
5442      AC_MSG_RESULT([no])
5443      tst_proto_signal="no"
5444    ])
5445  fi
5446  #
5447  if test "$tst_proto_signal" = "yes"; then
5448    AC_MSG_CHECKING([if signal is compilable])
5449    AC_COMPILE_IFELSE([
5450      AC_LANG_PROGRAM([[
5451        $curl_includes_signal
5452      ]],[[
5453        if(0 != signal(0, 0))
5454          return 1;
5455      ]])
5456    ],[
5457      AC_MSG_RESULT([yes])
5458      tst_compi_signal="yes"
5459    ],[
5460      AC_MSG_RESULT([no])
5461      tst_compi_signal="no"
5462    ])
5463  fi
5464  #
5465  if test "$tst_compi_signal" = "yes"; then
5466    AC_MSG_CHECKING([if signal usage allowed])
5467    if test "x$curl_disallow_signal" != "xyes"; then
5468      AC_MSG_RESULT([yes])
5469      tst_allow_signal="yes"
5470    else
5471      AC_MSG_RESULT([no])
5472      tst_allow_signal="no"
5473    fi
5474  fi
5475  #
5476  AC_MSG_CHECKING([if signal might be used])
5477  if test "$tst_links_signal" = "yes" &&
5478     test "$tst_proto_signal" = "yes" &&
5479     test "$tst_compi_signal" = "yes" &&
5480     test "$tst_allow_signal" = "yes"; then
5481    AC_MSG_RESULT([yes])
5482    AC_DEFINE_UNQUOTED(HAVE_SIGNAL, 1,
5483      [Define to 1 if you have the signal function.])
5484    ac_cv_func_signal="yes"
5485  else
5486    AC_MSG_RESULT([no])
5487    ac_cv_func_signal="no"
5488  fi
5489])
5490
5491
5492dnl CURL_CHECK_FUNC_SIGSETJMP
5493dnl -------------------------------------------------
5494dnl Verify if sigsetjmp is available, prototyped, and
5495dnl can be compiled. If all of these are true, and
5496dnl usage has not been previously disallowed with
5497dnl shell variable curl_disallow_sigsetjmp, then
5498dnl HAVE_SIGSETJMP will be defined.
5499
5500AC_DEFUN([CURL_CHECK_FUNC_SIGSETJMP], [
5501  AC_REQUIRE([CURL_INCLUDES_SETJMP])dnl
5502  #
5503  tst_links_sigsetjmp="unknown"
5504  tst_macro_sigsetjmp="unknown"
5505  tst_proto_sigsetjmp="unknown"
5506  tst_compi_sigsetjmp="unknown"
5507  tst_allow_sigsetjmp="unknown"
5508  #
5509  AC_MSG_CHECKING([if sigsetjmp can be linked])
5510  AC_LINK_IFELSE([
5511    AC_LANG_FUNC_LINK_TRY([sigsetjmp])
5512  ],[
5513    AC_MSG_RESULT([yes])
5514    tst_links_sigsetjmp="yes"
5515  ],[
5516    AC_MSG_RESULT([no])
5517    tst_links_sigsetjmp="no"
5518  ])
5519  #
5520  if test "$tst_links_sigsetjmp" = "no"; then
5521    AC_MSG_CHECKING([if sigsetjmp seems a macro])
5522    AC_LINK_IFELSE([
5523      AC_LANG_PROGRAM([[
5524        $curl_includes_setjmp
5525      ]],[[
5526        sigjmp_buf env;
5527        if(0 != sigsetjmp(env, 0))
5528          return 1;
5529      ]])
5530    ],[
5531      AC_MSG_RESULT([yes])
5532      tst_macro_sigsetjmp="yes"
5533    ],[
5534      AC_MSG_RESULT([no])
5535      tst_macro_sigsetjmp="no"
5536    ])
5537  fi
5538  #
5539  if test "$tst_links_sigsetjmp" = "yes"; then
5540    AC_MSG_CHECKING([if sigsetjmp is prototyped])
5541    AC_EGREP_CPP([sigsetjmp],[
5542      $curl_includes_setjmp
5543    ],[
5544      AC_MSG_RESULT([yes])
5545      tst_proto_sigsetjmp="yes"
5546    ],[
5547      AC_MSG_RESULT([no])
5548      tst_proto_sigsetjmp="no"
5549    ])
5550  fi
5551  #
5552  if test "$tst_proto_sigsetjmp" = "yes" ||
5553     test "$tst_macro_sigsetjmp" = "yes"; then
5554    AC_MSG_CHECKING([if sigsetjmp is compilable])
5555    AC_COMPILE_IFELSE([
5556      AC_LANG_PROGRAM([[
5557        $curl_includes_setjmp
5558      ]],[[
5559        sigjmp_buf env;
5560        if(0 != sigsetjmp(env, 0))
5561          return 1;
5562      ]])
5563    ],[
5564      AC_MSG_RESULT([yes])
5565      tst_compi_sigsetjmp="yes"
5566    ],[
5567      AC_MSG_RESULT([no])
5568      tst_compi_sigsetjmp="no"
5569    ])
5570  fi
5571  #
5572  if test "$tst_compi_sigsetjmp" = "yes"; then
5573    AC_MSG_CHECKING([if sigsetjmp usage allowed])
5574    if test "x$curl_disallow_sigsetjmp" != "xyes"; then
5575      AC_MSG_RESULT([yes])
5576      tst_allow_sigsetjmp="yes"
5577    else
5578      AC_MSG_RESULT([no])
5579      tst_allow_sigsetjmp="no"
5580    fi
5581  fi
5582  #
5583  AC_MSG_CHECKING([if sigsetjmp might be used])
5584  if (test "$tst_proto_sigsetjmp" = "yes" ||
5585      test "$tst_macro_sigsetjmp" = "yes") &&
5586     test "$tst_compi_sigsetjmp" = "yes" &&
5587     test "$tst_allow_sigsetjmp" = "yes"; then
5588    AC_MSG_RESULT([yes])
5589    AC_DEFINE_UNQUOTED(HAVE_SIGSETJMP, 1,
5590      [Define to 1 if you have the sigsetjmp function or macro.])
5591    ac_cv_func_sigsetjmp="yes"
5592  else
5593    AC_MSG_RESULT([no])
5594    ac_cv_func_sigsetjmp="no"
5595  fi
5596])
5597
5598
5599dnl CURL_CHECK_FUNC_SOCKET
5600dnl -------------------------------------------------
5601dnl Verify if socket is available, prototyped, and
5602dnl can be compiled. If all of these are true, and
5603dnl usage has not been previously disallowed with
5604dnl shell variable curl_disallow_socket, then
5605dnl HAVE_SOCKET will be defined.
5606
5607AC_DEFUN([CURL_CHECK_FUNC_SOCKET], [
5608  AC_REQUIRE([CURL_INCLUDES_WINSOCK2])dnl
5609  AC_REQUIRE([CURL_INCLUDES_SYS_SOCKET])dnl
5610  AC_REQUIRE([CURL_INCLUDES_SOCKET])dnl
5611  #
5612  tst_links_socket="unknown"
5613  tst_proto_socket="unknown"
5614  tst_compi_socket="unknown"
5615  tst_allow_socket="unknown"
5616  #
5617  AC_MSG_CHECKING([if socket can be linked])
5618  AC_LINK_IFELSE([
5619    AC_LANG_PROGRAM([[
5620      $curl_includes_winsock2
5621      $curl_includes_sys_socket
5622      $curl_includes_socket
5623    ]],[[
5624      if(0 != socket(0, 0, 0))
5625        return 1;
5626    ]])
5627  ],[
5628    AC_MSG_RESULT([yes])
5629    tst_links_socket="yes"
5630  ],[
5631    AC_MSG_RESULT([no])
5632    tst_links_socket="no"
5633  ])
5634  #
5635  if test "$tst_links_socket" = "yes"; then
5636    AC_MSG_CHECKING([if socket is prototyped])
5637    AC_EGREP_CPP([socket],[
5638      $curl_includes_winsock2
5639      $curl_includes_sys_socket
5640      $curl_includes_socket
5641    ],[
5642      AC_MSG_RESULT([yes])
5643      tst_proto_socket="yes"
5644    ],[
5645      AC_MSG_RESULT([no])
5646      tst_proto_socket="no"
5647    ])
5648  fi
5649  #
5650  if test "$tst_proto_socket" = "yes"; then
5651    AC_MSG_CHECKING([if socket is compilable])
5652    AC_COMPILE_IFELSE([
5653      AC_LANG_PROGRAM([[
5654        $curl_includes_winsock2
5655        $curl_includes_sys_socket
5656        $curl_includes_socket
5657      ]],[[
5658        if(0 != socket(0, 0, 0))
5659          return 1;
5660      ]])
5661    ],[
5662      AC_MSG_RESULT([yes])
5663      tst_compi_socket="yes"
5664    ],[
5665      AC_MSG_RESULT([no])
5666      tst_compi_socket="no"
5667    ])
5668  fi
5669  #
5670  if test "$tst_compi_socket" = "yes"; then
5671    AC_MSG_CHECKING([if socket usage allowed])
5672    if test "x$curl_disallow_socket" != "xyes"; then
5673      AC_MSG_RESULT([yes])
5674      tst_allow_socket="yes"
5675    else
5676      AC_MSG_RESULT([no])
5677      tst_allow_socket="no"
5678    fi
5679  fi
5680  #
5681  AC_MSG_CHECKING([if socket might be used])
5682  if test "$tst_links_socket" = "yes" &&
5683     test "$tst_proto_socket" = "yes" &&
5684     test "$tst_compi_socket" = "yes" &&
5685     test "$tst_allow_socket" = "yes"; then
5686    AC_MSG_RESULT([yes])
5687    AC_DEFINE_UNQUOTED(HAVE_SOCKET, 1,
5688      [Define to 1 if you have the socket function.])
5689    ac_cv_func_socket="yes"
5690  else
5691    AC_MSG_RESULT([no])
5692    ac_cv_func_socket="no"
5693  fi
5694])
5695
5696
5697dnl CURL_CHECK_FUNC_SOCKETPAIR
5698dnl -------------------------------------------------
5699dnl Verify if socketpair is available, prototyped, and
5700dnl can be compiled. If all of these are true, and
5701dnl usage has not been previously disallowed with
5702dnl shell variable curl_disallow_socketpair, then
5703dnl HAVE_SOCKETPAIR will be defined.
5704
5705AC_DEFUN([CURL_CHECK_FUNC_SOCKETPAIR], [
5706  AC_REQUIRE([CURL_INCLUDES_SYS_SOCKET])dnl
5707  AC_REQUIRE([CURL_INCLUDES_SOCKET])dnl
5708  #
5709  tst_links_socketpair="unknown"
5710  tst_proto_socketpair="unknown"
5711  tst_compi_socketpair="unknown"
5712  tst_allow_socketpair="unknown"
5713  #
5714  AC_MSG_CHECKING([if socketpair can be linked])
5715  AC_LINK_IFELSE([
5716    AC_LANG_FUNC_LINK_TRY([socketpair])
5717  ],[
5718    AC_MSG_RESULT([yes])
5719    tst_links_socketpair="yes"
5720  ],[
5721    AC_MSG_RESULT([no])
5722    tst_links_socketpair="no"
5723  ])
5724  #
5725  if test "$tst_links_socketpair" = "yes"; then
5726    AC_MSG_CHECKING([if socketpair is prototyped])
5727    AC_EGREP_CPP([socketpair],[
5728      $curl_includes_sys_socket
5729      $curl_includes_socket
5730    ],[
5731      AC_MSG_RESULT([yes])
5732      tst_proto_socketpair="yes"
5733    ],[
5734      AC_MSG_RESULT([no])
5735      tst_proto_socketpair="no"
5736    ])
5737  fi
5738  #
5739  if test "$tst_proto_socketpair" = "yes"; then
5740    AC_MSG_CHECKING([if socketpair is compilable])
5741    AC_COMPILE_IFELSE([
5742      AC_LANG_PROGRAM([[
5743        $curl_includes_sys_socket
5744        $curl_includes_socket
5745      ]],[[
5746        int sv[2];
5747        if(0 != socketpair(0, 0, 0, sv))
5748          return 1;
5749      ]])
5750    ],[
5751      AC_MSG_RESULT([yes])
5752      tst_compi_socketpair="yes"
5753    ],[
5754      AC_MSG_RESULT([no])
5755      tst_compi_socketpair="no"
5756    ])
5757  fi
5758  #
5759  if test "$tst_compi_socketpair" = "yes"; then
5760    AC_MSG_CHECKING([if socketpair usage allowed])
5761    if test "x$curl_disallow_socketpair" != "xyes"; then
5762      AC_MSG_RESULT([yes])
5763      tst_allow_socketpair="yes"
5764    else
5765      AC_MSG_RESULT([no])
5766      tst_allow_socketpair="no"
5767    fi
5768  fi
5769  #
5770  AC_MSG_CHECKING([if socketpair might be used])
5771  if test "$tst_links_socketpair" = "yes" &&
5772     test "$tst_proto_socketpair" = "yes" &&
5773     test "$tst_compi_socketpair" = "yes" &&
5774     test "$tst_allow_socketpair" = "yes"; then
5775    AC_MSG_RESULT([yes])
5776    AC_DEFINE_UNQUOTED(HAVE_SOCKETPAIR, 1,
5777      [Define to 1 if you have the socketpair function.])
5778    ac_cv_func_socketpair="yes"
5779  else
5780    AC_MSG_RESULT([no])
5781    ac_cv_func_socketpair="no"
5782  fi
5783])
5784
5785
5786dnl CURL_CHECK_FUNC_STRCASECMP
5787dnl -------------------------------------------------
5788dnl Verify if strcasecmp is available, prototyped, and
5789dnl can be compiled. If all of these are true, and
5790dnl usage has not been previously disallowed with
5791dnl shell variable curl_disallow_strcasecmp, then
5792dnl HAVE_STRCASECMP will be defined.
5793
5794AC_DEFUN([CURL_CHECK_FUNC_STRCASECMP], [
5795  AC_REQUIRE([CURL_INCLUDES_STRING])dnl
5796  #
5797  tst_links_strcasecmp="unknown"
5798  tst_proto_strcasecmp="unknown"
5799  tst_compi_strcasecmp="unknown"
5800  tst_allow_strcasecmp="unknown"
5801  #
5802  AC_MSG_CHECKING([if strcasecmp can be linked])
5803  AC_LINK_IFELSE([
5804    AC_LANG_FUNC_LINK_TRY([strcasecmp])
5805  ],[
5806    AC_MSG_RESULT([yes])
5807    tst_links_strcasecmp="yes"
5808  ],[
5809    AC_MSG_RESULT([no])
5810    tst_links_strcasecmp="no"
5811  ])
5812  #
5813  if test "$tst_links_strcasecmp" = "yes"; then
5814    AC_MSG_CHECKING([if strcasecmp is prototyped])
5815    AC_EGREP_CPP([strcasecmp],[
5816      $curl_includes_string
5817    ],[
5818      AC_MSG_RESULT([yes])
5819      tst_proto_strcasecmp="yes"
5820    ],[
5821      AC_MSG_RESULT([no])
5822      tst_proto_strcasecmp="no"
5823    ])
5824  fi
5825  #
5826  if test "$tst_proto_strcasecmp" = "yes"; then
5827    AC_MSG_CHECKING([if strcasecmp is compilable])
5828    AC_COMPILE_IFELSE([
5829      AC_LANG_PROGRAM([[
5830        $curl_includes_string
5831      ]],[[
5832        if(0 != strcasecmp(0, 0))
5833          return 1;
5834      ]])
5835    ],[
5836      AC_MSG_RESULT([yes])
5837      tst_compi_strcasecmp="yes"
5838    ],[
5839      AC_MSG_RESULT([no])
5840      tst_compi_strcasecmp="no"
5841    ])
5842  fi
5843  #
5844  if test "$tst_compi_strcasecmp" = "yes"; then
5845    AC_MSG_CHECKING([if strcasecmp usage allowed])
5846    if test "x$curl_disallow_strcasecmp" != "xyes"; then
5847      AC_MSG_RESULT([yes])
5848      tst_allow_strcasecmp="yes"
5849    else
5850      AC_MSG_RESULT([no])
5851      tst_allow_strcasecmp="no"
5852    fi
5853  fi
5854  #
5855  AC_MSG_CHECKING([if strcasecmp might be used])
5856  if test "$tst_links_strcasecmp" = "yes" &&
5857     test "$tst_proto_strcasecmp" = "yes" &&
5858     test "$tst_compi_strcasecmp" = "yes" &&
5859     test "$tst_allow_strcasecmp" = "yes"; then
5860    AC_MSG_RESULT([yes])
5861    AC_DEFINE_UNQUOTED(HAVE_STRCASECMP, 1,
5862      [Define to 1 if you have the strcasecmp function.])
5863    ac_cv_func_strcasecmp="yes"
5864  else
5865    AC_MSG_RESULT([no])
5866    ac_cv_func_strcasecmp="no"
5867  fi
5868])
5869
5870dnl CURL_CHECK_FUNC_STRCMPI
5871dnl -------------------------------------------------
5872dnl Verify if strcmpi is available, prototyped, and
5873dnl can be compiled. If all of these are true, and
5874dnl usage has not been previously disallowed with
5875dnl shell variable curl_disallow_strcmpi, then
5876dnl HAVE_STRCMPI will be defined.
5877
5878AC_DEFUN([CURL_CHECK_FUNC_STRCMPI], [
5879  AC_REQUIRE([CURL_INCLUDES_STRING])dnl
5880  #
5881  tst_links_strcmpi="unknown"
5882  tst_proto_strcmpi="unknown"
5883  tst_compi_strcmpi="unknown"
5884  tst_allow_strcmpi="unknown"
5885  #
5886  AC_MSG_CHECKING([if strcmpi can be linked])
5887  AC_LINK_IFELSE([
5888    AC_LANG_FUNC_LINK_TRY([strcmpi])
5889  ],[
5890    AC_MSG_RESULT([yes])
5891    tst_links_strcmpi="yes"
5892  ],[
5893    AC_MSG_RESULT([no])
5894    tst_links_strcmpi="no"
5895  ])
5896  #
5897  if test "$tst_links_strcmpi" = "yes"; then
5898    AC_MSG_CHECKING([if strcmpi is prototyped])
5899    AC_EGREP_CPP([strcmpi],[
5900      $curl_includes_string
5901    ],[
5902      AC_MSG_RESULT([yes])
5903      tst_proto_strcmpi="yes"
5904    ],[
5905      AC_MSG_RESULT([no])
5906      tst_proto_strcmpi="no"
5907    ])
5908  fi
5909  #
5910  if test "$tst_proto_strcmpi" = "yes"; then
5911    AC_MSG_CHECKING([if strcmpi is compilable])
5912    AC_COMPILE_IFELSE([
5913      AC_LANG_PROGRAM([[
5914        $curl_includes_string
5915      ]],[[
5916        if(0 != strcmpi(0, 0))
5917          return 1;
5918      ]])
5919    ],[
5920      AC_MSG_RESULT([yes])
5921      tst_compi_strcmpi="yes"
5922    ],[
5923      AC_MSG_RESULT([no])
5924      tst_compi_strcmpi="no"
5925    ])
5926  fi
5927  #
5928  if test "$tst_compi_strcmpi" = "yes"; then
5929    AC_MSG_CHECKING([if strcmpi usage allowed])
5930    if test "x$curl_disallow_strcmpi" != "xyes"; then
5931      AC_MSG_RESULT([yes])
5932      tst_allow_strcmpi="yes"
5933    else
5934      AC_MSG_RESULT([no])
5935      tst_allow_strcmpi="no"
5936    fi
5937  fi
5938  #
5939  AC_MSG_CHECKING([if strcmpi might be used])
5940  if test "$tst_links_strcmpi" = "yes" &&
5941     test "$tst_proto_strcmpi" = "yes" &&
5942     test "$tst_compi_strcmpi" = "yes" &&
5943     test "$tst_allow_strcmpi" = "yes"; then
5944    AC_MSG_RESULT([yes])
5945    AC_DEFINE_UNQUOTED(HAVE_STRCMPI, 1,
5946      [Define to 1 if you have the strcmpi function.])
5947    ac_cv_func_strcmpi="yes"
5948  else
5949    AC_MSG_RESULT([no])
5950    ac_cv_func_strcmpi="no"
5951  fi
5952])
5953
5954
5955dnl CURL_CHECK_FUNC_STRDUP
5956dnl -------------------------------------------------
5957dnl Verify if strdup is available, prototyped, and
5958dnl can be compiled. If all of these are true, and
5959dnl usage has not been previously disallowed with
5960dnl shell variable curl_disallow_strdup, then
5961dnl HAVE_STRDUP will be defined.
5962
5963AC_DEFUN([CURL_CHECK_FUNC_STRDUP], [
5964  AC_REQUIRE([CURL_INCLUDES_STRING])dnl
5965  #
5966  tst_links_strdup="unknown"
5967  tst_proto_strdup="unknown"
5968  tst_compi_strdup="unknown"
5969  tst_allow_strdup="unknown"
5970  #
5971  AC_MSG_CHECKING([if strdup can be linked])
5972  AC_LINK_IFELSE([
5973    AC_LANG_FUNC_LINK_TRY([strdup])
5974  ],[
5975    AC_MSG_RESULT([yes])
5976    tst_links_strdup="yes"
5977  ],[
5978    AC_MSG_RESULT([no])
5979    tst_links_strdup="no"
5980  ])
5981  #
5982  if test "$tst_links_strdup" = "yes"; then
5983    AC_MSG_CHECKING([if strdup is prototyped])
5984    AC_EGREP_CPP([strdup],[
5985      $curl_includes_string
5986    ],[
5987      AC_MSG_RESULT([yes])
5988      tst_proto_strdup="yes"
5989    ],[
5990      AC_MSG_RESULT([no])
5991      tst_proto_strdup="no"
5992    ])
5993  fi
5994  #
5995  if test "$tst_proto_strdup" = "yes"; then
5996    AC_MSG_CHECKING([if strdup is compilable])
5997    AC_COMPILE_IFELSE([
5998      AC_LANG_PROGRAM([[
5999        $curl_includes_string
6000      ]],[[
6001        if(0 != strdup(0))
6002          return 1;
6003      ]])
6004    ],[
6005      AC_MSG_RESULT([yes])
6006      tst_compi_strdup="yes"
6007    ],[
6008      AC_MSG_RESULT([no])
6009      tst_compi_strdup="no"
6010    ])
6011  fi
6012  #
6013  if test "$tst_compi_strdup" = "yes"; then
6014    AC_MSG_CHECKING([if strdup usage allowed])
6015    if test "x$curl_disallow_strdup" != "xyes"; then
6016      AC_MSG_RESULT([yes])
6017      tst_allow_strdup="yes"
6018    else
6019      AC_MSG_RESULT([no])
6020      tst_allow_strdup="no"
6021    fi
6022  fi
6023  #
6024  AC_MSG_CHECKING([if strdup might be used])
6025  if test "$tst_links_strdup" = "yes" &&
6026     test "$tst_proto_strdup" = "yes" &&
6027     test "$tst_compi_strdup" = "yes" &&
6028     test "$tst_allow_strdup" = "yes"; then
6029    AC_MSG_RESULT([yes])
6030    AC_DEFINE_UNQUOTED(HAVE_STRDUP, 1,
6031      [Define to 1 if you have the strdup function.])
6032    ac_cv_func_strdup="yes"
6033  else
6034    AC_MSG_RESULT([no])
6035    ac_cv_func_strdup="no"
6036  fi
6037])
6038
6039
6040dnl CURL_CHECK_FUNC_STRERROR_R
6041dnl -------------------------------------------------
6042dnl Verify if strerror_r is available, prototyped, can be compiled and
6043dnl seems to work. If all of these are true, and usage has not been
6044dnl previously disallowed with shell variable curl_disallow_strerror_r,
6045dnl then HAVE_STRERROR_R and STRERROR_R_TYPE_ARG3 will be defined, as
6046dnl well as one of HAVE_GLIBC_STRERROR_R or HAVE_POSIX_STRERROR_R.
6047dnl
6048dnl glibc-style strerror_r:
6049dnl
6050dnl      char *strerror_r(int errnum, char *workbuf, size_t bufsize);
6051dnl
6052dnl  glibc-style strerror_r returns a pointer to the the error string,
6053dnl  and might use the provided workbuf as a scratch area if needed. A
6054dnl  quick test on a few systems shows that it's usually not used at all.
6055dnl
6056dnl POSIX-style strerror_r:
6057dnl
6058dnl      int strerror_r(int errnum, char *resultbuf, size_t bufsize);
6059dnl
6060dnl  POSIX-style strerror_r returns 0 upon successful completion and the
6061dnl  error string in the provided resultbuf.
6062dnl
6063
6064AC_DEFUN([CURL_CHECK_FUNC_STRERROR_R], [
6065  AC_REQUIRE([CURL_INCLUDES_STDLIB])dnl
6066  AC_REQUIRE([CURL_INCLUDES_STRING])dnl
6067  #
6068  tst_links_strerror_r="unknown"
6069  tst_proto_strerror_r="unknown"
6070  tst_compi_strerror_r="unknown"
6071  tst_glibc_strerror_r="unknown"
6072  tst_posix_strerror_r="unknown"
6073  tst_allow_strerror_r="unknown"
6074  tst_works_glibc_strerror_r="unknown"
6075  tst_works_posix_strerror_r="unknown"
6076  tst_glibc_strerror_r_type_arg3="unknown"
6077  tst_posix_strerror_r_type_arg3="unknown"
6078  #
6079  AC_MSG_CHECKING([if strerror_r can be linked])
6080  AC_LINK_IFELSE([
6081    AC_LANG_FUNC_LINK_TRY([strerror_r])
6082  ],[
6083    AC_MSG_RESULT([yes])
6084    tst_links_strerror_r="yes"
6085  ],[
6086    AC_MSG_RESULT([no])
6087    tst_links_strerror_r="no"
6088  ])
6089  #
6090  if test "$tst_links_strerror_r" = "yes"; then
6091    AC_MSG_CHECKING([if strerror_r is prototyped])
6092    AC_EGREP_CPP([strerror_r],[
6093      $curl_includes_string
6094    ],[
6095      AC_MSG_RESULT([yes])
6096      tst_proto_strerror_r="yes"
6097    ],[
6098      AC_MSG_RESULT([no])
6099      tst_proto_strerror_r="no"
6100    ])
6101  fi
6102  #
6103  if test "$tst_proto_strerror_r" = "yes"; then
6104    AC_MSG_CHECKING([if strerror_r is compilable])
6105    AC_COMPILE_IFELSE([
6106      AC_LANG_PROGRAM([[
6107        $curl_includes_string
6108      ]],[[
6109        if(0 != strerror_r(0, 0, 0))
6110          return 1;
6111      ]])
6112    ],[
6113      AC_MSG_RESULT([yes])
6114      tst_compi_strerror_r="yes"
6115    ],[
6116      AC_MSG_RESULT([no])
6117      tst_compi_strerror_r="no"
6118    ])
6119  fi
6120  #
6121  if test "$tst_compi_strerror_r" = "yes"; then
6122    AC_MSG_CHECKING([if strerror_r is glibc like])
6123    tst_glibc_strerror_r_type_arg3="unknown"
6124    for arg3 in 'size_t' 'int' 'unsigned int'; do
6125      if test "$tst_glibc_strerror_r_type_arg3" = "unknown"; then
6126        AC_COMPILE_IFELSE([
6127          AC_LANG_PROGRAM([[
6128            $curl_includes_string
6129            char *strerror_r(int errnum, char *workbuf, $arg3 bufsize);
6130          ]],[[
6131            if(0 != strerror_r(0, 0, 0))
6132              return 1;
6133          ]])
6134        ],[
6135          tst_glibc_strerror_r_type_arg3="$arg3"
6136        ])
6137      fi
6138    done
6139    case "$tst_glibc_strerror_r_type_arg3" in
6140      unknown)
6141        AC_MSG_RESULT([no])
6142        tst_glibc_strerror_r="no"
6143        ;;
6144      *)
6145        AC_MSG_RESULT([yes])
6146        tst_glibc_strerror_r="yes"
6147        ;;
6148    esac
6149  fi
6150  #
6151  dnl only do runtime verification when not cross-compiling
6152  if test "x$cross_compiling" != "xyes" &&
6153    test "$tst_glibc_strerror_r" = "yes"; then
6154    AC_MSG_CHECKING([if strerror_r seems to work])
6155    AC_RUN_IFELSE([
6156      AC_LANG_PROGRAM([[
6157        $curl_includes_stdlib
6158        $curl_includes_string
6159#       include <errno.h>
6160      ]],[[
6161        char buffer[1024];
6162        char *string = 0;
6163        buffer[0] = '\0';
6164        string = strerror_r(EACCES, buffer, sizeof(buffer));
6165        if(!string)
6166          exit(1); /* fail */
6167        if(!string[0])
6168          exit(1); /* fail */
6169        else
6170          exit(0);
6171      ]])
6172    ],[
6173      AC_MSG_RESULT([yes])
6174      tst_works_glibc_strerror_r="yes"
6175    ],[
6176      AC_MSG_RESULT([no])
6177      tst_works_glibc_strerror_r="no"
6178    ])
6179  fi
6180  #
6181  if test "$tst_compi_strerror_r" = "yes" &&
6182    test "$tst_works_glibc_strerror_r" != "yes"; then
6183    AC_MSG_CHECKING([if strerror_r is POSIX like])
6184    tst_posix_strerror_r_type_arg3="unknown"
6185    for arg3 in 'size_t' 'int' 'unsigned int'; do
6186      if test "$tst_posix_strerror_r_type_arg3" = "unknown"; then
6187        AC_COMPILE_IFELSE([
6188          AC_LANG_PROGRAM([[
6189            $curl_includes_string
6190            int strerror_r(int errnum, char *resultbuf, $arg3 bufsize);
6191          ]],[[
6192            if(0 != strerror_r(0, 0, 0))
6193              return 1;
6194          ]])
6195        ],[
6196          tst_posix_strerror_r_type_arg3="$arg3"
6197        ])
6198      fi
6199    done
6200    case "$tst_posix_strerror_r_type_arg3" in
6201      unknown)
6202        AC_MSG_RESULT([no])
6203        tst_posix_strerror_r="no"
6204        ;;
6205      *)
6206        AC_MSG_RESULT([yes])
6207        tst_posix_strerror_r="yes"
6208        ;;
6209    esac
6210  fi
6211  #
6212  dnl only do runtime verification when not cross-compiling
6213  if test "x$cross_compiling" != "xyes" &&
6214    test "$tst_posix_strerror_r" = "yes"; then
6215    AC_MSG_CHECKING([if strerror_r seems to work])
6216    AC_RUN_IFELSE([
6217      AC_LANG_PROGRAM([[
6218        $curl_includes_stdlib
6219        $curl_includes_string
6220#       include <errno.h>
6221      ]],[[
6222        char buffer[1024];
6223        int error = 1;
6224        buffer[0] = '\0';
6225        error = strerror_r(EACCES, buffer, sizeof(buffer));
6226        if(error)
6227          exit(1); /* fail */
6228        if(buffer[0] == '\0')
6229          exit(1); /* fail */
6230        else
6231          exit(0);
6232      ]])
6233    ],[
6234      AC_MSG_RESULT([yes])
6235      tst_works_posix_strerror_r="yes"
6236    ],[
6237      AC_MSG_RESULT([no])
6238      tst_works_posix_strerror_r="no"
6239    ])
6240  fi
6241  #
6242  if test "$tst_works_glibc_strerror_r" = "yes"; then
6243    tst_posix_strerror_r="no"
6244  fi
6245  if test "$tst_works_posix_strerror_r" = "yes"; then
6246    tst_glibc_strerror_r="no"
6247  fi
6248  if test "$tst_glibc_strerror_r" = "yes" &&
6249    test "$tst_works_glibc_strerror_r" != "no" &&
6250    test "$tst_posix_strerror_r" != "yes"; then
6251    tst_allow_strerror_r="check"
6252  fi
6253  if test "$tst_posix_strerror_r" = "yes" &&
6254    test "$tst_works_posix_strerror_r" != "no" &&
6255    test "$tst_glibc_strerror_r" != "yes"; then
6256    tst_allow_strerror_r="check"
6257  fi
6258  if test "$tst_allow_strerror_r" = "check"; then
6259    AC_MSG_CHECKING([if strerror_r usage allowed])
6260    if test "x$curl_disallow_strerror_r" != "xyes"; then
6261      AC_MSG_RESULT([yes])
6262      tst_allow_strerror_r="yes"
6263    else
6264      AC_MSG_RESULT([no])
6265      tst_allow_strerror_r="no"
6266    fi
6267  fi
6268  #
6269  AC_MSG_CHECKING([if strerror_r might be used])
6270  if test "$tst_links_strerror_r" = "yes" &&
6271     test "$tst_proto_strerror_r" = "yes" &&
6272     test "$tst_compi_strerror_r" = "yes" &&
6273     test "$tst_allow_strerror_r" = "yes"; then
6274    AC_MSG_RESULT([yes])
6275    if test "$tst_glibc_strerror_r" = "yes"; then
6276      AC_DEFINE_UNQUOTED(HAVE_STRERROR_R, 1,
6277        [Define to 1 if you have the strerror_r function.])
6278      AC_DEFINE_UNQUOTED(HAVE_GLIBC_STRERROR_R, 1,
6279        [Define to 1 if you have a working glibc-style strerror_r function.])
6280      AC_DEFINE_UNQUOTED(STRERROR_R_TYPE_ARG3, $tst_glibc_strerror_r_type_arg3,
6281        [Define to the type of arg 3 for strerror_r.])
6282    fi
6283    if test "$tst_posix_strerror_r" = "yes"; then
6284      AC_DEFINE_UNQUOTED(HAVE_STRERROR_R, 1,
6285        [Define to 1 if you have the strerror_r function.])
6286      AC_DEFINE_UNQUOTED(HAVE_POSIX_STRERROR_R, 1,
6287        [Define to 1 if you have a working POSIX-style strerror_r function.])
6288      AC_DEFINE_UNQUOTED(STRERROR_R_TYPE_ARG3, $tst_posix_strerror_r_type_arg3,
6289        [Define to the type of arg 3 for strerror_r.])
6290    fi
6291    ac_cv_func_strerror_r="yes"
6292  else
6293    AC_MSG_RESULT([no])
6294    ac_cv_func_strerror_r="no"
6295  fi
6296  #
6297  if test "$tst_compi_strerror_r" = "yes" &&
6298     test "$tst_allow_strerror_r" = "unknown"; then
6299    AC_MSG_WARN([cannot determine strerror_r() style: edit lib/curl_config.h manually.])
6300  fi
6301  #
6302])
6303
6304
6305dnl CURL_CHECK_FUNC_STRICMP
6306dnl -------------------------------------------------
6307dnl Verify if stricmp is available, prototyped, and
6308dnl can be compiled. If all of these are true, and
6309dnl usage has not been previously disallowed with
6310dnl shell variable curl_disallow_stricmp, then
6311dnl HAVE_STRICMP will be defined.
6312
6313AC_DEFUN([CURL_CHECK_FUNC_STRICMP], [
6314  AC_REQUIRE([CURL_INCLUDES_STRING])dnl
6315  #
6316  tst_links_stricmp="unknown"
6317  tst_proto_stricmp="unknown"
6318  tst_compi_stricmp="unknown"
6319  tst_allow_stricmp="unknown"
6320  #
6321  AC_MSG_CHECKING([if stricmp can be linked])
6322  AC_LINK_IFELSE([
6323    AC_LANG_FUNC_LINK_TRY([stricmp])
6324  ],[
6325    AC_MSG_RESULT([yes])
6326    tst_links_stricmp="yes"
6327  ],[
6328    AC_MSG_RESULT([no])
6329    tst_links_stricmp="no"
6330  ])
6331  #
6332  if test "$tst_links_stricmp" = "yes"; then
6333    AC_MSG_CHECKING([if stricmp is prototyped])
6334    AC_EGREP_CPP([stricmp],[
6335      $curl_includes_string
6336    ],[
6337      AC_MSG_RESULT([yes])
6338      tst_proto_stricmp="yes"
6339    ],[
6340      AC_MSG_RESULT([no])
6341      tst_proto_stricmp="no"
6342    ])
6343  fi
6344  #
6345  if test "$tst_proto_stricmp" = "yes"; then
6346    AC_MSG_CHECKING([if stricmp is compilable])
6347    AC_COMPILE_IFELSE([
6348      AC_LANG_PROGRAM([[
6349        $curl_includes_string
6350      ]],[[
6351        if(0 != stricmp(0, 0))
6352          return 1;
6353      ]])
6354    ],[
6355      AC_MSG_RESULT([yes])
6356      tst_compi_stricmp="yes"
6357    ],[
6358      AC_MSG_RESULT([no])
6359      tst_compi_stricmp="no"
6360    ])
6361  fi
6362  #
6363  if test "$tst_compi_stricmp" = "yes"; then
6364    AC_MSG_CHECKING([if stricmp usage allowed])
6365    if test "x$curl_disallow_stricmp" != "xyes"; then
6366      AC_MSG_RESULT([yes])
6367      tst_allow_stricmp="yes"
6368    else
6369      AC_MSG_RESULT([no])
6370      tst_allow_stricmp="no"
6371    fi
6372  fi
6373  #
6374  AC_MSG_CHECKING([if stricmp might be used])
6375  if test "$tst_links_stricmp" = "yes" &&
6376     test "$tst_proto_stricmp" = "yes" &&
6377     test "$tst_compi_stricmp" = "yes" &&
6378     test "$tst_allow_stricmp" = "yes"; then
6379    AC_MSG_RESULT([yes])
6380    AC_DEFINE_UNQUOTED(HAVE_STRICMP, 1,
6381      [Define to 1 if you have the stricmp function.])
6382    ac_cv_func_stricmp="yes"
6383  else
6384    AC_MSG_RESULT([no])
6385    ac_cv_func_stricmp="no"
6386  fi
6387])
6388
6389dnl CURL_CHECK_FUNC_STRNCASECMP
6390dnl -------------------------------------------------
6391dnl Verify if strncasecmp is available, prototyped, and
6392dnl can be compiled. If all of these are true, and
6393dnl usage has not been previously disallowed with
6394dnl shell variable curl_disallow_strncasecmp, then
6395dnl HAVE_STRNCASECMP will be defined.
6396
6397AC_DEFUN([CURL_CHECK_FUNC_STRNCASECMP], [
6398  AC_REQUIRE([CURL_INCLUDES_STRING])dnl
6399  #
6400  tst_links_strncasecmp="unknown"
6401  tst_proto_strncasecmp="unknown"
6402  tst_compi_strncasecmp="unknown"
6403  tst_allow_strncasecmp="unknown"
6404  #
6405  AC_MSG_CHECKING([if strncasecmp can be linked])
6406  AC_LINK_IFELSE([
6407    AC_LANG_FUNC_LINK_TRY([strncasecmp])
6408  ],[
6409    AC_MSG_RESULT([yes])
6410    tst_links_strncasecmp="yes"
6411  ],[
6412    AC_MSG_RESULT([no])
6413    tst_links_strncasecmp="no"
6414  ])
6415  #
6416  if test "$tst_links_strncasecmp" = "yes"; then
6417    AC_MSG_CHECKING([if strncasecmp is prototyped])
6418    AC_EGREP_CPP([strncasecmp],[
6419      $curl_includes_string
6420    ],[
6421      AC_MSG_RESULT([yes])
6422      tst_proto_strncasecmp="yes"
6423    ],[
6424      AC_MSG_RESULT([no])
6425      tst_proto_strncasecmp="no"
6426    ])
6427  fi
6428  #
6429  if test "$tst_proto_strncasecmp" = "yes"; then
6430    AC_MSG_CHECKING([if strncasecmp is compilable])
6431    AC_COMPILE_IFELSE([
6432      AC_LANG_PROGRAM([[
6433        $curl_includes_string
6434      ]],[[
6435        if(0 != strncasecmp(0, 0, 0))
6436          return 1;
6437      ]])
6438    ],[
6439      AC_MSG_RESULT([yes])
6440      tst_compi_strncasecmp="yes"
6441    ],[
6442      AC_MSG_RESULT([no])
6443      tst_compi_strncasecmp="no"
6444    ])
6445  fi
6446  #
6447  if test "$tst_compi_strncasecmp" = "yes"; then
6448    AC_MSG_CHECKING([if strncasecmp usage allowed])
6449    if test "x$curl_disallow_strncasecmp" != "xyes"; then
6450      AC_MSG_RESULT([yes])
6451      tst_allow_strncasecmp="yes"
6452    else
6453      AC_MSG_RESULT([no])
6454      tst_allow_strncasecmp="no"
6455    fi
6456  fi
6457  #
6458  AC_MSG_CHECKING([if strncasecmp might be used])
6459  if test "$tst_links_strncasecmp" = "yes" &&
6460     test "$tst_proto_strncasecmp" = "yes" &&
6461     test "$tst_compi_strncasecmp" = "yes" &&
6462     test "$tst_allow_strncasecmp" = "yes"; then
6463    AC_MSG_RESULT([yes])
6464    AC_DEFINE_UNQUOTED(HAVE_STRNCASECMP, 1,
6465      [Define to 1 if you have the strncasecmp function.])
6466    ac_cv_func_strncasecmp="yes"
6467  else
6468    AC_MSG_RESULT([no])
6469    ac_cv_func_strncasecmp="no"
6470  fi
6471])
6472
6473
6474dnl CURL_CHECK_FUNC_STRNCMPI
6475dnl -------------------------------------------------
6476dnl Verify if strncmpi is available, prototyped, and
6477dnl can be compiled. If all of these are true, and
6478dnl usage has not been previously disallowed with
6479dnl shell variable curl_disallow_strncmpi, then
6480dnl HAVE_STRNCMPI will be defined.
6481
6482AC_DEFUN([CURL_CHECK_FUNC_STRNCMPI], [
6483  AC_REQUIRE([CURL_INCLUDES_STRING])dnl
6484  #
6485  tst_links_strncmpi="unknown"
6486  tst_proto_strncmpi="unknown"
6487  tst_compi_strncmpi="unknown"
6488  tst_allow_strncmpi="unknown"
6489  #
6490  AC_MSG_CHECKING([if strncmpi can be linked])
6491  AC_LINK_IFELSE([
6492    AC_LANG_FUNC_LINK_TRY([strncmpi])
6493  ],[
6494    AC_MSG_RESULT([yes])
6495    tst_links_strncmpi="yes"
6496  ],[
6497    AC_MSG_RESULT([no])
6498    tst_links_strncmpi="no"
6499  ])
6500  #
6501  if test "$tst_links_strncmpi" = "yes"; then
6502    AC_MSG_CHECKING([if strncmpi is prototyped])
6503    AC_EGREP_CPP([strncmpi],[
6504      $curl_includes_string
6505    ],[
6506      AC_MSG_RESULT([yes])
6507      tst_proto_strncmpi="yes"
6508    ],[
6509      AC_MSG_RESULT([no])
6510      tst_proto_strncmpi="no"
6511    ])
6512  fi
6513  #
6514  if test "$tst_proto_strncmpi" = "yes"; then
6515    AC_MSG_CHECKING([if strncmpi is compilable])
6516    AC_COMPILE_IFELSE([
6517      AC_LANG_PROGRAM([[
6518        $curl_includes_string
6519      ]],[[
6520        if(0 != strncmpi(0, 0))
6521          return 1;
6522      ]])
6523    ],[
6524      AC_MSG_RESULT([yes])
6525      tst_compi_strncmpi="yes"
6526    ],[
6527      AC_MSG_RESULT([no])
6528      tst_compi_strncmpi="no"
6529    ])
6530  fi
6531  #
6532  if test "$tst_compi_strncmpi" = "yes"; then
6533    AC_MSG_CHECKING([if strncmpi usage allowed])
6534    if test "x$curl_disallow_strncmpi" != "xyes"; then
6535      AC_MSG_RESULT([yes])
6536      tst_allow_strncmpi="yes"
6537    else
6538      AC_MSG_RESULT([no])
6539      tst_allow_strncmpi="no"
6540    fi
6541  fi
6542  #
6543  AC_MSG_CHECKING([if strncmpi might be used])
6544  if test "$tst_links_strncmpi" = "yes" &&
6545     test "$tst_proto_strncmpi" = "yes" &&
6546     test "$tst_compi_strncmpi" = "yes" &&
6547     test "$tst_allow_strncmpi" = "yes"; then
6548    AC_MSG_RESULT([yes])
6549    AC_DEFINE_UNQUOTED(HAVE_STRNCMPI, 1,
6550      [Define to 1 if you have the strncmpi function.])
6551    ac_cv_func_strncmpi="yes"
6552  else
6553    AC_MSG_RESULT([no])
6554    ac_cv_func_strncmpi="no"
6555  fi
6556])
6557
6558
6559dnl CURL_CHECK_FUNC_STRNICMP
6560dnl -------------------------------------------------
6561dnl Verify if strnicmp is available, prototyped, and
6562dnl can be compiled. If all of these are true, and
6563dnl usage has not been previously disallowed with
6564dnl shell variable curl_disallow_strnicmp, then
6565dnl HAVE_STRNICMP will be defined.
6566
6567AC_DEFUN([CURL_CHECK_FUNC_STRNICMP], [
6568  AC_REQUIRE([CURL_INCLUDES_STRING])dnl
6569  #
6570  tst_links_strnicmp="unknown"
6571  tst_proto_strnicmp="unknown"
6572  tst_compi_strnicmp="unknown"
6573  tst_allow_strnicmp="unknown"
6574  #
6575  AC_MSG_CHECKING([if strnicmp can be linked])
6576  AC_LINK_IFELSE([
6577    AC_LANG_FUNC_LINK_TRY([strnicmp])
6578  ],[
6579    AC_MSG_RESULT([yes])
6580    tst_links_strnicmp="yes"
6581  ],[
6582    AC_MSG_RESULT([no])
6583    tst_links_strnicmp="no"
6584  ])
6585  #
6586  if test "$tst_links_strnicmp" = "yes"; then
6587    AC_MSG_CHECKING([if strnicmp is prototyped])
6588    AC_EGREP_CPP([strnicmp],[
6589      $curl_includes_string
6590    ],[
6591      AC_MSG_RESULT([yes])
6592      tst_proto_strnicmp="yes"
6593    ],[
6594      AC_MSG_RESULT([no])
6595      tst_proto_strnicmp="no"
6596    ])
6597  fi
6598  #
6599  if test "$tst_proto_strnicmp" = "yes"; then
6600    AC_MSG_CHECKING([if strnicmp is compilable])
6601    AC_COMPILE_IFELSE([
6602      AC_LANG_PROGRAM([[
6603        $curl_includes_string
6604      ]],[[
6605        if(0 != strnicmp(0, 0))
6606          return 1;
6607      ]])
6608    ],[
6609      AC_MSG_RESULT([yes])
6610      tst_compi_strnicmp="yes"
6611    ],[
6612      AC_MSG_RESULT([no])
6613      tst_compi_strnicmp="no"
6614    ])
6615  fi
6616  #
6617  if test "$tst_compi_strnicmp" = "yes"; then
6618    AC_MSG_CHECKING([if strnicmp usage allowed])
6619    if test "x$curl_disallow_strnicmp" != "xyes"; then
6620      AC_MSG_RESULT([yes])
6621      tst_allow_strnicmp="yes"
6622    else
6623      AC_MSG_RESULT([no])
6624      tst_allow_strnicmp="no"
6625    fi
6626  fi
6627  #
6628  AC_MSG_CHECKING([if strnicmp might be used])
6629  if test "$tst_links_strnicmp" = "yes" &&
6630     test "$tst_proto_strnicmp" = "yes" &&
6631     test "$tst_compi_strnicmp" = "yes" &&
6632     test "$tst_allow_strnicmp" = "yes"; then
6633    AC_MSG_RESULT([yes])
6634    AC_DEFINE_UNQUOTED(HAVE_STRNICMP, 1,
6635      [Define to 1 if you have the strnicmp function.])
6636    ac_cv_func_strnicmp="yes"
6637  else
6638    AC_MSG_RESULT([no])
6639    ac_cv_func_strnicmp="no"
6640  fi
6641])
6642
6643
6644dnl CURL_CHECK_FUNC_STRSTR
6645dnl -------------------------------------------------
6646dnl Verify if strstr is available, prototyped, and
6647dnl can be compiled. If all of these are true, and
6648dnl usage has not been previously disallowed with
6649dnl shell variable curl_disallow_strstr, then
6650dnl HAVE_STRSTR will be defined.
6651
6652AC_DEFUN([CURL_CHECK_FUNC_STRSTR], [
6653  AC_REQUIRE([CURL_INCLUDES_STRING])dnl
6654  #
6655  tst_links_strstr="unknown"
6656  tst_proto_strstr="unknown"
6657  tst_compi_strstr="unknown"
6658  tst_allow_strstr="unknown"
6659  #
6660  AC_MSG_CHECKING([if strstr can be linked])
6661  AC_LINK_IFELSE([
6662    AC_LANG_FUNC_LINK_TRY([strstr])
6663  ],[
6664    AC_MSG_RESULT([yes])
6665    tst_links_strstr="yes"
6666  ],[
6667    AC_MSG_RESULT([no])
6668    tst_links_strstr="no"
6669  ])
6670  #
6671  if test "$tst_links_strstr" = "yes"; then
6672    AC_MSG_CHECKING([if strstr is prototyped])
6673    AC_EGREP_CPP([strstr],[
6674      $curl_includes_string
6675    ],[
6676      AC_MSG_RESULT([yes])
6677      tst_proto_strstr="yes"
6678    ],[
6679      AC_MSG_RESULT([no])
6680      tst_proto_strstr="no"
6681    ])
6682  fi
6683  #
6684  if test "$tst_proto_strstr" = "yes"; then
6685    AC_MSG_CHECKING([if strstr is compilable])
6686    AC_COMPILE_IFELSE([
6687      AC_LANG_PROGRAM([[
6688        $curl_includes_string
6689      ]],[[
6690        if(0 != strstr(0, 0))
6691          return 1;
6692      ]])
6693    ],[
6694      AC_MSG_RESULT([yes])
6695      tst_compi_strstr="yes"
6696    ],[
6697      AC_MSG_RESULT([no])
6698      tst_compi_strstr="no"
6699    ])
6700  fi
6701  #
6702  if test "$tst_compi_strstr" = "yes"; then
6703    AC_MSG_CHECKING([if strstr usage allowed])
6704    if test "x$curl_disallow_strstr" != "xyes"; then
6705      AC_MSG_RESULT([yes])
6706      tst_allow_strstr="yes"
6707    else
6708      AC_MSG_RESULT([no])
6709      tst_allow_strstr="no"
6710    fi
6711  fi
6712  #
6713  AC_MSG_CHECKING([if strstr might be used])
6714  if test "$tst_links_strstr" = "yes" &&
6715     test "$tst_proto_strstr" = "yes" &&
6716     test "$tst_compi_strstr" = "yes" &&
6717     test "$tst_allow_strstr" = "yes"; then
6718    AC_MSG_RESULT([yes])
6719    AC_DEFINE_UNQUOTED(HAVE_STRSTR, 1,
6720      [Define to 1 if you have the strstr function.])
6721    ac_cv_func_strstr="yes"
6722  else
6723    AC_MSG_RESULT([no])
6724    ac_cv_func_strstr="no"
6725  fi
6726])
6727
6728
6729dnl CURL_CHECK_FUNC_STRTOK_R
6730dnl -------------------------------------------------
6731dnl Verify if strtok_r is available, prototyped, and
6732dnl can be compiled. If all of these are true, and
6733dnl usage has not been previously disallowed with
6734dnl shell variable curl_disallow_strtok_r, then
6735dnl HAVE_STRTOK_R will be defined.
6736
6737AC_DEFUN([CURL_CHECK_FUNC_STRTOK_R], [
6738  AC_REQUIRE([CURL_INCLUDES_STRING])dnl
6739  #
6740  tst_links_strtok_r="unknown"
6741  tst_proto_strtok_r="unknown"
6742  tst_compi_strtok_r="unknown"
6743  tst_allow_strtok_r="unknown"
6744  #
6745  AC_MSG_CHECKING([if strtok_r can be linked])
6746  AC_LINK_IFELSE([
6747    AC_LANG_FUNC_LINK_TRY([strtok_r])
6748  ],[
6749    AC_MSG_RESULT([yes])
6750    tst_links_strtok_r="yes"
6751  ],[
6752    AC_MSG_RESULT([no])
6753    tst_links_strtok_r="no"
6754  ])
6755  #
6756  if test "$tst_links_strtok_r" = "yes"; then
6757    AC_MSG_CHECKING([if strtok_r is prototyped])
6758    AC_EGREP_CPP([strtok_r],[
6759      $curl_includes_string
6760    ],[
6761      AC_MSG_RESULT([yes])
6762      tst_proto_strtok_r="yes"
6763    ],[
6764      AC_MSG_RESULT([no])
6765      tst_proto_strtok_r="no"
6766    ])
6767  fi
6768  #
6769  if test "$tst_proto_strtok_r" = "yes"; then
6770    AC_MSG_CHECKING([if strtok_r is compilable])
6771    AC_COMPILE_IFELSE([
6772      AC_LANG_PROGRAM([[
6773        $curl_includes_string
6774      ]],[[
6775        if(0 != strtok_r(0, 0, 0))
6776          return 1;
6777      ]])
6778    ],[
6779      AC_MSG_RESULT([yes])
6780      tst_compi_strtok_r="yes"
6781    ],[
6782      AC_MSG_RESULT([no])
6783      tst_compi_strtok_r="no"
6784    ])
6785  fi
6786  #
6787  if test "$tst_compi_strtok_r" = "yes"; then
6788    AC_MSG_CHECKING([if strtok_r usage allowed])
6789    if test "x$curl_disallow_strtok_r" != "xyes"; then
6790      AC_MSG_RESULT([yes])
6791      tst_allow_strtok_r="yes"
6792    else
6793      AC_MSG_RESULT([no])
6794      tst_allow_strtok_r="no"
6795    fi
6796  fi
6797  #
6798  AC_MSG_CHECKING([if strtok_r might be used])
6799  if test "$tst_links_strtok_r" = "yes" &&
6800     test "$tst_proto_strtok_r" = "yes" &&
6801     test "$tst_compi_strtok_r" = "yes" &&
6802     test "$tst_allow_strtok_r" = "yes"; then
6803    AC_MSG_RESULT([yes])
6804    AC_DEFINE_UNQUOTED(HAVE_STRTOK_R, 1,
6805      [Define to 1 if you have the strtok_r function.])
6806    ac_cv_func_strtok_r="yes"
6807  else
6808    AC_MSG_RESULT([no])
6809    ac_cv_func_strtok_r="no"
6810  fi
6811])
6812
6813
6814dnl CURL_CHECK_FUNC_STRTOLL
6815dnl -------------------------------------------------
6816dnl Verify if strtoll is available, prototyped, and
6817dnl can be compiled. If all of these are true, and
6818dnl usage has not been previously disallowed with
6819dnl shell variable curl_disallow_strtoll, then
6820dnl HAVE_STRTOLL will be defined.
6821
6822AC_DEFUN([CURL_CHECK_FUNC_STRTOLL], [
6823  AC_REQUIRE([CURL_INCLUDES_STDLIB])dnl
6824  #
6825  tst_links_strtoll="unknown"
6826  tst_proto_strtoll="unknown"
6827  tst_compi_strtoll="unknown"
6828  tst_allow_strtoll="unknown"
6829  #
6830  AC_MSG_CHECKING([if strtoll can be linked])
6831  AC_LINK_IFELSE([
6832    AC_LANG_FUNC_LINK_TRY([strtoll])
6833  ],[
6834    AC_MSG_RESULT([yes])
6835    tst_links_strtoll="yes"
6836  ],[
6837    AC_MSG_RESULT([no])
6838    tst_links_strtoll="no"
6839  ])
6840  #
6841  if test "$tst_links_strtoll" = "yes"; then
6842    AC_MSG_CHECKING([if strtoll is prototyped])
6843    AC_EGREP_CPP([strtoll],[
6844      $curl_includes_stdlib
6845    ],[
6846      AC_MSG_RESULT([yes])
6847      tst_proto_strtoll="yes"
6848    ],[
6849      AC_MSG_RESULT([no])
6850      tst_proto_strtoll="no"
6851    ])
6852  fi
6853  #
6854  if test "$tst_proto_strtoll" = "yes"; then
6855    AC_MSG_CHECKING([if strtoll is compilable])
6856    AC_COMPILE_IFELSE([
6857      AC_LANG_PROGRAM([[
6858        $curl_includes_stdlib
6859      ]],[[
6860        if(0 != strtoll(0, 0, 0))
6861          return 1;
6862      ]])
6863    ],[
6864      AC_MSG_RESULT([yes])
6865      tst_compi_strtoll="yes"
6866    ],[
6867      AC_MSG_RESULT([no])
6868      tst_compi_strtoll="no"
6869    ])
6870  fi
6871  #
6872  if test "$tst_compi_strtoll" = "yes"; then
6873    AC_MSG_CHECKING([if strtoll usage allowed])
6874    if test "x$curl_disallow_strtoll" != "xyes"; then
6875      AC_MSG_RESULT([yes])
6876      tst_allow_strtoll="yes"
6877    else
6878      AC_MSG_RESULT([no])
6879      tst_allow_strtoll="no"
6880    fi
6881  fi
6882  #
6883  AC_MSG_CHECKING([if strtoll might be used])
6884  if test "$tst_links_strtoll" = "yes" &&
6885     test "$tst_proto_strtoll" = "yes" &&
6886     test "$tst_compi_strtoll" = "yes" &&
6887     test "$tst_allow_strtoll" = "yes"; then
6888    AC_MSG_RESULT([yes])
6889    AC_DEFINE_UNQUOTED(HAVE_STRTOLL, 1,
6890      [Define to 1 if you have the strtoll function.])
6891    ac_cv_func_strtoll="yes"
6892  else
6893    AC_MSG_RESULT([no])
6894    ac_cv_func_strtoll="no"
6895  fi
6896])
6897
6898
6899dnl CURL_CHECK_FUNC_WRITEV
6900dnl -------------------------------------------------
6901dnl Verify if writev is available, prototyped, and
6902dnl can be compiled. If all of these are true, and
6903dnl usage has not been previously disallowed with
6904dnl shell variable curl_disallow_writev, then
6905dnl HAVE_WRITEV will be defined.
6906
6907AC_DEFUN([CURL_CHECK_FUNC_WRITEV], [
6908  AC_REQUIRE([CURL_INCLUDES_SYS_UIO])dnl
6909  #
6910  tst_links_writev="unknown"
6911  tst_proto_writev="unknown"
6912  tst_compi_writev="unknown"
6913  tst_allow_writev="unknown"
6914  #
6915  AC_MSG_CHECKING([if writev can be linked])
6916  AC_LINK_IFELSE([
6917    AC_LANG_FUNC_LINK_TRY([writev])
6918  ],[
6919    AC_MSG_RESULT([yes])
6920    tst_links_writev="yes"
6921  ],[
6922    AC_MSG_RESULT([no])
6923    tst_links_writev="no"
6924  ])
6925  #
6926  if test "$tst_links_writev" = "yes"; then
6927    AC_MSG_CHECKING([if writev is prototyped])
6928    AC_EGREP_CPP([writev],[
6929      $curl_includes_sys_uio
6930    ],[
6931      AC_MSG_RESULT([yes])
6932      tst_proto_writev="yes"
6933    ],[
6934      AC_MSG_RESULT([no])
6935      tst_proto_writev="no"
6936    ])
6937  fi
6938  #
6939  if test "$tst_proto_writev" = "yes"; then
6940    AC_MSG_CHECKING([if writev is compilable])
6941    AC_COMPILE_IFELSE([
6942      AC_LANG_PROGRAM([[
6943        $curl_includes_sys_uio
6944      ]],[[
6945        if(0 != writev(0, 0, 0))
6946          return 1;
6947      ]])
6948    ],[
6949      AC_MSG_RESULT([yes])
6950      tst_compi_writev="yes"
6951    ],[
6952      AC_MSG_RESULT([no])
6953      tst_compi_writev="no"
6954    ])
6955  fi
6956  #
6957  if test "$tst_compi_writev" = "yes"; then
6958    AC_MSG_CHECKING([if writev usage allowed])
6959    if test "x$curl_disallow_writev" != "xyes"; then
6960      AC_MSG_RESULT([yes])
6961      tst_allow_writev="yes"
6962    else
6963      AC_MSG_RESULT([no])
6964      tst_allow_writev="no"
6965    fi
6966  fi
6967  #
6968  AC_MSG_CHECKING([if writev might be used])
6969  if test "$tst_links_writev" = "yes" &&
6970     test "$tst_proto_writev" = "yes" &&
6971     test "$tst_compi_writev" = "yes" &&
6972     test "$tst_allow_writev" = "yes"; then
6973    AC_MSG_RESULT([yes])
6974    AC_DEFINE_UNQUOTED(HAVE_WRITEV, 1,
6975      [Define to 1 if you have the writev function.])
6976    ac_cv_func_writev="yes"
6977  else
6978    AC_MSG_RESULT([no])
6979    ac_cv_func_writev="no"
6980  fi
6981])
6982