blob: 69bb6c00233c59f25ab79b8de7d26a9f4e7310c0 [file] [log] [blame]
Lucas Eckels9bd90e62012-08-06 15:07:02 -07001#***************************************************************************
2# _ _ ____ _
3# Project ___| | | | _ \| |
4# / __| | | | |_) | |
5# | (__| |_| | _ <| |___
6# \___|\___/|_| \_\_____|
7#
Elliott Hughes82be86d2017-09-20 17:00:17 -07008# Copyright (C) 1998 - 2017, 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
Alex Deymod15eaac2016-06-28 14:49:26 -070012# are also available at https://curl.haxx.se/docs/copyright.html.
Lucas Eckels9bd90e62012-08-06 15:07:02 -070013#
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
Lucas Eckels9bd90e62012-08-06 15:07:02 -070023dnl CURL_CHECK_DEF (SYMBOL, [INCLUDES], [SILENT])
24dnl -------------------------------------------------
25dnl Use the C preprocessor to find out if the given object-style symbol
26dnl is defined and get its expansion. This macro will not use default
27dnl includes even if no INCLUDES argument is given. This macro will run
28dnl silently when invoked with three arguments. If the expansion would
29dnl result in a set of double-quoted strings the returned expansion will
30dnl actually be a single double-quoted string concatenating all them.
31
32AC_DEFUN([CURL_CHECK_DEF], [
Alex Deymod15eaac2016-06-28 14:49:26 -070033 AC_REQUIRE([CURL_CPP_P])dnl
34 OLDCPPFLAGS=$CPPFLAGS
Elliott Hughescee03382017-06-23 12:17:18 -070035 # CPPPFLAG comes from CURL_CPP_P
36 CPPFLAGS="$CPPFLAGS $CPPPFLAG"
Lucas Eckels9bd90e62012-08-06 15:07:02 -070037 AS_VAR_PUSHDEF([ac_HaveDef], [curl_cv_have_def_$1])dnl
38 AS_VAR_PUSHDEF([ac_Def], [curl_cv_def_$1])dnl
39 if test -z "$SED"; then
40 AC_MSG_ERROR([SED not set. Cannot continue without SED being set.])
41 fi
42 if test -z "$GREP"; then
43 AC_MSG_ERROR([GREP not set. Cannot continue without GREP being set.])
44 fi
45 ifelse($3,,[AC_MSG_CHECKING([for preprocessor definition of $1])])
46 tmp_exp=""
47 AC_PREPROC_IFELSE([
48 AC_LANG_SOURCE(
49ifelse($2,,,[$2])[[
50#ifdef $1
51CURL_DEF_TOKEN $1
52#endif
53 ]])
54 ],[
55 tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \
56 "$GREP" CURL_DEF_TOKEN 2>/dev/null | \
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -070057 "$SED" 's/.*CURL_DEF_TOKEN[[ ]][[ ]]*//' 2>/dev/null | \
Lucas Eckels9bd90e62012-08-06 15:07:02 -070058 "$SED" 's/[["]][[ ]]*[["]]//g' 2>/dev/null`
59 if test -z "$tmp_exp" || test "$tmp_exp" = "$1"; then
60 tmp_exp=""
61 fi
62 ])
63 if test -z "$tmp_exp"; then
64 AS_VAR_SET(ac_HaveDef, no)
65 ifelse($3,,[AC_MSG_RESULT([no])])
66 else
67 AS_VAR_SET(ac_HaveDef, yes)
68 AS_VAR_SET(ac_Def, $tmp_exp)
69 ifelse($3,,[AC_MSG_RESULT([$tmp_exp])])
70 fi
71 AS_VAR_POPDEF([ac_Def])dnl
72 AS_VAR_POPDEF([ac_HaveDef])dnl
Alex Deymod15eaac2016-06-28 14:49:26 -070073 CPPFLAGS=$OLDCPPFLAGS
Lucas Eckels9bd90e62012-08-06 15:07:02 -070074])
75
76
77dnl CURL_CHECK_DEF_CC (SYMBOL, [INCLUDES], [SILENT])
78dnl -------------------------------------------------
79dnl Use the C compiler to find out only if the given symbol is defined
80dnl or not, this can not find out its expansion. This macro will not use
81dnl default includes even if no INCLUDES argument is given. This macro
82dnl will run silently when invoked with three arguments.
83
84AC_DEFUN([CURL_CHECK_DEF_CC], [
85 AS_VAR_PUSHDEF([ac_HaveDef], [curl_cv_have_def_$1])dnl
86 ifelse($3,,[AC_MSG_CHECKING([for compiler definition of $1])])
87 AC_COMPILE_IFELSE([
88 AC_LANG_SOURCE(
89ifelse($2,,,[$2])[[
90int main (void)
91{
92#ifdef $1
93 return 0;
94#else
95 force compilation error
96#endif
97}
98 ]])
99 ],[
100 tst_symbol_defined="yes"
101 ],[
102 tst_symbol_defined="no"
103 ])
104 if test "$tst_symbol_defined" = "yes"; then
105 AS_VAR_SET(ac_HaveDef, yes)
106 ifelse($3,,[AC_MSG_RESULT([yes])])
107 else
108 AS_VAR_SET(ac_HaveDef, no)
109 ifelse($3,,[AC_MSG_RESULT([no])])
110 fi
111 AS_VAR_POPDEF([ac_HaveDef])dnl
112])
113
114
115dnl CURL_CHECK_LIB_XNET
116dnl -------------------------------------------------
117dnl Verify if X/Open network library is required.
118
119AC_DEFUN([CURL_CHECK_LIB_XNET], [
120 AC_MSG_CHECKING([if X/Open network library is required])
121 tst_lib_xnet_required="no"
122 AC_COMPILE_IFELSE([
123 AC_LANG_SOURCE([[
124int main (void)
125{
126#if defined(__hpux) && defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 600)
127 return 0;
128#elif defined(__hpux) && defined(_XOPEN_SOURCE_EXTENDED)
129 return 0;
130#else
131 force compilation error
132#endif
133}
134 ]])
135 ],[
136 tst_lib_xnet_required="yes"
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -0700137 LIBS="-lxnet $LIBS"
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700138 ])
139 AC_MSG_RESULT([$tst_lib_xnet_required])
140])
141
142
143dnl CURL_CHECK_AIX_ALL_SOURCE
144dnl -------------------------------------------------
145dnl Provides a replacement of traditional AC_AIX with
146dnl an uniform behaviour across all autoconf versions,
147dnl and with our own placement rules.
148
149AC_DEFUN([CURL_CHECK_AIX_ALL_SOURCE], [
150 AH_VERBATIM([_ALL_SOURCE],
151 [/* Define to 1 if OS is AIX. */
152#ifndef _ALL_SOURCE
153# undef _ALL_SOURCE
154#endif])
155 AC_BEFORE([$0], [AC_SYS_LARGEFILE])dnl
156 AC_BEFORE([$0], [CURL_CONFIGURE_REENTRANT])dnl
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -0700157 AC_BEFORE([$0], [CURL_CONFIGURE_PULL_SYS_POLL])dnl
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700158 AC_MSG_CHECKING([if OS is AIX (to define _ALL_SOURCE)])
159 AC_EGREP_CPP([yes_this_is_aix],[
160#ifdef _AIX
161 yes_this_is_aix
162#endif
163 ],[
164 AC_MSG_RESULT([yes])
165 AC_DEFINE(_ALL_SOURCE)
166 ],[
167 AC_MSG_RESULT([no])
168 ])
169])
170
171
172dnl CURL_CHECK_HEADER_WINDOWS
173dnl -------------------------------------------------
174dnl Check for compilable and valid windows.h header
175
176AC_DEFUN([CURL_CHECK_HEADER_WINDOWS], [
Alex Deymod15eaac2016-06-28 14:49:26 -0700177 AC_CACHE_CHECK([for windows.h], [curl_cv_header_windows_h], [
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700178 AC_COMPILE_IFELSE([
179 AC_LANG_PROGRAM([[
180#undef inline
181#ifndef WIN32_LEAN_AND_MEAN
182#define WIN32_LEAN_AND_MEAN
183#endif
184#include <windows.h>
185 ]],[[
186#if defined(__CYGWIN__) || defined(__CEGCC__)
187 HAVE_WINDOWS_H shall not be defined.
188#else
189 int dummy=2*WINVER;
190#endif
191 ]])
192 ],[
Alex Deymod15eaac2016-06-28 14:49:26 -0700193 curl_cv_header_windows_h="yes"
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700194 ],[
Alex Deymod15eaac2016-06-28 14:49:26 -0700195 curl_cv_header_windows_h="no"
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700196 ])
197 ])
Alex Deymod15eaac2016-06-28 14:49:26 -0700198 case "$curl_cv_header_windows_h" in
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700199 yes)
200 AC_DEFINE_UNQUOTED(HAVE_WINDOWS_H, 1,
201 [Define to 1 if you have the windows.h header file.])
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700202 ;;
203 esac
204])
205
206
207dnl CURL_CHECK_NATIVE_WINDOWS
208dnl -------------------------------------------------
209dnl Check if building a native Windows target
210
211AC_DEFUN([CURL_CHECK_NATIVE_WINDOWS], [
212 AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
Alex Deymod15eaac2016-06-28 14:49:26 -0700213 AC_CACHE_CHECK([whether build target is a native Windows one], [curl_cv_native_windows], [
214 if test "$curl_cv_header_windows_h" = "no"; then
215 curl_cv_native_windows="no"
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700216 else
217 AC_COMPILE_IFELSE([
218 AC_LANG_PROGRAM([[
219 ]],[[
220#if defined(__MINGW32__) || defined(__MINGW32CE__) || \
221 (defined(_MSC_VER) && (defined(_WIN32) || defined(_WIN64)))
222 int dummy=1;
223#else
224 Not a native Windows build target.
225#endif
226 ]])
227 ],[
Alex Deymod15eaac2016-06-28 14:49:26 -0700228 curl_cv_native_windows="yes"
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700229 ],[
Alex Deymod15eaac2016-06-28 14:49:26 -0700230 curl_cv_native_windows="no"
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700231 ])
232 fi
233 ])
Alex Deymod15eaac2016-06-28 14:49:26 -0700234 AM_CONDITIONAL(DOING_NATIVE_WINDOWS, test "x$curl_cv_native_windows" = xyes)
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700235])
236
237
238dnl CURL_CHECK_HEADER_WINSOCK
239dnl -------------------------------------------------
240dnl Check for compilable and valid winsock.h header
241
242AC_DEFUN([CURL_CHECK_HEADER_WINSOCK], [
243 AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
Alex Deymod15eaac2016-06-28 14:49:26 -0700244 AC_CACHE_CHECK([for winsock.h], [curl_cv_header_winsock_h], [
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700245 AC_COMPILE_IFELSE([
246 AC_LANG_PROGRAM([[
247#undef inline
248#ifndef WIN32_LEAN_AND_MEAN
249#define WIN32_LEAN_AND_MEAN
250#endif
251#include <windows.h>
252#include <winsock.h>
253 ]],[[
254#if defined(__CYGWIN__) || defined(__CEGCC__)
255 HAVE_WINSOCK_H shall not be defined.
256#else
257 int dummy=WSACleanup();
258#endif
259 ]])
260 ],[
Alex Deymod15eaac2016-06-28 14:49:26 -0700261 curl_cv_header_winsock_h="yes"
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700262 ],[
Alex Deymod15eaac2016-06-28 14:49:26 -0700263 curl_cv_header_winsock_h="no"
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700264 ])
265 ])
Alex Deymod15eaac2016-06-28 14:49:26 -0700266 case "$curl_cv_header_winsock_h" in
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700267 yes)
268 AC_DEFINE_UNQUOTED(HAVE_WINSOCK_H, 1,
269 [Define to 1 if you have the winsock.h header file.])
270 ;;
271 esac
272])
273
274
275dnl CURL_CHECK_HEADER_WINSOCK2
276dnl -------------------------------------------------
277dnl Check for compilable and valid winsock2.h header
278
279AC_DEFUN([CURL_CHECK_HEADER_WINSOCK2], [
280 AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
Alex Deymod15eaac2016-06-28 14:49:26 -0700281 AC_CACHE_CHECK([for winsock2.h], [curl_cv_header_winsock2_h], [
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700282 AC_COMPILE_IFELSE([
283 AC_LANG_PROGRAM([[
284#undef inline
285#ifndef WIN32_LEAN_AND_MEAN
286#define WIN32_LEAN_AND_MEAN
287#endif
288#include <windows.h>
289#include <winsock2.h>
290 ]],[[
291#if defined(__CYGWIN__) || defined(__CEGCC__) || defined(__MINGW32CE__)
292 HAVE_WINSOCK2_H shall not be defined.
293#else
294 int dummy=2*IPPROTO_ESP;
295#endif
296 ]])
297 ],[
Alex Deymod15eaac2016-06-28 14:49:26 -0700298 curl_cv_header_winsock2_h="yes"
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700299 ],[
Alex Deymod15eaac2016-06-28 14:49:26 -0700300 curl_cv_header_winsock2_h="no"
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700301 ])
302 ])
Alex Deymod15eaac2016-06-28 14:49:26 -0700303 case "$curl_cv_header_winsock2_h" in
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700304 yes)
305 AC_DEFINE_UNQUOTED(HAVE_WINSOCK2_H, 1,
306 [Define to 1 if you have the winsock2.h header file.])
307 ;;
308 esac
309])
310
311
312dnl CURL_CHECK_HEADER_WS2TCPIP
313dnl -------------------------------------------------
314dnl Check for compilable and valid ws2tcpip.h header
315
316AC_DEFUN([CURL_CHECK_HEADER_WS2TCPIP], [
317 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
Alex Deymod15eaac2016-06-28 14:49:26 -0700318 AC_CACHE_CHECK([for ws2tcpip.h], [curl_cv_header_ws2tcpip_h], [
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700319 AC_COMPILE_IFELSE([
320 AC_LANG_PROGRAM([[
321#undef inline
322#ifndef WIN32_LEAN_AND_MEAN
323#define WIN32_LEAN_AND_MEAN
324#endif
325#include <windows.h>
326#include <winsock2.h>
327#include <ws2tcpip.h>
328 ]],[[
329#if defined(__CYGWIN__) || defined(__CEGCC__) || defined(__MINGW32CE__)
330 HAVE_WS2TCPIP_H shall not be defined.
331#else
332 int dummy=2*IP_PKTINFO;
333#endif
334 ]])
335 ],[
Alex Deymod15eaac2016-06-28 14:49:26 -0700336 curl_cv_header_ws2tcpip_h="yes"
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700337 ],[
Alex Deymod15eaac2016-06-28 14:49:26 -0700338 curl_cv_header_ws2tcpip_h="no"
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700339 ])
340 ])
Alex Deymod15eaac2016-06-28 14:49:26 -0700341 case "$curl_cv_header_ws2tcpip_h" in
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700342 yes)
343 AC_DEFINE_UNQUOTED(HAVE_WS2TCPIP_H, 1,
344 [Define to 1 if you have the ws2tcpip.h header file.])
345 ;;
346 esac
347])
348
349
350dnl CURL_CHECK_HEADER_WINLDAP
351dnl -------------------------------------------------
352dnl Check for compilable and valid winldap.h header
353
354AC_DEFUN([CURL_CHECK_HEADER_WINLDAP], [
355 AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
Alex Deymod15eaac2016-06-28 14:49:26 -0700356 AC_CACHE_CHECK([for winldap.h], [curl_cv_header_winldap_h], [
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700357 AC_COMPILE_IFELSE([
358 AC_LANG_PROGRAM([[
359#undef inline
360#ifdef HAVE_WINDOWS_H
361#ifndef WIN32_LEAN_AND_MEAN
362#define WIN32_LEAN_AND_MEAN
363#endif
364#include <windows.h>
365#endif
366#include <winldap.h>
367 ]],[[
368#if defined(__CYGWIN__) || defined(__CEGCC__)
369 HAVE_WINLDAP_H shall not be defined.
370#else
371 LDAP *ldp = ldap_init("dummy", LDAP_PORT);
372 ULONG res = ldap_unbind(ldp);
373#endif
374 ]])
375 ],[
Alex Deymod15eaac2016-06-28 14:49:26 -0700376 curl_cv_header_winldap_h="yes"
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700377 ],[
Alex Deymod15eaac2016-06-28 14:49:26 -0700378 curl_cv_header_winldap_h="no"
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700379 ])
380 ])
Alex Deymod15eaac2016-06-28 14:49:26 -0700381 case "$curl_cv_header_winldap_h" in
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700382 yes)
383 AC_DEFINE_UNQUOTED(HAVE_WINLDAP_H, 1,
384 [Define to 1 if you have the winldap.h header file.])
385 ;;
386 esac
387])
388
389
390dnl CURL_CHECK_HEADER_WINBER
391dnl -------------------------------------------------
392dnl Check for compilable and valid winber.h header
393
394AC_DEFUN([CURL_CHECK_HEADER_WINBER], [
395 AC_REQUIRE([CURL_CHECK_HEADER_WINLDAP])dnl
Alex Deymod15eaac2016-06-28 14:49:26 -0700396 AC_CACHE_CHECK([for winber.h], [curl_cv_header_winber_h], [
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700397 AC_COMPILE_IFELSE([
398 AC_LANG_PROGRAM([[
399#undef inline
400#ifdef HAVE_WINDOWS_H
401#ifndef WIN32_LEAN_AND_MEAN
402#define WIN32_LEAN_AND_MEAN
403#endif
404#include <windows.h>
405#endif
406#include <winldap.h>
407#include <winber.h>
408 ]],[[
409#if defined(__CYGWIN__) || defined(__CEGCC__)
410 HAVE_WINBER_H shall not be defined.
411#else
412 BERVAL *bvp = NULL;
413 BerElement *bep = ber_init(bvp);
414 ber_free(bep, 1);
415#endif
416 ]])
417 ],[
Alex Deymod15eaac2016-06-28 14:49:26 -0700418 curl_cv_header_winber_h="yes"
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700419 ],[
Alex Deymod15eaac2016-06-28 14:49:26 -0700420 curl_cv_header_winber_h="no"
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700421 ])
422 ])
Alex Deymod15eaac2016-06-28 14:49:26 -0700423 case "$curl_cv_header_winber_h" in
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700424 yes)
425 AC_DEFINE_UNQUOTED(HAVE_WINBER_H, 1,
426 [Define to 1 if you have the winber.h header file.])
427 ;;
428 esac
429])
430
431
432dnl CURL_CHECK_HEADER_LBER
433dnl -------------------------------------------------
434dnl Check for compilable and valid lber.h header,
435dnl and check if it is needed even with ldap.h
436
437AC_DEFUN([CURL_CHECK_HEADER_LBER], [
438 AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
Alex Deymod15eaac2016-06-28 14:49:26 -0700439 AC_CACHE_CHECK([for lber.h], [curl_cv_header_lber_h], [
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700440 AC_COMPILE_IFELSE([
441 AC_LANG_PROGRAM([[
442#undef inline
443#ifdef HAVE_WINDOWS_H
444#ifndef WIN32_LEAN_AND_MEAN
445#define WIN32_LEAN_AND_MEAN
446#endif
447#include <windows.h>
448#else
449#ifdef HAVE_SYS_TYPES_H
450#include <sys/types.h>
451#endif
452#endif
453#ifndef NULL
454#define NULL (void *)0
455#endif
456#include <lber.h>
457 ]],[[
458 BerValue *bvp = NULL;
459 BerElement *bep = ber_init(bvp);
460 ber_free(bep, 1);
461 ]])
462 ],[
Alex Deymod15eaac2016-06-28 14:49:26 -0700463 curl_cv_header_lber_h="yes"
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700464 ],[
Alex Deymod15eaac2016-06-28 14:49:26 -0700465 curl_cv_header_lber_h="no"
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700466 ])
467 ])
Alex Deymod15eaac2016-06-28 14:49:26 -0700468 if test "$curl_cv_header_lber_h" = "yes"; then
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700469 AC_DEFINE_UNQUOTED(HAVE_LBER_H, 1,
470 [Define to 1 if you have the lber.h header file.])
471 #
472 AC_COMPILE_IFELSE([
473 AC_LANG_PROGRAM([[
474#undef inline
475#ifdef HAVE_WINDOWS_H
476#ifndef WIN32_LEAN_AND_MEAN
477#define WIN32_LEAN_AND_MEAN
478#endif
479#include <windows.h>
480#else
481#ifdef HAVE_SYS_TYPES_H
482#include <sys/types.h>
483#endif
484#endif
485#ifndef NULL
486#define NULL (void *)0
487#endif
488#ifndef LDAP_DEPRECATED
489#define LDAP_DEPRECATED 1
490#endif
491#include <ldap.h>
492 ]],[[
493 BerValue *bvp = NULL;
494 BerElement *bep = ber_init(bvp);
495 ber_free(bep, 1);
496 ]])
497 ],[
498 curl_cv_need_header_lber_h="no"
499 ],[
500 curl_cv_need_header_lber_h="yes"
501 ])
502 #
503 case "$curl_cv_need_header_lber_h" in
504 yes)
505 AC_DEFINE_UNQUOTED(NEED_LBER_H, 1,
506 [Define to 1 if you need the lber.h header file even with ldap.h])
507 ;;
508 esac
509 fi
510])
511
512
513dnl CURL_CHECK_HEADER_LDAP
514dnl -------------------------------------------------
515dnl Check for compilable and valid ldap.h header
516
517AC_DEFUN([CURL_CHECK_HEADER_LDAP], [
518 AC_REQUIRE([CURL_CHECK_HEADER_LBER])dnl
Alex Deymod15eaac2016-06-28 14:49:26 -0700519 AC_CACHE_CHECK([for ldap.h], [curl_cv_header_ldap_h], [
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700520 AC_COMPILE_IFELSE([
521 AC_LANG_PROGRAM([[
522#undef inline
523#ifdef HAVE_WINDOWS_H
524#ifndef WIN32_LEAN_AND_MEAN
525#define WIN32_LEAN_AND_MEAN
526#endif
527#include <windows.h>
528#else
529#ifdef HAVE_SYS_TYPES_H
530#include <sys/types.h>
531#endif
532#endif
533#ifndef LDAP_DEPRECATED
534#define LDAP_DEPRECATED 1
535#endif
536#ifdef NEED_LBER_H
537#include <lber.h>
538#endif
539#include <ldap.h>
540 ]],[[
541 LDAP *ldp = ldap_init("dummy", LDAP_PORT);
542 int res = ldap_unbind(ldp);
543 ]])
544 ],[
Alex Deymod15eaac2016-06-28 14:49:26 -0700545 curl_cv_header_ldap_h="yes"
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700546 ],[
Alex Deymod15eaac2016-06-28 14:49:26 -0700547 curl_cv_header_ldap_h="no"
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700548 ])
549 ])
Alex Deymod15eaac2016-06-28 14:49:26 -0700550 case "$curl_cv_header_ldap_h" in
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700551 yes)
552 AC_DEFINE_UNQUOTED(HAVE_LDAP_H, 1,
553 [Define to 1 if you have the ldap.h header file.])
554 ;;
555 esac
556])
557
558
559dnl CURL_CHECK_HEADER_LDAP_SSL
560dnl -------------------------------------------------
561dnl Check for compilable and valid ldap_ssl.h header
562
563AC_DEFUN([CURL_CHECK_HEADER_LDAP_SSL], [
564 AC_REQUIRE([CURL_CHECK_HEADER_LDAP])dnl
Alex Deymod15eaac2016-06-28 14:49:26 -0700565 AC_CACHE_CHECK([for ldap_ssl.h], [curl_cv_header_ldap_ssl_h], [
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700566 AC_COMPILE_IFELSE([
567 AC_LANG_PROGRAM([[
568#undef inline
569#ifdef HAVE_WINDOWS_H
570#ifndef WIN32_LEAN_AND_MEAN
571#define WIN32_LEAN_AND_MEAN
572#endif
573#include <windows.h>
574#else
575#ifdef HAVE_SYS_TYPES_H
576#include <sys/types.h>
577#endif
578#endif
579#ifndef LDAP_DEPRECATED
580#define LDAP_DEPRECATED 1
581#endif
582#ifdef NEED_LBER_H
583#include <lber.h>
584#endif
585#ifdef HAVE_LDAP_H
586#include <ldap.h>
587#endif
588#include <ldap_ssl.h>
589 ]],[[
590 LDAP *ldp = ldapssl_init("dummy", LDAPS_PORT, 1);
591 ]])
592 ],[
Alex Deymod15eaac2016-06-28 14:49:26 -0700593 curl_cv_header_ldap_ssl_h="yes"
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700594 ],[
Alex Deymod15eaac2016-06-28 14:49:26 -0700595 curl_cv_header_ldap_ssl_h="no"
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700596 ])
597 ])
Alex Deymod15eaac2016-06-28 14:49:26 -0700598 case "$curl_cv_header_ldap_ssl_h" in
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700599 yes)
600 AC_DEFINE_UNQUOTED(HAVE_LDAP_SSL_H, 1,
601 [Define to 1 if you have the ldap_ssl.h header file.])
602 ;;
603 esac
604])
605
606
607dnl CURL_CHECK_HEADER_LDAPSSL
608dnl -------------------------------------------------
609dnl Check for compilable and valid ldapssl.h header
610
611AC_DEFUN([CURL_CHECK_HEADER_LDAPSSL], [
612 AC_REQUIRE([CURL_CHECK_HEADER_LDAP])dnl
Alex Deymod15eaac2016-06-28 14:49:26 -0700613 AC_CACHE_CHECK([for ldapssl.h], [curl_cv_header_ldapssl_h], [
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700614 AC_COMPILE_IFELSE([
615 AC_LANG_PROGRAM([[
616#undef inline
617#ifdef HAVE_WINDOWS_H
618#ifndef WIN32_LEAN_AND_MEAN
619#define WIN32_LEAN_AND_MEAN
620#endif
621#include <windows.h>
622#else
623#ifdef HAVE_SYS_TYPES_H
624#include <sys/types.h>
625#endif
626#endif
627#ifndef NULL
628#define NULL (void *)0
629#endif
630#ifndef LDAP_DEPRECATED
631#define LDAP_DEPRECATED 1
632#endif
633#ifdef NEED_LBER_H
634#include <lber.h>
635#endif
636#ifdef HAVE_LDAP_H
637#include <ldap.h>
638#endif
639#include <ldapssl.h>
640 ]],[[
641 char *cert_label = NULL;
642 LDAP *ldp = ldap_ssl_init("dummy", LDAPS_PORT, cert_label);
643 ]])
644 ],[
Alex Deymod15eaac2016-06-28 14:49:26 -0700645 curl_cv_header_ldapssl_h="yes"
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700646 ],[
Alex Deymod15eaac2016-06-28 14:49:26 -0700647 curl_cv_header_ldapssl_h="no"
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700648 ])
649 ])
Alex Deymod15eaac2016-06-28 14:49:26 -0700650 case "$curl_cv_header_ldapssl_h" in
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700651 yes)
652 AC_DEFINE_UNQUOTED(HAVE_LDAPSSL_H, 1,
653 [Define to 1 if you have the ldapssl.h header file.])
654 ;;
655 esac
656])
657
658
659dnl CURL_CHECK_LIBS_WINLDAP
660dnl -------------------------------------------------
661dnl Check for libraries needed for WINLDAP support,
662dnl and prepended to LIBS any needed libraries.
663dnl This macro can take an optional parameter with a
664dnl white space separated list of libraries to check
665dnl before the WINLDAP default ones.
666
667AC_DEFUN([CURL_CHECK_LIBS_WINLDAP], [
668 AC_REQUIRE([CURL_CHECK_HEADER_WINBER])dnl
669 #
670 AC_MSG_CHECKING([for WINLDAP libraries])
671 #
672 u_libs=""
673 #
674 ifelse($1,,,[
675 for x_lib in $1; do
676 case "$x_lib" in
677 -l*)
678 l_lib="$x_lib"
679 ;;
680 *)
681 l_lib="-l$x_lib"
682 ;;
683 esac
684 if test -z "$u_libs"; then
685 u_libs="$l_lib"
686 else
687 u_libs="$u_libs $l_lib"
688 fi
689 done
690 ])
691 #
692 curl_cv_save_LIBS="$LIBS"
693 curl_cv_ldap_LIBS="unknown"
694 #
695 for x_nlibs in '' "$u_libs" \
696 '-lwldap32' ; do
697 if test "$curl_cv_ldap_LIBS" = "unknown"; then
698 if test -z "$x_nlibs"; then
699 LIBS="$curl_cv_save_LIBS"
700 else
701 LIBS="$x_nlibs $curl_cv_save_LIBS"
702 fi
703 AC_LINK_IFELSE([
704 AC_LANG_PROGRAM([[
705#undef inline
706#ifdef HAVE_WINDOWS_H
707#ifndef WIN32_LEAN_AND_MEAN
708#define WIN32_LEAN_AND_MEAN
709#endif
710#include <windows.h>
711#ifdef HAVE_WINLDAP_H
712#include <winldap.h>
713#endif
714#ifdef HAVE_WINBER_H
715#include <winber.h>
716#endif
717#endif
718 ]],[[
719 BERVAL *bvp = NULL;
720 BerElement *bep = ber_init(bvp);
721 LDAP *ldp = ldap_init("dummy", LDAP_PORT);
722 ULONG res = ldap_unbind(ldp);
723 ber_free(bep, 1);
724 ]])
725 ],[
726 curl_cv_ldap_LIBS="$x_nlibs"
727 ])
728 fi
729 done
730 #
731 LIBS="$curl_cv_save_LIBS"
732 #
733 case X-"$curl_cv_ldap_LIBS" in
734 X-unknown)
735 AC_MSG_RESULT([cannot find WINLDAP libraries])
736 ;;
737 X-)
738 AC_MSG_RESULT([no additional lib required])
739 ;;
740 *)
741 if test -z "$curl_cv_save_LIBS"; then
742 LIBS="$curl_cv_ldap_LIBS"
743 else
744 LIBS="$curl_cv_ldap_LIBS $curl_cv_save_LIBS"
745 fi
746 AC_MSG_RESULT([$curl_cv_ldap_LIBS])
747 ;;
748 esac
749 #
750])
751
752
753dnl CURL_CHECK_LIBS_LDAP
754dnl -------------------------------------------------
755dnl Check for libraries needed for LDAP support,
756dnl and prepended to LIBS any needed libraries.
757dnl This macro can take an optional parameter with a
758dnl white space separated list of libraries to check
759dnl before the default ones.
760
761AC_DEFUN([CURL_CHECK_LIBS_LDAP], [
762 AC_REQUIRE([CURL_CHECK_HEADER_LDAP])dnl
763 #
764 AC_MSG_CHECKING([for LDAP libraries])
765 #
766 u_libs=""
767 #
768 ifelse($1,,,[
769 for x_lib in $1; do
770 case "$x_lib" in
771 -l*)
772 l_lib="$x_lib"
773 ;;
774 *)
775 l_lib="-l$x_lib"
776 ;;
777 esac
778 if test -z "$u_libs"; then
779 u_libs="$l_lib"
780 else
781 u_libs="$u_libs $l_lib"
782 fi
783 done
784 ])
785 #
786 curl_cv_save_LIBS="$LIBS"
787 curl_cv_ldap_LIBS="unknown"
788 #
789 for x_nlibs in '' "$u_libs" \
790 '-lldap' \
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700791 '-lldap -llber' \
Elliott Hughes82be86d2017-09-20 17:00:17 -0700792 '-llber -lldap' \
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700793 '-lldapssl -lldapx -lldapsdk' \
794 '-lldapsdk -lldapx -lldapssl' ; do
795 if test "$curl_cv_ldap_LIBS" = "unknown"; then
796 if test -z "$x_nlibs"; then
797 LIBS="$curl_cv_save_LIBS"
798 else
799 LIBS="$x_nlibs $curl_cv_save_LIBS"
800 fi
801 AC_LINK_IFELSE([
802 AC_LANG_PROGRAM([[
803#undef inline
804#ifdef HAVE_WINDOWS_H
805#ifndef WIN32_LEAN_AND_MEAN
806#define WIN32_LEAN_AND_MEAN
807#endif
808#include <windows.h>
809#else
810#ifdef HAVE_SYS_TYPES_H
811#include <sys/types.h>
812#endif
813#endif
814#ifndef NULL
815#define NULL (void *)0
816#endif
817#ifndef LDAP_DEPRECATED
818#define LDAP_DEPRECATED 1
819#endif
820#ifdef NEED_LBER_H
821#include <lber.h>
822#endif
823#ifdef HAVE_LDAP_H
824#include <ldap.h>
825#endif
826 ]],[[
827 BerValue *bvp = NULL;
828 BerElement *bep = ber_init(bvp);
829 LDAP *ldp = ldap_init("dummy", LDAP_PORT);
830 int res = ldap_unbind(ldp);
831 ber_free(bep, 1);
832 ]])
833 ],[
834 curl_cv_ldap_LIBS="$x_nlibs"
835 ])
836 fi
837 done
838 #
839 LIBS="$curl_cv_save_LIBS"
840 #
841 case X-"$curl_cv_ldap_LIBS" in
842 X-unknown)
843 AC_MSG_RESULT([cannot find LDAP libraries])
844 ;;
845 X-)
846 AC_MSG_RESULT([no additional lib required])
847 ;;
848 *)
849 if test -z "$curl_cv_save_LIBS"; then
850 LIBS="$curl_cv_ldap_LIBS"
851 else
852 LIBS="$curl_cv_ldap_LIBS $curl_cv_save_LIBS"
853 fi
854 AC_MSG_RESULT([$curl_cv_ldap_LIBS])
855 ;;
856 esac
857 #
858])
859
860
861dnl CURL_CHECK_HEADER_MALLOC
862dnl -------------------------------------------------
863dnl Check for compilable and valid malloc.h header,
864dnl and check if it is needed even with stdlib.h
865
866AC_DEFUN([CURL_CHECK_HEADER_MALLOC], [
Alex Deymod15eaac2016-06-28 14:49:26 -0700867 AC_CACHE_CHECK([for malloc.h], [curl_cv_header_malloc_h], [
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700868 AC_COMPILE_IFELSE([
869 AC_LANG_PROGRAM([[
870#include <malloc.h>
871 ]],[[
872 void *p = malloc(10);
873 void *q = calloc(10,10);
874 free(p);
875 free(q);
876 ]])
877 ],[
Alex Deymod15eaac2016-06-28 14:49:26 -0700878 curl_cv_header_malloc_h="yes"
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700879 ],[
Alex Deymod15eaac2016-06-28 14:49:26 -0700880 curl_cv_header_malloc_h="no"
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700881 ])
882 ])
Alex Deymod15eaac2016-06-28 14:49:26 -0700883 if test "$curl_cv_header_malloc_h" = "yes"; then
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700884 AC_DEFINE_UNQUOTED(HAVE_MALLOC_H, 1,
885 [Define to 1 if you have the malloc.h header file.])
886 #
887 AC_COMPILE_IFELSE([
888 AC_LANG_PROGRAM([[
889#include <stdlib.h>
890 ]],[[
891 void *p = malloc(10);
892 void *q = calloc(10,10);
893 free(p);
894 free(q);
895 ]])
896 ],[
897 curl_cv_need_header_malloc_h="no"
898 ],[
899 curl_cv_need_header_malloc_h="yes"
900 ])
901 #
902 case "$curl_cv_need_header_malloc_h" in
903 yes)
904 AC_DEFINE_UNQUOTED(NEED_MALLOC_H, 1,
905 [Define to 1 if you need the malloc.h header file even with stdlib.h])
906 ;;
907 esac
908 fi
909])
910
911
912dnl CURL_CHECK_HEADER_MEMORY
913dnl -------------------------------------------------
914dnl Check for compilable and valid memory.h header,
915dnl and check if it is needed even with stdlib.h for
916dnl memory related functions.
917
918AC_DEFUN([CURL_CHECK_HEADER_MEMORY], [
Alex Deymod15eaac2016-06-28 14:49:26 -0700919 AC_CACHE_CHECK([for memory.h], [curl_cv_header_memory_h], [
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700920 AC_COMPILE_IFELSE([
921 AC_LANG_PROGRAM([[
922#include <memory.h>
923 ]],[[
924 void *p = malloc(10);
925 void *q = calloc(10,10);
926 free(p);
927 free(q);
928 ]])
929 ],[
Alex Deymod15eaac2016-06-28 14:49:26 -0700930 curl_cv_header_memory_h="yes"
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700931 ],[
Alex Deymod15eaac2016-06-28 14:49:26 -0700932 curl_cv_header_memory_h="no"
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700933 ])
934 ])
Alex Deymod15eaac2016-06-28 14:49:26 -0700935 if test "$curl_cv_header_memory_h" = "yes"; then
Lucas Eckels9bd90e62012-08-06 15:07:02 -0700936 AC_DEFINE_UNQUOTED(HAVE_MEMORY_H, 1,
937 [Define to 1 if you have the memory.h header file.])
938 #
939 AC_COMPILE_IFELSE([
940 AC_LANG_PROGRAM([[
941#include <stdlib.h>
942 ]],[[
943 void *p = malloc(10);
944 void *q = calloc(10,10);
945 free(p);
946 free(q);
947 ]])
948 ],[
949 curl_cv_need_header_memory_h="no"
950 ],[
951 curl_cv_need_header_memory_h="yes"
952 ])
953 #
954 case "$curl_cv_need_header_memory_h" in
955 yes)
956 AC_DEFINE_UNQUOTED(NEED_MEMORY_H, 1,
957 [Define to 1 if you need the memory.h header file even with stdlib.h])
958 ;;
959 esac
960 fi
961])
962
963
964dnl CURL_CHECK_FUNC_GETNAMEINFO
965dnl -------------------------------------------------
966dnl Test if the getnameinfo function is available,
967dnl and check the types of five of its arguments.
968dnl If the function succeeds HAVE_GETNAMEINFO will be
969dnl defined, defining the types of the arguments in
970dnl GETNAMEINFO_TYPE_ARG1, GETNAMEINFO_TYPE_ARG2,
971dnl GETNAMEINFO_TYPE_ARG46 and GETNAMEINFO_TYPE_ARG7,
972dnl and also defining the type qualifier of first
973dnl argument in GETNAMEINFO_QUAL_ARG1.
974
975AC_DEFUN([CURL_CHECK_FUNC_GETNAMEINFO], [
976 AC_REQUIRE([CURL_CHECK_HEADER_WS2TCPIP])dnl
977 AC_CHECK_HEADERS(sys/types.h sys/socket.h netdb.h)
978 #
979 AC_MSG_CHECKING([for getnameinfo])
980 AC_LINK_IFELSE([
981 AC_LANG_FUNC_LINK_TRY([getnameinfo])
982 ],[
983 AC_MSG_RESULT([yes])
984 curl_cv_getnameinfo="yes"
985 ],[
986 AC_MSG_RESULT([no])
987 curl_cv_getnameinfo="no"
988 ])
989 #
990 if test "$curl_cv_getnameinfo" != "yes"; then
991 AC_MSG_CHECKING([deeper for getnameinfo])
992 AC_LINK_IFELSE([
993 AC_LANG_PROGRAM([[
994 ]],[[
995 getnameinfo();
996 ]])
997 ],[
998 AC_MSG_RESULT([yes])
999 curl_cv_getnameinfo="yes"
1000 ],[
1001 AC_MSG_RESULT([but still no])
1002 curl_cv_getnameinfo="no"
1003 ])
1004 fi
1005 #
1006 if test "$curl_cv_getnameinfo" != "yes"; then
1007 AC_MSG_CHECKING([deeper and deeper for getnameinfo])
1008 AC_LINK_IFELSE([
1009 AC_LANG_PROGRAM([[
1010#undef inline
1011#ifdef HAVE_WINDOWS_H
1012#ifndef WIN32_LEAN_AND_MEAN
1013#define WIN32_LEAN_AND_MEAN
1014#endif
1015#include <windows.h>
1016#ifdef HAVE_WINSOCK2_H
1017#include <winsock2.h>
1018#ifdef HAVE_WS2TCPIP_H
1019#include <ws2tcpip.h>
1020#endif
1021#endif
1022#else
1023#ifdef HAVE_SYS_TYPES_H
1024#include <sys/types.h>
1025#endif
1026#ifdef HAVE_SYS_SOCKET_H
1027#include <sys/socket.h>
1028#endif
1029#ifdef HAVE_NETDB_H
1030#include <netdb.h>
1031#endif
1032#endif
1033 ]],[[
1034 getnameinfo(0, 0, 0, 0, 0, 0, 0);
1035 ]])
1036 ],[
1037 AC_MSG_RESULT([yes])
1038 curl_cv_getnameinfo="yes"
1039 ],[
1040 AC_MSG_RESULT([but still no])
1041 curl_cv_getnameinfo="no"
1042 ])
1043 fi
1044 #
1045 if test "$curl_cv_getnameinfo" = "yes"; then
1046 AC_CACHE_CHECK([types of arguments for getnameinfo],
1047 [curl_cv_func_getnameinfo_args], [
1048 curl_cv_func_getnameinfo_args="unknown"
1049 for gni_arg1 in 'struct sockaddr *' 'const struct sockaddr *' 'void *'; do
1050 for gni_arg2 in 'socklen_t' 'size_t' 'int'; do
1051 for gni_arg46 in 'size_t' 'int' 'socklen_t' 'unsigned int' 'DWORD'; do
1052 for gni_arg7 in 'int' 'unsigned int'; do
1053 if test "$curl_cv_func_getnameinfo_args" = "unknown"; then
1054 AC_COMPILE_IFELSE([
1055 AC_LANG_PROGRAM([[
1056#undef inline
1057#ifdef HAVE_WINDOWS_H
1058#ifndef WIN32_LEAN_AND_MEAN
1059#define WIN32_LEAN_AND_MEAN
1060#endif
1061#if (!defined(_WIN32_WINNT)) || (_WIN32_WINNT < 0x0501)
1062#undef _WIN32_WINNT
1063#define _WIN32_WINNT 0x0501
1064#endif
1065#include <windows.h>
1066#ifdef HAVE_WINSOCK2_H
1067#include <winsock2.h>
1068#ifdef HAVE_WS2TCPIP_H
1069#include <ws2tcpip.h>
1070#endif
1071#endif
1072#define GNICALLCONV WSAAPI
1073#else
1074#ifdef HAVE_SYS_TYPES_H
1075#include <sys/types.h>
1076#endif
1077#ifdef HAVE_SYS_SOCKET_H
1078#include <sys/socket.h>
1079#endif
1080#ifdef HAVE_NETDB_H
1081#include <netdb.h>
1082#endif
1083#define GNICALLCONV
1084#endif
Elliott Hughes82be86d2017-09-20 17:00:17 -07001085 extern int GNICALLCONV
1086#ifdef __ANDROID__
1087__attribute__((overloadable))
1088#endif
1089 getnameinfo($gni_arg1, $gni_arg2,
Lucas Eckels9bd90e62012-08-06 15:07:02 -07001090 char *, $gni_arg46,
1091 char *, $gni_arg46,
1092 $gni_arg7);
1093 ]],[[
1094 $gni_arg2 salen=0;
1095 $gni_arg46 hostlen=0;
1096 $gni_arg46 servlen=0;
1097 $gni_arg7 flags=0;
1098 int res = getnameinfo(0, salen, 0, hostlen, 0, servlen, flags);
1099 ]])
1100 ],[
1101 curl_cv_func_getnameinfo_args="$gni_arg1,$gni_arg2,$gni_arg46,$gni_arg7"
1102 ])
1103 fi
1104 done
1105 done
1106 done
1107 done
1108 ]) # AC-CACHE-CHECK
1109 if test "$curl_cv_func_getnameinfo_args" = "unknown"; then
1110 AC_MSG_WARN([Cannot find proper types to use for getnameinfo args])
1111 AC_MSG_WARN([HAVE_GETNAMEINFO will not be defined])
1112 else
1113 gni_prev_IFS=$IFS; IFS=','
1114 set dummy `echo "$curl_cv_func_getnameinfo_args" | sed 's/\*/\*/g'`
1115 IFS=$gni_prev_IFS
1116 shift
1117 #
1118 gni_qual_type_arg1=$[1]
1119 #
1120 AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG2, $[2],
1121 [Define to the type of arg 2 for getnameinfo.])
1122 AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG46, $[3],
1123 [Define to the type of args 4 and 6 for getnameinfo.])
1124 AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG7, $[4],
1125 [Define to the type of arg 7 for getnameinfo.])
1126 #
1127 prev_sh_opts=$-
1128 #
1129 case $prev_sh_opts in
1130 *f*)
1131 ;;
1132 *)
1133 set -f
1134 ;;
1135 esac
1136 #
1137 case "$gni_qual_type_arg1" in
1138 const*)
1139 gni_qual_arg1=const
1140 gni_type_arg1=`echo $gni_qual_type_arg1 | sed 's/^const //'`
1141 ;;
1142 *)
1143 gni_qual_arg1=
1144 gni_type_arg1=$gni_qual_type_arg1
1145 ;;
1146 esac
1147 #
1148 AC_DEFINE_UNQUOTED(GETNAMEINFO_QUAL_ARG1, $gni_qual_arg1,
1149 [Define to the type qualifier of arg 1 for getnameinfo.])
1150 AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG1, $gni_type_arg1,
1151 [Define to the type of arg 1 for getnameinfo.])
1152 #
1153 case $prev_sh_opts in
1154 *f*)
1155 ;;
1156 *)
1157 set +f
1158 ;;
1159 esac
1160 #
1161 AC_DEFINE_UNQUOTED(HAVE_GETNAMEINFO, 1,
1162 [Define to 1 if you have the getnameinfo function.])
Alex Deymod15eaac2016-06-28 14:49:26 -07001163 curl_cv_func_getnameinfo="yes"
Lucas Eckels9bd90e62012-08-06 15:07:02 -07001164 fi
1165 fi
1166])
1167
1168
1169dnl TYPE_SOCKADDR_STORAGE
1170dnl -------------------------------------------------
1171dnl Check for struct sockaddr_storage. Most IPv6-enabled
1172dnl hosts have it, but AIX 4.3 is one known exception.
1173
1174AC_DEFUN([TYPE_SOCKADDR_STORAGE],
1175[
1176 AC_CHECK_TYPE([struct sockaddr_storage],
1177 AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE, 1,
1178 [if struct sockaddr_storage is defined]), ,
1179 [
1180#undef inline
1181#ifdef HAVE_WINDOWS_H
1182#ifndef WIN32_LEAN_AND_MEAN
1183#define WIN32_LEAN_AND_MEAN
1184#endif
1185#include <windows.h>
1186#ifdef HAVE_WINSOCK2_H
1187#include <winsock2.h>
1188#endif
1189#else
1190#ifdef HAVE_SYS_TYPES_H
1191#include <sys/types.h>
1192#endif
1193#ifdef HAVE_SYS_SOCKET_H
1194#include <sys/socket.h>
1195#endif
1196#ifdef HAVE_NETINET_IN_H
1197#include <netinet/in.h>
1198#endif
1199#ifdef HAVE_ARPA_INET_H
1200#include <arpa/inet.h>
1201#endif
1202#endif
1203 ])
1204])
1205
1206
1207dnl CURL_CHECK_NI_WITHSCOPEID
1208dnl -------------------------------------------------
1209dnl Check for working NI_WITHSCOPEID in getnameinfo()
1210
1211AC_DEFUN([CURL_CHECK_NI_WITHSCOPEID], [
1212 AC_REQUIRE([CURL_CHECK_FUNC_GETNAMEINFO])dnl
1213 AC_REQUIRE([TYPE_SOCKADDR_STORAGE])dnl
1214 AC_CHECK_HEADERS(stdio.h sys/types.h sys/socket.h \
1215 netdb.h netinet/in.h arpa/inet.h)
1216 #
1217 AC_CACHE_CHECK([for working NI_WITHSCOPEID],
Alex Deymod15eaac2016-06-28 14:49:26 -07001218 [curl_cv_working_ni_withscopeid], [
Lucas Eckels9bd90e62012-08-06 15:07:02 -07001219 AC_RUN_IFELSE([
1220 AC_LANG_PROGRAM([[
1221#ifdef HAVE_STDLIB_H
1222#include <stdlib.h>
1223#endif
1224#ifdef HAVE_STDIO_H
1225#include <stdio.h>
1226#endif
1227#ifdef HAVE_SYS_TYPES_H
1228#include <sys/types.h>
1229#endif
1230#ifdef HAVE_SYS_SOCKET_H
1231#include <sys/socket.h>
1232#endif
1233#ifdef HAVE_NETDB_H
1234#include <netdb.h>
1235#endif
1236#ifdef HAVE_NETINET_IN_H
1237#include <netinet/in.h>
1238#endif
1239#ifdef HAVE_ARPA_INET_H
1240#include <arpa/inet.h>
1241#endif
1242 ]],[[
1243#if defined(NI_WITHSCOPEID) && defined(HAVE_GETNAMEINFO)
1244#ifdef HAVE_STRUCT_SOCKADDR_STORAGE
1245 struct sockaddr_storage sa;
1246#else
1247 unsigned char sa[256];
1248#endif
1249 char hostbuf[NI_MAXHOST];
1250 int rc;
1251 GETNAMEINFO_TYPE_ARG2 salen = (GETNAMEINFO_TYPE_ARG2)sizeof(sa);
1252 GETNAMEINFO_TYPE_ARG46 hostlen = (GETNAMEINFO_TYPE_ARG46)sizeof(hostbuf);
1253 GETNAMEINFO_TYPE_ARG7 flags = NI_NUMERICHOST | NI_NUMERICSERV | NI_WITHSCOPEID;
1254 int fd = socket(AF_INET6, SOCK_STREAM, 0);
1255 if(fd < 0) {
1256 perror("socket()");
1257 return 1; /* Error creating socket */
1258 }
1259 rc = getsockname(fd, (GETNAMEINFO_TYPE_ARG1)&sa, &salen);
1260 if(rc) {
1261 perror("getsockname()");
1262 return 2; /* Error retrieving socket name */
1263 }
1264 rc = getnameinfo((GETNAMEINFO_TYPE_ARG1)&sa, salen, hostbuf, hostlen, NULL, 0, flags);
1265 if(rc) {
1266 printf("rc = %s\n", gai_strerror(rc));
1267 return 3; /* Error translating socket address */
1268 }
1269 return 0; /* Ok, NI_WITHSCOPEID works */
1270#else
1271 return 4; /* Error, NI_WITHSCOPEID not defined or no getnameinfo() */
1272#endif
1273 ]]) # AC-LANG-PROGRAM
1274 ],[
1275 # Exit code == 0. Program worked.
Alex Deymod15eaac2016-06-28 14:49:26 -07001276 curl_cv_working_ni_withscopeid="yes"
Lucas Eckels9bd90e62012-08-06 15:07:02 -07001277 ],[
1278 # Exit code != 0. Program failed.
Alex Deymod15eaac2016-06-28 14:49:26 -07001279 curl_cv_working_ni_withscopeid="no"
Lucas Eckels9bd90e62012-08-06 15:07:02 -07001280 ],[
1281 # Program is not run when cross-compiling. So we assume
1282 # NI_WITHSCOPEID will work if we are able to compile it.
1283 AC_COMPILE_IFELSE([
1284 AC_LANG_PROGRAM([[
1285#include <sys/types.h>
1286#include <sys/socket.h>
1287#include <netdb.h>
1288 ]],[[
1289 unsigned int dummy= NI_NUMERICHOST | NI_NUMERICSERV | NI_WITHSCOPEID;
1290 ]])
1291 ],[
Alex Deymod15eaac2016-06-28 14:49:26 -07001292 curl_cv_working_ni_withscopeid="yes"
Lucas Eckels9bd90e62012-08-06 15:07:02 -07001293 ],[
Alex Deymod15eaac2016-06-28 14:49:26 -07001294 curl_cv_working_ni_withscopeid="no"
Lucas Eckels9bd90e62012-08-06 15:07:02 -07001295 ]) # AC-COMPILE-IFELSE
1296 ]) # AC-RUN-IFELSE
1297 ]) # AC-CACHE-CHECK
Alex Deymod15eaac2016-06-28 14:49:26 -07001298 case "$curl_cv_working_ni_withscopeid" in
Lucas Eckels9bd90e62012-08-06 15:07:02 -07001299 yes)
1300 AC_DEFINE(HAVE_NI_WITHSCOPEID, 1,
1301 [Define to 1 if NI_WITHSCOPEID exists and works.])
1302 ;;
1303 esac
1304])
1305
1306
1307dnl CURL_CHECK_FUNC_RECV
1308dnl -------------------------------------------------
1309dnl Test if the socket recv() function is available,
1310dnl and check its return type and the types of its
1311dnl arguments. If the function succeeds HAVE_RECV
1312dnl will be defined, defining the types of the arguments
1313dnl in RECV_TYPE_ARG1, RECV_TYPE_ARG2, RECV_TYPE_ARG3
1314dnl and RECV_TYPE_ARG4, defining the type of the function
1315dnl return value in RECV_TYPE_RETV.
1316
1317AC_DEFUN([CURL_CHECK_FUNC_RECV], [
1318 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl
1319 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
1320 AC_CHECK_HEADERS(sys/types.h sys/socket.h)
1321 #
1322 AC_MSG_CHECKING([for recv])
1323 AC_LINK_IFELSE([
1324 AC_LANG_PROGRAM([[
1325#undef inline
1326#ifdef HAVE_WINDOWS_H
1327#ifndef WIN32_LEAN_AND_MEAN
1328#define WIN32_LEAN_AND_MEAN
1329#endif
1330#include <windows.h>
1331#ifdef HAVE_WINSOCK2_H
1332#include <winsock2.h>
1333#else
1334#ifdef HAVE_WINSOCK_H
1335#include <winsock.h>
1336#endif
1337#endif
1338#else
1339#ifdef HAVE_SYS_TYPES_H
1340#include <sys/types.h>
1341#endif
1342#ifdef HAVE_SYS_SOCKET_H
1343#include <sys/socket.h>
1344#endif
1345#endif
1346 ]],[[
1347 recv(0, 0, 0, 0);
1348 ]])
1349 ],[
1350 AC_MSG_RESULT([yes])
1351 curl_cv_recv="yes"
1352 ],[
1353 AC_MSG_RESULT([no])
1354 curl_cv_recv="no"
1355 ])
1356 #
1357 if test "$curl_cv_recv" = "yes"; then
1358 AC_CACHE_CHECK([types of args and return type for recv],
1359 [curl_cv_func_recv_args], [
1360 curl_cv_func_recv_args="unknown"
1361 for recv_retv in 'int' 'ssize_t'; do
1362 for recv_arg1 in 'int' 'ssize_t' 'SOCKET'; do
1363 for recv_arg2 in 'char *' 'void *'; do
1364 for recv_arg3 in 'size_t' 'int' 'socklen_t' 'unsigned int'; do
1365 for recv_arg4 in 'int' 'unsigned int'; do
1366 if test "$curl_cv_func_recv_args" = "unknown"; then
1367 AC_COMPILE_IFELSE([
1368 AC_LANG_PROGRAM([[
1369#undef inline
1370#ifdef HAVE_WINDOWS_H
1371#ifndef WIN32_LEAN_AND_MEAN
1372#define WIN32_LEAN_AND_MEAN
1373#endif
1374#include <windows.h>
1375#ifdef HAVE_WINSOCK2_H
1376#include <winsock2.h>
1377#else
1378#ifdef HAVE_WINSOCK_H
1379#include <winsock.h>
1380#endif
1381#endif
1382#define RECVCALLCONV PASCAL
1383#else
1384#ifdef HAVE_SYS_TYPES_H
1385#include <sys/types.h>
1386#endif
1387#ifdef HAVE_SYS_SOCKET_H
1388#include <sys/socket.h>
1389#endif
1390#define RECVCALLCONV
1391#endif
1392 extern $recv_retv RECVCALLCONV
Elliott Hughes82be86d2017-09-20 17:00:17 -07001393#ifdef __ANDROID__
1394__attribute__((overloadable))
1395#endif
Lucas Eckels9bd90e62012-08-06 15:07:02 -07001396 recv($recv_arg1, $recv_arg2, $recv_arg3, $recv_arg4);
1397 ]],[[
1398 $recv_arg1 s=0;
1399 $recv_arg2 buf=0;
1400 $recv_arg3 len=0;
1401 $recv_arg4 flags=0;
1402 $recv_retv res = recv(s, buf, len, flags);
1403 ]])
1404 ],[
1405 curl_cv_func_recv_args="$recv_arg1,$recv_arg2,$recv_arg3,$recv_arg4,$recv_retv"
1406 ])
1407 fi
1408 done
1409 done
1410 done
1411 done
1412 done
1413 ]) # AC-CACHE-CHECK
1414 if test "$curl_cv_func_recv_args" = "unknown"; then
1415 AC_MSG_ERROR([Cannot find proper types to use for recv args])
1416 else
1417 recv_prev_IFS=$IFS; IFS=','
1418 set dummy `echo "$curl_cv_func_recv_args" | sed 's/\*/\*/g'`
1419 IFS=$recv_prev_IFS
1420 shift
1421 #
1422 AC_DEFINE_UNQUOTED(RECV_TYPE_ARG1, $[1],
1423 [Define to the type of arg 1 for recv.])
1424 AC_DEFINE_UNQUOTED(RECV_TYPE_ARG2, $[2],
1425 [Define to the type of arg 2 for recv.])
1426 AC_DEFINE_UNQUOTED(RECV_TYPE_ARG3, $[3],
1427 [Define to the type of arg 3 for recv.])
1428 AC_DEFINE_UNQUOTED(RECV_TYPE_ARG4, $[4],
1429 [Define to the type of arg 4 for recv.])
1430 AC_DEFINE_UNQUOTED(RECV_TYPE_RETV, $[5],
1431 [Define to the function return type for recv.])
1432 #
1433 AC_DEFINE_UNQUOTED(HAVE_RECV, 1,
1434 [Define to 1 if you have the recv function.])
Alex Deymod15eaac2016-06-28 14:49:26 -07001435 curl_cv_func_recv="yes"
Lucas Eckels9bd90e62012-08-06 15:07:02 -07001436 fi
1437 else
1438 AC_MSG_ERROR([Unable to link function recv])
1439 fi
1440])
1441
1442
1443dnl CURL_CHECK_FUNC_SEND
1444dnl -------------------------------------------------
1445dnl Test if the socket send() function is available,
1446dnl and check its return type and the types of its
1447dnl arguments. If the function succeeds HAVE_SEND
1448dnl will be defined, defining the types of the arguments
1449dnl in SEND_TYPE_ARG1, SEND_TYPE_ARG2, SEND_TYPE_ARG3
1450dnl and SEND_TYPE_ARG4, defining the type of the function
1451dnl return value in SEND_TYPE_RETV, and also defining the
1452dnl type qualifier of second argument in SEND_QUAL_ARG2.
1453
1454AC_DEFUN([CURL_CHECK_FUNC_SEND], [
1455 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl
1456 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
1457 AC_CHECK_HEADERS(sys/types.h sys/socket.h)
1458 #
1459 AC_MSG_CHECKING([for send])
1460 AC_LINK_IFELSE([
1461 AC_LANG_PROGRAM([[
1462#undef inline
1463#ifdef HAVE_WINDOWS_H
1464#ifndef WIN32_LEAN_AND_MEAN
1465#define WIN32_LEAN_AND_MEAN
1466#endif
1467#include <windows.h>
1468#ifdef HAVE_WINSOCK2_H
1469#include <winsock2.h>
1470#else
1471#ifdef HAVE_WINSOCK_H
1472#include <winsock.h>
1473#endif
1474#endif
1475#else
1476#ifdef HAVE_SYS_TYPES_H
1477#include <sys/types.h>
1478#endif
1479#ifdef HAVE_SYS_SOCKET_H
1480#include <sys/socket.h>
1481#endif
1482#endif
1483 ]],[[
1484 send(0, 0, 0, 0);
1485 ]])
1486 ],[
1487 AC_MSG_RESULT([yes])
1488 curl_cv_send="yes"
1489 ],[
1490 AC_MSG_RESULT([no])
1491 curl_cv_send="no"
1492 ])
1493 #
1494 if test "$curl_cv_send" = "yes"; then
1495 AC_CACHE_CHECK([types of args and return type for send],
1496 [curl_cv_func_send_args], [
1497 curl_cv_func_send_args="unknown"
1498 for send_retv in 'int' 'ssize_t'; do
1499 for send_arg1 in 'int' 'ssize_t' 'SOCKET'; do
1500 for send_arg2 in 'char *' 'void *' 'const char *' 'const void *'; do
1501 for send_arg3 in 'size_t' 'int' 'socklen_t' 'unsigned int'; do
1502 for send_arg4 in 'int' 'unsigned int'; do
1503 if test "$curl_cv_func_send_args" = "unknown"; then
1504 AC_COMPILE_IFELSE([
1505 AC_LANG_PROGRAM([[
1506#undef inline
1507#ifdef HAVE_WINDOWS_H
1508#ifndef WIN32_LEAN_AND_MEAN
1509#define WIN32_LEAN_AND_MEAN
1510#endif
1511#include <windows.h>
1512#ifdef HAVE_WINSOCK2_H
1513#include <winsock2.h>
1514#else
1515#ifdef HAVE_WINSOCK_H
1516#include <winsock.h>
1517#endif
1518#endif
1519#define SENDCALLCONV PASCAL
1520#else
1521#ifdef HAVE_SYS_TYPES_H
1522#include <sys/types.h>
1523#endif
1524#ifdef HAVE_SYS_SOCKET_H
1525#include <sys/socket.h>
1526#endif
1527#define SENDCALLCONV
1528#endif
1529 extern $send_retv SENDCALLCONV
Elliott Hughes82be86d2017-09-20 17:00:17 -07001530#ifdef __ANDROID__
1531__attribute__((overloadable))
1532#endif
Lucas Eckels9bd90e62012-08-06 15:07:02 -07001533 send($send_arg1, $send_arg2, $send_arg3, $send_arg4);
1534 ]],[[
1535 $send_arg1 s=0;
1536 $send_arg3 len=0;
1537 $send_arg4 flags=0;
1538 $send_retv res = send(s, 0, len, flags);
1539 ]])
1540 ],[
1541 curl_cv_func_send_args="$send_arg1,$send_arg2,$send_arg3,$send_arg4,$send_retv"
1542 ])
1543 fi
1544 done
1545 done
1546 done
1547 done
1548 done
1549 ]) # AC-CACHE-CHECK
1550 if test "$curl_cv_func_send_args" = "unknown"; then
1551 AC_MSG_ERROR([Cannot find proper types to use for send args])
1552 else
1553 send_prev_IFS=$IFS; IFS=','
1554 set dummy `echo "$curl_cv_func_send_args" | sed 's/\*/\*/g'`
1555 IFS=$send_prev_IFS
1556 shift
1557 #
1558 send_qual_type_arg2=$[2]
1559 #
1560 AC_DEFINE_UNQUOTED(SEND_TYPE_ARG1, $[1],
1561 [Define to the type of arg 1 for send.])
1562 AC_DEFINE_UNQUOTED(SEND_TYPE_ARG3, $[3],
1563 [Define to the type of arg 3 for send.])
1564 AC_DEFINE_UNQUOTED(SEND_TYPE_ARG4, $[4],
1565 [Define to the type of arg 4 for send.])
1566 AC_DEFINE_UNQUOTED(SEND_TYPE_RETV, $[5],
1567 [Define to the function return type for send.])
1568 #
1569 prev_sh_opts=$-
1570 #
1571 case $prev_sh_opts in
1572 *f*)
1573 ;;
1574 *)
1575 set -f
1576 ;;
1577 esac
1578 #
1579 case "$send_qual_type_arg2" in
1580 const*)
1581 send_qual_arg2=const
1582 send_type_arg2=`echo $send_qual_type_arg2 | sed 's/^const //'`
1583 ;;
1584 *)
1585 send_qual_arg2=
1586 send_type_arg2=$send_qual_type_arg2
1587 ;;
1588 esac
1589 #
1590 AC_DEFINE_UNQUOTED(SEND_QUAL_ARG2, $send_qual_arg2,
1591 [Define to the type qualifier of arg 2 for send.])
1592 AC_DEFINE_UNQUOTED(SEND_TYPE_ARG2, $send_type_arg2,
1593 [Define to the type of arg 2 for send.])
1594 #
1595 case $prev_sh_opts in
1596 *f*)
1597 ;;
1598 *)
1599 set +f
1600 ;;
1601 esac
1602 #
1603 AC_DEFINE_UNQUOTED(HAVE_SEND, 1,
1604 [Define to 1 if you have the send function.])
Alex Deymod15eaac2016-06-28 14:49:26 -07001605 curl_cv_func_send="yes"
Lucas Eckels9bd90e62012-08-06 15:07:02 -07001606 fi
1607 else
1608 AC_MSG_ERROR([Unable to link function send])
1609 fi
1610])
1611
Lucas Eckels9bd90e62012-08-06 15:07:02 -07001612dnl CURL_CHECK_MSG_NOSIGNAL
1613dnl -------------------------------------------------
1614dnl Check for MSG_NOSIGNAL
1615
1616AC_DEFUN([CURL_CHECK_MSG_NOSIGNAL], [
1617 AC_CHECK_HEADERS(sys/types.h sys/socket.h)
Alex Deymod15eaac2016-06-28 14:49:26 -07001618 AC_CACHE_CHECK([for MSG_NOSIGNAL], [curl_cv_msg_nosignal], [
Lucas Eckels9bd90e62012-08-06 15:07:02 -07001619 AC_COMPILE_IFELSE([
1620 AC_LANG_PROGRAM([[
1621#undef inline
1622#ifdef HAVE_WINDOWS_H
1623#ifndef WIN32_LEAN_AND_MEAN
1624#define WIN32_LEAN_AND_MEAN
1625#endif
1626#include <windows.h>
1627#ifdef HAVE_WINSOCK2_H
1628#include <winsock2.h>
1629#else
1630#ifdef HAVE_WINSOCK_H
1631#include <winsock.h>
1632#endif
1633#endif
1634#else
1635#ifdef HAVE_SYS_TYPES_H
1636#include <sys/types.h>
1637#endif
1638#ifdef HAVE_SYS_SOCKET_H
1639#include <sys/socket.h>
1640#endif
1641#endif
1642 ]],[[
1643 int flag=MSG_NOSIGNAL;
1644 ]])
1645 ],[
Alex Deymod15eaac2016-06-28 14:49:26 -07001646 curl_cv_msg_nosignal="yes"
Lucas Eckels9bd90e62012-08-06 15:07:02 -07001647 ],[
Alex Deymod15eaac2016-06-28 14:49:26 -07001648 curl_cv_msg_nosignal="no"
Lucas Eckels9bd90e62012-08-06 15:07:02 -07001649 ])
1650 ])
Alex Deymod15eaac2016-06-28 14:49:26 -07001651 case "$curl_cv_msg_nosignal" in
Lucas Eckels9bd90e62012-08-06 15:07:02 -07001652 yes)
1653 AC_DEFINE_UNQUOTED(HAVE_MSG_NOSIGNAL, 1,
1654 [Define to 1 if you have the MSG_NOSIGNAL flag.])
1655 ;;
1656 esac
1657])
1658
1659
1660dnl CURL_CHECK_STRUCT_TIMEVAL
1661dnl -------------------------------------------------
1662dnl Check for timeval struct
1663
1664AC_DEFUN([CURL_CHECK_STRUCT_TIMEVAL], [
1665 AC_REQUIRE([AC_HEADER_TIME])dnl
1666 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl
1667 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
1668 AC_CHECK_HEADERS(sys/types.h sys/time.h time.h sys/socket.h)
Alex Deymod15eaac2016-06-28 14:49:26 -07001669 AC_CACHE_CHECK([for struct timeval], [curl_cv_struct_timeval], [
Lucas Eckels9bd90e62012-08-06 15:07:02 -07001670 AC_COMPILE_IFELSE([
1671 AC_LANG_PROGRAM([[
1672#undef inline
1673#ifdef HAVE_WINDOWS_H
1674#ifndef WIN32_LEAN_AND_MEAN
1675#define WIN32_LEAN_AND_MEAN
1676#endif
1677#include <windows.h>
1678#ifdef HAVE_WINSOCK2_H
1679#include <winsock2.h>
1680#else
1681#ifdef HAVE_WINSOCK_H
1682#include <winsock.h>
1683#endif
1684#endif
1685#endif
1686#ifdef HAVE_SYS_TYPES_H
1687#include <sys/types.h>
1688#endif
1689#ifdef HAVE_SYS_TIME_H
1690#include <sys/time.h>
1691#ifdef TIME_WITH_SYS_TIME
1692#include <time.h>
1693#endif
1694#else
1695#ifdef HAVE_TIME_H
1696#include <time.h>
1697#endif
1698#endif
1699#ifdef HAVE_SYS_SOCKET_H
1700#include <sys/socket.h>
1701#endif
1702 ]],[[
1703 struct timeval ts;
1704 ts.tv_sec = 0;
1705 ts.tv_usec = 0;
1706 ]])
1707 ],[
Alex Deymod15eaac2016-06-28 14:49:26 -07001708 curl_cv_struct_timeval="yes"
Lucas Eckels9bd90e62012-08-06 15:07:02 -07001709 ],[
Alex Deymod15eaac2016-06-28 14:49:26 -07001710 curl_cv_struct_timeval="no"
Lucas Eckels9bd90e62012-08-06 15:07:02 -07001711 ])
1712 ])
Alex Deymod15eaac2016-06-28 14:49:26 -07001713 case "$curl_cv_struct_timeval" in
Lucas Eckels9bd90e62012-08-06 15:07:02 -07001714 yes)
1715 AC_DEFINE_UNQUOTED(HAVE_STRUCT_TIMEVAL, 1,
1716 [Define to 1 if you have the timeval struct.])
1717 ;;
1718 esac
1719])
1720
1721
1722dnl TYPE_SIG_ATOMIC_T
1723dnl -------------------------------------------------
1724dnl Check if the sig_atomic_t type is available, and
1725dnl verify if it is already defined as volatile.
1726
1727AC_DEFUN([TYPE_SIG_ATOMIC_T], [
1728 AC_CHECK_HEADERS(signal.h)
1729 AC_CHECK_TYPE([sig_atomic_t],[
1730 AC_DEFINE(HAVE_SIG_ATOMIC_T, 1,
1731 [Define to 1 if sig_atomic_t is an available typedef.])
1732 ], ,[
1733#ifdef HAVE_SIGNAL_H
1734#include <signal.h>
1735#endif
1736 ])
1737 case "$ac_cv_type_sig_atomic_t" in
1738 yes)
1739 #
1740 AC_MSG_CHECKING([if sig_atomic_t is already defined as volatile])
1741 AC_LINK_IFELSE([
1742 AC_LANG_PROGRAM([[
1743#ifdef HAVE_SIGNAL_H
1744#include <signal.h>
1745#endif
1746 ]],[[
1747 static volatile sig_atomic_t dummy = 0;
1748 ]])
1749 ],[
1750 AC_MSG_RESULT([no])
Alex Deymod15eaac2016-06-28 14:49:26 -07001751 curl_cv_sig_atomic_t_volatile="no"
Lucas Eckels9bd90e62012-08-06 15:07:02 -07001752 ],[
1753 AC_MSG_RESULT([yes])
Alex Deymod15eaac2016-06-28 14:49:26 -07001754 curl_cv_sig_atomic_t_volatile="yes"
Lucas Eckels9bd90e62012-08-06 15:07:02 -07001755 ])
1756 #
Alex Deymod15eaac2016-06-28 14:49:26 -07001757 if test "$curl_cv_sig_atomic_t_volatile" = "yes"; then
Lucas Eckels9bd90e62012-08-06 15:07:02 -07001758 AC_DEFINE(HAVE_SIG_ATOMIC_T_VOLATILE, 1,
1759 [Define to 1 if sig_atomic_t is already defined as volatile.])
1760 fi
1761 ;;
1762 esac
1763])
1764
1765
1766dnl TYPE_IN_ADDR_T
1767dnl -------------------------------------------------
1768dnl Check for in_addr_t: it is used to receive the return code of inet_addr()
1769dnl and a few other things.
1770
1771AC_DEFUN([TYPE_IN_ADDR_T], [
1772 AC_CHECK_TYPE([in_addr_t], ,[
1773 dnl in_addr_t not available
1774 AC_CACHE_CHECK([for in_addr_t equivalent],
1775 [curl_cv_in_addr_t_equiv], [
1776 curl_cv_in_addr_t_equiv="unknown"
1777 for t in "unsigned long" int size_t unsigned long; do
1778 if test "$curl_cv_in_addr_t_equiv" = "unknown"; then
1779 AC_LINK_IFELSE([
1780 AC_LANG_PROGRAM([[
1781#undef inline
1782#ifdef HAVE_WINDOWS_H
1783#ifndef WIN32_LEAN_AND_MEAN
1784#define WIN32_LEAN_AND_MEAN
1785#endif
1786#include <windows.h>
1787#ifdef HAVE_WINSOCK2_H
1788#include <winsock2.h>
1789#else
1790#ifdef HAVE_WINSOCK_H
1791#include <winsock.h>
1792#endif
1793#endif
1794#else
1795#ifdef HAVE_SYS_TYPES_H
1796#include <sys/types.h>
1797#endif
1798#ifdef HAVE_SYS_SOCKET_H
1799#include <sys/socket.h>
1800#endif
1801#ifdef HAVE_NETINET_IN_H
1802#include <netinet/in.h>
1803#endif
1804#ifdef HAVE_ARPA_INET_H
1805#include <arpa/inet.h>
1806#endif
1807#endif
1808 ]],[[
1809 $t data = inet_addr ("1.2.3.4");
1810 ]])
1811 ],[
1812 curl_cv_in_addr_t_equiv="$t"
1813 ])
1814 fi
1815 done
1816 ])
1817 case "$curl_cv_in_addr_t_equiv" in
1818 unknown)
1819 AC_MSG_ERROR([Cannot find a type to use in place of in_addr_t])
1820 ;;
1821 *)
1822 AC_DEFINE_UNQUOTED(in_addr_t, $curl_cv_in_addr_t_equiv,
1823 [Type to use in place of in_addr_t when system does not provide it.])
1824 ;;
1825 esac
1826 ],[
1827#undef inline
1828#ifdef HAVE_WINDOWS_H
1829#ifndef WIN32_LEAN_AND_MEAN
1830#define WIN32_LEAN_AND_MEAN
1831#endif
1832#include <windows.h>
1833#ifdef HAVE_WINSOCK2_H
1834#include <winsock2.h>
1835#else
1836#ifdef HAVE_WINSOCK_H
1837#include <winsock.h>
1838#endif
1839#endif
1840#else
1841#ifdef HAVE_SYS_TYPES_H
1842#include <sys/types.h>
1843#endif
1844#ifdef HAVE_SYS_SOCKET_H
1845#include <sys/socket.h>
1846#endif
1847#ifdef HAVE_NETINET_IN_H
1848#include <netinet/in.h>
1849#endif
1850#ifdef HAVE_ARPA_INET_H
1851#include <arpa/inet.h>
1852#endif
1853#endif
1854 ])
1855])
1856
1857
1858dnl CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC
1859dnl -------------------------------------------------
1860dnl Check if monotonic clock_gettime is available.
1861
1862AC_DEFUN([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC], [
1863 AC_REQUIRE([AC_HEADER_TIME])dnl
1864 AC_CHECK_HEADERS(sys/types.h sys/time.h time.h)
1865 AC_MSG_CHECKING([for monotonic clock_gettime])
Alex Deymod15eaac2016-06-28 14:49:26 -07001866 #
Elliott Hughescee03382017-06-23 12:17:18 -07001867 if test "x$dontwant_rt" = "xno" ; then
Alex Deymod15eaac2016-06-28 14:49:26 -07001868 AC_COMPILE_IFELSE([
1869 AC_LANG_PROGRAM([[
Lucas Eckels9bd90e62012-08-06 15:07:02 -07001870#ifdef HAVE_SYS_TYPES_H
1871#include <sys/types.h>
1872#endif
1873#ifdef HAVE_SYS_TIME_H
1874#include <sys/time.h>
1875#ifdef TIME_WITH_SYS_TIME
1876#include <time.h>
1877#endif
1878#else
1879#ifdef HAVE_TIME_H
1880#include <time.h>
1881#endif
1882#endif
Alex Deymod15eaac2016-06-28 14:49:26 -07001883 ]],[[
1884 struct timespec ts;
1885 (void)clock_gettime(CLOCK_MONOTONIC, &ts);
1886 ]])
1887 ],[
1888 AC_MSG_RESULT([yes])
1889 curl_func_clock_gettime="yes"
1890 ],[
1891 AC_MSG_RESULT([no])
1892 curl_func_clock_gettime="no"
1893 ])
1894 fi
Lucas Eckels9bd90e62012-08-06 15:07:02 -07001895 dnl Definition of HAVE_CLOCK_GETTIME_MONOTONIC is intentionally postponed
1896 dnl until library linking and run-time checks for clock_gettime succeed.
1897])
1898
1899
1900dnl CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC
1901dnl -------------------------------------------------
1902dnl If monotonic clock_gettime is available then,
1903dnl check and prepended to LIBS any needed libraries.
1904
1905AC_DEFUN([CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC], [
1906 AC_REQUIRE([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC])dnl
1907 #
Alex Deymod15eaac2016-06-28 14:49:26 -07001908 if test "$curl_func_clock_gettime" = "yes"; then
Lucas Eckels9bd90e62012-08-06 15:07:02 -07001909 #
1910 AC_MSG_CHECKING([for clock_gettime in libraries])
1911 #
1912 curl_cv_save_LIBS="$LIBS"
1913 curl_cv_gclk_LIBS="unknown"
1914 #
1915 for x_xlibs in '' '-lrt' '-lposix4' ; do
1916 if test "$curl_cv_gclk_LIBS" = "unknown"; then
1917 if test -z "$x_xlibs"; then
1918 LIBS="$curl_cv_save_LIBS"
1919 else
1920 LIBS="$x_xlibs $curl_cv_save_LIBS"
1921 fi
1922 AC_LINK_IFELSE([
1923 AC_LANG_PROGRAM([[
1924#ifdef HAVE_SYS_TYPES_H
1925#include <sys/types.h>
1926#endif
1927#ifdef HAVE_SYS_TIME_H
1928#include <sys/time.h>
1929#ifdef TIME_WITH_SYS_TIME
1930#include <time.h>
1931#endif
1932#else
1933#ifdef HAVE_TIME_H
1934#include <time.h>
1935#endif
1936#endif
1937 ]],[[
1938 struct timespec ts;
1939 (void)clock_gettime(CLOCK_MONOTONIC, &ts);
1940 ]])
1941 ],[
1942 curl_cv_gclk_LIBS="$x_xlibs"
1943 ])
1944 fi
1945 done
1946 #
1947 LIBS="$curl_cv_save_LIBS"
1948 #
1949 case X-"$curl_cv_gclk_LIBS" in
1950 X-unknown)
1951 AC_MSG_RESULT([cannot find clock_gettime])
1952 AC_MSG_WARN([HAVE_CLOCK_GETTIME_MONOTONIC will not be defined])
Alex Deymod15eaac2016-06-28 14:49:26 -07001953 curl_func_clock_gettime="no"
Lucas Eckels9bd90e62012-08-06 15:07:02 -07001954 ;;
1955 X-)
1956 AC_MSG_RESULT([no additional lib required])
Alex Deymod15eaac2016-06-28 14:49:26 -07001957 curl_func_clock_gettime="yes"
Lucas Eckels9bd90e62012-08-06 15:07:02 -07001958 ;;
1959 *)
1960 if test -z "$curl_cv_save_LIBS"; then
1961 LIBS="$curl_cv_gclk_LIBS"
1962 else
1963 LIBS="$curl_cv_gclk_LIBS $curl_cv_save_LIBS"
1964 fi
Lucas Eckels9bd90e62012-08-06 15:07:02 -07001965 AC_MSG_RESULT([$curl_cv_gclk_LIBS])
Alex Deymod15eaac2016-06-28 14:49:26 -07001966 curl_func_clock_gettime="yes"
Lucas Eckels9bd90e62012-08-06 15:07:02 -07001967 ;;
1968 esac
1969 #
1970 dnl only do runtime verification when not cross-compiling
1971 if test "x$cross_compiling" != "xyes" &&
Alex Deymod15eaac2016-06-28 14:49:26 -07001972 test "$curl_func_clock_gettime" = "yes"; then
Lucas Eckels9bd90e62012-08-06 15:07:02 -07001973 AC_MSG_CHECKING([if monotonic clock_gettime works])
1974 AC_RUN_IFELSE([
1975 AC_LANG_PROGRAM([[
1976#ifdef HAVE_STDLIB_H
1977#include <stdlib.h>
1978#endif
1979#ifdef HAVE_SYS_TYPES_H
1980#include <sys/types.h>
1981#endif
1982#ifdef HAVE_SYS_TIME_H
1983#include <sys/time.h>
1984#ifdef TIME_WITH_SYS_TIME
1985#include <time.h>
1986#endif
1987#else
1988#ifdef HAVE_TIME_H
1989#include <time.h>
1990#endif
1991#endif
1992 ]],[[
1993 struct timespec ts;
1994 if (0 == clock_gettime(CLOCK_MONOTONIC, &ts))
1995 exit(0);
1996 else
1997 exit(1);
1998 ]])
1999 ],[
2000 AC_MSG_RESULT([yes])
2001 ],[
2002 AC_MSG_RESULT([no])
2003 AC_MSG_WARN([HAVE_CLOCK_GETTIME_MONOTONIC will not be defined])
Alex Deymod15eaac2016-06-28 14:49:26 -07002004 curl_func_clock_gettime="no"
Lucas Eckels9bd90e62012-08-06 15:07:02 -07002005 LIBS="$curl_cv_save_LIBS"
2006 ])
2007 fi
2008 #
Alex Deymod15eaac2016-06-28 14:49:26 -07002009 case "$curl_func_clock_gettime" in
Lucas Eckels9bd90e62012-08-06 15:07:02 -07002010 yes)
2011 AC_DEFINE_UNQUOTED(HAVE_CLOCK_GETTIME_MONOTONIC, 1,
2012 [Define to 1 if you have the clock_gettime function and monotonic timer.])
2013 ;;
2014 esac
2015 #
2016 fi
2017 #
2018])
2019
2020
2021dnl CURL_CHECK_LIBS_CONNECT
2022dnl -------------------------------------------------
2023dnl Verify if network connect function is already available
2024dnl using current libraries or if another one is required.
2025
2026AC_DEFUN([CURL_CHECK_LIBS_CONNECT], [
2027 AC_REQUIRE([CURL_INCLUDES_WINSOCK2])dnl
2028 AC_MSG_CHECKING([for connect in libraries])
2029 tst_connect_save_LIBS="$LIBS"
2030 tst_connect_need_LIBS="unknown"
2031 for tst_lib in '' '-lsocket' ; do
2032 if test "$tst_connect_need_LIBS" = "unknown"; then
2033 LIBS="$tst_lib $tst_connect_save_LIBS"
2034 AC_LINK_IFELSE([
2035 AC_LANG_PROGRAM([[
2036 $curl_includes_winsock2
2037 #ifndef HAVE_WINDOWS_H
2038 int connect(int, void*, int);
2039 #endif
2040 ]],[[
2041 if(0 != connect(0, 0, 0))
2042 return 1;
2043 ]])
2044 ],[
2045 tst_connect_need_LIBS="$tst_lib"
2046 ])
2047 fi
2048 done
2049 LIBS="$tst_connect_save_LIBS"
2050 #
2051 case X-"$tst_connect_need_LIBS" in
2052 X-unknown)
2053 AC_MSG_RESULT([cannot find connect])
2054 AC_MSG_ERROR([cannot find connect function in libraries.])
2055 ;;
2056 X-)
2057 AC_MSG_RESULT([yes])
2058 ;;
2059 *)
2060 AC_MSG_RESULT([$tst_connect_need_LIBS])
2061 LIBS="$tst_connect_need_LIBS $tst_connect_save_LIBS"
2062 ;;
2063 esac
2064])
2065
2066
2067dnl CURL_DEFINE_UNQUOTED (VARIABLE, [VALUE])
2068dnl -------------------------------------------------
2069dnl Like AC_DEFINE_UNQUOTED this macro will define a C preprocessor
2070dnl symbol that can be further used in custom template configuration
2071dnl files. This macro, unlike AC_DEFINE_UNQUOTED, does not use a third
2072dnl argument for the description. Symbol definitions done with this
2073dnl macro are intended to be exclusively used in handcrafted *.h.in
2074dnl template files. Contrary to what AC_DEFINE_UNQUOTED does, this one
2075dnl prevents autoheader generation and insertion of symbol template
2076dnl stub and definition into the first configuration header file. Do
2077dnl not use this macro as a replacement for AC_DEFINE_UNQUOTED, each
2078dnl one serves different functional needs.
2079
2080AC_DEFUN([CURL_DEFINE_UNQUOTED], [
2081cat >>confdefs.h <<_EOF
2082[@%:@define] $1 ifelse($#, 2, [$2], 1)
2083_EOF
2084])
2085
2086
Lucas Eckels9bd90e62012-08-06 15:07:02 -07002087dnl CURL_CONFIGURE_CURL_SOCKLEN_T
2088dnl -------------------------------------------------
Lucas Eckels9bd90e62012-08-06 15:07:02 -07002089dnl The need for the curl_socklen_t definition arises mainly to properly
2090dnl interface HP-UX systems which on one hand have a typedef'ed socklen_t
2091dnl data type which is 32 or 64-Bit wide depending on the data model being
2092dnl used, and that on the other hand is only actually used when interfacing
2093dnl the X/Open sockets provided in the xnet library.
2094
2095AC_DEFUN([CURL_CONFIGURE_CURL_SOCKLEN_T], [
2096 AC_REQUIRE([CURL_INCLUDES_WS2TCPIP])dnl
2097 AC_REQUIRE([CURL_INCLUDES_SYS_SOCKET])dnl
2098 AC_REQUIRE([CURL_PREPROCESS_CALLCONV])dnl
2099 #
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -07002100 AC_BEFORE([$0], [CURL_CONFIGURE_PULL_SYS_POLL])dnl
2101 #
Lucas Eckels9bd90e62012-08-06 15:07:02 -07002102 AC_MSG_CHECKING([for curl_socklen_t data type])
2103 curl_typeof_curl_socklen_t="unknown"
2104 for arg1 in int SOCKET; do
2105 for arg2 in 'struct sockaddr' void; do
2106 for t in socklen_t int size_t 'unsigned int' long 'unsigned long' void; do
2107 if test "$curl_typeof_curl_socklen_t" = "unknown"; then
2108 AC_COMPILE_IFELSE([
2109 AC_LANG_PROGRAM([[
2110 $curl_includes_ws2tcpip
2111 $curl_includes_sys_socket
2112 $curl_preprocess_callconv
2113 extern int FUNCALLCONV getpeername($arg1, $arg2 *, $t *);
2114 ]],[[
2115 $t *lenptr = 0;
2116 if(0 != getpeername(0, 0, lenptr))
2117 return 1;
2118 ]])
2119 ],[
2120 curl_typeof_curl_socklen_t="$t"
2121 ])
2122 fi
2123 done
2124 done
2125 done
2126 for t in socklen_t int; do
2127 if test "$curl_typeof_curl_socklen_t" = "void"; then
2128 AC_COMPILE_IFELSE([
2129 AC_LANG_PROGRAM([[
2130 $curl_includes_sys_socket
2131 typedef $t curl_socklen_t;
2132 ]],[[
2133 curl_socklen_t dummy;
2134 ]])
2135 ],[
2136 curl_typeof_curl_socklen_t="$t"
2137 ])
2138 fi
2139 done
2140 AC_MSG_RESULT([$curl_typeof_curl_socklen_t])
2141 if test "$curl_typeof_curl_socklen_t" = "void" ||
2142 test "$curl_typeof_curl_socklen_t" = "unknown"; then
2143 AC_MSG_ERROR([cannot find data type for curl_socklen_t.])
2144 fi
2145 #
2146 AC_MSG_CHECKING([size of curl_socklen_t])
2147 curl_sizeof_curl_socklen_t="unknown"
2148 curl_pull_headers_socklen_t="unknown"
Alex Deymod15eaac2016-06-28 14:49:26 -07002149 if test "$curl_cv_header_ws2tcpip_h" = "yes"; then
Lucas Eckels9bd90e62012-08-06 15:07:02 -07002150 tst_pull_header_checks='none ws2tcpip'
2151 tst_size_checks='4'
2152 else
2153 tst_pull_header_checks='none systypes syssocket'
2154 tst_size_checks='4 8 2'
2155 fi
2156 for tst_size in $tst_size_checks; do
2157 for tst_pull_headers in $tst_pull_header_checks; do
2158 if test "$curl_sizeof_curl_socklen_t" = "unknown"; then
2159 case $tst_pull_headers in
2160 ws2tcpip)
2161 tmp_includes="$curl_includes_ws2tcpip"
2162 ;;
2163 systypes)
2164 tmp_includes="$curl_includes_sys_types"
2165 ;;
2166 syssocket)
2167 tmp_includes="$curl_includes_sys_socket"
2168 ;;
2169 *)
2170 tmp_includes=""
2171 ;;
2172 esac
2173 AC_COMPILE_IFELSE([
2174 AC_LANG_PROGRAM([[
2175 $tmp_includes
2176 typedef $curl_typeof_curl_socklen_t curl_socklen_t;
2177 typedef char dummy_arr[sizeof(curl_socklen_t) == $tst_size ? 1 : -1];
2178 ]],[[
2179 curl_socklen_t dummy;
2180 ]])
2181 ],[
2182 curl_sizeof_curl_socklen_t="$tst_size"
2183 curl_pull_headers_socklen_t="$tst_pull_headers"
2184 ])
2185 fi
2186 done
2187 done
2188 AC_MSG_RESULT([$curl_sizeof_curl_socklen_t])
2189 if test "$curl_sizeof_curl_socklen_t" = "unknown"; then
2190 AC_MSG_ERROR([cannot find out size of curl_socklen_t.])
2191 fi
2192 #
2193 case $curl_pull_headers_socklen_t in
2194 ws2tcpip)
2195 CURL_DEFINE_UNQUOTED([CURL_PULL_WS2TCPIP_H])
2196 ;;
2197 systypes)
2198 CURL_DEFINE_UNQUOTED([CURL_PULL_SYS_TYPES_H])
2199 ;;
2200 syssocket)
2201 CURL_DEFINE_UNQUOTED([CURL_PULL_SYS_TYPES_H])
2202 CURL_DEFINE_UNQUOTED([CURL_PULL_SYS_SOCKET_H])
2203 ;;
2204 esac
2205 CURL_DEFINE_UNQUOTED([CURL_TYPEOF_CURL_SOCKLEN_T], [$curl_typeof_curl_socklen_t])
2206 CURL_DEFINE_UNQUOTED([CURL_SIZEOF_CURL_SOCKLEN_T], [$curl_sizeof_curl_socklen_t])
2207])
2208
2209
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -07002210dnl CURL_CONFIGURE_PULL_SYS_POLL
2211dnl -------------------------------------------------
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -07002212dnl The need for the sys/poll.h inclusion arises mainly to properly
2213dnl interface AIX systems which define macros 'events' and 'revents'.
2214
2215AC_DEFUN([CURL_CONFIGURE_PULL_SYS_POLL], [
2216 AC_REQUIRE([CURL_INCLUDES_POLL])dnl
2217 #
2218 tst_poll_events_macro_defined="unknown"
2219 #
2220 AC_COMPILE_IFELSE([
2221 AC_LANG_PROGRAM([[
2222 $curl_includes_poll
2223 ]],[[
2224#if defined(events) || defined(revents)
2225 return 0;
2226#else
2227 force compilation error
2228#endif
2229 ]])
2230 ],[
2231 tst_poll_events_macro_defined="yes"
2232 ],[
2233 tst_poll_events_macro_defined="no"
2234 ])
2235 #
2236 if test "$tst_poll_events_macro_defined" = "yes"; then
2237 if test "x$ac_cv_header_sys_poll_h" = "xyes"; then
2238 CURL_DEFINE_UNQUOTED([CURL_PULL_SYS_POLL_H])
2239 fi
2240 fi
2241 #
2242])
2243
2244
Lucas Eckels9bd90e62012-08-06 15:07:02 -07002245dnl CURL_CHECK_FUNC_SELECT
2246dnl -------------------------------------------------
2247dnl Test if the socket select() function is available,
2248dnl and check its return type and the types of its
2249dnl arguments. If the function succeeds HAVE_SELECT
2250dnl will be defined, defining the types of the
2251dnl arguments in SELECT_TYPE_ARG1, SELECT_TYPE_ARG234
2252dnl and SELECT_TYPE_ARG5, defining the type of the
2253dnl function return value in SELECT_TYPE_RETV, and
2254dnl also defining the type qualifier of fifth argument
2255dnl in SELECT_QUAL_ARG5.
2256
2257AC_DEFUN([CURL_CHECK_FUNC_SELECT], [
2258 AC_REQUIRE([CURL_CHECK_STRUCT_TIMEVAL])dnl
2259 AC_CHECK_HEADERS(sys/select.h sys/socket.h)
2260 #
2261 AC_MSG_CHECKING([for select])
2262 AC_LINK_IFELSE([
2263 AC_LANG_PROGRAM([[
2264#undef inline
2265#ifdef HAVE_WINDOWS_H
2266#ifndef WIN32_LEAN_AND_MEAN
2267#define WIN32_LEAN_AND_MEAN
2268#endif
2269#include <windows.h>
2270#ifdef HAVE_WINSOCK2_H
2271#include <winsock2.h>
2272#else
2273#ifdef HAVE_WINSOCK_H
2274#include <winsock.h>
2275#endif
2276#endif
2277#endif
2278#ifdef HAVE_SYS_TYPES_H
2279#include <sys/types.h>
2280#endif
2281#ifdef HAVE_SYS_TIME_H
2282#include <sys/time.h>
2283#ifdef TIME_WITH_SYS_TIME
2284#include <time.h>
2285#endif
2286#else
2287#ifdef HAVE_TIME_H
2288#include <time.h>
2289#endif
2290#endif
2291#ifndef HAVE_WINDOWS_H
2292#ifdef HAVE_SYS_SELECT_H
2293#include <sys/select.h>
2294#endif
2295#ifdef HAVE_SYS_SOCKET_H
2296#include <sys/socket.h>
2297#endif
2298#endif
2299 ]],[[
2300 select(0, 0, 0, 0, 0);
2301 ]])
2302 ],[
2303 AC_MSG_RESULT([yes])
2304 curl_cv_select="yes"
2305 ],[
2306 AC_MSG_RESULT([no])
2307 curl_cv_select="no"
2308 ])
2309 #
2310 if test "$curl_cv_select" = "yes"; then
2311 AC_CACHE_CHECK([types of args and return type for select],
2312 [curl_cv_func_select_args], [
2313 curl_cv_func_select_args="unknown"
2314 for sel_retv in 'int' 'ssize_t'; do
2315 for sel_arg1 in 'int' 'ssize_t' 'size_t' 'unsigned long int' 'unsigned int'; do
2316 for sel_arg234 in 'fd_set *' 'int *' 'void *'; do
2317 for sel_arg5 in 'struct timeval *' 'const struct timeval *'; do
2318 if test "$curl_cv_func_select_args" = "unknown"; then
2319 AC_COMPILE_IFELSE([
2320 AC_LANG_PROGRAM([[
2321#undef inline
2322#ifdef HAVE_WINDOWS_H
2323#ifndef WIN32_LEAN_AND_MEAN
2324#define WIN32_LEAN_AND_MEAN
2325#endif
2326#include <windows.h>
2327#ifdef HAVE_WINSOCK2_H
2328#include <winsock2.h>
2329#else
2330#ifdef HAVE_WINSOCK_H
2331#include <winsock.h>
2332#endif
2333#endif
2334#define SELECTCALLCONV PASCAL
2335#endif
2336#ifdef HAVE_SYS_TYPES_H
2337#include <sys/types.h>
2338#endif
2339#ifdef HAVE_SYS_TIME_H
2340#include <sys/time.h>
2341#ifdef TIME_WITH_SYS_TIME
2342#include <time.h>
2343#endif
2344#else
2345#ifdef HAVE_TIME_H
2346#include <time.h>
2347#endif
2348#endif
2349#ifndef HAVE_WINDOWS_H
2350#ifdef HAVE_SYS_SELECT_H
2351#include <sys/select.h>
2352#endif
2353#ifdef HAVE_SYS_SOCKET_H
2354#include <sys/socket.h>
2355#endif
2356#define SELECTCALLCONV
2357#endif
2358#ifndef HAVE_STRUCT_TIMEVAL
2359 struct timeval {
2360 long tv_sec;
2361 long tv_usec;
2362 };
2363#endif
Elliott Hughes82be86d2017-09-20 17:00:17 -07002364 extern $sel_retv SELECTCALLCONV
2365#ifdef __ANDROID__
2366__attribute__((overloadable))
2367#endif
2368 select($sel_arg1,
2369 $sel_arg234,
2370 $sel_arg234,
2371 $sel_arg234,
2372 $sel_arg5);
Lucas Eckels9bd90e62012-08-06 15:07:02 -07002373 ]],[[
2374 $sel_arg1 nfds=0;
2375 $sel_arg234 rfds=0;
2376 $sel_arg234 wfds=0;
2377 $sel_arg234 efds=0;
2378 $sel_retv res = select(nfds, rfds, wfds, efds, 0);
2379 ]])
2380 ],[
2381 curl_cv_func_select_args="$sel_arg1,$sel_arg234,$sel_arg5,$sel_retv"
2382 ])
2383 fi
2384 done
2385 done
2386 done
2387 done
2388 ]) # AC-CACHE-CHECK
2389 if test "$curl_cv_func_select_args" = "unknown"; then
2390 AC_MSG_WARN([Cannot find proper types to use for select args])
2391 AC_MSG_WARN([HAVE_SELECT will not be defined])
2392 else
2393 select_prev_IFS=$IFS; IFS=','
2394 set dummy `echo "$curl_cv_func_select_args" | sed 's/\*/\*/g'`
2395 IFS=$select_prev_IFS
2396 shift
2397 #
2398 sel_qual_type_arg5=$[3]
2399 #
2400 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG1, $[1],
2401 [Define to the type of arg 1 for select.])
2402 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG234, $[2],
2403 [Define to the type of args 2, 3 and 4 for select.])
2404 AC_DEFINE_UNQUOTED(SELECT_TYPE_RETV, $[4],
2405 [Define to the function return type for select.])
2406 #
2407 prev_sh_opts=$-
2408 #
2409 case $prev_sh_opts in
2410 *f*)
2411 ;;
2412 *)
2413 set -f
2414 ;;
2415 esac
2416 #
2417 case "$sel_qual_type_arg5" in
2418 const*)
2419 sel_qual_arg5=const
2420 sel_type_arg5=`echo $sel_qual_type_arg5 | sed 's/^const //'`
2421 ;;
2422 *)
2423 sel_qual_arg5=
2424 sel_type_arg5=$sel_qual_type_arg5
2425 ;;
2426 esac
2427 #
2428 AC_DEFINE_UNQUOTED(SELECT_QUAL_ARG5, $sel_qual_arg5,
2429 [Define to the type qualifier of arg 5 for select.])
2430 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG5, $sel_type_arg5,
2431 [Define to the type of arg 5 for select.])
2432 #
2433 case $prev_sh_opts in
2434 *f*)
2435 ;;
2436 *)
2437 set +f
2438 ;;
2439 esac
2440 #
2441 AC_DEFINE_UNQUOTED(HAVE_SELECT, 1,
2442 [Define to 1 if you have the select function.])
Alex Deymod15eaac2016-06-28 14:49:26 -07002443 curl_cv_func_select="yes"
Lucas Eckels9bd90e62012-08-06 15:07:02 -07002444 fi
2445 fi
2446])
2447
2448
Lucas Eckels9bd90e62012-08-06 15:07:02 -07002449dnl CURL_VERIFY_RUNTIMELIBS
2450dnl -------------------------------------------------
2451dnl Verify that the shared libs found so far can be used when running
2452dnl programs, since otherwise the situation will create odd configure errors
2453dnl that are misleading people.
2454dnl
2455dnl Make sure this test is run BEFORE the first test in the script that
2456dnl runs anything, which at the time of this writing is the AC_CHECK_SIZEOF
2457dnl macro. It must also run AFTER all lib-checking macros are complete.
2458
2459AC_DEFUN([CURL_VERIFY_RUNTIMELIBS], [
2460
2461 dnl this test is of course not sensible if we are cross-compiling!
2462 if test "x$cross_compiling" != xyes; then
2463
2464 dnl just run a program to verify that the libs checked for previous to this
2465 dnl point also is available run-time!
2466 AC_MSG_CHECKING([run-time libs availability])
2467 AC_TRY_RUN([
2468main()
2469{
2470 return 0;
2471}
2472],
2473 AC_MSG_RESULT([fine]),
2474 AC_MSG_RESULT([failed])
2475 AC_MSG_ERROR([one or more libs available at link-time are not available run-time. Libs used at link-time: $LIBS])
2476 )
2477
2478 dnl if this test fails, configure has already stopped
2479 fi
2480])
2481
2482
2483dnl CURL_CHECK_VARIADIC_MACROS
2484dnl -------------------------------------------------
2485dnl Check compiler support of variadic macros
2486
2487AC_DEFUN([CURL_CHECK_VARIADIC_MACROS], [
2488 AC_CACHE_CHECK([for compiler support of C99 variadic macro style],
2489 [curl_cv_variadic_macros_c99], [
2490 AC_COMPILE_IFELSE([
2491 AC_LANG_PROGRAM([[
2492#define c99_vmacro3(first, ...) fun3(first, __VA_ARGS__)
2493#define c99_vmacro2(first, ...) fun2(first, __VA_ARGS__)
2494 int fun3(int arg1, int arg2, int arg3);
2495 int fun2(int arg1, int arg2);
2496 int fun3(int arg1, int arg2, int arg3)
2497 { return arg1 + arg2 + arg3; }
2498 int fun2(int arg1, int arg2)
2499 { return arg1 + arg2; }
2500 ]],[[
2501 int res3 = c99_vmacro3(1, 2, 3);
2502 int res2 = c99_vmacro2(1, 2);
2503 ]])
2504 ],[
2505 curl_cv_variadic_macros_c99="yes"
2506 ],[
2507 curl_cv_variadic_macros_c99="no"
2508 ])
2509 ])
2510 case "$curl_cv_variadic_macros_c99" in
2511 yes)
2512 AC_DEFINE_UNQUOTED(HAVE_VARIADIC_MACROS_C99, 1,
2513 [Define to 1 if compiler supports C99 variadic macro style.])
2514 ;;
2515 esac
2516 AC_CACHE_CHECK([for compiler support of old gcc variadic macro style],
2517 [curl_cv_variadic_macros_gcc], [
2518 AC_COMPILE_IFELSE([
2519 AC_LANG_PROGRAM([[
2520#define gcc_vmacro3(first, args...) fun3(first, args)
2521#define gcc_vmacro2(first, args...) fun2(first, args)
2522 int fun3(int arg1, int arg2, int arg3);
2523 int fun2(int arg1, int arg2);
2524 int fun3(int arg1, int arg2, int arg3)
2525 { return arg1 + arg2 + arg3; }
2526 int fun2(int arg1, int arg2)
2527 { return arg1 + arg2; }
2528 ]],[[
2529 int res3 = gcc_vmacro3(1, 2, 3);
2530 int res2 = gcc_vmacro2(1, 2);
2531 ]])
2532 ],[
2533 curl_cv_variadic_macros_gcc="yes"
2534 ],[
2535 curl_cv_variadic_macros_gcc="no"
2536 ])
2537 ])
2538 case "$curl_cv_variadic_macros_gcc" in
2539 yes)
2540 AC_DEFINE_UNQUOTED(HAVE_VARIADIC_MACROS_GCC, 1,
2541 [Define to 1 if compiler supports old gcc variadic macro style.])
2542 ;;
2543 esac
2544])
2545
2546
2547dnl CURL_CHECK_CA_BUNDLE
2548dnl -------------------------------------------------
2549dnl Check if a default ca-bundle should be used
2550dnl
2551dnl regarding the paths this will scan:
2552dnl /etc/ssl/certs/ca-certificates.crt Debian systems
2553dnl /etc/pki/tls/certs/ca-bundle.crt Redhat and Mandriva
2554dnl /usr/share/ssl/certs/ca-bundle.crt old(er) Redhat
Alex Deymoe3149cc2016-10-05 11:18:42 -07002555dnl /usr/local/share/certs/ca-root-nss.crt FreeBSD
2556dnl /etc/ssl/cert.pem OpenBSD, FreeBSD (symlink)
Lucas Eckels9bd90e62012-08-06 15:07:02 -07002557dnl /etc/ssl/certs/ (ca path) SUSE
2558
2559AC_DEFUN([CURL_CHECK_CA_BUNDLE], [
2560
2561 AC_MSG_CHECKING([default CA cert bundle/path])
2562
2563 AC_ARG_WITH(ca-bundle,
Alex Deymod15eaac2016-06-28 14:49:26 -07002564AC_HELP_STRING([--with-ca-bundle=FILE],
2565[Path to a file containing CA certificates (example: /etc/ca-bundle.crt)])
Lucas Eckels9bd90e62012-08-06 15:07:02 -07002566AC_HELP_STRING([--without-ca-bundle], [Don't use a default CA bundle]),
2567 [
2568 want_ca="$withval"
2569 if test "x$want_ca" = "xyes"; then
2570 AC_MSG_ERROR([--with-ca-bundle=FILE requires a path to the CA bundle])
2571 fi
2572 ],
2573 [ want_ca="unset" ])
2574 AC_ARG_WITH(ca-path,
Alex Deymod15eaac2016-06-28 14:49:26 -07002575AC_HELP_STRING([--with-ca-path=DIRECTORY],
2576[Path to a directory containing CA certificates stored individually, with \
2577their filenames in a hash format. This option can be used with OpenSSL, \
2578GnuTLS and PolarSSL backends. Refer to OpenSSL c_rehash for details. \
2579(example: /etc/certificates)])
Lucas Eckels9bd90e62012-08-06 15:07:02 -07002580AC_HELP_STRING([--without-ca-path], [Don't use a default CA path]),
2581 [
2582 want_capath="$withval"
2583 if test "x$want_capath" = "xyes"; then
2584 AC_MSG_ERROR([--with-ca-path=DIRECTORY requires a path to the CA path directory])
2585 fi
2586 ],
2587 [ want_capath="unset"])
2588
Alex Deymod15eaac2016-06-28 14:49:26 -07002589 ca_warning=" (warning: certs not found)"
2590 capath_warning=" (warning: certs not found)"
2591 check_capath=""
2592
Lucas Eckels9bd90e62012-08-06 15:07:02 -07002593 if test "x$want_ca" != "xno" -a "x$want_ca" != "xunset" -a \
2594 "x$want_capath" != "xno" -a "x$want_capath" != "xunset"; then
2595 dnl both given
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -07002596 ca="$want_ca"
2597 capath="$want_capath"
Lucas Eckels9bd90e62012-08-06 15:07:02 -07002598 elif test "x$want_ca" != "xno" -a "x$want_ca" != "xunset"; then
2599 dnl --with-ca-bundle given
2600 ca="$want_ca"
2601 capath="no"
2602 elif test "x$want_capath" != "xno" -a "x$want_capath" != "xunset"; then
2603 dnl --with-ca-path given
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -07002604 if test "x$OPENSSL_ENABLED" != "x1" -a "x$GNUTLS_ENABLED" != "x1" -a "x$POLARSSL_ENABLED" != "x1"; then
2605 AC_MSG_ERROR([--with-ca-path only works with OpenSSL, GnuTLS or PolarSSL])
Lucas Eckels9bd90e62012-08-06 15:07:02 -07002606 fi
2607 capath="$want_capath"
2608 ca="no"
2609 else
Lucas Eckels9bd90e62012-08-06 15:07:02 -07002610 dnl first try autodetecting a CA bundle , then a CA path
2611 dnl both autodetections can be skipped by --without-ca-*
2612 ca="no"
2613 capath="no"
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -07002614 if test "x$cross_compiling" != "xyes"; then
2615 dnl NOT cross-compiling and...
2616 dnl neither of the --with-ca-* options are provided
2617 if test "x$want_ca" = "xunset"; then
2618 dnl the path we previously would have installed the curl ca bundle
2619 dnl to, and thus we now check for an already existing cert in that
2620 dnl place in case we find no other
2621 if test "x$prefix" != xNONE; then
2622 cac="${prefix}/share/curl/curl-ca-bundle.crt"
2623 else
2624 cac="$ac_default_prefix/share/curl/curl-ca-bundle.crt"
2625 fi
Lucas Eckels9bd90e62012-08-06 15:07:02 -07002626
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -07002627 for a in /etc/ssl/certs/ca-certificates.crt \
2628 /etc/pki/tls/certs/ca-bundle.crt \
2629 /usr/share/ssl/certs/ca-bundle.crt \
Alex Deymoe3149cc2016-10-05 11:18:42 -07002630 /usr/local/share/certs/ca-root-nss.crt \
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -07002631 /etc/ssl/cert.pem \
2632 "$cac"; do
2633 if test -f "$a"; then
2634 ca="$a"
2635 break
2636 fi
2637 done
2638 fi
2639 if test "x$want_capath" = "xunset" -a "x$ca" = "xno" -a \
2640 "x$OPENSSL_ENABLED" = "x1"; then
Alex Deymod15eaac2016-06-28 14:49:26 -07002641 check_capath="/etc/ssl/certs/"
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -07002642 fi
2643 else
2644 dnl no option given and cross-compiling
2645 AC_MSG_WARN([skipped the ca-cert path detection when cross-compiling])
Lucas Eckels9bd90e62012-08-06 15:07:02 -07002646 fi
2647 fi
2648
Alex Deymod15eaac2016-06-28 14:49:26 -07002649 if test "x$ca" = "xno" || test -f "$ca"; then
2650 ca_warning=""
2651 fi
2652
2653 if test "x$capath" != "xno"; then
2654 check_capath="$capath"
2655 fi
2656
2657 if test ! -z "$check_capath"; then
2658 for a in "$check_capath"; do
2659 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
2660 if test "x$capath" = "xno"; then
2661 capath="$a"
2662 fi
2663 capath_warning=""
2664 break
2665 fi
2666 done
2667 fi
2668
2669 if test "x$capath" = "xno"; then
2670 capath_warning=""
2671 fi
2672
Lucas Eckels9bd90e62012-08-06 15:07:02 -07002673 if test "x$ca" != "xno"; then
2674 CURL_CA_BUNDLE='"'$ca'"'
2675 AC_DEFINE_UNQUOTED(CURL_CA_BUNDLE, "$ca", [Location of default ca bundle])
2676 AC_SUBST(CURL_CA_BUNDLE)
2677 AC_MSG_RESULT([$ca])
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -07002678 fi
2679 if test "x$capath" != "xno"; then
Lucas Eckels9bd90e62012-08-06 15:07:02 -07002680 CURL_CA_PATH="\"$capath\""
2681 AC_DEFINE_UNQUOTED(CURL_CA_PATH, "$capath", [Location of default ca path])
2682 AC_MSG_RESULT([$capath (capath)])
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -07002683 fi
2684 if test "x$ca" = "xno" && test "x$capath" = "xno"; then
Lucas Eckels9bd90e62012-08-06 15:07:02 -07002685 AC_MSG_RESULT([no])
2686 fi
Alex Deymod15eaac2016-06-28 14:49:26 -07002687
2688 AC_MSG_CHECKING([whether to use builtin CA store of SSL library])
2689 AC_ARG_WITH(ca-fallback,
2690AC_HELP_STRING([--with-ca-fallback], [Use the built in CA store of the SSL library])
2691AC_HELP_STRING([--without-ca-fallback], [Don't use the built in CA store of the SSL library]),
2692 [
2693 if test "x$with_ca_fallback" != "xyes" -a "x$with_ca_fallback" != "xno"; then
2694 AC_MSG_ERROR([--with-ca-fallback only allows yes or no as parameter])
2695 fi
2696 ],
2697 [ with_ca_fallback="no"])
2698 AC_MSG_RESULT([$with_ca_fallback])
2699 if test "x$with_ca_fallback" = "xyes"; then
2700 if test "x$OPENSSL_ENABLED" != "x1" -a "x$GNUTLS_ENABLED" != "x1"; then
2701 AC_MSG_ERROR([--with-ca-fallback only works with OpenSSL or GnuTLS])
2702 fi
2703 AC_DEFINE_UNQUOTED(CURL_CA_FALLBACK, 1, [define "1" to use built in CA store of SSL library ])
2704 fi
Lucas Eckels9bd90e62012-08-06 15:07:02 -07002705])
2706
Lucas Eckels9bd90e62012-08-06 15:07:02 -07002707dnl CURL_CHECK_WIN32_LARGEFILE
2708dnl -------------------------------------------------
2709dnl Check if curl's WIN32 large file will be used
2710
2711AC_DEFUN([CURL_CHECK_WIN32_LARGEFILE], [
2712 AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
2713 AC_MSG_CHECKING([whether build target supports WIN32 file API])
2714 curl_win32_file_api="no"
Alex Deymod15eaac2016-06-28 14:49:26 -07002715 if test "$curl_cv_header_windows_h" = "yes"; then
Lucas Eckels9bd90e62012-08-06 15:07:02 -07002716 if test x"$enable_largefile" != "xno"; then
2717 AC_COMPILE_IFELSE([
2718 AC_LANG_PROGRAM([[
2719 ]],[[
2720#if !defined(_WIN32_WCE) && \
2721 (defined(__MINGW32__) || \
2722 (defined(_MSC_VER) && (defined(_WIN32) || defined(_WIN64))))
2723 int dummy=1;
2724#else
2725 WIN32 large file API not supported.
2726#endif
2727 ]])
2728 ],[
2729 curl_win32_file_api="win32_large_files"
2730 ])
2731 fi
2732 if test "$curl_win32_file_api" = "no"; then
2733 AC_COMPILE_IFELSE([
2734 AC_LANG_PROGRAM([[
2735 ]],[[
2736#if defined(_WIN32_WCE) || defined(__MINGW32__) || defined(_MSC_VER)
2737 int dummy=1;
2738#else
2739 WIN32 small file API not supported.
2740#endif
2741 ]])
2742 ],[
2743 curl_win32_file_api="win32_small_files"
2744 ])
2745 fi
2746 fi
2747 case "$curl_win32_file_api" in
2748 win32_large_files)
2749 AC_MSG_RESULT([yes (large file enabled)])
2750 AC_DEFINE_UNQUOTED(USE_WIN32_LARGE_FILES, 1,
2751 [Define to 1 if you are building a Windows target with large file support.])
2752 ;;
2753 win32_small_files)
2754 AC_MSG_RESULT([yes (large file disabled)])
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -07002755 AC_DEFINE_UNQUOTED(USE_WIN32_SMALL_FILES, 1,
Lucas Eckels9bd90e62012-08-06 15:07:02 -07002756 [Define to 1 if you are building a Windows target without large file support.])
2757 ;;
2758 *)
2759 AC_MSG_RESULT([no])
2760 ;;
2761 esac
2762])
2763
2764dnl CURL_EXPORT_PCDIR ($pcdir)
2765dnl ------------------------
2766dnl if $pcdir is not empty, set PKG_CONFIG_LIBDIR to $pcdir and export
2767dnl
2768dnl we need this macro since pkg-config distinguishes among empty and unset
2769dnl variable while checking PKG_CONFIG_LIBDIR
2770dnl
2771
2772AC_DEFUN([CURL_EXPORT_PCDIR], [
2773 if test -n "$1"; then
2774 PKG_CONFIG_LIBDIR="$1"
2775 export PKG_CONFIG_LIBDIR
2776 fi
2777])
2778
2779dnl CURL_CHECK_PKGCONFIG ($module, [$pcdir])
2780dnl ------------------------
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -07002781dnl search for the pkg-config tool. Set the PKGCONFIG variable to hold the
2782dnl path to it, or 'no' if not found/present.
Lucas Eckels9bd90e62012-08-06 15:07:02 -07002783dnl
2784dnl If pkg-config is present, check that it has info about the $module or
2785dnl return "no" anyway!
2786dnl
2787dnl Optionally PKG_CONFIG_LIBDIR may be given as $pcdir.
2788dnl
2789
2790AC_DEFUN([CURL_CHECK_PKGCONFIG], [
Alex Deymod15eaac2016-06-28 14:49:26 -07002791 if test -n "$PKG_CONFIG"; then
2792 PKGCONFIG="$PKG_CONFIG"
2793 else
2794 AC_PATH_TOOL([PKGCONFIG], [pkg-config], [no],
2795 [$PATH:/usr/bin:/usr/local/bin])
2796 fi
Lucas Eckels9bd90e62012-08-06 15:07:02 -07002797
Alex Deymod15eaac2016-06-28 14:49:26 -07002798 if test "x$PKGCONFIG" != "xno"; then
Lucas Eckels9bd90e62012-08-06 15:07:02 -07002799 AC_MSG_CHECKING([for $1 options with pkg-config])
2800 dnl ask pkg-config about $1
2801 itexists=`CURL_EXPORT_PCDIR([$2]) dnl
2802 $PKGCONFIG --exists $1 >/dev/null 2>&1 && echo 1`
2803
2804 if test -z "$itexists"; then
2805 dnl pkg-config does not have info about the given module! set the
2806 dnl variable to 'no'
2807 PKGCONFIG="no"
2808 AC_MSG_RESULT([no])
2809 else
2810 AC_MSG_RESULT([found])
2811 fi
2812 fi
2813])
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -07002814
2815
2816dnl CURL_GENERATE_CONFIGUREHELP_PM
2817dnl -------------------------------------------------
2818dnl Generate test harness configurehelp.pm module, defining and
2819dnl initializing some perl variables with values which are known
2820dnl when the configure script runs. For portability reasons, test
2821dnl harness needs information on how to run the C preprocessor.
2822
2823AC_DEFUN([CURL_GENERATE_CONFIGUREHELP_PM], [
2824 AC_REQUIRE([AC_PROG_CPP])dnl
2825 tmp_cpp=`eval echo "$ac_cpp" 2>/dev/null`
2826 if test -z "$tmp_cpp"; then
2827 tmp_cpp='cpp'
2828 fi
2829 cat >./tests/configurehelp.pm <<_EOF
2830[@%:@] This is a generated file. Do not edit.
2831
2832package configurehelp;
2833
2834use strict;
2835use warnings;
2836use Exporter;
2837
2838use vars qw(
2839 @ISA
2840 @EXPORT_OK
2841 \$Cpreprocessor
2842 );
2843
2844@ISA = qw(Exporter);
2845
2846@EXPORT_OK = qw(
2847 \$Cpreprocessor
2848 );
2849
2850\$Cpreprocessor = '$tmp_cpp';
2851
28521;
2853_EOF
2854])
Alex Deymod15eaac2016-06-28 14:49:26 -07002855
2856dnl CURL_CPP_P
2857dnl
2858dnl Check if $cpp -P should be used for extract define values due to gcc 5
2859dnl splitting up strings and defines between line outputs. gcc by default
2860dnl (without -P) will show TEST EINVAL TEST as
2861dnl
2862dnl # 13 "conftest.c"
2863dnl TEST
2864dnl # 13 "conftest.c" 3 4
2865dnl 22
2866dnl # 13 "conftest.c"
2867dnl TEST
2868
2869AC_DEFUN([CURL_CPP_P], [
2870 AC_MSG_CHECKING([if cpp -P is needed])
2871 AC_EGREP_CPP([TEST.*TEST], [
2872 #include <errno.h>
2873TEST EINVAL TEST
2874 ], [cpp=no], [cpp=yes])
2875 AC_MSG_RESULT([$cpp])
2876
2877 dnl we need cpp -P so check if it works then
2878 if test "x$cpp" = "xyes"; then
2879 AC_MSG_CHECKING([if cpp -P works])
2880 OLDCPPFLAGS=$CPPFLAGS
2881 CPPFLAGS="$CPPFLAGS -P"
2882 AC_EGREP_CPP([TEST.*TEST], [
2883 #include <errno.h>
2884TEST EINVAL TEST
2885 ], [cpp_p=yes], [cpp_p=no])
2886 AC_MSG_RESULT([$cpp_p])
2887
2888 if test "x$cpp_p" = "xno"; then
2889 AC_MSG_WARN([failed to figure out cpp -P alternative])
2890 # without -P
Elliott Hughescee03382017-06-23 12:17:18 -07002891 CPPPFLAG=""
Alex Deymod15eaac2016-06-28 14:49:26 -07002892 else
2893 # with -P
Elliott Hughescee03382017-06-23 12:17:18 -07002894 CPPPFLAG="-P"
Alex Deymod15eaac2016-06-28 14:49:26 -07002895 fi
2896 dnl restore CPPFLAGS
2897 CPPFLAGS=$OLDCPPFLAGS
Elliott Hughescee03382017-06-23 12:17:18 -07002898 else
2899 # without -P
2900 CPPPFLAG=""
Alex Deymod15eaac2016-06-28 14:49:26 -07002901 fi
2902])
Elliott Hughescee03382017-06-23 12:17:18 -07002903
2904
2905dnl CURL_MAC_CFLAGS
2906dnl
2907dnl Check if -mmacosx-version-min, -miphoneos-version-min or any
2908dnl similar are set manually, otherwise do. And set
2909dnl -Werror=partial-availability.
2910dnl
2911
2912AC_DEFUN([CURL_MAC_CFLAGS], [
2913
2914 tst_cflags="no"
2915 case $host_os in
2916 darwin*)
2917 tst_cflags="yes"
2918 ;;
2919 esac
2920
2921 AC_MSG_CHECKING([for good-to-use Mac CFLAGS])
2922 AC_MSG_RESULT([$tst_cflags]);
2923
2924 if test "$tst_cflags" = "yes"; then
2925 AC_MSG_CHECKING([for *version-min in CFLAGS])
2926 min=""
2927 if test -z "$(echo $CFLAGS | grep m.*os.*-version-min)"; then
2928 min="-mmacosx-version-min=10.8"
2929 CFLAGS="$CFLAGS $min"
2930 fi
2931 if test -z "$min"; then
2932 AC_MSG_RESULT([set by user])
2933 else
2934 AC_MSG_RESULT([$min set])
2935 fi
2936
2937 old_CFLAGS=$CFLAGS
2938 CFLAGS="$CFLAGS -Werror=partial-availability"
2939 AC_MSG_CHECKING([whether $CC accepts -Werror=partial-availability])
2940 AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],
2941 [AC_MSG_RESULT([yes])],
2942 [AC_MSG_RESULT([no])
2943 CFLAGS=$old_CFLAGS])
2944 fi
2945
2946])
Alex Deymo486467e2017-12-19 19:04:07 +01002947
2948
2949dnl CURL_SUPPORTS_BUILTIN_AVAILABLE
2950dnl
2951dnl Check to see if the compiler supports __builtin_available. This built-in
2952dnl compiler function first appeared in Apple LLVM 9.0.0. It's so new that, at
2953dnl the time this macro was written, the function was not yet documented. Its
2954dnl purpose is to return true if the code is running under a certain OS version
2955dnl or later.
2956
2957AC_DEFUN([CURL_SUPPORTS_BUILTIN_AVAILABLE], [
2958 AC_MSG_CHECKING([to see if the compiler supports __builtin_available()])
2959 AC_COMPILE_IFELSE([
2960 AC_LANG_PROGRAM([[
2961#include <stdlib.h>
2962 ]],[[
2963 if (__builtin_available(macOS 10.8, iOS 5.0, *)) {}
2964 ]])
2965 ],[
2966 AC_MSG_RESULT([yes])
2967 AC_DEFINE_UNQUOTED(HAVE_BUILTIN_AVAILABLE, 1,
2968 [Define to 1 if you have the __builtin_available function.])
2969 ],[
2970 AC_MSG_RESULT([no])
2971 ])
2972])