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. If the expansion would
78 dnl result in a set of double-quoted strings the returned expansion will
79 dnl actually be a single double-quoted string concatenating all them.
81 AC_DEFUN([CURL_CHECK_DEF], [
82 AS_VAR_PUSHDEF([ac_HaveDef], [curl_cv_have_def_$1])dnl
83 AS_VAR_PUSHDEF([ac_Def], [curl_cv_def_$1])dnl
84 if test -z "$SED"; then
85 AC_MSG_ERROR([SED not set. Cannot continue without SED being set.])
87 if test -z "$GREP"; then
88 AC_MSG_ERROR([GREP not set. Cannot continue without GREP being set.])
90 ifelse($3,,[AC_MSG_CHECKING([for preprocessor definition of $1])])
100 tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \
101 "$GREP" CURL_DEF_TOKEN 2>/dev/null | \
102 "$SED" 's/.*CURL_DEF_TOKEN[[ ]]//' 2>/dev/null | \
103 "$SED" 's/[["]][[ ]]*[["]]//g' 2>/dev/null`
104 if test "$tmp_exp" = "$1"; then
108 if test -z "$tmp_exp"; then
109 AS_VAR_SET([ac_HaveDef], [no])
110 ifelse($3,,[AC_MSG_RESULT([no])])
112 AS_VAR_SET([ac_HaveDef], [yes])
113 AS_VAR_SET([ac_Def], [$tmp_exp])
114 ifelse($3,,[AC_MSG_RESULT([$tmp_exp])])
116 AS_VAR_POPDEF([ac_Def])dnl
117 AS_VAR_POPDEF([ac_HaveDef])dnl
121 dnl CURL_CHECK_AIX_ALL_SOURCE
122 dnl -------------------------------------------------
123 dnl Provides a replacement of traditional AC_AIX with
124 dnl an uniform behaviour across all autoconf versions,
125 dnl and with our own placement rules.
127 AC_DEFUN([CURL_CHECK_AIX_ALL_SOURCE], [
128 AH_VERBATIM([_ALL_SOURCE],
129 [/* Define to 1 if OS is AIX. */
133 AC_BEFORE([$0], [AC_SYS_LARGEFILE])dnl
134 AC_BEFORE([$0], [CURL_CONFIGURE_REENTRANT])dnl
135 AC_MSG_CHECKING([if OS is AIX (to define _ALL_SOURCE)])
136 AC_EGREP_CPP([yes_this_is_aix],[
142 AC_DEFINE(_ALL_SOURCE)
149 dnl CURL_CHECK_HEADER_WINDOWS
150 dnl -------------------------------------------------
151 dnl Check for compilable and valid windows.h header
153 AC_DEFUN([CURL_CHECK_HEADER_WINDOWS], [
154 AC_CACHE_CHECK([for windows.h], [ac_cv_header_windows_h], [
158 #ifndef WIN32_LEAN_AND_MEAN
159 #define WIN32_LEAN_AND_MEAN
163 #if defined(__CYGWIN__) || defined(__CEGCC__)
164 HAVE_WINDOWS_H shall not be defined.
170 ac_cv_header_windows_h="yes"
172 ac_cv_header_windows_h="no"
175 case "$ac_cv_header_windows_h" in
177 AC_DEFINE_UNQUOTED(HAVE_WINDOWS_H, 1,
178 [Define to 1 if you have the windows.h header file.])
179 AC_DEFINE_UNQUOTED(WIN32_LEAN_AND_MEAN, 1,
180 [Define to avoid automatic inclusion of winsock.h])
186 dnl CURL_CHECK_NATIVE_WINDOWS
187 dnl -------------------------------------------------
188 dnl Check if building a native Windows target
190 AC_DEFUN([CURL_CHECK_NATIVE_WINDOWS], [
191 AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
192 AC_CACHE_CHECK([whether build target is a native Windows one], [ac_cv_native_windows], [
193 if test "$ac_cv_header_windows_h" = "no"; then
194 ac_cv_native_windows="no"
199 #if defined(__MINGW32__) || defined(__MINGW32CE__) || \
200 (defined(_MSC_VER) && (defined(_WIN32) || defined(_WIN64)))
203 Not a native Windows build target.
207 ac_cv_native_windows="yes"
209 ac_cv_native_windows="no"
213 case "$ac_cv_native_windows" in
215 AC_DEFINE_UNQUOTED(NATIVE_WINDOWS, 1,
216 [Define to 1 if you are building a native Windows target.])
222 dnl CURL_CHECK_HEADER_WINSOCK
223 dnl -------------------------------------------------
224 dnl Check for compilable and valid winsock.h header
226 AC_DEFUN([CURL_CHECK_HEADER_WINSOCK], [
227 AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
228 AC_CACHE_CHECK([for winsock.h], [ac_cv_header_winsock_h], [
232 #ifndef WIN32_LEAN_AND_MEAN
233 #define WIN32_LEAN_AND_MEAN
238 #if defined(__CYGWIN__) || defined(__CEGCC__)
239 HAVE_WINSOCK_H shall not be defined.
241 int dummy=WSACleanup();
245 ac_cv_header_winsock_h="yes"
247 ac_cv_header_winsock_h="no"
250 case "$ac_cv_header_winsock_h" in
252 AC_DEFINE_UNQUOTED(HAVE_WINSOCK_H, 1,
253 [Define to 1 if you have the winsock.h header file.])
259 dnl CURL_CHECK_HEADER_WINSOCK2
260 dnl -------------------------------------------------
261 dnl Check for compilable and valid winsock2.h header
263 AC_DEFUN([CURL_CHECK_HEADER_WINSOCK2], [
264 AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
265 AC_CACHE_CHECK([for winsock2.h], [ac_cv_header_winsock2_h], [
269 #ifndef WIN32_LEAN_AND_MEAN
270 #define WIN32_LEAN_AND_MEAN
273 #include <winsock2.h>
275 #if defined(__CYGWIN__) || defined(__CEGCC__) || defined(__MINGW32CE__)
276 HAVE_WINSOCK2_H shall not be defined.
278 int dummy=2*IPPROTO_ESP;
282 ac_cv_header_winsock2_h="yes"
284 ac_cv_header_winsock2_h="no"
287 case "$ac_cv_header_winsock2_h" in
289 AC_DEFINE_UNQUOTED(HAVE_WINSOCK2_H, 1,
290 [Define to 1 if you have the winsock2.h header file.])
296 dnl CURL_CHECK_HEADER_WS2TCPIP
297 dnl -------------------------------------------------
298 dnl Check for compilable and valid ws2tcpip.h header
300 AC_DEFUN([CURL_CHECK_HEADER_WS2TCPIP], [
301 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
302 AC_CACHE_CHECK([for ws2tcpip.h], [ac_cv_header_ws2tcpip_h], [
306 #ifndef WIN32_LEAN_AND_MEAN
307 #define WIN32_LEAN_AND_MEAN
310 #include <winsock2.h>
311 #include <ws2tcpip.h>
313 #if defined(__CYGWIN__) || defined(__CEGCC__) || defined(__MINGW32CE__)
314 HAVE_WS2TCPIP_H shall not be defined.
316 int dummy=2*IP_PKTINFO;
320 ac_cv_header_ws2tcpip_h="yes"
322 ac_cv_header_ws2tcpip_h="no"
325 case "$ac_cv_header_ws2tcpip_h" in
327 AC_DEFINE_UNQUOTED(HAVE_WS2TCPIP_H, 1,
328 [Define to 1 if you have the ws2tcpip.h header file.])
334 dnl CURL_CHECK_HEADER_WINLDAP
335 dnl -------------------------------------------------
336 dnl Check for compilable and valid winldap.h header
338 AC_DEFUN([CURL_CHECK_HEADER_WINLDAP], [
339 AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
340 AC_CACHE_CHECK([for winldap.h], [ac_cv_header_winldap_h], [
344 #ifdef HAVE_WINDOWS_H
345 #ifndef WIN32_LEAN_AND_MEAN
346 #define WIN32_LEAN_AND_MEAN
352 #if defined(__CYGWIN__) || defined(__CEGCC__)
353 HAVE_WINLDAP_H shall not be defined.
355 LDAP *ldp = ldap_init("dummy", LDAP_PORT);
356 ULONG res = ldap_unbind(ldp);
360 ac_cv_header_winldap_h="yes"
362 ac_cv_header_winldap_h="no"
365 case "$ac_cv_header_winldap_h" in
367 AC_DEFINE_UNQUOTED(HAVE_WINLDAP_H, 1,
368 [Define to 1 if you have the winldap.h header file.])
374 dnl CURL_CHECK_HEADER_WINBER
375 dnl -------------------------------------------------
376 dnl Check for compilable and valid winber.h header
378 AC_DEFUN([CURL_CHECK_HEADER_WINBER], [
379 AC_REQUIRE([CURL_CHECK_HEADER_WINLDAP])dnl
380 AC_CACHE_CHECK([for winber.h], [ac_cv_header_winber_h], [
384 #ifdef HAVE_WINDOWS_H
385 #ifndef WIN32_LEAN_AND_MEAN
386 #define WIN32_LEAN_AND_MEAN
393 #if defined(__CYGWIN__) || defined(__CEGCC__)
394 HAVE_WINBER_H shall not be defined.
397 BerElement *bep = ber_init(bvp);
402 ac_cv_header_winber_h="yes"
404 ac_cv_header_winber_h="no"
407 case "$ac_cv_header_winber_h" in
409 AC_DEFINE_UNQUOTED(HAVE_WINBER_H, 1,
410 [Define to 1 if you have the winber.h header file.])
416 dnl CURL_CHECK_HEADER_LBER
417 dnl -------------------------------------------------
418 dnl Check for compilable and valid lber.h header,
419 dnl and check if it is needed even with ldap.h
421 AC_DEFUN([CURL_CHECK_HEADER_LBER], [
422 AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
423 AC_CACHE_CHECK([for lber.h], [ac_cv_header_lber_h], [
427 #ifdef HAVE_WINDOWS_H
428 #ifndef WIN32_LEAN_AND_MEAN
429 #define WIN32_LEAN_AND_MEAN
433 #ifdef HAVE_SYS_TYPES_H
434 #include <sys/types.h>
438 #define NULL (void *)0
442 BerValue *bvp = NULL;
443 BerElement *bep = ber_init(bvp);
447 ac_cv_header_lber_h="yes"
449 ac_cv_header_lber_h="no"
452 if test "$ac_cv_header_lber_h" = "yes"; then
453 AC_DEFINE_UNQUOTED(HAVE_LBER_H, 1,
454 [Define to 1 if you have the lber.h header file.])
459 #ifdef HAVE_WINDOWS_H
460 #ifndef WIN32_LEAN_AND_MEAN
461 #define WIN32_LEAN_AND_MEAN
465 #ifdef HAVE_SYS_TYPES_H
466 #include <sys/types.h>
470 #define NULL (void *)0
472 #ifndef LDAP_DEPRECATED
473 #define LDAP_DEPRECATED 1
477 BerValue *bvp = NULL;
478 BerElement *bep = ber_init(bvp);
482 curl_cv_need_header_lber_h="no"
484 curl_cv_need_header_lber_h="yes"
487 case "$curl_cv_need_header_lber_h" in
489 AC_DEFINE_UNQUOTED(NEED_LBER_H, 1,
490 [Define to 1 if you need the lber.h header file even with ldap.h])
497 dnl CURL_CHECK_HEADER_LDAP
498 dnl -------------------------------------------------
499 dnl Check for compilable and valid ldap.h header
501 AC_DEFUN([CURL_CHECK_HEADER_LDAP], [
502 AC_REQUIRE([CURL_CHECK_HEADER_LBER])dnl
503 AC_CACHE_CHECK([for ldap.h], [ac_cv_header_ldap_h], [
507 #ifdef HAVE_WINDOWS_H
508 #ifndef WIN32_LEAN_AND_MEAN
509 #define WIN32_LEAN_AND_MEAN
513 #ifdef HAVE_SYS_TYPES_H
514 #include <sys/types.h>
517 #ifndef LDAP_DEPRECATED
518 #define LDAP_DEPRECATED 1
525 LDAP *ldp = ldap_init("dummy", LDAP_PORT);
526 int res = ldap_unbind(ldp);
529 ac_cv_header_ldap_h="yes"
531 ac_cv_header_ldap_h="no"
534 case "$ac_cv_header_ldap_h" in
536 AC_DEFINE_UNQUOTED(HAVE_LDAP_H, 1,
537 [Define to 1 if you have the ldap.h header file.])
543 dnl CURL_CHECK_HEADER_LDAP_SSL
544 dnl -------------------------------------------------
545 dnl Check for compilable and valid ldap_ssl.h header
547 AC_DEFUN([CURL_CHECK_HEADER_LDAP_SSL], [
548 AC_REQUIRE([CURL_CHECK_HEADER_LDAP])dnl
549 AC_CACHE_CHECK([for ldap_ssl.h], [ac_cv_header_ldap_ssl_h], [
553 #ifdef HAVE_WINDOWS_H
554 #ifndef WIN32_LEAN_AND_MEAN
555 #define WIN32_LEAN_AND_MEAN
559 #ifdef HAVE_SYS_TYPES_H
560 #include <sys/types.h>
563 #ifndef LDAP_DEPRECATED
564 #define LDAP_DEPRECATED 1
572 #include <ldap_ssl.h>
574 LDAP *ldp = ldapssl_init("dummy", LDAPS_PORT, 1);
577 ac_cv_header_ldap_ssl_h="yes"
579 ac_cv_header_ldap_ssl_h="no"
582 case "$ac_cv_header_ldap_ssl_h" in
584 AC_DEFINE_UNQUOTED(HAVE_LDAP_SSL_H, 1,
585 [Define to 1 if you have the ldap_ssl.h header file.])
591 dnl CURL_CHECK_HEADER_LDAPSSL
592 dnl -------------------------------------------------
593 dnl Check for compilable and valid ldapssl.h header
595 AC_DEFUN([CURL_CHECK_HEADER_LDAPSSL], [
596 AC_REQUIRE([CURL_CHECK_HEADER_LDAP])dnl
597 AC_CACHE_CHECK([for ldapssl.h], [ac_cv_header_ldapssl_h], [
601 #ifdef HAVE_WINDOWS_H
602 #ifndef WIN32_LEAN_AND_MEAN
603 #define WIN32_LEAN_AND_MEAN
607 #ifdef HAVE_SYS_TYPES_H
608 #include <sys/types.h>
612 #define NULL (void *)0
614 #ifndef LDAP_DEPRECATED
615 #define LDAP_DEPRECATED 1
625 char *cert_label = NULL;
626 LDAP *ldp = ldap_ssl_init("dummy", LDAPS_PORT, cert_label);
629 ac_cv_header_ldapssl_h="yes"
631 ac_cv_header_ldapssl_h="no"
634 case "$ac_cv_header_ldapssl_h" in
636 AC_DEFINE_UNQUOTED(HAVE_LDAPSSL_H, 1,
637 [Define to 1 if you have the ldapssl.h header file.])
643 dnl CURL_CHECK_LIBS_WINLDAP
644 dnl -------------------------------------------------
645 dnl Check for libraries needed for WINLDAP support,
646 dnl and prepended to LIBS any needed libraries.
647 dnl This macro can take an optional parameter with a
648 dnl white space separated list of libraries to check
649 dnl before the WINLDAP default ones.
651 AC_DEFUN([CURL_CHECK_LIBS_WINLDAP], [
652 AC_REQUIRE([CURL_CHECK_HEADER_WINBER])dnl
654 AC_MSG_CHECKING([for WINLDAP libraries])
668 if test -z "$u_libs"; then
671 u_libs="$u_libs $l_lib"
676 curl_cv_save_LIBS="$LIBS"
677 curl_cv_ldap_LIBS="unknown"
679 for x_nlibs in '' "$u_libs" \
681 if test "$curl_cv_ldap_LIBS" = "unknown"; then
682 if test -z "$x_nlibs"; then
683 LIBS="$curl_cv_save_LIBS"
685 LIBS="$x_nlibs $curl_cv_save_LIBS"
690 #ifdef HAVE_WINDOWS_H
691 #ifndef WIN32_LEAN_AND_MEAN
692 #define WIN32_LEAN_AND_MEAN
695 #ifdef HAVE_WINLDAP_H
704 BerElement *bep = ber_init(bvp);
705 LDAP *ldp = ldap_init("dummy", LDAP_PORT);
706 ULONG res = ldap_unbind(ldp);
710 curl_cv_ldap_LIBS="$x_nlibs"
715 LIBS="$curl_cv_save_LIBS"
717 case X-"$curl_cv_ldap_LIBS" in
719 AC_MSG_RESULT([cannot find WINLDAP libraries])
722 AC_MSG_RESULT([no additional lib required])
725 if test -z "$curl_cv_save_LIBS"; then
726 LIBS="$curl_cv_ldap_LIBS"
728 LIBS="$curl_cv_ldap_LIBS $curl_cv_save_LIBS"
730 AC_MSG_RESULT([$curl_cv_ldap_LIBS])
737 dnl CURL_CHECK_LIBS_LDAP
738 dnl -------------------------------------------------
739 dnl Check for libraries needed for LDAP support,
740 dnl and prepended to LIBS any needed libraries.
741 dnl This macro can take an optional parameter with a
742 dnl white space separated list of libraries to check
743 dnl before the default ones.
745 AC_DEFUN([CURL_CHECK_LIBS_LDAP], [
746 AC_REQUIRE([CURL_CHECK_HEADER_LDAP])dnl
748 AC_MSG_CHECKING([for LDAP libraries])
762 if test -z "$u_libs"; then
765 u_libs="$u_libs $l_lib"
770 curl_cv_save_LIBS="$LIBS"
771 curl_cv_ldap_LIBS="unknown"
773 for x_nlibs in '' "$u_libs" \
777 '-lldapssl -lldapx -lldapsdk' \
778 '-lldapsdk -lldapx -lldapssl' ; do
779 if test "$curl_cv_ldap_LIBS" = "unknown"; then
780 if test -z "$x_nlibs"; then
781 LIBS="$curl_cv_save_LIBS"
783 LIBS="$x_nlibs $curl_cv_save_LIBS"
788 #ifdef HAVE_WINDOWS_H
789 #ifndef WIN32_LEAN_AND_MEAN
790 #define WIN32_LEAN_AND_MEAN
794 #ifdef HAVE_SYS_TYPES_H
795 #include <sys/types.h>
799 #define NULL (void *)0
801 #ifndef LDAP_DEPRECATED
802 #define LDAP_DEPRECATED 1
811 BerValue *bvp = NULL;
812 BerElement *bep = ber_init(bvp);
813 LDAP *ldp = ldap_init("dummy", LDAP_PORT);
814 int res = ldap_unbind(ldp);
818 curl_cv_ldap_LIBS="$x_nlibs"
823 LIBS="$curl_cv_save_LIBS"
825 case X-"$curl_cv_ldap_LIBS" in
827 AC_MSG_RESULT([cannot find LDAP libraries])
830 AC_MSG_RESULT([no additional lib required])
833 if test -z "$curl_cv_save_LIBS"; then
834 LIBS="$curl_cv_ldap_LIBS"
836 LIBS="$curl_cv_ldap_LIBS $curl_cv_save_LIBS"
838 AC_MSG_RESULT([$curl_cv_ldap_LIBS])
845 dnl CURL_CHECK_HEADER_MALLOC
846 dnl -------------------------------------------------
847 dnl Check for compilable and valid malloc.h header,
848 dnl and check if it is needed even with stdlib.h
850 AC_DEFUN([CURL_CHECK_HEADER_MALLOC], [
851 AC_CACHE_CHECK([for malloc.h], [ac_cv_header_malloc_h], [
856 void *p = malloc(10);
857 void *q = calloc(10,10);
862 ac_cv_header_malloc_h="yes"
864 ac_cv_header_malloc_h="no"
867 if test "$ac_cv_header_malloc_h" = "yes"; then
868 AC_DEFINE_UNQUOTED(HAVE_MALLOC_H, 1,
869 [Define to 1 if you have the malloc.h header file.])
875 void *p = malloc(10);
876 void *q = calloc(10,10);
881 curl_cv_need_header_malloc_h="no"
883 curl_cv_need_header_malloc_h="yes"
886 case "$curl_cv_need_header_malloc_h" in
888 AC_DEFINE_UNQUOTED(NEED_MALLOC_H, 1,
889 [Define to 1 if you need the malloc.h header file even with stdlib.h])
896 dnl CURL_CHECK_TYPE_SOCKLEN_T
897 dnl -------------------------------------------------
898 dnl Check for existing socklen_t type, and provide
899 dnl an equivalent type if socklen_t not available
901 AC_DEFUN([CURL_CHECK_TYPE_SOCKLEN_T], [
902 AC_REQUIRE([CURL_CHECK_HEADER_WS2TCPIP])dnl
903 AC_CHECK_TYPE([socklen_t], ,[
904 dnl socklen_t not available
905 AC_CACHE_CHECK([for socklen_t equivalent],
906 [curl_cv_socklen_t_equiv], [
907 curl_cv_socklen_t_equiv="unknown"
908 for arg1 in 'int' 'SOCKET'; do
909 for arg2 in "struct sockaddr" void; do
910 for t in int size_t unsigned long "unsigned long"; do
911 if test "$curl_cv_socklen_t_equiv" = "unknown"; then
915 #ifdef HAVE_WINDOWS_H
916 #ifndef WIN32_LEAN_AND_MEAN
917 #define WIN32_LEAN_AND_MEAN
920 #ifdef HAVE_WINSOCK2_H
921 #include <winsock2.h>
923 #ifdef HAVE_WINSOCK_H
927 #define GETPEERNCALLCONV PASCAL
929 #ifdef HAVE_SYS_TYPES_H
930 #include <sys/types.h>
932 #ifdef HAVE_SYS_SOCKET_H
933 #include <sys/socket.h>
935 #define GETPEERNCALLCONV
937 extern int GETPEERNCALLCONV getpeername($arg1, $arg2 *, $t *);
940 getpeername(0,0,&len);
943 curl_cv_socklen_t_equiv="$t"
950 case "$curl_cv_socklen_t_equiv" in
952 AC_MSG_ERROR([Cannot find a type to use in place of socklen_t])
955 AC_DEFINE_UNQUOTED(socklen_t, $curl_cv_socklen_t_equiv,
956 [Type to use in place of socklen_t when system does not provide it.])
961 #ifdef HAVE_WINDOWS_H
962 #ifndef WIN32_LEAN_AND_MEAN
963 #define WIN32_LEAN_AND_MEAN
966 #ifdef HAVE_WINSOCK2_H
967 #include <winsock2.h>
968 #ifdef HAVE_WS2TCPIP_H
969 #include <ws2tcpip.h>
973 #ifdef HAVE_SYS_TYPES_H
974 #include <sys/types.h>
976 #ifdef HAVE_SYS_SOCKET_H
977 #include <sys/socket.h>
984 dnl CURL_CHECK_FUNC_GETNAMEINFO
985 dnl -------------------------------------------------
986 dnl Test if the getnameinfo function is available,
987 dnl and check the types of five of its arguments.
988 dnl If the function succeeds HAVE_GETNAMEINFO will be
989 dnl defined, defining the types of the arguments in
990 dnl GETNAMEINFO_TYPE_ARG1, GETNAMEINFO_TYPE_ARG2,
991 dnl GETNAMEINFO_TYPE_ARG46 and GETNAMEINFO_TYPE_ARG7,
992 dnl and also defining the type qualifier of first
993 dnl argument in GETNAMEINFO_QUAL_ARG1.
995 AC_DEFUN([CURL_CHECK_FUNC_GETNAMEINFO], [
996 AC_REQUIRE([CURL_CHECK_HEADER_WS2TCPIP])dnl
997 AC_REQUIRE([CURL_CHECK_TYPE_SOCKLEN_T])dnl
998 AC_CHECK_HEADERS(sys/types.h sys/socket.h netdb.h)
1000 AC_MSG_CHECKING([for getnameinfo])
1002 AC_LANG_FUNC_LINK_TRY([getnameinfo])
1004 AC_MSG_RESULT([yes])
1005 curl_cv_getnameinfo="yes"
1008 curl_cv_getnameinfo="no"
1011 if test "$curl_cv_getnameinfo" != "yes"; then
1012 AC_MSG_CHECKING([deeper for getnameinfo])
1019 AC_MSG_RESULT([yes])
1020 curl_cv_getnameinfo="yes"
1022 AC_MSG_RESULT([but still no])
1023 curl_cv_getnameinfo="no"
1027 if test "$curl_cv_getnameinfo" != "yes"; then
1028 AC_MSG_CHECKING([deeper and deeper for getnameinfo])
1032 #ifdef HAVE_WINDOWS_H
1033 #ifndef WIN32_LEAN_AND_MEAN
1034 #define WIN32_LEAN_AND_MEAN
1036 #include <windows.h>
1037 #ifdef HAVE_WINSOCK2_H
1038 #include <winsock2.h>
1039 #ifdef HAVE_WS2TCPIP_H
1040 #include <ws2tcpip.h>
1044 #ifdef HAVE_SYS_TYPES_H
1045 #include <sys/types.h>
1047 #ifdef HAVE_SYS_SOCKET_H
1048 #include <sys/socket.h>
1055 getnameinfo(0, 0, 0, 0, 0, 0, 0);
1058 AC_MSG_RESULT([yes])
1059 curl_cv_getnameinfo="yes"
1061 AC_MSG_RESULT([but still no])
1062 curl_cv_getnameinfo="no"
1066 if test "$curl_cv_getnameinfo" = "yes"; then
1067 AC_CACHE_CHECK([types of arguments for getnameinfo],
1068 [curl_cv_func_getnameinfo_args], [
1069 curl_cv_func_getnameinfo_args="unknown"
1070 for gni_arg1 in 'struct sockaddr *' 'const struct sockaddr *' 'void *'; do
1071 for gni_arg2 in 'socklen_t' 'size_t' 'int'; do
1072 for gni_arg46 in 'size_t' 'int' 'socklen_t' 'unsigned int' 'DWORD'; do
1073 for gni_arg7 in 'int' 'unsigned int'; do
1074 if test "$curl_cv_func_getnameinfo_args" = "unknown"; then
1078 #ifdef HAVE_WINDOWS_H
1079 #ifndef WIN32_LEAN_AND_MEAN
1080 #define WIN32_LEAN_AND_MEAN
1082 #if (!defined(_WIN32_WINNT)) || (_WIN32_WINNT < 0x0501)
1084 #define _WIN32_WINNT 0x0501
1086 #include <windows.h>
1087 #ifdef HAVE_WINSOCK2_H
1088 #include <winsock2.h>
1089 #ifdef HAVE_WS2TCPIP_H
1090 #include <ws2tcpip.h>
1093 #define GNICALLCONV WSAAPI
1095 #ifdef HAVE_SYS_TYPES_H
1096 #include <sys/types.h>
1098 #ifdef HAVE_SYS_SOCKET_H
1099 #include <sys/socket.h>
1106 extern int GNICALLCONV getnameinfo($gni_arg1, $gni_arg2,
1112 $gni_arg46 hostlen=0;
1113 $gni_arg46 servlen=0;
1115 int res = getnameinfo(0, salen, 0, hostlen, 0, servlen, flags);
1118 curl_cv_func_getnameinfo_args="$gni_arg1,$gni_arg2,$gni_arg46,$gni_arg7"
1126 if test "$curl_cv_func_getnameinfo_args" = "unknown"; then
1127 AC_MSG_WARN([Cannot find proper types to use for getnameinfo args])
1128 AC_MSG_WARN([HAVE_GETNAMEINFO will not be defined])
1130 gni_prev_IFS=$IFS; IFS=','
1131 set dummy `echo "$curl_cv_func_getnameinfo_args" | sed 's/\*/\*/g'`
1135 gni_qual_type_arg1=$[1]
1137 AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG2, $[2],
1138 [Define to the type of arg 2 for getnameinfo.])
1139 AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG46, $[3],
1140 [Define to the type of args 4 and 6 for getnameinfo.])
1141 AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG7, $[4],
1142 [Define to the type of arg 7 for getnameinfo.])
1146 case $prev_sh_opts in
1154 case "$gni_qual_type_arg1" in
1157 gni_type_arg1=`echo $gni_qual_type_arg1 | sed 's/^const //'`
1161 gni_type_arg1=$gni_qual_type_arg1
1165 AC_DEFINE_UNQUOTED(GETNAMEINFO_QUAL_ARG1, $gni_qual_arg1,
1166 [Define to the type qualifier of arg 1 for getnameinfo.])
1167 AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG1, $gni_type_arg1,
1168 [Define to the type of arg 1 for getnameinfo.])
1170 case $prev_sh_opts in
1178 AC_DEFINE_UNQUOTED(HAVE_GETNAMEINFO, 1,
1179 [Define to 1 if you have the getnameinfo function.])
1180 ac_cv_func_getnameinfo="yes"
1186 dnl TYPE_SOCKADDR_STORAGE
1187 dnl -------------------------------------------------
1188 dnl Check for struct sockaddr_storage. Most IPv6-enabled
1189 dnl hosts have it, but AIX 4.3 is one known exception.
1191 AC_DEFUN([TYPE_SOCKADDR_STORAGE],
1193 AC_CHECK_TYPE([struct sockaddr_storage],
1194 AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE, 1,
1195 [if struct sockaddr_storage is defined]), ,
1198 #ifdef HAVE_WINDOWS_H
1199 #ifndef WIN32_LEAN_AND_MEAN
1200 #define WIN32_LEAN_AND_MEAN
1202 #include <windows.h>
1203 #ifdef HAVE_WINSOCK2_H
1204 #include <winsock2.h>
1207 #ifdef HAVE_SYS_TYPES_H
1208 #include <sys/types.h>
1210 #ifdef HAVE_SYS_SOCKET_H
1211 #include <sys/socket.h>
1213 #ifdef HAVE_NETINET_IN_H
1214 #include <netinet/in.h>
1216 #ifdef HAVE_ARPA_INET_H
1217 #include <arpa/inet.h>
1224 dnl CURL_CHECK_NI_WITHSCOPEID
1225 dnl -------------------------------------------------
1226 dnl Check for working NI_WITHSCOPEID in getnameinfo()
1228 AC_DEFUN([CURL_CHECK_NI_WITHSCOPEID], [
1229 AC_REQUIRE([CURL_CHECK_FUNC_GETNAMEINFO])dnl
1230 AC_REQUIRE([TYPE_SOCKADDR_STORAGE])dnl
1231 AC_CHECK_HEADERS(stdio.h sys/types.h sys/socket.h \
1232 netdb.h netinet/in.h arpa/inet.h)
1234 AC_CACHE_CHECK([for working NI_WITHSCOPEID],
1235 [ac_cv_working_ni_withscopeid], [
1241 #ifdef HAVE_SYS_TYPES_H
1242 #include <sys/types.h>
1244 #ifdef HAVE_SYS_SOCKET_H
1245 #include <sys/socket.h>
1250 #ifdef HAVE_NETINET_IN_H
1251 #include <netinet/in.h>
1253 #ifdef HAVE_ARPA_INET_H
1254 #include <arpa/inet.h>
1257 #if defined(NI_WITHSCOPEID) && defined(HAVE_GETNAMEINFO)
1258 #ifdef HAVE_STRUCT_SOCKADDR_STORAGE
1259 struct sockaddr_storage sa;
1261 unsigned char sa[256];
1263 char hostbuf[NI_MAXHOST];
1265 GETNAMEINFO_TYPE_ARG2 salen = (GETNAMEINFO_TYPE_ARG2)sizeof(sa);
1266 GETNAMEINFO_TYPE_ARG46 hostlen = (GETNAMEINFO_TYPE_ARG46)sizeof(hostbuf);
1267 GETNAMEINFO_TYPE_ARG7 flags = NI_NUMERICHOST | NI_NUMERICSERV | NI_WITHSCOPEID;
1268 int fd = socket(AF_INET6, SOCK_STREAM, 0);
1271 return 1; /* Error creating socket */
1273 rc = getsockname(fd, (GETNAMEINFO_TYPE_ARG1)&sa, &salen);
1275 perror("getsockname()");
1276 return 2; /* Error retrieving socket name */
1278 rc = getnameinfo((GETNAMEINFO_TYPE_ARG1)&sa, salen, hostbuf, hostlen, NULL, 0, flags);
1280 printf("rc = %s\n", gai_strerror(rc));
1281 return 3; /* Error translating socket address */
1283 return 0; /* Ok, NI_WITHSCOPEID works */
1285 return 4; /* Error, NI_WITHSCOPEID not defined or no getnameinfo() */
1287 ]]) # AC-LANG-PROGRAM
1289 # Exit code == 0. Program worked.
1290 ac_cv_working_ni_withscopeid="yes"
1292 # Exit code != 0. Program failed.
1293 ac_cv_working_ni_withscopeid="no"
1295 # Program is not run when cross-compiling. So we assume
1296 # NI_WITHSCOPEID will work if we are able to compile it.
1299 #include <sys/types.h>
1300 #include <sys/socket.h>
1303 unsigned int dummy= NI_NUMERICHOST | NI_NUMERICSERV | NI_WITHSCOPEID;
1306 ac_cv_working_ni_withscopeid="yes"
1308 ac_cv_working_ni_withscopeid="no"
1309 ]) # AC-COMPILE-IFELSE
1312 case "$ac_cv_working_ni_withscopeid" in
1314 AC_DEFINE(HAVE_NI_WITHSCOPEID, 1,
1315 [Define to 1 if NI_WITHSCOPEID exists and works.])
1321 dnl CURL_CHECK_FUNC_RECV
1322 dnl -------------------------------------------------
1323 dnl Test if the socket recv() function is available,
1324 dnl and check its return type and the types of its
1325 dnl arguments. If the function succeeds HAVE_RECV
1326 dnl will be defined, defining the types of the arguments
1327 dnl in RECV_TYPE_ARG1, RECV_TYPE_ARG2, RECV_TYPE_ARG3
1328 dnl and RECV_TYPE_ARG4, defining the type of the function
1329 dnl return value in RECV_TYPE_RETV.
1331 AC_DEFUN([CURL_CHECK_FUNC_RECV], [
1332 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl
1333 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
1334 AC_CHECK_HEADERS(sys/types.h sys/socket.h)
1336 AC_MSG_CHECKING([for recv])
1340 #ifdef HAVE_WINDOWS_H
1341 #ifndef WIN32_LEAN_AND_MEAN
1342 #define WIN32_LEAN_AND_MEAN
1344 #include <windows.h>
1345 #ifdef HAVE_WINSOCK2_H
1346 #include <winsock2.h>
1348 #ifdef HAVE_WINSOCK_H
1349 #include <winsock.h>
1353 #ifdef HAVE_SYS_TYPES_H
1354 #include <sys/types.h>
1356 #ifdef HAVE_SYS_SOCKET_H
1357 #include <sys/socket.h>
1364 AC_MSG_RESULT([yes])
1371 if test "$curl_cv_recv" = "yes"; then
1372 AC_CACHE_CHECK([types of args and return type for recv],
1373 [curl_cv_func_recv_args], [
1374 curl_cv_func_recv_args="unknown"
1375 for recv_retv in 'int' 'ssize_t'; do
1376 for recv_arg1 in 'int' 'ssize_t' 'SOCKET'; do
1377 for recv_arg2 in 'char *' 'void *'; do
1378 for recv_arg3 in 'size_t' 'int' 'socklen_t' 'unsigned int'; do
1379 for recv_arg4 in 'int' 'unsigned int'; do
1380 if test "$curl_cv_func_recv_args" = "unknown"; then
1384 #ifdef HAVE_WINDOWS_H
1385 #ifndef WIN32_LEAN_AND_MEAN
1386 #define WIN32_LEAN_AND_MEAN
1388 #include <windows.h>
1389 #ifdef HAVE_WINSOCK2_H
1390 #include <winsock2.h>
1392 #ifdef HAVE_WINSOCK_H
1393 #include <winsock.h>
1396 #define RECVCALLCONV PASCAL
1398 #ifdef HAVE_SYS_TYPES_H
1399 #include <sys/types.h>
1401 #ifdef HAVE_SYS_SOCKET_H
1402 #include <sys/socket.h>
1404 #define RECVCALLCONV
1406 extern $recv_retv RECVCALLCONV
1407 recv($recv_arg1, $recv_arg2, $recv_arg3, $recv_arg4);
1413 $recv_retv res = recv(s, buf, len, flags);
1416 curl_cv_func_recv_args="$recv_arg1,$recv_arg2,$recv_arg3,$recv_arg4,$recv_retv"
1425 if test "$curl_cv_func_recv_args" = "unknown"; then
1426 AC_MSG_ERROR([Cannot find proper types to use for recv args])
1428 recv_prev_IFS=$IFS; IFS=','
1429 set dummy `echo "$curl_cv_func_recv_args" | sed 's/\*/\*/g'`
1433 AC_DEFINE_UNQUOTED(RECV_TYPE_ARG1, $[1],
1434 [Define to the type of arg 1 for recv.])
1435 AC_DEFINE_UNQUOTED(RECV_TYPE_ARG2, $[2],
1436 [Define to the type of arg 2 for recv.])
1437 AC_DEFINE_UNQUOTED(RECV_TYPE_ARG3, $[3],
1438 [Define to the type of arg 3 for recv.])
1439 AC_DEFINE_UNQUOTED(RECV_TYPE_ARG4, $[4],
1440 [Define to the type of arg 4 for recv.])
1441 AC_DEFINE_UNQUOTED(RECV_TYPE_RETV, $[5],
1442 [Define to the function return type for recv.])
1444 AC_DEFINE_UNQUOTED(HAVE_RECV, 1,
1445 [Define to 1 if you have the recv function.])
1446 ac_cv_func_recv="yes"
1449 AC_MSG_ERROR([Unable to link function recv])
1454 dnl CURL_CHECK_FUNC_SEND
1455 dnl -------------------------------------------------
1456 dnl Test if the socket send() function is available,
1457 dnl and check its return type and the types of its
1458 dnl arguments. If the function succeeds HAVE_SEND
1459 dnl will be defined, defining the types of the arguments
1460 dnl in SEND_TYPE_ARG1, SEND_TYPE_ARG2, SEND_TYPE_ARG3
1461 dnl and SEND_TYPE_ARG4, defining the type of the function
1462 dnl return value in SEND_TYPE_RETV, and also defining the
1463 dnl type qualifier of second argument in SEND_QUAL_ARG2.
1465 AC_DEFUN([CURL_CHECK_FUNC_SEND], [
1466 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl
1467 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
1468 AC_CHECK_HEADERS(sys/types.h sys/socket.h)
1470 AC_MSG_CHECKING([for send])
1474 #ifdef HAVE_WINDOWS_H
1475 #ifndef WIN32_LEAN_AND_MEAN
1476 #define WIN32_LEAN_AND_MEAN
1478 #include <windows.h>
1479 #ifdef HAVE_WINSOCK2_H
1480 #include <winsock2.h>
1482 #ifdef HAVE_WINSOCK_H
1483 #include <winsock.h>
1487 #ifdef HAVE_SYS_TYPES_H
1488 #include <sys/types.h>
1490 #ifdef HAVE_SYS_SOCKET_H
1491 #include <sys/socket.h>
1498 AC_MSG_RESULT([yes])
1505 if test "$curl_cv_send" = "yes"; then
1506 AC_CACHE_CHECK([types of args and return type for send],
1507 [curl_cv_func_send_args], [
1508 curl_cv_func_send_args="unknown"
1509 for send_retv in 'int' 'ssize_t'; do
1510 for send_arg1 in 'int' 'ssize_t' 'SOCKET'; do
1511 for send_arg2 in 'char *' 'void *' 'const char *' 'const void *'; do
1512 for send_arg3 in 'size_t' 'int' 'socklen_t' 'unsigned int'; do
1513 for send_arg4 in 'int' 'unsigned int'; do
1514 if test "$curl_cv_func_send_args" = "unknown"; then
1518 #ifdef HAVE_WINDOWS_H
1519 #ifndef WIN32_LEAN_AND_MEAN
1520 #define WIN32_LEAN_AND_MEAN
1522 #include <windows.h>
1523 #ifdef HAVE_WINSOCK2_H
1524 #include <winsock2.h>
1526 #ifdef HAVE_WINSOCK_H
1527 #include <winsock.h>
1530 #define SENDCALLCONV PASCAL
1532 #ifdef HAVE_SYS_TYPES_H
1533 #include <sys/types.h>
1535 #ifdef HAVE_SYS_SOCKET_H
1536 #include <sys/socket.h>
1538 #define SENDCALLCONV
1540 extern $send_retv SENDCALLCONV
1541 send($send_arg1, $send_arg2, $send_arg3, $send_arg4);
1546 $send_retv res = send(s, 0, len, flags);
1549 curl_cv_func_send_args="$send_arg1,$send_arg2,$send_arg3,$send_arg4,$send_retv"
1558 if test "$curl_cv_func_send_args" = "unknown"; then
1559 AC_MSG_ERROR([Cannot find proper types to use for send args])
1561 send_prev_IFS=$IFS; IFS=','
1562 set dummy `echo "$curl_cv_func_send_args" | sed 's/\*/\*/g'`
1566 send_qual_type_arg2=$[2]
1568 AC_DEFINE_UNQUOTED(SEND_TYPE_ARG1, $[1],
1569 [Define to the type of arg 1 for send.])
1570 AC_DEFINE_UNQUOTED(SEND_TYPE_ARG3, $[3],
1571 [Define to the type of arg 3 for send.])
1572 AC_DEFINE_UNQUOTED(SEND_TYPE_ARG4, $[4],
1573 [Define to the type of arg 4 for send.])
1574 AC_DEFINE_UNQUOTED(SEND_TYPE_RETV, $[5],
1575 [Define to the function return type for send.])
1579 case $prev_sh_opts in
1587 case "$send_qual_type_arg2" in
1589 send_qual_arg2=const
1590 send_type_arg2=`echo $send_qual_type_arg2 | sed 's/^const //'`
1594 send_type_arg2=$send_qual_type_arg2
1598 AC_DEFINE_UNQUOTED(SEND_QUAL_ARG2, $send_qual_arg2,
1599 [Define to the type qualifier of arg 2 for send.])
1600 AC_DEFINE_UNQUOTED(SEND_TYPE_ARG2, $send_type_arg2,
1601 [Define to the type of arg 2 for send.])
1603 case $prev_sh_opts in
1611 AC_DEFINE_UNQUOTED(HAVE_SEND, 1,
1612 [Define to 1 if you have the send function.])
1613 ac_cv_func_send="yes"
1616 AC_MSG_ERROR([Unable to link function send])
1621 dnl CURL_CHECK_FUNC_RECVFROM
1622 dnl -------------------------------------------------
1623 dnl Test if the socket recvfrom() function is available,
1624 dnl and check its return type and the types of its
1625 dnl arguments. If the function succeeds HAVE_RECVFROM
1626 dnl will be defined, defining the types of the arguments
1627 dnl in RECVFROM_TYPE_ARG1, RECVFROM_TYPE_ARG2, and so on
1628 dnl to RECVFROM_TYPE_ARG6, defining also the type of the
1629 dnl function return value in RECVFROM_TYPE_RETV.
1630 dnl Notice that the types returned for pointer arguments
1631 dnl will actually be the type pointed by the pointer.
1633 AC_DEFUN([CURL_CHECK_FUNC_RECVFROM], [
1634 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl
1635 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
1636 AC_CHECK_HEADERS(sys/types.h sys/socket.h)
1638 AC_MSG_CHECKING([for recvfrom])
1642 #ifdef HAVE_WINDOWS_H
1643 #ifndef WIN32_LEAN_AND_MEAN
1644 #define WIN32_LEAN_AND_MEAN
1646 #include <windows.h>
1647 #ifdef HAVE_WINSOCK2_H
1648 #include <winsock2.h>
1650 #ifdef HAVE_WINSOCK_H
1651 #include <winsock.h>
1655 #ifdef HAVE_SYS_TYPES_H
1656 #include <sys/types.h>
1658 #ifdef HAVE_SYS_SOCKET_H
1659 #include <sys/socket.h>
1663 recvfrom(0, 0, 0, 0, 0, 0);
1666 AC_MSG_RESULT([yes])
1667 curl_cv_recvfrom="yes"
1670 curl_cv_recvfrom="no"
1673 if test "$curl_cv_recvfrom" = "yes"; then
1674 AC_CACHE_CHECK([types of args and return type for recvfrom],
1675 [curl_cv_func_recvfrom_args], [
1676 curl_cv_func_recvfrom_args="unknown"
1677 for recvfrom_retv in 'int' 'ssize_t'; do
1678 for recvfrom_arg1 in 'int' 'ssize_t' 'SOCKET'; do
1679 for recvfrom_arg2 in 'char *' 'void *'; do
1680 for recvfrom_arg3 in 'size_t' 'int' 'socklen_t' 'unsigned int'; do
1681 for recvfrom_arg4 in 'int' 'unsigned int'; do
1682 for recvfrom_arg5 in 'struct sockaddr *' 'void *'; do
1683 for recvfrom_arg6 in 'socklen_t *' 'int *' 'unsigned int *' 'size_t *' 'void *'; do
1684 if test "$curl_cv_func_recvfrom_args" = "unknown"; then
1688 #ifdef HAVE_WINDOWS_H
1689 #ifndef WIN32_LEAN_AND_MEAN
1690 #define WIN32_LEAN_AND_MEAN
1692 #include <windows.h>
1693 #ifdef HAVE_WINSOCK2_H
1694 #include <winsock2.h>
1696 #ifdef HAVE_WINSOCK_H
1697 #include <winsock.h>
1700 #define RECVFROMCALLCONV PASCAL
1702 #ifdef HAVE_SYS_TYPES_H
1703 #include <sys/types.h>
1705 #ifdef HAVE_SYS_SOCKET_H
1706 #include <sys/socket.h>
1708 #define RECVFROMCALLCONV
1710 extern $recvfrom_retv RECVFROMCALLCONV
1711 recvfrom($recvfrom_arg1, $recvfrom_arg2,
1712 $recvfrom_arg3, $recvfrom_arg4,
1713 $recvfrom_arg5, $recvfrom_arg6);
1716 $recvfrom_arg2 buf=0;
1717 $recvfrom_arg3 len=0;
1718 $recvfrom_arg4 flags=0;
1719 $recvfrom_arg5 addr=0;
1720 $recvfrom_arg6 addrlen=0;
1721 $recvfrom_retv res=0;
1722 res = recvfrom(s, buf, len, flags, addr, addrlen);
1725 curl_cv_func_recvfrom_args="$recvfrom_arg1,$recvfrom_arg2,$recvfrom_arg3,$recvfrom_arg4,$recvfrom_arg5,$recvfrom_arg6,$recvfrom_retv"
1736 if test "$curl_cv_func_recvfrom_args" = "unknown"; then
1737 AC_MSG_ERROR([Cannot find proper types to use for recvfrom args])
1739 recvfrom_prev_IFS=$IFS; IFS=','
1740 set dummy `echo "$curl_cv_func_recvfrom_args" | sed 's/\*/\*/g'`
1741 IFS=$recvfrom_prev_IFS
1744 recvfrom_ptrt_arg2=$[2]
1745 recvfrom_ptrt_arg5=$[5]
1746 recvfrom_ptrt_arg6=$[6]
1748 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG1, $[1],
1749 [Define to the type of arg 1 for recvfrom.])
1750 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG3, $[3],
1751 [Define to the type of arg 3 for recvfrom.])
1752 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG4, $[4],
1753 [Define to the type of arg 4 for recvfrom.])
1754 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_RETV, $[7],
1755 [Define to the function return type for recvfrom.])
1759 case $prev_sh_opts in
1767 recvfrom_type_arg2=`echo $recvfrom_ptrt_arg2 | sed 's/ \*//'`
1768 recvfrom_type_arg5=`echo $recvfrom_ptrt_arg5 | sed 's/ \*//'`
1769 recvfrom_type_arg6=`echo $recvfrom_ptrt_arg6 | sed 's/ \*//'`
1771 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG2, $recvfrom_type_arg2,
1772 [Define to the type pointed by arg 2 for recvfrom.])
1773 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG5, $recvfrom_type_arg5,
1774 [Define to the type pointed by arg 5 for recvfrom.])
1775 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG6, $recvfrom_type_arg6,
1776 [Define to the type pointed by arg 6 for recvfrom.])
1778 if test "$recvfrom_type_arg2" = "void"; then
1779 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG2_IS_VOID, 1,
1780 [Define to 1 if the type pointed by arg 2 for recvfrom is void.])
1782 if test "$recvfrom_type_arg5" = "void"; then
1783 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG5_IS_VOID, 1,
1784 [Define to 1 if the type pointed by arg 5 for recvfrom is void.])
1786 if test "$recvfrom_type_arg6" = "void"; then
1787 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG6_IS_VOID, 1,
1788 [Define to 1 if the type pointed by arg 6 for recvfrom is void.])
1791 case $prev_sh_opts in
1799 AC_DEFINE_UNQUOTED(HAVE_RECVFROM, 1,
1800 [Define to 1 if you have the recvfrom function.])
1801 ac_cv_func_recvfrom="yes"
1804 AC_MSG_ERROR([Unable to link function recvfrom])
1809 dnl CURL_CHECK_MSG_NOSIGNAL
1810 dnl -------------------------------------------------
1811 dnl Check for MSG_NOSIGNAL
1813 AC_DEFUN([CURL_CHECK_MSG_NOSIGNAL], [
1814 AC_CHECK_HEADERS(sys/types.h sys/socket.h)
1815 AC_CACHE_CHECK([for MSG_NOSIGNAL], [ac_cv_msg_nosignal], [
1819 #ifdef HAVE_WINDOWS_H
1820 #ifndef WIN32_LEAN_AND_MEAN
1821 #define WIN32_LEAN_AND_MEAN
1823 #include <windows.h>
1824 #ifdef HAVE_WINSOCK2_H
1825 #include <winsock2.h>
1827 #ifdef HAVE_WINSOCK_H
1828 #include <winsock.h>
1832 #ifdef HAVE_SYS_TYPES_H
1833 #include <sys/types.h>
1835 #ifdef HAVE_SYS_SOCKET_H
1836 #include <sys/socket.h>
1840 int flag=MSG_NOSIGNAL;
1843 ac_cv_msg_nosignal="yes"
1845 ac_cv_msg_nosignal="no"
1848 case "$ac_cv_msg_nosignal" in
1850 AC_DEFINE_UNQUOTED(HAVE_MSG_NOSIGNAL, 1,
1851 [Define to 1 if you have the MSG_NOSIGNAL flag.])
1857 dnl CURL_CHECK_STRUCT_TIMEVAL
1858 dnl -------------------------------------------------
1859 dnl Check for timeval struct
1861 AC_DEFUN([CURL_CHECK_STRUCT_TIMEVAL], [
1862 AC_REQUIRE([AC_HEADER_TIME])dnl
1863 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl
1864 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
1865 AC_CHECK_HEADERS(sys/types.h sys/time.h time.h)
1866 AC_CACHE_CHECK([for struct timeval], [ac_cv_struct_timeval], [
1870 #ifdef HAVE_WINDOWS_H
1871 #ifndef WIN32_LEAN_AND_MEAN
1872 #define WIN32_LEAN_AND_MEAN
1874 #include <windows.h>
1875 #ifdef HAVE_WINSOCK2_H
1876 #include <winsock2.h>
1878 #ifdef HAVE_WINSOCK_H
1879 #include <winsock.h>
1883 #ifdef HAVE_SYS_TYPES_H
1884 #include <sys/types.h>
1886 #ifdef HAVE_SYS_TIME_H
1887 #include <sys/time.h>
1888 #ifdef TIME_WITH_SYS_TIME
1902 ac_cv_struct_timeval="yes"
1904 ac_cv_struct_timeval="no"
1907 case "$ac_cv_struct_timeval" in
1909 AC_DEFINE_UNQUOTED(HAVE_STRUCT_TIMEVAL, 1,
1910 [Define to 1 if you have the timeval struct.])
1916 dnl TYPE_SIG_ATOMIC_T
1917 dnl -------------------------------------------------
1918 dnl Check if the sig_atomic_t type is available, and
1919 dnl verify if it is already defined as volatile.
1921 AC_DEFUN([TYPE_SIG_ATOMIC_T], [
1922 AC_CHECK_HEADERS(signal.h)
1923 AC_CHECK_TYPE([sig_atomic_t],[
1924 AC_DEFINE(HAVE_SIG_ATOMIC_T, 1,
1925 [Define to 1 if sig_atomic_t is an available typedef.])
1927 #ifdef HAVE_SIGNAL_H
1931 case "$ac_cv_type_sig_atomic_t" in
1934 AC_MSG_CHECKING([if sig_atomic_t is already defined as volatile])
1937 #ifdef HAVE_SIGNAL_H
1941 static volatile sig_atomic_t dummy = 0;
1945 ac_cv_sig_atomic_t_volatile="no"
1947 AC_MSG_RESULT([yes])
1948 ac_cv_sig_atomic_t_volatile="yes"
1951 if test "$ac_cv_sig_atomic_t_volatile" = "yes"; then
1952 AC_DEFINE(HAVE_SIG_ATOMIC_T_VOLATILE, 1,
1953 [Define to 1 if sig_atomic_t is already defined as volatile.])
1960 dnl CURL_CHECK_NONBLOCKING_SOCKET
1961 dnl -------------------------------------------------
1962 dnl Check for how to set a socket to non-blocking state. There seems to exist
1963 dnl four known different ways, with the one used almost everywhere being POSIX
1964 dnl and XPG3, while the other different ways for different systems (old BSD,
1965 dnl Windows and Amiga).
1967 dnl There are two known platforms (AIX 3.x and SunOS 4.1.x) where the
1968 dnl O_NONBLOCK define is found but does not work. This condition is attempted
1969 dnl to get caught in this script by using an excessive number of #ifdefs...
1971 AC_DEFUN([CURL_CHECK_NONBLOCKING_SOCKET], [
1972 AC_MSG_CHECKING([non-blocking sockets style])
1977 /* headers for O_NONBLOCK test */
1978 #include <sys/types.h>
1982 #if defined(sun) || defined(__sun__) || \
1983 defined(__SUNPRO_C) || defined(__SUNPRO_CC)
1984 # if defined(__SVR4) || defined(__srv4__)
1985 # define PLATFORM_SOLARIS
1987 # define PLATFORM_SUNOS4
1990 #if (defined(_AIX) || defined(__xlC__)) && !defined(_AIX41)
1991 # define PLATFORM_AIX_V3
1994 #if defined(PLATFORM_SUNOS4) || defined(PLATFORM_AIX_V3) || defined(__BEOS__)
1995 #error "O_NONBLOCK does not work on this platform"
1998 /* O_NONBLOCK source test */
2000 int flags = fcntl(socket, F_SETFL, flags | O_NONBLOCK);
2003 dnl the O_NONBLOCK test was fine
2004 nonblock="O_NONBLOCK"
2005 AC_DEFINE(HAVE_O_NONBLOCK, 1,
2006 [use O_NONBLOCK for non-blocking sockets])
2009 if test "$nonblock" = "unknown"; then
2012 /* headers for FIONBIO test */
2014 #include <stropts.h>
2016 /* FIONBIO source test (old-style unix) */
2018 int flags = ioctl(socket, FIONBIO, &flags);
2021 dnl FIONBIO test was good
2023 AC_DEFINE(HAVE_FIONBIO, 1,
2024 [use FIONBIO for non-blocking sockets])
2028 if test "$nonblock" = "unknown"; then
2031 /* headers for ioctlsocket test (Windows) */
2033 #ifdef HAVE_WINDOWS_H
2034 #ifndef WIN32_LEAN_AND_MEAN
2035 #define WIN32_LEAN_AND_MEAN
2037 #include <windows.h>
2038 #ifdef HAVE_WINSOCK2_H
2039 #include <winsock2.h>
2041 #ifdef HAVE_WINSOCK_H
2042 #include <winsock.h>
2047 /* ioctlsocket source code (Windows) */
2049 unsigned long flags = 0;
2050 sd = socket(0, 0, 0);
2051 ioctlsocket(sd, FIONBIO, &flags);
2054 dnl ioctlsocket test was good
2055 nonblock="ioctlsocket"
2056 AC_DEFINE(HAVE_IOCTLSOCKET, 1,
2057 [use ioctlsocket() for non-blocking sockets])
2061 if test "$nonblock" = "unknown"; then
2064 /* headers for IoctlSocket test (Amiga?) */
2065 #include <sys/ioctl.h>
2067 /* IoctlSocket source code (Amiga?) */
2069 int flags = IoctlSocket(socket, FIONBIO, (long)1);
2072 dnl Ioctlsocket test was good
2073 nonblock="IoctlSocket"
2074 AC_DEFINE(HAVE_IOCTLSOCKET_CASE, 1,
2075 [use Ioctlsocket() for non-blocking sockets])
2079 if test "$nonblock" = "unknown"; then
2082 /* headers for SO_NONBLOCK test (BeOS) */
2085 /* SO_NONBLOCK source code (BeOS) */
2088 int flags = setsockopt(socket, SOL_SOCKET, SO_NONBLOCK, &b, sizeof(b));
2091 dnl the SO_NONBLOCK test was good
2092 nonblock="SO_NONBLOCK"
2093 AC_DEFINE(HAVE_SO_NONBLOCK, 1,
2094 [use SO_NONBLOCK for non-blocking sockets])
2098 AC_MSG_RESULT($nonblock)
2100 if test "$nonblock" = "unknown"; then
2101 AC_DEFINE(HAVE_DISABLED_NONBLOCKING, 1,
2102 [disabled non-blocking sockets])
2103 AC_MSG_WARN([non-block sockets disabled])
2109 dnl -------------------------------------------------
2110 dnl Check for in_addr_t: it is used to receive the return code of inet_addr()
2111 dnl and a few other things.
2113 AC_DEFUN([TYPE_IN_ADDR_T], [
2114 AC_CHECK_TYPE([in_addr_t], ,[
2115 dnl in_addr_t not available
2116 AC_CACHE_CHECK([for in_addr_t equivalent],
2117 [curl_cv_in_addr_t_equiv], [
2118 curl_cv_in_addr_t_equiv="unknown"
2119 for t in "unsigned long" int size_t unsigned long; do
2120 if test "$curl_cv_in_addr_t_equiv" = "unknown"; then
2124 #ifdef HAVE_WINDOWS_H
2125 #ifndef WIN32_LEAN_AND_MEAN
2126 #define WIN32_LEAN_AND_MEAN
2128 #include <windows.h>
2129 #ifdef HAVE_WINSOCK2_H
2130 #include <winsock2.h>
2132 #ifdef HAVE_WINSOCK_H
2133 #include <winsock.h>
2137 #ifdef HAVE_SYS_TYPES_H
2138 #include <sys/types.h>
2140 #ifdef HAVE_SYS_SOCKET_H
2141 #include <sys/socket.h>
2143 #ifdef HAVE_NETINET_IN_H
2144 #include <netinet/in.h>
2146 #ifdef HAVE_ARPA_INET_H
2147 #include <arpa/inet.h>
2151 $t data = inet_addr ("1.2.3.4");
2154 curl_cv_in_addr_t_equiv="$t"
2159 case "$curl_cv_in_addr_t_equiv" in
2161 AC_MSG_ERROR([Cannot find a type to use in place of in_addr_t])
2164 AC_DEFINE_UNQUOTED(in_addr_t, $curl_cv_in_addr_t_equiv,
2165 [Type to use in place of in_addr_t when system does not provide it.])
2170 #ifdef HAVE_WINDOWS_H
2171 #ifndef WIN32_LEAN_AND_MEAN
2172 #define WIN32_LEAN_AND_MEAN
2174 #include <windows.h>
2175 #ifdef HAVE_WINSOCK2_H
2176 #include <winsock2.h>
2178 #ifdef HAVE_WINSOCK_H
2179 #include <winsock.h>
2183 #ifdef HAVE_SYS_TYPES_H
2184 #include <sys/types.h>
2186 #ifdef HAVE_SYS_SOCKET_H
2187 #include <sys/socket.h>
2189 #ifdef HAVE_NETINET_IN_H
2190 #include <netinet/in.h>
2192 #ifdef HAVE_ARPA_INET_H
2193 #include <arpa/inet.h>
2200 dnl CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC
2201 dnl -------------------------------------------------
2202 dnl Check if monotonic clock_gettime is available.
2204 AC_DEFUN([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC], [
2205 AC_REQUIRE([AC_HEADER_TIME])dnl
2206 AC_CHECK_HEADERS(sys/types.h sys/time.h time.h)
2207 AC_MSG_CHECKING([for monotonic clock_gettime])
2210 #ifdef HAVE_SYS_TYPES_H
2211 #include <sys/types.h>
2213 #ifdef HAVE_SYS_TIME_H
2214 #include <sys/time.h>
2215 #ifdef TIME_WITH_SYS_TIME
2225 (void)clock_gettime(CLOCK_MONOTONIC, &ts);
2228 AC_MSG_RESULT([yes])
2229 ac_cv_func_clock_gettime="yes"
2232 ac_cv_func_clock_gettime="no"
2234 dnl Definition of HAVE_CLOCK_GETTIME_MONOTONIC is intentionally postponed
2235 dnl until library linking and run-time checks for clock_gettime succeed.
2239 dnl CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC
2240 dnl -------------------------------------------------
2241 dnl If monotonic clock_gettime is available then,
2242 dnl check and prepended to LIBS any needed libraries.
2244 AC_DEFUN([CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC], [
2245 AC_REQUIRE([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC])dnl
2247 if test "$ac_cv_func_clock_gettime" = "yes"; then
2249 AC_MSG_CHECKING([for clock_gettime in libraries])
2251 curl_cv_save_LIBS="$LIBS"
2252 curl_cv_gclk_LIBS="unknown"
2254 for x_xlibs in '' '-lrt' '-lposix4' ; do
2255 if test "$curl_cv_gclk_LIBS" = "unknown"; then
2256 if test -z "$x_xlibs"; then
2257 LIBS="$curl_cv_save_LIBS"
2259 LIBS="$x_xlibs $curl_cv_save_LIBS"
2263 #ifdef HAVE_SYS_TYPES_H
2264 #include <sys/types.h>
2266 #ifdef HAVE_SYS_TIME_H
2267 #include <sys/time.h>
2268 #ifdef TIME_WITH_SYS_TIME
2278 (void)clock_gettime(CLOCK_MONOTONIC, &ts);
2281 curl_cv_gclk_LIBS="$x_xlibs"
2286 LIBS="$curl_cv_save_LIBS"
2288 case X-"$curl_cv_gclk_LIBS" in
2290 AC_MSG_RESULT([cannot find clock_gettime])
2291 AC_MSG_WARN([HAVE_CLOCK_GETTIME_MONOTONIC will not be defined])
2292 ac_cv_func_clock_gettime="no"
2295 AC_MSG_RESULT([no additional lib required])
2296 ac_cv_func_clock_gettime="yes"
2299 if test -z "$curl_cv_save_LIBS"; then
2300 LIBS="$curl_cv_gclk_LIBS"
2302 LIBS="$curl_cv_gclk_LIBS $curl_cv_save_LIBS"
2304 AC_MSG_RESULT([$curl_cv_gclk_LIBS])
2305 ac_cv_func_clock_gettime="yes"
2309 dnl only do runtime verification when not cross-compiling
2310 if test "x$cross_compiling" != "xyes" &&
2311 test "$ac_cv_func_clock_gettime" = "yes"; then
2312 AC_MSG_CHECKING([if monotonic clock_gettime works])
2315 #ifdef HAVE_SYS_TYPES_H
2316 #include <sys/types.h>
2318 #ifdef HAVE_SYS_TIME_H
2319 #include <sys/time.h>
2320 #ifdef TIME_WITH_SYS_TIME
2330 if (0 == clock_gettime(CLOCK_MONOTONIC, &ts))
2336 AC_MSG_RESULT([yes])
2339 AC_MSG_WARN([HAVE_CLOCK_GETTIME_MONOTONIC will not be defined])
2340 ac_cv_func_clock_gettime="no"
2341 LIBS="$curl_cv_save_LIBS"
2345 case "$ac_cv_func_clock_gettime" in
2347 AC_DEFINE_UNQUOTED(HAVE_CLOCK_GETTIME_MONOTONIC, 1,
2348 [Define to 1 if you have the clock_gettime function and monotonic timer.])
2357 dnl CURL_CHECK_FUNC_SELECT
2358 dnl -------------------------------------------------
2359 dnl Test if the socket select() function is available,
2360 dnl and check its return type and the types of its
2361 dnl arguments. If the function succeeds HAVE_SELECT
2362 dnl will be defined, defining the types of the
2363 dnl arguments in SELECT_TYPE_ARG1, SELECT_TYPE_ARG234
2364 dnl and SELECT_TYPE_ARG5, defining the type of the
2365 dnl function return value in SELECT_TYPE_RETV, and
2366 dnl also defining the type qualifier of fifth argument
2367 dnl in SELECT_QUAL_ARG5.
2369 AC_DEFUN([CURL_CHECK_FUNC_SELECT], [
2370 AC_REQUIRE([CURL_CHECK_STRUCT_TIMEVAL])dnl
2371 AC_CHECK_HEADERS(sys/select.h sys/socket.h)
2373 AC_MSG_CHECKING([for select])
2377 #ifdef HAVE_WINDOWS_H
2378 #ifndef WIN32_LEAN_AND_MEAN
2379 #define WIN32_LEAN_AND_MEAN
2381 #include <windows.h>
2382 #ifdef HAVE_WINSOCK2_H
2383 #include <winsock2.h>
2385 #ifdef HAVE_WINSOCK_H
2386 #include <winsock.h>
2390 #ifdef HAVE_SYS_TYPES_H
2391 #include <sys/types.h>
2393 #ifdef HAVE_SYS_TIME_H
2394 #include <sys/time.h>
2395 #ifdef TIME_WITH_SYS_TIME
2403 #ifndef HAVE_WINDOWS_H
2404 #ifdef HAVE_SYS_SELECT_H
2405 #include <sys/select.h>
2407 #ifdef HAVE_SYS_SOCKET_H
2408 #include <sys/socket.h>
2412 select(0, 0, 0, 0, 0);
2415 AC_MSG_RESULT([yes])
2416 curl_cv_select="yes"
2422 if test "$curl_cv_select" = "yes"; then
2423 AC_CACHE_CHECK([types of args and return type for select],
2424 [curl_cv_func_select_args], [
2425 curl_cv_func_select_args="unknown"
2426 for sel_retv in 'int' 'ssize_t'; do
2427 for sel_arg1 in 'int' 'ssize_t' 'size_t' 'unsigned long int' 'unsigned int'; do
2428 for sel_arg234 in 'fd_set *' 'int *' 'void *'; do
2429 for sel_arg5 in 'struct timeval *' 'const struct timeval *'; do
2430 if test "$curl_cv_func_select_args" = "unknown"; then
2434 #ifdef HAVE_WINDOWS_H
2435 #ifndef WIN32_LEAN_AND_MEAN
2436 #define WIN32_LEAN_AND_MEAN
2438 #include <windows.h>
2439 #ifdef HAVE_WINSOCK2_H
2440 #include <winsock2.h>
2442 #ifdef HAVE_WINSOCK_H
2443 #include <winsock.h>
2446 #define SELECTCALLCONV PASCAL
2448 #ifdef HAVE_SYS_TYPES_H
2449 #include <sys/types.h>
2451 #ifdef HAVE_SYS_TIME_H
2452 #include <sys/time.h>
2453 #ifdef TIME_WITH_SYS_TIME
2461 #ifndef HAVE_WINDOWS_H
2462 #ifdef HAVE_SYS_SELECT_H
2463 #include <sys/select.h>
2465 #ifdef HAVE_SYS_SOCKET_H
2466 #include <sys/socket.h>
2468 #define SELECTCALLCONV
2470 #ifndef HAVE_STRUCT_TIMEVAL
2476 extern $sel_retv SELECTCALLCONV select($sel_arg1,
2486 $sel_retv res = select(nfds, rfds, wfds, efds, 0);
2489 curl_cv_func_select_args="$sel_arg1,$sel_arg234,$sel_arg5,$sel_retv"
2497 if test "$curl_cv_func_select_args" = "unknown"; then
2498 AC_MSG_WARN([Cannot find proper types to use for select args])
2499 AC_MSG_WARN([HAVE_SELECT will not be defined])
2501 select_prev_IFS=$IFS; IFS=','
2502 set dummy `echo "$curl_cv_func_select_args" | sed 's/\*/\*/g'`
2503 IFS=$select_prev_IFS
2506 sel_qual_type_arg5=$[3]
2508 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG1, $[1],
2509 [Define to the type of arg 1 for select.])
2510 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG234, $[2],
2511 [Define to the type of args 2, 3 and 4 for select.])
2512 AC_DEFINE_UNQUOTED(SELECT_TYPE_RETV, $[4],
2513 [Define to the function return type for select.])
2517 case $prev_sh_opts in
2525 case "$sel_qual_type_arg5" in
2528 sel_type_arg5=`echo $sel_qual_type_arg5 | sed 's/^const //'`
2532 sel_type_arg5=$sel_qual_type_arg5
2536 AC_DEFINE_UNQUOTED(SELECT_QUAL_ARG5, $sel_qual_arg5,
2537 [Define to the type qualifier of arg 5 for select.])
2538 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG5, $sel_type_arg5,
2539 [Define to the type of arg 5 for select.])
2541 case $prev_sh_opts in
2549 AC_DEFINE_UNQUOTED(HAVE_SELECT, 1,
2550 [Define to 1 if you have the select function.])
2551 ac_cv_func_select="yes"
2557 dnl ************************************************************
2558 dnl check for working getaddrinfo() that works with AI_NUMERICHOST
2560 AC_DEFUN([CURL_CHECK_WORKING_GETADDRINFO],[
2561 AC_CACHE_CHECK(for working getaddrinfo, ac_cv_working_getaddrinfo,[
2564 #include <sys/types.h>
2565 #include <sys/socket.h>
2569 struct addrinfo hints, *ai;
2572 memset(&hints, 0, sizeof(hints));
2573 hints.ai_flags = AI_NUMERICHOST;
2574 hints.ai_family = AF_UNSPEC;
2575 hints.ai_socktype = SOCK_STREAM;
2576 error = getaddrinfo("127.0.0.1", "8080", &hints, &ai);
2583 ac_cv_working_getaddrinfo="yes"
2585 ac_cv_working_getaddrinfo="no"
2587 ac_cv_working_getaddrinfo="yes"
2589 if test "$ac_cv_working_getaddrinfo" = "yes"; then
2590 AC_DEFINE(HAVE_GETADDRINFO, 1, [Define if getaddrinfo exists and works])
2591 AC_DEFINE(ENABLE_IPV6, 1, [Define if you want to enable IPv6 support])
2594 AC_SUBST(IPV6_ENABLED)
2599 AC_DEFUN([CURL_CHECK_LOCALTIME_R],
2601 dnl check for localtime_r
2602 AC_CHECK_FUNCS(localtime_r,[
2603 AC_MSG_CHECKING(whether localtime_r is declared)
2604 AC_EGREP_CPP(localtime_r,[
2606 #include <time.h>],[
2607 AC_MSG_RESULT(yes)],[
2609 AC_MSG_CHECKING(whether localtime_r with -D_REENTRANT is declared)
2610 AC_EGREP_CPP(localtime_r,[
2613 #include <time.h>],[
2614 AC_MSG_RESULT(yes)],
2615 AC_MSG_RESULT(no))])])
2619 dnl This function checks for strerror_r(). If it isn't found at first, it
2620 dnl retries with _THREAD_SAFE defined, as that is what AIX seems to require
2621 dnl in order to find this function.
2623 dnl If the function is found, it will then proceed to check how the function
2624 dnl actually works: glibc-style or POSIX-style.
2627 dnl char *strerror_r(int errnum, char *buf, size_t n);
2629 dnl What this one does is to return the error string (no surprises there),
2630 dnl but it doesn't usually copy anything into buf! The 'buf' and 'n'
2631 dnl parameters are only meant as an optional working area, in case strerror_r
2632 dnl needs it. A quick test on a few systems shows that it's generally not
2636 dnl int strerror_r(int errnum, char *buf, size_t n);
2638 AC_DEFUN([CURL_CHECK_STRERROR_R],
2640 AC_CHECK_FUNCS(strerror_r)
2642 if test "x$ac_cv_func_strerror_r" = "xyes"; then
2644 AC_MSG_CHECKING(whether strerror_r is declared)
2645 AC_EGREP_CPP(strerror_r,[
2647 #include <string.h>],[
2648 AC_MSG_RESULT(yes)],[
2650 AC_MSG_CHECKING(whether strerror_r with -D_REENTRANT is declared)
2651 AC_EGREP_CPP(strerror_r,[
2654 #include <string.h>],[
2655 AC_MSG_RESULT(yes)],
2657 AC_DEFINE(HAVE_NO_STRERROR_R_DECL, 1, [we have no strerror_r() proto])
2658 ) dnl with _THREAD_SAFE
2659 ]) dnl plain cpp for it
2661 dnl determine if this strerror_r() is glibc or POSIX
2662 AC_MSG_CHECKING([for a glibc strerror_r API])
2668 char buffer[1024]; /* big enough to play with */
2670 strerror_r(EACCES, buffer, sizeof(buffer));
2671 /* this should've returned a string */
2672 if(!string || !string[0])
2677 GLIBC_STRERROR_R="1"
2678 AC_DEFINE(HAVE_GLIBC_STRERROR_R, 1, [we have a glibc-style strerror_r()])
2679 AC_MSG_RESULT([yes]),
2680 AC_MSG_RESULT([no]),
2682 dnl Use an inferior method of strerror_r detection while cross-compiling
2684 #include <features.h>
2689 dnl looks like glibc, so assume a glibc-style strerror_r()
2690 GLIBC_STRERROR_R="1"
2691 AC_DEFINE(HAVE_GLIBC_STRERROR_R, 1, [we have a glibc-style strerror_r()])
2692 AC_MSG_RESULT([yes]),
2693 AC_MSG_NOTICE([cannot determine strerror_r() style: edit lib/config.h manually!])
2694 ) dnl while cross-compiling
2697 if test -z "$GLIBC_STRERROR_R"; then
2699 AC_MSG_CHECKING([for a POSIX strerror_r API])
2705 char buffer[1024]; /* big enough to play with */
2707 strerror_r(EACCES, buffer, sizeof(buffer));
2708 /* This should've returned zero, and written an error string in the
2710 if(!buffer[0] || error)
2715 AC_DEFINE(HAVE_POSIX_STRERROR_R, 1, [we have a POSIX-style strerror_r()])
2716 AC_MSG_RESULT([yes]),
2717 AC_MSG_RESULT([no]) ,
2718 dnl cross-compiling!
2719 AC_MSG_NOTICE([cannot determine strerror_r() style: edit lib/config.h manually!])
2722 fi dnl if not using glibc API
2724 fi dnl we have a strerror_r
2728 AC_DEFUN([CURL_CHECK_INET_NTOA_R],
2730 dnl determine if function definition for inet_ntoa_r exists.
2731 AC_CHECK_FUNCS(inet_ntoa_r,[
2732 AC_MSG_CHECKING(whether inet_ntoa_r is declared)
2733 AC_EGREP_CPP(inet_ntoa_r,[
2735 #include <arpa/inet.h>],[
2736 AC_DEFINE(HAVE_INET_NTOA_R_DECL, 1, [inet_ntoa_r() is declared])
2737 AC_MSG_RESULT(yes)],[
2739 AC_MSG_CHECKING(whether inet_ntoa_r with -D_REENTRANT is declared)
2740 AC_EGREP_CPP(inet_ntoa_r,[
2743 #include <arpa/inet.h>],[
2744 AC_DEFINE(HAVE_INET_NTOA_R_DECL, 1, [inet_ntoa_r() is declared])
2745 AC_MSG_RESULT(yes)],
2746 AC_MSG_RESULT(no))])])
2750 dnl CURL_CHECK_GETHOSTBYADDR_R
2751 dnl -------------------------------------------------
2752 dnl check number of arguments for gethostbyaddr_r, it
2753 dnl might take either 5, 7, or 8 arguments.
2755 AC_DEFUN([CURL_CHECK_GETHOSTBYADDR_R], [
2757 AC_MSG_CHECKING([for gethostbyaddr_r])
2759 AC_LANG_FUNC_LINK_TRY([gethostbyaddr_r])
2761 AC_MSG_RESULT([yes])
2762 tmp_cv_gethostbyaddr_r="yes"
2765 tmp_cv_gethostbyaddr_r="no"
2768 if test "$tmp_cv_gethostbyaddr_r" != "yes"; then
2769 AC_MSG_CHECKING([deeper for gethostbyaddr_r])
2776 AC_MSG_RESULT([yes])
2777 tmp_cv_gethostbyaddr_r="yes"
2779 AC_MSG_RESULT([but still no])
2780 tmp_cv_gethostbyaddr_r="no"
2784 if test "$tmp_cv_gethostbyaddr_r" = "yes"; then
2786 ac_cv_gethostbyaddr_r_args="unknown"
2788 AC_MSG_CHECKING([if gethostbyaddr_r takes 5 arguments])
2792 #include <sys/types.h>
2799 struct hostent_data hdata;
2801 rc = gethostbyaddr_r(address, length, type, &h, &hdata);
2804 AC_MSG_RESULT([yes])
2805 AC_DEFINE(HAVE_GETHOSTBYADDR_R_5, 1, [gethostbyaddr_r() takes 5 args])
2806 ac_cv_gethostbyaddr_r_args="5"
2811 if test "$ac_cv_gethostbyaddr_r_args" = "unknown"; then
2812 AC_MSG_CHECKING([if gethostbyaddr_r with -D_REENTRANT takes 5 arguments])
2817 #include <sys/types.h>
2824 struct hostent_data hdata;
2826 rc = gethostbyaddr_r(address, length, type, &h, &hdata);
2829 AC_MSG_RESULT([yes])
2830 AC_DEFINE(HAVE_GETHOSTBYADDR_R_5, 1, [gethostbyaddr_r() takes 5 args])
2831 ac_cv_gethostbyaddr_r_args="5"
2837 if test "$ac_cv_gethostbyaddr_r_args" = "unknown"; then
2838 AC_MSG_CHECKING([if gethostbyaddr_r takes 7 arguments])
2842 #include <sys/types.h>
2851 struct hostent * hp;
2852 hp = gethostbyaddr_r(address, length, type, &h,
2853 buffer, 8192, &h_errnop);
2856 AC_MSG_RESULT([yes])
2857 AC_DEFINE(HAVE_GETHOSTBYADDR_R_7, 1, [gethostbyaddr_r() takes 7 args])
2858 ac_cv_gethostbyaddr_r_args="7"
2864 if test "$ac_cv_gethostbyaddr_r_args" = "unknown"; then
2865 AC_MSG_CHECKING([if gethostbyaddr_r with -D_REENTRANT takes 7 arguments])
2870 #include <sys/types.h>
2879 struct hostent * hp;
2880 hp = gethostbyaddr_r(address, length, type, &h,
2881 buffer, 8192, &h_errnop);
2884 AC_MSG_RESULT([yes])
2885 AC_DEFINE(HAVE_GETHOSTBYADDR_R_7, 1, [gethostbyaddr_r() takes 7 args])
2886 ac_cv_gethostbyaddr_r_args="7"
2892 if test "$ac_cv_gethostbyaddr_r_args" = "unknown"; then
2893 AC_MSG_CHECKING([if gethostbyaddr_r takes 8 arguments])
2897 #include <sys/types.h>
2906 struct hostent * hp;
2908 rc = gethostbyaddr_r(address, length, type, &h,
2909 buffer, 8192, &hp, &h_errnop);
2912 AC_MSG_RESULT([yes])
2913 AC_DEFINE(HAVE_GETHOSTBYADDR_R_8, 1, [gethostbyaddr_r() takes 8 args])
2914 ac_cv_gethostbyaddr_r_args="8"
2920 if test "$ac_cv_gethostbyaddr_r_args" = "unknown"; then
2921 AC_MSG_CHECKING([if gethostbyaddr_r with -D_REENTRANT takes 8 arguments])
2926 #include <sys/types.h>
2935 struct hostent * hp;
2937 rc = gethostbyaddr_r(address, length, type, &h,
2938 buffer, 8192, &hp, &h_errnop);
2941 AC_MSG_RESULT([yes])
2942 AC_DEFINE(HAVE_GETHOSTBYADDR_R_8, 1, [gethostbyaddr_r() takes 8 args])
2943 ac_cv_gethostbyaddr_r_args="8"
2949 if test "$ac_cv_gethostbyaddr_r_args" = "unknown"; then
2950 AC_MSG_WARN([Cannot find out how to use gethostbyaddr_r])
2951 AC_MSG_WARN([HAVE_GETHOSTBYADDR_R will not be defined])
2952 ac_cv_func_gethostbyaddr_r="no"
2954 AC_DEFINE_UNQUOTED(HAVE_GETHOSTBYADDR_R, 1,
2955 [Define to 1 if you have the gethostbyaddr_r function.])
2956 ac_cv_func_gethostbyaddr_r="yes"
2960 ac_cv_func_gethostbyaddr_r="no"
2965 dnl CURL_CHECK_GETHOSTBYNAME_R
2966 dnl -------------------------------------------------
2967 dnl check number of arguments for gethostbyname_r, it
2968 dnl might take either 3, 5, or 6 arguments.
2970 AC_DEFUN([CURL_CHECK_GETHOSTBYNAME_R], [
2972 AC_MSG_CHECKING([for gethostbyname_r])
2974 AC_LANG_FUNC_LINK_TRY([gethostbyname_r])
2976 AC_MSG_RESULT([yes])
2977 tmp_cv_gethostbyname_r="yes"
2980 tmp_cv_gethostbyname_r="no"
2983 if test "$tmp_cv_gethostbyname_r" != "yes"; then
2984 AC_MSG_CHECKING([deeper for gethostbyname_r])
2991 AC_MSG_RESULT([yes])
2992 tmp_cv_gethostbyname_r="yes"
2994 AC_MSG_RESULT([but still no])
2995 tmp_cv_gethostbyname_r="no"
2999 if test "$tmp_cv_gethostbyname_r" = "yes"; then
3001 ac_cv_gethostbyname_r_args="unknown"
3003 AC_MSG_CHECKING([if gethostbyname_r takes 3 arguments])
3008 #include <sys/types.h>
3011 #define NULL (void *)0
3013 gethostbyname_r(const char *, struct hostent *,
3014 struct hostent_data *);
3016 struct hostent_data data;
3017 gethostbyname_r(NULL, NULL, NULL);
3020 AC_MSG_RESULT([yes])
3021 AC_DEFINE(HAVE_GETHOSTBYNAME_R_3, 1, [gethostbyname_r() takes 3 args])
3022 ac_cv_gethostbyname_r_args="3"
3027 if test "$ac_cv_gethostbyname_r_args" = "unknown"; then
3028 AC_MSG_CHECKING([if gethostbyname_r with -D_REENTRANT takes 3 arguments])
3034 #include <sys/types.h>
3037 #define NULL (void *)0
3039 gethostbyname_r(const char *, struct hostent *,
3040 struct hostent_data *);
3042 struct hostent_data data;
3043 gethostbyname_r(NULL, NULL, NULL);
3046 AC_MSG_RESULT([yes])
3047 AC_DEFINE(HAVE_GETHOSTBYNAME_R_3, 1, [gethostbyname_r() takes 3 args])
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_cv_gethostbyname_r_args="5"
3103 if test "$ac_cv_gethostbyname_r_args" = "unknown"; then
3104 AC_MSG_CHECKING([if gethostbyname_r takes 6 arguments])
3108 #include <sys/types.h>
3111 #define NULL (void *)0
3113 gethostbyname_r(const char *, struct hostent *,
3114 char *, size_t, struct hostent **, int *);
3116 gethostbyname_r(NULL, NULL, NULL, 0, NULL, NULL);
3119 AC_MSG_RESULT([yes])
3120 AC_DEFINE(HAVE_GETHOSTBYNAME_R_6, 1, [gethostbyname_r() takes 6 args])
3121 ac_cv_gethostbyname_r_args="6"
3127 if test "$ac_cv_gethostbyname_r_args" = "unknown"; then
3128 AC_MSG_CHECKING([if gethostbyname_r with -D_REENTRANT takes 6 arguments])
3133 #include <sys/types.h>
3136 #define NULL (void *)0
3138 gethostbyname_r(const char *, struct hostent *,
3139 char *, size_t, struct hostent **, int *);
3141 gethostbyname_r(NULL, NULL, NULL, 0, NULL, NULL);
3144 AC_MSG_RESULT([yes])
3145 AC_DEFINE(HAVE_GETHOSTBYNAME_R_6, 1, [gethostbyname_r() takes 6 args])
3146 ac_cv_gethostbyname_r_args="6"
3152 if test "$ac_cv_gethostbyname_r_args" = "unknown"; then
3153 AC_MSG_WARN([Cannot find out how to use gethostbyname_r])
3154 AC_MSG_WARN([HAVE_GETHOSTBYNAME_R will not be defined])
3155 ac_cv_func_gethostbyname_r="no"
3157 AC_DEFINE_UNQUOTED(HAVE_GETHOSTBYNAME_R, 1,
3158 [Define to 1 if you have the gethostbyname_r function.])
3159 ac_cv_func_gethostbyname_r="yes"
3163 ac_cv_func_gethostbyname_r="no"
3168 dnl **********************************************************************
3169 dnl CURL_DETECT_ICC ([ACTION-IF-YES])
3171 dnl check if this is the Intel ICC compiler, and if so run the ACTION-IF-YES
3172 dnl sets the $ICC variable to "yes" or "no"
3173 dnl **********************************************************************
3174 AC_DEFUN([CURL_DETECT_ICC],
3177 AC_MSG_CHECKING([for icc in use])
3178 if test "$GCC" = "yes"; then
3179 dnl check if this is icc acting as gcc in disguise
3180 AC_EGREP_CPP([^__INTEL_COMPILER], [__INTEL_COMPILER],
3181 dnl action if the text is found, this it has not been replaced by the
3184 dnl the text was not found, it was replaced by the cpp
3186 AC_MSG_RESULT([yes])
3190 if test "$ICC" = "no"; then
3196 dnl We create a function for detecting which compiler we use and then set as
3197 dnl pendantic compiler options as possible for that particular compiler. The
3198 dnl options are only used for debug-builds.
3200 AC_DEFUN([CURL_CC_DEBUG_OPTS],
3202 if test "z$ICC" = "z"; then
3206 if test "$GCC" = "yes"; then
3208 dnl figure out gcc version!
3209 AC_MSG_CHECKING([gcc version])
3210 gccver=`$CC -dumpversion`
3211 num1=`echo $gccver | cut -d . -f1`
3212 num2=`echo $gccver | cut -d . -f2`
3213 gccnum=`(expr $num1 "*" 100 + $num2) 2>/dev/null`
3214 AC_MSG_RESULT($gccver)
3216 if test "$ICC" = "yes"; then
3217 dnl this is icc, not gcc.
3219 dnl ICC warnings we ignore:
3220 dnl * 269 warns on our "%Od" printf formatters for curl_off_t output:
3221 dnl "invalid format string conversion"
3222 dnl * 279 warns on static conditions in while expressions
3223 dnl * 981 warns on "operands are evaluated in unspecified order"
3224 dnl * 1418 "external definition with no prior declaration"
3225 dnl * 1419 warns on "external declaration in primary source file"
3226 dnl which we know and do on purpose.
3228 WARN="-wd279,269,981,1418,1419"
3230 if test "$gccnum" -gt "600"; then
3231 dnl icc 6.0 and older doesn't have the -Wall flag
3235 dnl this is a set of options we believe *ALL* gcc versions support:
3236 WARN="-W -Wall -Wwrite-strings -pedantic -Wpointer-arith -Wnested-externs -Winline -Wmissing-prototypes"
3238 dnl -Wcast-align is a bit too annoying on all gcc versions ;-)
3240 if test "$gccnum" -ge "207"; then
3241 dnl gcc 2.7 or later
3242 WARN="$WARN -Wmissing-declarations"
3245 if test "$gccnum" -gt "295"; then
3246 dnl only if the compiler is newer than 2.95 since we got lots of
3247 dnl "`_POSIX_C_SOURCE' is not defined" in system headers with
3248 dnl gcc 2.95.4 on FreeBSD 4.9!
3249 WARN="$WARN -Wundef -Wno-long-long -Wsign-compare -Wshadow -Wno-multichar"
3252 if test "$gccnum" -ge "296"; then
3253 dnl gcc 2.96 or later
3254 WARN="$WARN -Wfloat-equal"
3257 if test "$gccnum" -gt "296"; then
3258 dnl this option does not exist in 2.96
3259 WARN="$WARN -Wno-format-nonliteral"
3262 dnl -Wunreachable-code seems totally unreliable on my gcc 3.3.2 on
3263 dnl on i686-Linux as it gives us heaps with false positives.
3264 dnl Also, on gcc 4.0.X it is totally unbearable and complains all
3265 dnl over making it unusable for generic purposes. Let's not use it.
3267 if test "$gccnum" -ge "303"; then
3268 dnl gcc 3.3 and later
3269 WARN="$WARN -Wendif-labels -Wstrict-prototypes"
3272 if test "$gccnum" -ge "304"; then
3273 # try these on gcc 3.4
3274 WARN="$WARN -Wdeclaration-after-statement"
3277 for flag in $CPPFLAGS; do
3280 dnl Include path, provide a -isystem option for the same dir
3281 dnl to prevent warnings in those dirs. The -isystem was not very
3282 dnl reliable on earlier gcc versions.
3283 add=`echo $flag | sed 's/^-I/-isystem /g'`
3291 CFLAGS="$CFLAGS $WARN"
3293 AC_MSG_NOTICE([Added this set of compiler options: $WARN])
3297 AC_MSG_NOTICE([Added no extra compiler options])
3301 dnl strip off optimizer flags
3303 for flag in $CFLAGS; do
3306 dnl echo "cut off $flag"
3309 NEWFLAGS="$NEWFLAGS $flag"
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)])
3538 dnl CURL_DEFINE_UNQUOTED (VARIABLE, [VALUE])
3539 dnl -------------------------------------------------
3540 dnl Like AC_DEFINE_UNQUOTED this macro will define a C preprocessor
3541 dnl symbol that can be further used in custom template configuration
3542 dnl files. This macro, unlike AC_DEFINE_UNQUOTED, does not use a third
3543 dnl argument for the description. Symbol definitions done with this
3544 dnl macro are intended to be exclusively used in handcrafted *.h.in
3545 dnl template files. Contrary to what AC_DEFINE_UNQUOTED does, this one
3546 dnl prevents autoheader generation and insertion of symbol template
3547 dnl stub and definition into the first configuration header file. Do
3548 dnl not use this macro as a replacement for AC_DEFINE_UNQUOTED, each
3549 dnl one serves different functional needs.
3551 AC_DEFUN([CURL_DEFINE_UNQUOTED], [
3552 cat >>confdefs.h <<_EOF
3553 [@%:@define] $1 ifelse($#, 2, [$2], 1)
3558 dnl CURL_INCLUDES_INTTYPES
3559 dnl -------------------------------------------------
3560 dnl Set up variable with list of headers that must be
3561 dnl included when inttypes.h is to be included.
3563 AC_DEFUN([CURL_INCLUDES_INTTYPES], [
3564 curl_includes_inttypes="\
3565 /* includes start */
3566 #ifdef HAVE_SYS_TYPES_H
3567 # include <sys/types.h>
3569 #ifdef HAVE_STDINT_H
3570 # include <stdint.h>
3572 #ifdef HAVE_INTTYPES_H
3573 # include <inttypes.h>
3577 sys/types.h stdint.h inttypes.h,
3578 [], [], [$curl_includes_inttypes])
3582 dnl DO_CURL_OFF_T_CHECK (TYPE, SIZE)
3583 dnl -------------------------------------------------
3584 dnl Internal macro for CURL_CONFIGURE_CURL_OFF_T
3586 AC_DEFUN([DO_CURL_OFF_T_CHECK], [
3587 AC_REQUIRE([CURL_INCLUDES_INTTYPES])dnl
3588 if test "$x_typeof" = "unknown" && test ! -z "$1"; then
3592 case AS_TR_SH([$1]) in
3594 tmp_includes="$curl_includes_inttypes"
3595 tmp_source="char f@<:@@:>@ = PRId64;"
3599 tmp_includes="$curl_includes_inttypes"
3600 tmp_source="char f@<:@@:>@ = PRId32;"
3604 tmp_includes="$curl_includes_inttypes"
3605 tmp_source="char f@<:@@:>@ = PRId16;"
3612 typedef $1 curl_off_t;
3613 typedef char dummy_arr[sizeof(curl_off_t) == $2 ? 1 : -1];
3619 if test -z "$tmp_fmt"; then
3623 CURL_CHECK_DEF([$tmp_fmt], [$curl_includes_inttypes], [silent])
3624 AS_VAR_PUSHDEF([tmp_HaveDef], [curl_cv_have_def_$tmp_fmt])dnl
3625 AS_VAR_PUSHDEF([tmp_Def], [curl_cv_def_$tmp_fmt])dnl
3626 if test AS_VAR_GET([tmp_HaveDef]) = "yes"; then
3627 x_format=AS_VAR_GET([tmp_Def])
3631 AS_VAR_POPDEF([tmp_Def])dnl
3632 AS_VAR_POPDEF([tmp_HaveDef])dnl
3639 dnl CURL_CONFIGURE_CURL_OFF_T
3640 dnl -------------------------------------------------
3641 dnl Find out suitable curl_off_t data type definition and associated
3642 dnl items, and make the appropriate definitions used in template file
3643 dnl include/curl/curlbuild.h.in to properly configure the library.
3645 AC_DEFUN([CURL_CONFIGURE_CURL_OFF_T], [
3646 AC_REQUIRE([CURL_INCLUDES_INTTYPES])dnl
3648 AC_BEFORE([$0],[AC_SYS_LARGEFILE])dnl
3649 AC_BEFORE([$0],[CURL_CONFIGURE_REENTRANT])dnl
3650 AC_BEFORE([$0],[CURL_CHECK_AIX_ALL_SOURCE])dnl
3652 if test -z "$SED"; then
3653 AC_MSG_ERROR([SED not set. Cannot continue without SED being set.])
3656 AC_CHECK_SIZEOF(long)
3657 AC_CHECK_SIZEOF(void*)
3659 if test -z "$ac_cv_sizeof_long" ||
3660 test "$ac_cv_sizeof_long" -eq "0"; then
3661 AC_MSG_ERROR([cannot find out size of long.])
3663 if test -z "$ac_cv_sizeof_voidp" ||
3664 test "$ac_cv_sizeof_voidp" -eq "0"; then
3665 AC_MSG_ERROR([cannot find out size of void*.])
3672 if test "$ac_cv_sizeof_long" -eq "8" &&
3673 test "$ac_cv_sizeof_voidp" -ge "8"; then
3675 elif test "$ac_cv_sizeof_long" -eq "4" &&
3676 test "$ac_cv_sizeof_voidp" -ge "4"; then
3678 elif test "$ac_cv_sizeof_long" -eq "2" &&
3679 test "$ac_cv_sizeof_voidp" -ge "2"; then
3683 dnl DO_CURL_OFF_T_CHECK results are stored in next 3 vars
3690 if test "$x_typeof" = "unknown"; then
3691 AC_MSG_CHECKING([for 64-bit curl_off_t data type])
3699 DO_CURL_OFF_T_CHECK([$t8], [8])
3701 AC_MSG_RESULT([$x_typeof])
3703 if test "$x_typeof" = "unknown"; then
3704 AC_MSG_CHECKING([for 32-bit curl_off_t data type])
3710 DO_CURL_OFF_T_CHECK([$t4], [4])
3712 AC_MSG_RESULT([$x_typeof])
3714 if test "$x_typeof" = "unknown"; then
3715 AC_MSG_CHECKING([for 16-bit curl_off_t data type])
3721 DO_CURL_OFF_T_CHECK([$t2], [2])
3723 AC_MSG_RESULT([$x_typeof])
3725 if test "$x_typeof" = "unknown"; then
3726 AC_MSG_ERROR([cannot find data type for curl_off_t.])
3729 AC_MSG_CHECKING([size of curl_off_t])
3730 AC_MSG_RESULT([$x_sizeof])
3732 AC_MSG_CHECKING([formatting string directive for curl_off_t])
3733 if test "$x_format" != "unknown"; then
3734 x_pull_headers="yes"
3735 x_format=`echo "$x_format" | "$SED" 's/[["]]//g'`
3736 u_format=`echo "$x_format" | "$SED" 's/i$/u/'`
3737 u_format=`echo "$u_format" | "$SED" 's/d$/u/'`
3738 u_format=`echo "$u_format" | "$SED" 's/D$/U/'`
3741 case AS_TR_SH([$x_typeof]) in
3742 long_long | __longlong | __longlong_t)
3767 AC_MSG_ERROR([cannot find print format string for curl_off_t.])
3771 AC_MSG_RESULT(["$x_format"])
3773 AC_MSG_CHECKING([formatting string directive for unsigned curl_off_t])
3774 AC_MSG_RESULT(["$u_format"])
3776 if test "$x_pull_headers" = "yes"; then
3777 if test "x$ac_cv_header_sys_types_h" = "xyes"; then
3778 CURL_DEFINE_UNQUOTED([CURL_PULL_SYS_TYPES_H])
3780 if test "x$ac_cv_header_stdint_h" = "xyes"; then
3781 CURL_DEFINE_UNQUOTED([CURL_PULL_STDINT_H])
3783 if test "x$ac_cv_header_inttypes_h" = "xyes"; then
3784 CURL_DEFINE_UNQUOTED([CURL_PULL_INTTYPES_H])
3788 CURL_DEFINE_UNQUOTED([CURL_OFF_T], [$x_typeof])
3789 CURL_DEFINE_UNQUOTED([CURL_FMT_OFF_T], ["$x_format"])
3790 CURL_DEFINE_UNQUOTED([CURL_FMT_OFF_TU], ["$u_format"])
3791 CURL_DEFINE_UNQUOTED([CURL_FORMAT_OFF_T], ["%$x_format"])
3792 CURL_DEFINE_UNQUOTED([CURL_SIZEOF_CURL_OFF_T], [$x_sizeof])