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