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