1 #***************************************************************************
3 # Project ___| | | | _ \| |
5 # | (__| |_| | _ <| |___
6 # \___|\___/|_| \_\_____|
8 # Copyright (C) 1998 - 2009, 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_DEF (SYMBOL, [INCLUDES], [SILENT])
26 dnl -------------------------------------------------
27 dnl Use the C preprocessor to find out if the given object-style symbol
28 dnl is defined and get its expansion. This macro will not use default
29 dnl includes even if no INCLUDES argument is given. This macro will run
30 dnl silently when invoked with three arguments. If the expansion would
31 dnl result in a set of double-quoted strings the returned expansion will
32 dnl actually be a single double-quoted string concatenating all them.
34 AC_DEFUN([CURL_CHECK_DEF], [
35 AS_VAR_PUSHDEF([ac_HaveDef], [curl_cv_have_def_$1])dnl
36 AS_VAR_PUSHDEF([ac_Def], [curl_cv_def_$1])dnl
37 if test -z "$SED"; then
38 AC_MSG_ERROR([SED not set. Cannot continue without SED being set.])
40 if test -z "$GREP"; then
41 AC_MSG_ERROR([GREP not set. Cannot continue without GREP being set.])
43 ifelse($3,,[AC_MSG_CHECKING([for preprocessor definition of $1])])
53 tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \
54 "$GREP" CURL_DEF_TOKEN 2>/dev/null | \
55 "$SED" 's/.*CURL_DEF_TOKEN[[ ]]//' 2>/dev/null | \
56 "$SED" 's/[["]][[ ]]*[["]]//g' 2>/dev/null`
57 if test -z "$tmp_exp" || test "$tmp_exp" = "$1"; then
61 if test -z "$tmp_exp"; then
62 AS_VAR_SET(ac_HaveDef, no)
63 ifelse($3,,[AC_MSG_RESULT([no])])
65 AS_VAR_SET(ac_HaveDef, yes)
66 AS_VAR_SET(ac_Def, $tmp_exp)
67 ifelse($3,,[AC_MSG_RESULT([$tmp_exp])])
69 AS_VAR_POPDEF([ac_Def])dnl
70 AS_VAR_POPDEF([ac_HaveDef])dnl
74 dnl CURL_CHECK_DEF_CC (SYMBOL, [INCLUDES], [SILENT])
75 dnl -------------------------------------------------
76 dnl Use the C compiler to find out only if the given symbol is defined
77 dnl or not, this can not find out its expansion. This macro will not use
78 dnl default includes even if no INCLUDES argument is given. This macro
79 dnl will run silently when invoked with three arguments.
81 AC_DEFUN([CURL_CHECK_DEF_CC], [
82 AS_VAR_PUSHDEF([ac_HaveDef], [curl_cv_have_def_$1])dnl
83 ifelse($3,,[AC_MSG_CHECKING([for compiler definition of $1])])
92 force compilation error
97 tst_symbol_defined="yes"
99 tst_symbol_defined="no"
101 if test "$tst_symbol_defined" = "yes"; then
102 AS_VAR_SET(ac_HaveDef, yes)
103 ifelse($3,,[AC_MSG_RESULT([yes])])
105 AS_VAR_SET(ac_HaveDef, no)
106 ifelse($3,,[AC_MSG_RESULT([no])])
108 AS_VAR_POPDEF([ac_HaveDef])dnl
112 dnl CURL_CHECK_LIB_XNET
113 dnl -------------------------------------------------
114 dnl Verify if X/Open network library is required.
116 AC_DEFUN([CURL_CHECK_LIB_XNET], [
117 AC_MSG_CHECKING([if X/Open network library is required])
118 tst_lib_xnet_required="no"
123 #if defined(__hpux) && defined(_XOPEN_SOURCE) && defined(_XOPEN_SOURCE >= 600)
125 #elif defined(__hpux) && defined(_XOPEN_SOURCE_EXTENDED)
128 force compilation error
133 tst_lib_xnet_required="yes"
136 AC_MSG_RESULT([$tst_lib_xnet_required])
140 dnl CURL_CHECK_AIX_ALL_SOURCE
141 dnl -------------------------------------------------
142 dnl Provides a replacement of traditional AC_AIX with
143 dnl an uniform behaviour across all autoconf versions,
144 dnl and with our own placement rules.
146 AC_DEFUN([CURL_CHECK_AIX_ALL_SOURCE], [
147 AH_VERBATIM([_ALL_SOURCE],
148 [/* Define to 1 if OS is AIX. */
152 AC_BEFORE([$0], [AC_SYS_LARGEFILE])dnl
153 AC_BEFORE([$0], [CURL_CONFIGURE_REENTRANT])dnl
154 AC_MSG_CHECKING([if OS is AIX (to define _ALL_SOURCE)])
155 AC_EGREP_CPP([yes_this_is_aix],[
161 AC_DEFINE(_ALL_SOURCE)
168 dnl CURL_CHECK_HEADER_WINDOWS
169 dnl -------------------------------------------------
170 dnl Check for compilable and valid windows.h header
172 AC_DEFUN([CURL_CHECK_HEADER_WINDOWS], [
173 AC_CACHE_CHECK([for windows.h], [ac_cv_header_windows_h], [
177 #ifndef WIN32_LEAN_AND_MEAN
178 #define WIN32_LEAN_AND_MEAN
182 #if defined(__CYGWIN__) || defined(__CEGCC__)
183 HAVE_WINDOWS_H shall not be defined.
189 ac_cv_header_windows_h="yes"
191 ac_cv_header_windows_h="no"
194 case "$ac_cv_header_windows_h" in
196 AC_DEFINE_UNQUOTED(HAVE_WINDOWS_H, 1,
197 [Define to 1 if you have the windows.h header file.])
198 AC_DEFINE_UNQUOTED(WIN32_LEAN_AND_MEAN, 1,
199 [Define to avoid automatic inclusion of winsock.h])
205 dnl CURL_CHECK_NATIVE_WINDOWS
206 dnl -------------------------------------------------
207 dnl Check if building a native Windows target
209 AC_DEFUN([CURL_CHECK_NATIVE_WINDOWS], [
210 AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
211 AC_CACHE_CHECK([whether build target is a native Windows one], [ac_cv_native_windows], [
212 if test "$ac_cv_header_windows_h" = "no"; then
213 ac_cv_native_windows="no"
218 #if defined(__MINGW32__) || defined(__MINGW32CE__) || \
219 (defined(_MSC_VER) && (defined(_WIN32) || defined(_WIN64)))
222 Not a native Windows build target.
226 ac_cv_native_windows="yes"
228 ac_cv_native_windows="no"
232 case "$ac_cv_native_windows" in
234 AC_DEFINE_UNQUOTED(NATIVE_WINDOWS, 1,
235 [Define to 1 if you are building a native Windows target.])
241 dnl CURL_CHECK_HEADER_WINSOCK
242 dnl -------------------------------------------------
243 dnl Check for compilable and valid winsock.h header
245 AC_DEFUN([CURL_CHECK_HEADER_WINSOCK], [
246 AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
247 AC_CACHE_CHECK([for winsock.h], [ac_cv_header_winsock_h], [
251 #ifndef WIN32_LEAN_AND_MEAN
252 #define WIN32_LEAN_AND_MEAN
257 #if defined(__CYGWIN__) || defined(__CEGCC__)
258 HAVE_WINSOCK_H shall not be defined.
260 int dummy=WSACleanup();
264 ac_cv_header_winsock_h="yes"
266 ac_cv_header_winsock_h="no"
269 case "$ac_cv_header_winsock_h" in
271 AC_DEFINE_UNQUOTED(HAVE_WINSOCK_H, 1,
272 [Define to 1 if you have the winsock.h header file.])
278 dnl CURL_CHECK_HEADER_WINSOCK2
279 dnl -------------------------------------------------
280 dnl Check for compilable and valid winsock2.h header
282 AC_DEFUN([CURL_CHECK_HEADER_WINSOCK2], [
283 AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
284 AC_CACHE_CHECK([for winsock2.h], [ac_cv_header_winsock2_h], [
288 #ifndef WIN32_LEAN_AND_MEAN
289 #define WIN32_LEAN_AND_MEAN
292 #include <winsock2.h>
294 #if defined(__CYGWIN__) || defined(__CEGCC__) || defined(__MINGW32CE__)
295 HAVE_WINSOCK2_H shall not be defined.
297 int dummy=2*IPPROTO_ESP;
301 ac_cv_header_winsock2_h="yes"
303 ac_cv_header_winsock2_h="no"
306 case "$ac_cv_header_winsock2_h" in
308 AC_DEFINE_UNQUOTED(HAVE_WINSOCK2_H, 1,
309 [Define to 1 if you have the winsock2.h header file.])
315 dnl CURL_CHECK_HEADER_WS2TCPIP
316 dnl -------------------------------------------------
317 dnl Check for compilable and valid ws2tcpip.h header
319 AC_DEFUN([CURL_CHECK_HEADER_WS2TCPIP], [
320 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
321 AC_CACHE_CHECK([for ws2tcpip.h], [ac_cv_header_ws2tcpip_h], [
325 #ifndef WIN32_LEAN_AND_MEAN
326 #define WIN32_LEAN_AND_MEAN
329 #include <winsock2.h>
330 #include <ws2tcpip.h>
332 #if defined(__CYGWIN__) || defined(__CEGCC__) || defined(__MINGW32CE__)
333 HAVE_WS2TCPIP_H shall not be defined.
335 int dummy=2*IP_PKTINFO;
339 ac_cv_header_ws2tcpip_h="yes"
341 ac_cv_header_ws2tcpip_h="no"
344 case "$ac_cv_header_ws2tcpip_h" in
346 AC_DEFINE_UNQUOTED(HAVE_WS2TCPIP_H, 1,
347 [Define to 1 if you have the ws2tcpip.h header file.])
353 dnl CURL_CHECK_HEADER_WINLDAP
354 dnl -------------------------------------------------
355 dnl Check for compilable and valid winldap.h header
357 AC_DEFUN([CURL_CHECK_HEADER_WINLDAP], [
358 AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
359 AC_CACHE_CHECK([for winldap.h], [ac_cv_header_winldap_h], [
363 #ifdef HAVE_WINDOWS_H
364 #ifndef WIN32_LEAN_AND_MEAN
365 #define WIN32_LEAN_AND_MEAN
371 #if defined(__CYGWIN__) || defined(__CEGCC__)
372 HAVE_WINLDAP_H shall not be defined.
374 LDAP *ldp = ldap_init("dummy", LDAP_PORT);
375 ULONG res = ldap_unbind(ldp);
379 ac_cv_header_winldap_h="yes"
381 ac_cv_header_winldap_h="no"
384 case "$ac_cv_header_winldap_h" in
386 AC_DEFINE_UNQUOTED(HAVE_WINLDAP_H, 1,
387 [Define to 1 if you have the winldap.h header file.])
393 dnl CURL_CHECK_HEADER_WINBER
394 dnl -------------------------------------------------
395 dnl Check for compilable and valid winber.h header
397 AC_DEFUN([CURL_CHECK_HEADER_WINBER], [
398 AC_REQUIRE([CURL_CHECK_HEADER_WINLDAP])dnl
399 AC_CACHE_CHECK([for winber.h], [ac_cv_header_winber_h], [
403 #ifdef HAVE_WINDOWS_H
404 #ifndef WIN32_LEAN_AND_MEAN
405 #define WIN32_LEAN_AND_MEAN
412 #if defined(__CYGWIN__) || defined(__CEGCC__)
413 HAVE_WINBER_H shall not be defined.
416 BerElement *bep = ber_init(bvp);
421 ac_cv_header_winber_h="yes"
423 ac_cv_header_winber_h="no"
426 case "$ac_cv_header_winber_h" in
428 AC_DEFINE_UNQUOTED(HAVE_WINBER_H, 1,
429 [Define to 1 if you have the winber.h header file.])
435 dnl CURL_CHECK_HEADER_LBER
436 dnl -------------------------------------------------
437 dnl Check for compilable and valid lber.h header,
438 dnl and check if it is needed even with ldap.h
440 AC_DEFUN([CURL_CHECK_HEADER_LBER], [
441 AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
442 AC_CACHE_CHECK([for lber.h], [ac_cv_header_lber_h], [
446 #ifdef HAVE_WINDOWS_H
447 #ifndef WIN32_LEAN_AND_MEAN
448 #define WIN32_LEAN_AND_MEAN
452 #ifdef HAVE_SYS_TYPES_H
453 #include <sys/types.h>
457 #define NULL (void *)0
461 BerValue *bvp = NULL;
462 BerElement *bep = ber_init(bvp);
466 ac_cv_header_lber_h="yes"
468 ac_cv_header_lber_h="no"
471 if test "$ac_cv_header_lber_h" = "yes"; then
472 AC_DEFINE_UNQUOTED(HAVE_LBER_H, 1,
473 [Define to 1 if you have the lber.h header file.])
478 #ifdef HAVE_WINDOWS_H
479 #ifndef WIN32_LEAN_AND_MEAN
480 #define WIN32_LEAN_AND_MEAN
484 #ifdef HAVE_SYS_TYPES_H
485 #include <sys/types.h>
489 #define NULL (void *)0
491 #ifndef LDAP_DEPRECATED
492 #define LDAP_DEPRECATED 1
496 BerValue *bvp = NULL;
497 BerElement *bep = ber_init(bvp);
501 curl_cv_need_header_lber_h="no"
503 curl_cv_need_header_lber_h="yes"
506 case "$curl_cv_need_header_lber_h" in
508 AC_DEFINE_UNQUOTED(NEED_LBER_H, 1,
509 [Define to 1 if you need the lber.h header file even with ldap.h])
516 dnl CURL_CHECK_HEADER_LDAP
517 dnl -------------------------------------------------
518 dnl Check for compilable and valid ldap.h header
520 AC_DEFUN([CURL_CHECK_HEADER_LDAP], [
521 AC_REQUIRE([CURL_CHECK_HEADER_LBER])dnl
522 AC_CACHE_CHECK([for ldap.h], [ac_cv_header_ldap_h], [
526 #ifdef HAVE_WINDOWS_H
527 #ifndef WIN32_LEAN_AND_MEAN
528 #define WIN32_LEAN_AND_MEAN
532 #ifdef HAVE_SYS_TYPES_H
533 #include <sys/types.h>
536 #ifndef LDAP_DEPRECATED
537 #define LDAP_DEPRECATED 1
544 LDAP *ldp = ldap_init("dummy", LDAP_PORT);
545 int res = ldap_unbind(ldp);
548 ac_cv_header_ldap_h="yes"
550 ac_cv_header_ldap_h="no"
553 case "$ac_cv_header_ldap_h" in
555 AC_DEFINE_UNQUOTED(HAVE_LDAP_H, 1,
556 [Define to 1 if you have the ldap.h header file.])
562 dnl CURL_CHECK_HEADER_LDAP_SSL
563 dnl -------------------------------------------------
564 dnl Check for compilable and valid ldap_ssl.h header
566 AC_DEFUN([CURL_CHECK_HEADER_LDAP_SSL], [
567 AC_REQUIRE([CURL_CHECK_HEADER_LDAP])dnl
568 AC_CACHE_CHECK([for ldap_ssl.h], [ac_cv_header_ldap_ssl_h], [
572 #ifdef HAVE_WINDOWS_H
573 #ifndef WIN32_LEAN_AND_MEAN
574 #define WIN32_LEAN_AND_MEAN
578 #ifdef HAVE_SYS_TYPES_H
579 #include <sys/types.h>
582 #ifndef LDAP_DEPRECATED
583 #define LDAP_DEPRECATED 1
591 #include <ldap_ssl.h>
593 LDAP *ldp = ldapssl_init("dummy", LDAPS_PORT, 1);
596 ac_cv_header_ldap_ssl_h="yes"
598 ac_cv_header_ldap_ssl_h="no"
601 case "$ac_cv_header_ldap_ssl_h" in
603 AC_DEFINE_UNQUOTED(HAVE_LDAP_SSL_H, 1,
604 [Define to 1 if you have the ldap_ssl.h header file.])
610 dnl CURL_CHECK_HEADER_LDAPSSL
611 dnl -------------------------------------------------
612 dnl Check for compilable and valid ldapssl.h header
614 AC_DEFUN([CURL_CHECK_HEADER_LDAPSSL], [
615 AC_REQUIRE([CURL_CHECK_HEADER_LDAP])dnl
616 AC_CACHE_CHECK([for ldapssl.h], [ac_cv_header_ldapssl_h], [
620 #ifdef HAVE_WINDOWS_H
621 #ifndef WIN32_LEAN_AND_MEAN
622 #define WIN32_LEAN_AND_MEAN
626 #ifdef HAVE_SYS_TYPES_H
627 #include <sys/types.h>
631 #define NULL (void *)0
633 #ifndef LDAP_DEPRECATED
634 #define LDAP_DEPRECATED 1
644 char *cert_label = NULL;
645 LDAP *ldp = ldap_ssl_init("dummy", LDAPS_PORT, cert_label);
648 ac_cv_header_ldapssl_h="yes"
650 ac_cv_header_ldapssl_h="no"
653 case "$ac_cv_header_ldapssl_h" in
655 AC_DEFINE_UNQUOTED(HAVE_LDAPSSL_H, 1,
656 [Define to 1 if you have the ldapssl.h header file.])
662 dnl CURL_CHECK_LIBS_WINLDAP
663 dnl -------------------------------------------------
664 dnl Check for libraries needed for WINLDAP support,
665 dnl and prepended to LIBS any needed libraries.
666 dnl This macro can take an optional parameter with a
667 dnl white space separated list of libraries to check
668 dnl before the WINLDAP default ones.
670 AC_DEFUN([CURL_CHECK_LIBS_WINLDAP], [
671 AC_REQUIRE([CURL_CHECK_HEADER_WINBER])dnl
673 AC_MSG_CHECKING([for WINLDAP libraries])
687 if test -z "$u_libs"; then
690 u_libs="$u_libs $l_lib"
695 curl_cv_save_LIBS="$LIBS"
696 curl_cv_ldap_LIBS="unknown"
698 for x_nlibs in '' "$u_libs" \
700 if test "$curl_cv_ldap_LIBS" = "unknown"; then
701 if test -z "$x_nlibs"; then
702 LIBS="$curl_cv_save_LIBS"
704 LIBS="$x_nlibs $curl_cv_save_LIBS"
709 #ifdef HAVE_WINDOWS_H
710 #ifndef WIN32_LEAN_AND_MEAN
711 #define WIN32_LEAN_AND_MEAN
714 #ifdef HAVE_WINLDAP_H
723 BerElement *bep = ber_init(bvp);
724 LDAP *ldp = ldap_init("dummy", LDAP_PORT);
725 ULONG res = ldap_unbind(ldp);
729 curl_cv_ldap_LIBS="$x_nlibs"
734 LIBS="$curl_cv_save_LIBS"
736 case X-"$curl_cv_ldap_LIBS" in
738 AC_MSG_RESULT([cannot find WINLDAP libraries])
741 AC_MSG_RESULT([no additional lib required])
744 if test -z "$curl_cv_save_LIBS"; then
745 LIBS="$curl_cv_ldap_LIBS"
747 LIBS="$curl_cv_ldap_LIBS $curl_cv_save_LIBS"
749 AC_MSG_RESULT([$curl_cv_ldap_LIBS])
756 dnl CURL_CHECK_LIBS_LDAP
757 dnl -------------------------------------------------
758 dnl Check for libraries needed for LDAP support,
759 dnl and prepended to LIBS any needed libraries.
760 dnl This macro can take an optional parameter with a
761 dnl white space separated list of libraries to check
762 dnl before the default ones.
764 AC_DEFUN([CURL_CHECK_LIBS_LDAP], [
765 AC_REQUIRE([CURL_CHECK_HEADER_LDAP])dnl
767 AC_MSG_CHECKING([for LDAP libraries])
781 if test -z "$u_libs"; then
784 u_libs="$u_libs $l_lib"
789 curl_cv_save_LIBS="$LIBS"
790 curl_cv_ldap_LIBS="unknown"
792 for x_nlibs in '' "$u_libs" \
796 '-lldapssl -lldapx -lldapsdk' \
797 '-lldapsdk -lldapx -lldapssl' ; do
798 if test "$curl_cv_ldap_LIBS" = "unknown"; then
799 if test -z "$x_nlibs"; then
800 LIBS="$curl_cv_save_LIBS"
802 LIBS="$x_nlibs $curl_cv_save_LIBS"
807 #ifdef HAVE_WINDOWS_H
808 #ifndef WIN32_LEAN_AND_MEAN
809 #define WIN32_LEAN_AND_MEAN
813 #ifdef HAVE_SYS_TYPES_H
814 #include <sys/types.h>
818 #define NULL (void *)0
820 #ifndef LDAP_DEPRECATED
821 #define LDAP_DEPRECATED 1
830 BerValue *bvp = NULL;
831 BerElement *bep = ber_init(bvp);
832 LDAP *ldp = ldap_init("dummy", LDAP_PORT);
833 int res = ldap_unbind(ldp);
837 curl_cv_ldap_LIBS="$x_nlibs"
842 LIBS="$curl_cv_save_LIBS"
844 case X-"$curl_cv_ldap_LIBS" in
846 AC_MSG_RESULT([cannot find LDAP libraries])
849 AC_MSG_RESULT([no additional lib required])
852 if test -z "$curl_cv_save_LIBS"; then
853 LIBS="$curl_cv_ldap_LIBS"
855 LIBS="$curl_cv_ldap_LIBS $curl_cv_save_LIBS"
857 AC_MSG_RESULT([$curl_cv_ldap_LIBS])
864 dnl CURL_CHECK_HEADER_MALLOC
865 dnl -------------------------------------------------
866 dnl Check for compilable and valid malloc.h header,
867 dnl and check if it is needed even with stdlib.h
869 AC_DEFUN([CURL_CHECK_HEADER_MALLOC], [
870 AC_CACHE_CHECK([for malloc.h], [ac_cv_header_malloc_h], [
875 void *p = malloc(10);
876 void *q = calloc(10,10);
881 ac_cv_header_malloc_h="yes"
883 ac_cv_header_malloc_h="no"
886 if test "$ac_cv_header_malloc_h" = "yes"; then
887 AC_DEFINE_UNQUOTED(HAVE_MALLOC_H, 1,
888 [Define to 1 if you have the malloc.h header file.])
894 void *p = malloc(10);
895 void *q = calloc(10,10);
900 curl_cv_need_header_malloc_h="no"
902 curl_cv_need_header_malloc_h="yes"
905 case "$curl_cv_need_header_malloc_h" in
907 AC_DEFINE_UNQUOTED(NEED_MALLOC_H, 1,
908 [Define to 1 if you need the malloc.h header file even with stdlib.h])
915 dnl CURL_CHECK_HEADER_MEMORY
916 dnl -------------------------------------------------
917 dnl Check for compilable and valid memory.h header,
918 dnl and check if it is needed even with stdlib.h for
919 dnl memory related functions.
921 AC_DEFUN([CURL_CHECK_HEADER_MEMORY], [
922 AC_CACHE_CHECK([for memory.h], [ac_cv_header_memory_h], [
927 void *p = malloc(10);
928 void *q = calloc(10,10);
933 ac_cv_header_memory_h="yes"
935 ac_cv_header_memory_h="no"
938 if test "$ac_cv_header_memory_h" = "yes"; then
939 AC_DEFINE_UNQUOTED(HAVE_MEMORY_H, 1,
940 [Define to 1 if you have the memory.h header file.])
946 void *p = malloc(10);
947 void *q = calloc(10,10);
952 curl_cv_need_header_memory_h="no"
954 curl_cv_need_header_memory_h="yes"
957 case "$curl_cv_need_header_memory_h" in
959 AC_DEFINE_UNQUOTED(NEED_MEMORY_H, 1,
960 [Define to 1 if you need the memory.h header file even with stdlib.h])
967 dnl CURL_CHECK_FUNC_GETNAMEINFO
968 dnl -------------------------------------------------
969 dnl Test if the getnameinfo function is available,
970 dnl and check the types of five of its arguments.
971 dnl If the function succeeds HAVE_GETNAMEINFO will be
972 dnl defined, defining the types of the arguments in
973 dnl GETNAMEINFO_TYPE_ARG1, GETNAMEINFO_TYPE_ARG2,
974 dnl GETNAMEINFO_TYPE_ARG46 and GETNAMEINFO_TYPE_ARG7,
975 dnl and also defining the type qualifier of first
976 dnl argument in GETNAMEINFO_QUAL_ARG1.
978 AC_DEFUN([CURL_CHECK_FUNC_GETNAMEINFO], [
979 AC_REQUIRE([CURL_CHECK_HEADER_WS2TCPIP])dnl
980 AC_CHECK_HEADERS(sys/types.h sys/socket.h netdb.h)
982 AC_MSG_CHECKING([for getnameinfo])
984 AC_LANG_FUNC_LINK_TRY([getnameinfo])
987 curl_cv_getnameinfo="yes"
990 curl_cv_getnameinfo="no"
993 if test "$curl_cv_getnameinfo" != "yes"; then
994 AC_MSG_CHECKING([deeper for getnameinfo])
1001 AC_MSG_RESULT([yes])
1002 curl_cv_getnameinfo="yes"
1004 AC_MSG_RESULT([but still no])
1005 curl_cv_getnameinfo="no"
1009 if test "$curl_cv_getnameinfo" != "yes"; then
1010 AC_MSG_CHECKING([deeper and deeper for getnameinfo])
1014 #ifdef HAVE_WINDOWS_H
1015 #ifndef WIN32_LEAN_AND_MEAN
1016 #define WIN32_LEAN_AND_MEAN
1018 #include <windows.h>
1019 #ifdef HAVE_WINSOCK2_H
1020 #include <winsock2.h>
1021 #ifdef HAVE_WS2TCPIP_H
1022 #include <ws2tcpip.h>
1026 #ifdef HAVE_SYS_TYPES_H
1027 #include <sys/types.h>
1029 #ifdef HAVE_SYS_SOCKET_H
1030 #include <sys/socket.h>
1037 getnameinfo(0, 0, 0, 0, 0, 0, 0);
1040 AC_MSG_RESULT([yes])
1041 curl_cv_getnameinfo="yes"
1043 AC_MSG_RESULT([but still no])
1044 curl_cv_getnameinfo="no"
1048 if test "$curl_cv_getnameinfo" = "yes"; then
1049 AC_CACHE_CHECK([types of arguments for getnameinfo],
1050 [curl_cv_func_getnameinfo_args], [
1051 curl_cv_func_getnameinfo_args="unknown"
1052 for gni_arg1 in 'struct sockaddr *' 'const struct sockaddr *' 'void *'; do
1053 for gni_arg2 in 'socklen_t' 'size_t' 'int'; do
1054 for gni_arg46 in 'size_t' 'int' 'socklen_t' 'unsigned int' 'DWORD'; do
1055 for gni_arg7 in 'int' 'unsigned int'; do
1056 if test "$curl_cv_func_getnameinfo_args" = "unknown"; then
1060 #ifdef HAVE_WINDOWS_H
1061 #ifndef WIN32_LEAN_AND_MEAN
1062 #define WIN32_LEAN_AND_MEAN
1064 #if (!defined(_WIN32_WINNT)) || (_WIN32_WINNT < 0x0501)
1066 #define _WIN32_WINNT 0x0501
1068 #include <windows.h>
1069 #ifdef HAVE_WINSOCK2_H
1070 #include <winsock2.h>
1071 #ifdef HAVE_WS2TCPIP_H
1072 #include <ws2tcpip.h>
1075 #define GNICALLCONV WSAAPI
1077 #ifdef HAVE_SYS_TYPES_H
1078 #include <sys/types.h>
1080 #ifdef HAVE_SYS_SOCKET_H
1081 #include <sys/socket.h>
1088 extern int GNICALLCONV getnameinfo($gni_arg1, $gni_arg2,
1094 $gni_arg46 hostlen=0;
1095 $gni_arg46 servlen=0;
1097 int res = getnameinfo(0, salen, 0, hostlen, 0, servlen, flags);
1100 curl_cv_func_getnameinfo_args="$gni_arg1,$gni_arg2,$gni_arg46,$gni_arg7"
1108 if test "$curl_cv_func_getnameinfo_args" = "unknown"; then
1109 AC_MSG_WARN([Cannot find proper types to use for getnameinfo args])
1110 AC_MSG_WARN([HAVE_GETNAMEINFO will not be defined])
1112 gni_prev_IFS=$IFS; IFS=','
1113 set dummy `echo "$curl_cv_func_getnameinfo_args" | sed 's/\*/\*/g'`
1117 gni_qual_type_arg1=$[1]
1119 AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG2, $[2],
1120 [Define to the type of arg 2 for getnameinfo.])
1121 AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG46, $[3],
1122 [Define to the type of args 4 and 6 for getnameinfo.])
1123 AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG7, $[4],
1124 [Define to the type of arg 7 for getnameinfo.])
1128 case $prev_sh_opts in
1136 case "$gni_qual_type_arg1" in
1139 gni_type_arg1=`echo $gni_qual_type_arg1 | sed 's/^const //'`
1143 gni_type_arg1=$gni_qual_type_arg1
1147 AC_DEFINE_UNQUOTED(GETNAMEINFO_QUAL_ARG1, $gni_qual_arg1,
1148 [Define to the type qualifier of arg 1 for getnameinfo.])
1149 AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG1, $gni_type_arg1,
1150 [Define to the type of arg 1 for getnameinfo.])
1152 case $prev_sh_opts in
1160 AC_DEFINE_UNQUOTED(HAVE_GETNAMEINFO, 1,
1161 [Define to 1 if you have the getnameinfo function.])
1162 ac_cv_func_getnameinfo="yes"
1168 dnl TYPE_SOCKADDR_STORAGE
1169 dnl -------------------------------------------------
1170 dnl Check for struct sockaddr_storage. Most IPv6-enabled
1171 dnl hosts have it, but AIX 4.3 is one known exception.
1173 AC_DEFUN([TYPE_SOCKADDR_STORAGE],
1175 AC_CHECK_TYPE([struct sockaddr_storage],
1176 AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE, 1,
1177 [if struct sockaddr_storage is defined]), ,
1180 #ifdef HAVE_WINDOWS_H
1181 #ifndef WIN32_LEAN_AND_MEAN
1182 #define WIN32_LEAN_AND_MEAN
1184 #include <windows.h>
1185 #ifdef HAVE_WINSOCK2_H
1186 #include <winsock2.h>
1189 #ifdef HAVE_SYS_TYPES_H
1190 #include <sys/types.h>
1192 #ifdef HAVE_SYS_SOCKET_H
1193 #include <sys/socket.h>
1195 #ifdef HAVE_NETINET_IN_H
1196 #include <netinet/in.h>
1198 #ifdef HAVE_ARPA_INET_H
1199 #include <arpa/inet.h>
1206 dnl CURL_CHECK_NI_WITHSCOPEID
1207 dnl -------------------------------------------------
1208 dnl Check for working NI_WITHSCOPEID in getnameinfo()
1210 AC_DEFUN([CURL_CHECK_NI_WITHSCOPEID], [
1211 AC_REQUIRE([CURL_CHECK_FUNC_GETNAMEINFO])dnl
1212 AC_REQUIRE([TYPE_SOCKADDR_STORAGE])dnl
1213 AC_CHECK_HEADERS(stdio.h sys/types.h sys/socket.h \
1214 netdb.h netinet/in.h arpa/inet.h)
1216 AC_CACHE_CHECK([for working NI_WITHSCOPEID],
1217 [ac_cv_working_ni_withscopeid], [
1220 #ifdef HAVE_STDLIB_H
1226 #ifdef HAVE_SYS_TYPES_H
1227 #include <sys/types.h>
1229 #ifdef HAVE_SYS_SOCKET_H
1230 #include <sys/socket.h>
1235 #ifdef HAVE_NETINET_IN_H
1236 #include <netinet/in.h>
1238 #ifdef HAVE_ARPA_INET_H
1239 #include <arpa/inet.h>
1242 #if defined(NI_WITHSCOPEID) && defined(HAVE_GETNAMEINFO)
1243 #ifdef HAVE_STRUCT_SOCKADDR_STORAGE
1244 struct sockaddr_storage sa;
1246 unsigned char sa[256];
1248 char hostbuf[NI_MAXHOST];
1250 GETNAMEINFO_TYPE_ARG2 salen = (GETNAMEINFO_TYPE_ARG2)sizeof(sa);
1251 GETNAMEINFO_TYPE_ARG46 hostlen = (GETNAMEINFO_TYPE_ARG46)sizeof(hostbuf);
1252 GETNAMEINFO_TYPE_ARG7 flags = NI_NUMERICHOST | NI_NUMERICSERV | NI_WITHSCOPEID;
1253 int fd = socket(AF_INET6, SOCK_STREAM, 0);
1256 return 1; /* Error creating socket */
1258 rc = getsockname(fd, (GETNAMEINFO_TYPE_ARG1)&sa, &salen);
1260 perror("getsockname()");
1261 return 2; /* Error retrieving socket name */
1263 rc = getnameinfo((GETNAMEINFO_TYPE_ARG1)&sa, salen, hostbuf, hostlen, NULL, 0, flags);
1265 printf("rc = %s\n", gai_strerror(rc));
1266 return 3; /* Error translating socket address */
1268 return 0; /* Ok, NI_WITHSCOPEID works */
1270 return 4; /* Error, NI_WITHSCOPEID not defined or no getnameinfo() */
1272 ]]) # AC-LANG-PROGRAM
1274 # Exit code == 0. Program worked.
1275 ac_cv_working_ni_withscopeid="yes"
1277 # Exit code != 0. Program failed.
1278 ac_cv_working_ni_withscopeid="no"
1280 # Program is not run when cross-compiling. So we assume
1281 # NI_WITHSCOPEID will work if we are able to compile it.
1284 #include <sys/types.h>
1285 #include <sys/socket.h>
1288 unsigned int dummy= NI_NUMERICHOST | NI_NUMERICSERV | NI_WITHSCOPEID;
1291 ac_cv_working_ni_withscopeid="yes"
1293 ac_cv_working_ni_withscopeid="no"
1294 ]) # AC-COMPILE-IFELSE
1297 case "$ac_cv_working_ni_withscopeid" in
1299 AC_DEFINE(HAVE_NI_WITHSCOPEID, 1,
1300 [Define to 1 if NI_WITHSCOPEID exists and works.])
1306 dnl CURL_CHECK_FUNC_RECV
1307 dnl -------------------------------------------------
1308 dnl Test if the socket recv() function is available,
1309 dnl and check its return type and the types of its
1310 dnl arguments. If the function succeeds HAVE_RECV
1311 dnl will be defined, defining the types of the arguments
1312 dnl in RECV_TYPE_ARG1, RECV_TYPE_ARG2, RECV_TYPE_ARG3
1313 dnl and RECV_TYPE_ARG4, defining the type of the function
1314 dnl return value in RECV_TYPE_RETV.
1316 AC_DEFUN([CURL_CHECK_FUNC_RECV], [
1317 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl
1318 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
1319 AC_CHECK_HEADERS(sys/types.h sys/socket.h)
1321 AC_MSG_CHECKING([for recv])
1325 #ifdef HAVE_WINDOWS_H
1326 #ifndef WIN32_LEAN_AND_MEAN
1327 #define WIN32_LEAN_AND_MEAN
1329 #include <windows.h>
1330 #ifdef HAVE_WINSOCK2_H
1331 #include <winsock2.h>
1333 #ifdef HAVE_WINSOCK_H
1334 #include <winsock.h>
1338 #ifdef HAVE_SYS_TYPES_H
1339 #include <sys/types.h>
1341 #ifdef HAVE_SYS_SOCKET_H
1342 #include <sys/socket.h>
1349 AC_MSG_RESULT([yes])
1356 if test "$curl_cv_recv" = "yes"; then
1357 AC_CACHE_CHECK([types of args and return type for recv],
1358 [curl_cv_func_recv_args], [
1359 curl_cv_func_recv_args="unknown"
1360 for recv_retv in 'int' 'ssize_t'; do
1361 for recv_arg1 in 'int' 'ssize_t' 'SOCKET'; do
1362 for recv_arg2 in 'char *' 'void *'; do
1363 for recv_arg3 in 'size_t' 'int' 'socklen_t' 'unsigned int'; do
1364 for recv_arg4 in 'int' 'unsigned int'; do
1365 if test "$curl_cv_func_recv_args" = "unknown"; then
1369 #ifdef HAVE_WINDOWS_H
1370 #ifndef WIN32_LEAN_AND_MEAN
1371 #define WIN32_LEAN_AND_MEAN
1373 #include <windows.h>
1374 #ifdef HAVE_WINSOCK2_H
1375 #include <winsock2.h>
1377 #ifdef HAVE_WINSOCK_H
1378 #include <winsock.h>
1381 #define RECVCALLCONV PASCAL
1383 #ifdef HAVE_SYS_TYPES_H
1384 #include <sys/types.h>
1386 #ifdef HAVE_SYS_SOCKET_H
1387 #include <sys/socket.h>
1389 #define RECVCALLCONV
1391 extern $recv_retv RECVCALLCONV
1392 recv($recv_arg1, $recv_arg2, $recv_arg3, $recv_arg4);
1398 $recv_retv res = recv(s, buf, len, flags);
1401 curl_cv_func_recv_args="$recv_arg1,$recv_arg2,$recv_arg3,$recv_arg4,$recv_retv"
1410 if test "$curl_cv_func_recv_args" = "unknown"; then
1411 AC_MSG_ERROR([Cannot find proper types to use for recv args])
1413 recv_prev_IFS=$IFS; IFS=','
1414 set dummy `echo "$curl_cv_func_recv_args" | sed 's/\*/\*/g'`
1418 AC_DEFINE_UNQUOTED(RECV_TYPE_ARG1, $[1],
1419 [Define to the type of arg 1 for recv.])
1420 AC_DEFINE_UNQUOTED(RECV_TYPE_ARG2, $[2],
1421 [Define to the type of arg 2 for recv.])
1422 AC_DEFINE_UNQUOTED(RECV_TYPE_ARG3, $[3],
1423 [Define to the type of arg 3 for recv.])
1424 AC_DEFINE_UNQUOTED(RECV_TYPE_ARG4, $[4],
1425 [Define to the type of arg 4 for recv.])
1426 AC_DEFINE_UNQUOTED(RECV_TYPE_RETV, $[5],
1427 [Define to the function return type for recv.])
1429 AC_DEFINE_UNQUOTED(HAVE_RECV, 1,
1430 [Define to 1 if you have the recv function.])
1431 ac_cv_func_recv="yes"
1434 AC_MSG_ERROR([Unable to link function recv])
1439 dnl CURL_CHECK_FUNC_SEND
1440 dnl -------------------------------------------------
1441 dnl Test if the socket send() function is available,
1442 dnl and check its return type and the types of its
1443 dnl arguments. If the function succeeds HAVE_SEND
1444 dnl will be defined, defining the types of the arguments
1445 dnl in SEND_TYPE_ARG1, SEND_TYPE_ARG2, SEND_TYPE_ARG3
1446 dnl and SEND_TYPE_ARG4, defining the type of the function
1447 dnl return value in SEND_TYPE_RETV, and also defining the
1448 dnl type qualifier of second argument in SEND_QUAL_ARG2.
1450 AC_DEFUN([CURL_CHECK_FUNC_SEND], [
1451 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl
1452 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
1453 AC_CHECK_HEADERS(sys/types.h sys/socket.h)
1455 AC_MSG_CHECKING([for send])
1459 #ifdef HAVE_WINDOWS_H
1460 #ifndef WIN32_LEAN_AND_MEAN
1461 #define WIN32_LEAN_AND_MEAN
1463 #include <windows.h>
1464 #ifdef HAVE_WINSOCK2_H
1465 #include <winsock2.h>
1467 #ifdef HAVE_WINSOCK_H
1468 #include <winsock.h>
1472 #ifdef HAVE_SYS_TYPES_H
1473 #include <sys/types.h>
1475 #ifdef HAVE_SYS_SOCKET_H
1476 #include <sys/socket.h>
1483 AC_MSG_RESULT([yes])
1490 if test "$curl_cv_send" = "yes"; then
1491 AC_CACHE_CHECK([types of args and return type for send],
1492 [curl_cv_func_send_args], [
1493 curl_cv_func_send_args="unknown"
1494 for send_retv in 'int' 'ssize_t'; do
1495 for send_arg1 in 'int' 'ssize_t' 'SOCKET'; do
1496 for send_arg2 in 'char *' 'void *' 'const char *' 'const void *'; do
1497 for send_arg3 in 'size_t' 'int' 'socklen_t' 'unsigned int'; do
1498 for send_arg4 in 'int' 'unsigned int'; do
1499 if test "$curl_cv_func_send_args" = "unknown"; then
1503 #ifdef HAVE_WINDOWS_H
1504 #ifndef WIN32_LEAN_AND_MEAN
1505 #define WIN32_LEAN_AND_MEAN
1507 #include <windows.h>
1508 #ifdef HAVE_WINSOCK2_H
1509 #include <winsock2.h>
1511 #ifdef HAVE_WINSOCK_H
1512 #include <winsock.h>
1515 #define SENDCALLCONV PASCAL
1517 #ifdef HAVE_SYS_TYPES_H
1518 #include <sys/types.h>
1520 #ifdef HAVE_SYS_SOCKET_H
1521 #include <sys/socket.h>
1523 #define SENDCALLCONV
1525 extern $send_retv SENDCALLCONV
1526 send($send_arg1, $send_arg2, $send_arg3, $send_arg4);
1531 $send_retv res = send(s, 0, len, flags);
1534 curl_cv_func_send_args="$send_arg1,$send_arg2,$send_arg3,$send_arg4,$send_retv"
1543 if test "$curl_cv_func_send_args" = "unknown"; then
1544 AC_MSG_ERROR([Cannot find proper types to use for send args])
1546 send_prev_IFS=$IFS; IFS=','
1547 set dummy `echo "$curl_cv_func_send_args" | sed 's/\*/\*/g'`
1551 send_qual_type_arg2=$[2]
1553 AC_DEFINE_UNQUOTED(SEND_TYPE_ARG1, $[1],
1554 [Define to the type of arg 1 for send.])
1555 AC_DEFINE_UNQUOTED(SEND_TYPE_ARG3, $[3],
1556 [Define to the type of arg 3 for send.])
1557 AC_DEFINE_UNQUOTED(SEND_TYPE_ARG4, $[4],
1558 [Define to the type of arg 4 for send.])
1559 AC_DEFINE_UNQUOTED(SEND_TYPE_RETV, $[5],
1560 [Define to the function return type for send.])
1564 case $prev_sh_opts in
1572 case "$send_qual_type_arg2" in
1574 send_qual_arg2=const
1575 send_type_arg2=`echo $send_qual_type_arg2 | sed 's/^const //'`
1579 send_type_arg2=$send_qual_type_arg2
1583 AC_DEFINE_UNQUOTED(SEND_QUAL_ARG2, $send_qual_arg2,
1584 [Define to the type qualifier of arg 2 for send.])
1585 AC_DEFINE_UNQUOTED(SEND_TYPE_ARG2, $send_type_arg2,
1586 [Define to the type of arg 2 for send.])
1588 case $prev_sh_opts in
1596 AC_DEFINE_UNQUOTED(HAVE_SEND, 1,
1597 [Define to 1 if you have the send function.])
1598 ac_cv_func_send="yes"
1601 AC_MSG_ERROR([Unable to link function send])
1606 dnl CURL_CHECK_FUNC_RECVFROM
1607 dnl -------------------------------------------------
1608 dnl Test if the socket recvfrom() function is available,
1609 dnl and check its return type and the types of its
1610 dnl arguments. If the function succeeds HAVE_RECVFROM
1611 dnl will be defined, defining the types of the arguments
1612 dnl in RECVFROM_TYPE_ARG1, RECVFROM_TYPE_ARG2, and so on
1613 dnl to RECVFROM_TYPE_ARG6, defining also the type of the
1614 dnl function return value in RECVFROM_TYPE_RETV.
1615 dnl Notice that the types returned for pointer arguments
1616 dnl will actually be the type pointed by the pointer.
1618 AC_DEFUN([CURL_CHECK_FUNC_RECVFROM], [
1619 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl
1620 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
1621 AC_CHECK_HEADERS(sys/types.h sys/socket.h)
1623 AC_MSG_CHECKING([for recvfrom])
1627 #ifdef HAVE_WINDOWS_H
1628 #ifndef WIN32_LEAN_AND_MEAN
1629 #define WIN32_LEAN_AND_MEAN
1631 #include <windows.h>
1632 #ifdef HAVE_WINSOCK2_H
1633 #include <winsock2.h>
1635 #ifdef HAVE_WINSOCK_H
1636 #include <winsock.h>
1640 #ifdef HAVE_SYS_TYPES_H
1641 #include <sys/types.h>
1643 #ifdef HAVE_SYS_SOCKET_H
1644 #include <sys/socket.h>
1648 recvfrom(0, 0, 0, 0, 0, 0);
1651 AC_MSG_RESULT([yes])
1652 curl_cv_recvfrom="yes"
1655 curl_cv_recvfrom="no"
1658 if test "$curl_cv_recvfrom" = "yes"; then
1659 AC_CACHE_CHECK([types of args and return type for recvfrom],
1660 [curl_cv_func_recvfrom_args], [
1661 curl_cv_func_recvfrom_args="unknown"
1662 for recvfrom_retv in 'int' 'ssize_t'; do
1663 for recvfrom_arg1 in 'int' 'ssize_t' 'SOCKET'; do
1664 for recvfrom_arg2 in 'char *' 'void *'; do
1665 for recvfrom_arg3 in 'size_t' 'int' 'socklen_t' 'unsigned int'; do
1666 for recvfrom_arg4 in 'int' 'unsigned int'; do
1667 for recvfrom_arg5 in 'struct sockaddr *' 'void *'; do
1668 for recvfrom_arg6 in 'socklen_t *' 'int *' 'unsigned int *' 'size_t *' 'void *'; do
1669 if test "$curl_cv_func_recvfrom_args" = "unknown"; then
1673 #ifdef HAVE_WINDOWS_H
1674 #ifndef WIN32_LEAN_AND_MEAN
1675 #define WIN32_LEAN_AND_MEAN
1677 #include <windows.h>
1678 #ifdef HAVE_WINSOCK2_H
1679 #include <winsock2.h>
1681 #ifdef HAVE_WINSOCK_H
1682 #include <winsock.h>
1685 #define RECVFROMCALLCONV PASCAL
1687 #ifdef HAVE_SYS_TYPES_H
1688 #include <sys/types.h>
1690 #ifdef HAVE_SYS_SOCKET_H
1691 #include <sys/socket.h>
1693 #define RECVFROMCALLCONV
1695 extern $recvfrom_retv RECVFROMCALLCONV
1696 recvfrom($recvfrom_arg1, $recvfrom_arg2,
1697 $recvfrom_arg3, $recvfrom_arg4,
1698 $recvfrom_arg5, $recvfrom_arg6);
1701 $recvfrom_arg2 buf=0;
1702 $recvfrom_arg3 len=0;
1703 $recvfrom_arg4 flags=0;
1704 $recvfrom_arg5 addr=0;
1705 $recvfrom_arg6 addrlen=0;
1706 $recvfrom_retv res=0;
1707 res = recvfrom(s, buf, len, flags, addr, addrlen);
1710 curl_cv_func_recvfrom_args="$recvfrom_arg1,$recvfrom_arg2,$recvfrom_arg3,$recvfrom_arg4,$recvfrom_arg5,$recvfrom_arg6,$recvfrom_retv"
1721 # Nearly last minute change for this release starts here
1722 AC_DEFINE_UNQUOTED(HAVE_RECVFROM, 1,
1723 [Define to 1 if you have the recvfrom function.])
1724 ac_cv_func_recvfrom="yes"
1725 # Nearly last minute change for this release ends here
1726 if test "$curl_cv_func_recvfrom_args" = "unknown"; then
1727 AC_MSG_WARN([Cannot find proper types to use for recvfrom args])
1729 recvfrom_prev_IFS=$IFS; IFS=','
1730 set dummy `echo "$curl_cv_func_recvfrom_args" | sed 's/\*/\*/g'`
1731 IFS=$recvfrom_prev_IFS
1734 recvfrom_ptrt_arg2=$[2]
1735 recvfrom_ptrt_arg5=$[5]
1736 recvfrom_ptrt_arg6=$[6]
1738 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG1, $[1],
1739 [Define to the type of arg 1 for recvfrom.])
1740 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG3, $[3],
1741 [Define to the type of arg 3 for recvfrom.])
1742 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG4, $[4],
1743 [Define to the type of arg 4 for recvfrom.])
1744 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_RETV, $[7],
1745 [Define to the function return type for recvfrom.])
1749 case $prev_sh_opts in
1757 recvfrom_type_arg2=`echo $recvfrom_ptrt_arg2 | sed 's/ \*//'`
1758 recvfrom_type_arg5=`echo $recvfrom_ptrt_arg5 | sed 's/ \*//'`
1759 recvfrom_type_arg6=`echo $recvfrom_ptrt_arg6 | sed 's/ \*//'`
1761 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG2, $recvfrom_type_arg2,
1762 [Define to the type pointed by arg 2 for recvfrom.])
1763 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG5, $recvfrom_type_arg5,
1764 [Define to the type pointed by arg 5 for recvfrom.])
1765 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG6, $recvfrom_type_arg6,
1766 [Define to the type pointed by arg 6 for recvfrom.])
1768 if test "$recvfrom_type_arg2" = "void"; then
1769 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG2_IS_VOID, 1,
1770 [Define to 1 if the type pointed by arg 2 for recvfrom is void.])
1772 if test "$recvfrom_type_arg5" = "void"; then
1773 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG5_IS_VOID, 1,
1774 [Define to 1 if the type pointed by arg 5 for recvfrom is void.])
1776 if test "$recvfrom_type_arg6" = "void"; then
1777 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG6_IS_VOID, 1,
1778 [Define to 1 if the type pointed by arg 6 for recvfrom is void.])
1781 case $prev_sh_opts in
1789 AC_DEFINE_UNQUOTED(HAVE_RECVFROM, 1,
1790 [Define to 1 if you have the recvfrom function.])
1791 ac_cv_func_recvfrom="yes"
1794 AC_MSG_WARN([Unable to link function recvfrom])
1799 dnl CURL_CHECK_MSG_NOSIGNAL
1800 dnl -------------------------------------------------
1801 dnl Check for MSG_NOSIGNAL
1803 AC_DEFUN([CURL_CHECK_MSG_NOSIGNAL], [
1804 AC_CHECK_HEADERS(sys/types.h sys/socket.h)
1805 AC_CACHE_CHECK([for MSG_NOSIGNAL], [ac_cv_msg_nosignal], [
1809 #ifdef HAVE_WINDOWS_H
1810 #ifndef WIN32_LEAN_AND_MEAN
1811 #define WIN32_LEAN_AND_MEAN
1813 #include <windows.h>
1814 #ifdef HAVE_WINSOCK2_H
1815 #include <winsock2.h>
1817 #ifdef HAVE_WINSOCK_H
1818 #include <winsock.h>
1822 #ifdef HAVE_SYS_TYPES_H
1823 #include <sys/types.h>
1825 #ifdef HAVE_SYS_SOCKET_H
1826 #include <sys/socket.h>
1830 int flag=MSG_NOSIGNAL;
1833 ac_cv_msg_nosignal="yes"
1835 ac_cv_msg_nosignal="no"
1838 case "$ac_cv_msg_nosignal" in
1840 AC_DEFINE_UNQUOTED(HAVE_MSG_NOSIGNAL, 1,
1841 [Define to 1 if you have the MSG_NOSIGNAL flag.])
1847 dnl CURL_CHECK_STRUCT_TIMEVAL
1848 dnl -------------------------------------------------
1849 dnl Check for timeval struct
1851 AC_DEFUN([CURL_CHECK_STRUCT_TIMEVAL], [
1852 AC_REQUIRE([AC_HEADER_TIME])dnl
1853 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl
1854 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
1855 AC_CHECK_HEADERS(sys/types.h sys/time.h time.h)
1856 AC_CACHE_CHECK([for struct timeval], [ac_cv_struct_timeval], [
1860 #ifdef HAVE_WINDOWS_H
1861 #ifndef WIN32_LEAN_AND_MEAN
1862 #define WIN32_LEAN_AND_MEAN
1864 #include <windows.h>
1865 #ifdef HAVE_WINSOCK2_H
1866 #include <winsock2.h>
1868 #ifdef HAVE_WINSOCK_H
1869 #include <winsock.h>
1873 #ifdef HAVE_SYS_TYPES_H
1874 #include <sys/types.h>
1876 #ifdef HAVE_SYS_TIME_H
1877 #include <sys/time.h>
1878 #ifdef TIME_WITH_SYS_TIME
1892 ac_cv_struct_timeval="yes"
1894 ac_cv_struct_timeval="no"
1897 case "$ac_cv_struct_timeval" in
1899 AC_DEFINE_UNQUOTED(HAVE_STRUCT_TIMEVAL, 1,
1900 [Define to 1 if you have the timeval struct.])
1906 dnl TYPE_SIG_ATOMIC_T
1907 dnl -------------------------------------------------
1908 dnl Check if the sig_atomic_t type is available, and
1909 dnl verify if it is already defined as volatile.
1911 AC_DEFUN([TYPE_SIG_ATOMIC_T], [
1912 AC_CHECK_HEADERS(signal.h)
1913 AC_CHECK_TYPE([sig_atomic_t],[
1914 AC_DEFINE(HAVE_SIG_ATOMIC_T, 1,
1915 [Define to 1 if sig_atomic_t is an available typedef.])
1917 #ifdef HAVE_SIGNAL_H
1921 case "$ac_cv_type_sig_atomic_t" in
1924 AC_MSG_CHECKING([if sig_atomic_t is already defined as volatile])
1927 #ifdef HAVE_SIGNAL_H
1931 static volatile sig_atomic_t dummy = 0;
1935 ac_cv_sig_atomic_t_volatile="no"
1937 AC_MSG_RESULT([yes])
1938 ac_cv_sig_atomic_t_volatile="yes"
1941 if test "$ac_cv_sig_atomic_t_volatile" = "yes"; then
1942 AC_DEFINE(HAVE_SIG_ATOMIC_T_VOLATILE, 1,
1943 [Define to 1 if sig_atomic_t is already defined as volatile.])
1951 dnl -------------------------------------------------
1952 dnl Check for in_addr_t: it is used to receive the return code of inet_addr()
1953 dnl and a few other things.
1955 AC_DEFUN([TYPE_IN_ADDR_T], [
1956 AC_CHECK_TYPE([in_addr_t], ,[
1957 dnl in_addr_t not available
1958 AC_CACHE_CHECK([for in_addr_t equivalent],
1959 [curl_cv_in_addr_t_equiv], [
1960 curl_cv_in_addr_t_equiv="unknown"
1961 for t in "unsigned long" int size_t unsigned long; do
1962 if test "$curl_cv_in_addr_t_equiv" = "unknown"; then
1966 #ifdef HAVE_WINDOWS_H
1967 #ifndef WIN32_LEAN_AND_MEAN
1968 #define WIN32_LEAN_AND_MEAN
1970 #include <windows.h>
1971 #ifdef HAVE_WINSOCK2_H
1972 #include <winsock2.h>
1974 #ifdef HAVE_WINSOCK_H
1975 #include <winsock.h>
1979 #ifdef HAVE_SYS_TYPES_H
1980 #include <sys/types.h>
1982 #ifdef HAVE_SYS_SOCKET_H
1983 #include <sys/socket.h>
1985 #ifdef HAVE_NETINET_IN_H
1986 #include <netinet/in.h>
1988 #ifdef HAVE_ARPA_INET_H
1989 #include <arpa/inet.h>
1993 $t data = inet_addr ("1.2.3.4");
1996 curl_cv_in_addr_t_equiv="$t"
2001 case "$curl_cv_in_addr_t_equiv" in
2003 AC_MSG_ERROR([Cannot find a type to use in place of in_addr_t])
2006 AC_DEFINE_UNQUOTED(in_addr_t, $curl_cv_in_addr_t_equiv,
2007 [Type to use in place of in_addr_t when system does not provide it.])
2012 #ifdef HAVE_WINDOWS_H
2013 #ifndef WIN32_LEAN_AND_MEAN
2014 #define WIN32_LEAN_AND_MEAN
2016 #include <windows.h>
2017 #ifdef HAVE_WINSOCK2_H
2018 #include <winsock2.h>
2020 #ifdef HAVE_WINSOCK_H
2021 #include <winsock.h>
2025 #ifdef HAVE_SYS_TYPES_H
2026 #include <sys/types.h>
2028 #ifdef HAVE_SYS_SOCKET_H
2029 #include <sys/socket.h>
2031 #ifdef HAVE_NETINET_IN_H
2032 #include <netinet/in.h>
2034 #ifdef HAVE_ARPA_INET_H
2035 #include <arpa/inet.h>
2042 dnl CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC
2043 dnl -------------------------------------------------
2044 dnl Check if monotonic clock_gettime is available.
2046 AC_DEFUN([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC], [
2047 AC_REQUIRE([AC_HEADER_TIME])dnl
2048 AC_CHECK_HEADERS(sys/types.h sys/time.h time.h)
2049 AC_MSG_CHECKING([for monotonic clock_gettime])
2052 #ifdef HAVE_SYS_TYPES_H
2053 #include <sys/types.h>
2055 #ifdef HAVE_SYS_TIME_H
2056 #include <sys/time.h>
2057 #ifdef TIME_WITH_SYS_TIME
2067 (void)clock_gettime(CLOCK_MONOTONIC, &ts);
2070 AC_MSG_RESULT([yes])
2071 ac_cv_func_clock_gettime="yes"
2074 ac_cv_func_clock_gettime="no"
2076 dnl Definition of HAVE_CLOCK_GETTIME_MONOTONIC is intentionally postponed
2077 dnl until library linking and run-time checks for clock_gettime succeed.
2081 dnl CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC
2082 dnl -------------------------------------------------
2083 dnl If monotonic clock_gettime is available then,
2084 dnl check and prepended to LIBS any needed libraries.
2086 AC_DEFUN([CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC], [
2087 AC_REQUIRE([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC])dnl
2089 if test "$ac_cv_func_clock_gettime" = "yes"; then
2091 AC_MSG_CHECKING([for clock_gettime in libraries])
2093 curl_cv_save_LIBS="$LIBS"
2094 curl_cv_gclk_LIBS="unknown"
2096 for x_xlibs in '' '-lrt' '-lposix4' ; do
2097 if test "$curl_cv_gclk_LIBS" = "unknown"; then
2098 if test -z "$x_xlibs"; then
2099 LIBS="$curl_cv_save_LIBS"
2101 LIBS="$x_xlibs $curl_cv_save_LIBS"
2105 #ifdef HAVE_SYS_TYPES_H
2106 #include <sys/types.h>
2108 #ifdef HAVE_SYS_TIME_H
2109 #include <sys/time.h>
2110 #ifdef TIME_WITH_SYS_TIME
2120 (void)clock_gettime(CLOCK_MONOTONIC, &ts);
2123 curl_cv_gclk_LIBS="$x_xlibs"
2128 LIBS="$curl_cv_save_LIBS"
2130 case X-"$curl_cv_gclk_LIBS" in
2132 AC_MSG_RESULT([cannot find clock_gettime])
2133 AC_MSG_WARN([HAVE_CLOCK_GETTIME_MONOTONIC will not be defined])
2134 ac_cv_func_clock_gettime="no"
2137 AC_MSG_RESULT([no additional lib required])
2138 ac_cv_func_clock_gettime="yes"
2141 if test -z "$curl_cv_save_LIBS"; then
2142 LIBS="$curl_cv_gclk_LIBS"
2144 LIBS="$curl_cv_gclk_LIBS $curl_cv_save_LIBS"
2146 AC_MSG_RESULT([$curl_cv_gclk_LIBS])
2147 ac_cv_func_clock_gettime="yes"
2151 dnl only do runtime verification when not cross-compiling
2152 if test "x$cross_compiling" != "xyes" &&
2153 test "$ac_cv_func_clock_gettime" = "yes"; then
2154 AC_MSG_CHECKING([if monotonic clock_gettime works])
2157 #ifdef HAVE_STDLIB_H
2160 #ifdef HAVE_SYS_TYPES_H
2161 #include <sys/types.h>
2163 #ifdef HAVE_SYS_TIME_H
2164 #include <sys/time.h>
2165 #ifdef TIME_WITH_SYS_TIME
2175 if (0 == clock_gettime(CLOCK_MONOTONIC, &ts))
2181 AC_MSG_RESULT([yes])
2184 AC_MSG_WARN([HAVE_CLOCK_GETTIME_MONOTONIC will not be defined])
2185 ac_cv_func_clock_gettime="no"
2186 LIBS="$curl_cv_save_LIBS"
2190 case "$ac_cv_func_clock_gettime" in
2192 AC_DEFINE_UNQUOTED(HAVE_CLOCK_GETTIME_MONOTONIC, 1,
2193 [Define to 1 if you have the clock_gettime function and monotonic timer.])
2202 dnl CURL_DEFINE_UNQUOTED (VARIABLE, [VALUE])
2203 dnl -------------------------------------------------
2204 dnl Like AC_DEFINE_UNQUOTED this macro will define a C preprocessor
2205 dnl symbol that can be further used in custom template configuration
2206 dnl files. This macro, unlike AC_DEFINE_UNQUOTED, does not use a third
2207 dnl argument for the description. Symbol definitions done with this
2208 dnl macro are intended to be exclusively used in handcrafted *.h.in
2209 dnl template files. Contrary to what AC_DEFINE_UNQUOTED does, this one
2210 dnl prevents autoheader generation and insertion of symbol template
2211 dnl stub and definition into the first configuration header file. Do
2212 dnl not use this macro as a replacement for AC_DEFINE_UNQUOTED, each
2213 dnl one serves different functional needs.
2215 AC_DEFUN([CURL_DEFINE_UNQUOTED], [
2216 cat >>confdefs.h <<_EOF
2217 [@%:@define] $1 ifelse($#, 2, [$2], 1)
2222 dnl CURL_CONFIGURE_LONG
2223 dnl -------------------------------------------------
2224 dnl Find out the size of long as reported by sizeof() and define
2225 dnl CURL_SIZEOF_LONG as appropriate to be used in template file
2226 dnl include/curl/curlbuild.h.in to properly configure the library.
2227 dnl The size of long is a build time characteristic and as such
2228 dnl must be recorded in curlbuild.h
2230 AC_DEFUN([CURL_CONFIGURE_LONG], [
2231 if test -z "$ac_cv_sizeof_long" ||
2232 test "$ac_cv_sizeof_long" -eq "0"; then
2233 AC_MSG_ERROR([cannot find out size of long.])
2235 CURL_DEFINE_UNQUOTED([CURL_SIZEOF_LONG], [$ac_cv_sizeof_long])
2239 dnl CURL_CONFIGURE_CURL_SOCKLEN_T
2240 dnl -------------------------------------------------
2241 dnl Find out suitable curl_socklen_t data type definition and size, making
2242 dnl appropriate definitions for template file include/curl/curlbuild.h.in
2243 dnl to properly configure and use the library.
2245 dnl The need for the curl_socklen_t definition arises mainly to properly
2246 dnl interface HP-UX systems which on one hand have a typedef'ed socklen_t
2247 dnl data type which is 32 or 64-Bit wide depending on the data model being
2248 dnl used, and that on the other hand is only actually used when interfacing
2249 dnl the X/Open sockets provided in the xnet library.
2251 AC_DEFUN([CURL_CONFIGURE_CURL_SOCKLEN_T], [
2252 AC_REQUIRE([CURL_INCLUDES_WS2TCPIP])dnl
2253 AC_REQUIRE([CURL_INCLUDES_SYS_SOCKET])dnl
2254 AC_REQUIRE([CURL_PREPROCESS_CALLCONV])dnl
2256 AC_MSG_CHECKING([for curl_socklen_t data type])
2257 curl_typeof_curl_socklen_t="unknown"
2258 for arg1 in int SOCKET; do
2259 for arg2 in 'struct sockaddr' void; do
2260 for t in socklen_t int size_t 'unsigned int' long 'unsigned long' void; do
2261 if test "$curl_typeof_curl_socklen_t" = "unknown"; then
2264 $curl_includes_ws2tcpip
2265 $curl_includes_sys_socket
2266 $curl_preprocess_callconv
2267 extern int FUNCALLCONV getpeername($arg1, $arg2 *, $t *);
2270 if(0 != getpeername(0, 0, lenptr))
2274 curl_typeof_curl_socklen_t="$t"
2280 for t in socklen_t int; do
2281 if test "$curl_typeof_curl_socklen_t" = "void"; then
2284 $curl_includes_sys_socket
2285 typedef $t curl_socklen_t;
2287 curl_socklen_t dummy;
2290 curl_typeof_curl_socklen_t="$t"
2294 AC_MSG_RESULT([$curl_typeof_curl_socklen_t])
2295 if test "$curl_typeof_curl_socklen_t" = "void" ||
2296 test "$curl_typeof_curl_socklen_t" = "unknown"; then
2297 AC_MSG_ERROR([cannot find data type for curl_socklen_t.])
2300 AC_MSG_CHECKING([size of curl_socklen_t])
2301 curl_sizeof_curl_socklen_t="unknown"
2302 curl_pull_headers_socklen_t="unknown"
2303 if test "$ac_cv_header_ws2tcpip_h" = "yes"; then
2304 tst_pull_header_checks='none ws2tcpip'
2307 tst_pull_header_checks='none systypes syssocket'
2308 tst_size_checks='4 8 2'
2310 for tst_size in $tst_size_checks; do
2311 for tst_pull_headers in $tst_pull_header_checks; do
2312 if test "$curl_sizeof_curl_socklen_t" = "unknown"; then
2313 case $tst_pull_headers in
2315 tmp_includes="$curl_includes_ws2tcpip"
2318 tmp_includes="$curl_includes_sys_types"
2321 tmp_includes="$curl_includes_sys_socket"
2330 typedef $curl_typeof_curl_socklen_t curl_socklen_t;
2331 typedef char dummy_arr[sizeof(curl_socklen_t) == $tst_size ? 1 : -1];
2333 curl_socklen_t dummy;
2336 curl_sizeof_curl_socklen_t="$tst_size"
2337 curl_pull_headers_socklen_t="$tst_pull_headers"
2342 AC_MSG_RESULT([$curl_sizeof_curl_socklen_t])
2343 if test "$curl_sizeof_curl_socklen_t" = "unknown"; then
2344 AC_MSG_ERROR([cannot find out size of curl_socklen_t.])
2347 case $curl_pull_headers_socklen_t in
2349 CURL_DEFINE_UNQUOTED([CURL_PULL_WS2TCPIP_H])
2352 CURL_DEFINE_UNQUOTED([CURL_PULL_SYS_TYPES_H])
2355 CURL_DEFINE_UNQUOTED([CURL_PULL_SYS_TYPES_H])
2356 CURL_DEFINE_UNQUOTED([CURL_PULL_SYS_SOCKET_H])
2359 CURL_DEFINE_UNQUOTED([CURL_TYPEOF_CURL_SOCKLEN_T], [$curl_typeof_curl_socklen_t])
2360 CURL_DEFINE_UNQUOTED([CURL_SIZEOF_CURL_SOCKLEN_T], [$curl_sizeof_curl_socklen_t])
2364 dnl CURL_A_COUPLE_OF_EXPERIMENTAL_COMPILER_TESTS
2365 dnl -------------------------------------------------
2366 dnl Use autobuilds to verify if these two tests pass.
2367 dnl To be removed in 24 or 48 hours.
2369 AC_DEFUN([CURL_A_COUPLE_OF_EXPERIMENTAL_COMPILER_TESTS], [
2370 AC_MSG_CHECKING([compiler test 01])
2376 struct mystruct *next;
2378 typedef struct mystruct mystruct;
2379 struct mystruct myfunc();
2380 typedef char __my_arr_01__
2381 [sizeof(myfunc().member1) == sizeof(int) ? 1 : -1];
2383 /* this should compile ok to pass test 01 */
2384 struct mystruct dummy;
2387 AC_MSG_RESULT([pass])
2389 AC_MSG_RESULT([FAIL])
2390 sed 's/^/cc-src: /' conftest.$ac_ext >&6
2391 sed 's/^/cc-err: /' conftest.err >&6
2393 AC_MSG_CHECKING([compiler test 02])
2399 struct mystruct *next;
2401 typedef struct mystruct mystruct;
2402 struct mystruct myfunc();
2403 typedef char __my_arr_02__
2404 [sizeof(myfunc().member1) == sizeof(char) ? 1 : -1];
2406 /* this should fail compilation to pass test 02 */
2407 struct mystruct dummy;
2410 AC_MSG_RESULT([FAIL])
2412 AC_MSG_RESULT([pass])
2417 dnl CURL_CHECK_FUNC_SELECT
2418 dnl -------------------------------------------------
2419 dnl Test if the socket select() function is available,
2420 dnl and check its return type and the types of its
2421 dnl arguments. If the function succeeds HAVE_SELECT
2422 dnl will be defined, defining the types of the
2423 dnl arguments in SELECT_TYPE_ARG1, SELECT_TYPE_ARG234
2424 dnl and SELECT_TYPE_ARG5, defining the type of the
2425 dnl function return value in SELECT_TYPE_RETV, and
2426 dnl also defining the type qualifier of fifth argument
2427 dnl in SELECT_QUAL_ARG5.
2429 AC_DEFUN([CURL_CHECK_FUNC_SELECT], [
2430 AC_REQUIRE([CURL_CHECK_STRUCT_TIMEVAL])dnl
2431 AC_CHECK_HEADERS(sys/select.h sys/socket.h)
2433 AC_MSG_CHECKING([for select])
2437 #ifdef HAVE_WINDOWS_H
2438 #ifndef WIN32_LEAN_AND_MEAN
2439 #define WIN32_LEAN_AND_MEAN
2441 #include <windows.h>
2442 #ifdef HAVE_WINSOCK2_H
2443 #include <winsock2.h>
2445 #ifdef HAVE_WINSOCK_H
2446 #include <winsock.h>
2450 #ifdef HAVE_SYS_TYPES_H
2451 #include <sys/types.h>
2453 #ifdef HAVE_SYS_TIME_H
2454 #include <sys/time.h>
2455 #ifdef TIME_WITH_SYS_TIME
2463 #ifndef HAVE_WINDOWS_H
2464 #ifdef HAVE_SYS_SELECT_H
2465 #include <sys/select.h>
2467 #ifdef HAVE_SYS_SOCKET_H
2468 #include <sys/socket.h>
2472 select(0, 0, 0, 0, 0);
2475 AC_MSG_RESULT([yes])
2476 curl_cv_select="yes"
2482 if test "$curl_cv_select" = "yes"; then
2483 AC_CACHE_CHECK([types of args and return type for select],
2484 [curl_cv_func_select_args], [
2485 curl_cv_func_select_args="unknown"
2486 for sel_retv in 'int' 'ssize_t'; do
2487 for sel_arg1 in 'int' 'ssize_t' 'size_t' 'unsigned long int' 'unsigned int'; do
2488 for sel_arg234 in 'fd_set *' 'int *' 'void *'; do
2489 for sel_arg5 in 'struct timeval *' 'const struct timeval *'; do
2490 if test "$curl_cv_func_select_args" = "unknown"; then
2494 #ifdef HAVE_WINDOWS_H
2495 #ifndef WIN32_LEAN_AND_MEAN
2496 #define WIN32_LEAN_AND_MEAN
2498 #include <windows.h>
2499 #ifdef HAVE_WINSOCK2_H
2500 #include <winsock2.h>
2502 #ifdef HAVE_WINSOCK_H
2503 #include <winsock.h>
2506 #define SELECTCALLCONV PASCAL
2508 #ifdef HAVE_SYS_TYPES_H
2509 #include <sys/types.h>
2511 #ifdef HAVE_SYS_TIME_H
2512 #include <sys/time.h>
2513 #ifdef TIME_WITH_SYS_TIME
2521 #ifndef HAVE_WINDOWS_H
2522 #ifdef HAVE_SYS_SELECT_H
2523 #include <sys/select.h>
2525 #ifdef HAVE_SYS_SOCKET_H
2526 #include <sys/socket.h>
2528 #define SELECTCALLCONV
2530 #ifndef HAVE_STRUCT_TIMEVAL
2536 extern $sel_retv SELECTCALLCONV select($sel_arg1,
2546 $sel_retv res = select(nfds, rfds, wfds, efds, 0);
2549 curl_cv_func_select_args="$sel_arg1,$sel_arg234,$sel_arg5,$sel_retv"
2557 if test "$curl_cv_func_select_args" = "unknown"; then
2558 AC_MSG_WARN([Cannot find proper types to use for select args])
2559 AC_MSG_WARN([HAVE_SELECT will not be defined])
2561 select_prev_IFS=$IFS; IFS=','
2562 set dummy `echo "$curl_cv_func_select_args" | sed 's/\*/\*/g'`
2563 IFS=$select_prev_IFS
2566 sel_qual_type_arg5=$[3]
2568 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG1, $[1],
2569 [Define to the type of arg 1 for select.])
2570 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG234, $[2],
2571 [Define to the type of args 2, 3 and 4 for select.])
2572 AC_DEFINE_UNQUOTED(SELECT_TYPE_RETV, $[4],
2573 [Define to the function return type for select.])
2577 case $prev_sh_opts in
2585 case "$sel_qual_type_arg5" in
2588 sel_type_arg5=`echo $sel_qual_type_arg5 | sed 's/^const //'`
2592 sel_type_arg5=$sel_qual_type_arg5
2596 AC_DEFINE_UNQUOTED(SELECT_QUAL_ARG5, $sel_qual_arg5,
2597 [Define to the type qualifier of arg 5 for select.])
2598 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG5, $sel_type_arg5,
2599 [Define to the type of arg 5 for select.])
2601 case $prev_sh_opts in
2609 AC_DEFINE_UNQUOTED(HAVE_SELECT, 1,
2610 [Define to 1 if you have the select function.])
2611 ac_cv_func_select="yes"
2617 # This is only a temporary fix. This macro is here to replace the broken one
2618 # delivered by the automake project (including the 1.9.6 release). As soon as
2619 # they ship a working version we SHOULD remove this work-around.
2621 AC_DEFUN([AM_MISSING_HAS_RUN],
2622 [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
2623 test x"${MISSING+set}" = xset || MISSING="\${SHELL} \"$am_aux_dir/missing\""
2624 # Use eval to expand $SHELL
2625 if eval "$MISSING --run true"; then
2626 am_missing_run="$MISSING --run "
2629 AC_MSG_WARN([`missing' script is too old or missing])
2634 dnl CURL_VERIFY_RUNTIMELIBS
2635 dnl -------------------------------------------------
2636 dnl Verify that the shared libs found so far can be used when running
2637 dnl programs, since otherwise the situation will create odd configure errors
2638 dnl that are misleading people.
2640 dnl Make sure this test is run BEFORE the first test in the script that
2641 dnl runs anything, which at the time of this writing is the AC_CHECK_SIZEOF
2642 dnl macro. It must also run AFTER all lib-checking macros are complete.
2644 AC_DEFUN([CURL_VERIFY_RUNTIMELIBS], [
2646 dnl this test is of course not sensible if we are cross-compiling!
2647 if test "x$cross_compiling" != xyes; then
2649 dnl just run a program to verify that the libs checked for previous to this
2650 dnl point also is available run-time!
2651 AC_MSG_CHECKING([run-time libs availability])
2658 AC_MSG_RESULT([fine]),
2659 AC_MSG_RESULT([failed])
2660 AC_MSG_ERROR([one or more libs available at link-time are not available run-time. Libs used at link-time: $LIBS])
2663 dnl if this test fails, configure has already stopped
2668 dnl CURL_CHECK_VARIADIC_MACROS
2669 dnl -------------------------------------------------
2670 dnl Check compiler support of variadic macros
2672 AC_DEFUN([CURL_CHECK_VARIADIC_MACROS], [
2673 AC_CACHE_CHECK([for compiler support of C99 variadic macro style],
2674 [curl_cv_variadic_macros_c99], [
2677 #define c99_vmacro3(first, ...) fun3(first, __VA_ARGS__)
2678 #define c99_vmacro2(first, ...) fun2(first, __VA_ARGS__)
2679 int fun3(int arg1, int arg2, int arg3);
2680 int fun2(int arg1, int arg2);
2681 int fun3(int arg1, int arg2, int arg3)
2682 { return arg1 + arg2 + arg3; }
2683 int fun2(int arg1, int arg2)
2684 { return arg1 + arg2; }
2686 int res3 = c99_vmacro3(1, 2, 3);
2687 int res2 = c99_vmacro2(1, 2);
2690 curl_cv_variadic_macros_c99="yes"
2692 curl_cv_variadic_macros_c99="no"
2695 case "$curl_cv_variadic_macros_c99" in
2697 AC_DEFINE_UNQUOTED(HAVE_VARIADIC_MACROS_C99, 1,
2698 [Define to 1 if compiler supports C99 variadic macro style.])
2701 AC_CACHE_CHECK([for compiler support of old gcc variadic macro style],
2702 [curl_cv_variadic_macros_gcc], [
2705 #define gcc_vmacro3(first, args...) fun3(first, args)
2706 #define gcc_vmacro2(first, args...) fun2(first, args)
2707 int fun3(int arg1, int arg2, int arg3);
2708 int fun2(int arg1, int arg2);
2709 int fun3(int arg1, int arg2, int arg3)
2710 { return arg1 + arg2 + arg3; }
2711 int fun2(int arg1, int arg2)
2712 { return arg1 + arg2; }
2714 int res3 = gcc_vmacro3(1, 2, 3);
2715 int res2 = gcc_vmacro2(1, 2);
2718 curl_cv_variadic_macros_gcc="yes"
2720 curl_cv_variadic_macros_gcc="no"
2723 case "$curl_cv_variadic_macros_gcc" in
2725 AC_DEFINE_UNQUOTED(HAVE_VARIADIC_MACROS_GCC, 1,
2726 [Define to 1 if compiler supports old gcc variadic macro style.])
2732 dnl CURL_CHECK_CA_BUNDLE
2733 dnl -------------------------------------------------
2734 dnl Check if a default ca-bundle should be used
2736 dnl regarding the paths this will scan:
2737 dnl /etc/ssl/certs/ca-certificates.crt Debian systems
2738 dnl /etc/pki/tls/certs/ca-bundle.crt Redhat and Mandriva
2739 dnl /usr/share/ssl/certs/ca-bundle.crt old(er) Redhat
2740 dnl /usr/local/share/certs/ca-root.crt FreeBSD
2741 dnl /etc/ssl/cert.pem OpenBSD
2742 dnl /etc/ssl/certs/ (ca path) SUSE
2744 AC_DEFUN([CURL_CHECK_CA_BUNDLE], [
2746 AC_MSG_CHECKING([default CA cert bundle/path])
2748 AC_ARG_WITH(ca-bundle,
2749 AC_HELP_STRING([--with-ca-bundle=FILE], [File name to use as CA bundle])
2750 AC_HELP_STRING([--without-ca-bundle], [Don't use a default CA bundle]),
2753 if test "x$want_ca" = "xyes"; then
2754 AC_MSG_ERROR([--with-ca-bundle=FILE requires a path to the CA bundle])
2757 [ want_ca="unset" ])
2758 AC_ARG_WITH(ca-path,
2759 AC_HELP_STRING([--with-ca-path=DIRECTORY], [Directory to use as CA path])
2760 AC_HELP_STRING([--without-ca-path], [Don't use a default CA path]),
2762 want_capath="$withval"
2763 if test "x$want_capath" = "xyes"; then
2764 AC_MSG_ERROR([--with-ca-path=DIRECTORY requires a path to the CA path directory])
2767 [ want_capath="unset"])
2769 if test "x$want_ca" != "xno" -a "x$want_ca" != "xunset" -a \
2770 "x$want_capath" != "xno" -a "x$want_capath" != "xunset"; then
2772 AC_MSG_ERROR([Can't specify both --with-ca-bundle and --with-ca-path.])
2773 elif test "x$want_ca" != "xno" -a "x$want_ca" != "xunset"; then
2774 dnl --with-ca-bundle given
2777 elif test "x$want_capath" != "xno" -a "x$want_capath" != "xunset"; then
2778 dnl --with-ca-path given
2779 if test "x$OPENSSL_ENABLED" != "x1"; then
2780 AC_MSG_ERROR([--with-ca-path only works with openSSL])
2782 capath="$want_capath"
2785 dnl neither of --with-ca-* given
2786 dnl first try autodetecting a CA bundle , then a CA path
2787 dnl both autodetections can be skipped by --without-ca-*
2790 if test "x$want_ca" = "xunset"; then
2791 dnl the path we previously would have installed the curl ca bundle
2792 dnl to, and thus we now check for an already existing cert in that place
2793 dnl in case we find no other
2794 if test "x$prefix" != xNONE; then
2795 cac="${prefix}/share/curl/curl-ca-bundle.crt"
2797 cac="$ac_default_prefix/share/curl/curl-ca-bundle.crt"
2800 for a in /etc/ssl/certs/ca-certificates.crt \
2801 /etc/pki/tls/certs/ca-bundle.crt \
2802 /usr/share/ssl/certs/ca-bundle.crt \
2803 /usr/local/share/certs/ca-root.crt \
2806 if test -f "$a"; then
2812 if test "x$want_capath" = "xunset" -a "x$ca" = "xno" -a \
2813 "x$OPENSSL_ENABLED" = "x1"; then
2814 for a in /etc/ssl/certs/; do
2815 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
2825 if test "x$ca" != "xno"; then
2826 CURL_CA_BUNDLE='"'$ca'"'
2827 AC_DEFINE_UNQUOTED(CURL_CA_BUNDLE, "$ca", [Location of default ca bundle])
2828 AC_SUBST(CURL_CA_BUNDLE)
2829 AC_MSG_RESULT([$ca])
2830 elif test "x$capath" != "xno"; then
2831 CURL_CA_PATH="\"$capath\""
2832 AC_DEFINE_UNQUOTED(CURL_CA_PATH, "$capath", [Location of default ca path])
2833 AC_MSG_RESULT([$capath (capath)])
2840 dnl DO_CURL_OFF_T_CHECK (TYPE, SIZE)
2841 dnl -------------------------------------------------
2842 dnl Internal macro for CURL_CONFIGURE_CURL_OFF_T
2844 AC_DEFUN([DO_CURL_OFF_T_CHECK], [
2845 AC_REQUIRE([CURL_INCLUDES_INTTYPES])dnl
2846 if test "$curl_typeof_curl_off_t" = "unknown" && test ! -z "$1"; then
2850 case AS_TR_SH([$1]) in
2852 tmp_includes="$curl_includes_inttypes"
2853 tmp_source="char f@<:@@:>@ = PRId64;"
2857 tmp_includes="$curl_includes_inttypes"
2858 tmp_source="char f@<:@@:>@ = PRId32;"
2862 tmp_includes="$curl_includes_inttypes"
2863 tmp_source="char f@<:@@:>@ = PRId16;"
2870 typedef $1 curl_off_t;
2871 typedef char dummy_arr[sizeof(curl_off_t) == $2 ? 1 : -1];
2877 if test -z "$tmp_fmt"; then
2878 curl_typeof_curl_off_t="$1"
2879 curl_sizeof_curl_off_t="$2"
2881 CURL_CHECK_DEF([$tmp_fmt], [$curl_includes_inttypes], [silent])
2882 AS_VAR_PUSHDEF([tmp_HaveFmtDef], [curl_cv_have_def_$tmp_fmt])dnl
2883 AS_VAR_PUSHDEF([tmp_FmtDef], [curl_cv_def_$tmp_fmt])dnl
2884 if test AS_VAR_GET(tmp_HaveFmtDef) = "yes"; then
2885 curl_format_curl_off_t=AS_VAR_GET(tmp_FmtDef)
2886 curl_typeof_curl_off_t="$1"
2887 curl_sizeof_curl_off_t="$2"
2889 AS_VAR_POPDEF([tmp_FmtDef])dnl
2890 AS_VAR_POPDEF([tmp_HaveFmtDef])dnl
2897 dnl DO_CURL_OFF_T_SUFFIX_CHECK (TYPE)
2898 dnl -------------------------------------------------
2899 dnl Internal macro for CURL_CONFIGURE_CURL_OFF_T
2901 AC_DEFUN([DO_CURL_OFF_T_SUFFIX_CHECK], [
2902 AC_REQUIRE([CURL_INCLUDES_INTTYPES])dnl
2903 AC_MSG_CHECKING([constant suffix string for curl_off_t])
2905 curl_suffix_curl_off_t="unknown"
2906 curl_suffix_curl_off_tu="unknown"
2908 case AS_TR_SH([$1]) in
2909 long_long | __longlong | __longlong_t)
2919 tst_suffixes="LL:i64::"
2922 tst_suffixes="L:i32::"
2925 tst_suffixes="L:i16::"
2928 AC_MSG_ERROR([unexpected data type $1])
2932 old_IFS=$IFS; IFS=':'
2933 for tmp_ssuf in $tst_suffixes ; do
2935 if test "x$curl_suffix_curl_off_t" = "xunknown"; then
2938 tmp_usuf="u$tmp_ssuf"
2941 tmp_usuf="U$tmp_ssuf"
2949 $curl_includes_inttypes
2960 curl_suffix_curl_off_t="$tmp_ssuf"
2961 curl_suffix_curl_off_tu="$tmp_usuf"
2967 if test "x$curl_suffix_curl_off_t" = "xunknown"; then
2968 AC_MSG_ERROR([cannot find constant suffix string for curl_off_t.])
2970 AC_MSG_RESULT([$curl_suffix_curl_off_t])
2971 AC_MSG_CHECKING([constant suffix string for unsigned curl_off_t])
2972 AC_MSG_RESULT([$curl_suffix_curl_off_tu])
2978 dnl CURL_CONFIGURE_CURL_OFF_T
2979 dnl -------------------------------------------------
2980 dnl Find out suitable curl_off_t data type definition and associated
2981 dnl items, and make the appropriate definitions used in template file
2982 dnl include/curl/curlbuild.h.in to properly configure the library.
2984 AC_DEFUN([CURL_CONFIGURE_CURL_OFF_T], [
2985 AC_REQUIRE([CURL_INCLUDES_INTTYPES])dnl
2987 AC_BEFORE([$0],[AC_SYS_LARGEFILE])dnl
2988 AC_BEFORE([$0],[CURL_CONFIGURE_REENTRANT])dnl
2989 AC_BEFORE([$0],[CURL_CHECK_AIX_ALL_SOURCE])dnl
2991 if test -z "$SED"; then
2992 AC_MSG_ERROR([SED not set. Cannot continue without SED being set.])
2995 AC_CHECK_SIZEOF(long)
2996 AC_CHECK_SIZEOF(void*)
2998 if test -z "$ac_cv_sizeof_long" ||
2999 test "$ac_cv_sizeof_long" -eq "0"; then
3000 AC_MSG_ERROR([cannot find out size of long.])
3002 if test -z "$ac_cv_sizeof_voidp" ||
3003 test "$ac_cv_sizeof_voidp" -eq "0"; then
3004 AC_MSG_ERROR([cannot find out size of void*.])
3011 if test "$ac_cv_sizeof_long" -eq "8" &&
3012 test "$ac_cv_sizeof_voidp" -ge "8"; then
3014 elif test "$ac_cv_sizeof_long" -eq "4" &&
3015 test "$ac_cv_sizeof_voidp" -ge "4"; then
3017 elif test "$ac_cv_sizeof_long" -eq "2" &&
3018 test "$ac_cv_sizeof_voidp" -ge "2"; then
3022 dnl DO_CURL_OFF_T_CHECK results are stored in next 3 vars
3024 curl_typeof_curl_off_t="unknown"
3025 curl_sizeof_curl_off_t="unknown"
3026 curl_format_curl_off_t="unknown"
3027 curl_format_curl_off_tu="unknown"
3029 if test "$curl_typeof_curl_off_t" = "unknown"; then
3030 AC_MSG_CHECKING([for 64-bit curl_off_t data type])
3038 DO_CURL_OFF_T_CHECK([$t8], [8])
3040 AC_MSG_RESULT([$curl_typeof_curl_off_t])
3042 if test "$curl_typeof_curl_off_t" = "unknown"; then
3043 AC_MSG_CHECKING([for 32-bit curl_off_t data type])
3049 DO_CURL_OFF_T_CHECK([$t4], [4])
3051 AC_MSG_RESULT([$curl_typeof_curl_off_t])
3053 if test "$curl_typeof_curl_off_t" = "unknown"; then
3054 AC_MSG_CHECKING([for 16-bit curl_off_t data type])
3060 DO_CURL_OFF_T_CHECK([$t2], [2])
3062 AC_MSG_RESULT([$curl_typeof_curl_off_t])
3064 if test "$curl_typeof_curl_off_t" = "unknown"; then
3065 AC_MSG_ERROR([cannot find data type for curl_off_t.])
3068 AC_MSG_CHECKING([size of curl_off_t])
3069 AC_MSG_RESULT([$curl_sizeof_curl_off_t])
3071 AC_MSG_CHECKING([formatting string directive for curl_off_t])
3072 if test "$curl_format_curl_off_t" != "unknown"; then
3073 x_pull_headers="yes"
3074 curl_format_curl_off_t=`echo "$curl_format_curl_off_t" | "$SED" 's/[["]]//g'`
3075 curl_format_curl_off_tu=`echo "$curl_format_curl_off_t" | "$SED" 's/i$/u/'`
3076 curl_format_curl_off_tu=`echo "$curl_format_curl_off_tu" | "$SED" 's/d$/u/'`
3077 curl_format_curl_off_tu=`echo "$curl_format_curl_off_tu" | "$SED" 's/D$/U/'`
3080 case AS_TR_SH([$curl_typeof_curl_off_t]) in
3081 long_long | __longlong | __longlong_t)
3082 curl_format_curl_off_t="lld"
3083 curl_format_curl_off_tu="llu"
3086 curl_format_curl_off_t="ld"
3087 curl_format_curl_off_tu="lu"
3090 curl_format_curl_off_t="d"
3091 curl_format_curl_off_tu="u"
3094 curl_format_curl_off_t="I64d"
3095 curl_format_curl_off_tu="I64u"
3098 curl_format_curl_off_t="I32d"
3099 curl_format_curl_off_tu="I32u"
3102 curl_format_curl_off_t="I16d"
3103 curl_format_curl_off_tu="I16u"
3106 AC_MSG_ERROR([cannot find print format string for curl_off_t.])
3110 AC_MSG_RESULT(["$curl_format_curl_off_t"])
3112 AC_MSG_CHECKING([formatting string directive for unsigned curl_off_t])
3113 AC_MSG_RESULT(["$curl_format_curl_off_tu"])
3115 DO_CURL_OFF_T_SUFFIX_CHECK([$curl_typeof_curl_off_t])
3117 if test "$x_pull_headers" = "yes"; then
3118 if test "x$ac_cv_header_sys_types_h" = "xyes"; then
3119 CURL_DEFINE_UNQUOTED([CURL_PULL_SYS_TYPES_H])
3121 if test "x$ac_cv_header_stdint_h" = "xyes"; then
3122 CURL_DEFINE_UNQUOTED([CURL_PULL_STDINT_H])
3124 if test "x$ac_cv_header_inttypes_h" = "xyes"; then
3125 CURL_DEFINE_UNQUOTED([CURL_PULL_INTTYPES_H])
3129 CURL_DEFINE_UNQUOTED([CURL_TYPEOF_CURL_OFF_T], [$curl_typeof_curl_off_t])
3130 CURL_DEFINE_UNQUOTED([CURL_FORMAT_CURL_OFF_T], ["$curl_format_curl_off_t"])
3131 CURL_DEFINE_UNQUOTED([CURL_FORMAT_CURL_OFF_TU], ["$curl_format_curl_off_tu"])
3132 CURL_DEFINE_UNQUOTED([CURL_FORMAT_OFF_T], ["%$curl_format_curl_off_t"])
3133 CURL_DEFINE_UNQUOTED([CURL_SIZEOF_CURL_OFF_T], [$curl_sizeof_curl_off_t])
3134 CURL_DEFINE_UNQUOTED([CURL_SUFFIX_CURL_OFF_T], [$curl_suffix_curl_off_t])
3135 CURL_DEFINE_UNQUOTED([CURL_SUFFIX_CURL_OFF_TU], [$curl_suffix_curl_off_tu])
3140 dnl CURL_CHECK_WIN32_LARGEFILE
3141 dnl -------------------------------------------------
3142 dnl Check if curl's WIN32 large file will be used
3144 AC_DEFUN([CURL_CHECK_WIN32_LARGEFILE], [
3145 AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
3146 AC_MSG_CHECKING([whether build target supports WIN32 file API])
3147 curl_win32_file_api="no"
3148 if test "$ac_cv_header_windows_h" = "yes"; then
3149 if test x"$enable_largefile" != "xno"; then
3153 #if !defined(_WIN32_WCE) && \
3154 (defined(__MINGW32__) || \
3155 (defined(_MSC_VER) && (defined(_WIN32) || defined(_WIN64))))
3158 WIN32 large file API not supported.
3162 curl_win32_file_api="win32_large_files"
3165 if test "$curl_win32_file_api" = "no"; then
3169 #if defined(_WIN32_WCE) || defined(__MINGW32__) || defined(_MSC_VER)
3172 WIN32 small file API not supported.
3176 curl_win32_file_api="win32_small_files"
3180 case "$curl_win32_file_api" in
3182 AC_MSG_RESULT([yes (large file enabled)])
3183 AC_DEFINE_UNQUOTED(USE_WIN32_LARGE_FILES, 1,
3184 [Define to 1 if you are building a Windows target with large file support.])
3187 AC_MSG_RESULT([yes (large file disabled)])
3188 AC_DEFINE_UNQUOTED(USE_WIN32_LARGE_FILES, 1,
3189 [Define to 1 if you are building a Windows target without large file support.])
3197 dnl CURL_CHECK_PKGCONFIG ($module)
3198 dnl ------------------------
3199 dnl search for the pkg-config tool (if not cross-compiling). Set the PKGCONFIG
3200 dnl variable to hold the path to it, or 'no' if not found/present.
3202 dnl If pkg-config is present, check that it has info about the $module or return
3206 AC_DEFUN([CURL_CHECK_PKGCONFIG], [
3207 if test x$cross_compiling != xyes; then
3208 dnl only do pkg-config magic when not cross-compiling
3209 AC_PATH_PROG( PKGCONFIG, pkg-config, no, $PATH:/usr/bin:/usr/local/bin)
3211 if test x$PKGCONFIG != xno; then
3212 AC_MSG_CHECKING([for $1 options with pkg-config])
3213 dnl ask pkg-config about $1
3214 $PKGCONFIG --exists $1
3215 if test "$?" -ne "0"; then
3216 dnl pkg-config does not have info about the given module! set the
3217 dnl variable to 'no'
3221 AC_MSG_RESULT([found])