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 -z "$tmp_exp" || 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 # Nearly last minute change for this release starts here
1737 AC_DEFINE_UNQUOTED(HAVE_RECVFROM, 1,
1738 [Define to 1 if you have the recvfrom function.])
1739 ac_cv_func_recvfrom="yes"
1740 # Nearly last minute change for this release ends here
1741 if test "$curl_cv_func_recvfrom_args" = "unknown"; then
1742 AC_MSG_WARN([Cannot find proper types to use for recvfrom args])
1744 recvfrom_prev_IFS=$IFS; IFS=','
1745 set dummy `echo "$curl_cv_func_recvfrom_args" | sed 's/\*/\*/g'`
1746 IFS=$recvfrom_prev_IFS
1749 recvfrom_ptrt_arg2=$[2]
1750 recvfrom_ptrt_arg5=$[5]
1751 recvfrom_ptrt_arg6=$[6]
1753 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG1, $[1],
1754 [Define to the type of arg 1 for recvfrom.])
1755 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG3, $[3],
1756 [Define to the type of arg 3 for recvfrom.])
1757 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG4, $[4],
1758 [Define to the type of arg 4 for recvfrom.])
1759 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_RETV, $[7],
1760 [Define to the function return type for recvfrom.])
1764 case $prev_sh_opts in
1772 recvfrom_type_arg2=`echo $recvfrom_ptrt_arg2 | sed 's/ \*//'`
1773 recvfrom_type_arg5=`echo $recvfrom_ptrt_arg5 | sed 's/ \*//'`
1774 recvfrom_type_arg6=`echo $recvfrom_ptrt_arg6 | sed 's/ \*//'`
1776 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG2, $recvfrom_type_arg2,
1777 [Define to the type pointed by arg 2 for recvfrom.])
1778 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG5, $recvfrom_type_arg5,
1779 [Define to the type pointed by arg 5 for recvfrom.])
1780 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG6, $recvfrom_type_arg6,
1781 [Define to the type pointed by arg 6 for recvfrom.])
1783 if test "$recvfrom_type_arg2" = "void"; then
1784 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG2_IS_VOID, 1,
1785 [Define to 1 if the type pointed by arg 2 for recvfrom is void.])
1787 if test "$recvfrom_type_arg5" = "void"; then
1788 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG5_IS_VOID, 1,
1789 [Define to 1 if the type pointed by arg 5 for recvfrom is void.])
1791 if test "$recvfrom_type_arg6" = "void"; then
1792 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG6_IS_VOID, 1,
1793 [Define to 1 if the type pointed by arg 6 for recvfrom is void.])
1796 case $prev_sh_opts in
1804 AC_DEFINE_UNQUOTED(HAVE_RECVFROM, 1,
1805 [Define to 1 if you have the recvfrom function.])
1806 ac_cv_func_recvfrom="yes"
1809 AC_MSG_WARN([Unable to link function recvfrom])
1814 dnl CURL_CHECK_MSG_NOSIGNAL
1815 dnl -------------------------------------------------
1816 dnl Check for MSG_NOSIGNAL
1818 AC_DEFUN([CURL_CHECK_MSG_NOSIGNAL], [
1819 AC_CHECK_HEADERS(sys/types.h sys/socket.h)
1820 AC_CACHE_CHECK([for MSG_NOSIGNAL], [ac_cv_msg_nosignal], [
1824 #ifdef HAVE_WINDOWS_H
1825 #ifndef WIN32_LEAN_AND_MEAN
1826 #define WIN32_LEAN_AND_MEAN
1828 #include <windows.h>
1829 #ifdef HAVE_WINSOCK2_H
1830 #include <winsock2.h>
1832 #ifdef HAVE_WINSOCK_H
1833 #include <winsock.h>
1837 #ifdef HAVE_SYS_TYPES_H
1838 #include <sys/types.h>
1840 #ifdef HAVE_SYS_SOCKET_H
1841 #include <sys/socket.h>
1845 int flag=MSG_NOSIGNAL;
1848 ac_cv_msg_nosignal="yes"
1850 ac_cv_msg_nosignal="no"
1853 case "$ac_cv_msg_nosignal" in
1855 AC_DEFINE_UNQUOTED(HAVE_MSG_NOSIGNAL, 1,
1856 [Define to 1 if you have the MSG_NOSIGNAL flag.])
1862 dnl CURL_CHECK_STRUCT_TIMEVAL
1863 dnl -------------------------------------------------
1864 dnl Check for timeval struct
1866 AC_DEFUN([CURL_CHECK_STRUCT_TIMEVAL], [
1867 AC_REQUIRE([AC_HEADER_TIME])dnl
1868 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl
1869 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
1870 AC_CHECK_HEADERS(sys/types.h sys/time.h time.h)
1871 AC_CACHE_CHECK([for struct timeval], [ac_cv_struct_timeval], [
1875 #ifdef HAVE_WINDOWS_H
1876 #ifndef WIN32_LEAN_AND_MEAN
1877 #define WIN32_LEAN_AND_MEAN
1879 #include <windows.h>
1880 #ifdef HAVE_WINSOCK2_H
1881 #include <winsock2.h>
1883 #ifdef HAVE_WINSOCK_H
1884 #include <winsock.h>
1888 #ifdef HAVE_SYS_TYPES_H
1889 #include <sys/types.h>
1891 #ifdef HAVE_SYS_TIME_H
1892 #include <sys/time.h>
1893 #ifdef TIME_WITH_SYS_TIME
1907 ac_cv_struct_timeval="yes"
1909 ac_cv_struct_timeval="no"
1912 case "$ac_cv_struct_timeval" in
1914 AC_DEFINE_UNQUOTED(HAVE_STRUCT_TIMEVAL, 1,
1915 [Define to 1 if you have the timeval struct.])
1921 dnl TYPE_SIG_ATOMIC_T
1922 dnl -------------------------------------------------
1923 dnl Check if the sig_atomic_t type is available, and
1924 dnl verify if it is already defined as volatile.
1926 AC_DEFUN([TYPE_SIG_ATOMIC_T], [
1927 AC_CHECK_HEADERS(signal.h)
1928 AC_CHECK_TYPE([sig_atomic_t],[
1929 AC_DEFINE(HAVE_SIG_ATOMIC_T, 1,
1930 [Define to 1 if sig_atomic_t is an available typedef.])
1932 #ifdef HAVE_SIGNAL_H
1936 case "$ac_cv_type_sig_atomic_t" in
1939 AC_MSG_CHECKING([if sig_atomic_t is already defined as volatile])
1942 #ifdef HAVE_SIGNAL_H
1946 static volatile sig_atomic_t dummy = 0;
1950 ac_cv_sig_atomic_t_volatile="no"
1952 AC_MSG_RESULT([yes])
1953 ac_cv_sig_atomic_t_volatile="yes"
1956 if test "$ac_cv_sig_atomic_t_volatile" = "yes"; then
1957 AC_DEFINE(HAVE_SIG_ATOMIC_T_VOLATILE, 1,
1958 [Define to 1 if sig_atomic_t is already defined as volatile.])
1965 dnl CURL_CHECK_NONBLOCKING_SOCKET
1966 dnl -------------------------------------------------
1967 dnl Check for how to set a socket to non-blocking state. There seems to exist
1968 dnl four known different ways, with the one used almost everywhere being POSIX
1969 dnl and XPG3, while the other different ways for different systems (old BSD,
1970 dnl Windows and Amiga).
1972 dnl There are two known platforms (AIX 3.x and SunOS 4.1.x) where the
1973 dnl O_NONBLOCK define is found but does not work. This condition is attempted
1974 dnl to get caught in this script by using an excessive number of #ifdefs...
1976 AC_DEFUN([CURL_CHECK_NONBLOCKING_SOCKET], [
1977 AC_MSG_CHECKING([non-blocking sockets style])
1982 /* headers for O_NONBLOCK test */
1983 #include <sys/types.h>
1987 #if defined(sun) || defined(__sun__) || \
1988 defined(__SUNPRO_C) || defined(__SUNPRO_CC)
1989 # if defined(__SVR4) || defined(__srv4__)
1990 # define PLATFORM_SOLARIS
1992 # define PLATFORM_SUNOS4
1995 #if (defined(_AIX) || defined(__xlC__)) && !defined(_AIX41)
1996 # define PLATFORM_AIX_V3
1999 #if defined(PLATFORM_SUNOS4) || defined(PLATFORM_AIX_V3) || defined(__BEOS__)
2000 #error "O_NONBLOCK does not work on this platform"
2003 /* O_NONBLOCK source test */
2005 int flags = fcntl(socket, F_SETFL, flags | O_NONBLOCK);
2008 dnl the O_NONBLOCK test was fine
2009 nonblock="O_NONBLOCK"
2010 AC_DEFINE(HAVE_O_NONBLOCK, 1,
2011 [use O_NONBLOCK for non-blocking sockets])
2014 if test "$nonblock" = "unknown"; then
2017 /* headers for FIONBIO test */
2019 #include <stropts.h>
2021 /* FIONBIO source test (old-style unix) */
2023 int flags = ioctl(socket, FIONBIO, &flags);
2026 dnl FIONBIO test was good
2028 AC_DEFINE(HAVE_FIONBIO, 1,
2029 [use FIONBIO for non-blocking sockets])
2033 if test "$nonblock" = "unknown"; then
2036 /* headers for ioctlsocket test (Windows) */
2038 #ifdef HAVE_WINDOWS_H
2039 #ifndef WIN32_LEAN_AND_MEAN
2040 #define WIN32_LEAN_AND_MEAN
2042 #include <windows.h>
2043 #ifdef HAVE_WINSOCK2_H
2044 #include <winsock2.h>
2046 #ifdef HAVE_WINSOCK_H
2047 #include <winsock.h>
2052 /* ioctlsocket source code (Windows) */
2054 unsigned long flags = 0;
2055 sd = socket(0, 0, 0);
2056 ioctlsocket(sd, FIONBIO, &flags);
2059 dnl ioctlsocket test was good
2060 nonblock="ioctlsocket"
2061 AC_DEFINE(HAVE_IOCTLSOCKET, 1,
2062 [use ioctlsocket() for non-blocking sockets])
2066 if test "$nonblock" = "unknown"; then
2069 /* headers for IoctlSocket test (Amiga?) */
2070 #include <sys/ioctl.h>
2072 /* IoctlSocket source code (Amiga?) */
2074 int flags = IoctlSocket(socket, FIONBIO, (long)1);
2077 dnl Ioctlsocket test was good
2078 nonblock="IoctlSocket"
2079 AC_DEFINE(HAVE_IOCTLSOCKET_CASE, 1,
2080 [use Ioctlsocket() for non-blocking sockets])
2084 if test "$nonblock" = "unknown"; then
2087 /* headers for SO_NONBLOCK test (BeOS) */
2090 /* SO_NONBLOCK source code (BeOS) */
2093 int flags = setsockopt(socket, SOL_SOCKET, SO_NONBLOCK, &b, sizeof(b));
2096 dnl the SO_NONBLOCK test was good
2097 nonblock="SO_NONBLOCK"
2098 AC_DEFINE(HAVE_SO_NONBLOCK, 1,
2099 [use SO_NONBLOCK for non-blocking sockets])
2103 AC_MSG_RESULT($nonblock)
2105 if test "$nonblock" = "unknown"; then
2106 AC_DEFINE(HAVE_DISABLED_NONBLOCKING, 1,
2107 [disabled non-blocking sockets])
2108 AC_MSG_WARN([non-block sockets disabled])
2114 dnl -------------------------------------------------
2115 dnl Check for in_addr_t: it is used to receive the return code of inet_addr()
2116 dnl and a few other things.
2118 AC_DEFUN([TYPE_IN_ADDR_T], [
2119 AC_CHECK_TYPE([in_addr_t], ,[
2120 dnl in_addr_t not available
2121 AC_CACHE_CHECK([for in_addr_t equivalent],
2122 [curl_cv_in_addr_t_equiv], [
2123 curl_cv_in_addr_t_equiv="unknown"
2124 for t in "unsigned long" int size_t unsigned long; do
2125 if test "$curl_cv_in_addr_t_equiv" = "unknown"; then
2129 #ifdef HAVE_WINDOWS_H
2130 #ifndef WIN32_LEAN_AND_MEAN
2131 #define WIN32_LEAN_AND_MEAN
2133 #include <windows.h>
2134 #ifdef HAVE_WINSOCK2_H
2135 #include <winsock2.h>
2137 #ifdef HAVE_WINSOCK_H
2138 #include <winsock.h>
2142 #ifdef HAVE_SYS_TYPES_H
2143 #include <sys/types.h>
2145 #ifdef HAVE_SYS_SOCKET_H
2146 #include <sys/socket.h>
2148 #ifdef HAVE_NETINET_IN_H
2149 #include <netinet/in.h>
2151 #ifdef HAVE_ARPA_INET_H
2152 #include <arpa/inet.h>
2156 $t data = inet_addr ("1.2.3.4");
2159 curl_cv_in_addr_t_equiv="$t"
2164 case "$curl_cv_in_addr_t_equiv" in
2166 AC_MSG_ERROR([Cannot find a type to use in place of in_addr_t])
2169 AC_DEFINE_UNQUOTED(in_addr_t, $curl_cv_in_addr_t_equiv,
2170 [Type to use in place of in_addr_t when system does not provide it.])
2175 #ifdef HAVE_WINDOWS_H
2176 #ifndef WIN32_LEAN_AND_MEAN
2177 #define WIN32_LEAN_AND_MEAN
2179 #include <windows.h>
2180 #ifdef HAVE_WINSOCK2_H
2181 #include <winsock2.h>
2183 #ifdef HAVE_WINSOCK_H
2184 #include <winsock.h>
2188 #ifdef HAVE_SYS_TYPES_H
2189 #include <sys/types.h>
2191 #ifdef HAVE_SYS_SOCKET_H
2192 #include <sys/socket.h>
2194 #ifdef HAVE_NETINET_IN_H
2195 #include <netinet/in.h>
2197 #ifdef HAVE_ARPA_INET_H
2198 #include <arpa/inet.h>
2205 dnl CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC
2206 dnl -------------------------------------------------
2207 dnl Check if monotonic clock_gettime is available.
2209 AC_DEFUN([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC], [
2210 AC_REQUIRE([AC_HEADER_TIME])dnl
2211 AC_CHECK_HEADERS(sys/types.h sys/time.h time.h)
2212 AC_MSG_CHECKING([for monotonic clock_gettime])
2215 #ifdef HAVE_SYS_TYPES_H
2216 #include <sys/types.h>
2218 #ifdef HAVE_SYS_TIME_H
2219 #include <sys/time.h>
2220 #ifdef TIME_WITH_SYS_TIME
2230 (void)clock_gettime(CLOCK_MONOTONIC, &ts);
2233 AC_MSG_RESULT([yes])
2234 ac_cv_func_clock_gettime="yes"
2237 ac_cv_func_clock_gettime="no"
2239 dnl Definition of HAVE_CLOCK_GETTIME_MONOTONIC is intentionally postponed
2240 dnl until library linking and run-time checks for clock_gettime succeed.
2244 dnl CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC
2245 dnl -------------------------------------------------
2246 dnl If monotonic clock_gettime is available then,
2247 dnl check and prepended to LIBS any needed libraries.
2249 AC_DEFUN([CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC], [
2250 AC_REQUIRE([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC])dnl
2252 if test "$ac_cv_func_clock_gettime" = "yes"; then
2254 AC_MSG_CHECKING([for clock_gettime in libraries])
2256 curl_cv_save_LIBS="$LIBS"
2257 curl_cv_gclk_LIBS="unknown"
2259 for x_xlibs in '' '-lrt' '-lposix4' ; do
2260 if test "$curl_cv_gclk_LIBS" = "unknown"; then
2261 if test -z "$x_xlibs"; then
2262 LIBS="$curl_cv_save_LIBS"
2264 LIBS="$x_xlibs $curl_cv_save_LIBS"
2268 #ifdef HAVE_SYS_TYPES_H
2269 #include <sys/types.h>
2271 #ifdef HAVE_SYS_TIME_H
2272 #include <sys/time.h>
2273 #ifdef TIME_WITH_SYS_TIME
2283 (void)clock_gettime(CLOCK_MONOTONIC, &ts);
2286 curl_cv_gclk_LIBS="$x_xlibs"
2291 LIBS="$curl_cv_save_LIBS"
2293 case X-"$curl_cv_gclk_LIBS" in
2295 AC_MSG_RESULT([cannot find clock_gettime])
2296 AC_MSG_WARN([HAVE_CLOCK_GETTIME_MONOTONIC will not be defined])
2297 ac_cv_func_clock_gettime="no"
2300 AC_MSG_RESULT([no additional lib required])
2301 ac_cv_func_clock_gettime="yes"
2304 if test -z "$curl_cv_save_LIBS"; then
2305 LIBS="$curl_cv_gclk_LIBS"
2307 LIBS="$curl_cv_gclk_LIBS $curl_cv_save_LIBS"
2309 AC_MSG_RESULT([$curl_cv_gclk_LIBS])
2310 ac_cv_func_clock_gettime="yes"
2314 dnl only do runtime verification when not cross-compiling
2315 if test "x$cross_compiling" != "xyes" &&
2316 test "$ac_cv_func_clock_gettime" = "yes"; then
2317 AC_MSG_CHECKING([if monotonic clock_gettime works])
2320 #ifdef HAVE_SYS_TYPES_H
2321 #include <sys/types.h>
2323 #ifdef HAVE_SYS_TIME_H
2324 #include <sys/time.h>
2325 #ifdef TIME_WITH_SYS_TIME
2335 if (0 == clock_gettime(CLOCK_MONOTONIC, &ts))
2341 AC_MSG_RESULT([yes])
2344 AC_MSG_WARN([HAVE_CLOCK_GETTIME_MONOTONIC will not be defined])
2345 ac_cv_func_clock_gettime="no"
2346 LIBS="$curl_cv_save_LIBS"
2350 case "$ac_cv_func_clock_gettime" in
2352 AC_DEFINE_UNQUOTED(HAVE_CLOCK_GETTIME_MONOTONIC, 1,
2353 [Define to 1 if you have the clock_gettime function and monotonic timer.])
2362 dnl CURL_CHECK_FUNC_SELECT
2363 dnl -------------------------------------------------
2364 dnl Test if the socket select() function is available,
2365 dnl and check its return type and the types of its
2366 dnl arguments. If the function succeeds HAVE_SELECT
2367 dnl will be defined, defining the types of the
2368 dnl arguments in SELECT_TYPE_ARG1, SELECT_TYPE_ARG234
2369 dnl and SELECT_TYPE_ARG5, defining the type of the
2370 dnl function return value in SELECT_TYPE_RETV, and
2371 dnl also defining the type qualifier of fifth argument
2372 dnl in SELECT_QUAL_ARG5.
2374 AC_DEFUN([CURL_CHECK_FUNC_SELECT], [
2375 AC_REQUIRE([CURL_CHECK_STRUCT_TIMEVAL])dnl
2376 AC_CHECK_HEADERS(sys/select.h sys/socket.h)
2378 AC_MSG_CHECKING([for select])
2382 #ifdef HAVE_WINDOWS_H
2383 #ifndef WIN32_LEAN_AND_MEAN
2384 #define WIN32_LEAN_AND_MEAN
2386 #include <windows.h>
2387 #ifdef HAVE_WINSOCK2_H
2388 #include <winsock2.h>
2390 #ifdef HAVE_WINSOCK_H
2391 #include <winsock.h>
2395 #ifdef HAVE_SYS_TYPES_H
2396 #include <sys/types.h>
2398 #ifdef HAVE_SYS_TIME_H
2399 #include <sys/time.h>
2400 #ifdef TIME_WITH_SYS_TIME
2408 #ifndef HAVE_WINDOWS_H
2409 #ifdef HAVE_SYS_SELECT_H
2410 #include <sys/select.h>
2412 #ifdef HAVE_SYS_SOCKET_H
2413 #include <sys/socket.h>
2417 select(0, 0, 0, 0, 0);
2420 AC_MSG_RESULT([yes])
2421 curl_cv_select="yes"
2427 if test "$curl_cv_select" = "yes"; then
2428 AC_CACHE_CHECK([types of args and return type for select],
2429 [curl_cv_func_select_args], [
2430 curl_cv_func_select_args="unknown"
2431 for sel_retv in 'int' 'ssize_t'; do
2432 for sel_arg1 in 'int' 'ssize_t' 'size_t' 'unsigned long int' 'unsigned int'; do
2433 for sel_arg234 in 'fd_set *' 'int *' 'void *'; do
2434 for sel_arg5 in 'struct timeval *' 'const struct timeval *'; do
2435 if test "$curl_cv_func_select_args" = "unknown"; then
2439 #ifdef HAVE_WINDOWS_H
2440 #ifndef WIN32_LEAN_AND_MEAN
2441 #define WIN32_LEAN_AND_MEAN
2443 #include <windows.h>
2444 #ifdef HAVE_WINSOCK2_H
2445 #include <winsock2.h>
2447 #ifdef HAVE_WINSOCK_H
2448 #include <winsock.h>
2451 #define SELECTCALLCONV PASCAL
2453 #ifdef HAVE_SYS_TYPES_H
2454 #include <sys/types.h>
2456 #ifdef HAVE_SYS_TIME_H
2457 #include <sys/time.h>
2458 #ifdef TIME_WITH_SYS_TIME
2466 #ifndef HAVE_WINDOWS_H
2467 #ifdef HAVE_SYS_SELECT_H
2468 #include <sys/select.h>
2470 #ifdef HAVE_SYS_SOCKET_H
2471 #include <sys/socket.h>
2473 #define SELECTCALLCONV
2475 #ifndef HAVE_STRUCT_TIMEVAL
2481 extern $sel_retv SELECTCALLCONV select($sel_arg1,
2491 $sel_retv res = select(nfds, rfds, wfds, efds, 0);
2494 curl_cv_func_select_args="$sel_arg1,$sel_arg234,$sel_arg5,$sel_retv"
2502 if test "$curl_cv_func_select_args" = "unknown"; then
2503 AC_MSG_WARN([Cannot find proper types to use for select args])
2504 AC_MSG_WARN([HAVE_SELECT will not be defined])
2506 select_prev_IFS=$IFS; IFS=','
2507 set dummy `echo "$curl_cv_func_select_args" | sed 's/\*/\*/g'`
2508 IFS=$select_prev_IFS
2511 sel_qual_type_arg5=$[3]
2513 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG1, $[1],
2514 [Define to the type of arg 1 for select.])
2515 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG234, $[2],
2516 [Define to the type of args 2, 3 and 4 for select.])
2517 AC_DEFINE_UNQUOTED(SELECT_TYPE_RETV, $[4],
2518 [Define to the function return type for select.])
2522 case $prev_sh_opts in
2530 case "$sel_qual_type_arg5" in
2533 sel_type_arg5=`echo $sel_qual_type_arg5 | sed 's/^const //'`
2537 sel_type_arg5=$sel_qual_type_arg5
2541 AC_DEFINE_UNQUOTED(SELECT_QUAL_ARG5, $sel_qual_arg5,
2542 [Define to the type qualifier of arg 5 for select.])
2543 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG5, $sel_type_arg5,
2544 [Define to the type of arg 5 for select.])
2546 case $prev_sh_opts in
2554 AC_DEFINE_UNQUOTED(HAVE_SELECT, 1,
2555 [Define to 1 if you have the select function.])
2556 ac_cv_func_select="yes"
2562 dnl ************************************************************
2563 dnl check for working getaddrinfo() that works with AI_NUMERICHOST
2565 AC_DEFUN([CURL_CHECK_WORKING_GETADDRINFO],[
2566 AC_CACHE_CHECK(for working getaddrinfo, ac_cv_working_getaddrinfo,[
2569 #include <sys/types.h>
2570 #include <sys/socket.h>
2574 struct addrinfo hints, *ai;
2577 memset(&hints, 0, sizeof(hints));
2578 hints.ai_flags = AI_NUMERICHOST;
2579 hints.ai_family = AF_UNSPEC;
2580 hints.ai_socktype = SOCK_STREAM;
2581 error = getaddrinfo("127.0.0.1", "8080", &hints, &ai);
2588 ac_cv_working_getaddrinfo="yes"
2590 ac_cv_working_getaddrinfo="no"
2592 ac_cv_working_getaddrinfo="yes"
2594 if test "$ac_cv_working_getaddrinfo" = "yes"; then
2595 AC_DEFINE(HAVE_GETADDRINFO, 1, [Define if getaddrinfo exists and works])
2596 AC_DEFINE(ENABLE_IPV6, 1, [Define if you want to enable IPv6 support])
2599 AC_SUBST(IPV6_ENABLED)
2604 AC_DEFUN([CURL_CHECK_INET_NTOA_R],
2606 dnl determine if function definition for inet_ntoa_r exists.
2607 AC_CHECK_FUNCS(inet_ntoa_r,[
2608 AC_MSG_CHECKING(whether inet_ntoa_r is declared)
2609 AC_EGREP_CPP(inet_ntoa_r,[
2611 #include <arpa/inet.h>],[
2612 AC_DEFINE(HAVE_INET_NTOA_R_DECL, 1, [inet_ntoa_r() is declared])
2613 AC_MSG_RESULT(yes)],[
2615 AC_MSG_CHECKING(whether inet_ntoa_r with -D_REENTRANT is declared)
2616 AC_EGREP_CPP(inet_ntoa_r,[
2619 #include <arpa/inet.h>],[
2620 AC_DEFINE(HAVE_INET_NTOA_R_DECL, 1, [inet_ntoa_r() is declared])
2621 AC_MSG_RESULT(yes)],
2622 AC_MSG_RESULT(no))])])
2626 dnl CURL_CHECK_GETHOSTBYADDR_R
2627 dnl -------------------------------------------------
2628 dnl check number of arguments for gethostbyaddr_r, it
2629 dnl might take either 5, 7, or 8 arguments.
2631 AC_DEFUN([CURL_CHECK_GETHOSTBYADDR_R], [
2633 AC_MSG_CHECKING([for gethostbyaddr_r])
2635 AC_LANG_FUNC_LINK_TRY([gethostbyaddr_r])
2637 AC_MSG_RESULT([yes])
2638 tmp_cv_gethostbyaddr_r="yes"
2641 tmp_cv_gethostbyaddr_r="no"
2644 if test "$tmp_cv_gethostbyaddr_r" != "yes"; then
2645 AC_MSG_CHECKING([deeper for gethostbyaddr_r])
2652 AC_MSG_RESULT([yes])
2653 tmp_cv_gethostbyaddr_r="yes"
2655 AC_MSG_RESULT([but still no])
2656 tmp_cv_gethostbyaddr_r="no"
2660 if test "$tmp_cv_gethostbyaddr_r" = "yes"; then
2662 ac_cv_gethostbyaddr_r_args="unknown"
2664 AC_MSG_CHECKING([if gethostbyaddr_r takes 5 arguments])
2668 #include <sys/types.h>
2675 struct hostent_data hdata;
2677 rc = gethostbyaddr_r(address, length, type, &h, &hdata);
2680 AC_MSG_RESULT([yes])
2681 AC_DEFINE(HAVE_GETHOSTBYADDR_R_5, 1, [gethostbyaddr_r() takes 5 args])
2682 ac_cv_gethostbyaddr_r_args="5"
2687 if test "$ac_cv_gethostbyaddr_r_args" = "unknown"; then
2688 AC_MSG_CHECKING([if gethostbyaddr_r with -D_REENTRANT takes 5 arguments])
2693 #include <sys/types.h>
2700 struct hostent_data hdata;
2702 rc = gethostbyaddr_r(address, length, type, &h, &hdata);
2705 AC_MSG_RESULT([yes])
2706 AC_DEFINE(HAVE_GETHOSTBYADDR_R_5, 1, [gethostbyaddr_r() takes 5 args])
2707 ac_cv_gethostbyaddr_r_args="5"
2713 if test "$ac_cv_gethostbyaddr_r_args" = "unknown"; then
2714 AC_MSG_CHECKING([if gethostbyaddr_r takes 7 arguments])
2718 #include <sys/types.h>
2727 struct hostent * hp;
2728 hp = gethostbyaddr_r(address, length, type, &h,
2729 buffer, 8192, &h_errnop);
2732 AC_MSG_RESULT([yes])
2733 AC_DEFINE(HAVE_GETHOSTBYADDR_R_7, 1, [gethostbyaddr_r() takes 7 args])
2734 ac_cv_gethostbyaddr_r_args="7"
2740 if test "$ac_cv_gethostbyaddr_r_args" = "unknown"; then
2741 AC_MSG_CHECKING([if gethostbyaddr_r with -D_REENTRANT takes 7 arguments])
2746 #include <sys/types.h>
2755 struct hostent * hp;
2756 hp = gethostbyaddr_r(address, length, type, &h,
2757 buffer, 8192, &h_errnop);
2760 AC_MSG_RESULT([yes])
2761 AC_DEFINE(HAVE_GETHOSTBYADDR_R_7, 1, [gethostbyaddr_r() takes 7 args])
2762 ac_cv_gethostbyaddr_r_args="7"
2768 if test "$ac_cv_gethostbyaddr_r_args" = "unknown"; then
2769 AC_MSG_CHECKING([if gethostbyaddr_r takes 8 arguments])
2773 #include <sys/types.h>
2782 struct hostent * hp;
2784 rc = gethostbyaddr_r(address, length, type, &h,
2785 buffer, 8192, &hp, &h_errnop);
2788 AC_MSG_RESULT([yes])
2789 AC_DEFINE(HAVE_GETHOSTBYADDR_R_8, 1, [gethostbyaddr_r() takes 8 args])
2790 ac_cv_gethostbyaddr_r_args="8"
2796 if test "$ac_cv_gethostbyaddr_r_args" = "unknown"; then
2797 AC_MSG_CHECKING([if gethostbyaddr_r with -D_REENTRANT takes 8 arguments])
2802 #include <sys/types.h>
2811 struct hostent * hp;
2813 rc = gethostbyaddr_r(address, length, type, &h,
2814 buffer, 8192, &hp, &h_errnop);
2817 AC_MSG_RESULT([yes])
2818 AC_DEFINE(HAVE_GETHOSTBYADDR_R_8, 1, [gethostbyaddr_r() takes 8 args])
2819 ac_cv_gethostbyaddr_r_args="8"
2825 if test "$ac_cv_gethostbyaddr_r_args" = "unknown"; then
2826 AC_MSG_WARN([Cannot find out how to use gethostbyaddr_r])
2827 AC_MSG_WARN([HAVE_GETHOSTBYADDR_R will not be defined])
2828 ac_cv_func_gethostbyaddr_r="no"
2830 AC_DEFINE_UNQUOTED(HAVE_GETHOSTBYADDR_R, 1,
2831 [Define to 1 if you have the gethostbyaddr_r function.])
2832 ac_cv_func_gethostbyaddr_r="yes"
2836 ac_cv_func_gethostbyaddr_r="no"
2841 dnl CURL_CHECK_GETHOSTBYNAME_R
2842 dnl -------------------------------------------------
2843 dnl check number of arguments for gethostbyname_r, it
2844 dnl might take either 3, 5, or 6 arguments.
2846 AC_DEFUN([CURL_CHECK_GETHOSTBYNAME_R], [
2848 AC_MSG_CHECKING([for gethostbyname_r])
2850 AC_LANG_FUNC_LINK_TRY([gethostbyname_r])
2852 AC_MSG_RESULT([yes])
2853 tmp_cv_gethostbyname_r="yes"
2856 tmp_cv_gethostbyname_r="no"
2859 if test "$tmp_cv_gethostbyname_r" != "yes"; then
2860 AC_MSG_CHECKING([deeper for gethostbyname_r])
2867 AC_MSG_RESULT([yes])
2868 tmp_cv_gethostbyname_r="yes"
2870 AC_MSG_RESULT([but still no])
2871 tmp_cv_gethostbyname_r="no"
2875 if test "$tmp_cv_gethostbyname_r" = "yes"; then
2877 ac_cv_gethostbyname_r_args="unknown"
2879 AC_MSG_CHECKING([if gethostbyname_r takes 3 arguments])
2884 #include <sys/types.h>
2887 #define NULL (void *)0
2889 gethostbyname_r(const char *, struct hostent *,
2890 struct hostent_data *);
2892 struct hostent_data data;
2893 gethostbyname_r(NULL, NULL, NULL);
2896 AC_MSG_RESULT([yes])
2897 AC_DEFINE(HAVE_GETHOSTBYNAME_R_3, 1, [gethostbyname_r() takes 3 args])
2898 ac_cv_gethostbyname_r_args="3"
2903 if test "$ac_cv_gethostbyname_r_args" = "unknown"; then
2904 AC_MSG_CHECKING([if gethostbyname_r with -D_REENTRANT takes 3 arguments])
2910 #include <sys/types.h>
2913 #define NULL (void *)0
2915 gethostbyname_r(const char *, struct hostent *,
2916 struct hostent_data *);
2918 struct hostent_data data;
2919 gethostbyname_r(NULL, NULL, NULL);
2922 AC_MSG_RESULT([yes])
2923 AC_DEFINE(HAVE_GETHOSTBYNAME_R_3, 1, [gethostbyname_r() takes 3 args])
2924 ac_cv_gethostbyname_r_args="3"
2930 if test "$ac_cv_gethostbyname_r_args" = "unknown"; then
2931 AC_MSG_CHECKING([if gethostbyname_r takes 5 arguments])
2935 #include <sys/types.h>
2938 #define NULL (void *)0
2940 gethostbyname_r(const char *, struct hostent *,
2941 char *, int, int *);
2943 gethostbyname_r(NULL, NULL, NULL, 0, NULL);
2946 AC_MSG_RESULT([yes])
2947 AC_DEFINE(HAVE_GETHOSTBYNAME_R_5, 1, [gethostbyname_r() takes 5 args])
2948 ac_cv_gethostbyname_r_args="5"
2954 if test "$ac_cv_gethostbyname_r_args" = "unknown"; then
2955 AC_MSG_CHECKING([if gethostbyname_r with -D_REENTRANT takes 5 arguments])
2960 #include <sys/types.h>
2963 #define NULL (void *)0
2965 gethostbyname_r(const char *, struct hostent *,
2966 char *, int, int *);
2968 gethostbyname_r(NULL, NULL, NULL, 0, NULL);
2971 AC_MSG_RESULT([yes])
2972 AC_DEFINE(HAVE_GETHOSTBYNAME_R_5, 1, [gethostbyname_r() takes 5 args])
2973 ac_cv_gethostbyname_r_args="5"
2979 if test "$ac_cv_gethostbyname_r_args" = "unknown"; then
2980 AC_MSG_CHECKING([if gethostbyname_r takes 6 arguments])
2984 #include <sys/types.h>
2987 #define NULL (void *)0
2989 gethostbyname_r(const char *, struct hostent *,
2990 char *, size_t, struct hostent **, int *);
2992 gethostbyname_r(NULL, NULL, NULL, 0, NULL, NULL);
2995 AC_MSG_RESULT([yes])
2996 AC_DEFINE(HAVE_GETHOSTBYNAME_R_6, 1, [gethostbyname_r() takes 6 args])
2997 ac_cv_gethostbyname_r_args="6"
3003 if test "$ac_cv_gethostbyname_r_args" = "unknown"; then
3004 AC_MSG_CHECKING([if gethostbyname_r with -D_REENTRANT takes 6 arguments])
3009 #include <sys/types.h>
3012 #define NULL (void *)0
3014 gethostbyname_r(const char *, struct hostent *,
3015 char *, size_t, struct hostent **, int *);
3017 gethostbyname_r(NULL, NULL, NULL, 0, NULL, NULL);
3020 AC_MSG_RESULT([yes])
3021 AC_DEFINE(HAVE_GETHOSTBYNAME_R_6, 1, [gethostbyname_r() takes 6 args])
3022 ac_cv_gethostbyname_r_args="6"
3028 if test "$ac_cv_gethostbyname_r_args" = "unknown"; then
3029 AC_MSG_WARN([Cannot find out how to use gethostbyname_r])
3030 AC_MSG_WARN([HAVE_GETHOSTBYNAME_R will not be defined])
3031 ac_cv_func_gethostbyname_r="no"
3033 AC_DEFINE_UNQUOTED(HAVE_GETHOSTBYNAME_R, 1,
3034 [Define to 1 if you have the gethostbyname_r function.])
3035 ac_cv_func_gethostbyname_r="yes"
3039 ac_cv_func_gethostbyname_r="no"
3044 dnl **********************************************************************
3045 dnl CURL_DETECT_ICC ([ACTION-IF-YES])
3047 dnl check if this is the Intel ICC compiler, and if so run the ACTION-IF-YES
3048 dnl sets the $ICC variable to "yes" or "no"
3049 dnl **********************************************************************
3050 AC_DEFUN([CURL_DETECT_ICC],
3053 AC_MSG_CHECKING([for icc in use])
3054 if test "$GCC" = "yes"; then
3055 dnl check if this is icc acting as gcc in disguise
3056 AC_EGREP_CPP([^__INTEL_COMPILER], [__INTEL_COMPILER],
3057 dnl action if the text is found, this it has not been replaced by the
3060 dnl the text was not found, it was replaced by the cpp
3062 AC_MSG_RESULT([yes])
3066 if test "$ICC" = "no"; then
3072 dnl We create a function for detecting which compiler we use and then set as
3073 dnl pendantic compiler options as possible for that particular compiler. The
3074 dnl options are only used for debug-builds.
3076 AC_DEFUN([CURL_CC_DEBUG_OPTS],
3078 if test "z$ICC" = "z"; then
3082 if test "$GCC" = "yes"; then
3084 dnl figure out gcc version!
3085 AC_MSG_CHECKING([gcc version])
3086 gccver=`$CC -dumpversion`
3087 num1=`echo $gccver | cut -d . -f1`
3088 num2=`echo $gccver | cut -d . -f2`
3089 gccnum=`(expr $num1 "*" 100 + $num2) 2>/dev/null`
3090 AC_MSG_RESULT($gccver)
3092 if test "$ICC" = "yes"; then
3093 dnl this is icc, not gcc.
3095 dnl ICC warnings we ignore:
3096 dnl * 269 warns on our "%Od" printf formatters for curl_off_t output:
3097 dnl "invalid format string conversion"
3098 dnl * 279 warns on static conditions in while expressions
3099 dnl * 981 warns on "operands are evaluated in unspecified order"
3100 dnl * 1418 "external definition with no prior declaration"
3101 dnl * 1419 warns on "external declaration in primary source file"
3102 dnl which we know and do on purpose.
3104 WARN="-wd279,269,981,1418,1419"
3107 if test "$gccnum" -gt "600"; then
3108 dnl icc 6.0 and older doesn't have the -Wall flag
3112 dnl this is a set of options we believe *ALL* gcc versions support:
3113 WARN="-W -Wall -Wwrite-strings -pedantic -Wpointer-arith -Wnested-externs -Winline -Wmissing-prototypes"
3115 dnl -Wcast-align is a bit too annoying on all gcc versions ;-)
3117 if test "$gccnum" -ge "207"; then
3118 dnl gcc 2.7 or later
3119 WARN="$WARN -Wmissing-declarations"
3122 if test "$gccnum" -gt "295"; then
3123 dnl only if the compiler is newer than 2.95 since we got lots of
3124 dnl "`_POSIX_C_SOURCE' is not defined" in system headers with
3125 dnl gcc 2.95.4 on FreeBSD 4.9!
3126 WARN="$WARN -Wundef -Wno-long-long -Wsign-compare -Wshadow -Wno-multichar"
3129 if test "$gccnum" -ge "296"; then
3130 dnl gcc 2.96 or later
3131 WARN="$WARN -Wfloat-equal"
3134 if test "$gccnum" -gt "296"; then
3135 dnl this option does not exist in 2.96
3136 WARN="$WARN -Wno-format-nonliteral"
3139 dnl -Wunreachable-code seems totally unreliable on my gcc 3.3.2 on
3140 dnl on i686-Linux as it gives us heaps with false positives.
3141 dnl Also, on gcc 4.0.X it is totally unbearable and complains all
3142 dnl over making it unusable for generic purposes. Let's not use it.
3144 if test "$gccnum" -ge "303"; then
3145 dnl gcc 3.3 and later
3146 WARN="$WARN -Wendif-labels -Wstrict-prototypes"
3149 if test "$gccnum" -ge "304"; then
3150 # try these on gcc 3.4
3151 WARN="$WARN -Wdeclaration-after-statement"
3154 for flag in $CPPFLAGS; do
3157 dnl Include path, provide a -isystem option for the same dir
3158 dnl to prevent warnings in those dirs. The -isystem was not very
3159 dnl reliable on earlier gcc versions.
3160 add=`echo $flag | sed 's/^-I/-isystem /g'`
3168 CFLAGS="$CFLAGS $WARN"
3170 AC_MSG_NOTICE([Added this set of compiler options: $WARN])
3174 AC_MSG_NOTICE([Added no extra compiler options])
3178 dnl strip off optimizer flags
3180 for flag in $CFLAGS; do
3183 dnl echo "cut off $flag"
3186 NEWFLAGS="$NEWFLAGS $flag"
3196 # This is only a temporary fix. This macro is here to replace the broken one
3197 # delivered by the automake project (including the 1.9.6 release). As soon as
3198 # they ship a working version we SHOULD remove this work-around.
3200 AC_DEFUN([AM_MISSING_HAS_RUN],
3201 [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
3202 test x"${MISSING+set}" = xset || MISSING="\${SHELL} \"$am_aux_dir/missing\""
3203 # Use eval to expand $SHELL
3204 if eval "$MISSING --run true"; then
3205 am_missing_run="$MISSING --run "
3208 AC_MSG_WARN([`missing' script is too old or missing])
3213 dnl CURL_VERIFY_RUNTIMELIBS
3214 dnl -------------------------------------------------
3215 dnl Verify that the shared libs found so far can be used when running
3216 dnl programs, since otherwise the situation will create odd configure errors
3217 dnl that are misleading people.
3219 dnl Make sure this test is run BEFORE the first test in the script that
3220 dnl runs anything, which at the time of this writing is the AC_CHECK_SIZEOF
3221 dnl macro. It must also run AFTER all lib-checking macros are complete.
3223 AC_DEFUN([CURL_VERIFY_RUNTIMELIBS], [
3225 dnl this test is of course not sensible if we are cross-compiling!
3226 if test "x$cross_compiling" != xyes; then
3228 dnl just run a program to verify that the libs checked for previous to this
3229 dnl point also is available run-time!
3230 AC_MSG_CHECKING([run-time libs availability])
3237 AC_MSG_RESULT([fine]),
3238 AC_MSG_RESULT([failed])
3239 AC_MSG_ERROR([one or more libs available at link-time are not available run-time. Libs used at link-time: $LIBS])
3242 dnl if this test fails, configure has already stopped
3247 dnl CURL_CHECK_VARIADIC_MACROS
3248 dnl -------------------------------------------------
3249 dnl Check compiler support of variadic macros
3251 AC_DEFUN([CURL_CHECK_VARIADIC_MACROS], [
3252 AC_CACHE_CHECK([for compiler support of C99 variadic macro style],
3253 [curl_cv_variadic_macros_c99], [
3256 #define c99_vmacro3(first, ...) fun3(first, __VA_ARGS__)
3257 #define c99_vmacro2(first, ...) fun2(first, __VA_ARGS__)
3258 int fun3(int arg1, int arg2, int arg3);
3259 int fun2(int arg1, int arg2);
3260 int fun3(int arg1, int arg2, int arg3)
3261 { return arg1 + arg2 + arg3; }
3262 int fun2(int arg1, int arg2)
3263 { return arg1 + arg2; }
3265 int res3 = c99_vmacro3(1, 2, 3);
3266 int res2 = c99_vmacro2(1, 2);
3269 curl_cv_variadic_macros_c99="yes"
3271 curl_cv_variadic_macros_c99="no"
3274 case "$curl_cv_variadic_macros_c99" in
3276 AC_DEFINE_UNQUOTED(HAVE_VARIADIC_MACROS_C99, 1,
3277 [Define to 1 if compiler supports C99 variadic macro style.])
3280 AC_CACHE_CHECK([for compiler support of old gcc variadic macro style],
3281 [curl_cv_variadic_macros_gcc], [
3284 #define gcc_vmacro3(first, args...) fun3(first, args)
3285 #define gcc_vmacro2(first, args...) fun2(first, args)
3286 int fun3(int arg1, int arg2, int arg3);
3287 int fun2(int arg1, int arg2);
3288 int fun3(int arg1, int arg2, int arg3)
3289 { return arg1 + arg2 + arg3; }
3290 int fun2(int arg1, int arg2)
3291 { return arg1 + arg2; }
3293 int res3 = gcc_vmacro3(1, 2, 3);
3294 int res2 = gcc_vmacro2(1, 2);
3297 curl_cv_variadic_macros_gcc="yes"
3299 curl_cv_variadic_macros_gcc="no"
3302 case "$curl_cv_variadic_macros_gcc" in
3304 AC_DEFINE_UNQUOTED(HAVE_VARIADIC_MACROS_GCC, 1,
3305 [Define to 1 if compiler supports old gcc variadic macro style.])
3311 dnl CURL_CHECK_CA_BUNDLE
3312 dnl -------------------------------------------------
3313 dnl Check if a default ca-bundle should be used
3315 dnl regarding the paths this will scan:
3316 dnl /etc/ssl/certs/ca-certificates.crt Debian systems
3317 dnl /etc/pki/tls/certs/ca-bundle.crt Redhat and Mandriva
3318 dnl /usr/share/ssl/certs/ca-bundle.crt old(er) Redhat
3319 dnl /usr/local/share/certs/ca-root.crt FreeBSD
3320 dnl /etc/ssl/certs/ (ca path) SUSE
3322 AC_DEFUN([CURL_CHECK_CA_BUNDLE], [
3324 AC_MSG_CHECKING([default CA cert bundle/path])
3326 AC_ARG_WITH(ca-bundle,
3327 AC_HELP_STRING([--with-ca-bundle=FILE], [File name to use as CA bundle])
3328 AC_HELP_STRING([--without-ca-bundle], [Don't use a default CA bundle]),
3331 if test "x$want_ca" = "xyes"; then
3332 AC_MSG_ERROR([--with-ca-bundle=FILE requires a path to the CA bundle])
3335 [ want_ca="unset" ])
3336 AC_ARG_WITH(ca-path,
3337 AC_HELP_STRING([--with-ca-path=DIRECTORY], [Directory to use as CA path])
3338 AC_HELP_STRING([--without-ca-path], [Don't use a default CA path]),
3340 want_capath="$withval"
3341 if test "x$want_capath" = "xyes"; then
3342 AC_MSG_ERROR([--with-ca-path=DIRECTORY requires a path to the CA path directory])
3345 [ want_capath="unset"])
3347 if test "x$want_ca" != "xno" -a "x$want_ca" != "xunset" -a \
3348 "x$want_capath" != "xno" -a "x$want_capath" != "xunset"; then
3350 AC_MSG_ERROR([Can't specify both --with-ca-bundle and --with-ca-path.])
3351 elif test "x$want_ca" != "xno" -a "x$want_ca" != "xunset"; then
3352 dnl --with-ca-bundle given
3355 elif test "x$want_capath" != "xno" -a "x$want_capath" != "xunset"; then
3356 dnl --with-ca-path given
3357 if test "x$OPENSSL_ENABLED" != "x1"; then
3358 AC_MSG_ERROR([--with-ca-path only works with openSSL])
3360 capath="$want_capath"
3363 dnl neither of --with-ca-* given
3364 dnl first try autodetecting a CA bundle , then a CA path
3365 dnl both autodetections can be skipped by --without-ca-*
3368 if test "x$want_ca" = "xunset"; then
3369 dnl the path we previously would have installed the curl ca bundle
3370 dnl to, and thus we now check for an already existing cert in that place
3371 dnl in case we find no other
3372 if test "x$prefix" != xNONE; then
3373 cac="${prefix}/share/curl/curl-ca-bundle.crt"
3375 cac="$ac_default_prefix/share/curl/curl-ca-bundle.crt"
3378 for a in /etc/ssl/certs/ca-certificates.crt \
3379 /etc/pki/tls/certs/ca-bundle.crt \
3380 /usr/share/ssl/certs/ca-bundle.crt \
3381 /usr/local/share/certs/ca-root.crt \
3383 if test -f "$a"; then
3389 if test "x$want_capath" = "xunset" -a "x$ca" = "xno" -a \
3390 "x$OPENSSL_ENABLED" = "x1"; then
3391 for a in /etc/ssl/certs/; do
3392 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
3402 if test "x$ca" != "xno"; then
3403 CURL_CA_BUNDLE='"'$ca'"'
3404 AC_DEFINE_UNQUOTED(CURL_CA_BUNDLE, "$ca", [Location of default ca bundle])
3405 AC_SUBST(CURL_CA_BUNDLE)
3406 AC_MSG_RESULT([$ca])
3407 elif test "x$capath" != "xno"; then
3408 CURL_CA_PATH="\"$capath\""
3409 AC_DEFINE_UNQUOTED(CURL_CA_PATH, "$capath", [Location of default ca path])
3410 AC_MSG_RESULT([$capath (capath)])
3417 dnl CURL_DEFINE_UNQUOTED (VARIABLE, [VALUE])
3418 dnl -------------------------------------------------
3419 dnl Like AC_DEFINE_UNQUOTED this macro will define a C preprocessor
3420 dnl symbol that can be further used in custom template configuration
3421 dnl files. This macro, unlike AC_DEFINE_UNQUOTED, does not use a third
3422 dnl argument for the description. Symbol definitions done with this
3423 dnl macro are intended to be exclusively used in handcrafted *.h.in
3424 dnl template files. Contrary to what AC_DEFINE_UNQUOTED does, this one
3425 dnl prevents autoheader generation and insertion of symbol template
3426 dnl stub and definition into the first configuration header file. Do
3427 dnl not use this macro as a replacement for AC_DEFINE_UNQUOTED, each
3428 dnl one serves different functional needs.
3430 AC_DEFUN([CURL_DEFINE_UNQUOTED], [
3431 cat >>confdefs.h <<_EOF
3432 [@%:@define] $1 ifelse($#, 2, [$2], 1)
3437 dnl CURL_INCLUDES_INTTYPES
3438 dnl -------------------------------------------------
3439 dnl Set up variable with list of headers that must be
3440 dnl included when inttypes.h is to be included.
3442 AC_DEFUN([CURL_INCLUDES_INTTYPES], [
3443 curl_includes_inttypes="\
3444 /* includes start */
3445 #ifdef HAVE_SYS_TYPES_H
3446 # include <sys/types.h>
3448 #ifdef HAVE_STDINT_H
3449 # include <stdint.h>
3451 #ifdef HAVE_INTTYPES_H
3452 # include <inttypes.h>
3456 sys/types.h stdint.h inttypes.h,
3457 [], [], [$curl_includes_inttypes])
3461 dnl CURL_CONFIGURE_LONG
3462 dnl -------------------------------------------------
3463 dnl Find out the size of long as reported by sizeof() and define
3464 dnl CURL_SIZEOF_LONG as appropriate to be used in template file
3465 dnl include/curl/curlbuild.h.in to properly configure the library.
3466 dnl The size of long is a build time characteristic and as such
3467 dnl must be recorded in curlbuild.h
3469 AC_DEFUN([CURL_CONFIGURE_LONG], [
3470 if test -z "$ac_cv_sizeof_long" ||
3471 test "$ac_cv_sizeof_long" -eq "0"; then
3472 AC_MSG_ERROR([cannot find out size of long.])
3474 CURL_DEFINE_UNQUOTED([CURL_SIZEOF_LONG], [$ac_cv_sizeof_long])
3478 dnl DO_CURL_OFF_T_CHECK (TYPE, SIZE)
3479 dnl -------------------------------------------------
3480 dnl Internal macro for CURL_CONFIGURE_CURL_OFF_T
3482 AC_DEFUN([DO_CURL_OFF_T_CHECK], [
3483 AC_REQUIRE([CURL_INCLUDES_INTTYPES])dnl
3484 if test "$curl_typeof_curl_off_t" = "unknown" && test ! -z "$1"; then
3488 case AS_TR_SH([$1]) in
3490 tmp_includes="$curl_includes_inttypes"
3491 tmp_source="char f@<:@@:>@ = PRId64;"
3495 tmp_includes="$curl_includes_inttypes"
3496 tmp_source="char f@<:@@:>@ = PRId32;"
3500 tmp_includes="$curl_includes_inttypes"
3501 tmp_source="char f@<:@@:>@ = PRId16;"
3508 typedef $1 curl_off_t;
3509 typedef char dummy_arr[sizeof(curl_off_t) == $2 ? 1 : -1];
3515 if test -z "$tmp_fmt"; then
3516 curl_typeof_curl_off_t="$1"
3517 curl_sizeof_curl_off_t="$2"
3519 CURL_CHECK_DEF([$tmp_fmt], [$curl_includes_inttypes], [silent])
3520 AS_VAR_PUSHDEF([tmp_HaveFmtDef], [curl_cv_have_def_$tmp_fmt])dnl
3521 AS_VAR_PUSHDEF([tmp_FmtDef], [curl_cv_def_$tmp_fmt])dnl
3522 if test AS_VAR_GET(tmp_HaveFmtDef) = "yes"; then
3523 curl_format_curl_off_t=AS_VAR_GET(tmp_FmtDef)
3524 curl_typeof_curl_off_t="$1"
3525 curl_sizeof_curl_off_t="$2"
3527 AS_VAR_POPDEF([tmp_FmtDef])dnl
3528 AS_VAR_POPDEF([tmp_HaveFmtDef])dnl
3535 dnl DO_CURL_OFF_T_SUFFIX_CHECK (TYPE)
3536 dnl -------------------------------------------------
3537 dnl Internal macro for CURL_CONFIGURE_CURL_OFF_T
3539 AC_DEFUN([DO_CURL_OFF_T_SUFFIX_CHECK], [
3540 AC_REQUIRE([CURL_INCLUDES_INTTYPES])dnl
3541 AC_MSG_CHECKING([constant suffix string for curl_off_t])
3543 curl_suffix_curl_off_t="unknown"
3544 curl_suffix_curl_off_tu="unknown"
3546 case AS_TR_SH([$1]) in
3547 long_long | __longlong | __longlong_t)
3557 tst_suffixes="LL:i64::"
3560 tst_suffixes="L:i32::"
3563 tst_suffixes="L:i16::"
3566 AC_MSG_ERROR([unexpected data type $1])
3570 old_IFS=$IFS; IFS=':'
3571 for tmp_ssuf in $tst_suffixes ; do
3573 if test "x$curl_suffix_curl_off_t" = "xunknown"; then
3576 tmp_usuf="u$tmp_ssuf"
3579 tmp_usuf="U$tmp_ssuf"
3587 $curl_includes_inttypes
3598 curl_suffix_curl_off_t="$tmp_ssuf"
3599 curl_suffix_curl_off_tu="$tmp_usuf"
3605 if test "x$curl_suffix_curl_off_t" = "xunknown"; then
3606 AC_MSG_ERROR([cannot find constant suffix string for curl_off_t.])
3608 AC_MSG_RESULT([$curl_suffix_curl_off_t])
3609 AC_MSG_CHECKING([constant suffix string for unsigned curl_off_t])
3610 AC_MSG_RESULT([$curl_suffix_curl_off_tu])
3616 dnl CURL_CONFIGURE_CURL_OFF_T
3617 dnl -------------------------------------------------
3618 dnl Find out suitable curl_off_t data type definition and associated
3619 dnl items, and make the appropriate definitions used in template file
3620 dnl include/curl/curlbuild.h.in to properly configure the library.
3622 AC_DEFUN([CURL_CONFIGURE_CURL_OFF_T], [
3623 AC_REQUIRE([CURL_INCLUDES_INTTYPES])dnl
3625 AC_BEFORE([$0],[AC_SYS_LARGEFILE])dnl
3626 AC_BEFORE([$0],[CURL_CONFIGURE_REENTRANT])dnl
3627 AC_BEFORE([$0],[CURL_CHECK_AIX_ALL_SOURCE])dnl
3629 if test -z "$SED"; then
3630 AC_MSG_ERROR([SED not set. Cannot continue without SED being set.])
3633 AC_CHECK_SIZEOF(long)
3634 AC_CHECK_SIZEOF(void*)
3636 if test -z "$ac_cv_sizeof_long" ||
3637 test "$ac_cv_sizeof_long" -eq "0"; then
3638 AC_MSG_ERROR([cannot find out size of long.])
3640 if test -z "$ac_cv_sizeof_voidp" ||
3641 test "$ac_cv_sizeof_voidp" -eq "0"; then
3642 AC_MSG_ERROR([cannot find out size of void*.])
3649 if test "$ac_cv_sizeof_long" -eq "8" &&
3650 test "$ac_cv_sizeof_voidp" -ge "8"; then
3652 elif test "$ac_cv_sizeof_long" -eq "4" &&
3653 test "$ac_cv_sizeof_voidp" -ge "4"; then
3655 elif test "$ac_cv_sizeof_long" -eq "2" &&
3656 test "$ac_cv_sizeof_voidp" -ge "2"; then
3660 dnl DO_CURL_OFF_T_CHECK results are stored in next 3 vars
3662 curl_typeof_curl_off_t="unknown"
3663 curl_sizeof_curl_off_t="unknown"
3664 curl_format_curl_off_t="unknown"
3665 curl_format_curl_off_tu="unknown"
3667 if test "$curl_typeof_curl_off_t" = "unknown"; then
3668 AC_MSG_CHECKING([for 64-bit curl_off_t data type])
3676 DO_CURL_OFF_T_CHECK([$t8], [8])
3678 AC_MSG_RESULT([$curl_typeof_curl_off_t])
3680 if test "$curl_typeof_curl_off_t" = "unknown"; then
3681 AC_MSG_CHECKING([for 32-bit curl_off_t data type])
3687 DO_CURL_OFF_T_CHECK([$t4], [4])
3689 AC_MSG_RESULT([$curl_typeof_curl_off_t])
3691 if test "$curl_typeof_curl_off_t" = "unknown"; then
3692 AC_MSG_CHECKING([for 16-bit curl_off_t data type])
3698 DO_CURL_OFF_T_CHECK([$t2], [2])
3700 AC_MSG_RESULT([$curl_typeof_curl_off_t])
3702 if test "$curl_typeof_curl_off_t" = "unknown"; then
3703 AC_MSG_ERROR([cannot find data type for curl_off_t.])
3706 AC_MSG_CHECKING([size of curl_off_t])
3707 AC_MSG_RESULT([$curl_sizeof_curl_off_t])
3709 AC_MSG_CHECKING([formatting string directive for curl_off_t])
3710 if test "$curl_format_curl_off_t" != "unknown"; then
3711 x_pull_headers="yes"
3712 curl_format_curl_off_t=`echo "$curl_format_curl_off_t" | "$SED" 's/[["]]//g'`
3713 curl_format_curl_off_tu=`echo "$curl_format_curl_off_t" | "$SED" 's/i$/u/'`
3714 curl_format_curl_off_tu=`echo "$curl_format_curl_off_tu" | "$SED" 's/d$/u/'`
3715 curl_format_curl_off_tu=`echo "$curl_format_curl_off_tu" | "$SED" 's/D$/U/'`
3718 case AS_TR_SH([$curl_typeof_curl_off_t]) in
3719 long_long | __longlong | __longlong_t)
3720 curl_format_curl_off_t="lld"
3721 curl_format_curl_off_tu="llu"
3724 curl_format_curl_off_t="ld"
3725 curl_format_curl_off_tu="lu"
3728 curl_format_curl_off_t="d"
3729 curl_format_curl_off_tu="u"
3732 curl_format_curl_off_t="I64d"
3733 curl_format_curl_off_tu="I64u"
3736 curl_format_curl_off_t="I32d"
3737 curl_format_curl_off_tu="I32u"
3740 curl_format_curl_off_t="I16d"
3741 curl_format_curl_off_tu="I16u"
3744 AC_MSG_ERROR([cannot find print format string for curl_off_t.])
3748 AC_MSG_RESULT(["$curl_format_curl_off_t"])
3750 AC_MSG_CHECKING([formatting string directive for unsigned curl_off_t])
3751 AC_MSG_RESULT(["$curl_format_curl_off_tu"])
3753 DO_CURL_OFF_T_SUFFIX_CHECK([$curl_typeof_curl_off_t])
3755 if test "$x_pull_headers" = "yes"; then
3756 if test "x$ac_cv_header_sys_types_h" = "xyes"; then
3757 CURL_DEFINE_UNQUOTED([CURL_PULL_SYS_TYPES_H])
3759 if test "x$ac_cv_header_stdint_h" = "xyes"; then
3760 CURL_DEFINE_UNQUOTED([CURL_PULL_STDINT_H])
3762 if test "x$ac_cv_header_inttypes_h" = "xyes"; then
3763 CURL_DEFINE_UNQUOTED([CURL_PULL_INTTYPES_H])
3767 CURL_DEFINE_UNQUOTED([CURL_TYPEOF_CURL_OFF_T], [$curl_typeof_curl_off_t])
3768 CURL_DEFINE_UNQUOTED([CURL_FORMAT_CURL_OFF_T], ["$curl_format_curl_off_t"])
3769 CURL_DEFINE_UNQUOTED([CURL_FORMAT_CURL_OFF_TU], ["$curl_format_curl_off_tu"])
3770 CURL_DEFINE_UNQUOTED([CURL_FORMAT_OFF_T], ["%$curl_format_curl_off_t"])
3771 CURL_DEFINE_UNQUOTED([CURL_SIZEOF_CURL_OFF_T], [$curl_sizeof_curl_off_t])
3772 CURL_DEFINE_UNQUOTED([CURL_SUFFIX_CURL_OFF_T], [$curl_suffix_curl_off_t])
3773 CURL_DEFINE_UNQUOTED([CURL_SUFFIX_CURL_OFF_TU], [$curl_suffix_curl_off_tu])
3778 dnl CURL_CHECK_WIN32_LARGEFILE
3779 dnl -------------------------------------------------
3780 dnl Check if curl's WIN32 large file will be used
3782 AC_DEFUN([CURL_CHECK_WIN32_LARGEFILE], [
3783 AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
3784 AC_MSG_CHECKING([whether build target supports WIN32 file API])
3785 curl_win32_file_api="no"
3786 if test "$ac_cv_header_windows_h" = "yes"; then
3787 if test x"$enable_largefile" != "xno"; then
3791 #if !defined(_WIN32_WCE) && \
3792 (defined(__MINGW32__) || \
3793 (defined(_MSC_VER) && (defined(_WIN32) || defined(_WIN64))))
3796 WIN32 large file API not supported.
3800 curl_win32_file_api="win32_large_files"
3803 if test "$curl_win32_file_api" = "no"; then
3807 #if defined(_WIN32_WCE) || defined(__MINGW32__) || defined(_MSC_VER)
3810 WIN32 small file API not supported.
3814 curl_win32_file_api="win32_small_files"
3818 case "$curl_win32_file_api" in
3820 AC_MSG_RESULT([yes (large file enabled)])
3821 AC_DEFINE_UNQUOTED(USE_WIN32_LARGE_FILES, 1,
3822 [Define to 1 if you are building a Windows target with large file support.])
3825 AC_MSG_RESULT([yes (large file disabled)])
3826 AC_DEFINE_UNQUOTED(USE_WIN32_LARGE_FILES, 1,
3827 [Define to 1 if you are building a Windows target without large file support.])