3 dnl CURL_CHECK_COMPILER_HALT_ON_ERROR
4 dnl -------------------------------------------------
5 dnl Verifies if the compiler actually halts after the
6 dnl compilation phase without generating any object
7 dnl code file, when the source compiles with errors.
9 AC_DEFUN([CURL_CHECK_COMPILER_HALT_ON_ERROR], [
10 AC_MSG_CHECKING([if compiler halts on compilation errors])
14 force compilation error
18 AC_MSG_ERROR([compiler does not halt on compilation errors.])
25 dnl CURL_CHECK_COMPILER_ARRAY_SIZE_NEGATIVE
26 dnl -------------------------------------------------
27 dnl Verifies if the compiler actually halts after the
28 dnl compilation phase without generating any object
29 dnl code file, when the source code tries to define a
30 dnl type for a constant array with negative dimension.
32 AC_DEFUN([CURL_CHECK_COMPILER_ARRAY_SIZE_NEGATIVE], [
33 AC_REQUIRE([CURL_CHECK_COMPILER_HALT_ON_ERROR])dnl
34 AC_MSG_CHECKING([if compiler halts on negative sized arrays])
37 typedef char bad_t[sizeof(char) == sizeof(int) ? -1 : -1 ];
43 AC_MSG_ERROR([compiler does not halt on negative sized arrays.])
50 dnl CURL_CHECK_DEF (SYMBOL, [INCLUDES], [SILENT])
51 dnl -------------------------------------------------
52 dnl Use the C preprocessor to find out if the given object-style symbol
53 dnl is defined and get its expansion. This macro will not use default
54 dnl includes even if no INCLUDES argument is given. This macro will run
55 dnl silently when invoked with three arguments. If the expansion would
56 dnl result in a set of double-quoted strings the returned expansion will
57 dnl actually be a single double-quoted string concatenating all them.
59 AC_DEFUN([CURL_CHECK_DEF], [
60 AS_VAR_PUSHDEF([ac_HaveDef], [curl_cv_have_def_$1])dnl
61 AS_VAR_PUSHDEF([ac_Def], [curl_cv_def_$1])dnl
62 if test -z "$SED"; then
63 AC_MSG_ERROR([SED not set. Cannot continue without SED being set.])
65 if test -z "$GREP"; then
66 AC_MSG_ERROR([GREP not set. Cannot continue without GREP being set.])
68 ifelse($3,,[AC_MSG_CHECKING([for preprocessor definition of $1])])
78 tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \
79 "$GREP" CURL_DEF_TOKEN 2>/dev/null | \
80 "$SED" 's/.*CURL_DEF_TOKEN[[ ]]//' 2>/dev/null | \
81 "$SED" 's/[["]][[ ]]*[["]]//g' 2>/dev/null`
82 if test -z "$tmp_exp" || test "$tmp_exp" = "$1"; then
86 if test -z "$tmp_exp"; then
87 AS_VAR_SET(ac_HaveDef, no)
88 ifelse($3,,[AC_MSG_RESULT([no])])
90 AS_VAR_SET(ac_HaveDef, yes)
91 AS_VAR_SET(ac_Def, $tmp_exp)
92 ifelse($3,,[AC_MSG_RESULT([$tmp_exp])])
94 AS_VAR_POPDEF([ac_Def])dnl
95 AS_VAR_POPDEF([ac_HaveDef])dnl
99 dnl CARES_CHECK_AIX_ALL_SOURCE
100 dnl -------------------------------------------------
101 dnl Provides a replacement of traditional AC_AIX with
102 dnl an uniform behaviour across all autoconf versions,
103 dnl and with our own placement rules.
105 AC_DEFUN([CARES_CHECK_AIX_ALL_SOURCE], [
106 AH_VERBATIM([_ALL_SOURCE],
107 [/* Define to 1 if OS is AIX. */
111 AC_BEFORE([$0], [AC_SYS_LARGEFILE])dnl
112 AC_BEFORE([$0], [CARES_CONFIGURE_REENTRANT])dnl
113 AC_MSG_CHECKING([if OS is AIX (to define _ALL_SOURCE)])
114 AC_EGREP_CPP([yes_this_is_aix],[
120 AC_DEFINE(_ALL_SOURCE)
127 dnl CURL_CHECK_HEADER_WINDOWS
128 dnl -------------------------------------------------
129 dnl Check for compilable and valid windows.h header
131 AC_DEFUN([CURL_CHECK_HEADER_WINDOWS], [
132 AC_CACHE_CHECK([for windows.h], [ac_cv_header_windows_h], [
136 #ifndef WIN32_LEAN_AND_MEAN
137 #define WIN32_LEAN_AND_MEAN
141 #if defined(__CYGWIN__) || defined(__CEGCC__)
142 HAVE_WINDOWS_H shall not be defined.
148 ac_cv_header_windows_h="yes"
150 ac_cv_header_windows_h="no"
153 case "$ac_cv_header_windows_h" in
155 AC_DEFINE_UNQUOTED(HAVE_WINDOWS_H, 1,
156 [Define to 1 if you have the windows.h header file.])
157 AC_DEFINE_UNQUOTED(WIN32_LEAN_AND_MEAN, 1,
158 [Define to avoid automatic inclusion of winsock.h])
164 dnl CURL_CHECK_NATIVE_WINDOWS
165 dnl -------------------------------------------------
166 dnl Check if building a native Windows target
168 AC_DEFUN([CURL_CHECK_NATIVE_WINDOWS], [
169 AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
170 AC_CACHE_CHECK([whether build target is a native Windows one], [ac_cv_native_windows], [
171 if test "$ac_cv_header_windows_h" = "no"; then
172 ac_cv_native_windows="no"
177 #if defined(__MINGW32__) || defined(__MINGW32CE__) || \
178 (defined(_MSC_VER) && (defined(_WIN32) || defined(_WIN64)))
181 Not a native Windows build target.
185 ac_cv_native_windows="yes"
187 ac_cv_native_windows="no"
191 case "$ac_cv_native_windows" in
193 AC_DEFINE_UNQUOTED(NATIVE_WINDOWS, 1,
194 [Define to 1 if you are building a native Windows target.])
200 dnl CURL_CHECK_HEADER_WINSOCK
201 dnl -------------------------------------------------
202 dnl Check for compilable and valid winsock.h header
204 AC_DEFUN([CURL_CHECK_HEADER_WINSOCK], [
205 AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
206 AC_CACHE_CHECK([for winsock.h], [ac_cv_header_winsock_h], [
210 #ifndef WIN32_LEAN_AND_MEAN
211 #define WIN32_LEAN_AND_MEAN
216 #if defined(__CYGWIN__) || defined(__CEGCC__)
217 HAVE_WINSOCK_H shall not be defined.
219 int dummy=WSACleanup();
223 ac_cv_header_winsock_h="yes"
225 ac_cv_header_winsock_h="no"
228 case "$ac_cv_header_winsock_h" in
230 AC_DEFINE_UNQUOTED(HAVE_WINSOCK_H, 1,
231 [Define to 1 if you have the winsock.h header file.])
237 dnl CURL_CHECK_HEADER_WINSOCK2
238 dnl -------------------------------------------------
239 dnl Check for compilable and valid winsock2.h header
241 AC_DEFUN([CURL_CHECK_HEADER_WINSOCK2], [
242 AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
243 AC_CACHE_CHECK([for winsock2.h], [ac_cv_header_winsock2_h], [
247 #ifndef WIN32_LEAN_AND_MEAN
248 #define WIN32_LEAN_AND_MEAN
251 #include <winsock2.h>
253 #if defined(__CYGWIN__) || defined(__CEGCC__) || defined(__MINGW32CE__)
254 HAVE_WINSOCK2_H shall not be defined.
256 int dummy=2*IPPROTO_ESP;
260 ac_cv_header_winsock2_h="yes"
262 ac_cv_header_winsock2_h="no"
265 case "$ac_cv_header_winsock2_h" in
267 AC_DEFINE_UNQUOTED(HAVE_WINSOCK2_H, 1,
268 [Define to 1 if you have the winsock2.h header file.])
274 dnl CURL_CHECK_HEADER_WS2TCPIP
275 dnl -------------------------------------------------
276 dnl Check for compilable and valid ws2tcpip.h header
278 AC_DEFUN([CURL_CHECK_HEADER_WS2TCPIP], [
279 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
280 AC_CACHE_CHECK([for ws2tcpip.h], [ac_cv_header_ws2tcpip_h], [
284 #ifndef WIN32_LEAN_AND_MEAN
285 #define WIN32_LEAN_AND_MEAN
288 #include <winsock2.h>
289 #include <ws2tcpip.h>
291 #if defined(__CYGWIN__) || defined(__CEGCC__) || defined(__MINGW32CE__)
292 HAVE_WS2TCPIP_H shall not be defined.
294 int dummy=2*IP_PKTINFO;
298 ac_cv_header_ws2tcpip_h="yes"
300 ac_cv_header_ws2tcpip_h="no"
303 case "$ac_cv_header_ws2tcpip_h" in
305 AC_DEFINE_UNQUOTED(HAVE_WS2TCPIP_H, 1,
306 [Define to 1 if you have the ws2tcpip.h header file.])
312 dnl CURL_CHECK_HEADER_MALLOC
313 dnl -------------------------------------------------
314 dnl Check for compilable and valid malloc.h header,
315 dnl and check if it is needed even with stdlib.h
317 AC_DEFUN([CURL_CHECK_HEADER_MALLOC], [
318 AC_CACHE_CHECK([for malloc.h], [ac_cv_header_malloc_h], [
323 void *p = malloc(10);
324 void *q = calloc(10,10);
329 ac_cv_header_malloc_h="yes"
331 ac_cv_header_malloc_h="no"
334 if test "$ac_cv_header_malloc_h" = "yes"; then
335 AC_DEFINE_UNQUOTED(HAVE_MALLOC_H, 1,
336 [Define to 1 if you have the malloc.h header file.])
342 void *p = malloc(10);
343 void *q = calloc(10,10);
348 curl_cv_need_header_malloc_h="no"
350 curl_cv_need_header_malloc_h="yes"
353 case "$curl_cv_need_header_malloc_h" in
355 AC_DEFINE_UNQUOTED(NEED_MALLOC_H, 1,
356 [Define to 1 if you need the malloc.h header file even with stdlib.h])
363 dnl CURL_CHECK_TYPE_SOCKLEN_T
364 dnl -------------------------------------------------
365 dnl Check for existing socklen_t type, and provide
366 dnl an equivalent type if socklen_t not available
368 AC_DEFUN([CURL_CHECK_TYPE_SOCKLEN_T], [
369 AC_REQUIRE([CURL_CHECK_HEADER_WS2TCPIP])dnl
370 AC_CHECK_TYPE([socklen_t], ,[
371 dnl socklen_t not available
372 AC_CACHE_CHECK([for socklen_t equivalent],
373 [curl_cv_socklen_t_equiv], [
374 curl_cv_socklen_t_equiv="unknown"
375 for arg1 in 'int' 'SOCKET'; do
376 for arg2 in "struct sockaddr" void; do
377 for t in int size_t unsigned long "unsigned long"; do
378 if test "$curl_cv_socklen_t_equiv" = "unknown"; then
382 #ifdef HAVE_WINDOWS_H
383 #ifndef WIN32_LEAN_AND_MEAN
384 #define WIN32_LEAN_AND_MEAN
387 #ifdef HAVE_WINSOCK2_H
388 #include <winsock2.h>
390 #ifdef HAVE_WINSOCK_H
394 #define GETPEERNCALLCONV PASCAL
396 #ifdef HAVE_SYS_TYPES_H
397 #include <sys/types.h>
399 #ifdef HAVE_SYS_SOCKET_H
400 #include <sys/socket.h>
402 #define GETPEERNCALLCONV
404 extern int GETPEERNCALLCONV getpeername($arg1, $arg2 *, $t *);
407 getpeername(0,0,&len);
410 curl_cv_socklen_t_equiv="$t"
417 case "$curl_cv_socklen_t_equiv" in
419 AC_MSG_ERROR([Cannot find a type to use in place of socklen_t])
422 AC_DEFINE_UNQUOTED(socklen_t, $curl_cv_socklen_t_equiv,
423 [Type to use in place of socklen_t when system does not provide it.])
428 #ifdef HAVE_WINDOWS_H
429 #ifndef WIN32_LEAN_AND_MEAN
430 #define WIN32_LEAN_AND_MEAN
433 #ifdef HAVE_WINSOCK2_H
434 #include <winsock2.h>
435 #ifdef HAVE_WS2TCPIP_H
436 #include <ws2tcpip.h>
440 #ifdef HAVE_SYS_TYPES_H
441 #include <sys/types.h>
443 #ifdef HAVE_SYS_SOCKET_H
444 #include <sys/socket.h>
451 dnl CURL_CHECK_FUNC_GETNAMEINFO
452 dnl -------------------------------------------------
453 dnl Test if the getnameinfo function is available,
454 dnl and check the types of five of its arguments.
455 dnl If the function succeeds HAVE_GETNAMEINFO will be
456 dnl defined, defining the types of the arguments in
457 dnl GETNAMEINFO_TYPE_ARG1, GETNAMEINFO_TYPE_ARG2,
458 dnl GETNAMEINFO_TYPE_ARG46 and GETNAMEINFO_TYPE_ARG7,
459 dnl and also defining the type qualifier of first
460 dnl argument in GETNAMEINFO_QUAL_ARG1.
462 AC_DEFUN([CURL_CHECK_FUNC_GETNAMEINFO], [
463 AC_REQUIRE([CURL_CHECK_HEADER_WS2TCPIP])dnl
464 AC_REQUIRE([CURL_CHECK_TYPE_SOCKLEN_T])dnl
465 AC_CHECK_HEADERS(sys/types.h sys/socket.h netdb.h)
467 AC_MSG_CHECKING([for getnameinfo])
469 AC_LANG_FUNC_LINK_TRY([getnameinfo])
472 curl_cv_getnameinfo="yes"
475 curl_cv_getnameinfo="no"
478 if test "$curl_cv_getnameinfo" != "yes"; then
479 AC_MSG_CHECKING([deeper for getnameinfo])
487 curl_cv_getnameinfo="yes"
489 AC_MSG_RESULT([but still no])
490 curl_cv_getnameinfo="no"
494 if test "$curl_cv_getnameinfo" != "yes"; then
495 AC_MSG_CHECKING([deeper and deeper for getnameinfo])
499 #ifdef HAVE_WINDOWS_H
500 #ifndef WIN32_LEAN_AND_MEAN
501 #define WIN32_LEAN_AND_MEAN
504 #ifdef HAVE_WINSOCK2_H
505 #include <winsock2.h>
506 #ifdef HAVE_WS2TCPIP_H
507 #include <ws2tcpip.h>
511 #ifdef HAVE_SYS_TYPES_H
512 #include <sys/types.h>
514 #ifdef HAVE_SYS_SOCKET_H
515 #include <sys/socket.h>
522 getnameinfo(0, 0, 0, 0, 0, 0, 0);
526 curl_cv_getnameinfo="yes"
528 AC_MSG_RESULT([but still no])
529 curl_cv_getnameinfo="no"
533 if test "$curl_cv_getnameinfo" = "yes"; then
534 AC_CACHE_CHECK([types of arguments for getnameinfo],
535 [curl_cv_func_getnameinfo_args], [
536 curl_cv_func_getnameinfo_args="unknown"
537 for gni_arg1 in 'struct sockaddr *' 'const struct sockaddr *' 'void *'; do
538 for gni_arg2 in 'socklen_t' 'size_t' 'int'; do
539 for gni_arg46 in 'size_t' 'int' 'socklen_t' 'unsigned int' 'DWORD'; do
540 for gni_arg7 in 'int' 'unsigned int'; do
541 if test "$curl_cv_func_getnameinfo_args" = "unknown"; then
545 #ifdef HAVE_WINDOWS_H
546 #ifndef WIN32_LEAN_AND_MEAN
547 #define WIN32_LEAN_AND_MEAN
549 #if (!defined(_WIN32_WINNT)) || (_WIN32_WINNT < 0x0501)
551 #define _WIN32_WINNT 0x0501
554 #ifdef HAVE_WINSOCK2_H
555 #include <winsock2.h>
556 #ifdef HAVE_WS2TCPIP_H
557 #include <ws2tcpip.h>
560 #define GNICALLCONV WSAAPI
562 #ifdef HAVE_SYS_TYPES_H
563 #include <sys/types.h>
565 #ifdef HAVE_SYS_SOCKET_H
566 #include <sys/socket.h>
573 extern int GNICALLCONV getnameinfo($gni_arg1, $gni_arg2,
579 $gni_arg46 hostlen=0;
580 $gni_arg46 servlen=0;
582 int res = getnameinfo(0, salen, 0, hostlen, 0, servlen, flags);
585 curl_cv_func_getnameinfo_args="$gni_arg1,$gni_arg2,$gni_arg46,$gni_arg7"
593 if test "$curl_cv_func_getnameinfo_args" = "unknown"; then
594 AC_MSG_WARN([Cannot find proper types to use for getnameinfo args])
595 AC_MSG_WARN([HAVE_GETNAMEINFO will not be defined])
597 gni_prev_IFS=$IFS; IFS=','
598 set dummy `echo "$curl_cv_func_getnameinfo_args" | sed 's/\*/\*/g'`
602 gni_qual_type_arg1=$[1]
604 AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG2, $[2],
605 [Define to the type of arg 2 for getnameinfo.])
606 AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG46, $[3],
607 [Define to the type of args 4 and 6 for getnameinfo.])
608 AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG7, $[4],
609 [Define to the type of arg 7 for getnameinfo.])
613 case $prev_sh_opts in
621 case "$gni_qual_type_arg1" in
624 gni_type_arg1=`echo $gni_qual_type_arg1 | sed 's/^const //'`
628 gni_type_arg1=$gni_qual_type_arg1
632 AC_DEFINE_UNQUOTED(GETNAMEINFO_QUAL_ARG1, $gni_qual_arg1,
633 [Define to the type qualifier of arg 1 for getnameinfo.])
634 AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG1, $gni_type_arg1,
635 [Define to the type of arg 1 for getnameinfo.])
637 case $prev_sh_opts in
645 AC_DEFINE_UNQUOTED(HAVE_GETNAMEINFO, 1,
646 [Define to 1 if you have the getnameinfo function.])
647 ac_cv_func_getnameinfo="yes"
653 dnl TYPE_SOCKADDR_STORAGE
654 dnl -------------------------------------------------
655 dnl Check for struct sockaddr_storage. Most IPv6-enabled
656 dnl hosts have it, but AIX 4.3 is one known exception.
658 AC_DEFUN([TYPE_SOCKADDR_STORAGE],
660 AC_CHECK_TYPE([struct sockaddr_storage],
661 AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE, 1,
662 [if struct sockaddr_storage is defined]), ,
665 #ifdef HAVE_WINDOWS_H
666 #ifndef WIN32_LEAN_AND_MEAN
667 #define WIN32_LEAN_AND_MEAN
670 #ifdef HAVE_WINSOCK2_H
671 #include <winsock2.h>
674 #ifdef HAVE_SYS_TYPES_H
675 #include <sys/types.h>
677 #ifdef HAVE_SYS_SOCKET_H
678 #include <sys/socket.h>
680 #ifdef HAVE_NETINET_IN_H
681 #include <netinet/in.h>
683 #ifdef HAVE_ARPA_INET_H
684 #include <arpa/inet.h>
691 dnl CURL_CHECK_NI_WITHSCOPEID
692 dnl -------------------------------------------------
693 dnl Check for working NI_WITHSCOPEID in getnameinfo()
695 AC_DEFUN([CURL_CHECK_NI_WITHSCOPEID], [
696 AC_REQUIRE([CURL_CHECK_FUNC_GETNAMEINFO])dnl
697 AC_REQUIRE([TYPE_SOCKADDR_STORAGE])dnl
698 AC_CHECK_HEADERS(stdio.h sys/types.h sys/socket.h \
699 netdb.h netinet/in.h arpa/inet.h)
701 AC_CACHE_CHECK([for working NI_WITHSCOPEID],
702 [ac_cv_working_ni_withscopeid], [
711 #ifdef HAVE_SYS_TYPES_H
712 #include <sys/types.h>
714 #ifdef HAVE_SYS_SOCKET_H
715 #include <sys/socket.h>
720 #ifdef HAVE_NETINET_IN_H
721 #include <netinet/in.h>
723 #ifdef HAVE_ARPA_INET_H
724 #include <arpa/inet.h>
727 #if defined(NI_WITHSCOPEID) && defined(HAVE_GETNAMEINFO)
728 #ifdef HAVE_STRUCT_SOCKADDR_STORAGE
729 struct sockaddr_storage sa;
731 unsigned char sa[256];
733 char hostbuf[NI_MAXHOST];
735 GETNAMEINFO_TYPE_ARG2 salen = (GETNAMEINFO_TYPE_ARG2)sizeof(sa);
736 GETNAMEINFO_TYPE_ARG46 hostlen = (GETNAMEINFO_TYPE_ARG46)sizeof(hostbuf);
737 GETNAMEINFO_TYPE_ARG7 flags = NI_NUMERICHOST | NI_NUMERICSERV | NI_WITHSCOPEID;
738 int fd = socket(AF_INET6, SOCK_STREAM, 0);
741 return 1; /* Error creating socket */
743 rc = getsockname(fd, (GETNAMEINFO_TYPE_ARG1)&sa, &salen);
745 perror("getsockname()");
746 return 2; /* Error retrieving socket name */
748 rc = getnameinfo((GETNAMEINFO_TYPE_ARG1)&sa, salen, hostbuf, hostlen, NULL, 0, flags);
750 printf("rc = %s\n", gai_strerror(rc));
751 return 3; /* Error translating socket address */
753 return 0; /* Ok, NI_WITHSCOPEID works */
755 return 4; /* Error, NI_WITHSCOPEID not defined or no getnameinfo() */
757 ]]) # AC-LANG-PROGRAM
759 # Exit code == 0. Program worked.
760 ac_cv_working_ni_withscopeid="yes"
762 # Exit code != 0. Program failed.
763 ac_cv_working_ni_withscopeid="no"
765 # Program is not run when cross-compiling. So we assume
766 # NI_WITHSCOPEID will work if we are able to compile it.
769 #include <sys/types.h>
770 #include <sys/socket.h>
773 unsigned int dummy= NI_NUMERICHOST | NI_NUMERICSERV | NI_WITHSCOPEID;
776 ac_cv_working_ni_withscopeid="yes"
778 ac_cv_working_ni_withscopeid="no"
779 ]) # AC-COMPILE-IFELSE
782 case "$ac_cv_working_ni_withscopeid" in
784 AC_DEFINE(HAVE_NI_WITHSCOPEID, 1,
785 [Define to 1 if NI_WITHSCOPEID exists and works.])
791 dnl CURL_CHECK_FUNC_RECV
792 dnl -------------------------------------------------
793 dnl Test if the socket recv() function is available,
794 dnl and check its return type and the types of its
795 dnl arguments. If the function succeeds HAVE_RECV
796 dnl will be defined, defining the types of the arguments
797 dnl in RECV_TYPE_ARG1, RECV_TYPE_ARG2, RECV_TYPE_ARG3
798 dnl and RECV_TYPE_ARG4, defining the type of the function
799 dnl return value in RECV_TYPE_RETV.
801 AC_DEFUN([CURL_CHECK_FUNC_RECV], [
802 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl
803 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
804 AC_CHECK_HEADERS(sys/types.h sys/socket.h)
806 AC_MSG_CHECKING([for recv])
810 #ifdef HAVE_WINDOWS_H
811 #ifndef WIN32_LEAN_AND_MEAN
812 #define WIN32_LEAN_AND_MEAN
815 #ifdef HAVE_WINSOCK2_H
816 #include <winsock2.h>
818 #ifdef HAVE_WINSOCK_H
823 #ifdef HAVE_SYS_TYPES_H
824 #include <sys/types.h>
826 #ifdef HAVE_SYS_SOCKET_H
827 #include <sys/socket.h>
841 if test "$curl_cv_recv" = "yes"; then
842 AC_CACHE_CHECK([types of args and return type for recv],
843 [curl_cv_func_recv_args], [
844 curl_cv_func_recv_args="unknown"
845 for recv_retv in 'int' 'ssize_t'; do
846 for recv_arg1 in 'int' 'ssize_t' 'SOCKET'; do
847 for recv_arg2 in 'char *' 'void *'; do
848 for recv_arg3 in 'size_t' 'int' 'socklen_t' 'unsigned int'; do
849 for recv_arg4 in 'int' 'unsigned int'; do
850 if test "$curl_cv_func_recv_args" = "unknown"; then
854 #ifdef HAVE_WINDOWS_H
855 #ifndef WIN32_LEAN_AND_MEAN
856 #define WIN32_LEAN_AND_MEAN
859 #ifdef HAVE_WINSOCK2_H
860 #include <winsock2.h>
862 #ifdef HAVE_WINSOCK_H
866 #define RECVCALLCONV PASCAL
868 #ifdef HAVE_SYS_TYPES_H
869 #include <sys/types.h>
871 #ifdef HAVE_SYS_SOCKET_H
872 #include <sys/socket.h>
876 extern $recv_retv RECVCALLCONV
877 recv($recv_arg1, $recv_arg2, $recv_arg3, $recv_arg4);
883 $recv_retv res = recv(s, buf, len, flags);
886 curl_cv_func_recv_args="$recv_arg1,$recv_arg2,$recv_arg3,$recv_arg4,$recv_retv"
895 if test "$curl_cv_func_recv_args" = "unknown"; then
896 AC_MSG_ERROR([Cannot find proper types to use for recv args])
898 recv_prev_IFS=$IFS; IFS=','
899 set dummy `echo "$curl_cv_func_recv_args" | sed 's/\*/\*/g'`
903 AC_DEFINE_UNQUOTED(RECV_TYPE_ARG1, $[1],
904 [Define to the type of arg 1 for recv.])
905 AC_DEFINE_UNQUOTED(RECV_TYPE_ARG2, $[2],
906 [Define to the type of arg 2 for recv.])
907 AC_DEFINE_UNQUOTED(RECV_TYPE_ARG3, $[3],
908 [Define to the type of arg 3 for recv.])
909 AC_DEFINE_UNQUOTED(RECV_TYPE_ARG4, $[4],
910 [Define to the type of arg 4 for recv.])
911 AC_DEFINE_UNQUOTED(RECV_TYPE_RETV, $[5],
912 [Define to the function return type for recv.])
914 AC_DEFINE_UNQUOTED(HAVE_RECV, 1,
915 [Define to 1 if you have the recv function.])
916 ac_cv_func_recv="yes"
919 AC_MSG_ERROR([Unable to link function recv])
924 dnl CURL_CHECK_FUNC_SEND
925 dnl -------------------------------------------------
926 dnl Test if the socket send() function is available,
927 dnl and check its return type and the types of its
928 dnl arguments. If the function succeeds HAVE_SEND
929 dnl will be defined, defining the types of the arguments
930 dnl in SEND_TYPE_ARG1, SEND_TYPE_ARG2, SEND_TYPE_ARG3
931 dnl and SEND_TYPE_ARG4, defining the type of the function
932 dnl return value in SEND_TYPE_RETV, and also defining the
933 dnl type qualifier of second argument in SEND_QUAL_ARG2.
935 AC_DEFUN([CURL_CHECK_FUNC_SEND], [
936 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl
937 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
938 AC_CHECK_HEADERS(sys/types.h sys/socket.h)
940 AC_MSG_CHECKING([for send])
944 #ifdef HAVE_WINDOWS_H
945 #ifndef WIN32_LEAN_AND_MEAN
946 #define WIN32_LEAN_AND_MEAN
949 #ifdef HAVE_WINSOCK2_H
950 #include <winsock2.h>
952 #ifdef HAVE_WINSOCK_H
957 #ifdef HAVE_SYS_TYPES_H
958 #include <sys/types.h>
960 #ifdef HAVE_SYS_SOCKET_H
961 #include <sys/socket.h>
975 if test "$curl_cv_send" = "yes"; then
976 AC_CACHE_CHECK([types of args and return type for send],
977 [curl_cv_func_send_args], [
978 curl_cv_func_send_args="unknown"
979 for send_retv in 'int' 'ssize_t'; do
980 for send_arg1 in 'int' 'ssize_t' 'SOCKET'; do
981 for send_arg2 in 'char *' 'void *' 'const char *' 'const void *'; do
982 for send_arg3 in 'size_t' 'int' 'socklen_t' 'unsigned int'; do
983 for send_arg4 in 'int' 'unsigned int'; do
984 if test "$curl_cv_func_send_args" = "unknown"; then
988 #ifdef HAVE_WINDOWS_H
989 #ifndef WIN32_LEAN_AND_MEAN
990 #define WIN32_LEAN_AND_MEAN
993 #ifdef HAVE_WINSOCK2_H
994 #include <winsock2.h>
996 #ifdef HAVE_WINSOCK_H
1000 #define SENDCALLCONV PASCAL
1002 #ifdef HAVE_SYS_TYPES_H
1003 #include <sys/types.h>
1005 #ifdef HAVE_SYS_SOCKET_H
1006 #include <sys/socket.h>
1008 #define SENDCALLCONV
1010 extern $send_retv SENDCALLCONV
1011 send($send_arg1, $send_arg2, $send_arg3, $send_arg4);
1016 $send_retv res = send(s, 0, len, flags);
1019 curl_cv_func_send_args="$send_arg1,$send_arg2,$send_arg3,$send_arg4,$send_retv"
1028 if test "$curl_cv_func_send_args" = "unknown"; then
1029 AC_MSG_ERROR([Cannot find proper types to use for send args])
1031 send_prev_IFS=$IFS; IFS=','
1032 set dummy `echo "$curl_cv_func_send_args" | sed 's/\*/\*/g'`
1036 send_qual_type_arg2=$[2]
1038 AC_DEFINE_UNQUOTED(SEND_TYPE_ARG1, $[1],
1039 [Define to the type of arg 1 for send.])
1040 AC_DEFINE_UNQUOTED(SEND_TYPE_ARG3, $[3],
1041 [Define to the type of arg 3 for send.])
1042 AC_DEFINE_UNQUOTED(SEND_TYPE_ARG4, $[4],
1043 [Define to the type of arg 4 for send.])
1044 AC_DEFINE_UNQUOTED(SEND_TYPE_RETV, $[5],
1045 [Define to the function return type for send.])
1049 case $prev_sh_opts in
1057 case "$send_qual_type_arg2" in
1059 send_qual_arg2=const
1060 send_type_arg2=`echo $send_qual_type_arg2 | sed 's/^const //'`
1064 send_type_arg2=$send_qual_type_arg2
1068 AC_DEFINE_UNQUOTED(SEND_QUAL_ARG2, $send_qual_arg2,
1069 [Define to the type qualifier of arg 2 for send.])
1070 AC_DEFINE_UNQUOTED(SEND_TYPE_ARG2, $send_type_arg2,
1071 [Define to the type of arg 2 for send.])
1073 case $prev_sh_opts in
1081 AC_DEFINE_UNQUOTED(HAVE_SEND, 1,
1082 [Define to 1 if you have the send function.])
1083 ac_cv_func_send="yes"
1086 AC_MSG_ERROR([Unable to link function send])
1091 dnl CURL_CHECK_FUNC_RECVFROM
1092 dnl -------------------------------------------------
1093 dnl Test if the socket recvfrom() function is available,
1094 dnl and check its return type and the types of its
1095 dnl arguments. If the function succeeds HAVE_RECVFROM
1096 dnl will be defined, defining the types of the arguments
1097 dnl in RECVFROM_TYPE_ARG1, RECVFROM_TYPE_ARG2, and so on
1098 dnl to RECVFROM_TYPE_ARG6, defining also the type of the
1099 dnl function return value in RECVFROM_TYPE_RETV.
1100 dnl Notice that the types returned for pointer arguments
1101 dnl will actually be the type pointed by the pointer.
1103 AC_DEFUN([CURL_CHECK_FUNC_RECVFROM], [
1104 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl
1105 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
1106 AC_CHECK_HEADERS(sys/types.h sys/socket.h)
1108 AC_MSG_CHECKING([for recvfrom])
1112 #ifdef HAVE_WINDOWS_H
1113 #ifndef WIN32_LEAN_AND_MEAN
1114 #define WIN32_LEAN_AND_MEAN
1116 #include <windows.h>
1117 #ifdef HAVE_WINSOCK2_H
1118 #include <winsock2.h>
1120 #ifdef HAVE_WINSOCK_H
1121 #include <winsock.h>
1125 #ifdef HAVE_SYS_TYPES_H
1126 #include <sys/types.h>
1128 #ifdef HAVE_SYS_SOCKET_H
1129 #include <sys/socket.h>
1133 recvfrom(0, 0, 0, 0, 0, 0);
1136 AC_MSG_RESULT([yes])
1137 curl_cv_recvfrom="yes"
1140 curl_cv_recvfrom="no"
1143 if test "$curl_cv_recvfrom" = "yes"; then
1144 AC_CACHE_CHECK([types of args and return type for recvfrom],
1145 [curl_cv_func_recvfrom_args], [
1146 curl_cv_func_recvfrom_args="unknown"
1147 for recvfrom_retv in 'int' 'ssize_t'; do
1148 for recvfrom_arg1 in 'int' 'ssize_t' 'SOCKET'; do
1149 for recvfrom_arg2 in 'char *' 'void *'; do
1150 for recvfrom_arg3 in 'size_t' 'int' 'socklen_t' 'unsigned int'; do
1151 for recvfrom_arg4 in 'int' 'unsigned int'; do
1152 for recvfrom_arg5 in 'struct sockaddr *' 'void *'; do
1153 for recvfrom_arg6 in 'socklen_t *' 'int *' 'unsigned int *' 'size_t *' 'void *'; do
1154 if test "$curl_cv_func_recvfrom_args" = "unknown"; then
1158 #ifdef HAVE_WINDOWS_H
1159 #ifndef WIN32_LEAN_AND_MEAN
1160 #define WIN32_LEAN_AND_MEAN
1162 #include <windows.h>
1163 #ifdef HAVE_WINSOCK2_H
1164 #include <winsock2.h>
1166 #ifdef HAVE_WINSOCK_H
1167 #include <winsock.h>
1170 #define RECVFROMCALLCONV PASCAL
1172 #ifdef HAVE_SYS_TYPES_H
1173 #include <sys/types.h>
1175 #ifdef HAVE_SYS_SOCKET_H
1176 #include <sys/socket.h>
1178 #define RECVFROMCALLCONV
1180 extern $recvfrom_retv RECVFROMCALLCONV
1181 recvfrom($recvfrom_arg1, $recvfrom_arg2,
1182 $recvfrom_arg3, $recvfrom_arg4,
1183 $recvfrom_arg5, $recvfrom_arg6);
1186 $recvfrom_arg2 buf=0;
1187 $recvfrom_arg3 len=0;
1188 $recvfrom_arg4 flags=0;
1189 $recvfrom_arg5 addr=0;
1190 $recvfrom_arg6 addrlen=0;
1191 $recvfrom_retv res=0;
1192 res = recvfrom(s, buf, len, flags, addr, addrlen);
1195 curl_cv_func_recvfrom_args="$recvfrom_arg1,$recvfrom_arg2,$recvfrom_arg3,$recvfrom_arg4,$recvfrom_arg5,$recvfrom_arg6,$recvfrom_retv"
1206 # Nearly last minute change for this release starts here
1207 AC_DEFINE_UNQUOTED(HAVE_RECVFROM, 1,
1208 [Define to 1 if you have the recvfrom function.])
1209 ac_cv_func_recvfrom="yes"
1210 # Nearly last minute change for this release ends here
1211 if test "$curl_cv_func_recvfrom_args" = "unknown"; then
1212 AC_MSG_WARN([Cannot find proper types to use for recvfrom args])
1214 recvfrom_prev_IFS=$IFS; IFS=','
1215 set dummy `echo "$curl_cv_func_recvfrom_args" | sed 's/\*/\*/g'`
1216 IFS=$recvfrom_prev_IFS
1219 recvfrom_ptrt_arg2=$[2]
1220 recvfrom_ptrt_arg5=$[5]
1221 recvfrom_ptrt_arg6=$[6]
1223 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG1, $[1],
1224 [Define to the type of arg 1 for recvfrom.])
1225 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG3, $[3],
1226 [Define to the type of arg 3 for recvfrom.])
1227 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG4, $[4],
1228 [Define to the type of arg 4 for recvfrom.])
1229 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_RETV, $[7],
1230 [Define to the function return type for recvfrom.])
1234 case $prev_sh_opts in
1242 recvfrom_type_arg2=`echo $recvfrom_ptrt_arg2 | sed 's/ \*//'`
1243 recvfrom_type_arg5=`echo $recvfrom_ptrt_arg5 | sed 's/ \*//'`
1244 recvfrom_type_arg6=`echo $recvfrom_ptrt_arg6 | sed 's/ \*//'`
1246 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG2, $recvfrom_type_arg2,
1247 [Define to the type pointed by arg 2 for recvfrom.])
1248 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG5, $recvfrom_type_arg5,
1249 [Define to the type pointed by arg 5 for recvfrom.])
1250 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG6, $recvfrom_type_arg6,
1251 [Define to the type pointed by arg 6 for recvfrom.])
1253 if test "$recvfrom_type_arg2" = "void"; then
1254 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG2_IS_VOID, 1,
1255 [Define to 1 if the type pointed by arg 2 for recvfrom is void.])
1257 if test "$recvfrom_type_arg5" = "void"; then
1258 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG5_IS_VOID, 1,
1259 [Define to 1 if the type pointed by arg 5 for recvfrom is void.])
1261 if test "$recvfrom_type_arg6" = "void"; then
1262 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG6_IS_VOID, 1,
1263 [Define to 1 if the type pointed by arg 6 for recvfrom is void.])
1266 case $prev_sh_opts in
1274 AC_DEFINE_UNQUOTED(HAVE_RECVFROM, 1,
1275 [Define to 1 if you have the recvfrom function.])
1276 ac_cv_func_recvfrom="yes"
1279 AC_MSG_WARN([Unable to link function recvfrom])
1280 AC_MSG_WARN([Your system will be vulnerable to some forms of DNS cache poisoning])
1285 dnl CURL_CHECK_MSG_NOSIGNAL
1286 dnl -------------------------------------------------
1287 dnl Check for MSG_NOSIGNAL
1289 AC_DEFUN([CURL_CHECK_MSG_NOSIGNAL], [
1290 AC_CHECK_HEADERS(sys/types.h sys/socket.h)
1291 AC_CACHE_CHECK([for MSG_NOSIGNAL], [ac_cv_msg_nosignal], [
1295 #ifdef HAVE_WINDOWS_H
1296 #ifndef WIN32_LEAN_AND_MEAN
1297 #define WIN32_LEAN_AND_MEAN
1299 #include <windows.h>
1300 #ifdef HAVE_WINSOCK2_H
1301 #include <winsock2.h>
1303 #ifdef HAVE_WINSOCK_H
1304 #include <winsock.h>
1308 #ifdef HAVE_SYS_TYPES_H
1309 #include <sys/types.h>
1311 #ifdef HAVE_SYS_SOCKET_H
1312 #include <sys/socket.h>
1316 int flag=MSG_NOSIGNAL;
1319 ac_cv_msg_nosignal="yes"
1321 ac_cv_msg_nosignal="no"
1324 case "$ac_cv_msg_nosignal" in
1326 AC_DEFINE_UNQUOTED(HAVE_MSG_NOSIGNAL, 1,
1327 [Define to 1 if you have the MSG_NOSIGNAL flag.])
1333 dnl CURL_CHECK_STRUCT_TIMEVAL
1334 dnl -------------------------------------------------
1335 dnl Check for timeval struct
1337 AC_DEFUN([CURL_CHECK_STRUCT_TIMEVAL], [
1338 AC_REQUIRE([AC_HEADER_TIME])dnl
1339 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl
1340 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
1341 AC_CHECK_HEADERS(sys/types.h sys/time.h time.h)
1342 AC_CACHE_CHECK([for struct timeval], [ac_cv_struct_timeval], [
1346 #ifdef HAVE_WINDOWS_H
1347 #ifndef WIN32_LEAN_AND_MEAN
1348 #define WIN32_LEAN_AND_MEAN
1350 #include <windows.h>
1351 #ifdef HAVE_WINSOCK2_H
1352 #include <winsock2.h>
1354 #ifdef HAVE_WINSOCK_H
1355 #include <winsock.h>
1359 #ifdef HAVE_SYS_TYPES_H
1360 #include <sys/types.h>
1362 #ifdef HAVE_SYS_TIME_H
1363 #include <sys/time.h>
1364 #ifdef TIME_WITH_SYS_TIME
1378 ac_cv_struct_timeval="yes"
1380 ac_cv_struct_timeval="no"
1383 case "$ac_cv_struct_timeval" in
1385 AC_DEFINE_UNQUOTED(HAVE_STRUCT_TIMEVAL, 1,
1386 [Define to 1 if you have the timeval struct.])
1392 dnl TYPE_SIG_ATOMIC_T
1393 dnl -------------------------------------------------
1394 dnl Check if the sig_atomic_t type is available, and
1395 dnl verify if it is already defined as volatile.
1397 AC_DEFUN([TYPE_SIG_ATOMIC_T], [
1398 AC_CHECK_HEADERS(signal.h)
1399 AC_CHECK_TYPE([sig_atomic_t],[
1400 AC_DEFINE(HAVE_SIG_ATOMIC_T, 1,
1401 [Define to 1 if sig_atomic_t is an available typedef.])
1403 #ifdef HAVE_SIGNAL_H
1407 case "$ac_cv_type_sig_atomic_t" in
1410 AC_MSG_CHECKING([if sig_atomic_t is already defined as volatile])
1413 #ifdef HAVE_SIGNAL_H
1417 static volatile sig_atomic_t dummy = 0;
1421 ac_cv_sig_atomic_t_volatile="no"
1423 AC_MSG_RESULT([yes])
1424 ac_cv_sig_atomic_t_volatile="yes"
1427 if test "$ac_cv_sig_atomic_t_volatile" = "yes"; then
1428 AC_DEFINE(HAVE_SIG_ATOMIC_T_VOLATILE, 1,
1429 [Define to 1 if sig_atomic_t is already defined as volatile.])
1436 dnl CURL_CHECK_NONBLOCKING_SOCKET
1437 dnl -------------------------------------------------
1438 dnl Check for how to set a socket to non-blocking state. There seems to exist
1439 dnl four known different ways, with the one used almost everywhere being POSIX
1440 dnl and XPG3, while the other different ways for different systems (old BSD,
1441 dnl Windows and Amiga).
1443 dnl There are two known platforms (AIX 3.x and SunOS 4.1.x) where the
1444 dnl O_NONBLOCK define is found but does not work. This condition is attempted
1445 dnl to get caught in this script by using an excessive number of #ifdefs...
1447 AC_DEFUN([CURL_CHECK_NONBLOCKING_SOCKET], [
1448 AC_MSG_CHECKING([non-blocking sockets style])
1453 /* headers for O_NONBLOCK test */
1454 #include <sys/types.h>
1458 #if defined(sun) || defined(__sun__) || \
1459 defined(__SUNPRO_C) || defined(__SUNPRO_CC)
1460 # if defined(__SVR4) || defined(__srv4__)
1461 # define PLATFORM_SOLARIS
1463 # define PLATFORM_SUNOS4
1466 #if (defined(_AIX) || defined(__xlC__)) && !defined(_AIX41)
1467 # define PLATFORM_AIX_V3
1470 #if defined(PLATFORM_SUNOS4) || defined(PLATFORM_AIX_V3) || defined(__BEOS__)
1471 #error "O_NONBLOCK does not work on this platform"
1474 /* O_NONBLOCK source test */
1476 int flags = fcntl(socket, F_SETFL, flags | O_NONBLOCK);
1479 dnl the O_NONBLOCK test was fine
1480 nonblock="O_NONBLOCK"
1481 AC_DEFINE(HAVE_O_NONBLOCK, 1,
1482 [use O_NONBLOCK for non-blocking sockets])
1485 if test "$nonblock" = "unknown"; then
1488 /* headers for FIONBIO test */
1490 #include <stropts.h>
1492 /* FIONBIO source test (old-style unix) */
1494 int flags = ioctl(socket, FIONBIO, &flags);
1497 dnl FIONBIO test was good
1499 AC_DEFINE(HAVE_FIONBIO, 1,
1500 [use FIONBIO for non-blocking sockets])
1504 if test "$nonblock" = "unknown"; then
1507 /* headers for ioctlsocket test (Windows) */
1509 #ifdef HAVE_WINDOWS_H
1510 #ifndef WIN32_LEAN_AND_MEAN
1511 #define WIN32_LEAN_AND_MEAN
1513 #include <windows.h>
1514 #ifdef HAVE_WINSOCK2_H
1515 #include <winsock2.h>
1517 #ifdef HAVE_WINSOCK_H
1518 #include <winsock.h>
1523 /* ioctlsocket source code (Windows) */
1525 unsigned long flags = 0;
1526 sd = socket(0, 0, 0);
1527 ioctlsocket(sd, FIONBIO, &flags);
1530 dnl ioctlsocket test was good
1531 nonblock="ioctlsocket"
1532 AC_DEFINE(HAVE_IOCTLSOCKET, 1,
1533 [use ioctlsocket() for non-blocking sockets])
1537 if test "$nonblock" = "unknown"; then
1540 /* headers for IoctlSocket test (Amiga?) */
1541 #include <sys/ioctl.h>
1543 /* IoctlSocket source code (Amiga?) */
1545 int flags = IoctlSocket(socket, FIONBIO, (long)1);
1548 dnl Ioctlsocket test was good
1549 nonblock="IoctlSocket"
1550 AC_DEFINE(HAVE_IOCTLSOCKET_CASE, 1,
1551 [use Ioctlsocket() for non-blocking sockets])
1555 if test "$nonblock" = "unknown"; then
1558 /* headers for SO_NONBLOCK test (BeOS) */
1561 /* SO_NONBLOCK source code (BeOS) */
1564 int flags = setsockopt(socket, SOL_SOCKET, SO_NONBLOCK, &b, sizeof(b));
1567 dnl the SO_NONBLOCK test was good
1568 nonblock="SO_NONBLOCK"
1569 AC_DEFINE(HAVE_SO_NONBLOCK, 1,
1570 [use SO_NONBLOCK for non-blocking sockets])
1574 AC_MSG_RESULT($nonblock)
1576 if test "$nonblock" = "unknown"; then
1577 AC_DEFINE(HAVE_DISABLED_NONBLOCKING, 1,
1578 [disabled non-blocking sockets])
1579 AC_MSG_WARN([non-block sockets disabled])
1585 dnl -------------------------------------------------
1586 dnl Check for in_addr_t: it is used to receive the return code of inet_addr()
1587 dnl and a few other things.
1589 AC_DEFUN([TYPE_IN_ADDR_T], [
1590 AC_CHECK_TYPE([in_addr_t], ,[
1591 dnl in_addr_t not available
1592 AC_CACHE_CHECK([for in_addr_t equivalent],
1593 [curl_cv_in_addr_t_equiv], [
1594 curl_cv_in_addr_t_equiv="unknown"
1595 for t in "unsigned long" int size_t unsigned long; do
1596 if test "$curl_cv_in_addr_t_equiv" = "unknown"; then
1600 #ifdef HAVE_WINDOWS_H
1601 #ifndef WIN32_LEAN_AND_MEAN
1602 #define WIN32_LEAN_AND_MEAN
1604 #include <windows.h>
1605 #ifdef HAVE_WINSOCK2_H
1606 #include <winsock2.h>
1608 #ifdef HAVE_WINSOCK_H
1609 #include <winsock.h>
1613 #ifdef HAVE_SYS_TYPES_H
1614 #include <sys/types.h>
1616 #ifdef HAVE_SYS_SOCKET_H
1617 #include <sys/socket.h>
1619 #ifdef HAVE_NETINET_IN_H
1620 #include <netinet/in.h>
1622 #ifdef HAVE_ARPA_INET_H
1623 #include <arpa/inet.h>
1627 $t data = inet_addr ("1.2.3.4");
1630 curl_cv_in_addr_t_equiv="$t"
1635 case "$curl_cv_in_addr_t_equiv" in
1637 AC_MSG_ERROR([Cannot find a type to use in place of in_addr_t])
1640 AC_DEFINE_UNQUOTED(in_addr_t, $curl_cv_in_addr_t_equiv,
1641 [Type to use in place of in_addr_t when system does not provide it.])
1646 #ifdef HAVE_WINDOWS_H
1647 #ifndef WIN32_LEAN_AND_MEAN
1648 #define WIN32_LEAN_AND_MEAN
1650 #include <windows.h>
1651 #ifdef HAVE_WINSOCK2_H
1652 #include <winsock2.h>
1654 #ifdef HAVE_WINSOCK_H
1655 #include <winsock.h>
1659 #ifdef HAVE_SYS_TYPES_H
1660 #include <sys/types.h>
1662 #ifdef HAVE_SYS_SOCKET_H
1663 #include <sys/socket.h>
1665 #ifdef HAVE_NETINET_IN_H
1666 #include <netinet/in.h>
1668 #ifdef HAVE_ARPA_INET_H
1669 #include <arpa/inet.h>
1676 dnl CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC
1677 dnl -------------------------------------------------
1678 dnl Check if monotonic clock_gettime is available.
1680 AC_DEFUN([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC], [
1681 AC_REQUIRE([AC_HEADER_TIME])dnl
1682 AC_CHECK_HEADERS(sys/types.h sys/time.h time.h)
1683 AC_MSG_CHECKING([for monotonic clock_gettime])
1686 #ifdef HAVE_SYS_TYPES_H
1687 #include <sys/types.h>
1689 #ifdef HAVE_SYS_TIME_H
1690 #include <sys/time.h>
1691 #ifdef TIME_WITH_SYS_TIME
1701 (void)clock_gettime(CLOCK_MONOTONIC, &ts);
1704 AC_MSG_RESULT([yes])
1705 ac_cv_func_clock_gettime="yes"
1708 ac_cv_func_clock_gettime="no"
1710 dnl Definition of HAVE_CLOCK_GETTIME_MONOTONIC is intentionally postponed
1711 dnl until library linking and run-time checks for clock_gettime succeed.
1715 dnl CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC
1716 dnl -------------------------------------------------
1717 dnl If monotonic clock_gettime is available then,
1718 dnl check and prepended to LIBS any needed libraries.
1720 AC_DEFUN([CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC], [
1721 AC_REQUIRE([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC])dnl
1723 if test "$ac_cv_func_clock_gettime" = "yes"; then
1725 AC_MSG_CHECKING([for clock_gettime in libraries])
1727 curl_cv_save_LIBS="$LIBS"
1728 curl_cv_gclk_LIBS="unknown"
1730 for x_xlibs in '' '-lrt' '-lposix4' ; do
1731 if test "$curl_cv_gclk_LIBS" = "unknown"; then
1732 if test -z "$x_xlibs"; then
1733 LIBS="$curl_cv_save_LIBS"
1735 LIBS="$x_xlibs $curl_cv_save_LIBS"
1739 #ifdef HAVE_SYS_TYPES_H
1740 #include <sys/types.h>
1742 #ifdef HAVE_SYS_TIME_H
1743 #include <sys/time.h>
1744 #ifdef TIME_WITH_SYS_TIME
1754 (void)clock_gettime(CLOCK_MONOTONIC, &ts);
1757 curl_cv_gclk_LIBS="$x_xlibs"
1762 LIBS="$curl_cv_save_LIBS"
1764 case X-"$curl_cv_gclk_LIBS" in
1766 AC_MSG_RESULT([cannot find clock_gettime])
1767 AC_MSG_WARN([HAVE_CLOCK_GETTIME_MONOTONIC will not be defined])
1768 ac_cv_func_clock_gettime="no"
1771 AC_MSG_RESULT([no additional lib required])
1772 ac_cv_func_clock_gettime="yes"
1775 if test -z "$curl_cv_save_LIBS"; then
1776 LIBS="$curl_cv_gclk_LIBS"
1778 LIBS="$curl_cv_gclk_LIBS $curl_cv_save_LIBS"
1780 AC_MSG_RESULT([$curl_cv_gclk_LIBS])
1781 ac_cv_func_clock_gettime="yes"
1785 dnl only do runtime verification when not cross-compiling
1786 if test "x$cross_compiling" != "xyes" &&
1787 test "$ac_cv_func_clock_gettime" = "yes"; then
1788 AC_MSG_CHECKING([if monotonic clock_gettime works])
1791 #ifdef HAVE_STDLIB_H
1794 #ifdef HAVE_SYS_TYPES_H
1795 #include <sys/types.h>
1797 #ifdef HAVE_SYS_TIME_H
1798 #include <sys/time.h>
1799 #ifdef TIME_WITH_SYS_TIME
1809 if (0 == clock_gettime(CLOCK_MONOTONIC, &ts))
1815 AC_MSG_RESULT([yes])
1818 AC_MSG_WARN([HAVE_CLOCK_GETTIME_MONOTONIC will not be defined])
1819 ac_cv_func_clock_gettime="no"
1820 LIBS="$curl_cv_save_LIBS"
1824 case "$ac_cv_func_clock_gettime" in
1826 AC_DEFINE_UNQUOTED(HAVE_CLOCK_GETTIME_MONOTONIC, 1,
1827 [Define to 1 if you have the clock_gettime function and monotonic timer.])
1836 dnl This macro determines if the specified struct exists in the specified file
1838 dnl CARES_CHECK_STRUCT(headers, struct name, if found, [if not found])
1840 AC_DEFUN([CARES_CHECK_STRUCT], [
1841 AC_MSG_CHECKING([for struct $2])
1842 AC_TRY_COMPILE([$1],
1844 struct $2 struct_instance;
1845 ], ac_struct="yes", ac_found="no")
1846 if test "$ac_struct" = "yes" ; then
1855 dnl This macro determines if the specified constant exists in the specified file
1857 dnl CARES_CHECK_CONSTANT(headers, constant name, if found, [if not found])
1859 AC_DEFUN([CARES_CHECK_CONSTANT], [
1860 AC_MSG_CHECKING([for $2])
1861 AC_EGREP_CPP(VARIABLEWASDEFINED,
1870 ], ac_constant="yes", ac_constant="no"
1872 if test "$ac_constant" = "yes" ; then