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.
21 # $Id: acinclude.m4,v 1.1.1.1 2008-09-23 16:32:05 hoffman Exp $
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_LOCALTIME_R],
2606 dnl check for localtime_r
2607 AC_CHECK_FUNCS(localtime_r,[
2608 AC_MSG_CHECKING(whether localtime_r is declared)
2609 AC_EGREP_CPP(localtime_r,[
2611 #include <time.h>],[
2612 AC_MSG_RESULT(yes)],[
2614 AC_MSG_CHECKING(whether localtime_r with -D_REENTRANT is declared)
2615 AC_EGREP_CPP(localtime_r,[
2618 #include <time.h>],[
2619 AC_MSG_RESULT(yes)],
2620 AC_MSG_RESULT(no))])])
2624 dnl This function checks for strerror_r(). If it isn't found at first, it
2625 dnl retries with _THREAD_SAFE defined, as that is what AIX seems to require
2626 dnl in order to find this function.
2628 dnl If the function is found, it will then proceed to check how the function
2629 dnl actually works: glibc-style or POSIX-style.
2632 dnl char *strerror_r(int errnum, char *buf, size_t n);
2634 dnl What this one does is to return the error string (no surprises there),
2635 dnl but it doesn't usually copy anything into buf! The 'buf' and 'n'
2636 dnl parameters are only meant as an optional working area, in case strerror_r
2637 dnl needs it. A quick test on a few systems shows that it's generally not
2641 dnl int strerror_r(int errnum, char *buf, size_t n);
2643 AC_DEFUN([CURL_CHECK_STRERROR_R],
2645 AC_CHECK_FUNCS(strerror_r)
2647 if test "x$ac_cv_func_strerror_r" = "xyes"; then
2649 AC_MSG_CHECKING(whether strerror_r is declared)
2650 AC_EGREP_CPP(strerror_r,[
2652 #include <string.h>],[
2653 AC_MSG_RESULT(yes)],[
2655 AC_MSG_CHECKING(whether strerror_r with -D_REENTRANT is declared)
2656 AC_EGREP_CPP(strerror_r,[
2659 #include <string.h>],[
2660 AC_MSG_RESULT(yes)],
2662 AC_DEFINE(HAVE_NO_STRERROR_R_DECL, 1, [we have no strerror_r() proto])
2663 ) dnl with _THREAD_SAFE
2664 ]) dnl plain cpp for it
2666 dnl determine if this strerror_r() is glibc or POSIX
2667 AC_MSG_CHECKING([for a glibc strerror_r API])
2673 char buffer[1024]; /* big enough to play with */
2675 strerror_r(EACCES, buffer, sizeof(buffer));
2676 /* this should've returned a string */
2677 if(!string || !string[0])
2682 GLIBC_STRERROR_R="1"
2683 AC_DEFINE(HAVE_GLIBC_STRERROR_R, 1, [we have a glibc-style strerror_r()])
2684 AC_MSG_RESULT([yes]),
2685 AC_MSG_RESULT([no]),
2687 dnl Use an inferior method of strerror_r detection while cross-compiling
2689 #include <features.h>
2694 dnl looks like glibc, so assume a glibc-style strerror_r()
2695 GLIBC_STRERROR_R="1"
2696 AC_DEFINE(HAVE_GLIBC_STRERROR_R, 1, [we have a glibc-style strerror_r()])
2697 AC_MSG_RESULT([yes]),
2698 AC_MSG_NOTICE([cannot determine strerror_r() style: edit lib/config.h manually!])
2699 ) dnl while cross-compiling
2702 if test -z "$GLIBC_STRERROR_R"; then
2704 AC_MSG_CHECKING([for a POSIX strerror_r API])
2710 char buffer[1024]; /* big enough to play with */
2712 strerror_r(EACCES, buffer, sizeof(buffer));
2713 /* This should've returned zero, and written an error string in the
2715 if(!buffer[0] || error)
2720 AC_DEFINE(HAVE_POSIX_STRERROR_R, 1, [we have a POSIX-style strerror_r()])
2721 AC_MSG_RESULT([yes]),
2722 AC_MSG_RESULT([no]) ,
2723 dnl cross-compiling!
2724 AC_MSG_NOTICE([cannot determine strerror_r() style: edit lib/config.h manually!])
2727 fi dnl if not using glibc API
2729 fi dnl we have a strerror_r
2733 AC_DEFUN([CURL_CHECK_INET_NTOA_R],
2735 dnl determine if function definition for inet_ntoa_r exists.
2736 AC_CHECK_FUNCS(inet_ntoa_r,[
2737 AC_MSG_CHECKING(whether inet_ntoa_r is declared)
2738 AC_EGREP_CPP(inet_ntoa_r,[
2740 #include <arpa/inet.h>],[
2741 AC_DEFINE(HAVE_INET_NTOA_R_DECL, 1, [inet_ntoa_r() is declared])
2742 AC_MSG_RESULT(yes)],[
2744 AC_MSG_CHECKING(whether inet_ntoa_r with -D_REENTRANT is declared)
2745 AC_EGREP_CPP(inet_ntoa_r,[
2748 #include <arpa/inet.h>],[
2749 AC_DEFINE(HAVE_INET_NTOA_R_DECL, 1, [inet_ntoa_r() is declared])
2750 AC_MSG_RESULT(yes)],
2751 AC_MSG_RESULT(no))])])
2755 dnl CURL_CHECK_GETHOSTBYADDR_R
2756 dnl -------------------------------------------------
2757 dnl check number of arguments for gethostbyaddr_r, it
2758 dnl might take either 5, 7, or 8 arguments.
2760 AC_DEFUN([CURL_CHECK_GETHOSTBYADDR_R], [
2762 AC_MSG_CHECKING([for gethostbyaddr_r])
2764 AC_LANG_FUNC_LINK_TRY([gethostbyaddr_r])
2766 AC_MSG_RESULT([yes])
2767 tmp_cv_gethostbyaddr_r="yes"
2770 tmp_cv_gethostbyaddr_r="no"
2773 if test "$tmp_cv_gethostbyaddr_r" != "yes"; then
2774 AC_MSG_CHECKING([deeper for gethostbyaddr_r])
2781 AC_MSG_RESULT([yes])
2782 tmp_cv_gethostbyaddr_r="yes"
2784 AC_MSG_RESULT([but still no])
2785 tmp_cv_gethostbyaddr_r="no"
2789 if test "$tmp_cv_gethostbyaddr_r" = "yes"; then
2791 ac_cv_gethostbyaddr_r_args="unknown"
2793 AC_MSG_CHECKING([if gethostbyaddr_r takes 5 arguments])
2797 #include <sys/types.h>
2804 struct hostent_data hdata;
2806 rc = gethostbyaddr_r(address, length, type, &h, &hdata);
2809 AC_MSG_RESULT([yes])
2810 AC_DEFINE(HAVE_GETHOSTBYADDR_R_5, 1, [gethostbyaddr_r() takes 5 args])
2811 ac_cv_gethostbyaddr_r_args="5"
2816 if test "$ac_cv_gethostbyaddr_r_args" = "unknown"; then
2817 AC_MSG_CHECKING([if gethostbyaddr_r with -D_REENTRANT takes 5 arguments])
2822 #include <sys/types.h>
2829 struct hostent_data hdata;
2831 rc = gethostbyaddr_r(address, length, type, &h, &hdata);
2834 AC_MSG_RESULT([yes])
2835 AC_DEFINE(HAVE_GETHOSTBYADDR_R_5, 1, [gethostbyaddr_r() takes 5 args])
2836 ac_cv_gethostbyaddr_r_args="5"
2842 if test "$ac_cv_gethostbyaddr_r_args" = "unknown"; then
2843 AC_MSG_CHECKING([if gethostbyaddr_r takes 7 arguments])
2847 #include <sys/types.h>
2856 struct hostent * hp;
2857 hp = gethostbyaddr_r(address, length, type, &h,
2858 buffer, 8192, &h_errnop);
2861 AC_MSG_RESULT([yes])
2862 AC_DEFINE(HAVE_GETHOSTBYADDR_R_7, 1, [gethostbyaddr_r() takes 7 args])
2863 ac_cv_gethostbyaddr_r_args="7"
2869 if test "$ac_cv_gethostbyaddr_r_args" = "unknown"; then
2870 AC_MSG_CHECKING([if gethostbyaddr_r with -D_REENTRANT takes 7 arguments])
2875 #include <sys/types.h>
2884 struct hostent * hp;
2885 hp = gethostbyaddr_r(address, length, type, &h,
2886 buffer, 8192, &h_errnop);
2889 AC_MSG_RESULT([yes])
2890 AC_DEFINE(HAVE_GETHOSTBYADDR_R_7, 1, [gethostbyaddr_r() takes 7 args])
2891 ac_cv_gethostbyaddr_r_args="7"
2897 if test "$ac_cv_gethostbyaddr_r_args" = "unknown"; then
2898 AC_MSG_CHECKING([if gethostbyaddr_r takes 8 arguments])
2902 #include <sys/types.h>
2911 struct hostent * hp;
2913 rc = gethostbyaddr_r(address, length, type, &h,
2914 buffer, 8192, &hp, &h_errnop);
2917 AC_MSG_RESULT([yes])
2918 AC_DEFINE(HAVE_GETHOSTBYADDR_R_8, 1, [gethostbyaddr_r() takes 8 args])
2919 ac_cv_gethostbyaddr_r_args="8"
2925 if test "$ac_cv_gethostbyaddr_r_args" = "unknown"; then
2926 AC_MSG_CHECKING([if gethostbyaddr_r with -D_REENTRANT takes 8 arguments])
2931 #include <sys/types.h>
2940 struct hostent * hp;
2942 rc = gethostbyaddr_r(address, length, type, &h,
2943 buffer, 8192, &hp, &h_errnop);
2946 AC_MSG_RESULT([yes])
2947 AC_DEFINE(HAVE_GETHOSTBYADDR_R_8, 1, [gethostbyaddr_r() takes 8 args])
2948 ac_cv_gethostbyaddr_r_args="8"
2954 if test "$ac_cv_gethostbyaddr_r_args" = "unknown"; then
2955 AC_MSG_WARN([Cannot find out how to use gethostbyaddr_r])
2956 AC_MSG_WARN([HAVE_GETHOSTBYADDR_R will not be defined])
2957 ac_cv_func_gethostbyaddr_r="no"
2959 AC_DEFINE_UNQUOTED(HAVE_GETHOSTBYADDR_R, 1,
2960 [Define to 1 if you have the gethostbyaddr_r function.])
2961 ac_cv_func_gethostbyaddr_r="yes"
2965 ac_cv_func_gethostbyaddr_r="no"
2970 dnl CURL_CHECK_GETHOSTBYNAME_R
2971 dnl -------------------------------------------------
2972 dnl check number of arguments for gethostbyname_r, it
2973 dnl might take either 3, 5, or 6 arguments.
2975 AC_DEFUN([CURL_CHECK_GETHOSTBYNAME_R], [
2977 AC_MSG_CHECKING([for gethostbyname_r])
2979 AC_LANG_FUNC_LINK_TRY([gethostbyname_r])
2981 AC_MSG_RESULT([yes])
2982 tmp_cv_gethostbyname_r="yes"
2985 tmp_cv_gethostbyname_r="no"
2988 if test "$tmp_cv_gethostbyname_r" != "yes"; then
2989 AC_MSG_CHECKING([deeper for gethostbyname_r])
2996 AC_MSG_RESULT([yes])
2997 tmp_cv_gethostbyname_r="yes"
2999 AC_MSG_RESULT([but still no])
3000 tmp_cv_gethostbyname_r="no"
3004 if test "$tmp_cv_gethostbyname_r" = "yes"; then
3006 ac_cv_gethostbyname_r_args="unknown"
3008 AC_MSG_CHECKING([if gethostbyname_r takes 3 arguments])
3013 #include <sys/types.h>
3016 #define NULL (void *)0
3018 gethostbyname_r(const char *, struct hostent *,
3019 struct hostent_data *);
3021 struct hostent_data data;
3022 gethostbyname_r(NULL, NULL, NULL);
3025 AC_MSG_RESULT([yes])
3026 AC_DEFINE(HAVE_GETHOSTBYNAME_R_3, 1, [gethostbyname_r() takes 3 args])
3027 ac_cv_gethostbyname_r_args="3"
3032 if test "$ac_cv_gethostbyname_r_args" = "unknown"; then
3033 AC_MSG_CHECKING([if gethostbyname_r with -D_REENTRANT takes 3 arguments])
3039 #include <sys/types.h>
3042 #define NULL (void *)0
3044 gethostbyname_r(const char *, struct hostent *,
3045 struct hostent_data *);
3047 struct hostent_data data;
3048 gethostbyname_r(NULL, NULL, NULL);
3051 AC_MSG_RESULT([yes])
3052 AC_DEFINE(HAVE_GETHOSTBYNAME_R_3, 1, [gethostbyname_r() takes 3 args])
3053 ac_cv_gethostbyname_r_args="3"
3059 if test "$ac_cv_gethostbyname_r_args" = "unknown"; then
3060 AC_MSG_CHECKING([if gethostbyname_r takes 5 arguments])
3064 #include <sys/types.h>
3067 #define NULL (void *)0
3069 gethostbyname_r(const char *, struct hostent *,
3070 char *, int, int *);
3072 gethostbyname_r(NULL, NULL, NULL, 0, NULL);
3075 AC_MSG_RESULT([yes])
3076 AC_DEFINE(HAVE_GETHOSTBYNAME_R_5, 1, [gethostbyname_r() takes 5 args])
3077 ac_cv_gethostbyname_r_args="5"
3083 if test "$ac_cv_gethostbyname_r_args" = "unknown"; then
3084 AC_MSG_CHECKING([if gethostbyname_r with -D_REENTRANT takes 5 arguments])
3089 #include <sys/types.h>
3092 #define NULL (void *)0
3094 gethostbyname_r(const char *, struct hostent *,
3095 char *, int, int *);
3097 gethostbyname_r(NULL, NULL, NULL, 0, NULL);
3100 AC_MSG_RESULT([yes])
3101 AC_DEFINE(HAVE_GETHOSTBYNAME_R_5, 1, [gethostbyname_r() takes 5 args])
3102 ac_cv_gethostbyname_r_args="5"
3108 if test "$ac_cv_gethostbyname_r_args" = "unknown"; then
3109 AC_MSG_CHECKING([if gethostbyname_r takes 6 arguments])
3113 #include <sys/types.h>
3116 #define NULL (void *)0
3118 gethostbyname_r(const char *, struct hostent *,
3119 char *, size_t, struct hostent **, int *);
3121 gethostbyname_r(NULL, NULL, NULL, 0, NULL, NULL);
3124 AC_MSG_RESULT([yes])
3125 AC_DEFINE(HAVE_GETHOSTBYNAME_R_6, 1, [gethostbyname_r() takes 6 args])
3126 ac_cv_gethostbyname_r_args="6"
3132 if test "$ac_cv_gethostbyname_r_args" = "unknown"; then
3133 AC_MSG_CHECKING([if gethostbyname_r with -D_REENTRANT takes 6 arguments])
3138 #include <sys/types.h>
3141 #define NULL (void *)0
3143 gethostbyname_r(const char *, struct hostent *,
3144 char *, size_t, struct hostent **, int *);
3146 gethostbyname_r(NULL, NULL, NULL, 0, NULL, NULL);
3149 AC_MSG_RESULT([yes])
3150 AC_DEFINE(HAVE_GETHOSTBYNAME_R_6, 1, [gethostbyname_r() takes 6 args])
3151 ac_cv_gethostbyname_r_args="6"
3157 if test "$ac_cv_gethostbyname_r_args" = "unknown"; then
3158 AC_MSG_WARN([Cannot find out how to use gethostbyname_r])
3159 AC_MSG_WARN([HAVE_GETHOSTBYNAME_R will not be defined])
3160 ac_cv_func_gethostbyname_r="no"
3162 AC_DEFINE_UNQUOTED(HAVE_GETHOSTBYNAME_R, 1,
3163 [Define to 1 if you have the gethostbyname_r function.])
3164 ac_cv_func_gethostbyname_r="yes"
3168 ac_cv_func_gethostbyname_r="no"
3173 dnl **********************************************************************
3174 dnl CURL_DETECT_ICC ([ACTION-IF-YES])
3176 dnl check if this is the Intel ICC compiler, and if so run the ACTION-IF-YES
3177 dnl sets the $ICC variable to "yes" or "no"
3178 dnl **********************************************************************
3179 AC_DEFUN([CURL_DETECT_ICC],
3182 AC_MSG_CHECKING([for icc in use])
3183 if test "$GCC" = "yes"; then
3184 dnl check if this is icc acting as gcc in disguise
3185 AC_EGREP_CPP([^__INTEL_COMPILER], [__INTEL_COMPILER],
3186 dnl action if the text is found, this it has not been replaced by the
3189 dnl the text was not found, it was replaced by the cpp
3191 AC_MSG_RESULT([yes])
3195 if test "$ICC" = "no"; then
3201 dnl We create a function for detecting which compiler we use and then set as
3202 dnl pendantic compiler options as possible for that particular compiler. The
3203 dnl options are only used for debug-builds.
3205 AC_DEFUN([CURL_CC_DEBUG_OPTS],
3207 if test "z$ICC" = "z"; then
3211 if test "$GCC" = "yes"; then
3213 dnl figure out gcc version!
3214 AC_MSG_CHECKING([gcc version])
3215 gccver=`$CC -dumpversion`
3216 num1=`echo $gccver | cut -d . -f1`
3217 num2=`echo $gccver | cut -d . -f2`
3218 gccnum=`(expr $num1 "*" 100 + $num2) 2>/dev/null`
3219 AC_MSG_RESULT($gccver)
3221 if test "$ICC" = "yes"; then
3222 dnl this is icc, not gcc.
3224 dnl ICC warnings we ignore:
3225 dnl * 269 warns on our "%Od" printf formatters for curl_off_t output:
3226 dnl "invalid format string conversion"
3227 dnl * 279 warns on static conditions in while expressions
3228 dnl * 981 warns on "operands are evaluated in unspecified order"
3229 dnl * 1418 "external definition with no prior declaration"
3230 dnl * 1419 warns on "external declaration in primary source file"
3231 dnl which we know and do on purpose.
3233 WARN="-wd279,269,981,1418,1419"
3235 if test "$gccnum" -gt "600"; then
3236 dnl icc 6.0 and older doesn't have the -Wall flag
3240 dnl this is a set of options we believe *ALL* gcc versions support:
3241 WARN="-W -Wall -Wwrite-strings -pedantic -Wpointer-arith -Wnested-externs -Winline -Wmissing-prototypes"
3243 dnl -Wcast-align is a bit too annoying on all gcc versions ;-)
3245 if test "$gccnum" -ge "207"; then
3246 dnl gcc 2.7 or later
3247 WARN="$WARN -Wmissing-declarations"
3250 if test "$gccnum" -gt "295"; then
3251 dnl only if the compiler is newer than 2.95 since we got lots of
3252 dnl "`_POSIX_C_SOURCE' is not defined" in system headers with
3253 dnl gcc 2.95.4 on FreeBSD 4.9!
3254 WARN="$WARN -Wundef -Wno-long-long -Wsign-compare -Wshadow -Wno-multichar"
3257 if test "$gccnum" -ge "296"; then
3258 dnl gcc 2.96 or later
3259 WARN="$WARN -Wfloat-equal"
3262 if test "$gccnum" -gt "296"; then
3263 dnl this option does not exist in 2.96
3264 WARN="$WARN -Wno-format-nonliteral"
3267 dnl -Wunreachable-code seems totally unreliable on my gcc 3.3.2 on
3268 dnl on i686-Linux as it gives us heaps with false positives.
3269 dnl Also, on gcc 4.0.X it is totally unbearable and complains all
3270 dnl over making it unusable for generic purposes. Let's not use it.
3272 if test "$gccnum" -ge "303"; then
3273 dnl gcc 3.3 and later
3274 WARN="$WARN -Wendif-labels -Wstrict-prototypes"
3277 if test "$gccnum" -ge "304"; then
3278 # try these on gcc 3.4
3279 WARN="$WARN -Wdeclaration-after-statement"
3282 for flag in $CPPFLAGS; do
3285 dnl Include path, provide a -isystem option for the same dir
3286 dnl to prevent warnings in those dirs. The -isystem was not very
3287 dnl reliable on earlier gcc versions.
3288 add=`echo $flag | sed 's/^-I/-isystem /g'`
3296 CFLAGS="$CFLAGS $WARN"
3298 AC_MSG_NOTICE([Added this set of compiler options: $WARN])
3302 AC_MSG_NOTICE([Added no extra compiler options])
3306 dnl strip off optimizer flags
3308 for flag in $CFLAGS; do
3311 dnl echo "cut off $flag"
3314 NEWFLAGS="$NEWFLAGS $flag"
3324 # This is only a temporary fix. This macro is here to replace the broken one
3325 # delivered by the automake project (including the 1.9.6 release). As soon as
3326 # they ship a working version we SHOULD remove this work-around.
3328 AC_DEFUN([AM_MISSING_HAS_RUN],
3329 [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
3330 test x"${MISSING+set}" = xset || MISSING="\${SHELL} \"$am_aux_dir/missing\""
3331 # Use eval to expand $SHELL
3332 if eval "$MISSING --run true"; then
3333 am_missing_run="$MISSING --run "
3336 AC_MSG_WARN([`missing' script is too old or missing])
3341 dnl CURL_VERIFY_RUNTIMELIBS
3342 dnl -------------------------------------------------
3343 dnl Verify that the shared libs found so far can be used when running
3344 dnl programs, since otherwise the situation will create odd configure errors
3345 dnl that are misleading people.
3347 dnl Make sure this test is run BEFORE the first test in the script that
3348 dnl runs anything, which at the time of this writing is the AC_CHECK_SIZEOF
3349 dnl macro. It must also run AFTER all lib-checking macros are complete.
3351 AC_DEFUN([CURL_VERIFY_RUNTIMELIBS], [
3353 dnl this test is of course not sensible if we are cross-compiling!
3354 if test "x$cross_compiling" != xyes; then
3356 dnl just run a program to verify that the libs checked for previous to this
3357 dnl point also is available run-time!
3358 AC_MSG_CHECKING([run-time libs availability])
3365 AC_MSG_RESULT([fine]),
3366 AC_MSG_RESULT([failed])
3367 AC_MSG_ERROR([one or more libs available at link-time are not available run-time. Libs used at link-time: $LIBS])
3370 dnl if this test fails, configure has already stopped
3375 dnl CURL_CHECK_VARIADIC_MACROS
3376 dnl -------------------------------------------------
3377 dnl Check compiler support of variadic macros
3379 AC_DEFUN([CURL_CHECK_VARIADIC_MACROS], [
3380 AC_CACHE_CHECK([for compiler support of C99 variadic macro style],
3381 [curl_cv_variadic_macros_c99], [
3384 #define c99_vmacro3(first, ...) fun3(first, __VA_ARGS__)
3385 #define c99_vmacro2(first, ...) fun2(first, __VA_ARGS__)
3386 int fun3(int arg1, int arg2, int arg3);
3387 int fun2(int arg1, int arg2);
3388 int fun3(int arg1, int arg2, int arg3)
3389 { return arg1 + arg2 + arg3; }
3390 int fun2(int arg1, int arg2)
3391 { return arg1 + arg2; }
3393 int res3 = c99_vmacro3(1, 2, 3);
3394 int res2 = c99_vmacro2(1, 2);
3397 curl_cv_variadic_macros_c99="yes"
3399 curl_cv_variadic_macros_c99="no"
3402 case "$curl_cv_variadic_macros_c99" in
3404 AC_DEFINE_UNQUOTED(HAVE_VARIADIC_MACROS_C99, 1,
3405 [Define to 1 if compiler supports C99 variadic macro style.])
3408 AC_CACHE_CHECK([for compiler support of old gcc variadic macro style],
3409 [curl_cv_variadic_macros_gcc], [
3412 #define gcc_vmacro3(first, args...) fun3(first, args)
3413 #define gcc_vmacro2(first, args...) fun2(first, args)
3414 int fun3(int arg1, int arg2, int arg3);
3415 int fun2(int arg1, int arg2);
3416 int fun3(int arg1, int arg2, int arg3)
3417 { return arg1 + arg2 + arg3; }
3418 int fun2(int arg1, int arg2)
3419 { return arg1 + arg2; }
3421 int res3 = gcc_vmacro3(1, 2, 3);
3422 int res2 = gcc_vmacro2(1, 2);
3425 curl_cv_variadic_macros_gcc="yes"
3427 curl_cv_variadic_macros_gcc="no"
3430 case "$curl_cv_variadic_macros_gcc" in
3432 AC_DEFINE_UNQUOTED(HAVE_VARIADIC_MACROS_GCC, 1,
3433 [Define to 1 if compiler supports old gcc variadic macro style.])
3439 dnl CURL_CHECK_CA_BUNDLE
3440 dnl -------------------------------------------------
3441 dnl Check if a default ca-bundle should be used
3443 dnl regarding the paths this will scan:
3444 dnl /etc/ssl/certs/ca-certificates.crt Debian systems
3445 dnl /etc/pki/tls/certs/ca-bundle.crt Redhat and Mandriva
3446 dnl /usr/share/ssl/certs/ca-bundle.crt old(er) Redhat
3447 dnl /etc/ssl/certs/ (ca path) SUSE
3449 AC_DEFUN([CURL_CHECK_CA_BUNDLE], [
3451 AC_MSG_CHECKING([default CA cert bundle/path])
3453 AC_ARG_WITH(ca-bundle,
3454 AC_HELP_STRING([--with-ca-bundle=FILE], [File name to use as CA bundle])
3455 AC_HELP_STRING([--without-ca-bundle], [Don't use a default CA bundle]),
3458 if test "x$want_ca" = "xyes"; then
3459 AC_MSG_ERROR([--with-ca-bundle=FILE requires a path to the CA bundle])
3462 [ want_ca="unset" ])
3463 AC_ARG_WITH(ca-path,
3464 AC_HELP_STRING([--with-ca-path=DIRECTORY], [Directory to use as CA path])
3465 AC_HELP_STRING([--without-ca-path], [Don't use a default CA path]),
3467 want_capath="$withval"
3468 if test "x$want_capath" = "xyes"; then
3469 AC_MSG_ERROR([--with-ca-path=DIRECTORY requires a path to the CA path directory])
3472 [ want_capath="unset"])
3474 if test "x$want_ca" != "xno" -a "x$want_ca" != "xunset" -a \
3475 "x$want_capath" != "xno" -a "x$want_capath" != "xunset"; then
3477 AC_MSG_ERROR([Can't specify both --with-ca-bundle and --with-ca-path.])
3478 elif test "x$want_ca" != "xno" -a "x$want_ca" != "xunset"; then
3479 dnl --with-ca-bundle given
3482 elif test "x$want_capath" != "xno" -a "x$want_capath" != "xunset"; then
3483 dnl --with-ca-path given
3484 if test "x$OPENSSL_ENABLED" != "x1"; then
3485 AC_MSG_ERROR([--with-ca-path only works with openSSL])
3487 capath="$want_capath"
3490 dnl neither of --with-ca-* given
3491 dnl first try autodetecting a CA bundle , then a CA path
3492 dnl both autodetections can be skipped by --without-ca-*
3495 if test "x$want_ca" = "xunset"; then
3496 dnl the path we previously would have installed the curl ca bundle
3497 dnl to, and thus we now check for an already existing cert in that place
3498 dnl in case we find no other
3499 if test "x$prefix" != xNONE; then
3500 cac="${prefix}/share/curl/curl-ca-bundle.crt"
3502 cac="$ac_default_prefix/share/curl/curl-ca-bundle.crt"
3505 for a in /etc/ssl/certs/ca-certificates.crt \
3506 /etc/pki/tls/certs/ca-bundle.crt \
3507 /usr/share/ssl/certs/ca-bundle.crt \
3509 if test -f "$a"; then
3515 if test "x$want_capath" = "xunset" -a "x$ca" = "xno" -a \
3516 "x$OPENSSL_ENABLED" = "x1"; then
3517 for a in /etc/ssl/certs/; do
3518 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
3528 if test "x$ca" != "xno"; then
3529 CURL_CA_BUNDLE='"'$ca'"'
3530 AC_DEFINE_UNQUOTED(CURL_CA_BUNDLE, "$ca", [Location of default ca bundle])
3531 AC_SUBST(CURL_CA_BUNDLE)
3532 AC_MSG_RESULT([$ca])
3533 elif test "x$capath" != "xno"; then
3534 CURL_CA_PATH="\"$capath\""
3535 AC_DEFINE_UNQUOTED(CURL_CA_PATH, "$capath", [Location of default ca path])
3536 AC_MSG_RESULT([$capath (capath)])
3543 dnl CURL_DEFINE_UNQUOTED (VARIABLE, [VALUE])
3544 dnl -------------------------------------------------
3545 dnl Like AC_DEFINE_UNQUOTED this macro will define a C preprocessor
3546 dnl symbol that can be further used in custom template configuration
3547 dnl files. This macro, unlike AC_DEFINE_UNQUOTED, does not use a third
3548 dnl argument for the description. Symbol definitions done with this
3549 dnl macro are intended to be exclusively used in handcrafted *.h.in
3550 dnl template files. Contrary to what AC_DEFINE_UNQUOTED does, this one
3551 dnl prevents autoheader generation and insertion of symbol template
3552 dnl stub and definition into the first configuration header file. Do
3553 dnl not use this macro as a replacement for AC_DEFINE_UNQUOTED, each
3554 dnl one serves different functional needs.
3556 AC_DEFUN([CURL_DEFINE_UNQUOTED], [
3557 cat >>confdefs.h <<_EOF
3558 [@%:@define] $1 ifelse($#, 2, [$2], 1)
3563 dnl CURL_INCLUDES_INTTYPES
3564 dnl -------------------------------------------------
3565 dnl Set up variable with list of headers that must be
3566 dnl included when inttypes.h is to be included.
3568 AC_DEFUN([CURL_INCLUDES_INTTYPES], [
3569 curl_includes_inttypes="\
3570 /* includes start */
3571 #ifdef HAVE_SYS_TYPES_H
3572 # include <sys/types.h>
3574 #ifdef HAVE_STDINT_H
3575 # include <stdint.h>
3577 #ifdef HAVE_INTTYPES_H
3578 # include <inttypes.h>
3582 sys/types.h stdint.h inttypes.h,
3583 [], [], [$curl_includes_inttypes])
3587 dnl CURL_CONFIGURE_LONG
3588 dnl -------------------------------------------------
3589 dnl Find out the size of long as reported by sizeof() and define
3590 dnl CURL_SIZEOF_LONG as appropriate to be used in template file
3591 dnl include/curl/curlbuild.h.in to properly configure the library.
3592 dnl The size of long is a build time characteristic and as such
3593 dnl must be recorded in curlbuild.h
3595 AC_DEFUN([CURL_CONFIGURE_LONG], [
3596 if test -z "$ac_cv_sizeof_long" ||
3597 test "$ac_cv_sizeof_long" -eq "0"; then
3598 AC_MSG_ERROR([cannot find out size of long.])
3600 CURL_DEFINE_UNQUOTED([CURL_SIZEOF_LONG], [$ac_cv_sizeof_long])
3604 dnl DO_CURL_OFF_T_CHECK (TYPE, SIZE)
3605 dnl -------------------------------------------------
3606 dnl Internal macro for CURL_CONFIGURE_CURL_OFF_T
3608 AC_DEFUN([DO_CURL_OFF_T_CHECK], [
3609 AC_REQUIRE([CURL_INCLUDES_INTTYPES])dnl
3610 if test "$curl_typeof_curl_off_t" = "unknown" && test ! -z "$1"; then
3614 case AS_TR_SH([$1]) in
3616 tmp_includes="$curl_includes_inttypes"
3617 tmp_source="char f@<:@@:>@ = PRId64;"
3621 tmp_includes="$curl_includes_inttypes"
3622 tmp_source="char f@<:@@:>@ = PRId32;"
3626 tmp_includes="$curl_includes_inttypes"
3627 tmp_source="char f@<:@@:>@ = PRId16;"
3634 typedef $1 curl_off_t;
3635 typedef char dummy_arr[sizeof(curl_off_t) == $2 ? 1 : -1];
3641 if test -z "$tmp_fmt"; then
3642 curl_typeof_curl_off_t="$1"
3643 curl_sizeof_curl_off_t="$2"
3645 CURL_CHECK_DEF([$tmp_fmt], [$curl_includes_inttypes], [silent])
3646 AS_VAR_PUSHDEF([tmp_HaveFmtDef], [curl_cv_have_def_$tmp_fmt])dnl
3647 AS_VAR_PUSHDEF([tmp_FmtDef], [curl_cv_def_$tmp_fmt])dnl
3648 if test AS_VAR_GET(tmp_HaveFmtDef) = "yes"; then
3649 curl_format_curl_off_t=AS_VAR_GET(tmp_FmtDef)
3650 curl_typeof_curl_off_t="$1"
3651 curl_sizeof_curl_off_t="$2"
3653 AS_VAR_POPDEF([tmp_FmtDef])dnl
3654 AS_VAR_POPDEF([tmp_HaveFmtDef])dnl
3661 dnl DO_CURL_OFF_T_SUFFIX_CHECK (TYPE)
3662 dnl -------------------------------------------------
3663 dnl Internal macro for CURL_CONFIGURE_CURL_OFF_T
3665 AC_DEFUN([DO_CURL_OFF_T_SUFFIX_CHECK], [
3666 AC_REQUIRE([CURL_INCLUDES_INTTYPES])dnl
3667 AC_MSG_CHECKING([constant suffix string for curl_off_t])
3669 curl_suffix_curl_off_t="unknown"
3670 curl_suffix_curl_off_tu="unknown"
3672 case AS_TR_SH([$1]) in
3673 long_long | __longlong | __longlong_t)
3683 tst_suffixes="LL:i64::"
3686 tst_suffixes="L:i32::"
3689 tst_suffixes="L:i16::"
3692 AC_MSG_ERROR([unexpected data type $1])
3696 old_IFS=$IFS; IFS=':'
3697 for tmp_ssuf in $tst_suffixes ; do
3699 if test "x$curl_suffix_curl_off_t" = "xunknown"; then
3702 tmp_usuf="u$tmp_ssuf"
3705 tmp_usuf="U$tmp_ssuf"
3713 $curl_includes_inttypes
3724 curl_suffix_curl_off_t="$tmp_ssuf"
3725 curl_suffix_curl_off_tu="$tmp_usuf"
3731 if test "x$curl_suffix_curl_off_t" = "xunknown"; then
3732 AC_MSG_ERROR([cannot find constant suffix string for curl_off_t.])
3734 AC_MSG_RESULT([$curl_suffix_curl_off_t])
3735 AC_MSG_CHECKING([constant suffix string for unsigned curl_off_t])
3736 AC_MSG_RESULT([$curl_suffix_curl_off_tu])
3742 dnl CURL_CONFIGURE_CURL_OFF_T
3743 dnl -------------------------------------------------
3744 dnl Find out suitable curl_off_t data type definition and associated
3745 dnl items, and make the appropriate definitions used in template file
3746 dnl include/curl/curlbuild.h.in to properly configure the library.
3748 AC_DEFUN([CURL_CONFIGURE_CURL_OFF_T], [
3749 AC_REQUIRE([CURL_INCLUDES_INTTYPES])dnl
3751 AC_BEFORE([$0],[AC_SYS_LARGEFILE])dnl
3752 AC_BEFORE([$0],[CURL_CONFIGURE_REENTRANT])dnl
3753 AC_BEFORE([$0],[CURL_CHECK_AIX_ALL_SOURCE])dnl
3755 if test -z "$SED"; then
3756 AC_MSG_ERROR([SED not set. Cannot continue without SED being set.])
3759 AC_CHECK_SIZEOF(long)
3760 AC_CHECK_SIZEOF(void*)
3762 if test -z "$ac_cv_sizeof_long" ||
3763 test "$ac_cv_sizeof_long" -eq "0"; then
3764 AC_MSG_ERROR([cannot find out size of long.])
3766 if test -z "$ac_cv_sizeof_voidp" ||
3767 test "$ac_cv_sizeof_voidp" -eq "0"; then
3768 AC_MSG_ERROR([cannot find out size of void*.])
3775 if test "$ac_cv_sizeof_long" -eq "8" &&
3776 test "$ac_cv_sizeof_voidp" -ge "8"; then
3778 elif test "$ac_cv_sizeof_long" -eq "4" &&
3779 test "$ac_cv_sizeof_voidp" -ge "4"; then
3781 elif test "$ac_cv_sizeof_long" -eq "2" &&
3782 test "$ac_cv_sizeof_voidp" -ge "2"; then
3786 dnl DO_CURL_OFF_T_CHECK results are stored in next 3 vars
3788 curl_typeof_curl_off_t="unknown"
3789 curl_sizeof_curl_off_t="unknown"
3790 curl_format_curl_off_t="unknown"
3791 curl_format_curl_off_tu="unknown"
3793 if test "$curl_typeof_curl_off_t" = "unknown"; then
3794 AC_MSG_CHECKING([for 64-bit curl_off_t data type])
3802 DO_CURL_OFF_T_CHECK([$t8], [8])
3804 AC_MSG_RESULT([$curl_typeof_curl_off_t])
3806 if test "$curl_typeof_curl_off_t" = "unknown"; then
3807 AC_MSG_CHECKING([for 32-bit curl_off_t data type])
3813 DO_CURL_OFF_T_CHECK([$t4], [4])
3815 AC_MSG_RESULT([$curl_typeof_curl_off_t])
3817 if test "$curl_typeof_curl_off_t" = "unknown"; then
3818 AC_MSG_CHECKING([for 16-bit curl_off_t data type])
3824 DO_CURL_OFF_T_CHECK([$t2], [2])
3826 AC_MSG_RESULT([$curl_typeof_curl_off_t])
3828 if test "$curl_typeof_curl_off_t" = "unknown"; then
3829 AC_MSG_ERROR([cannot find data type for curl_off_t.])
3832 AC_MSG_CHECKING([size of curl_off_t])
3833 AC_MSG_RESULT([$curl_sizeof_curl_off_t])
3835 AC_MSG_CHECKING([formatting string directive for curl_off_t])
3836 if test "$curl_format_curl_off_t" != "unknown"; then
3837 x_pull_headers="yes"
3838 curl_format_curl_off_t=`echo "$curl_format_curl_off_t" | "$SED" 's/[["]]//g'`
3839 curl_format_curl_off_tu=`echo "$curl_format_curl_off_t" | "$SED" 's/i$/u/'`
3840 curl_format_curl_off_tu=`echo "$curl_format_curl_off_tu" | "$SED" 's/d$/u/'`
3841 curl_format_curl_off_tu=`echo "$curl_format_curl_off_tu" | "$SED" 's/D$/U/'`
3844 case AS_TR_SH([$curl_typeof_curl_off_t]) in
3845 long_long | __longlong | __longlong_t)
3846 curl_format_curl_off_t="lld"
3847 curl_format_curl_off_tu="llu"
3850 curl_format_curl_off_t="ld"
3851 curl_format_curl_off_tu="lu"
3854 curl_format_curl_off_t="d"
3855 curl_format_curl_off_tu="u"
3858 curl_format_curl_off_t="I64d"
3859 curl_format_curl_off_tu="I64u"
3862 curl_format_curl_off_t="I32d"
3863 curl_format_curl_off_tu="I32u"
3866 curl_format_curl_off_t="I16d"
3867 curl_format_curl_off_tu="I16u"
3870 AC_MSG_ERROR([cannot find print format string for curl_off_t.])
3874 AC_MSG_RESULT(["$curl_format_curl_off_t"])
3876 AC_MSG_CHECKING([formatting string directive for unsigned curl_off_t])
3877 AC_MSG_RESULT(["$curl_format_curl_off_tu"])
3879 DO_CURL_OFF_T_SUFFIX_CHECK([$curl_typeof_curl_off_t])
3881 if test "$x_pull_headers" = "yes"; then
3882 if test "x$ac_cv_header_sys_types_h" = "xyes"; then
3883 CURL_DEFINE_UNQUOTED([CURL_PULL_SYS_TYPES_H])
3885 if test "x$ac_cv_header_stdint_h" = "xyes"; then
3886 CURL_DEFINE_UNQUOTED([CURL_PULL_STDINT_H])
3888 if test "x$ac_cv_header_inttypes_h" = "xyes"; then
3889 CURL_DEFINE_UNQUOTED([CURL_PULL_INTTYPES_H])
3893 CURL_DEFINE_UNQUOTED([CURL_TYPEOF_CURL_OFF_T], [$curl_typeof_curl_off_t])
3894 CURL_DEFINE_UNQUOTED([CURL_FORMAT_CURL_OFF_T], ["$curl_format_curl_off_t"])
3895 CURL_DEFINE_UNQUOTED([CURL_FORMAT_CURL_OFF_TU], ["$curl_format_curl_off_tu"])
3896 CURL_DEFINE_UNQUOTED([CURL_FORMAT_OFF_T], ["%$curl_format_curl_off_t"])
3897 CURL_DEFINE_UNQUOTED([CURL_SIZEOF_CURL_OFF_T], [$curl_sizeof_curl_off_t])
3898 CURL_DEFINE_UNQUOTED([CURL_SUFFIX_CURL_OFF_T], [$curl_suffix_curl_off_t])
3899 CURL_DEFINE_UNQUOTED([CURL_SUFFIX_CURL_OFF_TU], [$curl_suffix_curl_off_tu])
3904 dnl CURL_CHECK_WIN32_LARGEFILE
3905 dnl -------------------------------------------------
3906 dnl Check if curl's WIN32 large file will be used
3908 AC_DEFUN([CURL_CHECK_WIN32_LARGEFILE], [
3909 AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
3910 AC_MSG_CHECKING([whether build target supports WIN32 file API])
3911 curl_win32_file_api="no"
3912 if test "$ac_cv_header_windows_h" = "yes"; then
3913 if test x"$enable_largefile" != "xno"; then
3917 #if !defined(_WIN32_WCE) && \
3918 (defined(__MINGW32__) || \
3919 (defined(_MSC_VER) && (defined(_WIN32) || defined(_WIN64))))
3922 WIN32 large file API not supported.
3926 curl_win32_file_api="win32_large_files"
3929 if test "$curl_win32_file_api" = "no"; then
3933 #if defined(_WIN32_WCE) || defined(__MINGW32__) || defined(_MSC_VER)
3936 WIN32 small file API not supported.
3940 curl_win32_file_api="win32_small_files"
3944 case "$curl_win32_file_api" in
3946 AC_MSG_RESULT([yes (large file enabled)])
3947 AC_DEFINE_UNQUOTED(USE_WIN32_LARGE_FILES, 1,
3948 [Define to 1 if you are building a Windows target with large file support.])
3951 AC_MSG_RESULT([yes (large file disabled)])
3952 AC_DEFINE_UNQUOTED(USE_WIN32_LARGE_FILES, 1,
3953 [Define to 1 if you are building a Windows target without large file support.])