1 #***************************************************************************
3 # Project ___| | | | _ \| |
5 # | (__| |_| | _ <| |___
6 # \___|\___/|_| \_\_____|
8 # Copyright (C) 1998 - 2008, Daniel Stenberg, <daniel@haxx.se>, et al.
10 # This software is licensed as described in the file COPYING, which
11 # you should have received as part of this distribution. The terms
12 # are also available at http://curl.haxx.se/docs/copyright.html.
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.
18 # This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
19 # KIND, either express or implied.
22 ###########################################################################
25 dnl CURL_CHECK_COMPILER_HALT_ON_ERROR
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 compiles with errors.
31 AC_DEFUN([CURL_CHECK_COMPILER_HALT_ON_ERROR], [
32 AC_MSG_CHECKING([if compiler halts on compilation errors])
36 force compilation error
40 AC_MSG_ERROR([compiler does not halt on compilation errors.])
47 dnl CURL_CHECK_COMPILER_ARRAY_SIZE_NEGATIVE
48 dnl -------------------------------------------------
49 dnl Verifies if the compiler actually halts after the
50 dnl compilation phase without generating any object
51 dnl code file, when the source code tries to define a
52 dnl type for a constant array with negative dimension.
54 AC_DEFUN([CURL_CHECK_COMPILER_ARRAY_SIZE_NEGATIVE], [
55 AC_REQUIRE([CURL_CHECK_COMPILER_HALT_ON_ERROR])dnl
56 AC_MSG_CHECKING([if compiler halts on negative sized arrays])
59 typedef char bad_t[sizeof(char) == sizeof(int) ? -1 : -1 ];
65 AC_MSG_ERROR([compiler does not halt on negative sized arrays.])
72 dnl CURL_CHECK_DEF(SYMBOL, [INCLUDES], [SILENT])
73 dnl -------------------------------------------------
74 dnl Use the C preprocessor to find out if the given object-style symbol
75 dnl is defined and get its expansion. This macro will not use default
76 dnl includes even if no INCLUDES argument is given. This macro will run
77 dnl silently when invoked with three arguments.
79 AC_DEFUN([CURL_CHECK_DEF], [
80 AS_VAR_PUSHDEF([ac_HaveDef], [curl_cv_have_def_$1])dnl
81 AS_VAR_PUSHDEF([ac_Def], [curl_cv_def_$1])dnl
82 ifelse($3,,[AC_MSG_CHECKING([for preprocessor definition of $1])])
92 tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \
93 "$GREP" CURL_DEF_TOKEN 2>/dev/null | \
94 "$SED" 's/.*CURL_DEF_TOKEN[[ ]]//' 2>/dev/null | \
95 "$SED" 'q' 2>/dev/null`
96 if test "$tmp_exp" = "$1"; then
100 if test -z "$tmp_exp"; then
101 AS_VAR_SET([ac_HaveDef], [no])
102 ifelse($3,,[AC_MSG_RESULT([no])])
104 AS_VAR_SET([ac_HaveDef], [yes])
105 AS_VAR_SET([ac_Def], [$tmp_exp])
106 ifelse($3,,[AC_MSG_RESULT([$tmp_exp])])
108 AS_VAR_POPDEF([ac_Def])dnl
109 AS_VAR_POPDEF([ac_HaveDef])dnl
113 dnl CURL_CHECK_HEADER_WINDOWS
114 dnl -------------------------------------------------
115 dnl Check for compilable and valid windows.h header
117 AC_DEFUN([CURL_CHECK_HEADER_WINDOWS], [
118 AC_CACHE_CHECK([for windows.h], [ac_cv_header_windows_h], [
122 #ifndef WIN32_LEAN_AND_MEAN
123 #define WIN32_LEAN_AND_MEAN
127 #if defined(__CYGWIN__) || defined(__CEGCC__)
128 HAVE_WINDOWS_H shall not be defined.
134 ac_cv_header_windows_h="yes"
136 ac_cv_header_windows_h="no"
139 case "$ac_cv_header_windows_h" in
141 AC_DEFINE_UNQUOTED(HAVE_WINDOWS_H, 1,
142 [Define to 1 if you have the windows.h header file.])
143 AC_DEFINE_UNQUOTED(WIN32_LEAN_AND_MEAN, 1,
144 [Define to avoid automatic inclusion of winsock.h])
150 dnl CURL_CHECK_NATIVE_WINDOWS
151 dnl -------------------------------------------------
152 dnl Check if building a native Windows target
154 AC_DEFUN([CURL_CHECK_NATIVE_WINDOWS], [
155 AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
156 AC_CACHE_CHECK([whether build target is a native Windows one], [ac_cv_native_windows], [
157 if test "$ac_cv_header_windows_h" = "no"; then
158 ac_cv_native_windows="no"
163 #if defined(__MINGW32__) || defined(__MINGW32CE__) || \
164 (defined(_MSC_VER) && (defined(_WIN32) || defined(_WIN64)))
167 Not a native Windows build target.
171 ac_cv_native_windows="yes"
173 ac_cv_native_windows="no"
177 case "$ac_cv_native_windows" in
179 AC_DEFINE_UNQUOTED(NATIVE_WINDOWS, 1,
180 [Define to 1 if you are building a native Windows target.])
186 dnl CURL_CHECK_HEADER_WINSOCK
187 dnl -------------------------------------------------
188 dnl Check for compilable and valid winsock.h header
190 AC_DEFUN([CURL_CHECK_HEADER_WINSOCK], [
191 AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
192 AC_CACHE_CHECK([for winsock.h], [ac_cv_header_winsock_h], [
196 #ifndef WIN32_LEAN_AND_MEAN
197 #define WIN32_LEAN_AND_MEAN
202 #if defined(__CYGWIN__) || defined(__CEGCC__)
203 HAVE_WINSOCK_H shall not be defined.
205 int dummy=WSACleanup();
209 ac_cv_header_winsock_h="yes"
211 ac_cv_header_winsock_h="no"
214 case "$ac_cv_header_winsock_h" in
216 AC_DEFINE_UNQUOTED(HAVE_WINSOCK_H, 1,
217 [Define to 1 if you have the winsock.h header file.])
223 dnl CURL_CHECK_HEADER_WINSOCK2
224 dnl -------------------------------------------------
225 dnl Check for compilable and valid winsock2.h header
227 AC_DEFUN([CURL_CHECK_HEADER_WINSOCK2], [
228 AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
229 AC_CACHE_CHECK([for winsock2.h], [ac_cv_header_winsock2_h], [
233 #ifndef WIN32_LEAN_AND_MEAN
234 #define WIN32_LEAN_AND_MEAN
237 #include <winsock2.h>
239 #if defined(__CYGWIN__) || defined(__CEGCC__) || defined(__MINGW32CE__)
240 HAVE_WINSOCK2_H shall not be defined.
242 int dummy=2*IPPROTO_ESP;
246 ac_cv_header_winsock2_h="yes"
248 ac_cv_header_winsock2_h="no"
251 case "$ac_cv_header_winsock2_h" in
253 AC_DEFINE_UNQUOTED(HAVE_WINSOCK2_H, 1,
254 [Define to 1 if you have the winsock2.h header file.])
260 dnl CURL_CHECK_HEADER_WS2TCPIP
261 dnl -------------------------------------------------
262 dnl Check for compilable and valid ws2tcpip.h header
264 AC_DEFUN([CURL_CHECK_HEADER_WS2TCPIP], [
265 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
266 AC_CACHE_CHECK([for ws2tcpip.h], [ac_cv_header_ws2tcpip_h], [
270 #ifndef WIN32_LEAN_AND_MEAN
271 #define WIN32_LEAN_AND_MEAN
274 #include <winsock2.h>
275 #include <ws2tcpip.h>
277 #if defined(__CYGWIN__) || defined(__CEGCC__) || defined(__MINGW32CE__)
278 HAVE_WS2TCPIP_H shall not be defined.
280 int dummy=2*IP_PKTINFO;
284 ac_cv_header_ws2tcpip_h="yes"
286 ac_cv_header_ws2tcpip_h="no"
289 case "$ac_cv_header_ws2tcpip_h" in
291 AC_DEFINE_UNQUOTED(HAVE_WS2TCPIP_H, 1,
292 [Define to 1 if you have the ws2tcpip.h header file.])
298 dnl CURL_CHECK_HEADER_WINLDAP
299 dnl -------------------------------------------------
300 dnl Check for compilable and valid winldap.h header
302 AC_DEFUN([CURL_CHECK_HEADER_WINLDAP], [
303 AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
304 AC_CACHE_CHECK([for winldap.h], [ac_cv_header_winldap_h], [
308 #ifdef HAVE_WINDOWS_H
309 #ifndef WIN32_LEAN_AND_MEAN
310 #define WIN32_LEAN_AND_MEAN
316 #if defined(__CYGWIN__) || defined(__CEGCC__)
317 HAVE_WINLDAP_H shall not be defined.
319 LDAP *ldp = ldap_init("dummy", LDAP_PORT);
320 ULONG res = ldap_unbind(ldp);
324 ac_cv_header_winldap_h="yes"
326 ac_cv_header_winldap_h="no"
329 case "$ac_cv_header_winldap_h" in
331 AC_DEFINE_UNQUOTED(HAVE_WINLDAP_H, 1,
332 [Define to 1 if you have the winldap.h header file.])
338 dnl CURL_CHECK_HEADER_WINBER
339 dnl -------------------------------------------------
340 dnl Check for compilable and valid winber.h header
342 AC_DEFUN([CURL_CHECK_HEADER_WINBER], [
343 AC_REQUIRE([CURL_CHECK_HEADER_WINLDAP])dnl
344 AC_CACHE_CHECK([for winber.h], [ac_cv_header_winber_h], [
348 #ifdef HAVE_WINDOWS_H
349 #ifndef WIN32_LEAN_AND_MEAN
350 #define WIN32_LEAN_AND_MEAN
357 #if defined(__CYGWIN__) || defined(__CEGCC__)
358 HAVE_WINBER_H shall not be defined.
361 BerElement *bep = ber_init(bvp);
366 ac_cv_header_winber_h="yes"
368 ac_cv_header_winber_h="no"
371 case "$ac_cv_header_winber_h" in
373 AC_DEFINE_UNQUOTED(HAVE_WINBER_H, 1,
374 [Define to 1 if you have the winber.h header file.])
380 dnl CURL_CHECK_HEADER_LBER
381 dnl -------------------------------------------------
382 dnl Check for compilable and valid lber.h header,
383 dnl and check if it is needed even with ldap.h
385 AC_DEFUN([CURL_CHECK_HEADER_LBER], [
386 AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
387 AC_CACHE_CHECK([for lber.h], [ac_cv_header_lber_h], [
391 #ifdef HAVE_WINDOWS_H
392 #ifndef WIN32_LEAN_AND_MEAN
393 #define WIN32_LEAN_AND_MEAN
397 #ifdef HAVE_SYS_TYPES_H
398 #include <sys/types.h>
402 #define NULL (void *)0
406 BerValue *bvp = NULL;
407 BerElement *bep = ber_init(bvp);
411 ac_cv_header_lber_h="yes"
413 ac_cv_header_lber_h="no"
416 if test "$ac_cv_header_lber_h" = "yes"; then
417 AC_DEFINE_UNQUOTED(HAVE_LBER_H, 1,
418 [Define to 1 if you have the lber.h header file.])
423 #ifdef HAVE_WINDOWS_H
424 #ifndef WIN32_LEAN_AND_MEAN
425 #define WIN32_LEAN_AND_MEAN
429 #ifdef HAVE_SYS_TYPES_H
430 #include <sys/types.h>
434 #define NULL (void *)0
436 #ifndef LDAP_DEPRECATED
437 #define LDAP_DEPRECATED 1
441 BerValue *bvp = NULL;
442 BerElement *bep = ber_init(bvp);
446 curl_cv_need_header_lber_h="no"
448 curl_cv_need_header_lber_h="yes"
451 case "$curl_cv_need_header_lber_h" in
453 AC_DEFINE_UNQUOTED(NEED_LBER_H, 1,
454 [Define to 1 if you need the lber.h header file even with ldap.h])
461 dnl CURL_CHECK_HEADER_LDAP
462 dnl -------------------------------------------------
463 dnl Check for compilable and valid ldap.h header
465 AC_DEFUN([CURL_CHECK_HEADER_LDAP], [
466 AC_REQUIRE([CURL_CHECK_HEADER_LBER])dnl
467 AC_CACHE_CHECK([for ldap.h], [ac_cv_header_ldap_h], [
471 #ifdef HAVE_WINDOWS_H
472 #ifndef WIN32_LEAN_AND_MEAN
473 #define WIN32_LEAN_AND_MEAN
477 #ifdef HAVE_SYS_TYPES_H
478 #include <sys/types.h>
481 #ifndef LDAP_DEPRECATED
482 #define LDAP_DEPRECATED 1
489 LDAP *ldp = ldap_init("dummy", LDAP_PORT);
490 int res = ldap_unbind(ldp);
493 ac_cv_header_ldap_h="yes"
495 ac_cv_header_ldap_h="no"
498 case "$ac_cv_header_ldap_h" in
500 AC_DEFINE_UNQUOTED(HAVE_LDAP_H, 1,
501 [Define to 1 if you have the ldap.h header file.])
507 dnl CURL_CHECK_HEADER_LDAP_SSL
508 dnl -------------------------------------------------
509 dnl Check for compilable and valid ldap_ssl.h header
511 AC_DEFUN([CURL_CHECK_HEADER_LDAP_SSL], [
512 AC_REQUIRE([CURL_CHECK_HEADER_LDAP])dnl
513 AC_CACHE_CHECK([for ldap_ssl.h], [ac_cv_header_ldap_ssl_h], [
517 #ifdef HAVE_WINDOWS_H
518 #ifndef WIN32_LEAN_AND_MEAN
519 #define WIN32_LEAN_AND_MEAN
523 #ifdef HAVE_SYS_TYPES_H
524 #include <sys/types.h>
527 #ifndef LDAP_DEPRECATED
528 #define LDAP_DEPRECATED 1
536 #include <ldap_ssl.h>
538 LDAP *ldp = ldapssl_init("dummy", LDAPS_PORT, 1);
541 ac_cv_header_ldap_ssl_h="yes"
543 ac_cv_header_ldap_ssl_h="no"
546 case "$ac_cv_header_ldap_ssl_h" in
548 AC_DEFINE_UNQUOTED(HAVE_LDAP_SSL_H, 1,
549 [Define to 1 if you have the ldap_ssl.h header file.])
555 dnl CURL_CHECK_HEADER_LDAPSSL
556 dnl -------------------------------------------------
557 dnl Check for compilable and valid ldapssl.h header
559 AC_DEFUN([CURL_CHECK_HEADER_LDAPSSL], [
560 AC_REQUIRE([CURL_CHECK_HEADER_LDAP])dnl
561 AC_CACHE_CHECK([for ldapssl.h], [ac_cv_header_ldapssl_h], [
565 #ifdef HAVE_WINDOWS_H
566 #ifndef WIN32_LEAN_AND_MEAN
567 #define WIN32_LEAN_AND_MEAN
571 #ifdef HAVE_SYS_TYPES_H
572 #include <sys/types.h>
576 #define NULL (void *)0
578 #ifndef LDAP_DEPRECATED
579 #define LDAP_DEPRECATED 1
589 char *cert_label = NULL;
590 LDAP *ldp = ldap_ssl_init("dummy", LDAPS_PORT, cert_label);
593 ac_cv_header_ldapssl_h="yes"
595 ac_cv_header_ldapssl_h="no"
598 case "$ac_cv_header_ldapssl_h" in
600 AC_DEFINE_UNQUOTED(HAVE_LDAPSSL_H, 1,
601 [Define to 1 if you have the ldapssl.h header file.])
607 dnl CURL_CHECK_LIBS_WINLDAP
608 dnl -------------------------------------------------
609 dnl Check for libraries needed for WINLDAP support,
610 dnl and prepended to LIBS any needed libraries.
611 dnl This macro can take an optional parameter with a
612 dnl white space separated list of libraries to check
613 dnl before the WINLDAP default ones.
615 AC_DEFUN([CURL_CHECK_LIBS_WINLDAP], [
616 AC_REQUIRE([CURL_CHECK_HEADER_WINBER])dnl
618 AC_MSG_CHECKING([for WINLDAP libraries])
632 if test -z "$u_libs"; then
635 u_libs="$u_libs $l_lib"
640 curl_cv_save_LIBS="$LIBS"
641 curl_cv_ldap_LIBS="unknown"
643 for x_nlibs in '' "$u_libs" \
645 if test "$curl_cv_ldap_LIBS" = "unknown"; then
646 if test -z "$x_nlibs"; then
647 LIBS="$curl_cv_save_LIBS"
649 LIBS="$x_nlibs $curl_cv_save_LIBS"
654 #ifdef HAVE_WINDOWS_H
655 #ifndef WIN32_LEAN_AND_MEAN
656 #define WIN32_LEAN_AND_MEAN
659 #ifdef HAVE_WINLDAP_H
668 BerElement *bep = ber_init(bvp);
669 LDAP *ldp = ldap_init("dummy", LDAP_PORT);
670 ULONG res = ldap_unbind(ldp);
674 curl_cv_ldap_LIBS="$x_nlibs"
679 LIBS="$curl_cv_save_LIBS"
681 case X-"$curl_cv_ldap_LIBS" in
683 AC_MSG_RESULT([cannot find WINLDAP libraries])
686 AC_MSG_RESULT([no additional lib required])
689 if test -z "$curl_cv_save_LIBS"; then
690 LIBS="$curl_cv_ldap_LIBS"
692 LIBS="$curl_cv_ldap_LIBS $curl_cv_save_LIBS"
694 AC_MSG_RESULT([$curl_cv_ldap_LIBS])
701 dnl CURL_CHECK_LIBS_LDAP
702 dnl -------------------------------------------------
703 dnl Check for libraries needed for LDAP support,
704 dnl and prepended to LIBS any needed libraries.
705 dnl This macro can take an optional parameter with a
706 dnl white space separated list of libraries to check
707 dnl before the default ones.
709 AC_DEFUN([CURL_CHECK_LIBS_LDAP], [
710 AC_REQUIRE([CURL_CHECK_HEADER_LDAP])dnl
712 AC_MSG_CHECKING([for LDAP libraries])
726 if test -z "$u_libs"; then
729 u_libs="$u_libs $l_lib"
734 curl_cv_save_LIBS="$LIBS"
735 curl_cv_ldap_LIBS="unknown"
737 for x_nlibs in '' "$u_libs" \
741 '-lldapssl -lldapx -lldapsdk' \
742 '-lldapsdk -lldapx -lldapssl' ; do
743 if test "$curl_cv_ldap_LIBS" = "unknown"; then
744 if test -z "$x_nlibs"; then
745 LIBS="$curl_cv_save_LIBS"
747 LIBS="$x_nlibs $curl_cv_save_LIBS"
752 #ifdef HAVE_WINDOWS_H
753 #ifndef WIN32_LEAN_AND_MEAN
754 #define WIN32_LEAN_AND_MEAN
758 #ifdef HAVE_SYS_TYPES_H
759 #include <sys/types.h>
763 #define NULL (void *)0
765 #ifndef LDAP_DEPRECATED
766 #define LDAP_DEPRECATED 1
775 BerValue *bvp = NULL;
776 BerElement *bep = ber_init(bvp);
777 LDAP *ldp = ldap_init("dummy", LDAP_PORT);
778 int res = ldap_unbind(ldp);
782 curl_cv_ldap_LIBS="$x_nlibs"
787 LIBS="$curl_cv_save_LIBS"
789 case X-"$curl_cv_ldap_LIBS" in
791 AC_MSG_RESULT([cannot find LDAP libraries])
794 AC_MSG_RESULT([no additional lib required])
797 if test -z "$curl_cv_save_LIBS"; then
798 LIBS="$curl_cv_ldap_LIBS"
800 LIBS="$curl_cv_ldap_LIBS $curl_cv_save_LIBS"
802 AC_MSG_RESULT([$curl_cv_ldap_LIBS])
809 dnl CURL_CHECK_HEADER_MALLOC
810 dnl -------------------------------------------------
811 dnl Check for compilable and valid malloc.h header,
812 dnl and check if it is needed even with stdlib.h
814 AC_DEFUN([CURL_CHECK_HEADER_MALLOC], [
815 AC_CACHE_CHECK([for malloc.h], [ac_cv_header_malloc_h], [
820 void *p = malloc(10);
821 void *q = calloc(10,10);
826 ac_cv_header_malloc_h="yes"
828 ac_cv_header_malloc_h="no"
831 if test "$ac_cv_header_malloc_h" = "yes"; then
832 AC_DEFINE_UNQUOTED(HAVE_MALLOC_H, 1,
833 [Define to 1 if you have the malloc.h header file.])
839 void *p = malloc(10);
840 void *q = calloc(10,10);
845 curl_cv_need_header_malloc_h="no"
847 curl_cv_need_header_malloc_h="yes"
850 case "$curl_cv_need_header_malloc_h" in
852 AC_DEFINE_UNQUOTED(NEED_MALLOC_H, 1,
853 [Define to 1 if you need the malloc.h header file even with stdlib.h])
860 dnl CURL_CHECK_TYPE_SOCKLEN_T
861 dnl -------------------------------------------------
862 dnl Check for existing socklen_t type, and provide
863 dnl an equivalent type if socklen_t not available
865 AC_DEFUN([CURL_CHECK_TYPE_SOCKLEN_T], [
866 AC_REQUIRE([CURL_CHECK_HEADER_WS2TCPIP])dnl
867 AC_CHECK_TYPE([socklen_t], ,[
868 dnl socklen_t not available
869 AC_CACHE_CHECK([for socklen_t equivalent],
870 [curl_cv_socklen_t_equiv], [
871 curl_cv_socklen_t_equiv="unknown"
872 for arg1 in 'int' 'SOCKET'; do
873 for arg2 in "struct sockaddr" void; do
874 for t in int size_t unsigned long "unsigned long"; do
875 if test "$curl_cv_socklen_t_equiv" = "unknown"; then
879 #ifdef HAVE_WINDOWS_H
880 #ifndef WIN32_LEAN_AND_MEAN
881 #define WIN32_LEAN_AND_MEAN
884 #ifdef HAVE_WINSOCK2_H
885 #include <winsock2.h>
887 #ifdef HAVE_WINSOCK_H
891 #define GETPEERNCALLCONV PASCAL
893 #ifdef HAVE_SYS_TYPES_H
894 #include <sys/types.h>
896 #ifdef HAVE_SYS_SOCKET_H
897 #include <sys/socket.h>
899 #define GETPEERNCALLCONV
901 extern int GETPEERNCALLCONV getpeername($arg1, $arg2 *, $t *);
904 getpeername(0,0,&len);
907 curl_cv_socklen_t_equiv="$t"
914 case "$curl_cv_socklen_t_equiv" in
916 AC_MSG_ERROR([Cannot find a type to use in place of socklen_t])
919 AC_DEFINE_UNQUOTED(socklen_t, $curl_cv_socklen_t_equiv,
920 [Type to use in place of socklen_t when system does not provide it.])
925 #ifdef HAVE_WINDOWS_H
926 #ifndef WIN32_LEAN_AND_MEAN
927 #define WIN32_LEAN_AND_MEAN
930 #ifdef HAVE_WINSOCK2_H
931 #include <winsock2.h>
932 #ifdef HAVE_WS2TCPIP_H
933 #include <ws2tcpip.h>
937 #ifdef HAVE_SYS_TYPES_H
938 #include <sys/types.h>
940 #ifdef HAVE_SYS_SOCKET_H
941 #include <sys/socket.h>
948 dnl CURL_CHECK_FUNC_GETNAMEINFO
949 dnl -------------------------------------------------
950 dnl Test if the getnameinfo function is available,
951 dnl and check the types of five of its arguments.
952 dnl If the function succeeds HAVE_GETNAMEINFO will be
953 dnl defined, defining the types of the arguments in
954 dnl GETNAMEINFO_TYPE_ARG1, GETNAMEINFO_TYPE_ARG2,
955 dnl GETNAMEINFO_TYPE_ARG46 and GETNAMEINFO_TYPE_ARG7,
956 dnl and also defining the type qualifier of first
957 dnl argument in GETNAMEINFO_QUAL_ARG1.
959 AC_DEFUN([CURL_CHECK_FUNC_GETNAMEINFO], [
960 AC_REQUIRE([CURL_CHECK_HEADER_WS2TCPIP])dnl
961 AC_REQUIRE([CURL_CHECK_TYPE_SOCKLEN_T])dnl
962 AC_CHECK_HEADERS(sys/types.h sys/socket.h netdb.h)
964 AC_MSG_CHECKING([for getnameinfo])
966 AC_LANG_FUNC_LINK_TRY([getnameinfo])
969 curl_cv_getnameinfo="yes"
972 curl_cv_getnameinfo="no"
975 if test "$curl_cv_getnameinfo" != "yes"; then
976 AC_MSG_CHECKING([deeper for getnameinfo])
984 curl_cv_getnameinfo="yes"
986 AC_MSG_RESULT([but still no])
987 curl_cv_getnameinfo="no"
991 if test "$curl_cv_getnameinfo" != "yes"; then
992 AC_MSG_CHECKING([deeper and deeper for getnameinfo])
996 #ifdef HAVE_WINDOWS_H
997 #ifndef WIN32_LEAN_AND_MEAN
998 #define WIN32_LEAN_AND_MEAN
1000 #include <windows.h>
1001 #ifdef HAVE_WINSOCK2_H
1002 #include <winsock2.h>
1003 #ifdef HAVE_WS2TCPIP_H
1004 #include <ws2tcpip.h>
1008 #ifdef HAVE_SYS_TYPES_H
1009 #include <sys/types.h>
1011 #ifdef HAVE_SYS_SOCKET_H
1012 #include <sys/socket.h>
1019 getnameinfo(0, 0, 0, 0, 0, 0, 0);
1022 AC_MSG_RESULT([yes])
1023 curl_cv_getnameinfo="yes"
1025 AC_MSG_RESULT([but still no])
1026 curl_cv_getnameinfo="no"
1030 if test "$curl_cv_getnameinfo" = "yes"; then
1031 AC_CACHE_CHECK([types of arguments for getnameinfo],
1032 [curl_cv_func_getnameinfo_args], [
1033 curl_cv_func_getnameinfo_args="unknown"
1034 for gni_arg1 in 'struct sockaddr *' 'const struct sockaddr *' 'void *'; do
1035 for gni_arg2 in 'socklen_t' 'size_t' 'int'; do
1036 for gni_arg46 in 'size_t' 'int' 'socklen_t' 'unsigned int' 'DWORD'; do
1037 for gni_arg7 in 'int' 'unsigned int'; do
1038 if test "$curl_cv_func_getnameinfo_args" = "unknown"; then
1042 #ifdef HAVE_WINDOWS_H
1043 #ifndef WIN32_LEAN_AND_MEAN
1044 #define WIN32_LEAN_AND_MEAN
1046 #if (!defined(_WIN32_WINNT)) || (_WIN32_WINNT < 0x0501)
1048 #define _WIN32_WINNT 0x0501
1050 #include <windows.h>
1051 #ifdef HAVE_WINSOCK2_H
1052 #include <winsock2.h>
1053 #ifdef HAVE_WS2TCPIP_H
1054 #include <ws2tcpip.h>
1057 #define GNICALLCONV WSAAPI
1059 #ifdef HAVE_SYS_TYPES_H
1060 #include <sys/types.h>
1062 #ifdef HAVE_SYS_SOCKET_H
1063 #include <sys/socket.h>
1070 extern int GNICALLCONV getnameinfo($gni_arg1, $gni_arg2,
1076 $gni_arg46 hostlen=0;
1077 $gni_arg46 servlen=0;
1079 int res = getnameinfo(0, salen, 0, hostlen, 0, servlen, flags);
1082 curl_cv_func_getnameinfo_args="$gni_arg1,$gni_arg2,$gni_arg46,$gni_arg7"
1090 if test "$curl_cv_func_getnameinfo_args" = "unknown"; then
1091 AC_MSG_WARN([Cannot find proper types to use for getnameinfo args])
1092 AC_MSG_WARN([HAVE_GETNAMEINFO will not be defined])
1094 gni_prev_IFS=$IFS; IFS=','
1095 set dummy `echo "$curl_cv_func_getnameinfo_args" | sed 's/\*/\*/g'`
1099 gni_qual_type_arg1=$[1]
1101 AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG2, $[2],
1102 [Define to the type of arg 2 for getnameinfo.])
1103 AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG46, $[3],
1104 [Define to the type of args 4 and 6 for getnameinfo.])
1105 AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG7, $[4],
1106 [Define to the type of arg 7 for getnameinfo.])
1110 case $prev_sh_opts in
1118 case "$gni_qual_type_arg1" in
1121 gni_type_arg1=`echo $gni_qual_type_arg1 | sed 's/^const //'`
1125 gni_type_arg1=$gni_qual_type_arg1
1129 AC_DEFINE_UNQUOTED(GETNAMEINFO_QUAL_ARG1, $gni_qual_arg1,
1130 [Define to the type qualifier of arg 1 for getnameinfo.])
1131 AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG1, $gni_type_arg1,
1132 [Define to the type of arg 1 for getnameinfo.])
1134 case $prev_sh_opts in
1142 AC_DEFINE_UNQUOTED(HAVE_GETNAMEINFO, 1,
1143 [Define to 1 if you have the getnameinfo function.])
1144 ac_cv_func_getnameinfo="yes"
1150 dnl TYPE_SOCKADDR_STORAGE
1151 dnl -------------------------------------------------
1152 dnl Check for struct sockaddr_storage. Most IPv6-enabled
1153 dnl hosts have it, but AIX 4.3 is one known exception.
1155 AC_DEFUN([TYPE_SOCKADDR_STORAGE],
1157 AC_CHECK_TYPE([struct sockaddr_storage],
1158 AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE, 1,
1159 [if struct sockaddr_storage is defined]), ,
1162 #ifdef HAVE_WINDOWS_H
1163 #ifndef WIN32_LEAN_AND_MEAN
1164 #define WIN32_LEAN_AND_MEAN
1166 #include <windows.h>
1167 #ifdef HAVE_WINSOCK2_H
1168 #include <winsock2.h>
1171 #ifdef HAVE_SYS_TYPES_H
1172 #include <sys/types.h>
1174 #ifdef HAVE_SYS_SOCKET_H
1175 #include <sys/socket.h>
1177 #ifdef HAVE_NETINET_IN_H
1178 #include <netinet/in.h>
1180 #ifdef HAVE_ARPA_INET_H
1181 #include <arpa/inet.h>
1188 dnl CURL_CHECK_NI_WITHSCOPEID
1189 dnl -------------------------------------------------
1190 dnl Check for working NI_WITHSCOPEID in getnameinfo()
1192 AC_DEFUN([CURL_CHECK_NI_WITHSCOPEID], [
1193 AC_REQUIRE([CURL_CHECK_FUNC_GETNAMEINFO])dnl
1194 AC_REQUIRE([TYPE_SOCKADDR_STORAGE])dnl
1195 AC_CHECK_HEADERS(stdio.h sys/types.h sys/socket.h \
1196 netdb.h netinet/in.h arpa/inet.h)
1198 AC_CACHE_CHECK([for working NI_WITHSCOPEID],
1199 [ac_cv_working_ni_withscopeid], [
1205 #ifdef HAVE_SYS_TYPES_H
1206 #include <sys/types.h>
1208 #ifdef HAVE_SYS_SOCKET_H
1209 #include <sys/socket.h>
1214 #ifdef HAVE_NETINET_IN_H
1215 #include <netinet/in.h>
1217 #ifdef HAVE_ARPA_INET_H
1218 #include <arpa/inet.h>
1221 #if defined(NI_WITHSCOPEID) && defined(HAVE_GETNAMEINFO)
1222 #ifdef HAVE_STRUCT_SOCKADDR_STORAGE
1223 struct sockaddr_storage sa;
1225 unsigned char sa[256];
1227 char hostbuf[NI_MAXHOST];
1229 GETNAMEINFO_TYPE_ARG2 salen = (GETNAMEINFO_TYPE_ARG2)sizeof(sa);
1230 GETNAMEINFO_TYPE_ARG46 hostlen = (GETNAMEINFO_TYPE_ARG46)sizeof(hostbuf);
1231 GETNAMEINFO_TYPE_ARG7 flags = NI_NUMERICHOST | NI_NUMERICSERV | NI_WITHSCOPEID;
1232 int fd = socket(AF_INET6, SOCK_STREAM, 0);
1235 return 1; /* Error creating socket */
1237 rc = getsockname(fd, (GETNAMEINFO_TYPE_ARG1)&sa, &salen);
1239 perror("getsockname()");
1240 return 2; /* Error retrieving socket name */
1242 rc = getnameinfo((GETNAMEINFO_TYPE_ARG1)&sa, salen, hostbuf, hostlen, NULL, 0, flags);
1244 printf("rc = %s\n", gai_strerror(rc));
1245 return 3; /* Error translating socket address */
1247 return 0; /* Ok, NI_WITHSCOPEID works */
1249 return 4; /* Error, NI_WITHSCOPEID not defined or no getnameinfo() */
1251 ]]) # AC_LANG_PROGRAM
1253 # Exit code == 0. Program worked.
1254 ac_cv_working_ni_withscopeid="yes"
1256 # Exit code != 0. Program failed.
1257 ac_cv_working_ni_withscopeid="no"
1259 # Program is not run when cross-compiling. So we assume
1260 # NI_WITHSCOPEID will work if we are able to compile it.
1263 #include <sys/types.h>
1264 #include <sys/socket.h>
1267 unsigned int dummy= NI_NUMERICHOST | NI_NUMERICSERV | NI_WITHSCOPEID;
1270 ac_cv_working_ni_withscopeid="yes"
1272 ac_cv_working_ni_withscopeid="no"
1273 ]) # AC_COMPILE_IFELSE
1276 case "$ac_cv_working_ni_withscopeid" in
1278 AC_DEFINE(HAVE_NI_WITHSCOPEID, 1,
1279 [Define to 1 if NI_WITHSCOPEID exists and works.])
1285 dnl CURL_CHECK_FUNC_RECV
1286 dnl -------------------------------------------------
1287 dnl Test if the socket recv() function is available,
1288 dnl and check its return type and the types of its
1289 dnl arguments. If the function succeeds HAVE_RECV
1290 dnl will be defined, defining the types of the arguments
1291 dnl in RECV_TYPE_ARG1, RECV_TYPE_ARG2, RECV_TYPE_ARG3
1292 dnl and RECV_TYPE_ARG4, defining the type of the function
1293 dnl return value in RECV_TYPE_RETV.
1295 AC_DEFUN([CURL_CHECK_FUNC_RECV], [
1296 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl
1297 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
1298 AC_CHECK_HEADERS(sys/types.h sys/socket.h)
1300 AC_MSG_CHECKING([for recv])
1304 #ifdef HAVE_WINDOWS_H
1305 #ifndef WIN32_LEAN_AND_MEAN
1306 #define WIN32_LEAN_AND_MEAN
1308 #include <windows.h>
1309 #ifdef HAVE_WINSOCK2_H
1310 #include <winsock2.h>
1312 #ifdef HAVE_WINSOCK_H
1313 #include <winsock.h>
1317 #ifdef HAVE_SYS_TYPES_H
1318 #include <sys/types.h>
1320 #ifdef HAVE_SYS_SOCKET_H
1321 #include <sys/socket.h>
1328 AC_MSG_RESULT([yes])
1335 if test "$curl_cv_recv" = "yes"; then
1336 AC_CACHE_CHECK([types of args and return type for recv],
1337 [curl_cv_func_recv_args], [
1338 curl_cv_func_recv_args="unknown"
1339 for recv_retv in 'int' 'ssize_t'; do
1340 for recv_arg1 in 'int' 'ssize_t' 'SOCKET'; do
1341 for recv_arg2 in 'char *' 'void *'; do
1342 for recv_arg3 in 'size_t' 'int' 'socklen_t' 'unsigned int'; do
1343 for recv_arg4 in 'int' 'unsigned int'; do
1344 if test "$curl_cv_func_recv_args" = "unknown"; then
1348 #ifdef HAVE_WINDOWS_H
1349 #ifndef WIN32_LEAN_AND_MEAN
1350 #define WIN32_LEAN_AND_MEAN
1352 #include <windows.h>
1353 #ifdef HAVE_WINSOCK2_H
1354 #include <winsock2.h>
1356 #ifdef HAVE_WINSOCK_H
1357 #include <winsock.h>
1360 #define RECVCALLCONV PASCAL
1362 #ifdef HAVE_SYS_TYPES_H
1363 #include <sys/types.h>
1365 #ifdef HAVE_SYS_SOCKET_H
1366 #include <sys/socket.h>
1368 #define RECVCALLCONV
1370 extern $recv_retv RECVCALLCONV
1371 recv($recv_arg1, $recv_arg2, $recv_arg3, $recv_arg4);
1377 $recv_retv res = recv(s, buf, len, flags);
1380 curl_cv_func_recv_args="$recv_arg1,$recv_arg2,$recv_arg3,$recv_arg4,$recv_retv"
1389 if test "$curl_cv_func_recv_args" = "unknown"; then
1390 AC_MSG_ERROR([Cannot find proper types to use for recv args])
1392 recv_prev_IFS=$IFS; IFS=','
1393 set dummy `echo "$curl_cv_func_recv_args" | sed 's/\*/\*/g'`
1397 AC_DEFINE_UNQUOTED(RECV_TYPE_ARG1, $[1],
1398 [Define to the type of arg 1 for recv.])
1399 AC_DEFINE_UNQUOTED(RECV_TYPE_ARG2, $[2],
1400 [Define to the type of arg 2 for recv.])
1401 AC_DEFINE_UNQUOTED(RECV_TYPE_ARG3, $[3],
1402 [Define to the type of arg 3 for recv.])
1403 AC_DEFINE_UNQUOTED(RECV_TYPE_ARG4, $[4],
1404 [Define to the type of arg 4 for recv.])
1405 AC_DEFINE_UNQUOTED(RECV_TYPE_RETV, $[5],
1406 [Define to the function return type for recv.])
1408 AC_DEFINE_UNQUOTED(HAVE_RECV, 1,
1409 [Define to 1 if you have the recv function.])
1410 ac_cv_func_recv="yes"
1413 AC_MSG_ERROR([Unable to link function recv])
1418 dnl CURL_CHECK_FUNC_SEND
1419 dnl -------------------------------------------------
1420 dnl Test if the socket send() function is available,
1421 dnl and check its return type and the types of its
1422 dnl arguments. If the function succeeds HAVE_SEND
1423 dnl will be defined, defining the types of the arguments
1424 dnl in SEND_TYPE_ARG1, SEND_TYPE_ARG2, SEND_TYPE_ARG3
1425 dnl and SEND_TYPE_ARG4, defining the type of the function
1426 dnl return value in SEND_TYPE_RETV, and also defining the
1427 dnl type qualifier of second argument in SEND_QUAL_ARG2.
1429 AC_DEFUN([CURL_CHECK_FUNC_SEND], [
1430 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl
1431 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
1432 AC_CHECK_HEADERS(sys/types.h sys/socket.h)
1434 AC_MSG_CHECKING([for send])
1438 #ifdef HAVE_WINDOWS_H
1439 #ifndef WIN32_LEAN_AND_MEAN
1440 #define WIN32_LEAN_AND_MEAN
1442 #include <windows.h>
1443 #ifdef HAVE_WINSOCK2_H
1444 #include <winsock2.h>
1446 #ifdef HAVE_WINSOCK_H
1447 #include <winsock.h>
1451 #ifdef HAVE_SYS_TYPES_H
1452 #include <sys/types.h>
1454 #ifdef HAVE_SYS_SOCKET_H
1455 #include <sys/socket.h>
1462 AC_MSG_RESULT([yes])
1469 if test "$curl_cv_send" = "yes"; then
1470 AC_CACHE_CHECK([types of args and return type for send],
1471 [curl_cv_func_send_args], [
1472 curl_cv_func_send_args="unknown"
1473 for send_retv in 'int' 'ssize_t'; do
1474 for send_arg1 in 'int' 'ssize_t' 'SOCKET'; do
1475 for send_arg2 in 'char *' 'void *' 'const char *' 'const void *'; do
1476 for send_arg3 in 'size_t' 'int' 'socklen_t' 'unsigned int'; do
1477 for send_arg4 in 'int' 'unsigned int'; do
1478 if test "$curl_cv_func_send_args" = "unknown"; then
1482 #ifdef HAVE_WINDOWS_H
1483 #ifndef WIN32_LEAN_AND_MEAN
1484 #define WIN32_LEAN_AND_MEAN
1486 #include <windows.h>
1487 #ifdef HAVE_WINSOCK2_H
1488 #include <winsock2.h>
1490 #ifdef HAVE_WINSOCK_H
1491 #include <winsock.h>
1494 #define SENDCALLCONV PASCAL
1496 #ifdef HAVE_SYS_TYPES_H
1497 #include <sys/types.h>
1499 #ifdef HAVE_SYS_SOCKET_H
1500 #include <sys/socket.h>
1502 #define SENDCALLCONV
1504 extern $send_retv SENDCALLCONV
1505 send($send_arg1, $send_arg2, $send_arg3, $send_arg4);
1510 $send_retv res = send(s, 0, len, flags);
1513 curl_cv_func_send_args="$send_arg1,$send_arg2,$send_arg3,$send_arg4,$send_retv"
1522 if test "$curl_cv_func_send_args" = "unknown"; then
1523 AC_MSG_ERROR([Cannot find proper types to use for send args])
1525 send_prev_IFS=$IFS; IFS=','
1526 set dummy `echo "$curl_cv_func_send_args" | sed 's/\*/\*/g'`
1530 send_qual_type_arg2=$[2]
1532 AC_DEFINE_UNQUOTED(SEND_TYPE_ARG1, $[1],
1533 [Define to the type of arg 1 for send.])
1534 AC_DEFINE_UNQUOTED(SEND_TYPE_ARG3, $[3],
1535 [Define to the type of arg 3 for send.])
1536 AC_DEFINE_UNQUOTED(SEND_TYPE_ARG4, $[4],
1537 [Define to the type of arg 4 for send.])
1538 AC_DEFINE_UNQUOTED(SEND_TYPE_RETV, $[5],
1539 [Define to the function return type for send.])
1543 case $prev_sh_opts in
1551 case "$send_qual_type_arg2" in
1553 send_qual_arg2=const
1554 send_type_arg2=`echo $send_qual_type_arg2 | sed 's/^const //'`
1558 send_type_arg2=$send_qual_type_arg2
1562 AC_DEFINE_UNQUOTED(SEND_QUAL_ARG2, $send_qual_arg2,
1563 [Define to the type qualifier of arg 2 for send.])
1564 AC_DEFINE_UNQUOTED(SEND_TYPE_ARG2, $send_type_arg2,
1565 [Define to the type of arg 2 for send.])
1567 case $prev_sh_opts in
1575 AC_DEFINE_UNQUOTED(HAVE_SEND, 1,
1576 [Define to 1 if you have the send function.])
1577 ac_cv_func_send="yes"
1580 AC_MSG_ERROR([Unable to link function send])
1585 dnl CURL_CHECK_FUNC_RECVFROM
1586 dnl -------------------------------------------------
1587 dnl Test if the socket recvfrom() function is available,
1588 dnl and check its return type and the types of its
1589 dnl arguments. If the function succeeds HAVE_RECVFROM
1590 dnl will be defined, defining the types of the arguments
1591 dnl in RECVFROM_TYPE_ARG1, RECVFROM_TYPE_ARG2, and so on
1592 dnl to RECVFROM_TYPE_ARG6, defining also the type of the
1593 dnl function return value in RECVFROM_TYPE_RETV.
1594 dnl Notice that the types returned for pointer arguments
1595 dnl will actually be the type pointed by the pointer.
1597 AC_DEFUN([CURL_CHECK_FUNC_RECVFROM], [
1598 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl
1599 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
1600 AC_CHECK_HEADERS(sys/types.h sys/socket.h)
1602 AC_MSG_CHECKING([for recvfrom])
1606 #ifdef HAVE_WINDOWS_H
1607 #ifndef WIN32_LEAN_AND_MEAN
1608 #define WIN32_LEAN_AND_MEAN
1610 #include <windows.h>
1611 #ifdef HAVE_WINSOCK2_H
1612 #include <winsock2.h>
1614 #ifdef HAVE_WINSOCK_H
1615 #include <winsock.h>
1619 #ifdef HAVE_SYS_TYPES_H
1620 #include <sys/types.h>
1622 #ifdef HAVE_SYS_SOCKET_H
1623 #include <sys/socket.h>
1627 recvfrom(0, 0, 0, 0, 0, 0);
1630 AC_MSG_RESULT([yes])
1631 curl_cv_recvfrom="yes"
1634 curl_cv_recvfrom="no"
1637 if test "$curl_cv_recvfrom" = "yes"; then
1638 AC_CACHE_CHECK([types of args and return type for recvfrom],
1639 [curl_cv_func_recvfrom_args], [
1640 curl_cv_func_recvfrom_args="unknown"
1641 for recvfrom_retv in 'int' 'ssize_t'; do
1642 for recvfrom_arg1 in 'int' 'ssize_t' 'SOCKET'; do
1643 for recvfrom_arg2 in 'char *' 'void *'; do
1644 for recvfrom_arg3 in 'size_t' 'int' 'socklen_t' 'unsigned int'; do
1645 for recvfrom_arg4 in 'int' 'unsigned int'; do
1646 for recvfrom_arg5 in 'struct sockaddr *' 'void *'; do
1647 for recvfrom_arg6 in 'socklen_t *' 'int *' 'unsigned int *' 'size_t *' 'void *'; do
1648 if test "$curl_cv_func_recvfrom_args" = "unknown"; then
1652 #ifdef HAVE_WINDOWS_H
1653 #ifndef WIN32_LEAN_AND_MEAN
1654 #define WIN32_LEAN_AND_MEAN
1656 #include <windows.h>
1657 #ifdef HAVE_WINSOCK2_H
1658 #include <winsock2.h>
1660 #ifdef HAVE_WINSOCK_H
1661 #include <winsock.h>
1664 #define RECVFROMCALLCONV PASCAL
1666 #ifdef HAVE_SYS_TYPES_H
1667 #include <sys/types.h>
1669 #ifdef HAVE_SYS_SOCKET_H
1670 #include <sys/socket.h>
1672 #define RECVFROMCALLCONV
1674 extern $recvfrom_retv RECVFROMCALLCONV
1675 recvfrom($recvfrom_arg1, $recvfrom_arg2,
1676 $recvfrom_arg3, $recvfrom_arg4,
1677 $recvfrom_arg5, $recvfrom_arg6);
1680 $recvfrom_arg2 buf=0;
1681 $recvfrom_arg3 len=0;
1682 $recvfrom_arg4 flags=0;
1683 $recvfrom_arg5 addr=0;
1684 $recvfrom_arg6 addrlen=0;
1685 $recvfrom_retv res=0;
1686 res = recvfrom(s, buf, len, flags, addr, addrlen);
1689 curl_cv_func_recvfrom_args="$recvfrom_arg1,$recvfrom_arg2,$recvfrom_arg3,$recvfrom_arg4,$recvfrom_arg5,$recvfrom_arg6,$recvfrom_retv"
1700 if test "$curl_cv_func_recvfrom_args" = "unknown"; then
1701 AC_MSG_ERROR([Cannot find proper types to use for recvfrom args])
1703 recvfrom_prev_IFS=$IFS; IFS=','
1704 set dummy `echo "$curl_cv_func_recvfrom_args" | sed 's/\*/\*/g'`
1705 IFS=$recvfrom_prev_IFS
1708 recvfrom_ptrt_arg2=$[2]
1709 recvfrom_ptrt_arg5=$[5]
1710 recvfrom_ptrt_arg6=$[6]
1712 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG1, $[1],
1713 [Define to the type of arg 1 for recvfrom.])
1714 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG3, $[3],
1715 [Define to the type of arg 3 for recvfrom.])
1716 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG4, $[4],
1717 [Define to the type of arg 4 for recvfrom.])
1718 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_RETV, $[7],
1719 [Define to the function return type for recvfrom.])
1723 case $prev_sh_opts in
1731 recvfrom_type_arg2=`echo $recvfrom_ptrt_arg2 | sed 's/ \*//'`
1732 recvfrom_type_arg5=`echo $recvfrom_ptrt_arg5 | sed 's/ \*//'`
1733 recvfrom_type_arg6=`echo $recvfrom_ptrt_arg6 | sed 's/ \*//'`
1735 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG2, $recvfrom_type_arg2,
1736 [Define to the type pointed by arg 2 for recvfrom.])
1737 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG5, $recvfrom_type_arg5,
1738 [Define to the type pointed by arg 5 for recvfrom.])
1739 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG6, $recvfrom_type_arg6,
1740 [Define to the type pointed by arg 6 for recvfrom.])
1742 if test "$recvfrom_type_arg2" = "void"; then
1743 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG2_IS_VOID, 1,
1744 [Define to 1 if the type pointed by arg 2 for recvfrom is void.])
1746 if test "$recvfrom_type_arg5" = "void"; then
1747 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG5_IS_VOID, 1,
1748 [Define to 1 if the type pointed by arg 5 for recvfrom is void.])
1750 if test "$recvfrom_type_arg6" = "void"; then
1751 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG6_IS_VOID, 1,
1752 [Define to 1 if the type pointed by arg 6 for recvfrom is void.])
1755 case $prev_sh_opts in
1763 AC_DEFINE_UNQUOTED(HAVE_RECVFROM, 1,
1764 [Define to 1 if you have the recvfrom function.])
1765 ac_cv_func_recvfrom="yes"
1768 AC_MSG_ERROR([Unable to link function recvfrom])
1773 dnl CURL_CHECK_MSG_NOSIGNAL
1774 dnl -------------------------------------------------
1775 dnl Check for MSG_NOSIGNAL
1777 AC_DEFUN([CURL_CHECK_MSG_NOSIGNAL], [
1778 AC_CHECK_HEADERS(sys/types.h sys/socket.h)
1779 AC_CACHE_CHECK([for MSG_NOSIGNAL], [ac_cv_msg_nosignal], [
1783 #ifdef HAVE_WINDOWS_H
1784 #ifndef WIN32_LEAN_AND_MEAN
1785 #define WIN32_LEAN_AND_MEAN
1787 #include <windows.h>
1788 #ifdef HAVE_WINSOCK2_H
1789 #include <winsock2.h>
1791 #ifdef HAVE_WINSOCK_H
1792 #include <winsock.h>
1796 #ifdef HAVE_SYS_TYPES_H
1797 #include <sys/types.h>
1799 #ifdef HAVE_SYS_SOCKET_H
1800 #include <sys/socket.h>
1804 int flag=MSG_NOSIGNAL;
1807 ac_cv_msg_nosignal="yes"
1809 ac_cv_msg_nosignal="no"
1812 case "$ac_cv_msg_nosignal" in
1814 AC_DEFINE_UNQUOTED(HAVE_MSG_NOSIGNAL, 1,
1815 [Define to 1 if you have the MSG_NOSIGNAL flag.])
1821 dnl CURL_CHECK_STRUCT_TIMEVAL
1822 dnl -------------------------------------------------
1823 dnl Check for timeval struct
1825 AC_DEFUN([CURL_CHECK_STRUCT_TIMEVAL], [
1826 AC_REQUIRE([AC_HEADER_TIME])dnl
1827 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl
1828 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
1829 AC_CHECK_HEADERS(sys/types.h sys/time.h time.h)
1830 AC_CACHE_CHECK([for struct timeval], [ac_cv_struct_timeval], [
1834 #ifdef HAVE_WINDOWS_H
1835 #ifndef WIN32_LEAN_AND_MEAN
1836 #define WIN32_LEAN_AND_MEAN
1838 #include <windows.h>
1839 #ifdef HAVE_WINSOCK2_H
1840 #include <winsock2.h>
1842 #ifdef HAVE_WINSOCK_H
1843 #include <winsock.h>
1847 #ifdef HAVE_SYS_TYPES_H
1848 #include <sys/types.h>
1850 #ifdef HAVE_SYS_TIME_H
1851 #include <sys/time.h>
1852 #ifdef TIME_WITH_SYS_TIME
1866 ac_cv_struct_timeval="yes"
1868 ac_cv_struct_timeval="no"
1871 case "$ac_cv_struct_timeval" in
1873 AC_DEFINE_UNQUOTED(HAVE_STRUCT_TIMEVAL, 1,
1874 [Define to 1 if you have the timeval struct.])
1880 dnl TYPE_SIG_ATOMIC_T
1881 dnl -------------------------------------------------
1882 dnl Check if the sig_atomic_t type is available, and
1883 dnl verify if it is already defined as volatile.
1885 AC_DEFUN([TYPE_SIG_ATOMIC_T], [
1886 AC_CHECK_HEADERS(signal.h)
1887 AC_CHECK_TYPE([sig_atomic_t],[
1888 AC_DEFINE(HAVE_SIG_ATOMIC_T, 1,
1889 [Define to 1 if sig_atomic_t is an available typedef.])
1891 #ifdef HAVE_SIGNAL_H
1895 case "$ac_cv_type_sig_atomic_t" in
1898 AC_MSG_CHECKING([if sig_atomic_t is already defined as volatile])
1901 #ifdef HAVE_SIGNAL_H
1905 static volatile sig_atomic_t dummy = 0;
1909 ac_cv_sig_atomic_t_volatile="no"
1911 AC_MSG_RESULT([yes])
1912 ac_cv_sig_atomic_t_volatile="yes"
1915 if test "$ac_cv_sig_atomic_t_volatile" = "yes"; then
1916 AC_DEFINE(HAVE_SIG_ATOMIC_T_VOLATILE, 1,
1917 [Define to 1 if sig_atomic_t is already defined as volatile.])
1924 dnl CURL_CHECK_NONBLOCKING_SOCKET
1925 dnl -------------------------------------------------
1926 dnl Check for how to set a socket to non-blocking state. There seems to exist
1927 dnl four known different ways, with the one used almost everywhere being POSIX
1928 dnl and XPG3, while the other different ways for different systems (old BSD,
1929 dnl Windows and Amiga).
1931 dnl There are two known platforms (AIX 3.x and SunOS 4.1.x) where the
1932 dnl O_NONBLOCK define is found but does not work. This condition is attempted
1933 dnl to get caught in this script by using an excessive number of #ifdefs...
1935 AC_DEFUN([CURL_CHECK_NONBLOCKING_SOCKET], [
1936 AC_MSG_CHECKING([non-blocking sockets style])
1941 /* headers for O_NONBLOCK test */
1942 #include <sys/types.h>
1946 #if defined(sun) || defined(__sun__) || \
1947 defined(__SUNPRO_C) || defined(__SUNPRO_CC)
1948 # if defined(__SVR4) || defined(__srv4__)
1949 # define PLATFORM_SOLARIS
1951 # define PLATFORM_SUNOS4
1954 #if (defined(_AIX) || defined(__xlC__)) && !defined(_AIX41)
1955 # define PLATFORM_AIX_V3
1958 #if defined(PLATFORM_SUNOS4) || defined(PLATFORM_AIX_V3) || defined(__BEOS__)
1959 #error "O_NONBLOCK does not work on this platform"
1962 /* O_NONBLOCK source test */
1964 int flags = fcntl(socket, F_SETFL, flags | O_NONBLOCK);
1967 dnl the O_NONBLOCK test was fine
1968 nonblock="O_NONBLOCK"
1969 AC_DEFINE(HAVE_O_NONBLOCK, 1,
1970 [use O_NONBLOCK for non-blocking sockets])
1973 if test "$nonblock" = "unknown"; then
1976 /* headers for FIONBIO test */
1978 #include <stropts.h>
1980 /* FIONBIO source test (old-style unix) */
1982 int flags = ioctl(socket, FIONBIO, &flags);
1985 dnl FIONBIO test was good
1987 AC_DEFINE(HAVE_FIONBIO, 1,
1988 [use FIONBIO for non-blocking sockets])
1992 if test "$nonblock" = "unknown"; then
1995 /* headers for ioctlsocket test (Windows) */
1997 #ifdef HAVE_WINDOWS_H
1998 #ifndef WIN32_LEAN_AND_MEAN
1999 #define WIN32_LEAN_AND_MEAN
2001 #include <windows.h>
2002 #ifdef HAVE_WINSOCK2_H
2003 #include <winsock2.h>
2005 #ifdef HAVE_WINSOCK_H
2006 #include <winsock.h>
2011 /* ioctlsocket source code (Windows) */
2013 unsigned long flags = 0;
2014 sd = socket(0, 0, 0);
2015 ioctlsocket(sd, FIONBIO, &flags);
2018 dnl ioctlsocket test was good
2019 nonblock="ioctlsocket"
2020 AC_DEFINE(HAVE_IOCTLSOCKET, 1,
2021 [use ioctlsocket() for non-blocking sockets])
2025 if test "$nonblock" = "unknown"; then
2028 /* headers for IoctlSocket test (Amiga?) */
2029 #include <sys/ioctl.h>
2031 /* IoctlSocket source code (Amiga?) */
2033 int flags = IoctlSocket(socket, FIONBIO, (long)1);
2036 dnl Ioctlsocket test was good
2037 nonblock="IoctlSocket"
2038 AC_DEFINE(HAVE_IOCTLSOCKET_CASE, 1,
2039 [use Ioctlsocket() for non-blocking sockets])
2043 if test "$nonblock" = "unknown"; then
2046 /* headers for SO_NONBLOCK test (BeOS) */
2049 /* SO_NONBLOCK source code (BeOS) */
2052 int flags = setsockopt(socket, SOL_SOCKET, SO_NONBLOCK, &b, sizeof(b));
2055 dnl the SO_NONBLOCK test was good
2056 nonblock="SO_NONBLOCK"
2057 AC_DEFINE(HAVE_SO_NONBLOCK, 1,
2058 [use SO_NONBLOCK for non-blocking sockets])
2062 AC_MSG_RESULT($nonblock)
2064 if test "$nonblock" = "unknown"; then
2065 AC_DEFINE(HAVE_DISABLED_NONBLOCKING, 1,
2066 [disabled non-blocking sockets])
2067 AC_MSG_WARN([non-block sockets disabled])
2073 dnl -------------------------------------------------
2074 dnl Check for in_addr_t: it is used to receive the return code of inet_addr()
2075 dnl and a few other things.
2077 AC_DEFUN([TYPE_IN_ADDR_T], [
2078 AC_CHECK_TYPE([in_addr_t], ,[
2079 dnl in_addr_t not available
2080 AC_CACHE_CHECK([for in_addr_t equivalent],
2081 [curl_cv_in_addr_t_equiv], [
2082 curl_cv_in_addr_t_equiv="unknown"
2083 for t in "unsigned long" int size_t unsigned long; do
2084 if test "$curl_cv_in_addr_t_equiv" = "unknown"; then
2088 #ifdef HAVE_WINDOWS_H
2089 #ifndef WIN32_LEAN_AND_MEAN
2090 #define WIN32_LEAN_AND_MEAN
2092 #include <windows.h>
2093 #ifdef HAVE_WINSOCK2_H
2094 #include <winsock2.h>
2096 #ifdef HAVE_WINSOCK_H
2097 #include <winsock.h>
2101 #ifdef HAVE_SYS_TYPES_H
2102 #include <sys/types.h>
2104 #ifdef HAVE_SYS_SOCKET_H
2105 #include <sys/socket.h>
2107 #ifdef HAVE_NETINET_IN_H
2108 #include <netinet/in.h>
2110 #ifdef HAVE_ARPA_INET_H
2111 #include <arpa/inet.h>
2115 $t data = inet_addr ("1.2.3.4");
2118 curl_cv_in_addr_t_equiv="$t"
2123 case "$curl_cv_in_addr_t_equiv" in
2125 AC_MSG_ERROR([Cannot find a type to use in place of in_addr_t])
2128 AC_DEFINE_UNQUOTED(in_addr_t, $curl_cv_in_addr_t_equiv,
2129 [Type to use in place of in_addr_t when system does not provide it.])
2134 #ifdef HAVE_WINDOWS_H
2135 #ifndef WIN32_LEAN_AND_MEAN
2136 #define WIN32_LEAN_AND_MEAN
2138 #include <windows.h>
2139 #ifdef HAVE_WINSOCK2_H
2140 #include <winsock2.h>
2142 #ifdef HAVE_WINSOCK_H
2143 #include <winsock.h>
2147 #ifdef HAVE_SYS_TYPES_H
2148 #include <sys/types.h>
2150 #ifdef HAVE_SYS_SOCKET_H
2151 #include <sys/socket.h>
2153 #ifdef HAVE_NETINET_IN_H
2154 #include <netinet/in.h>
2156 #ifdef HAVE_ARPA_INET_H
2157 #include <arpa/inet.h>
2160 ]) dnl AC_CHECK_TYPE
2164 dnl CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC
2165 dnl -------------------------------------------------
2166 dnl Check if monotonic clock_gettime is available.
2168 AC_DEFUN([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC], [
2169 AC_REQUIRE([AC_HEADER_TIME])dnl
2170 AC_CHECK_HEADERS(sys/types.h sys/time.h time.h)
2171 AC_MSG_CHECKING([for monotonic clock_gettime])
2174 #ifdef HAVE_SYS_TYPES_H
2175 #include <sys/types.h>
2177 #ifdef HAVE_SYS_TIME_H
2178 #include <sys/time.h>
2179 #ifdef TIME_WITH_SYS_TIME
2189 (void)clock_gettime(CLOCK_MONOTONIC, &ts);
2192 AC_MSG_RESULT([yes])
2193 ac_cv_func_clock_gettime="yes"
2196 ac_cv_func_clock_gettime="no"
2198 dnl Definition of HAVE_CLOCK_GETTIME_MONOTONIC is intentionally postponed
2199 dnl until library linking and run-time checks for clock_gettime succeed.
2203 dnl CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC
2204 dnl -------------------------------------------------
2205 dnl If monotonic clock_gettime is available then,
2206 dnl check and prepended to LIBS any needed libraries.
2208 AC_DEFUN([CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC], [
2209 AC_REQUIRE([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC])dnl
2211 if test "$ac_cv_func_clock_gettime" = "yes"; then
2213 AC_MSG_CHECKING([for clock_gettime in libraries])
2215 curl_cv_save_LIBS="$LIBS"
2216 curl_cv_gclk_LIBS="unknown"
2218 for x_xlibs in '' '-lrt' '-lposix4' ; do
2219 if test "$curl_cv_gclk_LIBS" = "unknown"; then
2220 if test -z "$x_xlibs"; then
2221 LIBS="$curl_cv_save_LIBS"
2223 LIBS="$x_xlibs $curl_cv_save_LIBS"
2227 #ifdef HAVE_SYS_TYPES_H
2228 #include <sys/types.h>
2230 #ifdef HAVE_SYS_TIME_H
2231 #include <sys/time.h>
2232 #ifdef TIME_WITH_SYS_TIME
2242 (void)clock_gettime(CLOCK_MONOTONIC, &ts);
2245 curl_cv_gclk_LIBS="$x_xlibs"
2250 LIBS="$curl_cv_save_LIBS"
2252 case X-"$curl_cv_gclk_LIBS" in
2254 AC_MSG_RESULT([cannot find clock_gettime])
2255 AC_MSG_WARN([HAVE_CLOCK_GETTIME_MONOTONIC will not be defined])
2256 ac_cv_func_clock_gettime="no"
2259 AC_MSG_RESULT([no additional lib required])
2260 ac_cv_func_clock_gettime="yes"
2263 if test -z "$curl_cv_save_LIBS"; then
2264 LIBS="$curl_cv_gclk_LIBS"
2266 LIBS="$curl_cv_gclk_LIBS $curl_cv_save_LIBS"
2268 AC_MSG_RESULT([$curl_cv_gclk_LIBS])
2269 ac_cv_func_clock_gettime="yes"
2273 dnl only do runtime verification when not cross-compiling
2274 if test "x$cross_compiling" != "xyes" &&
2275 test "$ac_cv_func_clock_gettime" = "yes"; then
2276 AC_MSG_CHECKING([if monotonic clock_gettime works])
2279 #ifdef HAVE_SYS_TYPES_H
2280 #include <sys/types.h>
2282 #ifdef HAVE_SYS_TIME_H
2283 #include <sys/time.h>
2284 #ifdef TIME_WITH_SYS_TIME
2294 if (0 == clock_gettime(CLOCK_MONOTONIC, &ts))
2300 AC_MSG_RESULT([yes])
2303 AC_MSG_WARN([HAVE_CLOCK_GETTIME_MONOTONIC will not be defined])
2304 ac_cv_func_clock_gettime="no"
2305 LIBS="$curl_cv_save_LIBS"
2309 case "$ac_cv_func_clock_gettime" in
2311 AC_DEFINE_UNQUOTED(HAVE_CLOCK_GETTIME_MONOTONIC, 1,
2312 [Define to 1 if you have the clock_gettime function and monotonic timer.])
2321 dnl CURL_CHECK_FUNC_SELECT
2322 dnl -------------------------------------------------
2323 dnl Test if the socket select() function is available,
2324 dnl and check its return type and the types of its
2325 dnl arguments. If the function succeeds HAVE_SELECT
2326 dnl will be defined, defining the types of the
2327 dnl arguments in SELECT_TYPE_ARG1, SELECT_TYPE_ARG234
2328 dnl and SELECT_TYPE_ARG5, defining the type of the
2329 dnl function return value in SELECT_TYPE_RETV, and
2330 dnl also defining the type qualifier of fifth argument
2331 dnl in SELECT_QUAL_ARG5.
2333 AC_DEFUN([CURL_CHECK_FUNC_SELECT], [
2334 AC_REQUIRE([CURL_CHECK_STRUCT_TIMEVAL])dnl
2335 AC_CHECK_HEADERS(sys/select.h sys/socket.h)
2337 AC_MSG_CHECKING([for select])
2341 #ifdef HAVE_WINDOWS_H
2342 #ifndef WIN32_LEAN_AND_MEAN
2343 #define WIN32_LEAN_AND_MEAN
2345 #include <windows.h>
2346 #ifdef HAVE_WINSOCK2_H
2347 #include <winsock2.h>
2349 #ifdef HAVE_WINSOCK_H
2350 #include <winsock.h>
2354 #ifdef HAVE_SYS_TYPES_H
2355 #include <sys/types.h>
2357 #ifdef HAVE_SYS_TIME_H
2358 #include <sys/time.h>
2359 #ifdef TIME_WITH_SYS_TIME
2367 #ifndef HAVE_WINDOWS_H
2368 #ifdef HAVE_SYS_SELECT_H
2369 #include <sys/select.h>
2371 #ifdef HAVE_SYS_SOCKET_H
2372 #include <sys/socket.h>
2376 select(0, 0, 0, 0, 0);
2379 AC_MSG_RESULT([yes])
2380 curl_cv_select="yes"
2386 if test "$curl_cv_select" = "yes"; then
2387 AC_CACHE_CHECK([types of args and return type for select],
2388 [curl_cv_func_select_args], [
2389 curl_cv_func_select_args="unknown"
2390 for sel_retv in 'int' 'ssize_t'; do
2391 for sel_arg1 in 'int' 'ssize_t' 'size_t' 'unsigned long int' 'unsigned int'; do
2392 for sel_arg234 in 'fd_set *' 'int *' 'void *'; do
2393 for sel_arg5 in 'struct timeval *' 'const struct timeval *'; do
2394 if test "$curl_cv_func_select_args" = "unknown"; then
2398 #ifdef HAVE_WINDOWS_H
2399 #ifndef WIN32_LEAN_AND_MEAN
2400 #define WIN32_LEAN_AND_MEAN
2402 #include <windows.h>
2403 #ifdef HAVE_WINSOCK2_H
2404 #include <winsock2.h>
2406 #ifdef HAVE_WINSOCK_H
2407 #include <winsock.h>
2410 #define SELECTCALLCONV PASCAL
2412 #ifdef HAVE_SYS_TYPES_H
2413 #include <sys/types.h>
2415 #ifdef HAVE_SYS_TIME_H
2416 #include <sys/time.h>
2417 #ifdef TIME_WITH_SYS_TIME
2425 #ifndef HAVE_WINDOWS_H
2426 #ifdef HAVE_SYS_SELECT_H
2427 #include <sys/select.h>
2429 #ifdef HAVE_SYS_SOCKET_H
2430 #include <sys/socket.h>
2432 #define SELECTCALLCONV
2434 #ifndef HAVE_STRUCT_TIMEVAL
2440 extern $sel_retv SELECTCALLCONV select($sel_arg1,
2450 $sel_retv res = select(nfds, rfds, wfds, efds, 0);
2453 curl_cv_func_select_args="$sel_arg1,$sel_arg234,$sel_arg5,$sel_retv"
2461 if test "$curl_cv_func_select_args" = "unknown"; then
2462 AC_MSG_WARN([Cannot find proper types to use for select args])
2463 AC_MSG_WARN([HAVE_SELECT will not be defined])
2465 select_prev_IFS=$IFS; IFS=','
2466 set dummy `echo "$curl_cv_func_select_args" | sed 's/\*/\*/g'`
2467 IFS=$select_prev_IFS
2470 sel_qual_type_arg5=$[3]
2472 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG1, $[1],
2473 [Define to the type of arg 1 for select.])
2474 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG234, $[2],
2475 [Define to the type of args 2, 3 and 4 for select.])
2476 AC_DEFINE_UNQUOTED(SELECT_TYPE_RETV, $[4],
2477 [Define to the function return type for select.])
2481 case $prev_sh_opts in
2489 case "$sel_qual_type_arg5" in
2492 sel_type_arg5=`echo $sel_qual_type_arg5 | sed 's/^const //'`
2496 sel_type_arg5=$sel_qual_type_arg5
2500 AC_DEFINE_UNQUOTED(SELECT_QUAL_ARG5, $sel_qual_arg5,
2501 [Define to the type qualifier of arg 5 for select.])
2502 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG5, $sel_type_arg5,
2503 [Define to the type of arg 5 for select.])
2505 case $prev_sh_opts in
2513 AC_DEFINE_UNQUOTED(HAVE_SELECT, 1,
2514 [Define to 1 if you have the select function.])
2515 ac_cv_func_select="yes"
2521 dnl ************************************************************
2522 dnl check for "localhost", if it doesn't exist, we can't do the
2523 dnl gethostbyname_r tests!
2526 AC_DEFUN([CURL_CHECK_WORKING_RESOLVER],[
2527 AC_MSG_CHECKING([if "localhost" resolves])
2530 #include <sys/types.h>
2533 #define NULL (void *)0
2539 h = gethostbyname("localhost");
2540 exit (h == NULL ? 1 : 0); }],[
2541 AC_MSG_RESULT(yes)],[
2543 AC_MSG_ERROR([can't figure out gethostbyname_r() since localhost doesn't resolve])
2549 dnl ************************************************************
2550 dnl check for working getaddrinfo() that works with AI_NUMERICHOST
2552 AC_DEFUN([CURL_CHECK_WORKING_GETADDRINFO],[
2553 AC_CACHE_CHECK(for working getaddrinfo, ac_cv_working_getaddrinfo,[
2556 #include <sys/types.h>
2557 #include <sys/socket.h>
2561 struct addrinfo hints, *ai;
2564 memset(&hints, 0, sizeof(hints));
2565 hints.ai_flags = AI_NUMERICHOST;
2566 hints.ai_family = AF_UNSPEC;
2567 hints.ai_socktype = SOCK_STREAM;
2568 error = getaddrinfo("127.0.0.1", "8080", &hints, &ai);
2575 ac_cv_working_getaddrinfo="yes"
2577 ac_cv_working_getaddrinfo="no"
2579 ac_cv_working_getaddrinfo="yes"
2581 if test "$ac_cv_working_getaddrinfo" = "yes"; then
2582 AC_DEFINE(HAVE_GETADDRINFO, 1, [Define if getaddrinfo exists and works])
2583 AC_DEFINE(ENABLE_IPV6, 1, [Define if you want to enable IPv6 support])
2586 AC_SUBST(IPV6_ENABLED)
2591 AC_DEFUN([CURL_CHECK_LOCALTIME_R],
2593 dnl check for localtime_r
2594 AC_CHECK_FUNCS(localtime_r,[
2595 AC_MSG_CHECKING(whether localtime_r is declared)
2596 AC_EGREP_CPP(localtime_r,[
2598 #include <time.h>],[
2599 AC_MSG_RESULT(yes)],[
2601 AC_MSG_CHECKING(whether localtime_r with -D_REENTRANT is declared)
2602 AC_EGREP_CPP(localtime_r,[
2606 #include <time.h>],[
2607 AC_DEFINE(NEED_REENTRANT, 1, [need REENTRANT defined])
2608 AC_MSG_RESULT(yes)],
2609 AC_MSG_RESULT(no))])])
2613 dnl This function checks for strerror_r(). If it isn't found at first, it
2614 dnl retries with _THREAD_SAFE defined, as that is what AIX seems to require
2615 dnl in order to find this function.
2617 dnl If the function is found, it will then proceed to check how the function
2618 dnl actually works: glibc-style or POSIX-style.
2621 dnl char *strerror_r(int errnum, char *buf, size_t n);
2623 dnl What this one does is to return the error string (no surprises there),
2624 dnl but it doesn't usually copy anything into buf! The 'buf' and 'n'
2625 dnl parameters are only meant as an optional working area, in case strerror_r
2626 dnl needs it. A quick test on a few systems shows that it's generally not
2630 dnl int strerror_r(int errnum, char *buf, size_t n);
2632 AC_DEFUN([CURL_CHECK_STRERROR_R],
2634 AC_CHECK_FUNCS(strerror_r)
2636 if test "x$ac_cv_func_strerror_r" = "xyes"; then
2638 AC_MSG_CHECKING(whether strerror_r is declared)
2639 AC_EGREP_CPP(strerror_r,[
2641 #include <string.h>],[
2642 AC_MSG_RESULT(yes)],[
2644 AC_MSG_CHECKING(whether strerror_r with -D_REENTRANT is declared)
2645 AC_EGREP_CPP(strerror_r,[
2648 #include <string.h>],[
2649 AC_DEFINE(NEED_REENTRANT, 1, [need REENTRANT defined])
2650 AC_MSG_RESULT(yes)],
2652 AC_DEFINE(HAVE_NO_STRERROR_R_DECL, 1, [we have no strerror_r() proto])
2653 ) dnl with _THREAD_SAFE
2654 ]) dnl plain cpp for it
2656 dnl determine if this strerror_r() is glibc or POSIX
2657 AC_MSG_CHECKING([for a glibc strerror_r API])
2663 char buffer[1024]; /* big enough to play with */
2665 strerror_r(EACCES, buffer, sizeof(buffer));
2666 /* this should've returned a string */
2667 if(!string || !string[0])
2672 GLIBC_STRERROR_R="1"
2673 AC_DEFINE(HAVE_GLIBC_STRERROR_R, 1, [we have a glibc-style strerror_r()])
2674 AC_MSG_RESULT([yes]),
2675 AC_MSG_RESULT([no]),
2677 dnl Use an inferior method of strerror_r detection while cross-compiling
2679 #include <features.h>
2684 dnl looks like glibc, so assume a glibc-style strerror_r()
2685 GLIBC_STRERROR_R="1"
2686 AC_DEFINE(HAVE_GLIBC_STRERROR_R, 1, [we have a glibc-style strerror_r()])
2687 AC_MSG_RESULT([yes]),
2688 AC_MSG_NOTICE([cannot determine strerror_r() style: edit lib/config.h manually!])
2689 ) dnl while cross-compiling
2692 if test -z "$GLIBC_STRERROR_R"; then
2694 AC_MSG_CHECKING([for a POSIX strerror_r API])
2700 char buffer[1024]; /* big enough to play with */
2702 strerror_r(EACCES, buffer, sizeof(buffer));
2703 /* This should've returned zero, and written an error string in the
2705 if(!buffer[0] || error)
2710 AC_DEFINE(HAVE_POSIX_STRERROR_R, 1, [we have a POSIX-style strerror_r()])
2711 AC_MSG_RESULT([yes]),
2712 AC_MSG_RESULT([no]) ,
2713 dnl cross-compiling!
2714 AC_MSG_NOTICE([cannot determine strerror_r() style: edit lib/config.h manually!])
2717 fi dnl if not using glibc API
2719 fi dnl we have a strerror_r
2723 AC_DEFUN([CURL_CHECK_INET_NTOA_R],
2725 dnl determine if function definition for inet_ntoa_r exists.
2726 AC_CHECK_FUNCS(inet_ntoa_r,[
2727 AC_MSG_CHECKING(whether inet_ntoa_r is declared)
2728 AC_EGREP_CPP(inet_ntoa_r,[
2730 #include <arpa/inet.h>],[
2731 AC_DEFINE(HAVE_INET_NTOA_R_DECL, 1, [inet_ntoa_r() is declared])
2732 AC_MSG_RESULT(yes)],[
2734 AC_MSG_CHECKING(whether inet_ntoa_r with -D_REENTRANT is declared)
2735 AC_EGREP_CPP(inet_ntoa_r,[
2738 #include <arpa/inet.h>],[
2739 AC_DEFINE(HAVE_INET_NTOA_R_DECL, 1, [inet_ntoa_r() is declared])
2740 AC_DEFINE(NEED_REENTRANT, 1, [need REENTRANT defined])
2741 AC_MSG_RESULT(yes)],
2742 AC_MSG_RESULT(no))])])
2746 dnl CURL_CHECK_GETHOSTBYADDR_R
2747 dnl -------------------------------------------------
2748 dnl check number of arguments for gethostbyaddr_r, it
2749 dnl might take either 5, 7, or 8 arguments.
2751 AC_DEFUN([CURL_CHECK_GETHOSTBYADDR_R], [
2753 AC_MSG_CHECKING([for gethostbyaddr_r])
2755 AC_LANG_FUNC_LINK_TRY([gethostbyaddr_r])
2757 AC_MSG_RESULT([yes])
2758 tmp_cv_gethostbyaddr_r="yes"
2761 tmp_cv_gethostbyaddr_r="no"
2764 if test "$tmp_cv_gethostbyaddr_r" != "yes"; then
2765 AC_MSG_CHECKING([deeper for gethostbyaddr_r])
2772 AC_MSG_RESULT([yes])
2773 tmp_cv_gethostbyaddr_r="yes"
2775 AC_MSG_RESULT([but still no])
2776 tmp_cv_gethostbyaddr_r="no"
2780 if test "$tmp_cv_gethostbyaddr_r" = "yes"; then
2782 ac_cv_gethostbyaddr_r_args="unknown"
2784 AC_MSG_CHECKING([if gethostbyaddr_r takes 5 arguments])
2788 #include <sys/types.h>
2795 struct hostent_data hdata;
2797 rc = gethostbyaddr_r(address, length, type, &h, &hdata);
2800 AC_MSG_RESULT([yes])
2801 AC_DEFINE(HAVE_GETHOSTBYADDR_R_5, 1, [gethostbyaddr_r() takes 5 args])
2802 ac_cv_gethostbyaddr_r_args="5"
2807 if test "$ac_cv_gethostbyaddr_r_args" = "unknown"; then
2808 AC_MSG_CHECKING([if gethostbyaddr_r with -D_REENTRANT takes 5 arguments])
2813 #include <sys/types.h>
2820 struct hostent_data hdata;
2822 rc = gethostbyaddr_r(address, length, type, &h, &hdata);
2825 AC_MSG_RESULT([yes])
2826 AC_DEFINE(HAVE_GETHOSTBYADDR_R_5, 1, [gethostbyaddr_r() takes 5 args])
2827 AC_DEFINE(NEED_REENTRANT, 1, [need REENTRANT])
2828 ac_cv_gethostbyaddr_r_args="5"
2834 if test "$ac_cv_gethostbyaddr_r_args" = "unknown"; then
2835 AC_MSG_CHECKING([if gethostbyaddr_r takes 7 arguments])
2839 #include <sys/types.h>
2848 struct hostent * hp;
2849 hp = gethostbyaddr_r(address, length, type, &h,
2850 buffer, 8192, &h_errnop);
2853 AC_MSG_RESULT([yes])
2854 AC_DEFINE(HAVE_GETHOSTBYADDR_R_7, 1, [gethostbyaddr_r() takes 7 args])
2855 ac_cv_gethostbyaddr_r_args="7"
2861 if test "$ac_cv_gethostbyaddr_r_args" = "unknown"; then
2862 AC_MSG_CHECKING([if gethostbyaddr_r with -D_REENTRANT takes 7 arguments])
2867 #include <sys/types.h>
2876 struct hostent * hp;
2877 hp = gethostbyaddr_r(address, length, type, &h,
2878 buffer, 8192, &h_errnop);
2881 AC_MSG_RESULT([yes])
2882 AC_DEFINE(HAVE_GETHOSTBYADDR_R_7, 1, [gethostbyaddr_r() takes 7 args])
2883 AC_DEFINE(NEED_REENTRANT, 1, [need REENTRANT])
2884 ac_cv_gethostbyaddr_r_args="7"
2890 if test "$ac_cv_gethostbyaddr_r_args" = "unknown"; then
2891 AC_MSG_CHECKING([if gethostbyaddr_r takes 8 arguments])
2895 #include <sys/types.h>
2904 struct hostent * hp;
2906 rc = gethostbyaddr_r(address, length, type, &h,
2907 buffer, 8192, &hp, &h_errnop);
2910 AC_MSG_RESULT([yes])
2911 AC_DEFINE(HAVE_GETHOSTBYADDR_R_8, 1, [gethostbyaddr_r() takes 8 args])
2912 ac_cv_gethostbyaddr_r_args="8"
2918 if test "$ac_cv_gethostbyaddr_r_args" = "unknown"; then
2919 AC_MSG_CHECKING([if gethostbyaddr_r with -D_REENTRANT takes 8 arguments])
2924 #include <sys/types.h>
2933 struct hostent * hp;
2935 rc = gethostbyaddr_r(address, length, type, &h,
2936 buffer, 8192, &hp, &h_errnop);
2939 AC_MSG_RESULT([yes])
2940 AC_DEFINE(HAVE_GETHOSTBYADDR_R_8, 1, [gethostbyaddr_r() takes 8 args])
2941 AC_DEFINE(NEED_REENTRANT, 1, [need REENTRANT])
2942 ac_cv_gethostbyaddr_r_args="8"
2948 if test "$ac_cv_gethostbyaddr_r_args" = "unknown"; then
2949 AC_MSG_WARN([Cannot find out how to use gethostbyaddr_r])
2950 AC_MSG_WARN([HAVE_GETHOSTBYADDR_R will not be defined])
2951 ac_cv_func_gethostbyaddr_r="no"
2953 AC_DEFINE_UNQUOTED(HAVE_GETHOSTBYADDR_R, 1,
2954 [Define to 1 if you have the gethostbyaddr_r function.])
2955 ac_cv_func_gethostbyaddr_r="yes"
2959 ac_cv_func_gethostbyaddr_r="no"
2964 dnl CURL_CHECK_GETHOSTBYNAME_R
2965 dnl -------------------------------------------------
2966 dnl check number of arguments for gethostbyname_r, it
2967 dnl might take either 3, 5, or 6 arguments.
2969 AC_DEFUN([CURL_CHECK_GETHOSTBYNAME_R], [
2971 AC_MSG_CHECKING([for gethostbyname_r])
2973 AC_LANG_FUNC_LINK_TRY([gethostbyname_r])
2975 AC_MSG_RESULT([yes])
2976 tmp_cv_gethostbyname_r="yes"
2979 tmp_cv_gethostbyname_r="no"
2982 if test "$tmp_cv_gethostbyname_r" != "yes"; then
2983 AC_MSG_CHECKING([deeper for gethostbyname_r])
2990 AC_MSG_RESULT([yes])
2991 tmp_cv_gethostbyname_r="yes"
2993 AC_MSG_RESULT([but still no])
2994 tmp_cv_gethostbyname_r="no"
2998 if test "$tmp_cv_gethostbyname_r" = "yes"; then
3000 ac_cv_gethostbyname_r_args="unknown"
3002 AC_MSG_CHECKING([if gethostbyname_r takes 3 arguments])
3007 #include <sys/types.h>
3010 #define NULL (void *)0
3012 gethostbyname_r(const char *, struct hostent *,
3013 struct hostent_data *);
3015 struct hostent_data data;
3016 gethostbyname_r(NULL, NULL, NULL);
3019 AC_MSG_RESULT([yes])
3020 AC_DEFINE(HAVE_GETHOSTBYNAME_R_3, 1, [gethostbyname_r() takes 3 args])
3021 ac_cv_gethostbyname_r_args="3"
3026 if test "$ac_cv_gethostbyname_r_args" = "unknown"; then
3027 AC_MSG_CHECKING([if gethostbyname_r with -D_REENTRANT takes 3 arguments])
3033 #include <sys/types.h>
3036 #define NULL (void *)0
3038 gethostbyname_r(const char *, struct hostent *,
3039 struct hostent_data *);
3041 struct hostent_data data;
3042 gethostbyname_r(NULL, NULL, NULL);
3045 AC_MSG_RESULT([yes])
3046 AC_DEFINE(HAVE_GETHOSTBYNAME_R_3, 1, [gethostbyname_r() takes 3 args])
3047 AC_DEFINE(NEED_REENTRANT, 1, [need REENTRANT])
3048 ac_cv_gethostbyname_r_args="3"
3054 if test "$ac_cv_gethostbyname_r_args" = "unknown"; then
3055 AC_MSG_CHECKING([if gethostbyname_r takes 5 arguments])
3059 #include <sys/types.h>
3062 #define NULL (void *)0
3064 gethostbyname_r(const char *, struct hostent *,
3065 char *, int, int *);
3067 gethostbyname_r(NULL, NULL, NULL, 0, NULL);
3070 AC_MSG_RESULT([yes])
3071 AC_DEFINE(HAVE_GETHOSTBYNAME_R_5, 1, [gethostbyname_r() takes 5 args])
3072 ac_cv_gethostbyname_r_args="5"
3078 if test "$ac_cv_gethostbyname_r_args" = "unknown"; then
3079 AC_MSG_CHECKING([if gethostbyname_r with -D_REENTRANT takes 5 arguments])
3084 #include <sys/types.h>
3087 #define NULL (void *)0
3089 gethostbyname_r(const char *, struct hostent *,
3090 char *, int, int *);
3092 gethostbyname_r(NULL, NULL, NULL, 0, NULL);
3095 AC_MSG_RESULT([yes])
3096 AC_DEFINE(HAVE_GETHOSTBYNAME_R_5, 1, [gethostbyname_r() takes 5 args])
3097 AC_DEFINE(NEED_REENTRANT, 1, [need REENTRANT])
3098 ac_cv_gethostbyname_r_args="5"
3104 if test "$ac_cv_gethostbyname_r_args" = "unknown"; then
3105 AC_MSG_CHECKING([if gethostbyname_r takes 6 arguments])
3109 #include <sys/types.h>
3112 #define NULL (void *)0
3114 gethostbyname_r(const char *, struct hostent *,
3115 char *, size_t, struct hostent **, int *);
3117 gethostbyname_r(NULL, NULL, NULL, 0, NULL, NULL);
3120 AC_MSG_RESULT([yes])
3121 AC_DEFINE(HAVE_GETHOSTBYNAME_R_6, 1, [gethostbyname_r() takes 6 args])
3122 ac_cv_gethostbyname_r_args="6"
3128 if test "$ac_cv_gethostbyname_r_args" = "unknown"; then
3129 AC_MSG_CHECKING([if gethostbyname_r with -D_REENTRANT takes 6 arguments])
3134 #include <sys/types.h>
3137 #define NULL (void *)0
3139 gethostbyname_r(const char *, struct hostent *,
3140 char *, size_t, struct hostent **, int *);
3142 gethostbyname_r(NULL, NULL, NULL, 0, NULL, NULL);
3145 AC_MSG_RESULT([yes])
3146 AC_DEFINE(HAVE_GETHOSTBYNAME_R_6, 1, [gethostbyname_r() takes 6 args])
3147 AC_DEFINE(NEED_REENTRANT, 1, [need REENTRANT])
3148 ac_cv_gethostbyname_r_args="6"
3154 if test "$ac_cv_gethostbyname_r_args" = "unknown"; then
3155 AC_MSG_WARN([Cannot find out how to use gethostbyname_r])
3156 AC_MSG_WARN([HAVE_GETHOSTBYNAME_R will not be defined])
3157 ac_cv_func_gethostbyname_r="no"
3159 AC_DEFINE_UNQUOTED(HAVE_GETHOSTBYNAME_R, 1,
3160 [Define to 1 if you have the gethostbyname_r function.])
3161 ac_cv_func_gethostbyname_r="yes"
3165 ac_cv_func_gethostbyname_r="no"
3170 dnl **********************************************************************
3171 dnl CURL_DETECT_ICC ([ACTION-IF-YES])
3173 dnl check if this is the Intel ICC compiler, and if so run the ACTION-IF-YES
3174 dnl sets the $ICC variable to "yes" or "no"
3175 dnl **********************************************************************
3176 AC_DEFUN([CURL_DETECT_ICC],
3179 AC_MSG_CHECKING([for icc in use])
3180 if test "$GCC" = "yes"; then
3181 dnl check if this is icc acting as gcc in disguise
3182 AC_EGREP_CPP([^__INTEL_COMPILER], [__INTEL_COMPILER],
3183 dnl action if the text is found, this it has not been replaced by the
3186 dnl the text was not found, it was replaced by the cpp
3188 AC_MSG_RESULT([yes])
3192 if test "$ICC" = "no"; then
3198 dnl We create a function for detecting which compiler we use and then set as
3199 dnl pendantic compiler options as possible for that particular compiler. The
3200 dnl options are only used for debug-builds.
3202 AC_DEFUN([CURL_CC_DEBUG_OPTS],
3204 if test "z$ICC" = "z"; then
3208 if test "$GCC" = "yes"; then
3210 dnl figure out gcc version!
3211 AC_MSG_CHECKING([gcc version])
3212 gccver=`$CC -dumpversion`
3213 num1=`echo $gccver | cut -d . -f1`
3214 num2=`echo $gccver | cut -d . -f2`
3215 gccnum=`(expr $num1 "*" 100 + $num2) 2>/dev/null`
3216 AC_MSG_RESULT($gccver)
3218 if test "$ICC" = "yes"; then
3219 dnl this is icc, not gcc.
3221 dnl ICC warnings we ignore:
3222 dnl * 269 warns on our "%Od" printf formatters for curl_off_t output:
3223 dnl "invalid format string conversion"
3224 dnl * 279 warns on static conditions in while expressions
3225 dnl * 981 warns on "operands are evaluated in unspecified order"
3226 dnl * 1418 "external definition with no prior declaration"
3227 dnl * 1419 warns on "external declaration in primary source file"
3228 dnl which we know and do on purpose.
3230 WARN="-wd279,269,981,1418,1419"
3232 if test "$gccnum" -gt "600"; then
3233 dnl icc 6.0 and older doesn't have the -Wall flag
3237 dnl this is a set of options we believe *ALL* gcc versions support:
3238 WARN="-W -Wall -Wwrite-strings -pedantic -Wpointer-arith -Wnested-externs -Winline -Wmissing-prototypes"
3240 dnl -Wcast-align is a bit too annoying on all gcc versions ;-)
3242 if test "$gccnum" -ge "207"; then
3243 dnl gcc 2.7 or later
3244 WARN="$WARN -Wmissing-declarations"
3247 if test "$gccnum" -gt "295"; then
3248 dnl only if the compiler is newer than 2.95 since we got lots of
3249 dnl "`_POSIX_C_SOURCE' is not defined" in system headers with
3250 dnl gcc 2.95.4 on FreeBSD 4.9!
3251 WARN="$WARN -Wundef -Wno-long-long -Wsign-compare -Wshadow -Wno-multichar"
3254 if test "$gccnum" -ge "296"; then
3255 dnl gcc 2.96 or later
3256 WARN="$WARN -Wfloat-equal"
3259 if test "$gccnum" -gt "296"; then
3260 dnl this option does not exist in 2.96
3261 WARN="$WARN -Wno-format-nonliteral"
3264 dnl -Wunreachable-code seems totally unreliable on my gcc 3.3.2 on
3265 dnl on i686-Linux as it gives us heaps with false positives.
3266 dnl Also, on gcc 4.0.X it is totally unbearable and complains all
3267 dnl over making it unusable for generic purposes. Let's not use it.
3269 if test "$gccnum" -ge "303"; then
3270 dnl gcc 3.3 and later
3271 WARN="$WARN -Wendif-labels -Wstrict-prototypes"
3274 if test "$gccnum" -ge "304"; then
3275 # try these on gcc 3.4
3276 WARN="$WARN -Wdeclaration-after-statement"
3279 for flag in $CPPFLAGS; do
3282 dnl Include path, provide a -isystem option for the same dir
3283 dnl to prevent warnings in those dirs. The -isystem was not very
3284 dnl reliable on earlier gcc versions.
3285 add=`echo $flag | sed 's/^-I/-isystem /g'`
3293 CFLAGS="$CFLAGS $WARN"
3295 AC_MSG_NOTICE([Added this set of compiler options: $WARN])
3299 AC_MSG_NOTICE([Added no extra compiler options])
3303 dnl strip off optimizer flags
3305 for flag in $CFLAGS; do
3308 dnl echo "cut off $flag"
3311 NEWFLAGS="$NEWFLAGS $flag"
3317 ]) dnl end of AC_DEFUN()
3319 # This is only a temporary fix. This macro is here to replace the broken one
3320 # delivered by the automake project (including the 1.9.6 release). As soon as
3321 # they ship a working version we SHOULD remove this work-around.
3323 AC_DEFUN([AM_MISSING_HAS_RUN],
3324 [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
3325 test x"${MISSING+set}" = xset || MISSING="\${SHELL} \"$am_aux_dir/missing\""
3326 # Use eval to expand $SHELL
3327 if eval "$MISSING --run true"; then
3328 am_missing_run="$MISSING --run "
3331 AC_MSG_WARN([`missing' script is too old or missing])
3336 dnl CURL_VERIFY_RUNTIMELIBS
3337 dnl -------------------------------------------------
3338 dnl Verify that the shared libs found so far can be used when running
3339 dnl programs, since otherwise the situation will create odd configure errors
3340 dnl that are misleading people.
3342 dnl Make sure this test is run BEFORE the first test in the script that
3343 dnl runs anything, which at the time of this writing is the AC_CHECK_SIZEOF
3344 dnl macro. It must also run AFTER all lib-checking macros are complete.
3346 AC_DEFUN([CURL_VERIFY_RUNTIMELIBS], [
3348 dnl this test is of course not sensible if we are cross-compiling!
3349 if test "x$cross_compiling" != xyes; then
3351 dnl just run a program to verify that the libs checked for previous to this
3352 dnl point also is available run-time!
3353 AC_MSG_CHECKING([run-time libs availability])
3360 AC_MSG_RESULT([fine]),
3361 AC_MSG_RESULT([failed])
3362 AC_MSG_ERROR([one or more libs available at link-time are not available run-time. Libs used at link-time: $LIBS])
3365 dnl if this test fails, configure has already stopped
3370 dnl CURL_CHECK_VARIADIC_MACROS
3371 dnl -------------------------------------------------
3372 dnl Check compiler support of variadic macros
3374 AC_DEFUN([CURL_CHECK_VARIADIC_MACROS], [
3375 AC_CACHE_CHECK([for compiler support of C99 variadic macro style],
3376 [curl_cv_variadic_macros_c99], [
3379 #define c99_vmacro3(first, ...) fun3(first, __VA_ARGS__)
3380 #define c99_vmacro2(first, ...) fun2(first, __VA_ARGS__)
3381 int fun3(int arg1, int arg2, int arg3);
3382 int fun2(int arg1, int arg2);
3383 int fun3(int arg1, int arg2, int arg3)
3384 { return arg1 + arg2 + arg3; }
3385 int fun2(int arg1, int arg2)
3386 { return arg1 + arg2; }
3388 int res3 = c99_vmacro3(1, 2, 3);
3389 int res2 = c99_vmacro2(1, 2);
3392 curl_cv_variadic_macros_c99="yes"
3394 curl_cv_variadic_macros_c99="no"
3397 case "$curl_cv_variadic_macros_c99" in
3399 AC_DEFINE_UNQUOTED(HAVE_VARIADIC_MACROS_C99, 1,
3400 [Define to 1 if compiler supports C99 variadic macro style.])
3403 AC_CACHE_CHECK([for compiler support of old gcc variadic macro style],
3404 [curl_cv_variadic_macros_gcc], [
3407 #define gcc_vmacro3(first, args...) fun3(first, args)
3408 #define gcc_vmacro2(first, args...) fun2(first, args)
3409 int fun3(int arg1, int arg2, int arg3);
3410 int fun2(int arg1, int arg2);
3411 int fun3(int arg1, int arg2, int arg3)
3412 { return arg1 + arg2 + arg3; }
3413 int fun2(int arg1, int arg2)
3414 { return arg1 + arg2; }
3416 int res3 = gcc_vmacro3(1, 2, 3);
3417 int res2 = gcc_vmacro2(1, 2);
3420 curl_cv_variadic_macros_gcc="yes"
3422 curl_cv_variadic_macros_gcc="no"
3425 case "$curl_cv_variadic_macros_gcc" in
3427 AC_DEFINE_UNQUOTED(HAVE_VARIADIC_MACROS_GCC, 1,
3428 [Define to 1 if compiler supports old gcc variadic macro style.])
3434 dnl CURL_CHECK_CA_BUNDLE
3435 dnl -------------------------------------------------
3436 dnl Check if a default ca-bundle should be used
3438 dnl regarding the paths this will scan:
3439 dnl /etc/ssl/certs/ca-certificates.crt Debian systems
3440 dnl /etc/pki/tls/certs/ca-bundle.crt Redhat and Mandriva
3441 dnl /usr/share/ssl/certs/ca-bundle.crt old(er) Redhat
3442 dnl /etc/ssl/certs/ (ca path) SUSE
3444 AC_DEFUN([CURL_CHECK_CA_BUNDLE], [
3446 AC_MSG_CHECKING([default CA cert bundle/path])
3448 AC_ARG_WITH(ca-bundle,
3449 AC_HELP_STRING([--with-ca-bundle=FILE], [File name to use as CA bundle])
3450 AC_HELP_STRING([--without-ca-bundle], [Don't use a default CA bundle]),
3453 if test "x$want_ca" = "xyes"; then
3454 AC_MSG_ERROR([--with-ca-bundle=FILE requires a path to the CA bundle])
3457 [ want_ca="unset" ])
3458 AC_ARG_WITH(ca-path,
3459 AC_HELP_STRING([--with-ca-path=DIRECTORY], [Directory to use as CA path])
3460 AC_HELP_STRING([--without-ca-path], [Don't use a default CA path]),
3462 want_capath="$withval"
3463 if test "x$want_capath" = "xyes"; then
3464 AC_MSG_ERROR([--with-ca-path=DIRECTORY requires a path to the CA path directory])
3467 [ want_capath="unset"])
3469 if test "x$want_ca" != "xno" -a "x$want_ca" != "xunset" -a \
3470 "x$want_capath" != "xno" -a "x$want_capath" != "xunset"; then
3472 AC_MSG_ERROR([Can't specify both --with-ca-bundle and --with-ca-path.])
3473 elif test "x$want_ca" != "xno" -a "x$want_ca" != "xunset"; then
3474 dnl --with-ca-bundle given
3477 elif test "x$want_capath" != "xno" -a "x$want_capath" != "xunset"; then
3478 dnl --with-ca-path given
3479 if test "x$OPENSSL_ENABLED" != "x1"; then
3480 AC_MSG_ERROR([--with-ca-path only works with openSSL])
3482 capath="$want_capath"
3485 dnl neither of --with-ca-* given
3486 dnl first try autodetecting a CA bundle , then a CA path
3487 dnl both autodetections can be skipped by --without-ca-*
3490 if test "x$want_ca" = "xunset"; then
3491 dnl the path we previously would have installed the curl ca bundle
3492 dnl to, and thus we now check for an already existing cert in that place
3493 dnl in case we find no other
3494 if test "x$prefix" != xNONE; then
3495 cac="${prefix}/share/curl/curl-ca-bundle.crt"
3497 cac="$ac_default_prefix/share/curl/curl-ca-bundle.crt"
3500 for a in /etc/ssl/certs/ca-certificates.crt \
3501 /etc/pki/tls/certs/ca-bundle.crt \
3502 /usr/share/ssl/certs/ca-bundle.crt \
3504 if test -f "$a"; then
3510 if test "x$want_capath" = "xunset" -a "x$ca" = "xno" -a \
3511 "x$OPENSSL_ENABLED" = "x1"; then
3512 for a in /etc/ssl/certs/; do
3513 if test -d "$a" && ls "$a"/[[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]].0 >/dev/null 2>/dev/null; then
3523 if test "x$ca" != "xno"; then
3524 CURL_CA_BUNDLE='"'$ca'"'
3525 AC_DEFINE_UNQUOTED(CURL_CA_BUNDLE, "$ca", [Location of default ca bundle])
3526 AC_SUBST(CURL_CA_BUNDLE)
3527 AC_MSG_RESULT([$ca])
3528 elif test "x$capath" != "xno"; then
3529 CURL_CA_PATH="\"$capath\""
3530 AC_DEFINE_UNQUOTED(CURL_CA_PATH, "$capath", [Location of default ca path])
3531 AC_MSG_RESULT([$capath (capath)])