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