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