blob: f0132a57b463f75fcc2b5627f14603fe16ae23a8 [file] [log] [blame]
Lucas Eckels9bd90e62012-08-06 15:07:02 -07001#***************************************************************************
2# _ _ ____ _
3# Project ___| | | | _ \| |
4# / __| | | | |_) | |
5# | (__| |_| | _ <| |___
6# \___|\___/|_| \_\_____|
7#
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -07008# Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
Lucas Eckels9bd90e62012-08-06 15:07:02 -07009#
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 | \
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -070054 "$SED" 's/.*CURL_DEF_TOKEN[[ ]][[ ]]*//' 2>/dev/null | \
Lucas Eckels9bd90e62012-08-06 15:07:02 -070055 "$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"
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -0700133 LIBS="-lxnet $LIBS"
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700134 ])
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
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -0700153 AC_BEFORE([$0], [CURL_CONFIGURE_PULL_SYS_POLL])dnl
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700154 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
168dnl CURL_CHECK_HEADER_WINDOWS
169dnl -------------------------------------------------
170dnl Check for compilable and valid windows.h header
171
172AC_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
205dnl CURL_CHECK_NATIVE_WINDOWS
206dnl -------------------------------------------------
207dnl Check if building a native Windows target
208
209AC_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 ])
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -0700232 AM_CONDITIONAL(DOING_NATIVE_WINDOWS, test "x$ac_cv_native_windows" = xyes)
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700233])
234
235
236dnl CURL_CHECK_HEADER_WINSOCK
237dnl -------------------------------------------------
238dnl Check for compilable and valid winsock.h header
239
240AC_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
273dnl CURL_CHECK_HEADER_WINSOCK2
274dnl -------------------------------------------------
275dnl Check for compilable and valid winsock2.h header
276
277AC_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
310dnl CURL_CHECK_HEADER_WS2TCPIP
311dnl -------------------------------------------------
312dnl Check for compilable and valid ws2tcpip.h header
313
314AC_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
348dnl CURL_CHECK_HEADER_WINLDAP
349dnl -------------------------------------------------
350dnl Check for compilable and valid winldap.h header
351
352AC_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
388dnl CURL_CHECK_HEADER_WINBER
389dnl -------------------------------------------------
390dnl Check for compilable and valid winber.h header
391
392AC_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
430dnl CURL_CHECK_HEADER_LBER
431dnl -------------------------------------------------
432dnl Check for compilable and valid lber.h header,
433dnl and check if it is needed even with ldap.h
434
435AC_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
511dnl CURL_CHECK_HEADER_LDAP
512dnl -------------------------------------------------
513dnl Check for compilable and valid ldap.h header
514
515AC_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
557dnl CURL_CHECK_HEADER_LDAP_SSL
558dnl -------------------------------------------------
559dnl Check for compilable and valid ldap_ssl.h header
560
561AC_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
605dnl CURL_CHECK_HEADER_LDAPSSL
606dnl -------------------------------------------------
607dnl Check for compilable and valid ldapssl.h header
608
609AC_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
657dnl CURL_CHECK_LIBS_WINLDAP
658dnl -------------------------------------------------
659dnl Check for libraries needed for WINLDAP support,
660dnl and prepended to LIBS any needed libraries.
661dnl This macro can take an optional parameter with a
662dnl white space separated list of libraries to check
663dnl before the WINLDAP default ones.
664
665AC_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
751dnl CURL_CHECK_LIBS_LDAP
752dnl -------------------------------------------------
753dnl Check for libraries needed for LDAP support,
754dnl and prepended to LIBS any needed libraries.
755dnl This macro can take an optional parameter with a
756dnl white space separated list of libraries to check
757dnl before the default ones.
758
759AC_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
859dnl CURL_CHECK_HEADER_MALLOC
860dnl -------------------------------------------------
861dnl Check for compilable and valid malloc.h header,
862dnl and check if it is needed even with stdlib.h
863
864AC_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
910dnl CURL_CHECK_HEADER_MEMORY
911dnl -------------------------------------------------
912dnl Check for compilable and valid memory.h header,
913dnl and check if it is needed even with stdlib.h for
914dnl memory related functions.
915
916AC_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
962dnl CURL_CHECK_FUNC_GETNAMEINFO
963dnl -------------------------------------------------
964dnl Test if the getnameinfo function is available,
965dnl and check the types of five of its arguments.
966dnl If the function succeeds HAVE_GETNAMEINFO will be
967dnl defined, defining the types of the arguments in
968dnl GETNAMEINFO_TYPE_ARG1, GETNAMEINFO_TYPE_ARG2,
969dnl GETNAMEINFO_TYPE_ARG46 and GETNAMEINFO_TYPE_ARG7,
970dnl and also defining the type qualifier of first
971dnl argument in GETNAMEINFO_QUAL_ARG1.
972
973AC_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
1163dnl TYPE_SOCKADDR_STORAGE
1164dnl -------------------------------------------------
1165dnl Check for struct sockaddr_storage. Most IPv6-enabled
1166dnl hosts have it, but AIX 4.3 is one known exception.
1167
1168AC_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
1201dnl CURL_CHECK_NI_WITHSCOPEID
1202dnl -------------------------------------------------
1203dnl Check for working NI_WITHSCOPEID in getnameinfo()
1204
1205AC_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
1301dnl CURL_CHECK_FUNC_RECV
1302dnl -------------------------------------------------
1303dnl Test if the socket recv() function is available,
1304dnl and check its return type and the types of its
1305dnl arguments. If the function succeeds HAVE_RECV
1306dnl will be defined, defining the types of the arguments
1307dnl in RECV_TYPE_ARG1, RECV_TYPE_ARG2, RECV_TYPE_ARG3
1308dnl and RECV_TYPE_ARG4, defining the type of the function
1309dnl return value in RECV_TYPE_RETV.
1310
1311AC_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
1434dnl CURL_CHECK_FUNC_SEND
1435dnl -------------------------------------------------
1436dnl Test if the socket send() function is available,
1437dnl and check its return type and the types of its
1438dnl arguments. If the function succeeds HAVE_SEND
1439dnl will be defined, defining the types of the arguments
1440dnl in SEND_TYPE_ARG1, SEND_TYPE_ARG2, SEND_TYPE_ARG3
1441dnl and SEND_TYPE_ARG4, defining the type of the function
1442dnl return value in SEND_TYPE_RETV, and also defining the
1443dnl type qualifier of second argument in SEND_QUAL_ARG2.
1444
1445AC_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
Lucas Eckels9bd90e62012-08-06 15:07:02 -07001600dnl CURL_CHECK_MSG_NOSIGNAL
1601dnl -------------------------------------------------
1602dnl Check for MSG_NOSIGNAL
1603
1604AC_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
1648dnl CURL_CHECK_STRUCT_TIMEVAL
1649dnl -------------------------------------------------
1650dnl Check for timeval struct
1651
1652AC_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
1710dnl TYPE_SIG_ATOMIC_T
1711dnl -------------------------------------------------
1712dnl Check if the sig_atomic_t type is available, and
1713dnl verify if it is already defined as volatile.
1714
1715AC_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
1754dnl TYPE_IN_ADDR_T
1755dnl -------------------------------------------------
1756dnl Check for in_addr_t: it is used to receive the return code of inet_addr()
1757dnl and a few other things.
1758
1759AC_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
1846dnl CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC
1847dnl -------------------------------------------------
1848dnl Check if monotonic clock_gettime is available.
1849
1850AC_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 AC_COMPILE_IFELSE([
1855 AC_LANG_PROGRAM([[
1856#ifdef HAVE_SYS_TYPES_H
1857#include <sys/types.h>
1858#endif
1859#ifdef HAVE_SYS_TIME_H
1860#include <sys/time.h>
1861#ifdef TIME_WITH_SYS_TIME
1862#include <time.h>
1863#endif
1864#else
1865#ifdef HAVE_TIME_H
1866#include <time.h>
1867#endif
1868#endif
1869 ]],[[
1870 struct timespec ts;
1871 (void)clock_gettime(CLOCK_MONOTONIC, &ts);
1872 ]])
1873 ],[
1874 AC_MSG_RESULT([yes])
1875 ac_cv_func_clock_gettime="yes"
1876 ],[
1877 AC_MSG_RESULT([no])
1878 ac_cv_func_clock_gettime="no"
1879 ])
1880 dnl Definition of HAVE_CLOCK_GETTIME_MONOTONIC is intentionally postponed
1881 dnl until library linking and run-time checks for clock_gettime succeed.
1882])
1883
1884
1885dnl CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC
1886dnl -------------------------------------------------
1887dnl If monotonic clock_gettime is available then,
1888dnl check and prepended to LIBS any needed libraries.
1889
1890AC_DEFUN([CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC], [
1891 AC_REQUIRE([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC])dnl
1892 #
1893 if test "$ac_cv_func_clock_gettime" = "yes"; then
1894 #
1895 AC_MSG_CHECKING([for clock_gettime in libraries])
1896 #
1897 curl_cv_save_LIBS="$LIBS"
1898 curl_cv_gclk_LIBS="unknown"
1899 #
1900 for x_xlibs in '' '-lrt' '-lposix4' ; do
1901 if test "$curl_cv_gclk_LIBS" = "unknown"; then
1902 if test -z "$x_xlibs"; then
1903 LIBS="$curl_cv_save_LIBS"
1904 else
1905 LIBS="$x_xlibs $curl_cv_save_LIBS"
1906 fi
1907 AC_LINK_IFELSE([
1908 AC_LANG_PROGRAM([[
1909#ifdef HAVE_SYS_TYPES_H
1910#include <sys/types.h>
1911#endif
1912#ifdef HAVE_SYS_TIME_H
1913#include <sys/time.h>
1914#ifdef TIME_WITH_SYS_TIME
1915#include <time.h>
1916#endif
1917#else
1918#ifdef HAVE_TIME_H
1919#include <time.h>
1920#endif
1921#endif
1922 ]],[[
1923 struct timespec ts;
1924 (void)clock_gettime(CLOCK_MONOTONIC, &ts);
1925 ]])
1926 ],[
1927 curl_cv_gclk_LIBS="$x_xlibs"
1928 ])
1929 fi
1930 done
1931 #
1932 LIBS="$curl_cv_save_LIBS"
1933 #
1934 case X-"$curl_cv_gclk_LIBS" in
1935 X-unknown)
1936 AC_MSG_RESULT([cannot find clock_gettime])
1937 AC_MSG_WARN([HAVE_CLOCK_GETTIME_MONOTONIC will not be defined])
1938 ac_cv_func_clock_gettime="no"
1939 ;;
1940 X-)
1941 AC_MSG_RESULT([no additional lib required])
1942 ac_cv_func_clock_gettime="yes"
1943 ;;
1944 *)
1945 if test -z "$curl_cv_save_LIBS"; then
1946 LIBS="$curl_cv_gclk_LIBS"
1947 else
1948 LIBS="$curl_cv_gclk_LIBS $curl_cv_save_LIBS"
1949 fi
Lucas Eckels9bd90e62012-08-06 15:07:02 -07001950 AC_MSG_RESULT([$curl_cv_gclk_LIBS])
1951 ac_cv_func_clock_gettime="yes"
1952 ;;
1953 esac
1954 #
1955 dnl only do runtime verification when not cross-compiling
1956 if test "x$cross_compiling" != "xyes" &&
1957 test "$ac_cv_func_clock_gettime" = "yes"; then
1958 AC_MSG_CHECKING([if monotonic clock_gettime works])
1959 AC_RUN_IFELSE([
1960 AC_LANG_PROGRAM([[
1961#ifdef HAVE_STDLIB_H
1962#include <stdlib.h>
1963#endif
1964#ifdef HAVE_SYS_TYPES_H
1965#include <sys/types.h>
1966#endif
1967#ifdef HAVE_SYS_TIME_H
1968#include <sys/time.h>
1969#ifdef TIME_WITH_SYS_TIME
1970#include <time.h>
1971#endif
1972#else
1973#ifdef HAVE_TIME_H
1974#include <time.h>
1975#endif
1976#endif
1977 ]],[[
1978 struct timespec ts;
1979 if (0 == clock_gettime(CLOCK_MONOTONIC, &ts))
1980 exit(0);
1981 else
1982 exit(1);
1983 ]])
1984 ],[
1985 AC_MSG_RESULT([yes])
1986 ],[
1987 AC_MSG_RESULT([no])
1988 AC_MSG_WARN([HAVE_CLOCK_GETTIME_MONOTONIC will not be defined])
1989 ac_cv_func_clock_gettime="no"
1990 LIBS="$curl_cv_save_LIBS"
1991 ])
1992 fi
1993 #
1994 case "$ac_cv_func_clock_gettime" in
1995 yes)
1996 AC_DEFINE_UNQUOTED(HAVE_CLOCK_GETTIME_MONOTONIC, 1,
1997 [Define to 1 if you have the clock_gettime function and monotonic timer.])
1998 ;;
1999 esac
2000 #
2001 fi
2002 #
2003])
2004
2005
2006dnl CURL_CHECK_LIBS_CONNECT
2007dnl -------------------------------------------------
2008dnl Verify if network connect function is already available
2009dnl using current libraries or if another one is required.
2010
2011AC_DEFUN([CURL_CHECK_LIBS_CONNECT], [
2012 AC_REQUIRE([CURL_INCLUDES_WINSOCK2])dnl
2013 AC_MSG_CHECKING([for connect in libraries])
2014 tst_connect_save_LIBS="$LIBS"
2015 tst_connect_need_LIBS="unknown"
2016 for tst_lib in '' '-lsocket' ; do
2017 if test "$tst_connect_need_LIBS" = "unknown"; then
2018 LIBS="$tst_lib $tst_connect_save_LIBS"
2019 AC_LINK_IFELSE([
2020 AC_LANG_PROGRAM([[
2021 $curl_includes_winsock2
2022 #ifndef HAVE_WINDOWS_H
2023 int connect(int, void*, int);
2024 #endif
2025 ]],[[
2026 if(0 != connect(0, 0, 0))
2027 return 1;
2028 ]])
2029 ],[
2030 tst_connect_need_LIBS="$tst_lib"
2031 ])
2032 fi
2033 done
2034 LIBS="$tst_connect_save_LIBS"
2035 #
2036 case X-"$tst_connect_need_LIBS" in
2037 X-unknown)
2038 AC_MSG_RESULT([cannot find connect])
2039 AC_MSG_ERROR([cannot find connect function in libraries.])
2040 ;;
2041 X-)
2042 AC_MSG_RESULT([yes])
2043 ;;
2044 *)
2045 AC_MSG_RESULT([$tst_connect_need_LIBS])
2046 LIBS="$tst_connect_need_LIBS $tst_connect_save_LIBS"
2047 ;;
2048 esac
2049])
2050
2051
2052dnl CURL_DEFINE_UNQUOTED (VARIABLE, [VALUE])
2053dnl -------------------------------------------------
2054dnl Like AC_DEFINE_UNQUOTED this macro will define a C preprocessor
2055dnl symbol that can be further used in custom template configuration
2056dnl files. This macro, unlike AC_DEFINE_UNQUOTED, does not use a third
2057dnl argument for the description. Symbol definitions done with this
2058dnl macro are intended to be exclusively used in handcrafted *.h.in
2059dnl template files. Contrary to what AC_DEFINE_UNQUOTED does, this one
2060dnl prevents autoheader generation and insertion of symbol template
2061dnl stub and definition into the first configuration header file. Do
2062dnl not use this macro as a replacement for AC_DEFINE_UNQUOTED, each
2063dnl one serves different functional needs.
2064
2065AC_DEFUN([CURL_DEFINE_UNQUOTED], [
2066cat >>confdefs.h <<_EOF
2067[@%:@define] $1 ifelse($#, 2, [$2], 1)
2068_EOF
2069])
2070
2071
2072dnl CURL_CONFIGURE_LONG
2073dnl -------------------------------------------------
2074dnl Find out the size of long as reported by sizeof() and define
2075dnl CURL_SIZEOF_LONG as appropriate to be used in template file
2076dnl include/curl/curlbuild.h.in to properly configure the library.
2077dnl The size of long is a build time characteristic and as such
2078dnl must be recorded in curlbuild.h
2079
2080AC_DEFUN([CURL_CONFIGURE_LONG], [
2081 if test -z "$ac_cv_sizeof_long" ||
2082 test "$ac_cv_sizeof_long" -eq "0"; then
2083 AC_MSG_ERROR([cannot find out size of long.])
2084 fi
2085 CURL_DEFINE_UNQUOTED([CURL_SIZEOF_LONG], [$ac_cv_sizeof_long])
2086])
2087
2088
2089dnl CURL_CONFIGURE_CURL_SOCKLEN_T
2090dnl -------------------------------------------------
2091dnl Find out suitable curl_socklen_t data type definition and size, making
2092dnl appropriate definitions for template file include/curl/curlbuild.h.in
2093dnl to properly configure and use the library.
2094dnl
2095dnl The need for the curl_socklen_t definition arises mainly to properly
2096dnl interface HP-UX systems which on one hand have a typedef'ed socklen_t
2097dnl data type which is 32 or 64-Bit wide depending on the data model being
2098dnl used, and that on the other hand is only actually used when interfacing
2099dnl the X/Open sockets provided in the xnet library.
2100
2101AC_DEFUN([CURL_CONFIGURE_CURL_SOCKLEN_T], [
2102 AC_REQUIRE([CURL_INCLUDES_WS2TCPIP])dnl
2103 AC_REQUIRE([CURL_INCLUDES_SYS_SOCKET])dnl
2104 AC_REQUIRE([CURL_PREPROCESS_CALLCONV])dnl
2105 #
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -07002106 AC_BEFORE([$0], [CURL_CONFIGURE_PULL_SYS_POLL])dnl
2107 #
Lucas Eckels9bd90e62012-08-06 15:07:02 -07002108 AC_MSG_CHECKING([for curl_socklen_t data type])
2109 curl_typeof_curl_socklen_t="unknown"
2110 for arg1 in int SOCKET; do
2111 for arg2 in 'struct sockaddr' void; do
2112 for t in socklen_t int size_t 'unsigned int' long 'unsigned long' void; do
2113 if test "$curl_typeof_curl_socklen_t" = "unknown"; then
2114 AC_COMPILE_IFELSE([
2115 AC_LANG_PROGRAM([[
2116 $curl_includes_ws2tcpip
2117 $curl_includes_sys_socket
2118 $curl_preprocess_callconv
2119 extern int FUNCALLCONV getpeername($arg1, $arg2 *, $t *);
2120 ]],[[
2121 $t *lenptr = 0;
2122 if(0 != getpeername(0, 0, lenptr))
2123 return 1;
2124 ]])
2125 ],[
2126 curl_typeof_curl_socklen_t="$t"
2127 ])
2128 fi
2129 done
2130 done
2131 done
2132 for t in socklen_t int; do
2133 if test "$curl_typeof_curl_socklen_t" = "void"; then
2134 AC_COMPILE_IFELSE([
2135 AC_LANG_PROGRAM([[
2136 $curl_includes_sys_socket
2137 typedef $t curl_socklen_t;
2138 ]],[[
2139 curl_socklen_t dummy;
2140 ]])
2141 ],[
2142 curl_typeof_curl_socklen_t="$t"
2143 ])
2144 fi
2145 done
2146 AC_MSG_RESULT([$curl_typeof_curl_socklen_t])
2147 if test "$curl_typeof_curl_socklen_t" = "void" ||
2148 test "$curl_typeof_curl_socklen_t" = "unknown"; then
2149 AC_MSG_ERROR([cannot find data type for curl_socklen_t.])
2150 fi
2151 #
2152 AC_MSG_CHECKING([size of curl_socklen_t])
2153 curl_sizeof_curl_socklen_t="unknown"
2154 curl_pull_headers_socklen_t="unknown"
2155 if test "$ac_cv_header_ws2tcpip_h" = "yes"; then
2156 tst_pull_header_checks='none ws2tcpip'
2157 tst_size_checks='4'
2158 else
2159 tst_pull_header_checks='none systypes syssocket'
2160 tst_size_checks='4 8 2'
2161 fi
2162 for tst_size in $tst_size_checks; do
2163 for tst_pull_headers in $tst_pull_header_checks; do
2164 if test "$curl_sizeof_curl_socklen_t" = "unknown"; then
2165 case $tst_pull_headers in
2166 ws2tcpip)
2167 tmp_includes="$curl_includes_ws2tcpip"
2168 ;;
2169 systypes)
2170 tmp_includes="$curl_includes_sys_types"
2171 ;;
2172 syssocket)
2173 tmp_includes="$curl_includes_sys_socket"
2174 ;;
2175 *)
2176 tmp_includes=""
2177 ;;
2178 esac
2179 AC_COMPILE_IFELSE([
2180 AC_LANG_PROGRAM([[
2181 $tmp_includes
2182 typedef $curl_typeof_curl_socklen_t curl_socklen_t;
2183 typedef char dummy_arr[sizeof(curl_socklen_t) == $tst_size ? 1 : -1];
2184 ]],[[
2185 curl_socklen_t dummy;
2186 ]])
2187 ],[
2188 curl_sizeof_curl_socklen_t="$tst_size"
2189 curl_pull_headers_socklen_t="$tst_pull_headers"
2190 ])
2191 fi
2192 done
2193 done
2194 AC_MSG_RESULT([$curl_sizeof_curl_socklen_t])
2195 if test "$curl_sizeof_curl_socklen_t" = "unknown"; then
2196 AC_MSG_ERROR([cannot find out size of curl_socklen_t.])
2197 fi
2198 #
2199 case $curl_pull_headers_socklen_t in
2200 ws2tcpip)
2201 CURL_DEFINE_UNQUOTED([CURL_PULL_WS2TCPIP_H])
2202 ;;
2203 systypes)
2204 CURL_DEFINE_UNQUOTED([CURL_PULL_SYS_TYPES_H])
2205 ;;
2206 syssocket)
2207 CURL_DEFINE_UNQUOTED([CURL_PULL_SYS_TYPES_H])
2208 CURL_DEFINE_UNQUOTED([CURL_PULL_SYS_SOCKET_H])
2209 ;;
2210 esac
2211 CURL_DEFINE_UNQUOTED([CURL_TYPEOF_CURL_SOCKLEN_T], [$curl_typeof_curl_socklen_t])
2212 CURL_DEFINE_UNQUOTED([CURL_SIZEOF_CURL_SOCKLEN_T], [$curl_sizeof_curl_socklen_t])
2213])
2214
2215
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -07002216dnl CURL_CONFIGURE_PULL_SYS_POLL
2217dnl -------------------------------------------------
2218dnl Find out if system header file sys/poll.h must be included by the
2219dnl external interface, making appropriate definitions for template file
2220dnl include/curl/curlbuild.h.in to properly configure and use the library.
2221dnl
2222dnl The need for the sys/poll.h inclusion arises mainly to properly
2223dnl interface AIX systems which define macros 'events' and 'revents'.
2224
2225AC_DEFUN([CURL_CONFIGURE_PULL_SYS_POLL], [
2226 AC_REQUIRE([CURL_INCLUDES_POLL])dnl
2227 #
2228 tst_poll_events_macro_defined="unknown"
2229 #
2230 AC_COMPILE_IFELSE([
2231 AC_LANG_PROGRAM([[
2232 $curl_includes_poll
2233 ]],[[
2234#if defined(events) || defined(revents)
2235 return 0;
2236#else
2237 force compilation error
2238#endif
2239 ]])
2240 ],[
2241 tst_poll_events_macro_defined="yes"
2242 ],[
2243 tst_poll_events_macro_defined="no"
2244 ])
2245 #
2246 if test "$tst_poll_events_macro_defined" = "yes"; then
2247 if test "x$ac_cv_header_sys_poll_h" = "xyes"; then
2248 CURL_DEFINE_UNQUOTED([CURL_PULL_SYS_POLL_H])
2249 fi
2250 fi
2251 #
2252])
2253
2254
Lucas Eckels9bd90e62012-08-06 15:07:02 -07002255dnl CURL_CHECK_FUNC_SELECT
2256dnl -------------------------------------------------
2257dnl Test if the socket select() function is available,
2258dnl and check its return type and the types of its
2259dnl arguments. If the function succeeds HAVE_SELECT
2260dnl will be defined, defining the types of the
2261dnl arguments in SELECT_TYPE_ARG1, SELECT_TYPE_ARG234
2262dnl and SELECT_TYPE_ARG5, defining the type of the
2263dnl function return value in SELECT_TYPE_RETV, and
2264dnl also defining the type qualifier of fifth argument
2265dnl in SELECT_QUAL_ARG5.
2266
2267AC_DEFUN([CURL_CHECK_FUNC_SELECT], [
2268 AC_REQUIRE([CURL_CHECK_STRUCT_TIMEVAL])dnl
2269 AC_CHECK_HEADERS(sys/select.h sys/socket.h)
2270 #
2271 AC_MSG_CHECKING([for select])
2272 AC_LINK_IFELSE([
2273 AC_LANG_PROGRAM([[
2274#undef inline
2275#ifdef HAVE_WINDOWS_H
2276#ifndef WIN32_LEAN_AND_MEAN
2277#define WIN32_LEAN_AND_MEAN
2278#endif
2279#include <windows.h>
2280#ifdef HAVE_WINSOCK2_H
2281#include <winsock2.h>
2282#else
2283#ifdef HAVE_WINSOCK_H
2284#include <winsock.h>
2285#endif
2286#endif
2287#endif
2288#ifdef HAVE_SYS_TYPES_H
2289#include <sys/types.h>
2290#endif
2291#ifdef HAVE_SYS_TIME_H
2292#include <sys/time.h>
2293#ifdef TIME_WITH_SYS_TIME
2294#include <time.h>
2295#endif
2296#else
2297#ifdef HAVE_TIME_H
2298#include <time.h>
2299#endif
2300#endif
2301#ifndef HAVE_WINDOWS_H
2302#ifdef HAVE_SYS_SELECT_H
2303#include <sys/select.h>
2304#endif
2305#ifdef HAVE_SYS_SOCKET_H
2306#include <sys/socket.h>
2307#endif
2308#endif
2309 ]],[[
2310 select(0, 0, 0, 0, 0);
2311 ]])
2312 ],[
2313 AC_MSG_RESULT([yes])
2314 curl_cv_select="yes"
2315 ],[
2316 AC_MSG_RESULT([no])
2317 curl_cv_select="no"
2318 ])
2319 #
2320 if test "$curl_cv_select" = "yes"; then
2321 AC_CACHE_CHECK([types of args and return type for select],
2322 [curl_cv_func_select_args], [
2323 curl_cv_func_select_args="unknown"
2324 for sel_retv in 'int' 'ssize_t'; do
2325 for sel_arg1 in 'int' 'ssize_t' 'size_t' 'unsigned long int' 'unsigned int'; do
2326 for sel_arg234 in 'fd_set *' 'int *' 'void *'; do
2327 for sel_arg5 in 'struct timeval *' 'const struct timeval *'; do
2328 if test "$curl_cv_func_select_args" = "unknown"; then
2329 AC_COMPILE_IFELSE([
2330 AC_LANG_PROGRAM([[
2331#undef inline
2332#ifdef HAVE_WINDOWS_H
2333#ifndef WIN32_LEAN_AND_MEAN
2334#define WIN32_LEAN_AND_MEAN
2335#endif
2336#include <windows.h>
2337#ifdef HAVE_WINSOCK2_H
2338#include <winsock2.h>
2339#else
2340#ifdef HAVE_WINSOCK_H
2341#include <winsock.h>
2342#endif
2343#endif
2344#define SELECTCALLCONV PASCAL
2345#endif
2346#ifdef HAVE_SYS_TYPES_H
2347#include <sys/types.h>
2348#endif
2349#ifdef HAVE_SYS_TIME_H
2350#include <sys/time.h>
2351#ifdef TIME_WITH_SYS_TIME
2352#include <time.h>
2353#endif
2354#else
2355#ifdef HAVE_TIME_H
2356#include <time.h>
2357#endif
2358#endif
2359#ifndef HAVE_WINDOWS_H
2360#ifdef HAVE_SYS_SELECT_H
2361#include <sys/select.h>
2362#endif
2363#ifdef HAVE_SYS_SOCKET_H
2364#include <sys/socket.h>
2365#endif
2366#define SELECTCALLCONV
2367#endif
2368#ifndef HAVE_STRUCT_TIMEVAL
2369 struct timeval {
2370 long tv_sec;
2371 long tv_usec;
2372 };
2373#endif
2374 extern $sel_retv SELECTCALLCONV select($sel_arg1,
2375 $sel_arg234,
2376 $sel_arg234,
2377 $sel_arg234,
2378 $sel_arg5);
2379 ]],[[
2380 $sel_arg1 nfds=0;
2381 $sel_arg234 rfds=0;
2382 $sel_arg234 wfds=0;
2383 $sel_arg234 efds=0;
2384 $sel_retv res = select(nfds, rfds, wfds, efds, 0);
2385 ]])
2386 ],[
2387 curl_cv_func_select_args="$sel_arg1,$sel_arg234,$sel_arg5,$sel_retv"
2388 ])
2389 fi
2390 done
2391 done
2392 done
2393 done
2394 ]) # AC-CACHE-CHECK
2395 if test "$curl_cv_func_select_args" = "unknown"; then
2396 AC_MSG_WARN([Cannot find proper types to use for select args])
2397 AC_MSG_WARN([HAVE_SELECT will not be defined])
2398 else
2399 select_prev_IFS=$IFS; IFS=','
2400 set dummy `echo "$curl_cv_func_select_args" | sed 's/\*/\*/g'`
2401 IFS=$select_prev_IFS
2402 shift
2403 #
2404 sel_qual_type_arg5=$[3]
2405 #
2406 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG1, $[1],
2407 [Define to the type of arg 1 for select.])
2408 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG234, $[2],
2409 [Define to the type of args 2, 3 and 4 for select.])
2410 AC_DEFINE_UNQUOTED(SELECT_TYPE_RETV, $[4],
2411 [Define to the function return type for select.])
2412 #
2413 prev_sh_opts=$-
2414 #
2415 case $prev_sh_opts in
2416 *f*)
2417 ;;
2418 *)
2419 set -f
2420 ;;
2421 esac
2422 #
2423 case "$sel_qual_type_arg5" in
2424 const*)
2425 sel_qual_arg5=const
2426 sel_type_arg5=`echo $sel_qual_type_arg5 | sed 's/^const //'`
2427 ;;
2428 *)
2429 sel_qual_arg5=
2430 sel_type_arg5=$sel_qual_type_arg5
2431 ;;
2432 esac
2433 #
2434 AC_DEFINE_UNQUOTED(SELECT_QUAL_ARG5, $sel_qual_arg5,
2435 [Define to the type qualifier of arg 5 for select.])
2436 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG5, $sel_type_arg5,
2437 [Define to the type of arg 5 for select.])
2438 #
2439 case $prev_sh_opts in
2440 *f*)
2441 ;;
2442 *)
2443 set +f
2444 ;;
2445 esac
2446 #
2447 AC_DEFINE_UNQUOTED(HAVE_SELECT, 1,
2448 [Define to 1 if you have the select function.])
2449 ac_cv_func_select="yes"
2450 fi
2451 fi
2452])
2453
2454
Lucas Eckels9bd90e62012-08-06 15:07:02 -07002455dnl CURL_VERIFY_RUNTIMELIBS
2456dnl -------------------------------------------------
2457dnl Verify that the shared libs found so far can be used when running
2458dnl programs, since otherwise the situation will create odd configure errors
2459dnl that are misleading people.
2460dnl
2461dnl Make sure this test is run BEFORE the first test in the script that
2462dnl runs anything, which at the time of this writing is the AC_CHECK_SIZEOF
2463dnl macro. It must also run AFTER all lib-checking macros are complete.
2464
2465AC_DEFUN([CURL_VERIFY_RUNTIMELIBS], [
2466
2467 dnl this test is of course not sensible if we are cross-compiling!
2468 if test "x$cross_compiling" != xyes; then
2469
2470 dnl just run a program to verify that the libs checked for previous to this
2471 dnl point also is available run-time!
2472 AC_MSG_CHECKING([run-time libs availability])
2473 AC_TRY_RUN([
2474main()
2475{
2476 return 0;
2477}
2478],
2479 AC_MSG_RESULT([fine]),
2480 AC_MSG_RESULT([failed])
2481 AC_MSG_ERROR([one or more libs available at link-time are not available run-time. Libs used at link-time: $LIBS])
2482 )
2483
2484 dnl if this test fails, configure has already stopped
2485 fi
2486])
2487
2488
2489dnl CURL_CHECK_VARIADIC_MACROS
2490dnl -------------------------------------------------
2491dnl Check compiler support of variadic macros
2492
2493AC_DEFUN([CURL_CHECK_VARIADIC_MACROS], [
2494 AC_CACHE_CHECK([for compiler support of C99 variadic macro style],
2495 [curl_cv_variadic_macros_c99], [
2496 AC_COMPILE_IFELSE([
2497 AC_LANG_PROGRAM([[
2498#define c99_vmacro3(first, ...) fun3(first, __VA_ARGS__)
2499#define c99_vmacro2(first, ...) fun2(first, __VA_ARGS__)
2500 int fun3(int arg1, int arg2, int arg3);
2501 int fun2(int arg1, int arg2);
2502 int fun3(int arg1, int arg2, int arg3)
2503 { return arg1 + arg2 + arg3; }
2504 int fun2(int arg1, int arg2)
2505 { return arg1 + arg2; }
2506 ]],[[
2507 int res3 = c99_vmacro3(1, 2, 3);
2508 int res2 = c99_vmacro2(1, 2);
2509 ]])
2510 ],[
2511 curl_cv_variadic_macros_c99="yes"
2512 ],[
2513 curl_cv_variadic_macros_c99="no"
2514 ])
2515 ])
2516 case "$curl_cv_variadic_macros_c99" in
2517 yes)
2518 AC_DEFINE_UNQUOTED(HAVE_VARIADIC_MACROS_C99, 1,
2519 [Define to 1 if compiler supports C99 variadic macro style.])
2520 ;;
2521 esac
2522 AC_CACHE_CHECK([for compiler support of old gcc variadic macro style],
2523 [curl_cv_variadic_macros_gcc], [
2524 AC_COMPILE_IFELSE([
2525 AC_LANG_PROGRAM([[
2526#define gcc_vmacro3(first, args...) fun3(first, args)
2527#define gcc_vmacro2(first, args...) fun2(first, args)
2528 int fun3(int arg1, int arg2, int arg3);
2529 int fun2(int arg1, int arg2);
2530 int fun3(int arg1, int arg2, int arg3)
2531 { return arg1 + arg2 + arg3; }
2532 int fun2(int arg1, int arg2)
2533 { return arg1 + arg2; }
2534 ]],[[
2535 int res3 = gcc_vmacro3(1, 2, 3);
2536 int res2 = gcc_vmacro2(1, 2);
2537 ]])
2538 ],[
2539 curl_cv_variadic_macros_gcc="yes"
2540 ],[
2541 curl_cv_variadic_macros_gcc="no"
2542 ])
2543 ])
2544 case "$curl_cv_variadic_macros_gcc" in
2545 yes)
2546 AC_DEFINE_UNQUOTED(HAVE_VARIADIC_MACROS_GCC, 1,
2547 [Define to 1 if compiler supports old gcc variadic macro style.])
2548 ;;
2549 esac
2550])
2551
2552
2553dnl CURL_CHECK_CA_BUNDLE
2554dnl -------------------------------------------------
2555dnl Check if a default ca-bundle should be used
2556dnl
2557dnl regarding the paths this will scan:
2558dnl /etc/ssl/certs/ca-certificates.crt Debian systems
2559dnl /etc/pki/tls/certs/ca-bundle.crt Redhat and Mandriva
2560dnl /usr/share/ssl/certs/ca-bundle.crt old(er) Redhat
2561dnl /usr/local/share/certs/ca-root.crt FreeBSD
2562dnl /etc/ssl/cert.pem OpenBSD
2563dnl /etc/ssl/certs/ (ca path) SUSE
2564
2565AC_DEFUN([CURL_CHECK_CA_BUNDLE], [
2566
2567 AC_MSG_CHECKING([default CA cert bundle/path])
2568
2569 AC_ARG_WITH(ca-bundle,
2570AC_HELP_STRING([--with-ca-bundle=FILE], [File name to use as CA bundle])
2571AC_HELP_STRING([--without-ca-bundle], [Don't use a default CA bundle]),
2572 [
2573 want_ca="$withval"
2574 if test "x$want_ca" = "xyes"; then
2575 AC_MSG_ERROR([--with-ca-bundle=FILE requires a path to the CA bundle])
2576 fi
2577 ],
2578 [ want_ca="unset" ])
2579 AC_ARG_WITH(ca-path,
2580AC_HELP_STRING([--with-ca-path=DIRECTORY], [Directory to use as CA path])
2581AC_HELP_STRING([--without-ca-path], [Don't use a default CA path]),
2582 [
2583 want_capath="$withval"
2584 if test "x$want_capath" = "xyes"; then
2585 AC_MSG_ERROR([--with-ca-path=DIRECTORY requires a path to the CA path directory])
2586 fi
2587 ],
2588 [ want_capath="unset"])
2589
2590 if test "x$want_ca" != "xno" -a "x$want_ca" != "xunset" -a \
2591 "x$want_capath" != "xno" -a "x$want_capath" != "xunset"; then
2592 dnl both given
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -07002593 ca="$want_ca"
2594 capath="$want_capath"
Lucas Eckels9bd90e62012-08-06 15:07:02 -07002595 elif test "x$want_ca" != "xno" -a "x$want_ca" != "xunset"; then
2596 dnl --with-ca-bundle given
2597 ca="$want_ca"
2598 capath="no"
2599 elif test "x$want_capath" != "xno" -a "x$want_capath" != "xunset"; then
2600 dnl --with-ca-path given
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -07002601 if test "x$OPENSSL_ENABLED" != "x1" -a "x$GNUTLS_ENABLED" != "x1" -a "x$POLARSSL_ENABLED" != "x1"; then
2602 AC_MSG_ERROR([--with-ca-path only works with OpenSSL, GnuTLS or PolarSSL])
Lucas Eckels9bd90e62012-08-06 15:07:02 -07002603 fi
2604 capath="$want_capath"
2605 ca="no"
2606 else
Lucas Eckels9bd90e62012-08-06 15:07:02 -07002607 dnl first try autodetecting a CA bundle , then a CA path
2608 dnl both autodetections can be skipped by --without-ca-*
2609 ca="no"
2610 capath="no"
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -07002611 if test "x$cross_compiling" != "xyes"; then
2612 dnl NOT cross-compiling and...
2613 dnl neither of the --with-ca-* options are provided
2614 if test "x$want_ca" = "xunset"; then
2615 dnl the path we previously would have installed the curl ca bundle
2616 dnl to, and thus we now check for an already existing cert in that
2617 dnl place in case we find no other
2618 if test "x$prefix" != xNONE; then
2619 cac="${prefix}/share/curl/curl-ca-bundle.crt"
2620 else
2621 cac="$ac_default_prefix/share/curl/curl-ca-bundle.crt"
2622 fi
Lucas Eckels9bd90e62012-08-06 15:07:02 -07002623
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -07002624 for a in /etc/ssl/certs/ca-certificates.crt \
2625 /etc/pki/tls/certs/ca-bundle.crt \
2626 /usr/share/ssl/certs/ca-bundle.crt \
2627 /usr/local/share/certs/ca-root.crt \
2628 /etc/ssl/cert.pem \
2629 "$cac"; do
2630 if test -f "$a"; then
2631 ca="$a"
2632 break
2633 fi
2634 done
2635 fi
2636 if test "x$want_capath" = "xunset" -a "x$ca" = "xno" -a \
2637 "x$OPENSSL_ENABLED" = "x1"; then
2638 for a in /etc/ssl/certs/; do
2639 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
2640 capath="$a"
2641 break
2642 fi
2643 done
2644 fi
2645 else
2646 dnl no option given and cross-compiling
2647 AC_MSG_WARN([skipped the ca-cert path detection when cross-compiling])
Lucas Eckels9bd90e62012-08-06 15:07:02 -07002648 fi
2649 fi
2650
Lucas Eckels9bd90e62012-08-06 15:07:02 -07002651 if test "x$ca" != "xno"; then
2652 CURL_CA_BUNDLE='"'$ca'"'
2653 AC_DEFINE_UNQUOTED(CURL_CA_BUNDLE, "$ca", [Location of default ca bundle])
2654 AC_SUBST(CURL_CA_BUNDLE)
2655 AC_MSG_RESULT([$ca])
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -07002656 fi
2657 if test "x$capath" != "xno"; then
Lucas Eckels9bd90e62012-08-06 15:07:02 -07002658 CURL_CA_PATH="\"$capath\""
2659 AC_DEFINE_UNQUOTED(CURL_CA_PATH, "$capath", [Location of default ca path])
2660 AC_MSG_RESULT([$capath (capath)])
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -07002661 fi
2662 if test "x$ca" = "xno" && test "x$capath" = "xno"; then
Lucas Eckels9bd90e62012-08-06 15:07:02 -07002663 AC_MSG_RESULT([no])
2664 fi
2665])
2666
2667
2668dnl DO_CURL_OFF_T_CHECK (TYPE, SIZE)
2669dnl -------------------------------------------------
2670dnl Internal macro for CURL_CONFIGURE_CURL_OFF_T
2671
2672AC_DEFUN([DO_CURL_OFF_T_CHECK], [
2673 AC_REQUIRE([CURL_INCLUDES_INTTYPES])dnl
2674 if test "$curl_typeof_curl_off_t" = "unknown" && test ! -z "$1"; then
2675 tmp_includes=""
2676 tmp_source=""
2677 tmp_fmt=""
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -07002678 case XC_SH_TR_SH([$1]) in
Lucas Eckels9bd90e62012-08-06 15:07:02 -07002679 int64_t)
2680 tmp_includes="$curl_includes_inttypes"
2681 tmp_source="char f@<:@@:>@ = PRId64;"
2682 tmp_fmt="PRId64"
2683 ;;
2684 int32_t)
2685 tmp_includes="$curl_includes_inttypes"
2686 tmp_source="char f@<:@@:>@ = PRId32;"
2687 tmp_fmt="PRId32"
2688 ;;
2689 int16_t)
2690 tmp_includes="$curl_includes_inttypes"
2691 tmp_source="char f@<:@@:>@ = PRId16;"
2692 tmp_fmt="PRId16"
2693 ;;
2694 esac
2695 AC_COMPILE_IFELSE([
2696 AC_LANG_PROGRAM([[
2697 $tmp_includes
2698 typedef $1 curl_off_t;
2699 typedef char dummy_arr[sizeof(curl_off_t) == $2 ? 1 : -1];
2700 ]],[[
2701 $tmp_source
2702 curl_off_t dummy;
2703 ]])
2704 ],[
2705 if test -z "$tmp_fmt"; then
2706 curl_typeof_curl_off_t="$1"
2707 curl_sizeof_curl_off_t="$2"
2708 else
2709 CURL_CHECK_DEF([$tmp_fmt], [$curl_includes_inttypes], [silent])
2710 AS_VAR_PUSHDEF([tmp_HaveFmtDef], [curl_cv_have_def_$tmp_fmt])dnl
2711 AS_VAR_PUSHDEF([tmp_FmtDef], [curl_cv_def_$tmp_fmt])dnl
2712 if test AS_VAR_GET(tmp_HaveFmtDef) = "yes"; then
2713 curl_format_curl_off_t=AS_VAR_GET(tmp_FmtDef)
2714 curl_typeof_curl_off_t="$1"
2715 curl_sizeof_curl_off_t="$2"
2716 fi
2717 AS_VAR_POPDEF([tmp_FmtDef])dnl
2718 AS_VAR_POPDEF([tmp_HaveFmtDef])dnl
2719 fi
2720 ])
2721 fi
2722])
2723
2724
2725dnl DO_CURL_OFF_T_SUFFIX_CHECK (TYPE)
2726dnl -------------------------------------------------
2727dnl Internal macro for CURL_CONFIGURE_CURL_OFF_T
2728
2729AC_DEFUN([DO_CURL_OFF_T_SUFFIX_CHECK], [
2730 AC_REQUIRE([CURL_INCLUDES_INTTYPES])dnl
2731 AC_MSG_CHECKING([constant suffix string for curl_off_t])
2732 #
2733 curl_suffix_curl_off_t="unknown"
2734 curl_suffix_curl_off_tu="unknown"
2735 #
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -07002736 case XC_SH_TR_SH([$1]) in
Lucas Eckels9bd90e62012-08-06 15:07:02 -07002737 long_long | __longlong | __longlong_t)
2738 tst_suffixes="LL::"
2739 ;;
2740 long)
2741 tst_suffixes="L::"
2742 ;;
2743 int)
2744 tst_suffixes="::"
2745 ;;
2746 __int64 | int64_t)
2747 tst_suffixes="LL:i64::"
2748 ;;
2749 __int32 | int32_t)
2750 tst_suffixes="L:i32::"
2751 ;;
2752 __int16 | int16_t)
2753 tst_suffixes="L:i16::"
2754 ;;
2755 *)
2756 AC_MSG_ERROR([unexpected data type $1])
2757 ;;
2758 esac
2759 #
2760 old_IFS=$IFS; IFS=':'
2761 for tmp_ssuf in $tst_suffixes ; do
2762 IFS=$old_IFS
2763 if test "x$curl_suffix_curl_off_t" = "xunknown"; then
2764 case $tmp_ssuf in
2765 i64 | i32 | i16)
2766 tmp_usuf="u$tmp_ssuf"
2767 ;;
2768 LL | L)
2769 tmp_usuf="U$tmp_ssuf"
2770 ;;
2771 *)
2772 tmp_usuf=""
2773 ;;
2774 esac
2775 AC_COMPILE_IFELSE([
2776 AC_LANG_PROGRAM([[
2777 $curl_includes_inttypes
2778 typedef $1 new_t;
2779 ]],[[
2780 new_t s1;
2781 new_t s2;
2782 s1 = -10$tmp_ssuf ;
2783 s2 = 20$tmp_ssuf ;
2784 if(s1 > s2)
2785 return 1;
2786 ]])
2787 ],[
2788 curl_suffix_curl_off_t="$tmp_ssuf"
2789 curl_suffix_curl_off_tu="$tmp_usuf"
2790 ])
2791 fi
2792 done
2793 IFS=$old_IFS
2794 #
2795 if test "x$curl_suffix_curl_off_t" = "xunknown"; then
2796 AC_MSG_ERROR([cannot find constant suffix string for curl_off_t.])
2797 else
2798 AC_MSG_RESULT([$curl_suffix_curl_off_t])
2799 AC_MSG_CHECKING([constant suffix string for unsigned curl_off_t])
2800 AC_MSG_RESULT([$curl_suffix_curl_off_tu])
2801 fi
2802 #
2803])
2804
2805
2806dnl CURL_CONFIGURE_CURL_OFF_T
2807dnl -------------------------------------------------
2808dnl Find out suitable curl_off_t data type definition and associated
2809dnl items, and make the appropriate definitions used in template file
2810dnl include/curl/curlbuild.h.in to properly configure the library.
2811
2812AC_DEFUN([CURL_CONFIGURE_CURL_OFF_T], [
2813 AC_REQUIRE([CURL_INCLUDES_INTTYPES])dnl
2814 #
2815 AC_BEFORE([$0],[AC_SYS_LARGEFILE])dnl
2816 AC_BEFORE([$0],[CURL_CONFIGURE_REENTRANT])dnl
2817 AC_BEFORE([$0],[CURL_CHECK_AIX_ALL_SOURCE])dnl
2818 #
2819 if test -z "$SED"; then
2820 AC_MSG_ERROR([SED not set. Cannot continue without SED being set.])
2821 fi
2822 #
2823 AC_CHECK_SIZEOF(long)
2824 AC_CHECK_SIZEOF(void*)
2825 #
2826 if test -z "$ac_cv_sizeof_long" ||
2827 test "$ac_cv_sizeof_long" -eq "0"; then
2828 AC_MSG_ERROR([cannot find out size of long.])
2829 fi
2830 if test -z "$ac_cv_sizeof_voidp" ||
2831 test "$ac_cv_sizeof_voidp" -eq "0"; then
2832 AC_MSG_ERROR([cannot find out size of void*.])
2833 fi
2834 #
2835 x_LP64_long=""
2836 x_LP32_long=""
2837 x_LP16_long=""
2838 #
2839 if test "$ac_cv_sizeof_long" -eq "8" &&
2840 test "$ac_cv_sizeof_voidp" -ge "8"; then
2841 x_LP64_long="long"
2842 elif test "$ac_cv_sizeof_long" -eq "4" &&
2843 test "$ac_cv_sizeof_voidp" -ge "4"; then
2844 x_LP32_long="long"
2845 elif test "$ac_cv_sizeof_long" -eq "2" &&
2846 test "$ac_cv_sizeof_voidp" -ge "2"; then
2847 x_LP16_long="long"
2848 fi
2849 #
2850 dnl DO_CURL_OFF_T_CHECK results are stored in next 3 vars
2851 #
2852 curl_typeof_curl_off_t="unknown"
2853 curl_sizeof_curl_off_t="unknown"
2854 curl_format_curl_off_t="unknown"
2855 curl_format_curl_off_tu="unknown"
2856 #
2857 if test "$curl_typeof_curl_off_t" = "unknown"; then
2858 AC_MSG_CHECKING([for 64-bit curl_off_t data type])
2859 for t8 in \
2860 "$x_LP64_long" \
2861 'int64_t' \
2862 '__int64' \
2863 'long long' \
2864 '__longlong' \
2865 '__longlong_t' ; do
2866 DO_CURL_OFF_T_CHECK([$t8], [8])
2867 done
2868 AC_MSG_RESULT([$curl_typeof_curl_off_t])
2869 fi
2870 if test "$curl_typeof_curl_off_t" = "unknown"; then
2871 AC_MSG_CHECKING([for 32-bit curl_off_t data type])
2872 for t4 in \
2873 "$x_LP32_long" \
2874 'int32_t' \
2875 '__int32' \
2876 'int' ; do
2877 DO_CURL_OFF_T_CHECK([$t4], [4])
2878 done
2879 AC_MSG_RESULT([$curl_typeof_curl_off_t])
2880 fi
2881 if test "$curl_typeof_curl_off_t" = "unknown"; then
2882 AC_MSG_CHECKING([for 16-bit curl_off_t data type])
2883 for t2 in \
2884 "$x_LP16_long" \
2885 'int16_t' \
2886 '__int16' \
2887 'int' ; do
2888 DO_CURL_OFF_T_CHECK([$t2], [2])
2889 done
2890 AC_MSG_RESULT([$curl_typeof_curl_off_t])
2891 fi
2892 if test "$curl_typeof_curl_off_t" = "unknown"; then
2893 AC_MSG_ERROR([cannot find data type for curl_off_t.])
2894 fi
2895 #
2896 AC_MSG_CHECKING([size of curl_off_t])
2897 AC_MSG_RESULT([$curl_sizeof_curl_off_t])
2898 #
2899 AC_MSG_CHECKING([formatting string directive for curl_off_t])
2900 if test "$curl_format_curl_off_t" != "unknown"; then
2901 x_pull_headers="yes"
2902 curl_format_curl_off_t=`echo "$curl_format_curl_off_t" | "$SED" 's/[["]]//g'`
2903 curl_format_curl_off_tu=`echo "$curl_format_curl_off_t" | "$SED" 's/i$/u/'`
2904 curl_format_curl_off_tu=`echo "$curl_format_curl_off_tu" | "$SED" 's/d$/u/'`
2905 curl_format_curl_off_tu=`echo "$curl_format_curl_off_tu" | "$SED" 's/D$/U/'`
2906 else
2907 x_pull_headers="no"
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -07002908 case XC_SH_TR_SH([$curl_typeof_curl_off_t]) in
Lucas Eckels9bd90e62012-08-06 15:07:02 -07002909 long_long | __longlong | __longlong_t)
2910 curl_format_curl_off_t="lld"
2911 curl_format_curl_off_tu="llu"
2912 ;;
2913 long)
2914 curl_format_curl_off_t="ld"
2915 curl_format_curl_off_tu="lu"
2916 ;;
2917 int)
2918 curl_format_curl_off_t="d"
2919 curl_format_curl_off_tu="u"
2920 ;;
2921 __int64)
2922 curl_format_curl_off_t="I64d"
2923 curl_format_curl_off_tu="I64u"
2924 ;;
2925 __int32)
2926 curl_format_curl_off_t="I32d"
2927 curl_format_curl_off_tu="I32u"
2928 ;;
2929 __int16)
2930 curl_format_curl_off_t="I16d"
2931 curl_format_curl_off_tu="I16u"
2932 ;;
2933 *)
2934 AC_MSG_ERROR([cannot find print format string for curl_off_t.])
2935 ;;
2936 esac
2937 fi
2938 AC_MSG_RESULT(["$curl_format_curl_off_t"])
2939 #
2940 AC_MSG_CHECKING([formatting string directive for unsigned curl_off_t])
2941 AC_MSG_RESULT(["$curl_format_curl_off_tu"])
2942 #
2943 DO_CURL_OFF_T_SUFFIX_CHECK([$curl_typeof_curl_off_t])
2944 #
2945 if test "$x_pull_headers" = "yes"; then
2946 if test "x$ac_cv_header_sys_types_h" = "xyes"; then
2947 CURL_DEFINE_UNQUOTED([CURL_PULL_SYS_TYPES_H])
2948 fi
2949 if test "x$ac_cv_header_stdint_h" = "xyes"; then
2950 CURL_DEFINE_UNQUOTED([CURL_PULL_STDINT_H])
2951 fi
2952 if test "x$ac_cv_header_inttypes_h" = "xyes"; then
2953 CURL_DEFINE_UNQUOTED([CURL_PULL_INTTYPES_H])
2954 fi
2955 fi
2956 #
2957 CURL_DEFINE_UNQUOTED([CURL_TYPEOF_CURL_OFF_T], [$curl_typeof_curl_off_t])
2958 CURL_DEFINE_UNQUOTED([CURL_FORMAT_CURL_OFF_T], ["$curl_format_curl_off_t"])
2959 CURL_DEFINE_UNQUOTED([CURL_FORMAT_CURL_OFF_TU], ["$curl_format_curl_off_tu"])
2960 CURL_DEFINE_UNQUOTED([CURL_FORMAT_OFF_T], ["%$curl_format_curl_off_t"])
2961 CURL_DEFINE_UNQUOTED([CURL_SIZEOF_CURL_OFF_T], [$curl_sizeof_curl_off_t])
2962 CURL_DEFINE_UNQUOTED([CURL_SUFFIX_CURL_OFF_T], [$curl_suffix_curl_off_t])
2963 CURL_DEFINE_UNQUOTED([CURL_SUFFIX_CURL_OFF_TU], [$curl_suffix_curl_off_tu])
2964 #
2965])
2966
2967
2968dnl CURL_CHECK_WIN32_LARGEFILE
2969dnl -------------------------------------------------
2970dnl Check if curl's WIN32 large file will be used
2971
2972AC_DEFUN([CURL_CHECK_WIN32_LARGEFILE], [
2973 AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
2974 AC_MSG_CHECKING([whether build target supports WIN32 file API])
2975 curl_win32_file_api="no"
2976 if test "$ac_cv_header_windows_h" = "yes"; then
2977 if test x"$enable_largefile" != "xno"; then
2978 AC_COMPILE_IFELSE([
2979 AC_LANG_PROGRAM([[
2980 ]],[[
2981#if !defined(_WIN32_WCE) && \
2982 (defined(__MINGW32__) || \
2983 (defined(_MSC_VER) && (defined(_WIN32) || defined(_WIN64))))
2984 int dummy=1;
2985#else
2986 WIN32 large file API not supported.
2987#endif
2988 ]])
2989 ],[
2990 curl_win32_file_api="win32_large_files"
2991 ])
2992 fi
2993 if test "$curl_win32_file_api" = "no"; then
2994 AC_COMPILE_IFELSE([
2995 AC_LANG_PROGRAM([[
2996 ]],[[
2997#if defined(_WIN32_WCE) || defined(__MINGW32__) || defined(_MSC_VER)
2998 int dummy=1;
2999#else
3000 WIN32 small file API not supported.
3001#endif
3002 ]])
3003 ],[
3004 curl_win32_file_api="win32_small_files"
3005 ])
3006 fi
3007 fi
3008 case "$curl_win32_file_api" in
3009 win32_large_files)
3010 AC_MSG_RESULT([yes (large file enabled)])
3011 AC_DEFINE_UNQUOTED(USE_WIN32_LARGE_FILES, 1,
3012 [Define to 1 if you are building a Windows target with large file support.])
3013 ;;
3014 win32_small_files)
3015 AC_MSG_RESULT([yes (large file disabled)])
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -07003016 AC_DEFINE_UNQUOTED(USE_WIN32_SMALL_FILES, 1,
Lucas Eckels9bd90e62012-08-06 15:07:02 -07003017 [Define to 1 if you are building a Windows target without large file support.])
3018 ;;
3019 *)
3020 AC_MSG_RESULT([no])
3021 ;;
3022 esac
3023])
3024
3025dnl CURL_EXPORT_PCDIR ($pcdir)
3026dnl ------------------------
3027dnl if $pcdir is not empty, set PKG_CONFIG_LIBDIR to $pcdir and export
3028dnl
3029dnl we need this macro since pkg-config distinguishes among empty and unset
3030dnl variable while checking PKG_CONFIG_LIBDIR
3031dnl
3032
3033AC_DEFUN([CURL_EXPORT_PCDIR], [
3034 if test -n "$1"; then
3035 PKG_CONFIG_LIBDIR="$1"
3036 export PKG_CONFIG_LIBDIR
3037 fi
3038])
3039
3040dnl CURL_CHECK_PKGCONFIG ($module, [$pcdir])
3041dnl ------------------------
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -07003042dnl search for the pkg-config tool. Set the PKGCONFIG variable to hold the
3043dnl path to it, or 'no' if not found/present.
Lucas Eckels9bd90e62012-08-06 15:07:02 -07003044dnl
3045dnl If pkg-config is present, check that it has info about the $module or
3046dnl return "no" anyway!
3047dnl
3048dnl Optionally PKG_CONFIG_LIBDIR may be given as $pcdir.
3049dnl
3050
3051AC_DEFUN([CURL_CHECK_PKGCONFIG], [
3052
3053 PKGCONFIG="no"
3054
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -07003055 AC_PATH_TOOL( PKGCONFIG, pkg-config, no, $PATH:/usr/bin:/usr/local/bin)
Lucas Eckels9bd90e62012-08-06 15:07:02 -07003056
3057 if test x$PKGCONFIG != xno; then
3058 AC_MSG_CHECKING([for $1 options with pkg-config])
3059 dnl ask pkg-config about $1
3060 itexists=`CURL_EXPORT_PCDIR([$2]) dnl
3061 $PKGCONFIG --exists $1 >/dev/null 2>&1 && echo 1`
3062
3063 if test -z "$itexists"; then
3064 dnl pkg-config does not have info about the given module! set the
3065 dnl variable to 'no'
3066 PKGCONFIG="no"
3067 AC_MSG_RESULT([no])
3068 else
3069 AC_MSG_RESULT([found])
3070 fi
3071 fi
3072])
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -07003073
3074
3075dnl CURL_GENERATE_CONFIGUREHELP_PM
3076dnl -------------------------------------------------
3077dnl Generate test harness configurehelp.pm module, defining and
3078dnl initializing some perl variables with values which are known
3079dnl when the configure script runs. For portability reasons, test
3080dnl harness needs information on how to run the C preprocessor.
3081
3082AC_DEFUN([CURL_GENERATE_CONFIGUREHELP_PM], [
3083 AC_REQUIRE([AC_PROG_CPP])dnl
3084 tmp_cpp=`eval echo "$ac_cpp" 2>/dev/null`
3085 if test -z "$tmp_cpp"; then
3086 tmp_cpp='cpp'
3087 fi
3088 cat >./tests/configurehelp.pm <<_EOF
3089[@%:@] This is a generated file. Do not edit.
3090
3091package configurehelp;
3092
3093use strict;
3094use warnings;
3095use Exporter;
3096
3097use vars qw(
3098 @ISA
3099 @EXPORT_OK
3100 \$Cpreprocessor
3101 );
3102
3103@ISA = qw(Exporter);
3104
3105@EXPORT_OK = qw(
3106 \$Cpreprocessor
3107 );
3108
3109\$Cpreprocessor = '$tmp_cpp';
3110
31111;
3112_EOF
3113])