]> git.proxmox.com Git - ceph.git/blob - ceph/src/c-ares/acinclude.m4
update sources to ceph Nautilus 14.2.1
[ceph.git] / ceph / src / c-ares / acinclude.m4
1
2
3 dnl CURL_CHECK_DEF (SYMBOL, [INCLUDES], [SILENT])
4 dnl -------------------------------------------------
5 dnl Use the C preprocessor to find out if the given object-style symbol
6 dnl is defined and get its expansion. This macro will not use default
7 dnl includes even if no INCLUDES argument is given. This macro will run
8 dnl silently when invoked with three arguments. If the expansion would
9 dnl result in a set of double-quoted strings the returned expansion will
10 dnl actually be a single double-quoted string concatenating all them.
11
12 AC_DEFUN([CURL_CHECK_DEF], [
13 AS_VAR_PUSHDEF([ac_HaveDef], [curl_cv_have_def_$1])dnl
14 AS_VAR_PUSHDEF([ac_Def], [curl_cv_def_$1])dnl
15 if test -z "$SED"; then
16 AC_MSG_ERROR([SED not set. Cannot continue without SED being set.])
17 fi
18 if test -z "$GREP"; then
19 AC_MSG_ERROR([GREP not set. Cannot continue without GREP being set.])
20 fi
21 ifelse($3,,[AC_MSG_CHECKING([for preprocessor definition of $1])])
22 tmp_exp=""
23 AC_PREPROC_IFELSE([
24 AC_LANG_SOURCE(
25 ifelse($2,,,[$2])[[
26 #ifdef $1
27 CURL_DEF_TOKEN $1
28 #endif
29 ]])
30 ],[
31 tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \
32 "$GREP" CURL_DEF_TOKEN 2>/dev/null | \
33 "$SED" 's/.*CURL_DEF_TOKEN[[ ]][[ ]]*//' 2>/dev/null | \
34 "$SED" 's/[["]][[ ]]*[["]]//g' 2>/dev/null`
35 if test -z "$tmp_exp" || test "$tmp_exp" = "$1"; then
36 tmp_exp=""
37 fi
38 ])
39 if test -z "$tmp_exp"; then
40 AS_VAR_SET(ac_HaveDef, no)
41 ifelse($3,,[AC_MSG_RESULT([no])])
42 else
43 AS_VAR_SET(ac_HaveDef, yes)
44 AS_VAR_SET(ac_Def, $tmp_exp)
45 ifelse($3,,[AC_MSG_RESULT([$tmp_exp])])
46 fi
47 AS_VAR_POPDEF([ac_Def])dnl
48 AS_VAR_POPDEF([ac_HaveDef])dnl
49 ])
50
51
52 dnl CURL_CHECK_DEF_CC (SYMBOL, [INCLUDES], [SILENT])
53 dnl -------------------------------------------------
54 dnl Use the C compiler to find out only if the given symbol is defined
55 dnl or not, this can not find out its expansion. This macro will not use
56 dnl default includes even if no INCLUDES argument is given. This macro
57 dnl will run silently when invoked with three arguments.
58
59 AC_DEFUN([CURL_CHECK_DEF_CC], [
60 AS_VAR_PUSHDEF([ac_HaveDef], [curl_cv_have_def_$1])dnl
61 ifelse($3,,[AC_MSG_CHECKING([for compiler definition of $1])])
62 AC_COMPILE_IFELSE([
63 AC_LANG_SOURCE(
64 ifelse($2,,,[$2])[[
65 int main (void)
66 {
67 #ifdef $1
68 return 0;
69 #else
70 force compilation error
71 #endif
72 }
73 ]])
74 ],[
75 tst_symbol_defined="yes"
76 ],[
77 tst_symbol_defined="no"
78 ])
79 if test "$tst_symbol_defined" = "yes"; then
80 AS_VAR_SET(ac_HaveDef, yes)
81 ifelse($3,,[AC_MSG_RESULT([yes])])
82 else
83 AS_VAR_SET(ac_HaveDef, no)
84 ifelse($3,,[AC_MSG_RESULT([no])])
85 fi
86 AS_VAR_POPDEF([ac_HaveDef])dnl
87 ])
88
89
90 dnl CARES_CHECK_LIB_XNET
91 dnl -------------------------------------------------
92 dnl Verify if X/Open network library is required.
93
94 AC_DEFUN([CARES_CHECK_LIB_XNET], [
95 AC_MSG_CHECKING([if X/Open network library is required])
96 tst_lib_xnet_required="no"
97 AC_COMPILE_IFELSE([
98 AC_LANG_SOURCE([[
99 int main (void)
100 {
101 #if defined(__hpux) && defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 600)
102 return 0;
103 #elif defined(__hpux) && defined(_XOPEN_SOURCE_EXTENDED)
104 return 0;
105 #else
106 force compilation error
107 #endif
108 }
109 ]])
110 ],[
111 tst_lib_xnet_required="yes"
112 LIBS="$LIBS -lxnet"
113 ])
114 AC_MSG_RESULT([$tst_lib_xnet_required])
115 ])
116
117
118 dnl CARES_CHECK_AIX_ALL_SOURCE
119 dnl -------------------------------------------------
120 dnl Provides a replacement of traditional AC_AIX with
121 dnl an uniform behaviour across all autoconf versions,
122 dnl and with our own placement rules.
123
124 AC_DEFUN([CARES_CHECK_AIX_ALL_SOURCE], [
125 AH_VERBATIM([_ALL_SOURCE],
126 [/* Define to 1 if OS is AIX. */
127 #ifndef _ALL_SOURCE
128 # undef _ALL_SOURCE
129 #endif])
130 AC_BEFORE([$0], [AC_SYS_LARGEFILE])dnl
131 AC_BEFORE([$0], [CARES_CONFIGURE_REENTRANT])dnl
132 AC_MSG_CHECKING([if OS is AIX (to define _ALL_SOURCE)])
133 AC_EGREP_CPP([yes_this_is_aix],[
134 #ifdef _AIX
135 yes_this_is_aix
136 #endif
137 ],[
138 AC_MSG_RESULT([yes])
139 AC_DEFINE(_ALL_SOURCE)
140 ],[
141 AC_MSG_RESULT([no])
142 ])
143 ])
144
145
146 dnl CURL_CHECK_HEADER_WINDOWS
147 dnl -------------------------------------------------
148 dnl Check for compilable and valid windows.h header
149
150 AC_DEFUN([CURL_CHECK_HEADER_WINDOWS], [
151 AC_CACHE_CHECK([for windows.h], [ac_cv_header_windows_h], [
152 AC_COMPILE_IFELSE([
153 AC_LANG_PROGRAM([[
154 #undef inline
155 #ifndef WIN32_LEAN_AND_MEAN
156 #define WIN32_LEAN_AND_MEAN
157 #endif
158 #include <windows.h>
159 ]],[[
160 #if defined(__CYGWIN__) || defined(__CEGCC__)
161 HAVE_WINDOWS_H shall not be defined.
162 #else
163 int dummy=2*WINVER;
164 #endif
165 ]])
166 ],[
167 ac_cv_header_windows_h="yes"
168 ],[
169 ac_cv_header_windows_h="no"
170 ])
171 ])
172 case "$ac_cv_header_windows_h" in
173 yes)
174 AC_DEFINE_UNQUOTED(HAVE_WINDOWS_H, 1,
175 [Define to 1 if you have the windows.h header file.])
176 AC_DEFINE_UNQUOTED(WIN32_LEAN_AND_MEAN, 1,
177 [Define to avoid automatic inclusion of winsock.h])
178 ;;
179 esac
180 ])
181
182
183 dnl CURL_CHECK_NATIVE_WINDOWS
184 dnl -------------------------------------------------
185 dnl Check if building a native Windows target
186
187 AC_DEFUN([CURL_CHECK_NATIVE_WINDOWS], [
188 AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
189 AC_CACHE_CHECK([whether build target is a native Windows one], [ac_cv_native_windows], [
190 if test "$ac_cv_header_windows_h" = "no"; then
191 ac_cv_native_windows="no"
192 else
193 AC_COMPILE_IFELSE([
194 AC_LANG_PROGRAM([[
195 ]],[[
196 #if defined(__MINGW32__) || defined(__MINGW32CE__) || \
197 (defined(_MSC_VER) && (defined(_WIN32) || defined(_WIN64)))
198 int dummy=1;
199 #else
200 Not a native Windows build target.
201 #endif
202 ]])
203 ],[
204 ac_cv_native_windows="yes"
205 ],[
206 ac_cv_native_windows="no"
207 ])
208 fi
209 ])
210 AM_CONDITIONAL(DOING_NATIVE_WINDOWS, test "x$ac_cv_native_windows" = xyes)
211 ])
212
213
214 dnl CURL_CHECK_HEADER_WINSOCK
215 dnl -------------------------------------------------
216 dnl Check for compilable and valid winsock.h header
217
218 AC_DEFUN([CURL_CHECK_HEADER_WINSOCK], [
219 AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
220 AC_CACHE_CHECK([for winsock.h], [ac_cv_header_winsock_h], [
221 AC_COMPILE_IFELSE([
222 AC_LANG_PROGRAM([[
223 #undef inline
224 #ifndef WIN32_LEAN_AND_MEAN
225 #define WIN32_LEAN_AND_MEAN
226 #endif
227 #include <windows.h>
228 #include <winsock.h>
229 ]],[[
230 #if defined(__CYGWIN__) || defined(__CEGCC__)
231 HAVE_WINSOCK_H shall not be defined.
232 #else
233 int dummy=WSACleanup();
234 #endif
235 ]])
236 ],[
237 ac_cv_header_winsock_h="yes"
238 ],[
239 ac_cv_header_winsock_h="no"
240 ])
241 ])
242 case "$ac_cv_header_winsock_h" in
243 yes)
244 AC_DEFINE_UNQUOTED(HAVE_WINSOCK_H, 1,
245 [Define to 1 if you have the winsock.h header file.])
246 ;;
247 esac
248 ])
249
250
251 dnl CURL_CHECK_HEADER_WINSOCK2
252 dnl -------------------------------------------------
253 dnl Check for compilable and valid winsock2.h header
254
255 AC_DEFUN([CURL_CHECK_HEADER_WINSOCK2], [
256 AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
257 AC_CACHE_CHECK([for winsock2.h], [ac_cv_header_winsock2_h], [
258 AC_COMPILE_IFELSE([
259 AC_LANG_PROGRAM([[
260 #undef inline
261 #ifndef WIN32_LEAN_AND_MEAN
262 #define WIN32_LEAN_AND_MEAN
263 #endif
264 #include <windows.h>
265 #include <winsock2.h>
266 ]],[[
267 #if defined(__CYGWIN__) || defined(__CEGCC__) || defined(__MINGW32CE__)
268 HAVE_WINSOCK2_H shall not be defined.
269 #else
270 int dummy=2*IPPROTO_ESP;
271 #endif
272 ]])
273 ],[
274 ac_cv_header_winsock2_h="yes"
275 ],[
276 ac_cv_header_winsock2_h="no"
277 ])
278 ])
279 case "$ac_cv_header_winsock2_h" in
280 yes)
281 AC_DEFINE_UNQUOTED(HAVE_WINSOCK2_H, 1,
282 [Define to 1 if you have the winsock2.h header file.])
283 ;;
284 esac
285 ])
286
287
288 dnl CURL_CHECK_HEADER_WS2TCPIP
289 dnl -------------------------------------------------
290 dnl Check for compilable and valid ws2tcpip.h header
291
292 AC_DEFUN([CURL_CHECK_HEADER_WS2TCPIP], [
293 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
294 AC_CACHE_CHECK([for ws2tcpip.h], [ac_cv_header_ws2tcpip_h], [
295 AC_COMPILE_IFELSE([
296 AC_LANG_PROGRAM([[
297 #undef inline
298 #ifndef WIN32_LEAN_AND_MEAN
299 #define WIN32_LEAN_AND_MEAN
300 #endif
301 #include <windows.h>
302 #include <winsock2.h>
303 #include <ws2tcpip.h>
304 ]],[[
305 #if defined(__CYGWIN__) || defined(__CEGCC__) || defined(__MINGW32CE__)
306 HAVE_WS2TCPIP_H shall not be defined.
307 #else
308 int dummy=2*IP_PKTINFO;
309 #endif
310 ]])
311 ],[
312 ac_cv_header_ws2tcpip_h="yes"
313 ],[
314 ac_cv_header_ws2tcpip_h="no"
315 ])
316 ])
317 case "$ac_cv_header_ws2tcpip_h" in
318 yes)
319 AC_DEFINE_UNQUOTED(HAVE_WS2TCPIP_H, 1,
320 [Define to 1 if you have the ws2tcpip.h header file.])
321 ;;
322 esac
323 ])
324
325
326 dnl CURL_CHECK_HEADER_MALLOC
327 dnl -------------------------------------------------
328 dnl Check for compilable and valid malloc.h header,
329 dnl and check if it is needed even with stdlib.h
330
331 AC_DEFUN([CURL_CHECK_HEADER_MALLOC], [
332 AC_CACHE_CHECK([for malloc.h], [ac_cv_header_malloc_h], [
333 AC_COMPILE_IFELSE([
334 AC_LANG_PROGRAM([[
335 #include <malloc.h>
336 ]],[[
337 void *p = malloc(10);
338 void *q = calloc(10,10);
339 free(p);
340 free(q);
341 ]])
342 ],[
343 ac_cv_header_malloc_h="yes"
344 ],[
345 ac_cv_header_malloc_h="no"
346 ])
347 ])
348 if test "$ac_cv_header_malloc_h" = "yes"; then
349 AC_DEFINE_UNQUOTED(HAVE_MALLOC_H, 1,
350 [Define to 1 if you have the malloc.h header file.])
351 #
352 AC_COMPILE_IFELSE([
353 AC_LANG_PROGRAM([[
354 #include <stdlib.h>
355 ]],[[
356 void *p = malloc(10);
357 void *q = calloc(10,10);
358 free(p);
359 free(q);
360 ]])
361 ],[
362 curl_cv_need_header_malloc_h="no"
363 ],[
364 curl_cv_need_header_malloc_h="yes"
365 ])
366 #
367 case "$curl_cv_need_header_malloc_h" in
368 yes)
369 AC_DEFINE_UNQUOTED(NEED_MALLOC_H, 1,
370 [Define to 1 if you need the malloc.h header file even with stdlib.h])
371 ;;
372 esac
373 fi
374 ])
375
376
377 dnl CURL_CHECK_HEADER_MEMORY
378 dnl -------------------------------------------------
379 dnl Check for compilable and valid memory.h header,
380 dnl and check if it is needed even with stdlib.h for
381 dnl memory related functions.
382
383 AC_DEFUN([CURL_CHECK_HEADER_MEMORY], [
384 AC_CACHE_CHECK([for memory.h], [ac_cv_header_memory_h], [
385 AC_COMPILE_IFELSE([
386 AC_LANG_PROGRAM([[
387 #include <memory.h>
388 ]],[[
389 void *p = malloc(10);
390 void *q = calloc(10,10);
391 free(p);
392 free(q);
393 ]])
394 ],[
395 ac_cv_header_memory_h="yes"
396 ],[
397 ac_cv_header_memory_h="no"
398 ])
399 ])
400 if test "$ac_cv_header_memory_h" = "yes"; then
401 AC_DEFINE_UNQUOTED(HAVE_MEMORY_H, 1,
402 [Define to 1 if you have the memory.h header file.])
403 #
404 AC_COMPILE_IFELSE([
405 AC_LANG_PROGRAM([[
406 #include <stdlib.h>
407 ]],[[
408 void *p = malloc(10);
409 void *q = calloc(10,10);
410 free(p);
411 free(q);
412 ]])
413 ],[
414 curl_cv_need_header_memory_h="no"
415 ],[
416 curl_cv_need_header_memory_h="yes"
417 ])
418 #
419 case "$curl_cv_need_header_memory_h" in
420 yes)
421 AC_DEFINE_UNQUOTED(NEED_MEMORY_H, 1,
422 [Define to 1 if you need the memory.h header file even with stdlib.h])
423 ;;
424 esac
425 fi
426 ])
427
428
429 dnl CURL_CHECK_FUNC_GETNAMEINFO
430 dnl -------------------------------------------------
431 dnl Test if the getnameinfo function is available,
432 dnl and check the types of five of its arguments.
433 dnl If the function succeeds HAVE_GETNAMEINFO will be
434 dnl defined, defining the types of the arguments in
435 dnl GETNAMEINFO_TYPE_ARG1, GETNAMEINFO_TYPE_ARG2,
436 dnl GETNAMEINFO_TYPE_ARG46 and GETNAMEINFO_TYPE_ARG7,
437 dnl and also defining the type qualifier of first
438 dnl argument in GETNAMEINFO_QUAL_ARG1.
439
440 AC_DEFUN([CURL_CHECK_FUNC_GETNAMEINFO], [
441 AC_REQUIRE([CURL_CHECK_HEADER_WS2TCPIP])dnl
442 AC_CHECK_HEADERS(sys/types.h sys/socket.h netdb.h)
443 #
444 AC_MSG_CHECKING([for getnameinfo])
445 AC_LINK_IFELSE([
446 AC_LANG_FUNC_LINK_TRY([getnameinfo])
447 ],[
448 AC_MSG_RESULT([yes])
449 curl_cv_getnameinfo="yes"
450 ],[
451 AC_MSG_RESULT([no])
452 curl_cv_getnameinfo="no"
453 ])
454 #
455 if test "$curl_cv_getnameinfo" != "yes"; then
456 AC_MSG_CHECKING([deeper for getnameinfo])
457 AC_LINK_IFELSE([
458 AC_LANG_PROGRAM([[
459 ]],[[
460 getnameinfo();
461 ]])
462 ],[
463 AC_MSG_RESULT([yes])
464 curl_cv_getnameinfo="yes"
465 ],[
466 AC_MSG_RESULT([but still no])
467 curl_cv_getnameinfo="no"
468 ])
469 fi
470 #
471 if test "$curl_cv_getnameinfo" != "yes"; then
472 AC_MSG_CHECKING([deeper and deeper for getnameinfo])
473 AC_LINK_IFELSE([
474 AC_LANG_PROGRAM([[
475 #undef inline
476 #ifdef HAVE_WINDOWS_H
477 #ifndef WIN32_LEAN_AND_MEAN
478 #define WIN32_LEAN_AND_MEAN
479 #endif
480 #include <windows.h>
481 #ifdef HAVE_WINSOCK2_H
482 #include <winsock2.h>
483 #ifdef HAVE_WS2TCPIP_H
484 #include <ws2tcpip.h>
485 #endif
486 #endif
487 #else
488 #ifdef HAVE_SYS_TYPES_H
489 #include <sys/types.h>
490 #endif
491 #ifdef HAVE_SYS_SOCKET_H
492 #include <sys/socket.h>
493 #endif
494 #ifdef HAVE_NETDB_H
495 #include <netdb.h>
496 #endif
497 #endif
498 ]],[[
499 getnameinfo(0, 0, 0, 0, 0, 0, 0);
500 ]])
501 ],[
502 AC_MSG_RESULT([yes])
503 curl_cv_getnameinfo="yes"
504 ],[
505 AC_MSG_RESULT([but still no])
506 curl_cv_getnameinfo="no"
507 ])
508 fi
509 #
510 if test "$curl_cv_getnameinfo" = "yes"; then
511 AC_CACHE_CHECK([types of arguments for getnameinfo],
512 [curl_cv_func_getnameinfo_args], [
513 curl_cv_func_getnameinfo_args="unknown"
514 for gni_arg1 in 'struct sockaddr *' 'const struct sockaddr *' 'void *'; do
515 for gni_arg2 in 'socklen_t' 'size_t' 'int'; do
516 for gni_arg46 in 'size_t' 'int' 'socklen_t' 'unsigned int' 'DWORD'; do
517 for gni_arg7 in 'int' 'unsigned int'; do
518 if test "$curl_cv_func_getnameinfo_args" = "unknown"; then
519 AC_COMPILE_IFELSE([
520 AC_LANG_PROGRAM([[
521 #undef inline
522 #ifdef HAVE_WINDOWS_H
523 #ifndef WIN32_LEAN_AND_MEAN
524 #define WIN32_LEAN_AND_MEAN
525 #endif
526 #if (!defined(_WIN32_WINNT)) || (_WIN32_WINNT < 0x0501)
527 #undef _WIN32_WINNT
528 #define _WIN32_WINNT 0x0501
529 #endif
530 #include <windows.h>
531 #ifdef HAVE_WINSOCK2_H
532 #include <winsock2.h>
533 #ifdef HAVE_WS2TCPIP_H
534 #include <ws2tcpip.h>
535 #endif
536 #endif
537 #define GNICALLCONV WSAAPI
538 #else
539 #ifdef HAVE_SYS_TYPES_H
540 #include <sys/types.h>
541 #endif
542 #ifdef HAVE_SYS_SOCKET_H
543 #include <sys/socket.h>
544 #endif
545 #ifdef HAVE_NETDB_H
546 #include <netdb.h>
547 #endif
548 #define GNICALLCONV
549 #endif
550 extern int GNICALLCONV getnameinfo($gni_arg1, $gni_arg2,
551 char *, $gni_arg46,
552 char *, $gni_arg46,
553 $gni_arg7);
554 ]],[[
555 $gni_arg2 salen=0;
556 $gni_arg46 hostlen=0;
557 $gni_arg46 servlen=0;
558 $gni_arg7 flags=0;
559 int res = getnameinfo(0, salen, 0, hostlen, 0, servlen, flags);
560 ]])
561 ],[
562 curl_cv_func_getnameinfo_args="$gni_arg1,$gni_arg2,$gni_arg46,$gni_arg7"
563 ])
564 fi
565 done
566 done
567 done
568 done
569 ]) # AC-CACHE-CHECK
570 if test "$curl_cv_func_getnameinfo_args" = "unknown"; then
571 AC_MSG_WARN([Cannot find proper types to use for getnameinfo args])
572 AC_MSG_WARN([HAVE_GETNAMEINFO will not be defined])
573 else
574 gni_prev_IFS=$IFS; IFS=','
575 set dummy `echo "$curl_cv_func_getnameinfo_args" | sed 's/\*/\*/g'`
576 IFS=$gni_prev_IFS
577 shift
578 #
579 gni_qual_type_arg1=$[1]
580 #
581 AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG2, $[2],
582 [Define to the type of arg 2 for getnameinfo.])
583 AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG46, $[3],
584 [Define to the type of args 4 and 6 for getnameinfo.])
585 AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG7, $[4],
586 [Define to the type of arg 7 for getnameinfo.])
587 #
588 prev_sh_opts=$-
589 #
590 case $prev_sh_opts in
591 *f*)
592 ;;
593 *)
594 set -f
595 ;;
596 esac
597 #
598 case "$gni_qual_type_arg1" in
599 const*)
600 gni_qual_arg1=const
601 gni_type_arg1=`echo $gni_qual_type_arg1 | sed 's/^const //'`
602 ;;
603 *)
604 gni_qual_arg1=
605 gni_type_arg1=$gni_qual_type_arg1
606 ;;
607 esac
608 #
609 AC_DEFINE_UNQUOTED(GETNAMEINFO_QUAL_ARG1, $gni_qual_arg1,
610 [Define to the type qualifier of arg 1 for getnameinfo.])
611 AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG1, $gni_type_arg1,
612 [Define to the type of arg 1 for getnameinfo.])
613 #
614 case $prev_sh_opts in
615 *f*)
616 ;;
617 *)
618 set +f
619 ;;
620 esac
621 #
622 AC_DEFINE_UNQUOTED(HAVE_GETNAMEINFO, 1,
623 [Define to 1 if you have the getnameinfo function.])
624 ac_cv_func_getnameinfo="yes"
625 fi
626 fi
627 ])
628
629
630 dnl TYPE_SOCKADDR_STORAGE
631 dnl -------------------------------------------------
632 dnl Check for struct sockaddr_storage. Most IPv6-enabled
633 dnl hosts have it, but AIX 4.3 is one known exception.
634
635 AC_DEFUN([TYPE_SOCKADDR_STORAGE],
636 [
637 AC_CHECK_TYPE([struct sockaddr_storage],
638 AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE, 1,
639 [if struct sockaddr_storage is defined]), ,
640 [
641 #undef inline
642 #ifdef HAVE_WINDOWS_H
643 #ifndef WIN32_LEAN_AND_MEAN
644 #define WIN32_LEAN_AND_MEAN
645 #endif
646 #include <windows.h>
647 #ifdef HAVE_WINSOCK2_H
648 #include <winsock2.h>
649 #endif
650 #else
651 #ifdef HAVE_SYS_TYPES_H
652 #include <sys/types.h>
653 #endif
654 #ifdef HAVE_SYS_SOCKET_H
655 #include <sys/socket.h>
656 #endif
657 #ifdef HAVE_NETINET_IN_H
658 #include <netinet/in.h>
659 #endif
660 #ifdef HAVE_ARPA_INET_H
661 #include <arpa/inet.h>
662 #endif
663 #endif
664 ])
665 ])
666
667
668 dnl CURL_CHECK_NI_WITHSCOPEID
669 dnl -------------------------------------------------
670 dnl Check for working NI_WITHSCOPEID in getnameinfo()
671
672 AC_DEFUN([CURL_CHECK_NI_WITHSCOPEID], [
673 AC_REQUIRE([CURL_CHECK_FUNC_GETNAMEINFO])dnl
674 AC_REQUIRE([TYPE_SOCKADDR_STORAGE])dnl
675 AC_CHECK_HEADERS(stdio.h sys/types.h sys/socket.h \
676 netdb.h netinet/in.h arpa/inet.h)
677 #
678 AC_CACHE_CHECK([for working NI_WITHSCOPEID],
679 [ac_cv_working_ni_withscopeid], [
680 AC_RUN_IFELSE([
681 AC_LANG_PROGRAM([[
682 #ifdef HAVE_STDLIB_H
683 #include <stdlib.h>
684 #endif
685 #ifdef HAVE_STDIO_H
686 #include <stdio.h>
687 #endif
688 #ifdef HAVE_SYS_TYPES_H
689 #include <sys/types.h>
690 #endif
691 #ifdef HAVE_SYS_SOCKET_H
692 #include <sys/socket.h>
693 #endif
694 #ifdef HAVE_NETDB_H
695 #include <netdb.h>
696 #endif
697 #ifdef HAVE_NETINET_IN_H
698 #include <netinet/in.h>
699 #endif
700 #ifdef HAVE_ARPA_INET_H
701 #include <arpa/inet.h>
702 #endif
703 ]],[[
704 #if defined(NI_WITHSCOPEID) && defined(HAVE_GETNAMEINFO)
705 #ifdef HAVE_STRUCT_SOCKADDR_STORAGE
706 struct sockaddr_storage sa;
707 #else
708 unsigned char sa[256];
709 #endif
710 char hostbuf[NI_MAXHOST];
711 int rc;
712 GETNAMEINFO_TYPE_ARG2 salen = (GETNAMEINFO_TYPE_ARG2)sizeof(sa);
713 GETNAMEINFO_TYPE_ARG46 hostlen = (GETNAMEINFO_TYPE_ARG46)sizeof(hostbuf);
714 GETNAMEINFO_TYPE_ARG7 flags = NI_NUMERICHOST | NI_NUMERICSERV | NI_WITHSCOPEID;
715 int fd = socket(AF_INET6, SOCK_STREAM, 0);
716 if(fd < 0) {
717 perror("socket()");
718 return 1; /* Error creating socket */
719 }
720 rc = getsockname(fd, (GETNAMEINFO_TYPE_ARG1)&sa, &salen);
721 if(rc) {
722 perror("getsockname()");
723 return 2; /* Error retrieving socket name */
724 }
725 rc = getnameinfo((GETNAMEINFO_TYPE_ARG1)&sa, salen, hostbuf, hostlen, NULL, 0, flags);
726 if(rc) {
727 printf("rc = %s\n", gai_strerror(rc));
728 return 3; /* Error translating socket address */
729 }
730 return 0; /* Ok, NI_WITHSCOPEID works */
731 #else
732 return 4; /* Error, NI_WITHSCOPEID not defined or no getnameinfo() */
733 #endif
734 ]]) # AC-LANG-PROGRAM
735 ],[
736 # Exit code == 0. Program worked.
737 ac_cv_working_ni_withscopeid="yes"
738 ],[
739 # Exit code != 0. Program failed.
740 ac_cv_working_ni_withscopeid="no"
741 ],[
742 # Program is not run when cross-compiling. So we assume
743 # NI_WITHSCOPEID will work if we are able to compile it.
744 AC_COMPILE_IFELSE([
745 AC_LANG_PROGRAM([[
746 #include <sys/types.h>
747 #include <sys/socket.h>
748 #include <netdb.h>
749 ]],[[
750 unsigned int dummy= NI_NUMERICHOST | NI_NUMERICSERV | NI_WITHSCOPEID;
751 ]])
752 ],[
753 ac_cv_working_ni_withscopeid="yes"
754 ],[
755 ac_cv_working_ni_withscopeid="no"
756 ]) # AC-COMPILE-IFELSE
757 ]) # AC-RUN-IFELSE
758 ]) # AC-CACHE-CHECK
759 case "$ac_cv_working_ni_withscopeid" in
760 yes)
761 AC_DEFINE(HAVE_NI_WITHSCOPEID, 1,
762 [Define to 1 if NI_WITHSCOPEID exists and works.])
763 ;;
764 esac
765 ])
766
767
768 dnl CURL_CHECK_FUNC_RECV
769 dnl -------------------------------------------------
770 dnl Test if the socket recv() function is available,
771 dnl and check its return type and the types of its
772 dnl arguments. If the function succeeds HAVE_RECV
773 dnl will be defined, defining the types of the arguments
774 dnl in RECV_TYPE_ARG1, RECV_TYPE_ARG2, RECV_TYPE_ARG3
775 dnl and RECV_TYPE_ARG4, defining the type of the function
776 dnl return value in RECV_TYPE_RETV.
777
778 AC_DEFUN([CURL_CHECK_FUNC_RECV], [
779 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl
780 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
781 AC_CHECK_HEADERS(sys/types.h sys/socket.h)
782 #
783 AC_MSG_CHECKING([for recv])
784 AC_LINK_IFELSE([
785 AC_LANG_PROGRAM([[
786 #undef inline
787 #ifdef HAVE_WINDOWS_H
788 #ifndef WIN32_LEAN_AND_MEAN
789 #define WIN32_LEAN_AND_MEAN
790 #endif
791 #include <windows.h>
792 #ifdef HAVE_WINSOCK2_H
793 #include <winsock2.h>
794 #else
795 #ifdef HAVE_WINSOCK_H
796 #include <winsock.h>
797 #endif
798 #endif
799 #else
800 #ifdef HAVE_SYS_TYPES_H
801 #include <sys/types.h>
802 #endif
803 #ifdef HAVE_SYS_SOCKET_H
804 #include <sys/socket.h>
805 #endif
806 #endif
807 ]],[[
808 recv(0, 0, 0, 0);
809 ]])
810 ],[
811 AC_MSG_RESULT([yes])
812 curl_cv_recv="yes"
813 ],[
814 AC_MSG_RESULT([no])
815 curl_cv_recv="no"
816 ])
817 #
818 if test "$curl_cv_recv" = "yes"; then
819 AC_CACHE_CHECK([types of args and return type for recv],
820 [curl_cv_func_recv_args], [
821 curl_cv_func_recv_args="unknown"
822 for recv_retv in 'int' 'ssize_t'; do
823 for recv_arg1 in 'int' 'ssize_t' 'SOCKET'; do
824 for recv_arg2 in 'char *' 'void *'; do
825 for recv_arg3 in 'size_t' 'int' 'socklen_t' 'unsigned int'; do
826 for recv_arg4 in 'int' 'unsigned int'; do
827 if test "$curl_cv_func_recv_args" = "unknown"; then
828 AC_COMPILE_IFELSE([
829 AC_LANG_PROGRAM([[
830 #undef inline
831 #ifdef HAVE_WINDOWS_H
832 #ifndef WIN32_LEAN_AND_MEAN
833 #define WIN32_LEAN_AND_MEAN
834 #endif
835 #include <windows.h>
836 #ifdef HAVE_WINSOCK2_H
837 #include <winsock2.h>
838 #else
839 #ifdef HAVE_WINSOCK_H
840 #include <winsock.h>
841 #endif
842 #endif
843 #define RECVCALLCONV PASCAL
844 #else
845 #ifdef HAVE_SYS_TYPES_H
846 #include <sys/types.h>
847 #endif
848 #ifdef HAVE_SYS_SOCKET_H
849 #include <sys/socket.h>
850 #endif
851 #define RECVCALLCONV
852 #endif
853 extern $recv_retv RECVCALLCONV
854 recv($recv_arg1, $recv_arg2, $recv_arg3, $recv_arg4);
855 ]],[[
856 $recv_arg1 s=0;
857 $recv_arg2 buf=0;
858 $recv_arg3 len=0;
859 $recv_arg4 flags=0;
860 $recv_retv res = recv(s, buf, len, flags);
861 ]])
862 ],[
863 curl_cv_func_recv_args="$recv_arg1,$recv_arg2,$recv_arg3,$recv_arg4,$recv_retv"
864 ])
865 fi
866 done
867 done
868 done
869 done
870 done
871 ]) # AC-CACHE-CHECK
872 if test "$curl_cv_func_recv_args" = "unknown"; then
873 AC_MSG_ERROR([Cannot find proper types to use for recv args])
874 else
875 recv_prev_IFS=$IFS; IFS=','
876 set dummy `echo "$curl_cv_func_recv_args" | sed 's/\*/\*/g'`
877 IFS=$recv_prev_IFS
878 shift
879 #
880 AC_DEFINE_UNQUOTED(RECV_TYPE_ARG1, $[1],
881 [Define to the type of arg 1 for recv.])
882 AC_DEFINE_UNQUOTED(RECV_TYPE_ARG2, $[2],
883 [Define to the type of arg 2 for recv.])
884 AC_DEFINE_UNQUOTED(RECV_TYPE_ARG3, $[3],
885 [Define to the type of arg 3 for recv.])
886 AC_DEFINE_UNQUOTED(RECV_TYPE_ARG4, $[4],
887 [Define to the type of arg 4 for recv.])
888 AC_DEFINE_UNQUOTED(RECV_TYPE_RETV, $[5],
889 [Define to the function return type for recv.])
890 #
891 AC_DEFINE_UNQUOTED(HAVE_RECV, 1,
892 [Define to 1 if you have the recv function.])
893 ac_cv_func_recv="yes"
894 fi
895 else
896 AC_MSG_ERROR([Unable to link function recv])
897 fi
898 ])
899
900
901 dnl CURL_CHECK_FUNC_SEND
902 dnl -------------------------------------------------
903 dnl Test if the socket send() function is available,
904 dnl and check its return type and the types of its
905 dnl arguments. If the function succeeds HAVE_SEND
906 dnl will be defined, defining the types of the arguments
907 dnl in SEND_TYPE_ARG1, SEND_TYPE_ARG2, SEND_TYPE_ARG3
908 dnl and SEND_TYPE_ARG4, defining the type of the function
909 dnl return value in SEND_TYPE_RETV, and also defining the
910 dnl type qualifier of second argument in SEND_QUAL_ARG2.
911
912 AC_DEFUN([CURL_CHECK_FUNC_SEND], [
913 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl
914 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
915 AC_CHECK_HEADERS(sys/types.h sys/socket.h)
916 #
917 AC_MSG_CHECKING([for send])
918 AC_LINK_IFELSE([
919 AC_LANG_PROGRAM([[
920 #undef inline
921 #ifdef HAVE_WINDOWS_H
922 #ifndef WIN32_LEAN_AND_MEAN
923 #define WIN32_LEAN_AND_MEAN
924 #endif
925 #include <windows.h>
926 #ifdef HAVE_WINSOCK2_H
927 #include <winsock2.h>
928 #else
929 #ifdef HAVE_WINSOCK_H
930 #include <winsock.h>
931 #endif
932 #endif
933 #else
934 #ifdef HAVE_SYS_TYPES_H
935 #include <sys/types.h>
936 #endif
937 #ifdef HAVE_SYS_SOCKET_H
938 #include <sys/socket.h>
939 #endif
940 #endif
941 ]],[[
942 send(0, 0, 0, 0);
943 ]])
944 ],[
945 AC_MSG_RESULT([yes])
946 curl_cv_send="yes"
947 ],[
948 AC_MSG_RESULT([no])
949 curl_cv_send="no"
950 ])
951 #
952 if test "$curl_cv_send" = "yes"; then
953 AC_CACHE_CHECK([types of args and return type for send],
954 [curl_cv_func_send_args], [
955 curl_cv_func_send_args="unknown"
956 for send_retv in 'int' 'ssize_t'; do
957 for send_arg1 in 'int' 'ssize_t' 'SOCKET'; do
958 for send_arg2 in 'char *' 'void *' 'const char *' 'const void *'; do
959 for send_arg3 in 'size_t' 'int' 'socklen_t' 'unsigned int'; do
960 for send_arg4 in 'int' 'unsigned int'; do
961 if test "$curl_cv_func_send_args" = "unknown"; then
962 AC_COMPILE_IFELSE([
963 AC_LANG_PROGRAM([[
964 #undef inline
965 #ifdef HAVE_WINDOWS_H
966 #ifndef WIN32_LEAN_AND_MEAN
967 #define WIN32_LEAN_AND_MEAN
968 #endif
969 #include <windows.h>
970 #ifdef HAVE_WINSOCK2_H
971 #include <winsock2.h>
972 #else
973 #ifdef HAVE_WINSOCK_H
974 #include <winsock.h>
975 #endif
976 #endif
977 #define SENDCALLCONV PASCAL
978 #else
979 #ifdef HAVE_SYS_TYPES_H
980 #include <sys/types.h>
981 #endif
982 #ifdef HAVE_SYS_SOCKET_H
983 #include <sys/socket.h>
984 #endif
985 #define SENDCALLCONV
986 #endif
987 extern $send_retv SENDCALLCONV
988 send($send_arg1, $send_arg2, $send_arg3, $send_arg4);
989 ]],[[
990 $send_arg1 s=0;
991 $send_arg3 len=0;
992 $send_arg4 flags=0;
993 $send_retv res = send(s, 0, len, flags);
994 ]])
995 ],[
996 curl_cv_func_send_args="$send_arg1,$send_arg2,$send_arg3,$send_arg4,$send_retv"
997 ])
998 fi
999 done
1000 done
1001 done
1002 done
1003 done
1004 ]) # AC-CACHE-CHECK
1005 if test "$curl_cv_func_send_args" = "unknown"; then
1006 AC_MSG_ERROR([Cannot find proper types to use for send args])
1007 else
1008 send_prev_IFS=$IFS; IFS=','
1009 set dummy `echo "$curl_cv_func_send_args" | sed 's/\*/\*/g'`
1010 IFS=$send_prev_IFS
1011 shift
1012 #
1013 send_qual_type_arg2=$[2]
1014 #
1015 AC_DEFINE_UNQUOTED(SEND_TYPE_ARG1, $[1],
1016 [Define to the type of arg 1 for send.])
1017 AC_DEFINE_UNQUOTED(SEND_TYPE_ARG3, $[3],
1018 [Define to the type of arg 3 for send.])
1019 AC_DEFINE_UNQUOTED(SEND_TYPE_ARG4, $[4],
1020 [Define to the type of arg 4 for send.])
1021 AC_DEFINE_UNQUOTED(SEND_TYPE_RETV, $[5],
1022 [Define to the function return type for send.])
1023 #
1024 prev_sh_opts=$-
1025 #
1026 case $prev_sh_opts in
1027 *f*)
1028 ;;
1029 *)
1030 set -f
1031 ;;
1032 esac
1033 #
1034 case "$send_qual_type_arg2" in
1035 const*)
1036 send_qual_arg2=const
1037 send_type_arg2=`echo $send_qual_type_arg2 | sed 's/^const //'`
1038 ;;
1039 *)
1040 send_qual_arg2=
1041 send_type_arg2=$send_qual_type_arg2
1042 ;;
1043 esac
1044 #
1045 AC_DEFINE_UNQUOTED(SEND_QUAL_ARG2, $send_qual_arg2,
1046 [Define to the type qualifier of arg 2 for send.])
1047 AC_DEFINE_UNQUOTED(SEND_TYPE_ARG2, $send_type_arg2,
1048 [Define to the type of arg 2 for send.])
1049 #
1050 case $prev_sh_opts in
1051 *f*)
1052 ;;
1053 *)
1054 set +f
1055 ;;
1056 esac
1057 #
1058 AC_DEFINE_UNQUOTED(HAVE_SEND, 1,
1059 [Define to 1 if you have the send function.])
1060 ac_cv_func_send="yes"
1061 fi
1062 else
1063 AC_MSG_ERROR([Unable to link function send])
1064 fi
1065 ])
1066
1067
1068 dnl CURL_CHECK_FUNC_RECVFROM
1069 dnl -------------------------------------------------
1070 dnl Test if the socket recvfrom() function is available,
1071 dnl and check its return type and the types of its
1072 dnl arguments. If the function succeeds HAVE_RECVFROM
1073 dnl will be defined, defining the types of the arguments
1074 dnl in RECVFROM_TYPE_ARG1, RECVFROM_TYPE_ARG2, and so on
1075 dnl to RECVFROM_TYPE_ARG6, defining also the type of the
1076 dnl function return value in RECVFROM_TYPE_RETV.
1077 dnl Notice that the types returned for pointer arguments
1078 dnl will actually be the type pointed by the pointer.
1079
1080 AC_DEFUN([CURL_CHECK_FUNC_RECVFROM], [
1081 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl
1082 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
1083 AC_CHECK_HEADERS(sys/types.h sys/socket.h)
1084 #
1085 AC_MSG_CHECKING([for recvfrom])
1086 AC_LINK_IFELSE([
1087 AC_LANG_PROGRAM([[
1088 #undef inline
1089 #ifdef HAVE_WINDOWS_H
1090 #ifndef WIN32_LEAN_AND_MEAN
1091 #define WIN32_LEAN_AND_MEAN
1092 #endif
1093 #include <windows.h>
1094 #ifdef HAVE_WINSOCK2_H
1095 #include <winsock2.h>
1096 #else
1097 #ifdef HAVE_WINSOCK_H
1098 #include <winsock.h>
1099 #endif
1100 #endif
1101 #else
1102 #ifdef HAVE_SYS_TYPES_H
1103 #include <sys/types.h>
1104 #endif
1105 #ifdef HAVE_SYS_SOCKET_H
1106 #include <sys/socket.h>
1107 #endif
1108 #endif
1109 ]],[[
1110 recvfrom(0, 0, 0, 0, 0, 0);
1111 ]])
1112 ],[
1113 AC_MSG_RESULT([yes])
1114 curl_cv_recvfrom="yes"
1115 ],[
1116 AC_MSG_RESULT([no])
1117 curl_cv_recvfrom="no"
1118 ])
1119 #
1120 if test "$curl_cv_recvfrom" = "yes"; then
1121 AC_CACHE_CHECK([types of args and return type for recvfrom],
1122 [curl_cv_func_recvfrom_args], [
1123 curl_cv_func_recvfrom_args="unknown"
1124 for recvfrom_retv in 'int' 'ssize_t'; do
1125 for recvfrom_arg1 in 'int' 'ssize_t' 'SOCKET'; do
1126 for recvfrom_arg2 in 'char *' 'void *'; do
1127 for recvfrom_arg3 in 'size_t' 'int' 'socklen_t' 'unsigned int'; do
1128 for recvfrom_arg4 in 'int' 'unsigned int'; do
1129 for recvfrom_arg5 in 'struct sockaddr *' 'void *' 'const struct sockaddr *'; do
1130 for recvfrom_arg6 in 'socklen_t *' 'int *' 'unsigned int *' 'size_t *' 'void *'; do
1131 if test "$curl_cv_func_recvfrom_args" = "unknown"; then
1132 AC_COMPILE_IFELSE([
1133 AC_LANG_PROGRAM([[
1134 #undef inline
1135 #ifdef HAVE_WINDOWS_H
1136 #ifndef WIN32_LEAN_AND_MEAN
1137 #define WIN32_LEAN_AND_MEAN
1138 #endif
1139 #include <windows.h>
1140 #ifdef HAVE_WINSOCK2_H
1141 #include <winsock2.h>
1142 #else
1143 #ifdef HAVE_WINSOCK_H
1144 #include <winsock.h>
1145 #endif
1146 #endif
1147 #define RECVFROMCALLCONV PASCAL
1148 #else
1149 #ifdef HAVE_SYS_TYPES_H
1150 #include <sys/types.h>
1151 #endif
1152 #ifdef HAVE_SYS_SOCKET_H
1153 #include <sys/socket.h>
1154 #endif
1155 #define RECVFROMCALLCONV
1156 #endif
1157 extern $recvfrom_retv RECVFROMCALLCONV
1158 recvfrom($recvfrom_arg1, $recvfrom_arg2,
1159 $recvfrom_arg3, $recvfrom_arg4,
1160 $recvfrom_arg5, $recvfrom_arg6);
1161 ]],[[
1162 $recvfrom_arg1 s=0;
1163 $recvfrom_arg2 buf=0;
1164 $recvfrom_arg3 len=0;
1165 $recvfrom_arg4 flags=0;
1166 $recvfrom_arg5 addr=0;
1167 $recvfrom_arg6 addrlen=0;
1168 $recvfrom_retv res=0;
1169 res = recvfrom(s, buf, len, flags, addr, addrlen);
1170 ]])
1171 ],[
1172 curl_cv_func_recvfrom_args="$recvfrom_arg1,$recvfrom_arg2,$recvfrom_arg3,$recvfrom_arg4,$recvfrom_arg5,$recvfrom_arg6,$recvfrom_retv"
1173 ])
1174 fi
1175 done
1176 done
1177 done
1178 done
1179 done
1180 done
1181 done
1182 ]) # AC-CACHE-CHECK
1183 # Nearly last minute change for this release starts here
1184 AC_DEFINE_UNQUOTED(HAVE_RECVFROM, 1,
1185 [Define to 1 if you have the recvfrom function.])
1186 ac_cv_func_recvfrom="yes"
1187 # Nearly last minute change for this release ends here
1188 if test "$curl_cv_func_recvfrom_args" = "unknown"; then
1189 AC_MSG_WARN([Cannot find proper types to use for recvfrom args])
1190 else
1191 recvfrom_prev_IFS=$IFS; IFS=','
1192 set dummy `echo "$curl_cv_func_recvfrom_args" | sed 's/\*/\*/g'`
1193 IFS=$recvfrom_prev_IFS
1194 shift
1195 #
1196 recvfrom_ptrt_arg2=$[2]
1197 recvfrom_qual_ptrt_arg5=$[5]
1198 recvfrom_ptrt_arg6=$[6]
1199 #
1200 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG1, $[1],
1201 [Define to the type of arg 1 for recvfrom.])
1202 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG3, $[3],
1203 [Define to the type of arg 3 for recvfrom.])
1204 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG4, $[4],
1205 [Define to the type of arg 4 for recvfrom.])
1206 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_RETV, $[7],
1207 [Define to the function return type for recvfrom.])
1208 #
1209 prev_sh_opts=$-
1210 #
1211 case $prev_sh_opts in
1212 *f*)
1213 ;;
1214 *)
1215 set -f
1216 ;;
1217 esac
1218 #
1219 case "$recvfrom_qual_ptrt_arg5" in
1220 const*)
1221 recvfrom_qual_arg5=const
1222 recvfrom_ptrt_arg5=`echo $recvfrom_qual_ptrt_arg5 | sed 's/^const //'`
1223 ;;
1224 *)
1225 recvfrom_qual_arg5=
1226 recvfrom_ptrt_arg5=$recvfrom_qual_ptrt_arg5
1227 ;;
1228 esac
1229 #
1230 recvfrom_type_arg2=`echo $recvfrom_ptrt_arg2 | sed 's/ \*//'`
1231 recvfrom_type_arg5=`echo $recvfrom_ptrt_arg5 | sed 's/ \*//'`
1232 recvfrom_type_arg6=`echo $recvfrom_ptrt_arg6 | sed 's/ \*//'`
1233 #
1234 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG2, $recvfrom_type_arg2,
1235 [Define to the type pointed by arg 2 for recvfrom.])
1236 AC_DEFINE_UNQUOTED(RECVFROM_QUAL_ARG5, $recvfrom_qual_arg5,
1237 [Define to the type qualifier pointed by arg 5 for recvfrom.])
1238 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG5, $recvfrom_type_arg5,
1239 [Define to the type pointed by arg 5 for recvfrom.])
1240 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG6, $recvfrom_type_arg6,
1241 [Define to the type pointed by arg 6 for recvfrom.])
1242 #
1243 if test "$recvfrom_type_arg2" = "void"; then
1244 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG2_IS_VOID, 1,
1245 [Define to 1 if the type pointed by arg 2 for recvfrom is void.])
1246 fi
1247 if test "$recvfrom_type_arg5" = "void"; then
1248 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG5_IS_VOID, 1,
1249 [Define to 1 if the type pointed by arg 5 for recvfrom is void.])
1250 fi
1251 if test "$recvfrom_type_arg6" = "void"; then
1252 AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG6_IS_VOID, 1,
1253 [Define to 1 if the type pointed by arg 6 for recvfrom is void.])
1254 fi
1255 #
1256 case $prev_sh_opts in
1257 *f*)
1258 ;;
1259 *)
1260 set +f
1261 ;;
1262 esac
1263 #
1264 AC_DEFINE_UNQUOTED(HAVE_RECVFROM, 1,
1265 [Define to 1 if you have the recvfrom function.])
1266 ac_cv_func_recvfrom="yes"
1267 fi
1268 else
1269 AC_MSG_WARN([Unable to link function recvfrom])
1270 AC_MSG_WARN([Your system will be vulnerable to some forms of DNS cache poisoning])
1271 fi
1272 ])
1273
1274
1275 dnl CURL_CHECK_MSG_NOSIGNAL
1276 dnl -------------------------------------------------
1277 dnl Check for MSG_NOSIGNAL
1278
1279 AC_DEFUN([CURL_CHECK_MSG_NOSIGNAL], [
1280 AC_CHECK_HEADERS(sys/types.h sys/socket.h)
1281 AC_CACHE_CHECK([for MSG_NOSIGNAL], [ac_cv_msg_nosignal], [
1282 AC_COMPILE_IFELSE([
1283 AC_LANG_PROGRAM([[
1284 #undef inline
1285 #ifdef HAVE_WINDOWS_H
1286 #ifndef WIN32_LEAN_AND_MEAN
1287 #define WIN32_LEAN_AND_MEAN
1288 #endif
1289 #include <windows.h>
1290 #ifdef HAVE_WINSOCK2_H
1291 #include <winsock2.h>
1292 #else
1293 #ifdef HAVE_WINSOCK_H
1294 #include <winsock.h>
1295 #endif
1296 #endif
1297 #else
1298 #ifdef HAVE_SYS_TYPES_H
1299 #include <sys/types.h>
1300 #endif
1301 #ifdef HAVE_SYS_SOCKET_H
1302 #include <sys/socket.h>
1303 #endif
1304 #endif
1305 ]],[[
1306 int flag=MSG_NOSIGNAL;
1307 ]])
1308 ],[
1309 ac_cv_msg_nosignal="yes"
1310 ],[
1311 ac_cv_msg_nosignal="no"
1312 ])
1313 ])
1314 case "$ac_cv_msg_nosignal" in
1315 yes)
1316 AC_DEFINE_UNQUOTED(HAVE_MSG_NOSIGNAL, 1,
1317 [Define to 1 if you have the MSG_NOSIGNAL flag.])
1318 ;;
1319 esac
1320 ])
1321
1322
1323 dnl CURL_CHECK_STRUCT_TIMEVAL
1324 dnl -------------------------------------------------
1325 dnl Check for timeval struct
1326
1327 AC_DEFUN([CURL_CHECK_STRUCT_TIMEVAL], [
1328 AC_REQUIRE([AC_HEADER_TIME])dnl
1329 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl
1330 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
1331 AC_CHECK_HEADERS(sys/types.h sys/time.h time.h sys/socket.h)
1332 AC_CACHE_CHECK([for struct timeval], [ac_cv_struct_timeval], [
1333 AC_COMPILE_IFELSE([
1334 AC_LANG_PROGRAM([[
1335 #undef inline
1336 #ifdef HAVE_WINDOWS_H
1337 #ifndef WIN32_LEAN_AND_MEAN
1338 #define WIN32_LEAN_AND_MEAN
1339 #endif
1340 #include <windows.h>
1341 #ifdef HAVE_WINSOCK2_H
1342 #include <winsock2.h>
1343 #else
1344 #ifdef HAVE_WINSOCK_H
1345 #include <winsock.h>
1346 #endif
1347 #endif
1348 #endif
1349 #ifdef HAVE_SYS_TYPES_H
1350 #include <sys/types.h>
1351 #endif
1352 #ifdef HAVE_SYS_TIME_H
1353 #include <sys/time.h>
1354 #ifdef TIME_WITH_SYS_TIME
1355 #include <time.h>
1356 #endif
1357 #else
1358 #ifdef HAVE_TIME_H
1359 #include <time.h>
1360 #endif
1361 #endif
1362 #ifdef HAVE_SYS_SOCKET_H
1363 #include <sys/socket.h>
1364 #endif
1365 ]],[[
1366 struct timeval ts;
1367 ts.tv_sec = 0;
1368 ts.tv_usec = 0;
1369 ]])
1370 ],[
1371 ac_cv_struct_timeval="yes"
1372 ],[
1373 ac_cv_struct_timeval="no"
1374 ])
1375 ])
1376 case "$ac_cv_struct_timeval" in
1377 yes)
1378 AC_DEFINE_UNQUOTED(HAVE_STRUCT_TIMEVAL, 1,
1379 [Define to 1 if you have the timeval struct.])
1380 ;;
1381 esac
1382 ])
1383
1384
1385 dnl TYPE_SIG_ATOMIC_T
1386 dnl -------------------------------------------------
1387 dnl Check if the sig_atomic_t type is available, and
1388 dnl verify if it is already defined as volatile.
1389
1390 AC_DEFUN([TYPE_SIG_ATOMIC_T], [
1391 AC_CHECK_HEADERS(signal.h)
1392 AC_CHECK_TYPE([sig_atomic_t],[
1393 AC_DEFINE(HAVE_SIG_ATOMIC_T, 1,
1394 [Define to 1 if sig_atomic_t is an available typedef.])
1395 ], ,[
1396 #ifdef HAVE_SIGNAL_H
1397 #include <signal.h>
1398 #endif
1399 ])
1400 case "$ac_cv_type_sig_atomic_t" in
1401 yes)
1402 #
1403 AC_MSG_CHECKING([if sig_atomic_t is already defined as volatile])
1404 AC_LINK_IFELSE([
1405 AC_LANG_PROGRAM([[
1406 #ifdef HAVE_SIGNAL_H
1407 #include <signal.h>
1408 #endif
1409 ]],[[
1410 static volatile sig_atomic_t dummy = 0;
1411 ]])
1412 ],[
1413 AC_MSG_RESULT([no])
1414 ac_cv_sig_atomic_t_volatile="no"
1415 ],[
1416 AC_MSG_RESULT([yes])
1417 ac_cv_sig_atomic_t_volatile="yes"
1418 ])
1419 #
1420 if test "$ac_cv_sig_atomic_t_volatile" = "yes"; then
1421 AC_DEFINE(HAVE_SIG_ATOMIC_T_VOLATILE, 1,
1422 [Define to 1 if sig_atomic_t is already defined as volatile.])
1423 fi
1424 ;;
1425 esac
1426 ])
1427
1428
1429 dnl TYPE_IN_ADDR_T
1430 dnl -------------------------------------------------
1431 dnl Check for in_addr_t: it is used to receive the return code of inet_addr()
1432 dnl and a few other things.
1433
1434 AC_DEFUN([TYPE_IN_ADDR_T], [
1435 AC_CHECK_TYPE([in_addr_t], ,[
1436 dnl in_addr_t not available
1437 AC_CACHE_CHECK([for in_addr_t equivalent],
1438 [curl_cv_in_addr_t_equiv], [
1439 curl_cv_in_addr_t_equiv="unknown"
1440 for t in "unsigned long" int size_t unsigned long; do
1441 if test "$curl_cv_in_addr_t_equiv" = "unknown"; then
1442 AC_LINK_IFELSE([
1443 AC_LANG_PROGRAM([[
1444 #undef inline
1445 #ifdef HAVE_WINDOWS_H
1446 #ifndef WIN32_LEAN_AND_MEAN
1447 #define WIN32_LEAN_AND_MEAN
1448 #endif
1449 #include <windows.h>
1450 #ifdef HAVE_WINSOCK2_H
1451 #include <winsock2.h>
1452 #else
1453 #ifdef HAVE_WINSOCK_H
1454 #include <winsock.h>
1455 #endif
1456 #endif
1457 #else
1458 #ifdef HAVE_SYS_TYPES_H
1459 #include <sys/types.h>
1460 #endif
1461 #ifdef HAVE_SYS_SOCKET_H
1462 #include <sys/socket.h>
1463 #endif
1464 #ifdef HAVE_NETINET_IN_H
1465 #include <netinet/in.h>
1466 #endif
1467 #ifdef HAVE_ARPA_INET_H
1468 #include <arpa/inet.h>
1469 #endif
1470 #endif
1471 ]],[[
1472 $t data = inet_addr ("1.2.3.4");
1473 ]])
1474 ],[
1475 curl_cv_in_addr_t_equiv="$t"
1476 ])
1477 fi
1478 done
1479 ])
1480 case "$curl_cv_in_addr_t_equiv" in
1481 unknown)
1482 AC_MSG_ERROR([Cannot find a type to use in place of in_addr_t])
1483 ;;
1484 *)
1485 AC_DEFINE_UNQUOTED(in_addr_t, $curl_cv_in_addr_t_equiv,
1486 [Type to use in place of in_addr_t when system does not provide it.])
1487 ;;
1488 esac
1489 ],[
1490 #undef inline
1491 #ifdef HAVE_WINDOWS_H
1492 #ifndef WIN32_LEAN_AND_MEAN
1493 #define WIN32_LEAN_AND_MEAN
1494 #endif
1495 #include <windows.h>
1496 #ifdef HAVE_WINSOCK2_H
1497 #include <winsock2.h>
1498 #else
1499 #ifdef HAVE_WINSOCK_H
1500 #include <winsock.h>
1501 #endif
1502 #endif
1503 #else
1504 #ifdef HAVE_SYS_TYPES_H
1505 #include <sys/types.h>
1506 #endif
1507 #ifdef HAVE_SYS_SOCKET_H
1508 #include <sys/socket.h>
1509 #endif
1510 #ifdef HAVE_NETINET_IN_H
1511 #include <netinet/in.h>
1512 #endif
1513 #ifdef HAVE_ARPA_INET_H
1514 #include <arpa/inet.h>
1515 #endif
1516 #endif
1517 ])
1518 ])
1519
1520
1521 dnl CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC
1522 dnl -------------------------------------------------
1523 dnl Check if monotonic clock_gettime is available.
1524
1525 AC_DEFUN([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC], [
1526 AC_REQUIRE([AC_HEADER_TIME])dnl
1527 AC_CHECK_HEADERS(sys/types.h sys/time.h time.h)
1528 AC_MSG_CHECKING([for monotonic clock_gettime])
1529 AC_COMPILE_IFELSE([
1530 AC_LANG_PROGRAM([[
1531 #ifdef HAVE_SYS_TYPES_H
1532 #include <sys/types.h>
1533 #endif
1534 #ifdef HAVE_SYS_TIME_H
1535 #include <sys/time.h>
1536 #ifdef TIME_WITH_SYS_TIME
1537 #include <time.h>
1538 #endif
1539 #else
1540 #ifdef HAVE_TIME_H
1541 #include <time.h>
1542 #endif
1543 #endif
1544 ]],[[
1545 struct timespec ts;
1546 (void)clock_gettime(CLOCK_MONOTONIC, &ts);
1547 ]])
1548 ],[
1549 AC_MSG_RESULT([yes])
1550 ac_cv_func_clock_gettime="yes"
1551 ],[
1552 AC_MSG_RESULT([no])
1553 ac_cv_func_clock_gettime="no"
1554 ])
1555 dnl Definition of HAVE_CLOCK_GETTIME_MONOTONIC is intentionally postponed
1556 dnl until library linking and run-time checks for clock_gettime succeed.
1557 ])
1558
1559
1560 dnl CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC
1561 dnl -------------------------------------------------
1562 dnl If monotonic clock_gettime is available then,
1563 dnl check and prepended to LIBS any needed libraries.
1564
1565 AC_DEFUN([CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC], [
1566 AC_REQUIRE([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC])dnl
1567 #
1568 if test "$ac_cv_func_clock_gettime" = "yes"; then
1569 #
1570 AC_MSG_CHECKING([for clock_gettime in libraries])
1571 #
1572 curl_cv_save_LIBS="$LIBS"
1573 curl_cv_gclk_LIBS="unknown"
1574 #
1575 for x_xlibs in '' '-lrt' '-lposix4' ; do
1576 if test "$curl_cv_gclk_LIBS" = "unknown"; then
1577 if test -z "$x_xlibs"; then
1578 LIBS="$curl_cv_save_LIBS"
1579 else
1580 LIBS="$x_xlibs $curl_cv_save_LIBS"
1581 fi
1582 AC_LINK_IFELSE([
1583 AC_LANG_PROGRAM([[
1584 #ifdef HAVE_SYS_TYPES_H
1585 #include <sys/types.h>
1586 #endif
1587 #ifdef HAVE_SYS_TIME_H
1588 #include <sys/time.h>
1589 #ifdef TIME_WITH_SYS_TIME
1590 #include <time.h>
1591 #endif
1592 #else
1593 #ifdef HAVE_TIME_H
1594 #include <time.h>
1595 #endif
1596 #endif
1597 ]],[[
1598 struct timespec ts;
1599 (void)clock_gettime(CLOCK_MONOTONIC, &ts);
1600 ]])
1601 ],[
1602 curl_cv_gclk_LIBS="$x_xlibs"
1603 ])
1604 fi
1605 done
1606 #
1607 LIBS="$curl_cv_save_LIBS"
1608 #
1609 case X-"$curl_cv_gclk_LIBS" in
1610 X-unknown)
1611 AC_MSG_RESULT([cannot find clock_gettime])
1612 AC_MSG_WARN([HAVE_CLOCK_GETTIME_MONOTONIC will not be defined])
1613 ac_cv_func_clock_gettime="no"
1614 ;;
1615 X-)
1616 AC_MSG_RESULT([no additional lib required])
1617 ac_cv_func_clock_gettime="yes"
1618 ;;
1619 *)
1620 if test -z "$curl_cv_save_LIBS"; then
1621 LIBS="$curl_cv_gclk_LIBS"
1622 else
1623 LIBS="$curl_cv_gclk_LIBS $curl_cv_save_LIBS"
1624 fi
1625 AC_MSG_RESULT([$curl_cv_gclk_LIBS])
1626 ac_cv_func_clock_gettime="yes"
1627 ;;
1628 esac
1629 #
1630 dnl only do runtime verification when not cross-compiling
1631 if test "x$cross_compiling" != "xyes" &&
1632 test "$ac_cv_func_clock_gettime" = "yes"; then
1633 AC_MSG_CHECKING([if monotonic clock_gettime works])
1634 AC_RUN_IFELSE([
1635 AC_LANG_PROGRAM([[
1636 #ifdef HAVE_STDLIB_H
1637 #include <stdlib.h>
1638 #endif
1639 #ifdef HAVE_SYS_TYPES_H
1640 #include <sys/types.h>
1641 #endif
1642 #ifdef HAVE_SYS_TIME_H
1643 #include <sys/time.h>
1644 #ifdef TIME_WITH_SYS_TIME
1645 #include <time.h>
1646 #endif
1647 #else
1648 #ifdef HAVE_TIME_H
1649 #include <time.h>
1650 #endif
1651 #endif
1652 ]],[[
1653 struct timespec ts;
1654 if (0 == clock_gettime(CLOCK_MONOTONIC, &ts))
1655 exit(0);
1656 else
1657 exit(1);
1658 ]])
1659 ],[
1660 AC_MSG_RESULT([yes])
1661 ],[
1662 AC_MSG_RESULT([no])
1663 AC_MSG_WARN([HAVE_CLOCK_GETTIME_MONOTONIC will not be defined])
1664 ac_cv_func_clock_gettime="no"
1665 LIBS="$curl_cv_save_LIBS"
1666 ])
1667 fi
1668 #
1669 case "$ac_cv_func_clock_gettime" in
1670 yes)
1671 AC_DEFINE_UNQUOTED(HAVE_CLOCK_GETTIME_MONOTONIC, 1,
1672 [Define to 1 if you have the clock_gettime function and monotonic timer.])
1673 ;;
1674 esac
1675 #
1676 fi
1677 #
1678 ])
1679
1680
1681 dnl CARES_CHECK_LIBS_CONNECT
1682 dnl -------------------------------------------------
1683 dnl Verify if network connect function is already available
1684 dnl using current libraries or if another one is required.
1685
1686 AC_DEFUN([CARES_CHECK_LIBS_CONNECT], [
1687 AC_REQUIRE([CARES_INCLUDES_WINSOCK2])dnl
1688 AC_MSG_CHECKING([for connect in libraries])
1689 tst_connect_save_LIBS="$LIBS"
1690 tst_connect_need_LIBS="unknown"
1691 for tst_lib in '' '-lsocket' ; do
1692 if test "$tst_connect_need_LIBS" = "unknown"; then
1693 LIBS="$tst_lib $tst_connect_save_LIBS"
1694 AC_LINK_IFELSE([
1695 AC_LANG_PROGRAM([[
1696 $cares_includes_winsock2
1697 #ifndef HAVE_WINDOWS_H
1698 int connect(int, void*, int);
1699 #endif
1700 ]],[[
1701 if(0 != connect(0, 0, 0))
1702 return 1;
1703 ]])
1704 ],[
1705 tst_connect_need_LIBS="$tst_lib"
1706 ])
1707 fi
1708 done
1709 LIBS="$tst_connect_save_LIBS"
1710 #
1711 case X-"$tst_connect_need_LIBS" in
1712 X-unknown)
1713 AC_MSG_RESULT([cannot find connect])
1714 AC_MSG_ERROR([cannot find connect function in libraries.])
1715 ;;
1716 X-)
1717 AC_MSG_RESULT([yes])
1718 ;;
1719 *)
1720 AC_MSG_RESULT([$tst_connect_need_LIBS])
1721 LIBS="$tst_connect_need_LIBS $tst_connect_save_LIBS"
1722 ;;
1723 esac
1724 ])
1725
1726
1727 dnl CARES_DEFINE_UNQUOTED (VARIABLE, [VALUE])
1728 dnl -------------------------------------------------
1729 dnl Like AC_DEFINE_UNQUOTED this macro will define a C preprocessor
1730 dnl symbol that can be further used in custom template configuration
1731 dnl files. This macro, unlike AC_DEFINE_UNQUOTED, does not use a third
1732 dnl argument for the description. Symbol definitions done with this
1733 dnl macro are intended to be exclusively used in handcrafted *.h.in
1734 dnl template files. Contrary to what AC_DEFINE_UNQUOTED does, this one
1735 dnl prevents autoheader generation and insertion of symbol template
1736 dnl stub and definition into the first configuration header file. Do
1737 dnl not use this macro as a replacement for AC_DEFINE_UNQUOTED, each
1738 dnl one serves different functional needs.
1739
1740 AC_DEFUN([CARES_DEFINE_UNQUOTED], [
1741 cat >>confdefs.h <<_EOF
1742 [@%:@define] $1 ifelse($#, 2, [$2], 1)
1743 _EOF
1744 ])
1745
1746 dnl CARES_CONFIGURE_ARES_SOCKLEN_T
1747 dnl -------------------------------------------------
1748 dnl Find out suitable ares_socklen_t data type definition and size, making
1749 dnl appropriate definitions for template file ares_build.h.in
1750 dnl to properly configure and use the library.
1751 dnl
1752 dnl The need for the ares_socklen_t definition arises mainly to properly
1753 dnl interface HP-UX systems which on one hand have a typedef'ed socklen_t
1754 dnl data type which is 32 or 64-Bit wide depending on the data model being
1755 dnl used, and that on the other hand is only actually used when interfacing
1756 dnl the X/Open sockets provided in the xnet library.
1757
1758 AC_DEFUN([CARES_CONFIGURE_ARES_SOCKLEN_T], [
1759 AC_REQUIRE([CARES_INCLUDES_WS2TCPIP])dnl
1760 AC_REQUIRE([CARES_INCLUDES_SYS_SOCKET])dnl
1761 AC_REQUIRE([CARES_PREPROCESS_CALLCONV])dnl
1762 #
1763 AC_MSG_CHECKING([for ares_socklen_t data type])
1764 cares_typeof_ares_socklen_t="unknown"
1765 for arg1 in int SOCKET; do
1766 for arg2 in 'struct sockaddr' void; do
1767 for t in socklen_t int size_t 'unsigned int' long 'unsigned long' void; do
1768 if test "$cares_typeof_ares_socklen_t" = "unknown"; then
1769 AC_COMPILE_IFELSE([
1770 AC_LANG_PROGRAM([[
1771 $cares_includes_ws2tcpip
1772 $cares_includes_sys_socket
1773 $cares_preprocess_callconv
1774 extern int FUNCALLCONV getpeername($arg1, $arg2 *, $t *);
1775 ]],[[
1776 $t *lenptr = 0;
1777 if(0 != getpeername(0, 0, lenptr))
1778 return 1;
1779 ]])
1780 ],[
1781 cares_typeof_ares_socklen_t="$t"
1782 ])
1783 fi
1784 done
1785 done
1786 done
1787 for t in socklen_t int; do
1788 if test "$cares_typeof_ares_socklen_t" = "void"; then
1789 AC_COMPILE_IFELSE([
1790 AC_LANG_PROGRAM([[
1791 $cares_includes_sys_socket
1792 typedef $t ares_socklen_t;
1793 ]],[[
1794 ares_socklen_t dummy;
1795 ]])
1796 ],[
1797 cares_typeof_ares_socklen_t="$t"
1798 ])
1799 fi
1800 done
1801 AC_MSG_RESULT([$cares_typeof_ares_socklen_t])
1802 if test "$cares_typeof_ares_socklen_t" = "void" ||
1803 test "$cares_typeof_ares_socklen_t" = "unknown"; then
1804 AC_MSG_ERROR([cannot find data type for ares_socklen_t.])
1805 fi
1806 #
1807 AC_MSG_CHECKING([size of ares_socklen_t])
1808 cares_sizeof_ares_socklen_t="unknown"
1809 cares_pull_headers_socklen_t="unknown"
1810 if test "$ac_cv_header_ws2tcpip_h" = "yes"; then
1811 tst_pull_header_checks='none ws2tcpip'
1812 tst_size_checks='4'
1813 else
1814 tst_pull_header_checks='none systypes syssocket'
1815 tst_size_checks='4 8 2'
1816 fi
1817 for tst_size in $tst_size_checks; do
1818 for tst_pull_headers in $tst_pull_header_checks; do
1819 if test "$cares_sizeof_ares_socklen_t" = "unknown"; then
1820 case $tst_pull_headers in
1821 ws2tcpip)
1822 tmp_includes="$cares_includes_ws2tcpip"
1823 ;;
1824 systypes)
1825 tmp_includes="$cares_includes_sys_types"
1826 ;;
1827 syssocket)
1828 tmp_includes="$cares_includes_sys_socket"
1829 ;;
1830 *)
1831 tmp_includes=""
1832 ;;
1833 esac
1834 AC_COMPILE_IFELSE([
1835 AC_LANG_PROGRAM([[
1836 $tmp_includes
1837 typedef $cares_typeof_ares_socklen_t ares_socklen_t;
1838 typedef char dummy_arr[sizeof(ares_socklen_t) == $tst_size ? 1 : -1];
1839 ]],[[
1840 ares_socklen_t dummy;
1841 ]])
1842 ],[
1843 cares_sizeof_ares_socklen_t="$tst_size"
1844 cares_pull_headers_socklen_t="$tst_pull_headers"
1845 ])
1846 fi
1847 done
1848 done
1849 AC_MSG_RESULT([$cares_sizeof_ares_socklen_t])
1850 if test "$cares_sizeof_ares_socklen_t" = "unknown"; then
1851 AC_MSG_ERROR([cannot find out size of ares_socklen_t.])
1852 fi
1853 #
1854 case $cares_pull_headers_socklen_t in
1855 ws2tcpip)
1856 CARES_DEFINE_UNQUOTED([CARES_PULL_WS2TCPIP_H])
1857 ;;
1858 systypes)
1859 CARES_DEFINE_UNQUOTED([CARES_PULL_SYS_TYPES_H])
1860 ;;
1861 syssocket)
1862 CARES_DEFINE_UNQUOTED([CARES_PULL_SYS_TYPES_H])
1863 CARES_DEFINE_UNQUOTED([CARES_PULL_SYS_SOCKET_H])
1864 ;;
1865 esac
1866 CARES_DEFINE_UNQUOTED([CARES_TYPEOF_ARES_SOCKLEN_T], [$cares_typeof_ares_socklen_t])
1867 CARES_DEFINE_UNQUOTED([CARES_SIZEOF_ARES_SOCKLEN_T], [$cares_sizeof_ares_socklen_t])
1868 ])
1869
1870
1871 dnl This macro determines if the specified struct exists in the specified file
1872 dnl Syntax:
1873 dnl CARES_CHECK_STRUCT(headers, struct name, if found, [if not found])
1874
1875 AC_DEFUN([CARES_CHECK_STRUCT], [
1876 AC_MSG_CHECKING([for struct $2])
1877 AC_TRY_COMPILE([$1],
1878 [
1879 struct $2 struct_instance;
1880 ], ac_struct="yes", ac_found="no")
1881 if test "$ac_struct" = "yes" ; then
1882 AC_MSG_RESULT(yes)
1883 $3
1884 else
1885 AC_MSG_RESULT(no)
1886 $4
1887 fi
1888 ])
1889
1890 dnl This macro determines if the specified constant exists in the specified file
1891 dnl Syntax:
1892 dnl CARES_CHECK_CONSTANT(headers, constant name, if found, [if not found])
1893
1894 AC_DEFUN([CARES_CHECK_CONSTANT], [
1895 AC_MSG_CHECKING([for $2])
1896 AC_EGREP_CPP(VARIABLEWASDEFINED,
1897 [
1898 $1
1899
1900 #ifdef $2
1901 VARIABLEWASDEFINED
1902 #else
1903 NJET
1904 #endif
1905 ], ac_constant="yes", ac_constant="no"
1906 )
1907 if test "$ac_constant" = "yes" ; then
1908 AC_MSG_RESULT(yes)
1909 $3
1910 else
1911 AC_MSG_RESULT(no)
1912 $4
1913 fi
1914 ])
1915