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.
57 AC_DEFUN([CURL_CHECK_DEF], [
58 AS_VAR_PUSHDEF([ac_HaveDef], [curl_cv_have_def_$1])dnl
59 AS_VAR_PUSHDEF([ac_Def], [curl_cv_def_$1])dnl
60 ifelse($3,,[AC_MSG_CHECKING([for preprocessor definition of $1])])
70 tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \
71 "$GREP" CURL_DEF_TOKEN 2>/dev/null | \
72 "$SED" 's/.*CURL_DEF_TOKEN[[ ]]//' 2>/dev/null | \
73 "$SED" 'q' 2>/dev/null`
74 if test "$tmp_exp" = "$1"; then
78 if test -z "$tmp_exp"; then
79 AS_VAR_SET([ac_HaveDef], [no])
80 ifelse($3,,[AC_MSG_RESULT([no])])
82 AS_VAR_SET([ac_HaveDef], [yes])
83 AS_VAR_SET([ac_Def], [$tmp_exp])
84 ifelse($3,,[AC_MSG_RESULT([$tmp_exp])])
86 AS_VAR_POPDEF([ac_Def])dnl
87 AS_VAR_POPDEF([ac_HaveDef])dnl
91 dnl CURL_CHECK_HEADER_WINDOWS
92 dnl -------------------------------------------------
93 dnl Check for compilable and valid windows.h header
95 AC_DEFUN([CURL_CHECK_HEADER_WINDOWS], [
96 AC_CACHE_CHECK([for windows.h], [ac_cv_header_windows_h], [
100 #ifndef WIN32_LEAN_AND_MEAN
101 #define WIN32_LEAN_AND_MEAN
105 #if defined(__CYGWIN__) || defined(__CEGCC__)
106 HAVE_WINDOWS_H shall not be defined.
112 ac_cv_header_windows_h="yes"
114 ac_cv_header_windows_h="no"
117 case "$ac_cv_header_windows_h" in
119 AC_DEFINE_UNQUOTED(HAVE_WINDOWS_H, 1,
120 [Define to 1 if you have the windows.h header file.])
121 AC_DEFINE_UNQUOTED(WIN32_LEAN_AND_MEAN, 1,
122 [Define to avoid automatic inclusion of winsock.h])
128 dnl CURL_CHECK_NATIVE_WINDOWS
129 dnl -------------------------------------------------
130 dnl Check if building a native Windows target
132 AC_DEFUN([CURL_CHECK_NATIVE_WINDOWS], [
133 AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
134 AC_CACHE_CHECK([whether build target is a native Windows one], [ac_cv_native_windows], [
135 if test "$ac_cv_header_windows_h" = "no"; then
136 ac_cv_native_windows="no"
141 #if defined(__MINGW32__) || defined(__MINGW32CE__) || \
142 (defined(_MSC_VER) && (defined(_WIN32) || defined(_WIN64)))
145 Not a native Windows build target.
149 ac_cv_native_windows="yes"
151 ac_cv_native_windows="no"
155 case "$ac_cv_native_windows" in
157 AC_DEFINE_UNQUOTED(NATIVE_WINDOWS, 1,
158 [Define to 1 if you are building a native Windows target.])
164 dnl CURL_CHECK_HEADER_WINSOCK
165 dnl -------------------------------------------------
166 dnl Check for compilable and valid winsock.h header
168 AC_DEFUN([CURL_CHECK_HEADER_WINSOCK], [
169 AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
170 AC_CACHE_CHECK([for winsock.h], [ac_cv_header_winsock_h], [
174 #ifndef WIN32_LEAN_AND_MEAN
175 #define WIN32_LEAN_AND_MEAN
180 #if defined(__CYGWIN__) || defined(__CEGCC__)
181 HAVE_WINSOCK_H shall not be defined.
183 int dummy=WSACleanup();
187 ac_cv_header_winsock_h="yes"
189 ac_cv_header_winsock_h="no"
192 case "$ac_cv_header_winsock_h" in
194 AC_DEFINE_UNQUOTED(HAVE_WINSOCK_H, 1,
195 [Define to 1 if you have the winsock.h header file.])
201 dnl CURL_CHECK_HEADER_WINSOCK2
202 dnl -------------------------------------------------
203 dnl Check for compilable and valid winsock2.h header
205 AC_DEFUN([CURL_CHECK_HEADER_WINSOCK2], [
206 AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
207 AC_CACHE_CHECK([for winsock2.h], [ac_cv_header_winsock2_h], [
211 #ifndef WIN32_LEAN_AND_MEAN
212 #define WIN32_LEAN_AND_MEAN
215 #include <winsock2.h>
217 #if defined(__CYGWIN__) || defined(__CEGCC__) || defined(__MINGW32CE__)
218 HAVE_WINSOCK2_H shall not be defined.
220 int dummy=2*IPPROTO_ESP;
224 ac_cv_header_winsock2_h="yes"
226 ac_cv_header_winsock2_h="no"
229 case "$ac_cv_header_winsock2_h" in
231 AC_DEFINE_UNQUOTED(HAVE_WINSOCK2_H, 1,
232 [Define to 1 if you have the winsock2.h header file.])
238 dnl CURL_CHECK_HEADER_WS2TCPIP
239 dnl -------------------------------------------------
240 dnl Check for compilable and valid ws2tcpip.h header
242 AC_DEFUN([CURL_CHECK_HEADER_WS2TCPIP], [
243 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
244 AC_CACHE_CHECK([for ws2tcpip.h], [ac_cv_header_ws2tcpip_h], [
248 #ifndef WIN32_LEAN_AND_MEAN
249 #define WIN32_LEAN_AND_MEAN
252 #include <winsock2.h>
253 #include <ws2tcpip.h>
255 #if defined(__CYGWIN__) || defined(__CEGCC__) || defined(__MINGW32CE__)
256 HAVE_WS2TCPIP_H shall not be defined.
258 int dummy=2*IP_PKTINFO;
262 ac_cv_header_ws2tcpip_h="yes"
264 ac_cv_header_ws2tcpip_h="no"
267 case "$ac_cv_header_ws2tcpip_h" in
269 AC_DEFINE_UNQUOTED(HAVE_WS2TCPIP_H, 1,
270 [Define to 1 if you have the ws2tcpip.h header file.])
276 dnl CURL_CHECK_HEADER_MALLOC
277 dnl -------------------------------------------------
278 dnl Check for compilable and valid malloc.h header,
279 dnl and check if it is needed even with stdlib.h
281 AC_DEFUN([CURL_CHECK_HEADER_MALLOC], [
282 AC_CACHE_CHECK([for malloc.h], [ac_cv_header_malloc_h], [
287 void *p = malloc(10);
288 void *q = calloc(10,10);
293 ac_cv_header_malloc_h="yes"
295 ac_cv_header_malloc_h="no"
298 if test "$ac_cv_header_malloc_h" = "yes"; then
299 AC_DEFINE_UNQUOTED(HAVE_MALLOC_H, 1,
300 [Define to 1 if you have the malloc.h header file.])
306 void *p = malloc(10);
307 void *q = calloc(10,10);
312 curl_cv_need_header_malloc_h="no"
314 curl_cv_need_header_malloc_h="yes"
317 case "$curl_cv_need_header_malloc_h" in
319 AC_DEFINE_UNQUOTED(NEED_MALLOC_H, 1,
320 [Define to 1 if you need the malloc.h header file even with stdlib.h])
327 dnl CURL_CHECK_TYPE_SOCKLEN_T
328 dnl -------------------------------------------------
329 dnl Check for existing socklen_t type, and provide
330 dnl an equivalent type if socklen_t not available
332 AC_DEFUN([CURL_CHECK_TYPE_SOCKLEN_T], [
333 AC_REQUIRE([CURL_CHECK_HEADER_WS2TCPIP])dnl
334 AC_CHECK_TYPE([socklen_t], ,[
335 dnl socklen_t not available
336 AC_CACHE_CHECK([for socklen_t equivalent],
337 [curl_cv_socklen_t_equiv], [
338 curl_cv_socklen_t_equiv="unknown"
339 for arg1 in 'int' 'SOCKET'; do
340 for arg2 in "struct sockaddr" void; do
341 for t in int size_t unsigned long "unsigned long"; do
342 if test "$curl_cv_socklen_t_equiv" = "unknown"; then
346 #ifdef HAVE_WINDOWS_H
347 #ifndef WIN32_LEAN_AND_MEAN
348 #define WIN32_LEAN_AND_MEAN
351 #ifdef HAVE_WINSOCK2_H
352 #include <winsock2.h>
354 #ifdef HAVE_WINSOCK_H
358 #define GETPEERNCALLCONV PASCAL
360 #ifdef HAVE_SYS_TYPES_H
361 #include <sys/types.h>
363 #ifdef HAVE_SYS_SOCKET_H
364 #include <sys/socket.h>
366 #define GETPEERNCALLCONV
368 extern int GETPEERNCALLCONV getpeername($arg1, $arg2 *, $t *);
371 getpeername(0,0,&len);
374 curl_cv_socklen_t_equiv="$t"
381 case "$curl_cv_socklen_t_equiv" in
383 AC_MSG_ERROR([Cannot find a type to use in place of socklen_t])
386 AC_DEFINE_UNQUOTED(socklen_t, $curl_cv_socklen_t_equiv,
387 [Type to use in place of socklen_t when system does not provide it.])
392 #ifdef HAVE_WINDOWS_H
393 #ifndef WIN32_LEAN_AND_MEAN
394 #define WIN32_LEAN_AND_MEAN
397 #ifdef HAVE_WINSOCK2_H
398 #include <winsock2.h>
399 #ifdef HAVE_WS2TCPIP_H
400 #include <ws2tcpip.h>
404 #ifdef HAVE_SYS_TYPES_H
405 #include <sys/types.h>
407 #ifdef HAVE_SYS_SOCKET_H
408 #include <sys/socket.h>
415 dnl CURL_CHECK_FUNC_GETNAMEINFO
416 dnl -------------------------------------------------
417 dnl Test if the getnameinfo function is available,
418 dnl and check the types of five of its arguments.
419 dnl If the function succeeds HAVE_GETNAMEINFO will be
420 dnl defined, defining the types of the arguments in
421 dnl GETNAMEINFO_TYPE_ARG1, GETNAMEINFO_TYPE_ARG2,
422 dnl GETNAMEINFO_TYPE_ARG46 and GETNAMEINFO_TYPE_ARG7,
423 dnl and also defining the type qualifier of first
424 dnl argument in GETNAMEINFO_QUAL_ARG1.
426 AC_DEFUN([CURL_CHECK_FUNC_GETNAMEINFO], [
427 AC_REQUIRE([CURL_CHECK_HEADER_WS2TCPIP])dnl
428 AC_REQUIRE([CURL_CHECK_TYPE_SOCKLEN_T])dnl
429 AC_CHECK_HEADERS(sys/types.h sys/socket.h netdb.h)
431 AC_MSG_CHECKING([for getnameinfo])
433 AC_LANG_FUNC_LINK_TRY([getnameinfo])
436 curl_cv_getnameinfo="yes"
439 curl_cv_getnameinfo="no"
442 if test "$curl_cv_getnameinfo" != "yes"; then
443 AC_MSG_CHECKING([deeper for getnameinfo])
451 curl_cv_getnameinfo="yes"
453 AC_MSG_RESULT([but still no])
454 curl_cv_getnameinfo="no"
458 if test "$curl_cv_getnameinfo" != "yes"; then
459 AC_MSG_CHECKING([deeper and deeper for getnameinfo])
463 #ifdef HAVE_WINDOWS_H
464 #ifndef WIN32_LEAN_AND_MEAN
465 #define WIN32_LEAN_AND_MEAN
468 #ifdef HAVE_WINSOCK2_H
469 #include <winsock2.h>
470 #ifdef HAVE_WS2TCPIP_H
471 #include <ws2tcpip.h>
475 #ifdef HAVE_SYS_TYPES_H
476 #include <sys/types.h>
478 #ifdef HAVE_SYS_SOCKET_H
479 #include <sys/socket.h>
486 getnameinfo(0, 0, 0, 0, 0, 0, 0);
490 curl_cv_getnameinfo="yes"
492 AC_MSG_RESULT([but still no])
493 curl_cv_getnameinfo="no"
497 if test "$curl_cv_getnameinfo" = "yes"; then
498 AC_CACHE_CHECK([types of arguments for getnameinfo],
499 [curl_cv_func_getnameinfo_args], [
500 curl_cv_func_getnameinfo_args="unknown"
501 for gni_arg1 in 'struct sockaddr *' 'const struct sockaddr *' 'void *'; do
502 for gni_arg2 in 'socklen_t' 'size_t' 'int'; do
503 for gni_arg46 in 'size_t' 'int' 'socklen_t' 'unsigned int' 'DWORD'; do
504 for gni_arg7 in 'int' 'unsigned int'; do
505 if test "$curl_cv_func_getnameinfo_args" = "unknown"; then
509 #ifdef HAVE_WINDOWS_H
510 #ifndef WIN32_LEAN_AND_MEAN
511 #define WIN32_LEAN_AND_MEAN
513 #if (!defined(_WIN32_WINNT)) || (_WIN32_WINNT < 0x0501)
515 #define _WIN32_WINNT 0x0501
518 #ifdef HAVE_WINSOCK2_H
519 #include <winsock2.h>
520 #ifdef HAVE_WS2TCPIP_H
521 #include <ws2tcpip.h>
524 #define GNICALLCONV WSAAPI
526 #ifdef HAVE_SYS_TYPES_H
527 #include <sys/types.h>
529 #ifdef HAVE_SYS_SOCKET_H
530 #include <sys/socket.h>
537 extern int GNICALLCONV getnameinfo($gni_arg1, $gni_arg2,
543 $gni_arg46 hostlen=0;
544 $gni_arg46 servlen=0;
546 int res = getnameinfo(0, salen, 0, hostlen, 0, servlen, flags);
549 curl_cv_func_getnameinfo_args="$gni_arg1,$gni_arg2,$gni_arg46,$gni_arg7"
557 if test "$curl_cv_func_getnameinfo_args" = "unknown"; then
558 AC_MSG_WARN([Cannot find proper types to use for getnameinfo args])
559 AC_MSG_WARN([HAVE_GETNAMEINFO will not be defined])
561 gni_prev_IFS=$IFS; IFS=','
562 set dummy `echo "$curl_cv_func_getnameinfo_args" | sed 's/\*/\*/g'`
566 gni_qual_type_arg1=$[1]
568 AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG2, $[2],
569 [Define to the type of arg 2 for getnameinfo.])
570 AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG46, $[3],
571 [Define to the type of args 4 and 6 for getnameinfo.])
572 AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG7, $[4],
573 [Define to the type of arg 7 for getnameinfo.])
577 case $prev_sh_opts in
585 case "$gni_qual_type_arg1" in
588 gni_type_arg1=`echo $gni_qual_type_arg1 | sed 's/^const //'`
592 gni_type_arg1=$gni_qual_type_arg1
596 AC_DEFINE_UNQUOTED(GETNAMEINFO_QUAL_ARG1, $gni_qual_arg1,
597 [Define to the type qualifier of arg 1 for getnameinfo.])
598 AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG1, $gni_type_arg1,
599 [Define to the type of arg 1 for getnameinfo.])
601 case $prev_sh_opts in
609 AC_DEFINE_UNQUOTED(HAVE_GETNAMEINFO, 1,
610 [Define to 1 if you have the getnameinfo function.])
611 ac_cv_func_getnameinfo="yes"
617 dnl TYPE_SOCKADDR_STORAGE
618 dnl -------------------------------------------------
619 dnl Check for struct sockaddr_storage. Most IPv6-enabled
620 dnl hosts have it, but AIX 4.3 is one known exception.
622 AC_DEFUN([TYPE_SOCKADDR_STORAGE],
624 AC_CHECK_TYPE([struct sockaddr_storage],
625 AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE, 1,
626 [if struct sockaddr_storage is defined]), ,
629 #ifdef HAVE_WINDOWS_H
630 #ifndef WIN32_LEAN_AND_MEAN
631 #define WIN32_LEAN_AND_MEAN
634 #ifdef HAVE_WINSOCK2_H
635 #include <winsock2.h>
638 #ifdef HAVE_SYS_TYPES_H
639 #include <sys/types.h>
641 #ifdef HAVE_SYS_SOCKET_H
642 #include <sys/socket.h>
644 #ifdef HAVE_NETINET_IN_H
645 #include <netinet/in.h>
647 #ifdef HAVE_ARPA_INET_H
648 #include <arpa/inet.h>
655 dnl CURL_CHECK_NI_WITHSCOPEID
656 dnl -------------------------------------------------
657 dnl Check for working NI_WITHSCOPEID in getnameinfo()
659 AC_DEFUN([CURL_CHECK_NI_WITHSCOPEID], [
660 AC_REQUIRE([CURL_CHECK_FUNC_GETNAMEINFO])dnl
661 AC_REQUIRE([TYPE_SOCKADDR_STORAGE])dnl
662 AC_CHECK_HEADERS(stdio.h sys/types.h sys/socket.h \
663 netdb.h netinet/in.h arpa/inet.h)
665 AC_CACHE_CHECK([for working NI_WITHSCOPEID],
666 [ac_cv_working_ni_withscopeid], [
672 #ifdef HAVE_SYS_TYPES_H
673 #include <sys/types.h>
675 #ifdef HAVE_SYS_SOCKET_H
676 #include <sys/socket.h>
681 #ifdef HAVE_NETINET_IN_H
682 #include <netinet/in.h>
684 #ifdef HAVE_ARPA_INET_H
685 #include <arpa/inet.h>
688 #if defined(NI_WITHSCOPEID) && defined(HAVE_GETNAMEINFO)
689 #ifdef HAVE_STRUCT_SOCKADDR_STORAGE
690 struct sockaddr_storage sa;
692 unsigned char sa[256];
694 char hostbuf[NI_MAXHOST];
696 GETNAMEINFO_TYPE_ARG2 salen = (GETNAMEINFO_TYPE_ARG2)sizeof(sa);
697 GETNAMEINFO_TYPE_ARG46 hostlen = (GETNAMEINFO_TYPE_ARG46)sizeof(hostbuf);
698 GETNAMEINFO_TYPE_ARG7 flags = NI_NUMERICHOST | NI_NUMERICSERV | NI_WITHSCOPEID;
699 int fd = socket(AF_INET6, SOCK_STREAM, 0);
702 return 1; /* Error creating socket */
704 rc = getsockname(fd, (GETNAMEINFO_TYPE_ARG1)&sa, &salen);
706 perror("getsockname()");
707 return 2; /* Error retrieving socket name */
709 rc = getnameinfo((GETNAMEINFO_TYPE_ARG1)&sa, salen, hostbuf, hostlen, NULL, 0, flags);
711 printf("rc = %s\n", gai_strerror(rc));
712 return 3; /* Error translating socket address */
714 return 0; /* Ok, NI_WITHSCOPEID works */
716 return 4; /* Error, NI_WITHSCOPEID not defined or no getnameinfo() */
718 ]]) # AC_LANG_PROGRAM
720 # Exit code == 0. Program worked.
721 ac_cv_working_ni_withscopeid="yes"
723 # Exit code != 0. Program failed.
724 ac_cv_working_ni_withscopeid="no"
726 # Program is not run when cross-compiling. So we assume
727 # NI_WITHSCOPEID will work if we are able to compile it.
730 #include <sys/types.h>
731 #include <sys/socket.h>
734 unsigned int dummy= NI_NUMERICHOST | NI_NUMERICSERV | NI_WITHSCOPEID;
737 ac_cv_working_ni_withscopeid="yes"
739 ac_cv_working_ni_withscopeid="no"
740 ]) # AC_COMPILE_IFELSE
743 case "$ac_cv_working_ni_withscopeid" in
745 AC_DEFINE(HAVE_NI_WITHSCOPEID, 1,
746 [Define to 1 if NI_WITHSCOPEID exists and works.])
752 dnl CURL_CHECK_FUNC_RECV
753 dnl -------------------------------------------------
754 dnl Test if the socket recv() function is available,
755 dnl and check its return type and the types of its
756 dnl arguments. If the function succeeds HAVE_RECV
757 dnl will be defined, defining the types of the arguments
758 dnl in RECV_TYPE_ARG1, RECV_TYPE_ARG2, RECV_TYPE_ARG3
759 dnl and RECV_TYPE_ARG4, defining the type of the function
760 dnl return value in RECV_TYPE_RETV.
762 AC_DEFUN([CURL_CHECK_FUNC_RECV], [
763 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl
764 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
765 AC_CHECK_HEADERS(sys/types.h sys/socket.h)
767 AC_MSG_CHECKING([for recv])
771 #ifdef HAVE_WINDOWS_H
772 #ifndef WIN32_LEAN_AND_MEAN
773 #define WIN32_LEAN_AND_MEAN
776 #ifdef HAVE_WINSOCK2_H
777 #include <winsock2.h>
779 #ifdef HAVE_WINSOCK_H
784 #ifdef HAVE_SYS_TYPES_H
785 #include <sys/types.h>
787 #ifdef HAVE_SYS_SOCKET_H
788 #include <sys/socket.h>
802 if test "$curl_cv_recv" = "yes"; then
803 AC_CACHE_CHECK([types of args and return type for recv],
804 [curl_cv_func_recv_args], [
805 curl_cv_func_recv_args="unknown"
806 for recv_retv in 'int' 'ssize_t'; do
807 for recv_arg1 in 'int' 'ssize_t' 'SOCKET'; do
808 for recv_arg2 in 'char *' 'void *'; do
809 for recv_arg3 in 'size_t' 'int' 'socklen_t' 'unsigned int'; do
810 for recv_arg4 in 'int' 'unsigned int'; do
811 if test "$curl_cv_func_recv_args" = "unknown"; then
815 #ifdef HAVE_WINDOWS_H
816 #ifndef WIN32_LEAN_AND_MEAN
817 #define WIN32_LEAN_AND_MEAN
820 #ifdef HAVE_WINSOCK2_H
821 #include <winsock2.h>
823 #ifdef HAVE_WINSOCK_H
827 #define RECVCALLCONV PASCAL
829 #ifdef HAVE_SYS_TYPES_H
830 #include <sys/types.h>
832 #ifdef HAVE_SYS_SOCKET_H
833 #include <sys/socket.h>
837 extern $recv_retv RECVCALLCONV
838 recv($recv_arg1, $recv_arg2, $recv_arg3, $recv_arg4);
844 $recv_retv res = recv(s, buf, len, flags);
847 curl_cv_func_recv_args="$recv_arg1,$recv_arg2,$recv_arg3,$recv_arg4,$recv_retv"
856 if test "$curl_cv_func_recv_args" = "unknown"; then
857 AC_MSG_ERROR([Cannot find proper types to use for recv args])
859 recv_prev_IFS=$IFS; IFS=','
860 set dummy `echo "$curl_cv_func_recv_args" | sed 's/\*/\*/g'`
864 AC_DEFINE_UNQUOTED(RECV_TYPE_ARG1, $[1],
865 [Define to the type of arg 1 for recv.])
866 AC_DEFINE_UNQUOTED(RECV_TYPE_ARG2, $[2],
867 [Define to the type of arg 2 for recv.])
868 AC_DEFINE_UNQUOTED(RECV_TYPE_ARG3, $[3],
869 [Define to the type of arg 3 for recv.])
870 AC_DEFINE_UNQUOTED(RECV_TYPE_ARG4, $[4],
871 [Define to the type of arg 4 for recv.])
872 AC_DEFINE_UNQUOTED(RECV_TYPE_RETV, $[5],
873 [Define to the function return type for recv.])
875 AC_DEFINE_UNQUOTED(HAVE_RECV, 1,
876 [Define to 1 if you have the recv function.])
877 ac_cv_func_recv="yes"
880 AC_MSG_ERROR([Unable to link function recv])
885 dnl CURL_CHECK_FUNC_SEND
886 dnl -------------------------------------------------
887 dnl Test if the socket send() function is available,
888 dnl and check its return type and the types of its
889 dnl arguments. If the function succeeds HAVE_SEND
890 dnl will be defined, defining the types of the arguments
891 dnl in SEND_TYPE_ARG1, SEND_TYPE_ARG2, SEND_TYPE_ARG3
892 dnl and SEND_TYPE_ARG4, defining the type of the function
893 dnl return value in SEND_TYPE_RETV, and also defining the
894 dnl type qualifier of second argument in SEND_QUAL_ARG2.
896 AC_DEFUN([CURL_CHECK_FUNC_SEND], [
897 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl
898 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
899 AC_CHECK_HEADERS(sys/types.h sys/socket.h)
901 AC_MSG_CHECKING([for send])
905 #ifdef HAVE_WINDOWS_H
906 #ifndef WIN32_LEAN_AND_MEAN
907 #define WIN32_LEAN_AND_MEAN
910 #ifdef HAVE_WINSOCK2_H
911 #include <winsock2.h>
913 #ifdef HAVE_WINSOCK_H
918 #ifdef HAVE_SYS_TYPES_H
919 #include <sys/types.h>
921 #ifdef HAVE_SYS_SOCKET_H
922 #include <sys/socket.h>
936 if test "$curl_cv_send" = "yes"; then
937 AC_CACHE_CHECK([types of args and return type for send],
938 [curl_cv_func_send_args], [
939 curl_cv_func_send_args="unknown"
940 for send_retv in 'int' 'ssize_t'; do
941 for send_arg1 in 'int' 'ssize_t' 'SOCKET'; do
942 for send_arg2 in 'char *' 'void *' 'const char *' 'const void *'; do
943 for send_arg3 in 'size_t' 'int' 'socklen_t' 'unsigned int'; do
944 for send_arg4 in 'int' 'unsigned int'; do
945 if test "$curl_cv_func_send_args" = "unknown"; then
949 #ifdef HAVE_WINDOWS_H
950 #ifndef WIN32_LEAN_AND_MEAN
951 #define WIN32_LEAN_AND_MEAN
954 #ifdef HAVE_WINSOCK2_H
955 #include <winsock2.h>
957 #ifdef HAVE_WINSOCK_H
961 #define SENDCALLCONV PASCAL
963 #ifdef HAVE_SYS_TYPES_H
964 #include <sys/types.h>
966 #ifdef HAVE_SYS_SOCKET_H
967 #include <sys/socket.h>
971 extern $send_retv SENDCALLCONV
972 send($send_arg1, $send_arg2, $send_arg3, $send_arg4);
977 $send_retv res = send(s, 0, len, flags);
980 curl_cv_func_send_args="$send_arg1,$send_arg2,$send_arg3,$send_arg4,$send_retv"
989 if test "$curl_cv_func_send_args" = "unknown"; then
990 AC_MSG_ERROR([Cannot find proper types to use for send args])
992 send_prev_IFS=$IFS; IFS=','
993 set dummy `echo "$curl_cv_func_send_args" | sed 's/\*/\*/g'`
997 send_qual_type_arg2=$[2]
999 AC_DEFINE_UNQUOTED(SEND_TYPE_ARG1, $[1],
1000 [Define to the type of arg 1 for send.])
1001 AC_DEFINE_UNQUOTED(SEND_TYPE_ARG3, $[3],
1002 [Define to the type of arg 3 for send.])
1003 AC_DEFINE_UNQUOTED(SEND_TYPE_ARG4, $[4],
1004 [Define to the type of arg 4 for send.])
1005 AC_DEFINE_UNQUOTED(SEND_TYPE_RETV, $[5],
1006 [Define to the function return type for send.])
1010 case $prev_sh_opts in
1018 case "$send_qual_type_arg2" in
1020 send_qual_arg2=const
1021 send_type_arg2=`echo $send_qual_type_arg2 | sed 's/^const //'`
1025 send_type_arg2=$send_qual_type_arg2
1029 AC_DEFINE_UNQUOTED(SEND_QUAL_ARG2, $send_qual_arg2,
1030 [Define to the type qualifier of arg 2 for send.])
1031 AC_DEFINE_UNQUOTED(SEND_TYPE_ARG2, $send_type_arg2,
1032 [Define to the type of arg 2 for send.])
1034 case $prev_sh_opts in
1042 AC_DEFINE_UNQUOTED(HAVE_SEND, 1,
1043 [Define to 1 if you have the send function.])
1044 ac_cv_func_send="yes"
1047 AC_MSG_ERROR([Unable to link function send])
1052 dnl CURL_CHECK_FUNC_RECVFROM
1053 dnl -------------------------------------------------
1054 dnl Test if the socket recvfrom() function is available,
1055 dnl and check its return type and the types of its
1056 dnl arguments. If the function succeeds HAVE_RECVFROM
1057 dnl will be defined, defining the types of the arguments
1058 dnl in RECVFROM_TYPE_ARG1, RECVFROM_TYPE_ARG2, and so on
1059 dnl to RECVFROM_TYPE_ARG6, defining also the type of the
1060 dnl function return value in RECVFROM_TYPE_RETV.
1061 dnl Notice that the types returned for pointer arguments
1062 dnl will actually be the type pointed by the pointer.
1064 AC_DEFUN([CURL_CHECK_FUNC_RECVFROM], [
1065 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl
1066 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
1067 AC_CHECK_HEADERS(sys/types.h sys/socket.h)
1069 AC_MSG_CHECKING([for recvfrom])
1073 #ifdef HAVE_WINDOWS_H
1074 #ifndef WIN32_LEAN_AND_MEAN
1075 #define WIN32_LEAN_AND_MEAN
1077 #include <windows.h>
1078 #ifdef HAVE_WINSOCK2_H
1079 #include <winsock2.h>
1081 #ifdef HAVE_WINSOCK_H
1082 #include <winsock.h>
1086 #ifdef HAVE_SYS_TYPES_H
1087 #include <sys/types.h>
1089 #ifdef HAVE_SYS_SOCKET_H
1090 #include <sys/socket.h>
1094 recvfrom(0, 0, 0, 0, 0, 0);
1097 AC_MSG_RESULT([yes])
1098 curl_cv_recvfrom="yes"
1101 curl_cv_recvfrom="no"
1104 if test "$curl_cv_recvfrom" = "yes"; then
1105 AC_CACHE_CHECK([types of args and return type for recvfrom],
1106 [curl_cv_func_recvfrom_args], [
1107 curl_cv_func_recvfrom_args="unknown"
1108 for recvfrom_retv in 'int' 'ssize_t'; do
1109 for recvfrom_arg1 in 'int' 'ssize_t' 'SOCKET'; do
1110 for recvfrom_arg2 in 'char *' 'void *'; do
1111 for recvfrom_arg3 in 'size_t' 'int' 'socklen_t' 'unsigned int'; do
1112 for recvfrom_arg4 in 'int' 'unsigned int'; do
1113 for recvfrom_arg5 in 'struct sockaddr *' 'void *'; do
1114 for recvfrom_arg6 in 'socklen_t *' 'int *' 'unsigned int *' 'size_t *'; do
1115 if test "$curl_cv_func_recvfrom_args" = "unknown"; then
1119 #ifdef HAVE_WINDOWS_H
1120 #ifndef WIN32_LEAN_AND_MEAN
1121 #define WIN32_LEAN_AND_MEAN
1123 #include <windows.h>
1124 #ifdef HAVE_WINSOCK2_H
1125 #include <winsock2.h>
1127 #ifdef HAVE_WINSOCK_H
1128 #include <winsock.h>
1131 #define RECVFROMCALLCONV PASCAL
1133 #ifdef HAVE_SYS_TYPES_H
1134 #include <sys/types.h>
1136 #ifdef HAVE_SYS_SOCKET_H
1137 #include <sys/socket.h>
1139 #define RECVFROMCALLCONV
1141 extern $recvfrom_retv RECVFROMCALLCONV
1142 recvfrom($recvfrom_arg1, $recvfrom_arg2,
1143 $recvfrom_arg3, $recvfrom_arg4,
1144 $recvfrom_arg5, $recvfrom_arg6);
1147 $recvfrom_arg2 buf=0;
1148 $recvfrom_arg3 len=0;
1149 $recvfrom_arg4 flags=0;
1150 $recvfrom_arg5 addr=0;
1151 $recvfrom_arg6 addrlen=0;
1152 $recvfrom_retv res=0;
1153 res = recvfrom(s, buf, len, flags, addr, addrlen);
1156 curl_cv_func_recvfrom_args="$recvfrom_arg1,$recvfrom_arg2,$recvfrom_arg3,$recvfrom_arg4,$recvfrom_arg5,$recvfrom_arg6,$recvfrom_retv"
1167 if test "$curl_cv_func_recvfrom_args" = "unknown"; then
1168 AC_MSG_ERROR([Cannot find proper types to use for recvfrom args])
1170 recvfrom_prev_IFS=$IFS; IFS=','
1171 set dummy `echo "$curl_cv_func_recvfrom_args" | sed 's/\*/\*/g'`
1172 IFS=$recvfrom_prev_IFS
1175 recvfrom_ptrt_arg2=$[2]
1176 recvfrom_ptrt_arg5=$[5]
1177 recvfrom_ptrt_arg6=$[6]
1179 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG1, $[1],
1180 [Define to the type of arg 1 for recvfrom.])
1181 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG3, $[3],
1182 [Define to the type of arg 3 for recvfrom.])
1183 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG4, $[4],
1184 [Define to the type of arg 4 for recvfrom.])
1185 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_RETV, $[7],
1186 [Define to the function return type for recvfrom.])
1190 case $prev_sh_opts in
1198 recvfrom_type_arg2=`echo $recvfrom_ptrt_arg2 | sed 's/ \*//'`
1199 recvfrom_type_arg5=`echo $recvfrom_ptrt_arg5 | sed 's/ \*//'`
1200 recvfrom_type_arg6=`echo $recvfrom_ptrt_arg6 | sed 's/ \*//'`
1202 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG2, $recvfrom_type_arg2,
1203 [Define to the type pointed by arg 2 for recvfrom.])
1204 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG5, $recvfrom_type_arg5,
1205 [Define to the type pointed by arg 5 for recvfrom.])
1206 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG6, $recvfrom_type_arg6,
1207 [Define to the type pointed by arg 6 for recvfrom.])
1209 case $prev_sh_opts in
1217 AC_DEFINE_UNQUOTED(HAVE_RECVFROM, 1,
1218 [Define to 1 if you have the recvfrom function.])
1219 ac_cv_func_recvfrom="yes"
1222 AC_MSG_ERROR([Unable to link function recvfrom])
1227 dnl CURL_CHECK_MSG_NOSIGNAL
1228 dnl -------------------------------------------------
1229 dnl Check for MSG_NOSIGNAL
1231 AC_DEFUN([CURL_CHECK_MSG_NOSIGNAL], [
1232 AC_CHECK_HEADERS(sys/types.h sys/socket.h)
1233 AC_CACHE_CHECK([for MSG_NOSIGNAL], [ac_cv_msg_nosignal], [
1237 #ifdef HAVE_WINDOWS_H
1238 #ifndef WIN32_LEAN_AND_MEAN
1239 #define WIN32_LEAN_AND_MEAN
1241 #include <windows.h>
1242 #ifdef HAVE_WINSOCK2_H
1243 #include <winsock2.h>
1245 #ifdef HAVE_WINSOCK_H
1246 #include <winsock.h>
1250 #ifdef HAVE_SYS_TYPES_H
1251 #include <sys/types.h>
1253 #ifdef HAVE_SYS_SOCKET_H
1254 #include <sys/socket.h>
1258 int flag=MSG_NOSIGNAL;
1261 ac_cv_msg_nosignal="yes"
1263 ac_cv_msg_nosignal="no"
1266 case "$ac_cv_msg_nosignal" in
1268 AC_DEFINE_UNQUOTED(HAVE_MSG_NOSIGNAL, 1,
1269 [Define to 1 if you have the MSG_NOSIGNAL flag.])
1275 dnl CURL_CHECK_STRUCT_TIMEVAL
1276 dnl -------------------------------------------------
1277 dnl Check for timeval struct
1279 AC_DEFUN([CURL_CHECK_STRUCT_TIMEVAL], [
1280 AC_REQUIRE([AC_HEADER_TIME])dnl
1281 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl
1282 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
1283 AC_CHECK_HEADERS(sys/types.h sys/time.h time.h)
1284 AC_CACHE_CHECK([for struct timeval], [ac_cv_struct_timeval], [
1288 #ifdef HAVE_WINDOWS_H
1289 #ifndef WIN32_LEAN_AND_MEAN
1290 #define WIN32_LEAN_AND_MEAN
1292 #include <windows.h>
1293 #ifdef HAVE_WINSOCK2_H
1294 #include <winsock2.h>
1296 #ifdef HAVE_WINSOCK_H
1297 #include <winsock.h>
1301 #ifdef HAVE_SYS_TYPES_H
1302 #include <sys/types.h>
1304 #ifdef HAVE_SYS_TIME_H
1305 #include <sys/time.h>
1306 #ifdef TIME_WITH_SYS_TIME
1320 ac_cv_struct_timeval="yes"
1322 ac_cv_struct_timeval="no"
1325 case "$ac_cv_struct_timeval" in
1327 AC_DEFINE_UNQUOTED(HAVE_STRUCT_TIMEVAL, 1,
1328 [Define to 1 if you have the timeval struct.])
1334 dnl TYPE_SIG_ATOMIC_T
1335 dnl -------------------------------------------------
1336 dnl Check if the sig_atomic_t type is available, and
1337 dnl verify if it is already defined as volatile.
1339 AC_DEFUN([TYPE_SIG_ATOMIC_T], [
1340 AC_CHECK_HEADERS(signal.h)
1341 AC_CHECK_TYPE([sig_atomic_t],[
1342 AC_DEFINE(HAVE_SIG_ATOMIC_T, 1,
1343 [Define to 1 if sig_atomic_t is an available typedef.])
1345 #ifdef HAVE_SIGNAL_H
1349 case "$ac_cv_type_sig_atomic_t" in
1352 AC_MSG_CHECKING([if sig_atomic_t is already defined as volatile])
1355 #ifdef HAVE_SIGNAL_H
1359 static volatile sig_atomic_t dummy = 0;
1363 ac_cv_sig_atomic_t_volatile="no"
1365 AC_MSG_RESULT([yes])
1366 ac_cv_sig_atomic_t_volatile="yes"
1369 if test "$ac_cv_sig_atomic_t_volatile" = "yes"; then
1370 AC_DEFINE(HAVE_SIG_ATOMIC_T_VOLATILE, 1,
1371 [Define to 1 if sig_atomic_t is already defined as volatile.])
1378 dnl CURL_CHECK_NONBLOCKING_SOCKET
1379 dnl -------------------------------------------------
1380 dnl Check for how to set a socket to non-blocking state. There seems to exist
1381 dnl four known different ways, with the one used almost everywhere being POSIX
1382 dnl and XPG3, while the other different ways for different systems (old BSD,
1383 dnl Windows and Amiga).
1385 dnl There are two known platforms (AIX 3.x and SunOS 4.1.x) where the
1386 dnl O_NONBLOCK define is found but does not work. This condition is attempted
1387 dnl to get caught in this script by using an excessive number of #ifdefs...
1389 AC_DEFUN([CURL_CHECK_NONBLOCKING_SOCKET], [
1390 AC_MSG_CHECKING([non-blocking sockets style])
1395 /* headers for O_NONBLOCK test */
1396 #include <sys/types.h>
1400 #if defined(sun) || defined(__sun__) || \
1401 defined(__SUNPRO_C) || defined(__SUNPRO_CC)
1402 # if defined(__SVR4) || defined(__srv4__)
1403 # define PLATFORM_SOLARIS
1405 # define PLATFORM_SUNOS4
1408 #if (defined(_AIX) || defined(__xlC__)) && !defined(_AIX41)
1409 # define PLATFORM_AIX_V3
1412 #if defined(PLATFORM_SUNOS4) || defined(PLATFORM_AIX_V3) || defined(__BEOS__)
1413 #error "O_NONBLOCK does not work on this platform"
1416 /* O_NONBLOCK source test */
1418 int flags = fcntl(socket, F_SETFL, flags | O_NONBLOCK);
1421 dnl the O_NONBLOCK test was fine
1422 nonblock="O_NONBLOCK"
1423 AC_DEFINE(HAVE_O_NONBLOCK, 1,
1424 [use O_NONBLOCK for non-blocking sockets])
1427 if test "$nonblock" = "unknown"; then
1430 /* headers for FIONBIO test */
1432 #include <stropts.h>
1434 /* FIONBIO source test (old-style unix) */
1436 int flags = ioctl(socket, FIONBIO, &flags);
1439 dnl FIONBIO test was good
1441 AC_DEFINE(HAVE_FIONBIO, 1,
1442 [use FIONBIO for non-blocking sockets])
1446 if test "$nonblock" = "unknown"; then
1449 /* headers for ioctlsocket test (Windows) */
1451 #ifdef HAVE_WINDOWS_H
1452 #ifndef WIN32_LEAN_AND_MEAN
1453 #define WIN32_LEAN_AND_MEAN
1455 #include <windows.h>
1456 #ifdef HAVE_WINSOCK2_H
1457 #include <winsock2.h>
1459 #ifdef HAVE_WINSOCK_H
1460 #include <winsock.h>
1465 /* ioctlsocket source code (Windows) */
1467 unsigned long flags = 0;
1468 sd = socket(0, 0, 0);
1469 ioctlsocket(sd, FIONBIO, &flags);
1472 dnl ioctlsocket test was good
1473 nonblock="ioctlsocket"
1474 AC_DEFINE(HAVE_IOCTLSOCKET, 1,
1475 [use ioctlsocket() for non-blocking sockets])
1479 if test "$nonblock" = "unknown"; then
1482 /* headers for IoctlSocket test (Amiga?) */
1483 #include <sys/ioctl.h>
1485 /* IoctlSocket source code (Amiga?) */
1487 int flags = IoctlSocket(socket, FIONBIO, (long)1);
1490 dnl Ioctlsocket test was good
1491 nonblock="IoctlSocket"
1492 AC_DEFINE(HAVE_IOCTLSOCKET_CASE, 1,
1493 [use Ioctlsocket() for non-blocking sockets])
1497 if test "$nonblock" = "unknown"; then
1500 /* headers for SO_NONBLOCK test (BeOS) */
1503 /* SO_NONBLOCK source code (BeOS) */
1506 int flags = setsockopt(socket, SOL_SOCKET, SO_NONBLOCK, &b, sizeof(b));
1509 dnl the SO_NONBLOCK test was good
1510 nonblock="SO_NONBLOCK"
1511 AC_DEFINE(HAVE_SO_NONBLOCK, 1,
1512 [use SO_NONBLOCK for non-blocking sockets])
1516 AC_MSG_RESULT($nonblock)
1518 if test "$nonblock" = "unknown"; then
1519 AC_DEFINE(HAVE_DISABLED_NONBLOCKING, 1,
1520 [disabled non-blocking sockets])
1521 AC_MSG_WARN([non-block sockets disabled])
1527 dnl -------------------------------------------------
1528 dnl Check for in_addr_t: it is used to receive the return code of inet_addr()
1529 dnl and a few other things.
1531 AC_DEFUN([TYPE_IN_ADDR_T], [
1532 AC_CHECK_TYPE([in_addr_t], ,[
1533 dnl in_addr_t not available
1534 AC_CACHE_CHECK([for in_addr_t equivalent],
1535 [curl_cv_in_addr_t_equiv], [
1536 curl_cv_in_addr_t_equiv="unknown"
1537 for t in "unsigned long" int size_t unsigned long; do
1538 if test "$curl_cv_in_addr_t_equiv" = "unknown"; then
1542 #ifdef HAVE_WINDOWS_H
1543 #ifndef WIN32_LEAN_AND_MEAN
1544 #define WIN32_LEAN_AND_MEAN
1546 #include <windows.h>
1547 #ifdef HAVE_WINSOCK2_H
1548 #include <winsock2.h>
1550 #ifdef HAVE_WINSOCK_H
1551 #include <winsock.h>
1555 #ifdef HAVE_SYS_TYPES_H
1556 #include <sys/types.h>
1558 #ifdef HAVE_SYS_SOCKET_H
1559 #include <sys/socket.h>
1561 #ifdef HAVE_NETINET_IN_H
1562 #include <netinet/in.h>
1564 #ifdef HAVE_ARPA_INET_H
1565 #include <arpa/inet.h>
1569 $t data = inet_addr ("1.2.3.4");
1572 curl_cv_in_addr_t_equiv="$t"
1577 case "$curl_cv_in_addr_t_equiv" in
1579 AC_MSG_ERROR([Cannot find a type to use in place of in_addr_t])
1582 AC_DEFINE_UNQUOTED(in_addr_t, $curl_cv_in_addr_t_equiv,
1583 [Type to use in place of in_addr_t when system does not provide it.])
1588 #ifdef HAVE_WINDOWS_H
1589 #ifndef WIN32_LEAN_AND_MEAN
1590 #define WIN32_LEAN_AND_MEAN
1592 #include <windows.h>
1593 #ifdef HAVE_WINSOCK2_H
1594 #include <winsock2.h>
1596 #ifdef HAVE_WINSOCK_H
1597 #include <winsock.h>
1601 #ifdef HAVE_SYS_TYPES_H
1602 #include <sys/types.h>
1604 #ifdef HAVE_SYS_SOCKET_H
1605 #include <sys/socket.h>
1607 #ifdef HAVE_NETINET_IN_H
1608 #include <netinet/in.h>
1610 #ifdef HAVE_ARPA_INET_H
1611 #include <arpa/inet.h>
1614 ]) dnl AC_CHECK_TYPE
1618 dnl CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC
1619 dnl -------------------------------------------------
1620 dnl Check if monotonic clock_gettime is available.
1622 AC_DEFUN([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC], [
1623 AC_REQUIRE([AC_HEADER_TIME])dnl
1624 AC_CHECK_HEADERS(sys/types.h sys/time.h time.h)
1625 AC_MSG_CHECKING([for monotonic clock_gettime])
1628 #ifdef HAVE_SYS_TYPES_H
1629 #include <sys/types.h>
1631 #ifdef HAVE_SYS_TIME_H
1632 #include <sys/time.h>
1633 #ifdef TIME_WITH_SYS_TIME
1643 (void)clock_gettime(CLOCK_MONOTONIC, &ts);
1646 AC_MSG_RESULT([yes])
1647 ac_cv_func_clock_gettime="yes"
1650 ac_cv_func_clock_gettime="no"
1652 dnl Definition of HAVE_CLOCK_GETTIME_MONOTONIC is intentionally postponed
1653 dnl until library linking and run-time checks for clock_gettime succeed.
1657 dnl CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC
1658 dnl -------------------------------------------------
1659 dnl If monotonic clock_gettime is available then,
1660 dnl check and prepended to LIBS any needed libraries.
1662 AC_DEFUN([CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC], [
1663 AC_REQUIRE([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC])dnl
1665 if test "$ac_cv_func_clock_gettime" = "yes"; then
1667 AC_MSG_CHECKING([for clock_gettime in libraries])
1669 curl_cv_save_LIBS="$LIBS"
1670 curl_cv_gclk_LIBS="unknown"
1672 for x_xlibs in '' '-lrt' '-lposix4' ; do
1673 if test "$curl_cv_gclk_LIBS" = "unknown"; then
1674 if test -z "$x_xlibs"; then
1675 LIBS="$curl_cv_save_LIBS"
1677 LIBS="$x_xlibs $curl_cv_save_LIBS"
1681 #ifdef HAVE_SYS_TYPES_H
1682 #include <sys/types.h>
1684 #ifdef HAVE_SYS_TIME_H
1685 #include <sys/time.h>
1686 #ifdef TIME_WITH_SYS_TIME
1696 (void)clock_gettime(CLOCK_MONOTONIC, &ts);
1699 curl_cv_gclk_LIBS="$x_xlibs"
1704 LIBS="$curl_cv_save_LIBS"
1706 case X-"$curl_cv_gclk_LIBS" in
1708 AC_MSG_RESULT([cannot find clock_gettime])
1709 AC_MSG_WARN([HAVE_CLOCK_GETTIME_MONOTONIC will not be defined])
1710 ac_cv_func_clock_gettime="no"
1713 AC_MSG_RESULT([no additional lib required])
1714 ac_cv_func_clock_gettime="yes"
1717 if test -z "$curl_cv_save_LIBS"; then
1718 LIBS="$curl_cv_gclk_LIBS"
1720 LIBS="$curl_cv_gclk_LIBS $curl_cv_save_LIBS"
1722 AC_MSG_RESULT([$curl_cv_gclk_LIBS])
1723 ac_cv_func_clock_gettime="yes"
1727 dnl only do runtime verification when not cross-compiling
1728 if test "x$cross_compiling" != "xyes" &&
1729 test "$ac_cv_func_clock_gettime" = "yes"; then
1730 AC_MSG_CHECKING([if monotonic clock_gettime works])
1733 #ifdef HAVE_SYS_TYPES_H
1734 #include <sys/types.h>
1736 #ifdef HAVE_SYS_TIME_H
1737 #include <sys/time.h>
1738 #ifdef TIME_WITH_SYS_TIME
1748 if (0 == clock_gettime(CLOCK_MONOTONIC, &ts))
1754 AC_MSG_RESULT([yes])
1757 AC_MSG_WARN([HAVE_CLOCK_GETTIME_MONOTONIC will not be defined])
1758 ac_cv_func_clock_gettime="no"
1759 LIBS="$curl_cv_save_LIBS"
1763 case "$ac_cv_func_clock_gettime" in
1765 AC_DEFINE_UNQUOTED(HAVE_CLOCK_GETTIME_MONOTONIC, 1,
1766 [Define to 1 if you have the clock_gettime function and monotonic timer.])
1775 dnl **********************************************************************
1776 dnl CURL_DETECT_ICC ([ACTION-IF-YES])
1778 dnl check if this is the Intel ICC compiler, and if so run the ACTION-IF-YES
1779 dnl sets the $ICC variable to "yes" or "no"
1780 dnl **********************************************************************
1781 AC_DEFUN([CURL_DETECT_ICC],
1784 AC_MSG_CHECKING([for icc in use])
1785 if test "$GCC" = "yes"; then
1786 dnl check if this is icc acting as gcc in disguise
1787 AC_EGREP_CPP([^__INTEL_COMPILER], [__INTEL_COMPILER],
1788 dnl action if the text is found, this it has not been replaced by the
1791 dnl the text was not found, it was replaced by the cpp
1793 AC_MSG_RESULT([yes])
1797 if test "$ICC" = "no"; then
1803 dnl We create a function for detecting which compiler we use and then set as
1804 dnl pendantic compiler options as possible for that particular compiler. The
1805 dnl options are only used for debug-builds.
1807 dnl This is a copy of the original found in curl's configure script. Don't
1808 dnl modify this one, edit the one in curl and copy it back here when that one
1811 AC_DEFUN([CURL_CC_DEBUG_OPTS],
1813 if test "z$ICC" = "z"; then
1817 if test "$GCC" = "yes"; then
1819 dnl figure out gcc version!
1820 AC_MSG_CHECKING([gcc version])
1821 gccver=`$CC -dumpversion`
1822 num1=`echo $gccver | cut -d . -f1`
1823 num2=`echo $gccver | cut -d . -f2`
1824 gccnum=`(expr $num1 "*" 100 + $num2) 2>/dev/null`
1825 AC_MSG_RESULT($gccver)
1827 if test "$ICC" = "yes"; then
1828 dnl this is icc, not gcc.
1830 dnl ICC warnings we ignore:
1831 dnl * 269 warns on our "%Od" printf formatters for curl_off_t output:
1832 dnl "invalid format string conversion"
1833 dnl * 279 warns on static conditions in while expressions
1834 dnl * 981 warns on "operands are evaluated in unspecified order"
1835 dnl * 1418 "external definition with no prior declaration"
1836 dnl * 1419 warns on "external declaration in primary source file"
1837 dnl which we know and do on purpose.
1839 WARN="-wd279,269,981,1418,1419"
1841 if test "$gccnum" -gt "600"; then
1842 dnl icc 6.0 and older doesn't have the -Wall flag
1846 dnl this is a set of options we believe *ALL* gcc versions support:
1847 WARN="-W -Wall -Wwrite-strings -pedantic -Wpointer-arith -Wnested-externs -Winline -Wmissing-prototypes"
1849 dnl -Wcast-align is a bit too annoying on all gcc versions ;-)
1851 if test "$gccnum" -ge "207"; then
1852 dnl gcc 2.7 or later
1853 WARN="$WARN -Wmissing-declarations"
1856 if test "$gccnum" -gt "295"; then
1857 dnl only if the compiler is newer than 2.95 since we got lots of
1858 dnl "`_POSIX_C_SOURCE' is not defined" in system headers with
1859 dnl gcc 2.95.4 on FreeBSD 4.9!
1860 WARN="$WARN -Wundef -Wno-long-long -Wsign-compare -Wshadow -Wno-multichar"
1863 if test "$gccnum" -ge "296"; then
1864 dnl gcc 2.96 or later
1865 WARN="$WARN -Wfloat-equal"
1868 if test "$gccnum" -gt "296"; then
1869 dnl this option does not exist in 2.96
1870 WARN="$WARN -Wno-format-nonliteral"
1873 dnl -Wunreachable-code seems totally unreliable on my gcc 3.3.2 on
1874 dnl on i686-Linux as it gives us heaps with false positives.
1875 dnl Also, on gcc 4.0.X it is totally unbearable and complains all
1876 dnl over making it unusable for generic purposes. Let's not use it.
1878 if test "$gccnum" -ge "303"; then
1879 dnl gcc 3.3 and later
1880 WARN="$WARN -Wendif-labels -Wstrict-prototypes"
1883 if test "$gccnum" -ge "304"; then
1884 # try these on gcc 3.4
1885 WARN="$WARN -Wdeclaration-after-statement"
1888 for flag in $CPPFLAGS; do
1891 dnl Include path, provide a -isystem option for the same dir
1892 dnl to prevent warnings in those dirs. The -isystem was not very
1893 dnl reliable on earlier gcc versions.
1894 add=`echo $flag | sed 's/^-I/-isystem /g'`
1902 CFLAGS="$CFLAGS $WARN"
1904 AC_MSG_NOTICE([Added this set of compiler options: $WARN])
1908 AC_MSG_NOTICE([Added no extra compiler options])
1912 dnl strip off optimizer flags
1914 for flag in $CFLAGS; do
1917 dnl echo "cut off $flag"
1920 NEWFLAGS="$NEWFLAGS $flag"
1926 ]) dnl end of AC_DEFUN()
1929 dnl This macro determines if the specified struct exists in the specified file
1931 dnl CARES_CHECK_STRUCT(headers, struct name, if found, [if not found])
1933 AC_DEFUN([CARES_CHECK_STRUCT], [
1934 AC_MSG_CHECKING([for struct $2])
1935 AC_TRY_COMPILE([$1],
1937 struct $2 struct_instance;
1938 ], ac_struct="yes", ac_found="no")
1939 if test "$ac_struct" = "yes" ; then
1948 dnl This macro determines if the specified constant exists in the specified file
1950 dnl CARES_CHECK_CONSTANT(headers, constant name, if found, [if not found])
1952 AC_DEFUN([CARES_CHECK_CONSTANT], [
1953 AC_MSG_CHECKING([for $2])
1954 AC_EGREP_CPP(VARIABLEWASDEFINED,
1963 ], ac_constant="yes", ac_constant="no"
1965 if test "$ac_constant" = "yes" ; then
1975 dnl CARES_CHECK_GETSERVBYPORT_R
1976 dnl -------------------------------------------------
1977 dnl Test if the getservbyport_r function is available,
1978 dnl and find out how many parameters it takes.
1980 AC_DEFUN([CARES_CHECK_GETSERVBYPORT_R], [
1981 AC_CHECK_HEADERS(sys/types.h netdb.h)
1983 AC_MSG_CHECKING([for getservbyport_r])
1985 AC_LANG_FUNC_LINK_TRY([getservbyport_r])
1987 AC_MSG_RESULT([yes])
1988 cares_cv_getservbyport_r="yes"
1991 cares_cv_getservbyport_r="no"
1994 if test "$cares_cv_getservbyport_r" != "yes"; then
1995 AC_MSG_CHECKING([deeper for getservbyport_r])
2002 AC_MSG_RESULT([yes])
2003 cares_cv_getservbyport_r="yes"
2005 AC_MSG_RESULT([but still no])
2006 cares_cv_getservbyport_r="no"
2010 if test "$cares_cv_getservbyport_r" = "yes"; then
2011 AC_MSG_CHECKING([how many arguments getservbyport_r takes])
2012 cares_cv_getservbyport_r_nargs="unknown"
2016 #ifdef HAVE_SYS_TYPES_H
2017 #include <sys/types.h>
2025 struct servent *p3, *p6;
2026 getservbyport_r(p1, p2, p3, p4, p5, &p6);
2029 cares_cv_getservbyport_r_nargs="6"
2032 if test "$cares_cv_getservbyport_r_nargs" = "unknown"; then
2035 #ifdef HAVE_SYS_TYPES_H
2036 #include <sys/types.h>
2045 getservbyport_r(p1, p2, p3, p4, p5);
2048 cares_cv_getservbyport_r_nargs="5"
2052 if test "$cares_cv_getservbyport_r_nargs" = "unknown"; then
2055 #ifdef HAVE_SYS_TYPES_H
2056 #include <sys/types.h>
2065 struct servent_data p4;
2066 getservbyport_r(p1, p2, p3, &p4);
2069 cares_cv_getservbyport_r_nargs="4"
2073 AC_MSG_RESULT([$cares_cv_getservbyport_r_nargs])
2075 if test "$cares_cv_getservbyport_r_nargs" = "unknown"; then
2076 AC_MSG_WARN([HAVE_GETSERVBYPORT_R will not be defined])
2078 AC_DEFINE(HAVE_GETSERVBYPORT_R, 1,
2079 [Specifies whether getservbyport_r is present])
2080 AC_DEFINE_UNQUOTED(GETSERVBYPORT_R_ARGS, $cares_cv_getservbyport_r_nargs,
2081 [Specifies the number of arguments to getservbyport_r])
2082 if test "$cares_cv_getservbyport_r_nargs" = "4" ; then
2083 AC_DEFINE(GETSERVBYPORT_R_BUFSIZE, sizeof(struct servent_data),
2084 [Specifies the size of the buffer to pass to getservbyport_r])
2086 AC_DEFINE(GETSERVBYPORT_R_BUFSIZE, 4096,
2087 [Specifies the size of the buffer to pass to getservbyport_r])