Merge branch 'imap' of https://github.com/bnoordhuis/curl into bnoordhuis-imap
[platform/upstream/curl.git] / acinclude.m4
1 #***************************************************************************
2 #                                  _   _ ____  _
3 #  Project                     ___| | | |  _ \| |
4 #                             / __| | | | |_) | |
5 #                            | (__| |_| |  _ <| |___
6 #                             \___|\___/|_| \_\_____|
7 #
8 # Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
9 #
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.
13 #
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.
17 #
18 # This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
19 # KIND, either express or implied.
20 #
21 #***************************************************************************
22
23
24 dnl CURL_CHECK_DEF (SYMBOL, [INCLUDES], [SILENT])
25 dnl -------------------------------------------------
26 dnl Use the C preprocessor to find out if the given object-style symbol
27 dnl is defined and get its expansion. This macro will not use default
28 dnl includes even if no INCLUDES argument is given. This macro will run
29 dnl silently when invoked with three arguments. If the expansion would
30 dnl result in a set of double-quoted strings the returned expansion will
31 dnl actually be a single double-quoted string concatenating all them.
32
33 AC_DEFUN([CURL_CHECK_DEF], [
34   AS_VAR_PUSHDEF([ac_HaveDef], [curl_cv_have_def_$1])dnl
35   AS_VAR_PUSHDEF([ac_Def], [curl_cv_def_$1])dnl
36   if test -z "$SED"; then
37     AC_MSG_ERROR([SED not set. Cannot continue without SED being set.])
38   fi
39   if test -z "$GREP"; then
40     AC_MSG_ERROR([GREP not set. Cannot continue without GREP being set.])
41   fi
42   ifelse($3,,[AC_MSG_CHECKING([for preprocessor definition of $1])])
43   tmp_exp=""
44   AC_PREPROC_IFELSE([
45     AC_LANG_SOURCE(
46 ifelse($2,,,[$2])[[
47 #ifdef $1
48 CURL_DEF_TOKEN $1
49 #endif
50     ]])
51   ],[
52     tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \
53       "$GREP" CURL_DEF_TOKEN 2>/dev/null | \
54       "$SED" 's/.*CURL_DEF_TOKEN[[ ]]//' 2>/dev/null | \
55       "$SED" 's/[["]][[ ]]*[["]]//g' 2>/dev/null`
56     if test -z "$tmp_exp" || test "$tmp_exp" = "$1"; then
57       tmp_exp=""
58     fi
59   ])
60   if test -z "$tmp_exp"; then
61     AS_VAR_SET(ac_HaveDef, no)
62     ifelse($3,,[AC_MSG_RESULT([no])])
63   else
64     AS_VAR_SET(ac_HaveDef, yes)
65     AS_VAR_SET(ac_Def, $tmp_exp)
66     ifelse($3,,[AC_MSG_RESULT([$tmp_exp])])
67   fi
68   AS_VAR_POPDEF([ac_Def])dnl
69   AS_VAR_POPDEF([ac_HaveDef])dnl
70 ])
71
72
73 dnl CURL_CHECK_DEF_CC (SYMBOL, [INCLUDES], [SILENT])
74 dnl -------------------------------------------------
75 dnl Use the C compiler to find out only if the given symbol is defined
76 dnl or not, this can not find out its expansion. This macro will not use
77 dnl default includes even if no INCLUDES argument is given. This macro
78 dnl will run silently when invoked with three arguments.
79
80 AC_DEFUN([CURL_CHECK_DEF_CC], [
81   AS_VAR_PUSHDEF([ac_HaveDef], [curl_cv_have_def_$1])dnl
82   ifelse($3,,[AC_MSG_CHECKING([for compiler definition of $1])])
83   AC_COMPILE_IFELSE([
84     AC_LANG_SOURCE(
85 ifelse($2,,,[$2])[[
86 int main (void)
87 {
88 #ifdef $1
89   return 0;
90 #else
91   force compilation error
92 #endif
93 }
94     ]])
95   ],[
96     tst_symbol_defined="yes"
97   ],[
98     tst_symbol_defined="no"
99   ])
100   if test "$tst_symbol_defined" = "yes"; then
101     AS_VAR_SET(ac_HaveDef, yes)
102     ifelse($3,,[AC_MSG_RESULT([yes])])
103   else
104     AS_VAR_SET(ac_HaveDef, no)
105     ifelse($3,,[AC_MSG_RESULT([no])])
106   fi
107   AS_VAR_POPDEF([ac_HaveDef])dnl
108 ])
109
110
111 dnl CURL_CHECK_LIB_XNET
112 dnl -------------------------------------------------
113 dnl Verify if X/Open network library is required.
114
115 AC_DEFUN([CURL_CHECK_LIB_XNET], [
116   AC_MSG_CHECKING([if X/Open network library is required])
117   tst_lib_xnet_required="no"
118   AC_COMPILE_IFELSE([
119     AC_LANG_SOURCE([[
120 int main (void)
121 {
122 #if defined(__hpux) && defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 600)
123   return 0;
124 #elif defined(__hpux) && defined(_XOPEN_SOURCE_EXTENDED)
125   return 0;
126 #else
127   force compilation error
128 #endif
129 }
130     ]])
131   ],[
132     tst_lib_xnet_required="yes"
133     LIBS="$LIBS -lxnet"
134   ])
135   AC_MSG_RESULT([$tst_lib_xnet_required])
136 ])
137
138
139 dnl CURL_CHECK_AIX_ALL_SOURCE
140 dnl -------------------------------------------------
141 dnl Provides a replacement of traditional AC_AIX with
142 dnl an uniform behaviour across all autoconf versions,
143 dnl and with our own placement rules.
144
145 AC_DEFUN([CURL_CHECK_AIX_ALL_SOURCE], [
146   AH_VERBATIM([_ALL_SOURCE],
147     [/* Define to 1 if OS is AIX. */
148 #ifndef _ALL_SOURCE
149 #  undef _ALL_SOURCE
150 #endif])
151   AC_BEFORE([$0], [AC_SYS_LARGEFILE])dnl
152   AC_BEFORE([$0], [CURL_CONFIGURE_REENTRANT])dnl
153   AC_MSG_CHECKING([if OS is AIX (to define _ALL_SOURCE)])
154   AC_EGREP_CPP([yes_this_is_aix],[
155 #ifdef _AIX
156    yes_this_is_aix
157 #endif
158   ],[
159     AC_MSG_RESULT([yes])
160     AC_DEFINE(_ALL_SOURCE)
161   ],[
162     AC_MSG_RESULT([no])
163   ])
164 ])
165
166
167 dnl CURL_CHECK_HEADER_WINDOWS
168 dnl -------------------------------------------------
169 dnl Check for compilable and valid windows.h header
170
171 AC_DEFUN([CURL_CHECK_HEADER_WINDOWS], [
172   AC_CACHE_CHECK([for windows.h], [ac_cv_header_windows_h], [
173     AC_COMPILE_IFELSE([
174       AC_LANG_PROGRAM([[
175 #undef inline
176 #ifndef WIN32_LEAN_AND_MEAN
177 #define WIN32_LEAN_AND_MEAN
178 #endif
179 #include <windows.h>
180       ]],[[
181 #if defined(__CYGWIN__) || defined(__CEGCC__)
182         HAVE_WINDOWS_H shall not be defined.
183 #else
184         int dummy=2*WINVER;
185 #endif
186       ]])
187     ],[
188       ac_cv_header_windows_h="yes"
189     ],[
190       ac_cv_header_windows_h="no"
191     ])
192   ])
193   case "$ac_cv_header_windows_h" in
194     yes)
195       AC_DEFINE_UNQUOTED(HAVE_WINDOWS_H, 1,
196         [Define to 1 if you have the windows.h header file.])
197       AC_DEFINE_UNQUOTED(WIN32_LEAN_AND_MEAN, 1,
198         [Define to avoid automatic inclusion of winsock.h])
199       ;;
200   esac
201 ])
202
203
204 dnl CURL_CHECK_NATIVE_WINDOWS
205 dnl -------------------------------------------------
206 dnl Check if building a native Windows target
207
208 AC_DEFUN([CURL_CHECK_NATIVE_WINDOWS], [
209   AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
210   AC_CACHE_CHECK([whether build target is a native Windows one], [ac_cv_native_windows], [
211     if test "$ac_cv_header_windows_h" = "no"; then
212       ac_cv_native_windows="no"
213     else
214       AC_COMPILE_IFELSE([
215         AC_LANG_PROGRAM([[
216         ]],[[
217 #if defined(__MINGW32__) || defined(__MINGW32CE__) || \
218    (defined(_MSC_VER) && (defined(_WIN32) || defined(_WIN64)))
219           int dummy=1;
220 #else
221           Not a native Windows build target.
222 #endif
223         ]])
224       ],[
225         ac_cv_native_windows="yes"
226       ],[
227         ac_cv_native_windows="no"
228       ])
229     fi
230   ])
231   case "$ac_cv_native_windows" in
232     yes)
233       AC_DEFINE_UNQUOTED(NATIVE_WINDOWS, 1,
234         [Define to 1 if you are building a native Windows target.])
235       ;;
236   esac
237 ])
238
239
240 dnl CURL_CHECK_HEADER_WINSOCK
241 dnl -------------------------------------------------
242 dnl Check for compilable and valid winsock.h header
243
244 AC_DEFUN([CURL_CHECK_HEADER_WINSOCK], [
245   AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
246   AC_CACHE_CHECK([for winsock.h], [ac_cv_header_winsock_h], [
247     AC_COMPILE_IFELSE([
248       AC_LANG_PROGRAM([[
249 #undef inline
250 #ifndef WIN32_LEAN_AND_MEAN
251 #define WIN32_LEAN_AND_MEAN
252 #endif
253 #include <windows.h>
254 #include <winsock.h>
255       ]],[[
256 #if defined(__CYGWIN__) || defined(__CEGCC__)
257         HAVE_WINSOCK_H shall not be defined.
258 #else
259         int dummy=WSACleanup();
260 #endif
261       ]])
262     ],[
263       ac_cv_header_winsock_h="yes"
264     ],[
265       ac_cv_header_winsock_h="no"
266     ])
267   ])
268   case "$ac_cv_header_winsock_h" in
269     yes)
270       AC_DEFINE_UNQUOTED(HAVE_WINSOCK_H, 1,
271         [Define to 1 if you have the winsock.h header file.])
272       ;;
273   esac
274 ])
275
276
277 dnl CURL_CHECK_HEADER_WINSOCK2
278 dnl -------------------------------------------------
279 dnl Check for compilable and valid winsock2.h header
280
281 AC_DEFUN([CURL_CHECK_HEADER_WINSOCK2], [
282   AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
283   AC_CACHE_CHECK([for winsock2.h], [ac_cv_header_winsock2_h], [
284     AC_COMPILE_IFELSE([
285       AC_LANG_PROGRAM([[
286 #undef inline
287 #ifndef WIN32_LEAN_AND_MEAN
288 #define WIN32_LEAN_AND_MEAN
289 #endif
290 #include <windows.h>
291 #include <winsock2.h>
292       ]],[[
293 #if defined(__CYGWIN__) || defined(__CEGCC__) || defined(__MINGW32CE__)
294         HAVE_WINSOCK2_H shall not be defined.
295 #else
296         int dummy=2*IPPROTO_ESP;
297 #endif
298       ]])
299     ],[
300       ac_cv_header_winsock2_h="yes"
301     ],[
302       ac_cv_header_winsock2_h="no"
303     ])
304   ])
305   case "$ac_cv_header_winsock2_h" in
306     yes)
307       AC_DEFINE_UNQUOTED(HAVE_WINSOCK2_H, 1,
308         [Define to 1 if you have the winsock2.h header file.])
309       ;;
310   esac
311 ])
312
313
314 dnl CURL_CHECK_HEADER_WS2TCPIP
315 dnl -------------------------------------------------
316 dnl Check for compilable and valid ws2tcpip.h header
317
318 AC_DEFUN([CURL_CHECK_HEADER_WS2TCPIP], [
319   AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
320   AC_CACHE_CHECK([for ws2tcpip.h], [ac_cv_header_ws2tcpip_h], [
321     AC_COMPILE_IFELSE([
322       AC_LANG_PROGRAM([[
323 #undef inline
324 #ifndef WIN32_LEAN_AND_MEAN
325 #define WIN32_LEAN_AND_MEAN
326 #endif
327 #include <windows.h>
328 #include <winsock2.h>
329 #include <ws2tcpip.h>
330       ]],[[
331 #if defined(__CYGWIN__) || defined(__CEGCC__) || defined(__MINGW32CE__)
332         HAVE_WS2TCPIP_H shall not be defined.
333 #else
334         int dummy=2*IP_PKTINFO;
335 #endif
336       ]])
337     ],[
338       ac_cv_header_ws2tcpip_h="yes"
339     ],[
340       ac_cv_header_ws2tcpip_h="no"
341     ])
342   ])
343   case "$ac_cv_header_ws2tcpip_h" in
344     yes)
345       AC_DEFINE_UNQUOTED(HAVE_WS2TCPIP_H, 1,
346         [Define to 1 if you have the ws2tcpip.h header file.])
347       ;;
348   esac
349 ])
350
351
352 dnl CURL_CHECK_HEADER_WINLDAP
353 dnl -------------------------------------------------
354 dnl Check for compilable and valid winldap.h header
355
356 AC_DEFUN([CURL_CHECK_HEADER_WINLDAP], [
357   AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
358   AC_CACHE_CHECK([for winldap.h], [ac_cv_header_winldap_h], [
359     AC_COMPILE_IFELSE([
360       AC_LANG_PROGRAM([[
361 #undef inline
362 #ifdef HAVE_WINDOWS_H
363 #ifndef WIN32_LEAN_AND_MEAN
364 #define WIN32_LEAN_AND_MEAN
365 #endif
366 #include <windows.h>
367 #endif
368 #include <winldap.h>
369       ]],[[
370 #if defined(__CYGWIN__) || defined(__CEGCC__)
371         HAVE_WINLDAP_H shall not be defined.
372 #else
373         LDAP *ldp = ldap_init("dummy", LDAP_PORT);
374         ULONG res = ldap_unbind(ldp);
375 #endif
376       ]])
377     ],[
378       ac_cv_header_winldap_h="yes"
379     ],[
380       ac_cv_header_winldap_h="no"
381     ])
382   ])
383   case "$ac_cv_header_winldap_h" in
384     yes)
385       AC_DEFINE_UNQUOTED(HAVE_WINLDAP_H, 1,
386         [Define to 1 if you have the winldap.h header file.])
387       ;;
388   esac
389 ])
390
391
392 dnl CURL_CHECK_HEADER_WINBER
393 dnl -------------------------------------------------
394 dnl Check for compilable and valid winber.h header
395
396 AC_DEFUN([CURL_CHECK_HEADER_WINBER], [
397   AC_REQUIRE([CURL_CHECK_HEADER_WINLDAP])dnl
398   AC_CACHE_CHECK([for winber.h], [ac_cv_header_winber_h], [
399     AC_COMPILE_IFELSE([
400       AC_LANG_PROGRAM([[
401 #undef inline
402 #ifdef HAVE_WINDOWS_H
403 #ifndef WIN32_LEAN_AND_MEAN
404 #define WIN32_LEAN_AND_MEAN
405 #endif
406 #include <windows.h>
407 #endif
408 #include <winldap.h>
409 #include <winber.h>
410       ]],[[
411 #if defined(__CYGWIN__) || defined(__CEGCC__)
412         HAVE_WINBER_H shall not be defined.
413 #else
414         BERVAL *bvp = NULL;
415         BerElement *bep = ber_init(bvp);
416         ber_free(bep, 1);
417 #endif
418       ]])
419     ],[
420       ac_cv_header_winber_h="yes"
421     ],[
422       ac_cv_header_winber_h="no"
423     ])
424   ])
425   case "$ac_cv_header_winber_h" in
426     yes)
427       AC_DEFINE_UNQUOTED(HAVE_WINBER_H, 1,
428         [Define to 1 if you have the winber.h header file.])
429       ;;
430   esac
431 ])
432
433
434 dnl CURL_CHECK_HEADER_LBER
435 dnl -------------------------------------------------
436 dnl Check for compilable and valid lber.h header,
437 dnl and check if it is needed even with ldap.h
438
439 AC_DEFUN([CURL_CHECK_HEADER_LBER], [
440   AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
441   AC_CACHE_CHECK([for lber.h], [ac_cv_header_lber_h], [
442     AC_COMPILE_IFELSE([
443       AC_LANG_PROGRAM([[
444 #undef inline
445 #ifdef HAVE_WINDOWS_H
446 #ifndef WIN32_LEAN_AND_MEAN
447 #define WIN32_LEAN_AND_MEAN
448 #endif
449 #include <windows.h>
450 #else
451 #ifdef HAVE_SYS_TYPES_H
452 #include <sys/types.h>
453 #endif
454 #endif
455 #ifndef NULL
456 #define NULL (void *)0
457 #endif
458 #include <lber.h>
459       ]],[[
460         BerValue *bvp = NULL;
461         BerElement *bep = ber_init(bvp);
462         ber_free(bep, 1);
463       ]])
464     ],[
465       ac_cv_header_lber_h="yes"
466     ],[
467       ac_cv_header_lber_h="no"
468     ])
469   ])
470   if test "$ac_cv_header_lber_h" = "yes"; then
471     AC_DEFINE_UNQUOTED(HAVE_LBER_H, 1,
472       [Define to 1 if you have the lber.h header file.])
473     #
474     AC_COMPILE_IFELSE([
475       AC_LANG_PROGRAM([[
476 #undef inline
477 #ifdef HAVE_WINDOWS_H
478 #ifndef WIN32_LEAN_AND_MEAN
479 #define WIN32_LEAN_AND_MEAN
480 #endif
481 #include <windows.h>
482 #else
483 #ifdef HAVE_SYS_TYPES_H
484 #include <sys/types.h>
485 #endif
486 #endif
487 #ifndef NULL
488 #define NULL (void *)0
489 #endif
490 #ifndef LDAP_DEPRECATED
491 #define LDAP_DEPRECATED 1
492 #endif
493 #include <ldap.h>
494       ]],[[
495         BerValue *bvp = NULL;
496         BerElement *bep = ber_init(bvp);
497         ber_free(bep, 1);
498       ]])
499     ],[
500       curl_cv_need_header_lber_h="no"
501     ],[
502       curl_cv_need_header_lber_h="yes"
503     ])
504     #
505     case "$curl_cv_need_header_lber_h" in
506       yes)
507         AC_DEFINE_UNQUOTED(NEED_LBER_H, 1,
508           [Define to 1 if you need the lber.h header file even with ldap.h])
509         ;;
510     esac
511   fi
512 ])
513
514
515 dnl CURL_CHECK_HEADER_LDAP
516 dnl -------------------------------------------------
517 dnl Check for compilable and valid ldap.h header
518
519 AC_DEFUN([CURL_CHECK_HEADER_LDAP], [
520   AC_REQUIRE([CURL_CHECK_HEADER_LBER])dnl
521   AC_CACHE_CHECK([for ldap.h], [ac_cv_header_ldap_h], [
522     AC_COMPILE_IFELSE([
523       AC_LANG_PROGRAM([[
524 #undef inline
525 #ifdef HAVE_WINDOWS_H
526 #ifndef WIN32_LEAN_AND_MEAN
527 #define WIN32_LEAN_AND_MEAN
528 #endif
529 #include <windows.h>
530 #else
531 #ifdef HAVE_SYS_TYPES_H
532 #include <sys/types.h>
533 #endif
534 #endif
535 #ifndef LDAP_DEPRECATED
536 #define LDAP_DEPRECATED 1
537 #endif
538 #ifdef NEED_LBER_H
539 #include <lber.h>
540 #endif
541 #include <ldap.h>
542       ]],[[
543         LDAP *ldp = ldap_init("dummy", LDAP_PORT);
544         int res = ldap_unbind(ldp);
545       ]])
546     ],[
547       ac_cv_header_ldap_h="yes"
548     ],[
549       ac_cv_header_ldap_h="no"
550     ])
551   ])
552   case "$ac_cv_header_ldap_h" in
553     yes)
554       AC_DEFINE_UNQUOTED(HAVE_LDAP_H, 1,
555         [Define to 1 if you have the ldap.h header file.])
556       ;;
557   esac
558 ])
559
560
561 dnl CURL_CHECK_HEADER_LDAP_SSL
562 dnl -------------------------------------------------
563 dnl Check for compilable and valid ldap_ssl.h header
564
565 AC_DEFUN([CURL_CHECK_HEADER_LDAP_SSL], [
566   AC_REQUIRE([CURL_CHECK_HEADER_LDAP])dnl
567   AC_CACHE_CHECK([for ldap_ssl.h], [ac_cv_header_ldap_ssl_h], [
568     AC_COMPILE_IFELSE([
569       AC_LANG_PROGRAM([[
570 #undef inline
571 #ifdef HAVE_WINDOWS_H
572 #ifndef WIN32_LEAN_AND_MEAN
573 #define WIN32_LEAN_AND_MEAN
574 #endif
575 #include <windows.h>
576 #else
577 #ifdef HAVE_SYS_TYPES_H
578 #include <sys/types.h>
579 #endif
580 #endif
581 #ifndef LDAP_DEPRECATED
582 #define LDAP_DEPRECATED 1
583 #endif
584 #ifdef NEED_LBER_H
585 #include <lber.h>
586 #endif
587 #ifdef HAVE_LDAP_H
588 #include <ldap.h>
589 #endif
590 #include <ldap_ssl.h>
591       ]],[[
592         LDAP *ldp = ldapssl_init("dummy", LDAPS_PORT, 1);
593       ]])
594     ],[
595       ac_cv_header_ldap_ssl_h="yes"
596     ],[
597       ac_cv_header_ldap_ssl_h="no"
598     ])
599   ])
600   case "$ac_cv_header_ldap_ssl_h" in
601     yes)
602       AC_DEFINE_UNQUOTED(HAVE_LDAP_SSL_H, 1,
603         [Define to 1 if you have the ldap_ssl.h header file.])
604       ;;
605   esac
606 ])
607
608
609 dnl CURL_CHECK_HEADER_LDAPSSL
610 dnl -------------------------------------------------
611 dnl Check for compilable and valid ldapssl.h header
612
613 AC_DEFUN([CURL_CHECK_HEADER_LDAPSSL], [
614   AC_REQUIRE([CURL_CHECK_HEADER_LDAP])dnl
615   AC_CACHE_CHECK([for ldapssl.h], [ac_cv_header_ldapssl_h], [
616     AC_COMPILE_IFELSE([
617       AC_LANG_PROGRAM([[
618 #undef inline
619 #ifdef HAVE_WINDOWS_H
620 #ifndef WIN32_LEAN_AND_MEAN
621 #define WIN32_LEAN_AND_MEAN
622 #endif
623 #include <windows.h>
624 #else
625 #ifdef HAVE_SYS_TYPES_H
626 #include <sys/types.h>
627 #endif
628 #endif
629 #ifndef NULL
630 #define NULL (void *)0
631 #endif
632 #ifndef LDAP_DEPRECATED
633 #define LDAP_DEPRECATED 1
634 #endif
635 #ifdef NEED_LBER_H
636 #include <lber.h>
637 #endif
638 #ifdef HAVE_LDAP_H
639 #include <ldap.h>
640 #endif
641 #include <ldapssl.h>
642       ]],[[
643         char *cert_label = NULL;
644         LDAP *ldp = ldap_ssl_init("dummy", LDAPS_PORT, cert_label);
645       ]])
646     ],[
647       ac_cv_header_ldapssl_h="yes"
648     ],[
649       ac_cv_header_ldapssl_h="no"
650     ])
651   ])
652   case "$ac_cv_header_ldapssl_h" in
653     yes)
654       AC_DEFINE_UNQUOTED(HAVE_LDAPSSL_H, 1,
655         [Define to 1 if you have the ldapssl.h header file.])
656       ;;
657   esac
658 ])
659
660
661 dnl CURL_CHECK_LIBS_WINLDAP
662 dnl -------------------------------------------------
663 dnl Check for libraries needed for WINLDAP support,
664 dnl and prepended to LIBS any needed libraries.
665 dnl This macro can take an optional parameter with a
666 dnl white space separated list of libraries to check
667 dnl before the WINLDAP default ones.
668
669 AC_DEFUN([CURL_CHECK_LIBS_WINLDAP], [
670   AC_REQUIRE([CURL_CHECK_HEADER_WINBER])dnl
671   #
672   AC_MSG_CHECKING([for WINLDAP libraries])
673   #
674   u_libs=""
675   #
676   ifelse($1,,,[
677     for x_lib in $1; do
678       case "$x_lib" in
679         -l*)
680           l_lib="$x_lib"
681           ;;
682         *)
683           l_lib="-l$x_lib"
684           ;;
685       esac
686       if test -z "$u_libs"; then
687         u_libs="$l_lib"
688       else
689         u_libs="$u_libs $l_lib"
690       fi
691     done
692   ])
693   #
694   curl_cv_save_LIBS="$LIBS"
695   curl_cv_ldap_LIBS="unknown"
696   #
697   for x_nlibs in '' "$u_libs" \
698     '-lwldap32' ; do
699     if test "$curl_cv_ldap_LIBS" = "unknown"; then
700       if test -z "$x_nlibs"; then
701         LIBS="$curl_cv_save_LIBS"
702       else
703         LIBS="$x_nlibs $curl_cv_save_LIBS"
704       fi
705       AC_LINK_IFELSE([
706         AC_LANG_PROGRAM([[
707 #undef inline
708 #ifdef HAVE_WINDOWS_H
709 #ifndef WIN32_LEAN_AND_MEAN
710 #define WIN32_LEAN_AND_MEAN
711 #endif
712 #include <windows.h>
713 #ifdef HAVE_WINLDAP_H
714 #include <winldap.h>
715 #endif
716 #ifdef HAVE_WINBER_H
717 #include <winber.h>
718 #endif
719 #endif
720         ]],[[
721           BERVAL *bvp = NULL;
722           BerElement *bep = ber_init(bvp);
723           LDAP *ldp = ldap_init("dummy", LDAP_PORT);
724           ULONG res = ldap_unbind(ldp);
725           ber_free(bep, 1);
726         ]])
727       ],[
728         curl_cv_ldap_LIBS="$x_nlibs"
729       ])
730     fi
731   done
732   #
733   LIBS="$curl_cv_save_LIBS"
734   #
735   case X-"$curl_cv_ldap_LIBS" in
736     X-unknown)
737       AC_MSG_RESULT([cannot find WINLDAP libraries])
738       ;;
739     X-)
740       AC_MSG_RESULT([no additional lib required])
741       ;;
742     *)
743       if test -z "$curl_cv_save_LIBS"; then
744         LIBS="$curl_cv_ldap_LIBS"
745       else
746         LIBS="$curl_cv_ldap_LIBS $curl_cv_save_LIBS"
747       fi
748       AC_MSG_RESULT([$curl_cv_ldap_LIBS])
749       ;;
750   esac
751   #
752 ])
753
754
755 dnl CURL_CHECK_LIBS_LDAP
756 dnl -------------------------------------------------
757 dnl Check for libraries needed for LDAP support,
758 dnl and prepended to LIBS any needed libraries.
759 dnl This macro can take an optional parameter with a
760 dnl white space separated list of libraries to check
761 dnl before the default ones.
762
763 AC_DEFUN([CURL_CHECK_LIBS_LDAP], [
764   AC_REQUIRE([CURL_CHECK_HEADER_LDAP])dnl
765   #
766   AC_MSG_CHECKING([for LDAP libraries])
767   #
768   u_libs=""
769   #
770   ifelse($1,,,[
771     for x_lib in $1; do
772       case "$x_lib" in
773         -l*)
774           l_lib="$x_lib"
775           ;;
776         *)
777           l_lib="-l$x_lib"
778           ;;
779       esac
780       if test -z "$u_libs"; then
781         u_libs="$l_lib"
782       else
783         u_libs="$u_libs $l_lib"
784       fi
785     done
786   ])
787   #
788   curl_cv_save_LIBS="$LIBS"
789   curl_cv_ldap_LIBS="unknown"
790   #
791   for x_nlibs in '' "$u_libs" \
792     '-lldap' \
793     '-llber -lldap' \
794     '-lldap -llber' \
795     '-lldapssl -lldapx -lldapsdk' \
796     '-lldapsdk -lldapx -lldapssl' ; do
797     if test "$curl_cv_ldap_LIBS" = "unknown"; then
798       if test -z "$x_nlibs"; then
799         LIBS="$curl_cv_save_LIBS"
800       else
801         LIBS="$x_nlibs $curl_cv_save_LIBS"
802       fi
803       AC_LINK_IFELSE([
804         AC_LANG_PROGRAM([[
805 #undef inline
806 #ifdef HAVE_WINDOWS_H
807 #ifndef WIN32_LEAN_AND_MEAN
808 #define WIN32_LEAN_AND_MEAN
809 #endif
810 #include <windows.h>
811 #else
812 #ifdef HAVE_SYS_TYPES_H
813 #include <sys/types.h>
814 #endif
815 #endif
816 #ifndef NULL
817 #define NULL (void *)0
818 #endif
819 #ifndef LDAP_DEPRECATED
820 #define LDAP_DEPRECATED 1
821 #endif
822 #ifdef NEED_LBER_H
823 #include <lber.h>
824 #endif
825 #ifdef HAVE_LDAP_H
826 #include <ldap.h>
827 #endif
828         ]],[[
829           BerValue *bvp = NULL;
830           BerElement *bep = ber_init(bvp);
831           LDAP *ldp = ldap_init("dummy", LDAP_PORT);
832           int res = ldap_unbind(ldp);
833           ber_free(bep, 1);
834         ]])
835       ],[
836         curl_cv_ldap_LIBS="$x_nlibs"
837       ])
838     fi
839   done
840   #
841   LIBS="$curl_cv_save_LIBS"
842   #
843   case X-"$curl_cv_ldap_LIBS" in
844     X-unknown)
845       AC_MSG_RESULT([cannot find LDAP libraries])
846       ;;
847     X-)
848       AC_MSG_RESULT([no additional lib required])
849       ;;
850     *)
851       if test -z "$curl_cv_save_LIBS"; then
852         LIBS="$curl_cv_ldap_LIBS"
853       else
854         LIBS="$curl_cv_ldap_LIBS $curl_cv_save_LIBS"
855       fi
856       AC_MSG_RESULT([$curl_cv_ldap_LIBS])
857       ;;
858   esac
859   #
860 ])
861
862
863 dnl CURL_CHECK_HEADER_MALLOC
864 dnl -------------------------------------------------
865 dnl Check for compilable and valid malloc.h header,
866 dnl and check if it is needed even with stdlib.h
867
868 AC_DEFUN([CURL_CHECK_HEADER_MALLOC], [
869   AC_CACHE_CHECK([for malloc.h], [ac_cv_header_malloc_h], [
870     AC_COMPILE_IFELSE([
871       AC_LANG_PROGRAM([[
872 #include <malloc.h>
873       ]],[[
874         void *p = malloc(10);
875         void *q = calloc(10,10);
876         free(p);
877         free(q);
878       ]])
879     ],[
880       ac_cv_header_malloc_h="yes"
881     ],[
882       ac_cv_header_malloc_h="no"
883     ])
884   ])
885   if test "$ac_cv_header_malloc_h" = "yes"; then
886     AC_DEFINE_UNQUOTED(HAVE_MALLOC_H, 1,
887       [Define to 1 if you have the malloc.h header file.])
888     #
889     AC_COMPILE_IFELSE([
890       AC_LANG_PROGRAM([[
891 #include <stdlib.h>
892       ]],[[
893         void *p = malloc(10);
894         void *q = calloc(10,10);
895         free(p);
896         free(q);
897       ]])
898     ],[
899       curl_cv_need_header_malloc_h="no"
900     ],[
901       curl_cv_need_header_malloc_h="yes"
902     ])
903     #
904     case "$curl_cv_need_header_malloc_h" in
905       yes)
906         AC_DEFINE_UNQUOTED(NEED_MALLOC_H, 1,
907           [Define to 1 if you need the malloc.h header file even with stdlib.h])
908         ;;
909     esac
910   fi
911 ])
912
913
914 dnl CURL_CHECK_HEADER_MEMORY
915 dnl -------------------------------------------------
916 dnl Check for compilable and valid memory.h header,
917 dnl and check if it is needed even with stdlib.h for
918 dnl memory related functions.
919
920 AC_DEFUN([CURL_CHECK_HEADER_MEMORY], [
921   AC_CACHE_CHECK([for memory.h], [ac_cv_header_memory_h], [
922     AC_COMPILE_IFELSE([
923       AC_LANG_PROGRAM([[
924 #include <memory.h>
925       ]],[[
926         void *p = malloc(10);
927         void *q = calloc(10,10);
928         free(p);
929         free(q);
930       ]])
931     ],[
932       ac_cv_header_memory_h="yes"
933     ],[
934       ac_cv_header_memory_h="no"
935     ])
936   ])
937   if test "$ac_cv_header_memory_h" = "yes"; then
938     AC_DEFINE_UNQUOTED(HAVE_MEMORY_H, 1,
939       [Define to 1 if you have the memory.h header file.])
940     #
941     AC_COMPILE_IFELSE([
942       AC_LANG_PROGRAM([[
943 #include <stdlib.h>
944       ]],[[
945         void *p = malloc(10);
946         void *q = calloc(10,10);
947         free(p);
948         free(q);
949       ]])
950     ],[
951       curl_cv_need_header_memory_h="no"
952     ],[
953       curl_cv_need_header_memory_h="yes"
954     ])
955     #
956     case "$curl_cv_need_header_memory_h" in
957       yes)
958         AC_DEFINE_UNQUOTED(NEED_MEMORY_H, 1,
959           [Define to 1 if you need the memory.h header file even with stdlib.h])
960         ;;
961     esac
962   fi
963 ])
964
965
966 dnl CURL_CHECK_FUNC_GETNAMEINFO
967 dnl -------------------------------------------------
968 dnl Test if the getnameinfo function is available,
969 dnl and check the types of five of its arguments.
970 dnl If the function succeeds HAVE_GETNAMEINFO will be
971 dnl defined, defining the types of the arguments in
972 dnl GETNAMEINFO_TYPE_ARG1, GETNAMEINFO_TYPE_ARG2,
973 dnl GETNAMEINFO_TYPE_ARG46 and GETNAMEINFO_TYPE_ARG7,
974 dnl and also defining the type qualifier of first
975 dnl argument in GETNAMEINFO_QUAL_ARG1.
976
977 AC_DEFUN([CURL_CHECK_FUNC_GETNAMEINFO], [
978   AC_REQUIRE([CURL_CHECK_HEADER_WS2TCPIP])dnl
979   AC_CHECK_HEADERS(sys/types.h sys/socket.h netdb.h)
980   #
981   AC_MSG_CHECKING([for getnameinfo])
982   AC_LINK_IFELSE([
983     AC_LANG_FUNC_LINK_TRY([getnameinfo])
984   ],[
985     AC_MSG_RESULT([yes])
986     curl_cv_getnameinfo="yes"
987   ],[
988     AC_MSG_RESULT([no])
989     curl_cv_getnameinfo="no"
990   ])
991   #
992   if test "$curl_cv_getnameinfo" != "yes"; then
993     AC_MSG_CHECKING([deeper for getnameinfo])
994     AC_LINK_IFELSE([
995       AC_LANG_PROGRAM([[
996       ]],[[
997         getnameinfo();
998       ]])
999     ],[
1000       AC_MSG_RESULT([yes])
1001       curl_cv_getnameinfo="yes"
1002     ],[
1003       AC_MSG_RESULT([but still no])
1004       curl_cv_getnameinfo="no"
1005     ])
1006   fi
1007   #
1008   if test "$curl_cv_getnameinfo" != "yes"; then
1009     AC_MSG_CHECKING([deeper and deeper for getnameinfo])
1010     AC_LINK_IFELSE([
1011       AC_LANG_PROGRAM([[
1012 #undef inline
1013 #ifdef HAVE_WINDOWS_H
1014 #ifndef WIN32_LEAN_AND_MEAN
1015 #define WIN32_LEAN_AND_MEAN
1016 #endif
1017 #include <windows.h>
1018 #ifdef HAVE_WINSOCK2_H
1019 #include <winsock2.h>
1020 #ifdef HAVE_WS2TCPIP_H
1021 #include <ws2tcpip.h>
1022 #endif
1023 #endif
1024 #else
1025 #ifdef HAVE_SYS_TYPES_H
1026 #include <sys/types.h>
1027 #endif
1028 #ifdef HAVE_SYS_SOCKET_H
1029 #include <sys/socket.h>
1030 #endif
1031 #ifdef HAVE_NETDB_H
1032 #include <netdb.h>
1033 #endif
1034 #endif
1035       ]],[[
1036         getnameinfo(0, 0, 0, 0, 0, 0, 0);
1037       ]])
1038     ],[
1039       AC_MSG_RESULT([yes])
1040       curl_cv_getnameinfo="yes"
1041     ],[
1042       AC_MSG_RESULT([but still no])
1043       curl_cv_getnameinfo="no"
1044     ])
1045   fi
1046   #
1047   if test "$curl_cv_getnameinfo" = "yes"; then
1048     AC_CACHE_CHECK([types of arguments for getnameinfo],
1049       [curl_cv_func_getnameinfo_args], [
1050       curl_cv_func_getnameinfo_args="unknown"
1051       for gni_arg1 in 'struct sockaddr *' 'const struct sockaddr *' 'void *'; do
1052         for gni_arg2 in 'socklen_t' 'size_t' 'int'; do
1053           for gni_arg46 in 'size_t' 'int' 'socklen_t' 'unsigned int' 'DWORD'; do
1054             for gni_arg7 in 'int' 'unsigned int'; do
1055               if test "$curl_cv_func_getnameinfo_args" = "unknown"; then
1056                 AC_COMPILE_IFELSE([
1057                   AC_LANG_PROGRAM([[
1058 #undef inline
1059 #ifdef HAVE_WINDOWS_H
1060 #ifndef WIN32_LEAN_AND_MEAN
1061 #define WIN32_LEAN_AND_MEAN
1062 #endif
1063 #if (!defined(_WIN32_WINNT)) || (_WIN32_WINNT < 0x0501)
1064 #undef _WIN32_WINNT
1065 #define _WIN32_WINNT 0x0501
1066 #endif
1067 #include <windows.h>
1068 #ifdef HAVE_WINSOCK2_H
1069 #include <winsock2.h>
1070 #ifdef HAVE_WS2TCPIP_H
1071 #include <ws2tcpip.h>
1072 #endif
1073 #endif
1074 #define GNICALLCONV WSAAPI
1075 #else
1076 #ifdef HAVE_SYS_TYPES_H
1077 #include <sys/types.h>
1078 #endif
1079 #ifdef HAVE_SYS_SOCKET_H
1080 #include <sys/socket.h>
1081 #endif
1082 #ifdef HAVE_NETDB_H
1083 #include <netdb.h>
1084 #endif
1085 #define GNICALLCONV
1086 #endif
1087                     extern int GNICALLCONV getnameinfo($gni_arg1, $gni_arg2,
1088                                            char *, $gni_arg46,
1089                                            char *, $gni_arg46,
1090                                            $gni_arg7);
1091                   ]],[[
1092                     $gni_arg2 salen=0;
1093                     $gni_arg46 hostlen=0;
1094                     $gni_arg46 servlen=0;
1095                     $gni_arg7 flags=0;
1096                     int res = getnameinfo(0, salen, 0, hostlen, 0, servlen, flags);
1097                   ]])
1098                 ],[
1099                   curl_cv_func_getnameinfo_args="$gni_arg1,$gni_arg2,$gni_arg46,$gni_arg7"
1100                 ])
1101               fi
1102             done
1103           done
1104         done
1105       done
1106     ]) # AC-CACHE-CHECK
1107     if test "$curl_cv_func_getnameinfo_args" = "unknown"; then
1108       AC_MSG_WARN([Cannot find proper types to use for getnameinfo args])
1109       AC_MSG_WARN([HAVE_GETNAMEINFO will not be defined])
1110     else
1111       gni_prev_IFS=$IFS; IFS=','
1112       set dummy `echo "$curl_cv_func_getnameinfo_args" | sed 's/\*/\*/g'`
1113       IFS=$gni_prev_IFS
1114       shift
1115       #
1116       gni_qual_type_arg1=$[1]
1117       #
1118       AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG2, $[2],
1119         [Define to the type of arg 2 for getnameinfo.])
1120       AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG46, $[3],
1121         [Define to the type of args 4 and 6 for getnameinfo.])
1122       AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG7, $[4],
1123         [Define to the type of arg 7 for getnameinfo.])
1124       #
1125       prev_sh_opts=$-
1126       #
1127       case $prev_sh_opts in
1128         *f*)
1129           ;;
1130         *)
1131           set -f
1132           ;;
1133       esac
1134       #
1135       case "$gni_qual_type_arg1" in
1136         const*)
1137           gni_qual_arg1=const
1138           gni_type_arg1=`echo $gni_qual_type_arg1 | sed 's/^const //'`
1139         ;;
1140         *)
1141           gni_qual_arg1=
1142           gni_type_arg1=$gni_qual_type_arg1
1143         ;;
1144       esac
1145       #
1146       AC_DEFINE_UNQUOTED(GETNAMEINFO_QUAL_ARG1, $gni_qual_arg1,
1147         [Define to the type qualifier of arg 1 for getnameinfo.])
1148       AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG1, $gni_type_arg1,
1149         [Define to the type of arg 1 for getnameinfo.])
1150       #
1151       case $prev_sh_opts in
1152         *f*)
1153           ;;
1154         *)
1155           set +f
1156           ;;
1157       esac
1158       #
1159       AC_DEFINE_UNQUOTED(HAVE_GETNAMEINFO, 1,
1160         [Define to 1 if you have the getnameinfo function.])
1161       ac_cv_func_getnameinfo="yes"
1162     fi
1163   fi
1164 ])
1165
1166
1167 dnl TYPE_SOCKADDR_STORAGE
1168 dnl -------------------------------------------------
1169 dnl Check for struct sockaddr_storage. Most IPv6-enabled
1170 dnl hosts have it, but AIX 4.3 is one known exception.
1171
1172 AC_DEFUN([TYPE_SOCKADDR_STORAGE],
1173 [
1174    AC_CHECK_TYPE([struct sockaddr_storage],
1175         AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE, 1,
1176                   [if struct sockaddr_storage is defined]), ,
1177    [
1178 #undef inline
1179 #ifdef HAVE_WINDOWS_H
1180 #ifndef WIN32_LEAN_AND_MEAN
1181 #define WIN32_LEAN_AND_MEAN
1182 #endif
1183 #include <windows.h>
1184 #ifdef HAVE_WINSOCK2_H
1185 #include <winsock2.h>
1186 #endif
1187 #else
1188 #ifdef HAVE_SYS_TYPES_H
1189 #include <sys/types.h>
1190 #endif
1191 #ifdef HAVE_SYS_SOCKET_H
1192 #include <sys/socket.h>
1193 #endif
1194 #ifdef HAVE_NETINET_IN_H
1195 #include <netinet/in.h>
1196 #endif
1197 #ifdef HAVE_ARPA_INET_H
1198 #include <arpa/inet.h>
1199 #endif
1200 #endif
1201    ])
1202 ])
1203
1204
1205 dnl CURL_CHECK_NI_WITHSCOPEID
1206 dnl -------------------------------------------------
1207 dnl Check for working NI_WITHSCOPEID in getnameinfo()
1208
1209 AC_DEFUN([CURL_CHECK_NI_WITHSCOPEID], [
1210   AC_REQUIRE([CURL_CHECK_FUNC_GETNAMEINFO])dnl
1211   AC_REQUIRE([TYPE_SOCKADDR_STORAGE])dnl
1212   AC_CHECK_HEADERS(stdio.h sys/types.h sys/socket.h \
1213                    netdb.h netinet/in.h arpa/inet.h)
1214   #
1215   AC_CACHE_CHECK([for working NI_WITHSCOPEID],
1216     [ac_cv_working_ni_withscopeid], [
1217     AC_RUN_IFELSE([
1218       AC_LANG_PROGRAM([[
1219 #ifdef HAVE_STDLIB_H
1220 #include <stdlib.h>
1221 #endif
1222 #ifdef HAVE_STDIO_H
1223 #include <stdio.h>
1224 #endif
1225 #ifdef HAVE_SYS_TYPES_H
1226 #include <sys/types.h>
1227 #endif
1228 #ifdef HAVE_SYS_SOCKET_H
1229 #include <sys/socket.h>
1230 #endif
1231 #ifdef HAVE_NETDB_H
1232 #include <netdb.h>
1233 #endif
1234 #ifdef HAVE_NETINET_IN_H
1235 #include <netinet/in.h>
1236 #endif
1237 #ifdef HAVE_ARPA_INET_H
1238 #include <arpa/inet.h>
1239 #endif
1240       ]],[[
1241 #if defined(NI_WITHSCOPEID) && defined(HAVE_GETNAMEINFO)
1242 #ifdef HAVE_STRUCT_SOCKADDR_STORAGE
1243         struct sockaddr_storage sa;
1244 #else
1245         unsigned char sa[256];
1246 #endif
1247         char hostbuf[NI_MAXHOST];
1248         int rc;
1249         GETNAMEINFO_TYPE_ARG2 salen = (GETNAMEINFO_TYPE_ARG2)sizeof(sa);
1250         GETNAMEINFO_TYPE_ARG46 hostlen = (GETNAMEINFO_TYPE_ARG46)sizeof(hostbuf);
1251         GETNAMEINFO_TYPE_ARG7 flags = NI_NUMERICHOST | NI_NUMERICSERV | NI_WITHSCOPEID;
1252         int fd = socket(AF_INET6, SOCK_STREAM, 0);
1253         if(fd < 0) {
1254           perror("socket()");
1255           return 1; /* Error creating socket */
1256         }
1257         rc = getsockname(fd, (GETNAMEINFO_TYPE_ARG1)&sa, &salen);
1258         if(rc) {
1259           perror("getsockname()");
1260           return 2; /* Error retrieving socket name */
1261         }
1262         rc = getnameinfo((GETNAMEINFO_TYPE_ARG1)&sa, salen, hostbuf, hostlen, NULL, 0, flags);
1263         if(rc) {
1264           printf("rc = %s\n", gai_strerror(rc));
1265           return 3; /* Error translating socket address */
1266         }
1267         return 0; /* Ok, NI_WITHSCOPEID works */
1268 #else
1269         return 4; /* Error, NI_WITHSCOPEID not defined or no getnameinfo() */
1270 #endif
1271       ]]) # AC-LANG-PROGRAM
1272     ],[
1273       # Exit code == 0. Program worked.
1274       ac_cv_working_ni_withscopeid="yes"
1275     ],[
1276       # Exit code != 0. Program failed.
1277       ac_cv_working_ni_withscopeid="no"
1278     ],[
1279       # Program is not run when cross-compiling. So we assume
1280       # NI_WITHSCOPEID will work if we are able to compile it.
1281       AC_COMPILE_IFELSE([
1282         AC_LANG_PROGRAM([[
1283 #include <sys/types.h>
1284 #include <sys/socket.h>
1285 #include <netdb.h>
1286         ]],[[
1287           unsigned int dummy= NI_NUMERICHOST | NI_NUMERICSERV | NI_WITHSCOPEID;
1288         ]])
1289       ],[
1290         ac_cv_working_ni_withscopeid="yes"
1291       ],[
1292         ac_cv_working_ni_withscopeid="no"
1293       ]) # AC-COMPILE-IFELSE
1294     ]) # AC-RUN-IFELSE
1295   ]) # AC-CACHE-CHECK
1296   case "$ac_cv_working_ni_withscopeid" in
1297     yes)
1298       AC_DEFINE(HAVE_NI_WITHSCOPEID, 1,
1299         [Define to 1 if NI_WITHSCOPEID exists and works.])
1300       ;;
1301   esac
1302 ])
1303
1304
1305 dnl CURL_CHECK_FUNC_RECV
1306 dnl -------------------------------------------------
1307 dnl Test if the socket recv() function is available,
1308 dnl and check its return type and the types of its
1309 dnl arguments. If the function succeeds HAVE_RECV
1310 dnl will be defined, defining the types of the arguments
1311 dnl in RECV_TYPE_ARG1, RECV_TYPE_ARG2, RECV_TYPE_ARG3
1312 dnl and RECV_TYPE_ARG4, defining the type of the function
1313 dnl return value in RECV_TYPE_RETV.
1314
1315 AC_DEFUN([CURL_CHECK_FUNC_RECV], [
1316   AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl
1317   AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
1318   AC_CHECK_HEADERS(sys/types.h sys/socket.h)
1319   #
1320   AC_MSG_CHECKING([for recv])
1321   AC_LINK_IFELSE([
1322     AC_LANG_PROGRAM([[
1323 #undef inline
1324 #ifdef HAVE_WINDOWS_H
1325 #ifndef WIN32_LEAN_AND_MEAN
1326 #define WIN32_LEAN_AND_MEAN
1327 #endif
1328 #include <windows.h>
1329 #ifdef HAVE_WINSOCK2_H
1330 #include <winsock2.h>
1331 #else
1332 #ifdef HAVE_WINSOCK_H
1333 #include <winsock.h>
1334 #endif
1335 #endif
1336 #else
1337 #ifdef HAVE_SYS_TYPES_H
1338 #include <sys/types.h>
1339 #endif
1340 #ifdef HAVE_SYS_SOCKET_H
1341 #include <sys/socket.h>
1342 #endif
1343 #endif
1344     ]],[[
1345       recv(0, 0, 0, 0);
1346     ]])
1347   ],[
1348     AC_MSG_RESULT([yes])
1349     curl_cv_recv="yes"
1350   ],[
1351     AC_MSG_RESULT([no])
1352     curl_cv_recv="no"
1353   ])
1354   #
1355   if test "$curl_cv_recv" = "yes"; then
1356     AC_CACHE_CHECK([types of args and return type for recv],
1357       [curl_cv_func_recv_args], [
1358       curl_cv_func_recv_args="unknown"
1359       for recv_retv in 'int' 'ssize_t'; do
1360         for recv_arg1 in 'int' 'ssize_t' 'SOCKET'; do
1361           for recv_arg2 in 'char *' 'void *'; do
1362             for recv_arg3 in 'size_t' 'int' 'socklen_t' 'unsigned int'; do
1363               for recv_arg4 in 'int' 'unsigned int'; do
1364                 if test "$curl_cv_func_recv_args" = "unknown"; then
1365                   AC_COMPILE_IFELSE([
1366                     AC_LANG_PROGRAM([[
1367 #undef inline
1368 #ifdef HAVE_WINDOWS_H
1369 #ifndef WIN32_LEAN_AND_MEAN
1370 #define WIN32_LEAN_AND_MEAN
1371 #endif
1372 #include <windows.h>
1373 #ifdef HAVE_WINSOCK2_H
1374 #include <winsock2.h>
1375 #else
1376 #ifdef HAVE_WINSOCK_H
1377 #include <winsock.h>
1378 #endif
1379 #endif
1380 #define RECVCALLCONV PASCAL
1381 #else
1382 #ifdef HAVE_SYS_TYPES_H
1383 #include <sys/types.h>
1384 #endif
1385 #ifdef HAVE_SYS_SOCKET_H
1386 #include <sys/socket.h>
1387 #endif
1388 #define RECVCALLCONV
1389 #endif
1390                       extern $recv_retv RECVCALLCONV
1391                       recv($recv_arg1, $recv_arg2, $recv_arg3, $recv_arg4);
1392                     ]],[[
1393                       $recv_arg1 s=0;
1394                       $recv_arg2 buf=0;
1395                       $recv_arg3 len=0;
1396                       $recv_arg4 flags=0;
1397                       $recv_retv res = recv(s, buf, len, flags);
1398                     ]])
1399                   ],[
1400                     curl_cv_func_recv_args="$recv_arg1,$recv_arg2,$recv_arg3,$recv_arg4,$recv_retv"
1401                   ])
1402                 fi
1403               done
1404             done
1405           done
1406         done
1407       done
1408     ]) # AC-CACHE-CHECK
1409     if test "$curl_cv_func_recv_args" = "unknown"; then
1410       AC_MSG_ERROR([Cannot find proper types to use for recv args])
1411     else
1412       recv_prev_IFS=$IFS; IFS=','
1413       set dummy `echo "$curl_cv_func_recv_args" | sed 's/\*/\*/g'`
1414       IFS=$recv_prev_IFS
1415       shift
1416       #
1417       AC_DEFINE_UNQUOTED(RECV_TYPE_ARG1, $[1],
1418         [Define to the type of arg 1 for recv.])
1419       AC_DEFINE_UNQUOTED(RECV_TYPE_ARG2, $[2],
1420         [Define to the type of arg 2 for recv.])
1421       AC_DEFINE_UNQUOTED(RECV_TYPE_ARG3, $[3],
1422         [Define to the type of arg 3 for recv.])
1423       AC_DEFINE_UNQUOTED(RECV_TYPE_ARG4, $[4],
1424         [Define to the type of arg 4 for recv.])
1425       AC_DEFINE_UNQUOTED(RECV_TYPE_RETV, $[5],
1426         [Define to the function return type for recv.])
1427       #
1428       AC_DEFINE_UNQUOTED(HAVE_RECV, 1,
1429         [Define to 1 if you have the recv function.])
1430       ac_cv_func_recv="yes"
1431     fi
1432   else
1433     AC_MSG_ERROR([Unable to link function recv])
1434   fi
1435 ])
1436
1437
1438 dnl CURL_CHECK_FUNC_SEND
1439 dnl -------------------------------------------------
1440 dnl Test if the socket send() function is available,
1441 dnl and check its return type and the types of its
1442 dnl arguments. If the function succeeds HAVE_SEND
1443 dnl will be defined, defining the types of the arguments
1444 dnl in SEND_TYPE_ARG1, SEND_TYPE_ARG2, SEND_TYPE_ARG3
1445 dnl and SEND_TYPE_ARG4, defining the type of the function
1446 dnl return value in SEND_TYPE_RETV, and also defining the
1447 dnl type qualifier of second argument in SEND_QUAL_ARG2.
1448
1449 AC_DEFUN([CURL_CHECK_FUNC_SEND], [
1450   AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl
1451   AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
1452   AC_CHECK_HEADERS(sys/types.h sys/socket.h)
1453   #
1454   AC_MSG_CHECKING([for send])
1455   AC_LINK_IFELSE([
1456     AC_LANG_PROGRAM([[
1457 #undef inline
1458 #ifdef HAVE_WINDOWS_H
1459 #ifndef WIN32_LEAN_AND_MEAN
1460 #define WIN32_LEAN_AND_MEAN
1461 #endif
1462 #include <windows.h>
1463 #ifdef HAVE_WINSOCK2_H
1464 #include <winsock2.h>
1465 #else
1466 #ifdef HAVE_WINSOCK_H
1467 #include <winsock.h>
1468 #endif
1469 #endif
1470 #else
1471 #ifdef HAVE_SYS_TYPES_H
1472 #include <sys/types.h>
1473 #endif
1474 #ifdef HAVE_SYS_SOCKET_H
1475 #include <sys/socket.h>
1476 #endif
1477 #endif
1478     ]],[[
1479       send(0, 0, 0, 0);
1480     ]])
1481   ],[
1482     AC_MSG_RESULT([yes])
1483     curl_cv_send="yes"
1484   ],[
1485     AC_MSG_RESULT([no])
1486     curl_cv_send="no"
1487   ])
1488   #
1489   if test "$curl_cv_send" = "yes"; then
1490     AC_CACHE_CHECK([types of args and return type for send],
1491       [curl_cv_func_send_args], [
1492       curl_cv_func_send_args="unknown"
1493       for send_retv in 'int' 'ssize_t'; do
1494         for send_arg1 in 'int' 'ssize_t' 'SOCKET'; do
1495           for send_arg2 in 'char *' 'void *' 'const char *' 'const void *'; do
1496             for send_arg3 in 'size_t' 'int' 'socklen_t' 'unsigned int'; do
1497               for send_arg4 in 'int' 'unsigned int'; do
1498                 if test "$curl_cv_func_send_args" = "unknown"; then
1499                   AC_COMPILE_IFELSE([
1500                     AC_LANG_PROGRAM([[
1501 #undef inline
1502 #ifdef HAVE_WINDOWS_H
1503 #ifndef WIN32_LEAN_AND_MEAN
1504 #define WIN32_LEAN_AND_MEAN
1505 #endif
1506 #include <windows.h>
1507 #ifdef HAVE_WINSOCK2_H
1508 #include <winsock2.h>
1509 #else
1510 #ifdef HAVE_WINSOCK_H
1511 #include <winsock.h>
1512 #endif
1513 #endif
1514 #define SENDCALLCONV PASCAL
1515 #else
1516 #ifdef HAVE_SYS_TYPES_H
1517 #include <sys/types.h>
1518 #endif
1519 #ifdef HAVE_SYS_SOCKET_H
1520 #include <sys/socket.h>
1521 #endif
1522 #define SENDCALLCONV
1523 #endif
1524                       extern $send_retv SENDCALLCONV
1525                       send($send_arg1, $send_arg2, $send_arg3, $send_arg4);
1526                     ]],[[
1527                       $send_arg1 s=0;
1528                       $send_arg3 len=0;
1529                       $send_arg4 flags=0;
1530                       $send_retv res = send(s, 0, len, flags);
1531                     ]])
1532                   ],[
1533                     curl_cv_func_send_args="$send_arg1,$send_arg2,$send_arg3,$send_arg4,$send_retv"
1534                   ])
1535                 fi
1536               done
1537             done
1538           done
1539         done
1540       done
1541     ]) # AC-CACHE-CHECK
1542     if test "$curl_cv_func_send_args" = "unknown"; then
1543       AC_MSG_ERROR([Cannot find proper types to use for send args])
1544     else
1545       send_prev_IFS=$IFS; IFS=','
1546       set dummy `echo "$curl_cv_func_send_args" | sed 's/\*/\*/g'`
1547       IFS=$send_prev_IFS
1548       shift
1549       #
1550       send_qual_type_arg2=$[2]
1551       #
1552       AC_DEFINE_UNQUOTED(SEND_TYPE_ARG1, $[1],
1553         [Define to the type of arg 1 for send.])
1554       AC_DEFINE_UNQUOTED(SEND_TYPE_ARG3, $[3],
1555         [Define to the type of arg 3 for send.])
1556       AC_DEFINE_UNQUOTED(SEND_TYPE_ARG4, $[4],
1557         [Define to the type of arg 4 for send.])
1558       AC_DEFINE_UNQUOTED(SEND_TYPE_RETV, $[5],
1559         [Define to the function return type for send.])
1560       #
1561       prev_sh_opts=$-
1562       #
1563       case $prev_sh_opts in
1564         *f*)
1565           ;;
1566         *)
1567           set -f
1568           ;;
1569       esac
1570       #
1571       case "$send_qual_type_arg2" in
1572         const*)
1573           send_qual_arg2=const
1574           send_type_arg2=`echo $send_qual_type_arg2 | sed 's/^const //'`
1575         ;;
1576         *)
1577           send_qual_arg2=
1578           send_type_arg2=$send_qual_type_arg2
1579         ;;
1580       esac
1581       #
1582       AC_DEFINE_UNQUOTED(SEND_QUAL_ARG2, $send_qual_arg2,
1583         [Define to the type qualifier of arg 2 for send.])
1584       AC_DEFINE_UNQUOTED(SEND_TYPE_ARG2, $send_type_arg2,
1585         [Define to the type of arg 2 for send.])
1586       #
1587       case $prev_sh_opts in
1588         *f*)
1589           ;;
1590         *)
1591           set +f
1592           ;;
1593       esac
1594       #
1595       AC_DEFINE_UNQUOTED(HAVE_SEND, 1,
1596         [Define to 1 if you have the send function.])
1597       ac_cv_func_send="yes"
1598     fi
1599   else
1600     AC_MSG_ERROR([Unable to link function send])
1601   fi
1602 ])
1603
1604
1605 dnl CURL_CHECK_FUNC_RECVFROM
1606 dnl -------------------------------------------------
1607 dnl Test if the socket recvfrom() function is available,
1608 dnl and check its return type and the types of its
1609 dnl arguments. If the function succeeds HAVE_RECVFROM
1610 dnl will be defined, defining the types of the arguments
1611 dnl in RECVFROM_TYPE_ARG1, RECVFROM_TYPE_ARG2, and so on
1612 dnl to RECVFROM_TYPE_ARG6, defining also the type of the
1613 dnl function return value in RECVFROM_TYPE_RETV.
1614 dnl Notice that the types returned for pointer arguments
1615 dnl will actually be the type pointed by the pointer.
1616
1617 AC_DEFUN([CURL_CHECK_FUNC_RECVFROM], [
1618   AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl
1619   AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
1620   AC_CHECK_HEADERS(sys/types.h sys/socket.h)
1621   #
1622   AC_MSG_CHECKING([for recvfrom])
1623   AC_LINK_IFELSE([
1624     AC_LANG_PROGRAM([[
1625 #undef inline
1626 #ifdef HAVE_WINDOWS_H
1627 #ifndef WIN32_LEAN_AND_MEAN
1628 #define WIN32_LEAN_AND_MEAN
1629 #endif
1630 #include <windows.h>
1631 #ifdef HAVE_WINSOCK2_H
1632 #include <winsock2.h>
1633 #else
1634 #ifdef HAVE_WINSOCK_H
1635 #include <winsock.h>
1636 #endif
1637 #endif
1638 #else
1639 #ifdef HAVE_SYS_TYPES_H
1640 #include <sys/types.h>
1641 #endif
1642 #ifdef HAVE_SYS_SOCKET_H
1643 #include <sys/socket.h>
1644 #endif
1645 #endif
1646     ]],[[
1647       recvfrom(0, 0, 0, 0, 0, 0);
1648     ]])
1649   ],[
1650     AC_MSG_RESULT([yes])
1651     curl_cv_recvfrom="yes"
1652   ],[
1653     AC_MSG_RESULT([no])
1654     curl_cv_recvfrom="no"
1655   ])
1656   #
1657   if test "$curl_cv_recvfrom" = "yes"; then
1658     AC_CACHE_CHECK([types of args and return type for recvfrom],
1659       [curl_cv_func_recvfrom_args], [
1660       curl_cv_func_recvfrom_args="unknown"
1661       for recvfrom_retv in 'int' 'ssize_t'; do
1662         for recvfrom_arg1 in 'int' 'ssize_t' 'SOCKET'; do
1663           for recvfrom_arg2 in 'char *' 'void *'; do
1664             for recvfrom_arg3 in 'size_t' 'int' 'socklen_t' 'unsigned int'; do
1665               for recvfrom_arg4 in 'int' 'unsigned int'; do
1666                 for recvfrom_arg5 in 'const struct sockaddr *' 'struct sockaddr *' 'void *'; do
1667                   for recvfrom_arg6 in 'socklen_t *' 'int *' 'unsigned int *' 'size_t *' 'void *'; do
1668                     if test "$curl_cv_func_recvfrom_args" = "unknown"; then
1669                       AC_COMPILE_IFELSE([
1670                         AC_LANG_PROGRAM([[
1671 #undef inline
1672 #ifdef HAVE_WINDOWS_H
1673 #ifndef WIN32_LEAN_AND_MEAN
1674 #define WIN32_LEAN_AND_MEAN
1675 #endif
1676 #include <windows.h>
1677 #ifdef HAVE_WINSOCK2_H
1678 #include <winsock2.h>
1679 #else
1680 #ifdef HAVE_WINSOCK_H
1681 #include <winsock.h>
1682 #endif
1683 #endif
1684 #define RECVFROMCALLCONV PASCAL
1685 #else
1686 #ifdef HAVE_SYS_TYPES_H
1687 #include <sys/types.h>
1688 #endif
1689 #ifdef HAVE_SYS_SOCKET_H
1690 #include <sys/socket.h>
1691 #endif
1692 #define RECVFROMCALLCONV
1693 #endif
1694                           extern $recvfrom_retv RECVFROMCALLCONV
1695                           recvfrom($recvfrom_arg1, $recvfrom_arg2,
1696                                    $recvfrom_arg3, $recvfrom_arg4,
1697                                    $recvfrom_arg5, $recvfrom_arg6);
1698                         ]],[[
1699                           $recvfrom_arg1 s=0;
1700                           $recvfrom_arg2 buf=0;
1701                           $recvfrom_arg3 len=0;
1702                           $recvfrom_arg4 flags=0;
1703                           $recvfrom_arg5 addr=0;
1704                           $recvfrom_arg6 addrlen=0;
1705                           $recvfrom_retv res=0;
1706                           res = recvfrom(s, buf, len, flags, addr, addrlen);
1707                         ]])
1708                       ],[
1709                         curl_cv_func_recvfrom_args="$recvfrom_arg1,$recvfrom_arg2,$recvfrom_arg3,$recvfrom_arg4,$recvfrom_arg5,$recvfrom_arg6,$recvfrom_retv"
1710                       ])
1711                     fi
1712                   done
1713                 done
1714               done
1715             done
1716           done
1717         done
1718       done
1719     ]) # AC-CACHE-CHECK
1720     # Nearly last minute change for this release starts here
1721     AC_DEFINE_UNQUOTED(HAVE_RECVFROM, 1,
1722       [Define to 1 if you have the recvfrom function.])
1723     ac_cv_func_recvfrom="yes"
1724     # Nearly last minute change for this release ends here
1725     if test "$curl_cv_func_recvfrom_args" = "unknown"; then
1726       AC_MSG_WARN([Cannot find proper types to use for recvfrom args])
1727     else
1728       recvfrom_prev_IFS=$IFS; IFS=','
1729       set dummy `echo "$curl_cv_func_recvfrom_args" | sed 's/\*/\*/g'`
1730       IFS=$recvfrom_prev_IFS
1731       shift
1732       #
1733       recvfrom_ptrt_arg2=$[2]
1734       recvfrom_ptrt_arg5=$[5]
1735       recvfrom_ptrt_arg6=$[6]
1736       #
1737       AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG1, $[1],
1738         [Define to the type of arg 1 for recvfrom.])
1739       AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG3, $[3],
1740         [Define to the type of arg 3 for recvfrom.])
1741       AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG4, $[4],
1742         [Define to the type of arg 4 for recvfrom.])
1743       AC_DEFINE_UNQUOTED(RECVFROM_TYPE_RETV, $[7],
1744         [Define to the function return type for recvfrom.])
1745       #
1746       prev_sh_opts=$-
1747       #
1748       case $prev_sh_opts in
1749         *f*)
1750           ;;
1751         *)
1752           set -f
1753           ;;
1754       esac
1755       #
1756       recvfrom_type_arg2=`echo $recvfrom_ptrt_arg2 | sed 's/ \*//'`
1757       recvfrom_type_arg5=`echo $recvfrom_ptrt_arg5 | sed 's/ \*//'`
1758       recvfrom_type_arg6=`echo $recvfrom_ptrt_arg6 | sed 's/ \*//'`
1759       #
1760       AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG2, $recvfrom_type_arg2,
1761         [Define to the type pointed by arg 2 for recvfrom.])
1762       AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG5, $recvfrom_type_arg5,
1763         [Define to the type pointed by arg 5 for recvfrom.])
1764       AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG6, $recvfrom_type_arg6,
1765         [Define to the type pointed by arg 6 for recvfrom.])
1766       #
1767       if test "$recvfrom_type_arg2" = "void"; then
1768         AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG2_IS_VOID, 1,
1769           [Define to 1 if the type pointed by arg 2 for recvfrom is void.])
1770       fi
1771       if test "$recvfrom_type_arg5" = "void"; then
1772         AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG5_IS_VOID, 1,
1773           [Define to 1 if the type pointed by arg 5 for recvfrom is void.])
1774       fi
1775       if test "$recvfrom_type_arg6" = "void"; then
1776         AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG6_IS_VOID, 1,
1777           [Define to 1 if the type pointed by arg 6 for recvfrom is void.])
1778       fi
1779       #
1780       case $prev_sh_opts in
1781         *f*)
1782           ;;
1783         *)
1784           set +f
1785           ;;
1786       esac
1787       #
1788       AC_DEFINE_UNQUOTED(HAVE_RECVFROM, 1,
1789         [Define to 1 if you have the recvfrom function.])
1790       ac_cv_func_recvfrom="yes"
1791     fi
1792   else
1793     AC_MSG_WARN([Unable to link function recvfrom])
1794   fi
1795 ])
1796
1797
1798 dnl CURL_CHECK_MSG_NOSIGNAL
1799 dnl -------------------------------------------------
1800 dnl Check for MSG_NOSIGNAL
1801
1802 AC_DEFUN([CURL_CHECK_MSG_NOSIGNAL], [
1803   AC_CHECK_HEADERS(sys/types.h sys/socket.h)
1804   AC_CACHE_CHECK([for MSG_NOSIGNAL], [ac_cv_msg_nosignal], [
1805     AC_COMPILE_IFELSE([
1806       AC_LANG_PROGRAM([[
1807 #undef inline
1808 #ifdef HAVE_WINDOWS_H
1809 #ifndef WIN32_LEAN_AND_MEAN
1810 #define WIN32_LEAN_AND_MEAN
1811 #endif
1812 #include <windows.h>
1813 #ifdef HAVE_WINSOCK2_H
1814 #include <winsock2.h>
1815 #else
1816 #ifdef HAVE_WINSOCK_H
1817 #include <winsock.h>
1818 #endif
1819 #endif
1820 #else
1821 #ifdef HAVE_SYS_TYPES_H
1822 #include <sys/types.h>
1823 #endif
1824 #ifdef HAVE_SYS_SOCKET_H
1825 #include <sys/socket.h>
1826 #endif
1827 #endif
1828       ]],[[
1829         int flag=MSG_NOSIGNAL;
1830       ]])
1831     ],[
1832       ac_cv_msg_nosignal="yes"
1833     ],[
1834       ac_cv_msg_nosignal="no"
1835     ])
1836   ])
1837   case "$ac_cv_msg_nosignal" in
1838     yes)
1839       AC_DEFINE_UNQUOTED(HAVE_MSG_NOSIGNAL, 1,
1840         [Define to 1 if you have the MSG_NOSIGNAL flag.])
1841       ;;
1842   esac
1843 ])
1844
1845
1846 dnl CURL_CHECK_STRUCT_TIMEVAL
1847 dnl -------------------------------------------------
1848 dnl Check for timeval struct
1849
1850 AC_DEFUN([CURL_CHECK_STRUCT_TIMEVAL], [
1851   AC_REQUIRE([AC_HEADER_TIME])dnl
1852   AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl
1853   AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
1854   AC_CHECK_HEADERS(sys/types.h sys/time.h time.h sys/socket.h)
1855   AC_CACHE_CHECK([for struct timeval], [ac_cv_struct_timeval], [
1856     AC_COMPILE_IFELSE([
1857       AC_LANG_PROGRAM([[
1858 #undef inline
1859 #ifdef HAVE_WINDOWS_H
1860 #ifndef WIN32_LEAN_AND_MEAN
1861 #define WIN32_LEAN_AND_MEAN
1862 #endif
1863 #include <windows.h>
1864 #ifdef HAVE_WINSOCK2_H
1865 #include <winsock2.h>
1866 #else
1867 #ifdef HAVE_WINSOCK_H
1868 #include <winsock.h>
1869 #endif
1870 #endif
1871 #endif
1872 #ifdef HAVE_SYS_TYPES_H
1873 #include <sys/types.h>
1874 #endif
1875 #ifdef HAVE_SYS_TIME_H
1876 #include <sys/time.h>
1877 #ifdef TIME_WITH_SYS_TIME
1878 #include <time.h>
1879 #endif
1880 #else
1881 #ifdef HAVE_TIME_H
1882 #include <time.h>
1883 #endif
1884 #endif
1885 #ifdef HAVE_SYS_SOCKET_H
1886 #include <sys/socket.h>
1887 #endif
1888       ]],[[
1889         struct timeval ts;
1890         ts.tv_sec  = 0;
1891         ts.tv_usec = 0;
1892       ]])
1893     ],[
1894       ac_cv_struct_timeval="yes"
1895     ],[
1896       ac_cv_struct_timeval="no"
1897     ])
1898   ])
1899   case "$ac_cv_struct_timeval" in
1900     yes)
1901       AC_DEFINE_UNQUOTED(HAVE_STRUCT_TIMEVAL, 1,
1902         [Define to 1 if you have the timeval struct.])
1903       ;;
1904   esac
1905 ])
1906
1907
1908 dnl TYPE_SIG_ATOMIC_T
1909 dnl -------------------------------------------------
1910 dnl Check if the sig_atomic_t type is available, and
1911 dnl verify if it is already defined as volatile.
1912
1913 AC_DEFUN([TYPE_SIG_ATOMIC_T], [
1914   AC_CHECK_HEADERS(signal.h)
1915   AC_CHECK_TYPE([sig_atomic_t],[
1916     AC_DEFINE(HAVE_SIG_ATOMIC_T, 1,
1917       [Define to 1 if sig_atomic_t is an available typedef.])
1918   ], ,[
1919 #ifdef HAVE_SIGNAL_H
1920 #include <signal.h>
1921 #endif
1922   ])
1923   case "$ac_cv_type_sig_atomic_t" in
1924     yes)
1925       #
1926       AC_MSG_CHECKING([if sig_atomic_t is already defined as volatile])
1927       AC_LINK_IFELSE([
1928         AC_LANG_PROGRAM([[
1929 #ifdef HAVE_SIGNAL_H
1930 #include <signal.h>
1931 #endif
1932         ]],[[
1933           static volatile sig_atomic_t dummy = 0;
1934         ]])
1935       ],[
1936         AC_MSG_RESULT([no])
1937         ac_cv_sig_atomic_t_volatile="no"
1938       ],[
1939         AC_MSG_RESULT([yes])
1940         ac_cv_sig_atomic_t_volatile="yes"
1941       ])
1942       #
1943       if test "$ac_cv_sig_atomic_t_volatile" = "yes"; then
1944         AC_DEFINE(HAVE_SIG_ATOMIC_T_VOLATILE, 1,
1945           [Define to 1 if sig_atomic_t is already defined as volatile.])
1946       fi
1947       ;;
1948   esac
1949 ])
1950
1951
1952 dnl TYPE_IN_ADDR_T
1953 dnl -------------------------------------------------
1954 dnl Check for in_addr_t: it is used to receive the return code of inet_addr()
1955 dnl and a few other things.
1956
1957 AC_DEFUN([TYPE_IN_ADDR_T], [
1958   AC_CHECK_TYPE([in_addr_t], ,[
1959     dnl in_addr_t not available
1960     AC_CACHE_CHECK([for in_addr_t equivalent],
1961       [curl_cv_in_addr_t_equiv], [
1962       curl_cv_in_addr_t_equiv="unknown"
1963       for t in "unsigned long" int size_t unsigned long; do
1964         if test "$curl_cv_in_addr_t_equiv" = "unknown"; then
1965           AC_LINK_IFELSE([
1966             AC_LANG_PROGRAM([[
1967 #undef inline
1968 #ifdef HAVE_WINDOWS_H
1969 #ifndef WIN32_LEAN_AND_MEAN
1970 #define WIN32_LEAN_AND_MEAN
1971 #endif
1972 #include <windows.h>
1973 #ifdef HAVE_WINSOCK2_H
1974 #include <winsock2.h>
1975 #else
1976 #ifdef HAVE_WINSOCK_H
1977 #include <winsock.h>
1978 #endif
1979 #endif
1980 #else
1981 #ifdef HAVE_SYS_TYPES_H
1982 #include <sys/types.h>
1983 #endif
1984 #ifdef HAVE_SYS_SOCKET_H
1985 #include <sys/socket.h>
1986 #endif
1987 #ifdef HAVE_NETINET_IN_H
1988 #include <netinet/in.h>
1989 #endif
1990 #ifdef HAVE_ARPA_INET_H
1991 #include <arpa/inet.h>
1992 #endif
1993 #endif
1994             ]],[[
1995               $t data = inet_addr ("1.2.3.4");
1996             ]])
1997           ],[
1998             curl_cv_in_addr_t_equiv="$t"
1999           ])
2000         fi
2001       done
2002     ])
2003     case "$curl_cv_in_addr_t_equiv" in
2004       unknown)
2005         AC_MSG_ERROR([Cannot find a type to use in place of in_addr_t])
2006         ;;
2007       *)
2008         AC_DEFINE_UNQUOTED(in_addr_t, $curl_cv_in_addr_t_equiv,
2009           [Type to use in place of in_addr_t when system does not provide it.])
2010         ;;
2011     esac
2012   ],[
2013 #undef inline
2014 #ifdef HAVE_WINDOWS_H
2015 #ifndef WIN32_LEAN_AND_MEAN
2016 #define WIN32_LEAN_AND_MEAN
2017 #endif
2018 #include <windows.h>
2019 #ifdef HAVE_WINSOCK2_H
2020 #include <winsock2.h>
2021 #else
2022 #ifdef HAVE_WINSOCK_H
2023 #include <winsock.h>
2024 #endif
2025 #endif
2026 #else
2027 #ifdef HAVE_SYS_TYPES_H
2028 #include <sys/types.h>
2029 #endif
2030 #ifdef HAVE_SYS_SOCKET_H
2031 #include <sys/socket.h>
2032 #endif
2033 #ifdef HAVE_NETINET_IN_H
2034 #include <netinet/in.h>
2035 #endif
2036 #ifdef HAVE_ARPA_INET_H
2037 #include <arpa/inet.h>
2038 #endif
2039 #endif
2040   ])
2041 ])
2042
2043
2044 dnl CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC
2045 dnl -------------------------------------------------
2046 dnl Check if monotonic clock_gettime is available.
2047
2048 AC_DEFUN([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC], [
2049   AC_REQUIRE([AC_HEADER_TIME])dnl
2050   AC_CHECK_HEADERS(sys/types.h sys/time.h time.h)
2051   AC_MSG_CHECKING([for monotonic clock_gettime])
2052   AC_COMPILE_IFELSE([
2053     AC_LANG_PROGRAM([[
2054 #ifdef HAVE_SYS_TYPES_H
2055 #include <sys/types.h>
2056 #endif
2057 #ifdef HAVE_SYS_TIME_H
2058 #include <sys/time.h>
2059 #ifdef TIME_WITH_SYS_TIME
2060 #include <time.h>
2061 #endif
2062 #else
2063 #ifdef HAVE_TIME_H
2064 #include <time.h>
2065 #endif
2066 #endif
2067     ]],[[
2068       struct timespec ts;
2069       (void)clock_gettime(CLOCK_MONOTONIC, &ts);
2070     ]])
2071   ],[
2072     AC_MSG_RESULT([yes])
2073     ac_cv_func_clock_gettime="yes"
2074   ],[
2075     AC_MSG_RESULT([no])
2076     ac_cv_func_clock_gettime="no"
2077   ])
2078   dnl Definition of HAVE_CLOCK_GETTIME_MONOTONIC is intentionally postponed
2079   dnl until library linking and run-time checks for clock_gettime succeed.
2080 ])
2081
2082
2083 dnl CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC
2084 dnl -------------------------------------------------
2085 dnl If monotonic clock_gettime is available then,
2086 dnl check and prepended to LIBS any needed libraries.
2087
2088 AC_DEFUN([CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC], [
2089   AC_REQUIRE([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC])dnl
2090   #
2091   if test "$ac_cv_func_clock_gettime" = "yes"; then
2092     #
2093     AC_MSG_CHECKING([for clock_gettime in libraries])
2094     #
2095     curl_cv_save_LIBS="$LIBS"
2096     curl_cv_gclk_LIBS="unknown"
2097     #
2098     for x_xlibs in '' '-lrt' '-lposix4' ; do
2099       if test "$curl_cv_gclk_LIBS" = "unknown"; then
2100         if test -z "$x_xlibs"; then
2101           LIBS="$curl_cv_save_LIBS"
2102         else
2103           LIBS="$x_xlibs $curl_cv_save_LIBS"
2104         fi
2105         AC_LINK_IFELSE([
2106           AC_LANG_PROGRAM([[
2107 #ifdef HAVE_SYS_TYPES_H
2108 #include <sys/types.h>
2109 #endif
2110 #ifdef HAVE_SYS_TIME_H
2111 #include <sys/time.h>
2112 #ifdef TIME_WITH_SYS_TIME
2113 #include <time.h>
2114 #endif
2115 #else
2116 #ifdef HAVE_TIME_H
2117 #include <time.h>
2118 #endif
2119 #endif
2120           ]],[[
2121             struct timespec ts;
2122             (void)clock_gettime(CLOCK_MONOTONIC, &ts);
2123           ]])
2124         ],[
2125           curl_cv_gclk_LIBS="$x_xlibs"
2126         ])
2127       fi
2128     done
2129     #
2130     LIBS="$curl_cv_save_LIBS"
2131     #
2132     case X-"$curl_cv_gclk_LIBS" in
2133       X-unknown)
2134         AC_MSG_RESULT([cannot find clock_gettime])
2135         AC_MSG_WARN([HAVE_CLOCK_GETTIME_MONOTONIC will not be defined])
2136         ac_cv_func_clock_gettime="no"
2137         ;;
2138       X-)
2139         AC_MSG_RESULT([no additional lib required])
2140         ac_cv_func_clock_gettime="yes"
2141         ;;
2142       *)
2143         if test -z "$curl_cv_save_LIBS"; then
2144           LIBS="$curl_cv_gclk_LIBS"
2145         else
2146           LIBS="$curl_cv_gclk_LIBS $curl_cv_save_LIBS"
2147         fi
2148         CURL_LIBS="$CURL_LIBS $curl_cv_gclk_LIBS"
2149         AC_MSG_RESULT([$curl_cv_gclk_LIBS])
2150         ac_cv_func_clock_gettime="yes"
2151         ;;
2152     esac
2153     #
2154     dnl only do runtime verification when not cross-compiling
2155     if test "x$cross_compiling" != "xyes" &&
2156       test "$ac_cv_func_clock_gettime" = "yes"; then
2157       AC_MSG_CHECKING([if monotonic clock_gettime works])
2158       AC_RUN_IFELSE([
2159         AC_LANG_PROGRAM([[
2160 #ifdef HAVE_STDLIB_H
2161 #include <stdlib.h>
2162 #endif
2163 #ifdef HAVE_SYS_TYPES_H
2164 #include <sys/types.h>
2165 #endif
2166 #ifdef HAVE_SYS_TIME_H
2167 #include <sys/time.h>
2168 #ifdef TIME_WITH_SYS_TIME
2169 #include <time.h>
2170 #endif
2171 #else
2172 #ifdef HAVE_TIME_H
2173 #include <time.h>
2174 #endif
2175 #endif
2176         ]],[[
2177           struct timespec ts;
2178           if (0 == clock_gettime(CLOCK_MONOTONIC, &ts))
2179             exit(0);
2180           else
2181             exit(1);
2182         ]])
2183       ],[
2184         AC_MSG_RESULT([yes])
2185       ],[
2186         AC_MSG_RESULT([no])
2187         AC_MSG_WARN([HAVE_CLOCK_GETTIME_MONOTONIC will not be defined])
2188         ac_cv_func_clock_gettime="no"
2189         LIBS="$curl_cv_save_LIBS"
2190       ])
2191     fi
2192     #
2193     case "$ac_cv_func_clock_gettime" in
2194       yes)
2195         AC_DEFINE_UNQUOTED(HAVE_CLOCK_GETTIME_MONOTONIC, 1,
2196           [Define to 1 if you have the clock_gettime function and monotonic timer.])
2197         ;;
2198     esac
2199     #
2200   fi
2201   #
2202 ])
2203
2204
2205 dnl CURL_CHECK_LIBS_CONNECT
2206 dnl -------------------------------------------------
2207 dnl Verify if network connect function is already available
2208 dnl using current libraries or if another one is required.
2209
2210 AC_DEFUN([CURL_CHECK_LIBS_CONNECT], [
2211   AC_REQUIRE([CURL_INCLUDES_WINSOCK2])dnl
2212   AC_MSG_CHECKING([for connect in libraries])
2213   tst_connect_save_LIBS="$LIBS"
2214   tst_connect_need_LIBS="unknown"
2215   for tst_lib in '' '-lsocket' ; do
2216     if test "$tst_connect_need_LIBS" = "unknown"; then
2217       LIBS="$tst_lib $tst_connect_save_LIBS"
2218       AC_LINK_IFELSE([
2219         AC_LANG_PROGRAM([[
2220           $curl_includes_winsock2
2221           #ifndef HAVE_WINDOWS_H
2222             int connect(int, void*, int);
2223           #endif
2224         ]],[[
2225           if(0 != connect(0, 0, 0))
2226             return 1;
2227         ]])
2228       ],[
2229         tst_connect_need_LIBS="$tst_lib"
2230       ])
2231     fi
2232   done
2233   LIBS="$tst_connect_save_LIBS"
2234   #
2235   case X-"$tst_connect_need_LIBS" in
2236     X-unknown)
2237       AC_MSG_RESULT([cannot find connect])
2238       AC_MSG_ERROR([cannot find connect function in libraries.])
2239       ;;
2240     X-)
2241       AC_MSG_RESULT([yes])
2242       ;;
2243     *)
2244       AC_MSG_RESULT([$tst_connect_need_LIBS])
2245       LIBS="$tst_connect_need_LIBS $tst_connect_save_LIBS"
2246       ;;
2247   esac
2248 ])
2249
2250
2251 dnl CURL_DEFINE_UNQUOTED (VARIABLE, [VALUE])
2252 dnl -------------------------------------------------
2253 dnl Like AC_DEFINE_UNQUOTED this macro will define a C preprocessor
2254 dnl symbol that can be further used in custom template configuration
2255 dnl files. This macro, unlike AC_DEFINE_UNQUOTED, does not use a third
2256 dnl argument for the description. Symbol definitions done with this
2257 dnl macro are intended to be exclusively used in handcrafted *.h.in
2258 dnl template files. Contrary to what AC_DEFINE_UNQUOTED does, this one
2259 dnl prevents autoheader generation and insertion of symbol template
2260 dnl stub and definition into the first configuration header file. Do
2261 dnl not use this macro as a replacement for AC_DEFINE_UNQUOTED, each
2262 dnl one serves different functional needs.
2263
2264 AC_DEFUN([CURL_DEFINE_UNQUOTED], [
2265 cat >>confdefs.h <<_EOF
2266 [@%:@define] $1 ifelse($#, 2, [$2], 1)
2267 _EOF
2268 ])
2269
2270
2271 dnl CURL_CONFIGURE_LONG
2272 dnl -------------------------------------------------
2273 dnl Find out the size of long as reported by sizeof() and define
2274 dnl CURL_SIZEOF_LONG as appropriate to be used in template file
2275 dnl include/curl/curlbuild.h.in to properly configure the library.
2276 dnl The size of long is a build time characteristic and as such
2277 dnl must be recorded in curlbuild.h
2278
2279 AC_DEFUN([CURL_CONFIGURE_LONG], [
2280   if test -z "$ac_cv_sizeof_long" ||
2281     test "$ac_cv_sizeof_long" -eq "0"; then
2282     AC_MSG_ERROR([cannot find out size of long.])
2283   fi
2284   CURL_DEFINE_UNQUOTED([CURL_SIZEOF_LONG], [$ac_cv_sizeof_long])
2285 ])
2286
2287
2288 dnl CURL_CONFIGURE_CURL_SOCKLEN_T
2289 dnl -------------------------------------------------
2290 dnl Find out suitable curl_socklen_t data type definition and size, making
2291 dnl appropriate definitions for template file include/curl/curlbuild.h.in
2292 dnl to properly configure and use the library.
2293 dnl
2294 dnl The need for the curl_socklen_t definition arises mainly to properly
2295 dnl interface HP-UX systems which on one hand have a typedef'ed socklen_t
2296 dnl data type which is 32 or 64-Bit wide depending on the data model being
2297 dnl used, and that on the other hand is only actually used when interfacing
2298 dnl the X/Open sockets provided in the xnet library.
2299
2300 AC_DEFUN([CURL_CONFIGURE_CURL_SOCKLEN_T], [
2301   AC_REQUIRE([CURL_INCLUDES_WS2TCPIP])dnl
2302   AC_REQUIRE([CURL_INCLUDES_SYS_SOCKET])dnl
2303   AC_REQUIRE([CURL_PREPROCESS_CALLCONV])dnl
2304   #
2305   AC_MSG_CHECKING([for curl_socklen_t data type])
2306   curl_typeof_curl_socklen_t="unknown"
2307   for arg1 in int SOCKET; do
2308     for arg2 in 'struct sockaddr' void; do
2309       for t in socklen_t int size_t 'unsigned int' long 'unsigned long' void; do
2310         if test "$curl_typeof_curl_socklen_t" = "unknown"; then
2311           AC_COMPILE_IFELSE([
2312             AC_LANG_PROGRAM([[
2313               $curl_includes_ws2tcpip
2314               $curl_includes_sys_socket
2315               $curl_preprocess_callconv
2316               extern int FUNCALLCONV getpeername($arg1, $arg2 *, $t *);
2317             ]],[[
2318               $t *lenptr = 0;
2319               if(0 != getpeername(0, 0, lenptr))
2320                 return 1;
2321             ]])
2322           ],[
2323             curl_typeof_curl_socklen_t="$t"
2324           ])
2325         fi
2326       done
2327     done
2328   done
2329   for t in socklen_t int; do
2330     if test "$curl_typeof_curl_socklen_t" = "void"; then
2331       AC_COMPILE_IFELSE([
2332         AC_LANG_PROGRAM([[
2333           $curl_includes_sys_socket
2334           typedef $t curl_socklen_t;
2335         ]],[[
2336           curl_socklen_t dummy;
2337         ]])
2338       ],[
2339         curl_typeof_curl_socklen_t="$t"
2340       ])
2341     fi
2342   done
2343   AC_MSG_RESULT([$curl_typeof_curl_socklen_t])
2344   if test "$curl_typeof_curl_socklen_t" = "void" ||
2345     test "$curl_typeof_curl_socklen_t" = "unknown"; then
2346     AC_MSG_ERROR([cannot find data type for curl_socklen_t.])
2347   fi
2348   #
2349   AC_MSG_CHECKING([size of curl_socklen_t])
2350   curl_sizeof_curl_socklen_t="unknown"
2351   curl_pull_headers_socklen_t="unknown"
2352   if test "$ac_cv_header_ws2tcpip_h" = "yes"; then
2353     tst_pull_header_checks='none ws2tcpip'
2354     tst_size_checks='4'
2355   else
2356     tst_pull_header_checks='none systypes syssocket'
2357     tst_size_checks='4 8 2'
2358   fi
2359   for tst_size in $tst_size_checks; do
2360     for tst_pull_headers in $tst_pull_header_checks; do
2361       if test "$curl_sizeof_curl_socklen_t" = "unknown"; then
2362         case $tst_pull_headers in
2363           ws2tcpip)
2364             tmp_includes="$curl_includes_ws2tcpip"
2365             ;;
2366           systypes)
2367             tmp_includes="$curl_includes_sys_types"
2368             ;;
2369           syssocket)
2370             tmp_includes="$curl_includes_sys_socket"
2371             ;;
2372           *)
2373             tmp_includes=""
2374             ;;
2375         esac
2376         AC_COMPILE_IFELSE([
2377           AC_LANG_PROGRAM([[
2378             $tmp_includes
2379             typedef $curl_typeof_curl_socklen_t curl_socklen_t;
2380             typedef char dummy_arr[sizeof(curl_socklen_t) == $tst_size ? 1 : -1];
2381           ]],[[
2382             curl_socklen_t dummy;
2383           ]])
2384         ],[
2385           curl_sizeof_curl_socklen_t="$tst_size"
2386           curl_pull_headers_socklen_t="$tst_pull_headers"
2387         ])
2388       fi
2389     done
2390   done
2391   AC_MSG_RESULT([$curl_sizeof_curl_socklen_t])
2392   if test "$curl_sizeof_curl_socklen_t" = "unknown"; then
2393     AC_MSG_ERROR([cannot find out size of curl_socklen_t.])
2394   fi
2395   #
2396   case $curl_pull_headers_socklen_t in
2397     ws2tcpip)
2398       CURL_DEFINE_UNQUOTED([CURL_PULL_WS2TCPIP_H])
2399       ;;
2400     systypes)
2401       CURL_DEFINE_UNQUOTED([CURL_PULL_SYS_TYPES_H])
2402       ;;
2403     syssocket)
2404       CURL_DEFINE_UNQUOTED([CURL_PULL_SYS_TYPES_H])
2405       CURL_DEFINE_UNQUOTED([CURL_PULL_SYS_SOCKET_H])
2406       ;;
2407   esac
2408   CURL_DEFINE_UNQUOTED([CURL_TYPEOF_CURL_SOCKLEN_T], [$curl_typeof_curl_socklen_t])
2409   CURL_DEFINE_UNQUOTED([CURL_SIZEOF_CURL_SOCKLEN_T], [$curl_sizeof_curl_socklen_t])
2410 ])
2411
2412
2413 dnl CURL_CHECK_FUNC_SELECT
2414 dnl -------------------------------------------------
2415 dnl Test if the socket select() function is available,
2416 dnl and check its return type and the types of its
2417 dnl arguments. If the function succeeds HAVE_SELECT
2418 dnl will be defined, defining the types of the
2419 dnl arguments in SELECT_TYPE_ARG1, SELECT_TYPE_ARG234
2420 dnl and SELECT_TYPE_ARG5, defining the type of the
2421 dnl function return value in SELECT_TYPE_RETV, and
2422 dnl also defining the type qualifier of fifth argument
2423 dnl in SELECT_QUAL_ARG5.
2424
2425 AC_DEFUN([CURL_CHECK_FUNC_SELECT], [
2426   AC_REQUIRE([CURL_CHECK_STRUCT_TIMEVAL])dnl
2427   AC_CHECK_HEADERS(sys/select.h sys/socket.h)
2428   #
2429   AC_MSG_CHECKING([for select])
2430   AC_LINK_IFELSE([
2431     AC_LANG_PROGRAM([[
2432 #undef inline
2433 #ifdef HAVE_WINDOWS_H
2434 #ifndef WIN32_LEAN_AND_MEAN
2435 #define WIN32_LEAN_AND_MEAN
2436 #endif
2437 #include <windows.h>
2438 #ifdef HAVE_WINSOCK2_H
2439 #include <winsock2.h>
2440 #else
2441 #ifdef HAVE_WINSOCK_H
2442 #include <winsock.h>
2443 #endif
2444 #endif
2445 #endif
2446 #ifdef HAVE_SYS_TYPES_H
2447 #include <sys/types.h>
2448 #endif
2449 #ifdef HAVE_SYS_TIME_H
2450 #include <sys/time.h>
2451 #ifdef TIME_WITH_SYS_TIME
2452 #include <time.h>
2453 #endif
2454 #else
2455 #ifdef HAVE_TIME_H
2456 #include <time.h>
2457 #endif
2458 #endif
2459 #ifndef HAVE_WINDOWS_H
2460 #ifdef HAVE_SYS_SELECT_H
2461 #include <sys/select.h>
2462 #endif
2463 #ifdef HAVE_SYS_SOCKET_H
2464 #include <sys/socket.h>
2465 #endif
2466 #endif
2467     ]],[[
2468       select(0, 0, 0, 0, 0);
2469     ]])
2470   ],[
2471     AC_MSG_RESULT([yes])
2472     curl_cv_select="yes"
2473   ],[
2474     AC_MSG_RESULT([no])
2475     curl_cv_select="no"
2476   ])
2477   #
2478   if test "$curl_cv_select" = "yes"; then
2479     AC_CACHE_CHECK([types of args and return type for select],
2480       [curl_cv_func_select_args], [
2481       curl_cv_func_select_args="unknown"
2482       for sel_retv in 'int' 'ssize_t'; do
2483         for sel_arg1 in 'int' 'ssize_t' 'size_t' 'unsigned long int' 'unsigned int'; do
2484           for sel_arg234 in 'fd_set *' 'int *' 'void *'; do
2485             for sel_arg5 in 'struct timeval *' 'const struct timeval *'; do
2486               if test "$curl_cv_func_select_args" = "unknown"; then
2487                 AC_COMPILE_IFELSE([
2488                   AC_LANG_PROGRAM([[
2489 #undef inline
2490 #ifdef HAVE_WINDOWS_H
2491 #ifndef WIN32_LEAN_AND_MEAN
2492 #define WIN32_LEAN_AND_MEAN
2493 #endif
2494 #include <windows.h>
2495 #ifdef HAVE_WINSOCK2_H
2496 #include <winsock2.h>
2497 #else
2498 #ifdef HAVE_WINSOCK_H
2499 #include <winsock.h>
2500 #endif
2501 #endif
2502 #define SELECTCALLCONV PASCAL
2503 #endif
2504 #ifdef HAVE_SYS_TYPES_H
2505 #include <sys/types.h>
2506 #endif
2507 #ifdef HAVE_SYS_TIME_H
2508 #include <sys/time.h>
2509 #ifdef TIME_WITH_SYS_TIME
2510 #include <time.h>
2511 #endif
2512 #else
2513 #ifdef HAVE_TIME_H
2514 #include <time.h>
2515 #endif
2516 #endif
2517 #ifndef HAVE_WINDOWS_H
2518 #ifdef HAVE_SYS_SELECT_H
2519 #include <sys/select.h>
2520 #endif
2521 #ifdef HAVE_SYS_SOCKET_H
2522 #include <sys/socket.h>
2523 #endif
2524 #define SELECTCALLCONV
2525 #endif
2526 #ifndef HAVE_STRUCT_TIMEVAL
2527                     struct timeval {
2528                       long tv_sec;
2529                       long tv_usec;
2530                     };
2531 #endif
2532                     extern $sel_retv SELECTCALLCONV select($sel_arg1,
2533                                                            $sel_arg234,
2534                                                            $sel_arg234,
2535                                                            $sel_arg234,
2536                                                            $sel_arg5);
2537                   ]],[[
2538                     $sel_arg1   nfds=0;
2539                     $sel_arg234 rfds=0;
2540                     $sel_arg234 wfds=0;
2541                     $sel_arg234 efds=0;
2542                     $sel_retv res = select(nfds, rfds, wfds, efds, 0);
2543                   ]])
2544                 ],[
2545                   curl_cv_func_select_args="$sel_arg1,$sel_arg234,$sel_arg5,$sel_retv"
2546                 ])
2547               fi
2548             done
2549           done
2550         done
2551       done
2552     ]) # AC-CACHE-CHECK
2553     if test "$curl_cv_func_select_args" = "unknown"; then
2554       AC_MSG_WARN([Cannot find proper types to use for select args])
2555       AC_MSG_WARN([HAVE_SELECT will not be defined])
2556     else
2557       select_prev_IFS=$IFS; IFS=','
2558       set dummy `echo "$curl_cv_func_select_args" | sed 's/\*/\*/g'`
2559       IFS=$select_prev_IFS
2560       shift
2561       #
2562       sel_qual_type_arg5=$[3]
2563       #
2564       AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG1, $[1],
2565         [Define to the type of arg 1 for select.])
2566       AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG234, $[2],
2567         [Define to the type of args 2, 3 and 4 for select.])
2568       AC_DEFINE_UNQUOTED(SELECT_TYPE_RETV, $[4],
2569         [Define to the function return type for select.])
2570       #
2571       prev_sh_opts=$-
2572       #
2573       case $prev_sh_opts in
2574         *f*)
2575           ;;
2576         *)
2577           set -f
2578           ;;
2579       esac
2580       #
2581       case "$sel_qual_type_arg5" in
2582         const*)
2583           sel_qual_arg5=const
2584           sel_type_arg5=`echo $sel_qual_type_arg5 | sed 's/^const //'`
2585         ;;
2586         *)
2587           sel_qual_arg5=
2588           sel_type_arg5=$sel_qual_type_arg5
2589         ;;
2590       esac
2591       #
2592       AC_DEFINE_UNQUOTED(SELECT_QUAL_ARG5, $sel_qual_arg5,
2593         [Define to the type qualifier of arg 5 for select.])
2594       AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG5, $sel_type_arg5,
2595         [Define to the type of arg 5 for select.])
2596       #
2597       case $prev_sh_opts in
2598         *f*)
2599           ;;
2600         *)
2601           set +f
2602           ;;
2603       esac
2604       #
2605       AC_DEFINE_UNQUOTED(HAVE_SELECT, 1,
2606         [Define to 1 if you have the select function.])
2607       ac_cv_func_select="yes"
2608     fi
2609   fi
2610 ])
2611
2612
2613 # This is only a temporary fix. This macro is here to replace the broken one
2614 # delivered by the automake project (including the 1.9.6 release). As soon as
2615 # they ship a working version we SHOULD remove this work-around.
2616
2617 AC_DEFUN([AM_MISSING_HAS_RUN],
2618 [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
2619 test x"${MISSING+set}" = xset || MISSING="\${SHELL} \"$am_aux_dir/missing\""
2620 # Use eval to expand $SHELL
2621 if eval "$MISSING --run true"; then
2622   am_missing_run="$MISSING --run "
2623 else
2624   am_missing_run=
2625   AC_MSG_WARN([`missing' script is too old or missing])
2626 fi
2627 ])
2628
2629
2630 dnl CURL_VERIFY_RUNTIMELIBS
2631 dnl -------------------------------------------------
2632 dnl Verify that the shared libs found so far can be used when running
2633 dnl programs, since otherwise the situation will create odd configure errors
2634 dnl that are misleading people.
2635 dnl
2636 dnl Make sure this test is run BEFORE the first test in the script that
2637 dnl runs anything, which at the time of this writing is the AC_CHECK_SIZEOF
2638 dnl macro. It must also run AFTER all lib-checking macros are complete.
2639
2640 AC_DEFUN([CURL_VERIFY_RUNTIMELIBS], [
2641
2642   dnl this test is of course not sensible if we are cross-compiling!
2643   if test "x$cross_compiling" != xyes; then
2644
2645     dnl just run a program to verify that the libs checked for previous to this
2646     dnl point also is available run-time!
2647     AC_MSG_CHECKING([run-time libs availability])
2648     AC_TRY_RUN([
2649 main()
2650 {
2651   return 0;
2652 }
2653 ],
2654     AC_MSG_RESULT([fine]),
2655     AC_MSG_RESULT([failed])
2656     AC_MSG_ERROR([one or more libs available at link-time are not available run-time. Libs used at link-time: $LIBS])
2657     )
2658
2659     dnl if this test fails, configure has already stopped
2660   fi
2661 ])
2662
2663
2664 dnl CURL_CHECK_VARIADIC_MACROS
2665 dnl -------------------------------------------------
2666 dnl Check compiler support of variadic macros
2667
2668 AC_DEFUN([CURL_CHECK_VARIADIC_MACROS], [
2669   AC_CACHE_CHECK([for compiler support of C99 variadic macro style],
2670     [curl_cv_variadic_macros_c99], [
2671     AC_COMPILE_IFELSE([
2672       AC_LANG_PROGRAM([[
2673 #define c99_vmacro3(first, ...) fun3(first, __VA_ARGS__)
2674 #define c99_vmacro2(first, ...) fun2(first, __VA_ARGS__)
2675         int fun3(int arg1, int arg2, int arg3);
2676         int fun2(int arg1, int arg2);
2677         int fun3(int arg1, int arg2, int arg3)
2678         { return arg1 + arg2 + arg3; }
2679         int fun2(int arg1, int arg2)
2680         { return arg1 + arg2; }
2681       ]],[[
2682         int res3 = c99_vmacro3(1, 2, 3);
2683         int res2 = c99_vmacro2(1, 2);
2684       ]])
2685     ],[
2686       curl_cv_variadic_macros_c99="yes"
2687     ],[
2688       curl_cv_variadic_macros_c99="no"
2689     ])
2690   ])
2691   case "$curl_cv_variadic_macros_c99" in
2692     yes)
2693       AC_DEFINE_UNQUOTED(HAVE_VARIADIC_MACROS_C99, 1,
2694         [Define to 1 if compiler supports C99 variadic macro style.])
2695       ;;
2696   esac
2697   AC_CACHE_CHECK([for compiler support of old gcc variadic macro style],
2698     [curl_cv_variadic_macros_gcc], [
2699     AC_COMPILE_IFELSE([
2700       AC_LANG_PROGRAM([[
2701 #define gcc_vmacro3(first, args...) fun3(first, args)
2702 #define gcc_vmacro2(first, args...) fun2(first, args)
2703         int fun3(int arg1, int arg2, int arg3);
2704         int fun2(int arg1, int arg2);
2705         int fun3(int arg1, int arg2, int arg3)
2706         { return arg1 + arg2 + arg3; }
2707         int fun2(int arg1, int arg2)
2708         { return arg1 + arg2; }
2709       ]],[[
2710         int res3 = gcc_vmacro3(1, 2, 3);
2711         int res2 = gcc_vmacro2(1, 2);
2712       ]])
2713     ],[
2714       curl_cv_variadic_macros_gcc="yes"
2715     ],[
2716       curl_cv_variadic_macros_gcc="no"
2717     ])
2718   ])
2719   case "$curl_cv_variadic_macros_gcc" in
2720     yes)
2721       AC_DEFINE_UNQUOTED(HAVE_VARIADIC_MACROS_GCC, 1,
2722         [Define to 1 if compiler supports old gcc variadic macro style.])
2723       ;;
2724   esac
2725 ])
2726
2727
2728 dnl CURL_CHECK_CA_BUNDLE
2729 dnl -------------------------------------------------
2730 dnl Check if a default ca-bundle should be used
2731 dnl
2732 dnl regarding the paths this will scan:
2733 dnl /etc/ssl/certs/ca-certificates.crt Debian systems
2734 dnl /etc/pki/tls/certs/ca-bundle.crt Redhat and Mandriva
2735 dnl /usr/share/ssl/certs/ca-bundle.crt old(er) Redhat
2736 dnl /usr/local/share/certs/ca-root.crt FreeBSD
2737 dnl /etc/ssl/cert.pem OpenBSD
2738 dnl /etc/ssl/certs/ (ca path) SUSE
2739
2740 AC_DEFUN([CURL_CHECK_CA_BUNDLE], [
2741
2742   AC_MSG_CHECKING([default CA cert bundle/path])
2743
2744   AC_ARG_WITH(ca-bundle,
2745 AC_HELP_STRING([--with-ca-bundle=FILE], [File name to use as CA bundle])
2746 AC_HELP_STRING([--without-ca-bundle], [Don't use a default CA bundle]),
2747   [
2748     want_ca="$withval"
2749     if test "x$want_ca" = "xyes"; then
2750       AC_MSG_ERROR([--with-ca-bundle=FILE requires a path to the CA bundle])
2751     fi
2752   ],
2753   [ want_ca="unset" ])
2754   AC_ARG_WITH(ca-path,
2755 AC_HELP_STRING([--with-ca-path=DIRECTORY], [Directory to use as CA path])
2756 AC_HELP_STRING([--without-ca-path], [Don't use a default CA path]),
2757   [
2758     want_capath="$withval"
2759     if test "x$want_capath" = "xyes"; then
2760       AC_MSG_ERROR([--with-ca-path=DIRECTORY requires a path to the CA path directory])
2761     fi
2762   ],
2763   [ want_capath="unset"])
2764
2765   if test "x$want_ca" != "xno" -a "x$want_ca" != "xunset" -a \
2766           "x$want_capath" != "xno" -a "x$want_capath" != "xunset"; then
2767     dnl both given
2768     AC_MSG_ERROR([Can't specify both --with-ca-bundle and --with-ca-path.])
2769   elif test "x$want_ca" != "xno" -a "x$want_ca" != "xunset"; then
2770     dnl --with-ca-bundle given
2771     ca="$want_ca"
2772     capath="no"
2773   elif test "x$want_capath" != "xno" -a "x$want_capath" != "xunset"; then
2774     dnl --with-ca-path given
2775     if test "x$OPENSSL_ENABLED" != "x1"; then
2776       AC_MSG_ERROR([--with-ca-path only works with openSSL])
2777     fi
2778     capath="$want_capath"
2779     ca="no"
2780   else
2781     dnl neither of --with-ca-* given
2782     dnl first try autodetecting a CA bundle , then a CA path
2783     dnl both autodetections can be skipped by --without-ca-*
2784     ca="no"
2785     capath="no"
2786     if test "x$want_ca" = "xunset"; then
2787       dnl the path we previously would have installed the curl ca bundle
2788       dnl to, and thus we now check for an already existing cert in that place
2789       dnl in case we find no other
2790       if test "x$prefix" != xNONE; then
2791         cac="${prefix}/share/curl/curl-ca-bundle.crt"
2792       else
2793         cac="$ac_default_prefix/share/curl/curl-ca-bundle.crt"
2794       fi
2795
2796       for a in /etc/ssl/certs/ca-certificates.crt \
2797                /etc/pki/tls/certs/ca-bundle.crt \
2798                /usr/share/ssl/certs/ca-bundle.crt \
2799                /usr/local/share/certs/ca-root.crt \
2800                /etc/ssl/cert.pem \
2801                "$cac"; do
2802         if test -f "$a"; then
2803           ca="$a"
2804           break
2805         fi
2806       done
2807     fi
2808     if test "x$want_capath" = "xunset" -a "x$ca" = "xno" -a \
2809             "x$OPENSSL_ENABLED" = "x1"; then
2810       for a in /etc/ssl/certs/; do
2811         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
2812           capath="$a"
2813           break
2814         fi
2815       done
2816     fi
2817   fi
2818
2819
2820
2821   if test "x$ca" != "xno"; then
2822     CURL_CA_BUNDLE='"'$ca'"'
2823     AC_DEFINE_UNQUOTED(CURL_CA_BUNDLE, "$ca", [Location of default ca bundle])
2824     AC_SUBST(CURL_CA_BUNDLE)
2825     AC_MSG_RESULT([$ca])
2826   elif test "x$capath" != "xno"; then
2827     CURL_CA_PATH="\"$capath\""
2828     AC_DEFINE_UNQUOTED(CURL_CA_PATH, "$capath", [Location of default ca path])
2829     AC_MSG_RESULT([$capath (capath)])
2830   else
2831     AC_MSG_RESULT([no])
2832   fi
2833 ])
2834
2835
2836 dnl DO_CURL_OFF_T_CHECK (TYPE, SIZE)
2837 dnl -------------------------------------------------
2838 dnl Internal macro for CURL_CONFIGURE_CURL_OFF_T
2839
2840 AC_DEFUN([DO_CURL_OFF_T_CHECK], [
2841   AC_REQUIRE([CURL_INCLUDES_INTTYPES])dnl
2842   if test "$curl_typeof_curl_off_t" = "unknown" && test ! -z "$1"; then
2843     tmp_includes=""
2844     tmp_source=""
2845     tmp_fmt=""
2846     case AS_TR_SH([$1]) in
2847       int64_t)
2848         tmp_includes="$curl_includes_inttypes"
2849         tmp_source="char f@<:@@:>@ = PRId64;"
2850         tmp_fmt="PRId64"
2851         ;;
2852       int32_t)
2853         tmp_includes="$curl_includes_inttypes"
2854         tmp_source="char f@<:@@:>@ = PRId32;"
2855         tmp_fmt="PRId32"
2856         ;;
2857       int16_t)
2858         tmp_includes="$curl_includes_inttypes"
2859         tmp_source="char f@<:@@:>@ = PRId16;"
2860         tmp_fmt="PRId16"
2861         ;;
2862     esac
2863     AC_COMPILE_IFELSE([
2864       AC_LANG_PROGRAM([[
2865         $tmp_includes
2866         typedef $1 curl_off_t;
2867         typedef char dummy_arr[sizeof(curl_off_t) == $2 ? 1 : -1];
2868       ]],[[
2869         $tmp_source
2870         curl_off_t dummy;
2871       ]])
2872     ],[
2873       if test -z "$tmp_fmt"; then
2874         curl_typeof_curl_off_t="$1"
2875         curl_sizeof_curl_off_t="$2"
2876       else
2877         CURL_CHECK_DEF([$tmp_fmt], [$curl_includes_inttypes], [silent])
2878         AS_VAR_PUSHDEF([tmp_HaveFmtDef], [curl_cv_have_def_$tmp_fmt])dnl
2879         AS_VAR_PUSHDEF([tmp_FmtDef], [curl_cv_def_$tmp_fmt])dnl
2880         if test AS_VAR_GET(tmp_HaveFmtDef) = "yes"; then
2881           curl_format_curl_off_t=AS_VAR_GET(tmp_FmtDef)
2882           curl_typeof_curl_off_t="$1"
2883           curl_sizeof_curl_off_t="$2"
2884         fi
2885         AS_VAR_POPDEF([tmp_FmtDef])dnl
2886         AS_VAR_POPDEF([tmp_HaveFmtDef])dnl
2887       fi
2888     ])
2889   fi
2890 ])
2891
2892
2893 dnl DO_CURL_OFF_T_SUFFIX_CHECK (TYPE)
2894 dnl -------------------------------------------------
2895 dnl Internal macro for CURL_CONFIGURE_CURL_OFF_T
2896
2897 AC_DEFUN([DO_CURL_OFF_T_SUFFIX_CHECK], [
2898   AC_REQUIRE([CURL_INCLUDES_INTTYPES])dnl
2899   AC_MSG_CHECKING([constant suffix string for curl_off_t])
2900   #
2901   curl_suffix_curl_off_t="unknown"
2902   curl_suffix_curl_off_tu="unknown"
2903   #
2904   case AS_TR_SH([$1]) in
2905     long_long | __longlong | __longlong_t)
2906       tst_suffixes="LL::"
2907       ;;
2908     long)
2909       tst_suffixes="L::"
2910       ;;
2911     int)
2912       tst_suffixes="::"
2913       ;;
2914     __int64 | int64_t)
2915       tst_suffixes="LL:i64::"
2916       ;;
2917     __int32 | int32_t)
2918       tst_suffixes="L:i32::"
2919       ;;
2920     __int16 | int16_t)
2921       tst_suffixes="L:i16::"
2922       ;;
2923     *)
2924       AC_MSG_ERROR([unexpected data type $1])
2925       ;;
2926   esac
2927   #
2928   old_IFS=$IFS; IFS=':'
2929   for tmp_ssuf in $tst_suffixes ; do
2930     IFS=$old_IFS
2931     if test "x$curl_suffix_curl_off_t" = "xunknown"; then
2932       case $tmp_ssuf in
2933         i64 | i32 | i16)
2934           tmp_usuf="u$tmp_ssuf"
2935           ;;
2936         LL | L)
2937           tmp_usuf="U$tmp_ssuf"
2938           ;;
2939         *)
2940           tmp_usuf=""
2941           ;;
2942       esac
2943       AC_COMPILE_IFELSE([
2944         AC_LANG_PROGRAM([[
2945           $curl_includes_inttypes
2946           typedef $1 new_t;
2947         ]],[[
2948           new_t s1;
2949           new_t s2;
2950           s1 = -10$tmp_ssuf ;
2951           s2 =  20$tmp_ssuf ;
2952           if(s1 > s2)
2953             return 1;
2954         ]])
2955       ],[
2956         curl_suffix_curl_off_t="$tmp_ssuf"
2957         curl_suffix_curl_off_tu="$tmp_usuf"
2958       ])
2959     fi
2960   done
2961   IFS=$old_IFS
2962   #
2963   if test "x$curl_suffix_curl_off_t" = "xunknown"; then
2964     AC_MSG_ERROR([cannot find constant suffix string for curl_off_t.])
2965   else
2966     AC_MSG_RESULT([$curl_suffix_curl_off_t])
2967     AC_MSG_CHECKING([constant suffix string for unsigned curl_off_t])
2968     AC_MSG_RESULT([$curl_suffix_curl_off_tu])
2969   fi
2970   #
2971 ])
2972
2973
2974 dnl CURL_CONFIGURE_CURL_OFF_T
2975 dnl -------------------------------------------------
2976 dnl Find out suitable curl_off_t data type definition and associated
2977 dnl items, and make the appropriate definitions used in template file
2978 dnl include/curl/curlbuild.h.in to properly configure the library.
2979
2980 AC_DEFUN([CURL_CONFIGURE_CURL_OFF_T], [
2981   AC_REQUIRE([CURL_INCLUDES_INTTYPES])dnl
2982   #
2983   AC_BEFORE([$0],[AC_SYS_LARGEFILE])dnl
2984   AC_BEFORE([$0],[CURL_CONFIGURE_REENTRANT])dnl
2985   AC_BEFORE([$0],[CURL_CHECK_AIX_ALL_SOURCE])dnl
2986   #
2987   if test -z "$SED"; then
2988     AC_MSG_ERROR([SED not set. Cannot continue without SED being set.])
2989   fi
2990   #
2991   AC_CHECK_SIZEOF(long)
2992   AC_CHECK_SIZEOF(void*)
2993   #
2994   if test -z "$ac_cv_sizeof_long" ||
2995     test "$ac_cv_sizeof_long" -eq "0"; then
2996     AC_MSG_ERROR([cannot find out size of long.])
2997   fi
2998   if test -z "$ac_cv_sizeof_voidp" ||
2999      test "$ac_cv_sizeof_voidp" -eq "0"; then
3000     AC_MSG_ERROR([cannot find out size of void*.])
3001   fi
3002   #
3003   x_LP64_long=""
3004   x_LP32_long=""
3005   x_LP16_long=""
3006   #
3007   if test "$ac_cv_sizeof_long" -eq "8" &&
3008      test "$ac_cv_sizeof_voidp" -ge "8"; then
3009     x_LP64_long="long"
3010   elif test "$ac_cv_sizeof_long" -eq "4" &&
3011        test "$ac_cv_sizeof_voidp" -ge "4"; then
3012     x_LP32_long="long"
3013   elif test "$ac_cv_sizeof_long" -eq "2" &&
3014        test "$ac_cv_sizeof_voidp" -ge "2"; then
3015     x_LP16_long="long"
3016   fi
3017   #
3018   dnl DO_CURL_OFF_T_CHECK results are stored in next 3 vars
3019   #
3020   curl_typeof_curl_off_t="unknown"
3021   curl_sizeof_curl_off_t="unknown"
3022   curl_format_curl_off_t="unknown"
3023   curl_format_curl_off_tu="unknown"
3024   #
3025   if test "$curl_typeof_curl_off_t" = "unknown"; then
3026     AC_MSG_CHECKING([for 64-bit curl_off_t data type])
3027     for t8 in          \
3028       "$x_LP64_long"   \
3029       'int64_t'        \
3030       '__int64'        \
3031       'long long'      \
3032       '__longlong'     \
3033       '__longlong_t'   ; do
3034       DO_CURL_OFF_T_CHECK([$t8], [8])
3035     done
3036     AC_MSG_RESULT([$curl_typeof_curl_off_t])
3037   fi
3038   if test "$curl_typeof_curl_off_t" = "unknown"; then
3039     AC_MSG_CHECKING([for 32-bit curl_off_t data type])
3040     for t4 in          \
3041       "$x_LP32_long"   \
3042       'int32_t'        \
3043       '__int32'        \
3044       'int'            ; do
3045       DO_CURL_OFF_T_CHECK([$t4], [4])
3046     done
3047     AC_MSG_RESULT([$curl_typeof_curl_off_t])
3048   fi
3049   if test "$curl_typeof_curl_off_t" = "unknown"; then
3050     AC_MSG_CHECKING([for 16-bit curl_off_t data type])
3051     for t2 in          \
3052       "$x_LP16_long"   \
3053       'int16_t'        \
3054       '__int16'        \
3055       'int'            ; do
3056       DO_CURL_OFF_T_CHECK([$t2], [2])
3057     done
3058     AC_MSG_RESULT([$curl_typeof_curl_off_t])
3059   fi
3060   if test "$curl_typeof_curl_off_t" = "unknown"; then
3061     AC_MSG_ERROR([cannot find data type for curl_off_t.])
3062   fi
3063   #
3064   AC_MSG_CHECKING([size of curl_off_t])
3065   AC_MSG_RESULT([$curl_sizeof_curl_off_t])
3066   #
3067   AC_MSG_CHECKING([formatting string directive for curl_off_t])
3068   if test "$curl_format_curl_off_t" != "unknown"; then
3069     x_pull_headers="yes"
3070     curl_format_curl_off_t=`echo "$curl_format_curl_off_t" | "$SED" 's/[["]]//g'`
3071     curl_format_curl_off_tu=`echo "$curl_format_curl_off_t" | "$SED" 's/i$/u/'`
3072     curl_format_curl_off_tu=`echo "$curl_format_curl_off_tu" | "$SED" 's/d$/u/'`
3073     curl_format_curl_off_tu=`echo "$curl_format_curl_off_tu" | "$SED" 's/D$/U/'`
3074   else
3075     x_pull_headers="no"
3076     case AS_TR_SH([$curl_typeof_curl_off_t]) in
3077       long_long | __longlong | __longlong_t)
3078         curl_format_curl_off_t="lld"
3079         curl_format_curl_off_tu="llu"
3080         ;;
3081       long)
3082         curl_format_curl_off_t="ld"
3083         curl_format_curl_off_tu="lu"
3084         ;;
3085       int)
3086         curl_format_curl_off_t="d"
3087         curl_format_curl_off_tu="u"
3088         ;;
3089       __int64)
3090         curl_format_curl_off_t="I64d"
3091         curl_format_curl_off_tu="I64u"
3092         ;;
3093       __int32)
3094         curl_format_curl_off_t="I32d"
3095         curl_format_curl_off_tu="I32u"
3096         ;;
3097       __int16)
3098         curl_format_curl_off_t="I16d"
3099         curl_format_curl_off_tu="I16u"
3100         ;;
3101       *)
3102         AC_MSG_ERROR([cannot find print format string for curl_off_t.])
3103         ;;
3104     esac
3105   fi
3106   AC_MSG_RESULT(["$curl_format_curl_off_t"])
3107   #
3108   AC_MSG_CHECKING([formatting string directive for unsigned curl_off_t])
3109   AC_MSG_RESULT(["$curl_format_curl_off_tu"])
3110   #
3111   DO_CURL_OFF_T_SUFFIX_CHECK([$curl_typeof_curl_off_t])
3112   #
3113   if test "$x_pull_headers" = "yes"; then
3114     if test "x$ac_cv_header_sys_types_h" = "xyes"; then
3115       CURL_DEFINE_UNQUOTED([CURL_PULL_SYS_TYPES_H])
3116     fi
3117     if test "x$ac_cv_header_stdint_h" = "xyes"; then
3118       CURL_DEFINE_UNQUOTED([CURL_PULL_STDINT_H])
3119     fi
3120     if test "x$ac_cv_header_inttypes_h" = "xyes"; then
3121       CURL_DEFINE_UNQUOTED([CURL_PULL_INTTYPES_H])
3122     fi
3123   fi
3124   #
3125   CURL_DEFINE_UNQUOTED([CURL_TYPEOF_CURL_OFF_T], [$curl_typeof_curl_off_t])
3126   CURL_DEFINE_UNQUOTED([CURL_FORMAT_CURL_OFF_T], ["$curl_format_curl_off_t"])
3127   CURL_DEFINE_UNQUOTED([CURL_FORMAT_CURL_OFF_TU], ["$curl_format_curl_off_tu"])
3128   CURL_DEFINE_UNQUOTED([CURL_FORMAT_OFF_T], ["%$curl_format_curl_off_t"])
3129   CURL_DEFINE_UNQUOTED([CURL_SIZEOF_CURL_OFF_T], [$curl_sizeof_curl_off_t])
3130   CURL_DEFINE_UNQUOTED([CURL_SUFFIX_CURL_OFF_T], [$curl_suffix_curl_off_t])
3131   CURL_DEFINE_UNQUOTED([CURL_SUFFIX_CURL_OFF_TU], [$curl_suffix_curl_off_tu])
3132   #
3133 ])
3134
3135
3136 dnl CURL_CHECK_WIN32_LARGEFILE
3137 dnl -------------------------------------------------
3138 dnl Check if curl's WIN32 large file will be used
3139
3140 AC_DEFUN([CURL_CHECK_WIN32_LARGEFILE], [
3141   AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
3142   AC_MSG_CHECKING([whether build target supports WIN32 file API])
3143   curl_win32_file_api="no"
3144   if test "$ac_cv_header_windows_h" = "yes"; then
3145     if test x"$enable_largefile" != "xno"; then
3146       AC_COMPILE_IFELSE([
3147         AC_LANG_PROGRAM([[
3148         ]],[[
3149 #if !defined(_WIN32_WCE) && \
3150     (defined(__MINGW32__) || \
3151     (defined(_MSC_VER) && (defined(_WIN32) || defined(_WIN64))))
3152           int dummy=1;
3153 #else
3154           WIN32 large file API not supported.
3155 #endif
3156         ]])
3157       ],[
3158         curl_win32_file_api="win32_large_files"
3159       ])
3160     fi
3161     if test "$curl_win32_file_api" = "no"; then
3162       AC_COMPILE_IFELSE([
3163         AC_LANG_PROGRAM([[
3164         ]],[[
3165 #if defined(_WIN32_WCE) || defined(__MINGW32__) || defined(_MSC_VER)
3166           int dummy=1;
3167 #else
3168           WIN32 small file API not supported.
3169 #endif
3170         ]])
3171       ],[
3172         curl_win32_file_api="win32_small_files"
3173       ])
3174     fi
3175   fi
3176   case "$curl_win32_file_api" in
3177     win32_large_files)
3178       AC_MSG_RESULT([yes (large file enabled)])
3179       AC_DEFINE_UNQUOTED(USE_WIN32_LARGE_FILES, 1,
3180         [Define to 1 if you are building a Windows target with large file support.])
3181       ;;
3182     win32_small_files)
3183       AC_MSG_RESULT([yes (large file disabled)])
3184       AC_DEFINE_UNQUOTED(USE_WIN32_SMALL_FILES, 1,
3185         [Define to 1 if you are building a Windows target without large file support.])
3186       ;;
3187     *)
3188       AC_MSG_RESULT([no])
3189       ;;
3190   esac
3191 ])
3192
3193 dnl CURL_EXPORT_PCDIR ($pcdir)
3194 dnl ------------------------
3195 dnl if $pcdir is not empty, set PKG_CONFIG_LIBDIR to $pcdir and export
3196 dnl
3197 dnl we need this macro since pkg-config distinguishes among empty and unset
3198 dnl variable while checking PKG_CONFIG_LIBDIR
3199 dnl
3200
3201 AC_DEFUN([CURL_EXPORT_PCDIR], [
3202     if test -n "$1"; then
3203       PKG_CONFIG_LIBDIR="$1"
3204       export PKG_CONFIG_LIBDIR
3205     fi
3206 ])
3207
3208 dnl CURL_CHECK_PKGCONFIG ($module, [$pcdir])
3209 dnl ------------------------
3210 dnl search for the pkg-config tool (if not cross-compiling). Set the PKGCONFIG
3211 dnl variable to hold the path to it, or 'no' if not found/present.
3212 dnl
3213 dnl If pkg-config is present, check that it has info about the $module or
3214 dnl return "no" anyway!
3215 dnl
3216 dnl Optionally PKG_CONFIG_LIBDIR may be given as $pcdir.
3217 dnl
3218
3219 AC_DEFUN([CURL_CHECK_PKGCONFIG], [
3220
3221     PKGCONFIG="no"
3222
3223     if test x$cross_compiling = xyes; then
3224       dnl see if there's a pkg-specific for this host setup
3225       AC_PATH_PROG( PKGCONFIG, ${host}-pkg-config, no,
3226                     $PATH:/usr/bin:/usr/local/bin)
3227     fi
3228
3229     if test x$PKGCONFIG = xno; then
3230       AC_PATH_PROG( PKGCONFIG, pkg-config, no, $PATH:/usr/bin:/usr/local/bin)
3231     fi
3232
3233     if test x$PKGCONFIG != xno; then
3234       AC_MSG_CHECKING([for $1 options with pkg-config])
3235       dnl ask pkg-config about $1
3236       itexists=`CURL_EXPORT_PCDIR([$2]) dnl
3237         $PKGCONFIG --exists $1 >/dev/null 2>&1 && echo 1`
3238
3239       if test -z "$itexists"; then
3240         dnl pkg-config does not have info about the given module! set the
3241         dnl variable to 'no'
3242         PKGCONFIG="no"
3243         AC_MSG_RESULT([no])
3244       else
3245         AC_MSG_RESULT([found])
3246       fi
3247     fi
3248 ])
3249
3250
3251 dnl CURL_GENERATE_CONFIGUREHELP_PM
3252 dnl -------------------------------------------------
3253 dnl Generate test harness configurehelp.pm module, defining and
3254 dnl initializing some perl variables with values which are known
3255 dnl when the configure script runs. For portability reasons, test
3256 dnl harness needs information on how to run the C preprocessor.
3257
3258 AC_DEFUN([CURL_GENERATE_CONFIGUREHELP_PM], [
3259   AC_REQUIRE([AC_PROG_CPP])dnl
3260   tmp_cpp=`eval echo "$ac_cpp" 2>/dev/null`
3261   if test -z "$tmp_cpp"; then
3262     tmp_cpp='cpp'
3263   fi
3264   cat >./tests/configurehelp.pm <<_EOF
3265 [@%:@] This is a generated file.  Do not edit.
3266
3267 package configurehelp;
3268
3269 use strict;
3270 use warnings;
3271 use Exporter;
3272
3273 use vars qw(
3274     @ISA
3275     @EXPORT_OK
3276     \$Cpreprocessor
3277     );
3278
3279 @ISA = qw(Exporter);
3280
3281 @EXPORT_OK = qw(
3282     \$Cpreprocessor
3283     );
3284
3285 \$Cpreprocessor = '$tmp_cpp';
3286
3287 1;
3288 _EOF
3289 ])