configure: inet_net_pton function check adjustments
[platform/upstream/c-ares.git] / configure.ac
1 AC_PREREQ(2.57)
2
3 dnl Version not hardcoded here. Fetched later from ares_version.h
4 AC_INIT([c-ares], [-],
5   [c-ares mailing list: http://cool.haxx.se/mailman/listinfo/c-ares])
6
7 CARES_OVERRIDE_AUTOCONF
8
9 AC_CONFIG_SRCDIR([ares_ipv6.h])
10 AM_CONFIG_HEADER([ares_config.h ares_build.h])
11 AM_MAINTAINER_MODE
12
13 CARES_CHECK_OPTION_DEBUG
14 CARES_CHECK_OPTION_OPTIMIZE
15 CARES_CHECK_OPTION_WARNINGS
16 CARES_CHECK_OPTION_WERROR
17 CARES_CHECK_OPTION_CURLDEBUG
18 CARES_CHECK_OPTION_SYMBOL_HIDING
19
20 CARES_CHECK_PATH_SEPARATOR_REQUIRED
21
22 dnl SED is mandatory for configure process and libtool.
23 dnl Set it now, allowing it to be changed later.
24 AC_PATH_PROG([SED], [sed], [not_found],
25   [$PATH:/usr/bin:/usr/local/bin])
26 if test -z "$SED" || test "$SED" = "not_found"; then
27   AC_MSG_ERROR([sed not found in PATH. Cannot continue without sed.])
28 fi
29 AC_SUBST([SED])
30
31 dnl GREP is mandatory for configure process and libtool.
32 dnl Set it now, allowing it to be changed later.
33 AC_PATH_PROG([GREP], [grep], [not_found],
34   [$PATH:/usr/bin:/usr/local/bin])
35 if test -z "$GREP" || test "$GREP" = "not_found"; then
36   AC_MSG_ERROR([grep not found in PATH. Cannot continue without grep.])
37 fi
38 AC_SUBST([GREP])
39
40 dnl EGREP is mandatory for configure process and libtool.
41 dnl Set it now, allowing it to be changed later.
42 if echo a | ($GREP -E '(a|b)') >/dev/null 2>&1; then
43   AC_MSG_CHECKING([for egrep])
44   EGREP="$GREP -E"
45   AC_MSG_RESULT([$EGREP])
46 else
47   AC_PATH_PROG([EGREP], [egrep], [not_found],
48     [$PATH:/usr/bin:/usr/local/bin])
49 fi
50 if test -z "$EGREP" || test "$EGREP" = "not_found"; then
51   AC_MSG_ERROR([egrep not found in PATH. Cannot continue without egrep.])
52 fi
53 AC_SUBST([EGREP])
54
55 dnl AR is mandatory for configure process and libtool.
56 dnl This is target dependent, so check it as a tool.
57 AC_PATH_TOOL([AR], [ar], [not_found],
58   [$PATH:/usr/bin:/usr/local/bin])
59 if test -z "$AR" || test "$AR" = "not_found"; then
60   AC_MSG_ERROR([ar not found in PATH. Cannot continue without ar.])
61 fi
62 AC_SUBST([AR])
63
64 dnl Remove non-configure distributed ares_build.h
65 if test -f ${srcdir}/ares_build.h; then
66   rm -f ${srcdir}/ares_build.h
67 fi
68
69 dnl Fetch c-ares version from ares_version.h
70 VERSION=`$SED -ne 's/^#define ARES_VERSION_STR "\(.*\)"/\1/p' ${srcdir}/ares_version.h`
71 AM_INIT_AUTOMAKE([c-ares], [$VERSION])
72 AC_MSG_CHECKING([c-ares version])
73 AC_MSG_RESULT([$VERSION])
74
75 dnl
76 dnl Detect the canonical host and target build environment
77 dnl
78
79 AC_CANONICAL_HOST
80 dnl Get system canonical name
81 AC_DEFINE_UNQUOTED(OS, "${host}", [cpu-machine-OS])
82
83 CARES_CHECK_PROG_CC
84 AM_PROG_CC_C_O
85 AC_PROG_INSTALL
86
87 dnl This defines _ALL_SOURCE for AIX
88 CARES_CHECK_AIX_ALL_SOURCE
89
90 dnl Our configure and build reentrant settings
91 CARES_CONFIGURE_THREAD_SAFE
92 CARES_CONFIGURE_REENTRANT
93
94 dnl check for how to do large files
95 AC_SYS_LARGEFILE
96
97 case $host_os in
98   solaris*)
99     AC_DEFINE(ETC_INET, 1, [if a /etc/inet dir is being used])
100     ;;
101 esac
102
103 dnl support building of Windows DLLs
104 AC_LIBTOOL_WIN32_DLL
105
106 dnl force libtool to build static libraries with PIC on AMD64-Linux & FreeBSD
107 AC_MSG_CHECKING([if arch-OS host is AMD64-Linux/FreeBSD (to build static libraries with PIC)])
108 case $host in
109   x86_64*linux*|amd64*freebsd*|ia64*freebsd*)
110     AC_MSG_RESULT([yes])
111     with_pic=yes
112     ;;
113   *)
114     AC_MSG_RESULT([no])
115     ;;
116 esac
117
118 AC_MSG_CHECKING([if compiler is icc (to build with PIC)])
119 case $CC in
120   icc | */icc)
121     AC_MSG_RESULT([yes])
122     with_pic=yes
123     ;;
124   *)
125     AC_MSG_RESULT([no])
126     ;;
127 esac
128
129 dnl libtool setup
130 AC_PROG_LIBTOOL
131
132 AC_MSG_CHECKING([if we need CARES_BUILDING_LIBRARY])
133 case $host in
134   *-*-mingw*)
135     AC_DEFINE(CARES_BUILDING_LIBRARY, 1, [when building c-ares library])
136     AC_MSG_RESULT(yes)
137     AC_MSG_CHECKING([if we need CARES_STATICLIB])
138     if test "X$enable_shared" = "Xno"
139     then
140       AC_DEFINE(CARES_STATICLIB, 1, [when not building a shared library])
141       AC_MSG_RESULT(yes)
142     else
143       AC_MSG_RESULT(no)
144     fi
145     ;;
146   *)
147     AC_MSG_RESULT(no)
148     ;;
149 esac
150
151 dnl **********************************************************************
152 dnl platform/compiler/architecture specific checks/flags
153 dnl **********************************************************************
154
155 CARES_CHECK_COMPILER
156 CARES_SET_COMPILER_BASIC_OPTS
157 CARES_SET_COMPILER_DEBUG_OPTS
158 CARES_SET_COMPILER_OPTIMIZE_OPTS
159 CARES_SET_COMPILER_WARNING_OPTS
160
161 if test "$compiler_id" = "INTEL_UNIX_C"; then
162   #
163   if test "$compiler_num" -ge "1000"; then
164     dnl icc 10.X or later
165     CFLAGS="$CFLAGS -shared-intel"
166   elif test "$compiler_num" -ge "900"; then
167     dnl icc 9.X specific
168     CFLAGS="$CFLAGS -i-dynamic"
169   fi
170   #
171 fi
172
173 CARES_CHECK_COMPILER_HALT_ON_ERROR
174 CARES_CHECK_COMPILER_ARRAY_SIZE_NEGATIVE
175 CARES_CHECK_COMPILER_SYMBOL_HIDING
176
177 CARES_CHECK_NO_UNDEFINED
178 AM_CONDITIONAL(NO_UNDEFINED, test x$need_no_undefined = xyes)
179
180 CARES_CHECK_CURLDEBUG
181 AM_CONDITIONAL(CURLDEBUG, test x$want_curldebug = xyes)
182
183 dnl **********************************************************************
184 dnl Compilation based checks should not be done before this point.
185 dnl **********************************************************************
186
187 dnl **********************************************************************
188 dnl Make sure that our checks for headers windows.h winsock.h winsock2.h 
189 dnl and ws2tcpip.h take precedence over any other further checks which 
190 dnl could be done later using AC_CHECK_HEADER or AC_CHECK_HEADERS for
191 dnl this specific header files. And do them before its results are used.
192 dnl **********************************************************************
193
194 CURL_CHECK_HEADER_WINDOWS
195 CURL_CHECK_NATIVE_WINDOWS
196 case X-"$ac_cv_native_windows" in
197   X-yes)
198     CURL_CHECK_HEADER_WINSOCK
199     CURL_CHECK_HEADER_WINSOCK2
200     CURL_CHECK_HEADER_WS2TCPIP
201     ;;
202   *)
203     ac_cv_header_winsock_h="no"
204     ac_cv_header_winsock2_h="no"
205     ac_cv_header_ws2tcpip_h="no"
206     ;;
207 esac
208
209 dnl **********************************************************************
210 dnl Checks for libraries.
211 dnl **********************************************************************
212
213 CARES_CHECK_LIB_XNET
214
215 dnl gethostbyname without lib or in the nsl lib?
216 AC_CHECK_FUNC(gethostbyname,
217               [HAVE_GETHOSTBYNAME="1"
218               ],
219               [ AC_CHECK_LIB(nsl, gethostbyname,
220                              [HAVE_GETHOSTBYNAME="1"
221                              LIBS="$LIBS -lnsl"
222                              ])
223               ])
224
225 if test "$HAVE_GETHOSTBYNAME" != "1"
226 then
227   dnl gethostbyname in the socket lib?
228   AC_CHECK_LIB(socket, gethostbyname,
229                [HAVE_GETHOSTBYNAME="1"
230                LIBS="$LIBS -lsocket"
231                ])
232 fi
233
234 dnl At least one system has been identified to require BOTH nsl and socket
235 dnl libs at the same time to link properly.
236 if test "$HAVE_GETHOSTBYNAME" != "1"
237 then
238   AC_MSG_CHECKING([for gethostbyname with both nsl and socket libs])
239   my_ac_save_LIBS=$LIBS
240   LIBS="-lnsl -lsocket $LIBS"
241   AC_LINK_IFELSE([
242     AC_LANG_PROGRAM([[
243     ]],[[
244       gethostbyname();
245     ]])
246   ],[
247     AC_MSG_RESULT([yes])
248     HAVE_GETHOSTBYNAME="1"
249   ],[
250     AC_MSG_RESULT([no])
251     LIBS=$my_ac_save_LIBS
252   ])
253 fi
254
255 if test "$HAVE_GETHOSTBYNAME" != "1"
256 then
257   dnl This is for winsock systems
258   if test "$ac_cv_header_windows_h" = "yes"; then
259     if test "$ac_cv_header_winsock_h" = "yes"; then
260       case $host in
261         *-*-mingw32ce*)
262           winsock_LIB="-lwinsock"
263           ;;
264         *)
265           winsock_LIB="-lwsock32"
266           ;;
267       esac
268     fi
269     if test "$ac_cv_header_winsock2_h" = "yes"; then
270       winsock_LIB="-lws2_32"
271     fi
272     if test ! -z "$winsock_LIB"; then
273       my_ac_save_LIBS=$LIBS
274       LIBS="$winsock_LIB $LIBS"
275       AC_MSG_CHECKING([for gethostbyname in $winsock_LIB])
276       AC_LINK_IFELSE([
277         AC_LANG_PROGRAM([[
278 #ifdef HAVE_WINDOWS_H
279 #ifndef WIN32_LEAN_AND_MEAN
280 #define WIN32_LEAN_AND_MEAN
281 #endif
282 #include <windows.h>
283 #ifdef HAVE_WINSOCK2_H
284 #include <winsock2.h>
285 #else
286 #ifdef HAVE_WINSOCK_H
287 #include <winsock.h>
288 #endif
289 #endif
290 #endif
291         ]],[[
292           gethostbyname("www.dummysite.com");
293         ]])
294       ],[
295         AC_MSG_RESULT([yes])
296         HAVE_GETHOSTBYNAME="1"
297       ],[
298         AC_MSG_RESULT([no])
299         winsock_LIB=""
300         LIBS=$my_ac_save_LIBS
301       ])
302     fi
303   fi
304 fi
305
306 if test "$HAVE_GETHOSTBYNAME" != "1"
307 then
308   dnl This is for Minix 3.1
309   AC_MSG_CHECKING([for gethostbyname for Minix 3])
310   AC_LINK_IFELSE([
311     AC_LANG_PROGRAM([[
312 /* Older Minix versions may need <net/gen/netdb.h> here instead */
313 #include <netdb.h>
314     ]],[[
315       gethostbyname("www.dummysite.com");
316     ]])
317   ],[
318     AC_MSG_RESULT([yes])
319     HAVE_GETHOSTBYNAME="1"
320   ],[
321     AC_MSG_RESULT([no])
322   ])
323 fi
324
325 if test "$HAVE_GETHOSTBYNAME" != "1"
326 then
327   dnl This is for eCos with a stubbed DNS implementation
328   AC_MSG_CHECKING([for gethostbyname for eCos])
329   AC_LINK_IFELSE([
330     AC_LANG_PROGRAM([[
331 #include <stdio.h>
332 #include <netdb.h>
333     ]],[[
334       gethostbyname("www.dummysite.com");
335     ]])
336   ],[
337     AC_MSG_RESULT([yes])
338     HAVE_GETHOSTBYNAME="1"
339   ],[
340     AC_MSG_RESULT([no])
341   ])
342 fi
343
344 if test "$HAVE_GETHOSTBYNAME" != "1"
345 then
346   dnl gethostbyname in the net lib - for BeOS
347   AC_CHECK_LIB(net, gethostbyname,
348                [HAVE_GETHOSTBYNAME="1"
349                LIBS="$LIBS -lnet"
350                ])
351 fi
352
353
354 if test "$HAVE_GETHOSTBYNAME" != "1"; then
355   AC_MSG_ERROR([couldn't find libraries for gethostbyname()])
356 fi
357
358 dnl resolve lib?
359 AC_CHECK_FUNC(strcasecmp, , [ AC_CHECK_LIB(resolve, strcasecmp) ])
360
361 if test "$ac_cv_lib_resolve_strcasecmp" = "$ac_cv_func_strcasecmp"; then
362   AC_CHECK_LIB(resolve, strcasecmp,
363               [LIBS="-lresolve $LIBS"],
364                ,
365                -lnsl)
366 fi
367 ac_cv_func_strcasecmp="no"
368
369 CARES_CHECK_LIBS_CONNECT
370
371 dnl **********************************************************************
372 dnl In case that function clock_gettime with monotonic timer is available,
373 dnl check for additional required libraries.
374 dnl **********************************************************************
375 CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC
376
377 AC_MSG_CHECKING([whether to use libgcc])
378 AC_ARG_ENABLE(libgcc,
379 AC_HELP_STRING([--enable-libgcc],[use libgcc when linking]),
380 [ case "$enableval" in
381   yes)
382         LIBS="$LIBS -lgcc"
383        AC_MSG_RESULT(yes)
384        ;;
385   *)   AC_MSG_RESULT(no)
386        ;;
387   esac ],
388        AC_MSG_RESULT(no)
389 )
390
391
392 dnl Let's hope this split URL remains working:
393 dnl http://publibn.boulder.ibm.com/doc_link/en_US/a_doc_lib/aixprggd/ \
394 dnl genprogc/thread_quick_ref.htm
395
396
397 dnl **********************************************************************
398 dnl Back to "normal" configuring
399 dnl **********************************************************************
400
401 dnl Checks for header files.
402 AC_HEADER_STDC
403
404 CURL_CHECK_HEADER_MALLOC
405 CURL_CHECK_HEADER_MEMORY
406
407 dnl check for a few basic system headers we need
408 AC_CHECK_HEADERS(
409        sys/types.h \
410        sys/time.h \
411        sys/select.h \
412        sys/socket.h \
413        sys/ioctl.h \
414        sys/param.h \
415        sys/uio.h \
416        assert.h \
417        netdb.h \
418        netinet/in.h \
419        netinet/tcp.h \
420        net/if.h \
421        errno.h \
422        socket.h \
423        strings.h \
424        stdbool.h \
425        time.h \
426        limits.h \
427        arpa/nameser.h \
428        arpa/nameser_compat.h \
429        arpa/inet.h,
430 dnl to do if not found
431 [],
432 dnl to do if found
433 [],
434 dnl default includes
435 [
436 #ifdef HAVE_SYS_TYPES_H
437 #include <sys/types.h>
438 #endif
439 #ifdef HAVE_SYS_TIME_H
440 #include <sys/time.h>
441 #endif
442 dnl We do this default-include simply to make sure that the nameser_compat.h
443 dnl header *REALLY* can be include after the new nameser.h. It seems AIX 5.1
444 dnl (and others?) is not designed to allow this.
445 #ifdef HAVE_ARPA_NAMESER_H
446 #include <arpa/nameser.h>
447 #endif
448
449 dnl *Sigh* these are needed in order for net/if.h to get properly detected.
450 #ifdef HAVE_SYS_SOCKET_H
451 #include <sys/socket.h>
452 #endif
453 #ifdef HAVE_NETINET_IN_H
454 #include <netinet/in.h>
455 #endif
456 ]
457 )
458
459 dnl Checks for typedefs, structures, and compiler characteristics.
460 AC_C_CONST
461 AC_TYPE_SIZE_T
462 AC_HEADER_TIME
463 CURL_CHECK_STRUCT_TIMEVAL
464
465 AC_CHECK_SIZEOF(size_t)
466 AC_CHECK_SIZEOF(int)
467 AC_CHECK_SIZEOF(long)
468 CARES_CONFIGURE_LONG
469 AC_CHECK_SIZEOF(time_t)
470
471 AC_CHECK_TYPE(long long,
472    [AC_DEFINE(HAVE_LONGLONG, 1,
473      [Define to 1 if the compiler supports the 'long long' data type.])]
474    longlong="yes"  
475 )
476
477 if test "xyes" = "x$longlong"; then
478   AC_MSG_CHECKING([if numberLL works])
479   AC_COMPILE_IFELSE([
480     AC_LANG_PROGRAM([[
481     ]],[[
482       long long val = 1000LL;
483     ]])
484   ],[
485     AC_MSG_RESULT([yes])
486     AC_DEFINE(HAVE_LL, 1, [if your compiler supports LL])
487   ],[
488     AC_MSG_RESULT([no])
489   ])
490 fi
491
492
493 # check for ssize_t
494 AC_CHECK_TYPE(ssize_t, ,
495    AC_DEFINE(ssize_t, int, [the signed version of size_t]))
496
497 # check for bool type
498 AC_CHECK_TYPE([bool],[
499   AC_DEFINE(HAVE_BOOL_T, 1,
500     [Define to 1 if bool is an available type.])
501 ], ,[
502 #ifdef HAVE_SYS_TYPES_H
503 #include <sys/types.h>
504 #endif
505 #ifdef HAVE_STDBOOL_H
506 #include <stdbool.h>
507 #endif
508 ])
509
510 CARES_CONFIGURE_ARES_SOCKLEN_T
511
512 TYPE_IN_ADDR_T
513
514 TYPE_SOCKADDR_STORAGE
515
516 TYPE_SIG_ATOMIC_T
517
518 AC_TYPE_SIGNAL
519
520 CURL_CHECK_FUNC_RECV
521 CURL_CHECK_FUNC_RECVFROM
522 CURL_CHECK_FUNC_SEND
523 CURL_CHECK_MSG_NOSIGNAL
524
525 CARES_CHECK_FUNC_CLOSESOCKET
526 CARES_CHECK_FUNC_CLOSESOCKET_CAMEL
527 CARES_CHECK_FUNC_CONNECT
528 CARES_CHECK_FUNC_FCNTL
529 CARES_CHECK_FUNC_FREEADDRINFO
530 CARES_CHECK_FUNC_GETADDRINFO
531 CARES_CHECK_FUNC_GETHOSTBYADDR
532 CARES_CHECK_FUNC_GETHOSTBYNAME
533 CARES_CHECK_FUNC_GETHOSTNAME
534 CARES_CHECK_FUNC_GETSERVBYPORT_R
535 CARES_CHECK_FUNC_INET_NET_PTON
536 CARES_CHECK_FUNC_INET_NTOP
537 CARES_CHECK_FUNC_INET_PTON
538 CARES_CHECK_FUNC_IOCTL
539 CARES_CHECK_FUNC_IOCTLSOCKET
540 CARES_CHECK_FUNC_IOCTLSOCKET_CAMEL
541 CARES_CHECK_FUNC_SETSOCKOPT
542 CARES_CHECK_FUNC_SOCKET
543 CARES_CHECK_FUNC_STRCASECMP
544 CARES_CHECK_FUNC_STRCMPI
545 CARES_CHECK_FUNC_STRDUP
546 CARES_CHECK_FUNC_STRICMP
547 CARES_CHECK_FUNC_STRNCASECMP
548 CARES_CHECK_FUNC_STRNCMPI
549 CARES_CHECK_FUNC_STRNICMP
550 CARES_CHECK_FUNC_WRITEV
551
552
553 dnl check for AF_INET6
554 CARES_CHECK_CONSTANT(
555   [
556 #undef inline
557 #ifdef HAVE_WINDOWS_H
558 #ifndef WIN32_LEAN_AND_MEAN
559 #define WIN32_LEAN_AND_MEAN
560 #endif
561 #include <windows.h>
562 #ifdef HAVE_WINSOCK2_H
563 #include <winsock2.h>
564 #endif
565 #else
566 #ifdef HAVE_SYS_TYPES_H
567 #include <sys/types.h>
568 #endif
569 #ifdef HAVE_SYS_SOCKET_H
570 #include <sys/socket.h>
571 #endif
572 #endif
573   ], [PF_INET6], 
574      AC_DEFINE_UNQUOTED(HAVE_PF_INET6,1,[Define to 1 if you have PF_INET6.])
575 )
576
577 dnl check for PF_INET6
578 CARES_CHECK_CONSTANT(
579   [
580 #undef inline
581 #ifdef HAVE_WINDOWS_H
582 #ifndef WIN32_LEAN_AND_MEAN
583 #define WIN32_LEAN_AND_MEAN
584 #endif
585 #include <windows.h>
586 #ifdef HAVE_WINSOCK2_H
587 #include <winsock2.h>
588 #endif
589 #else
590 #ifdef HAVE_SYS_TYPES_H
591 #include <sys/types.h>
592 #endif
593 #ifdef HAVE_SYS_SOCKET_H
594 #include <sys/socket.h>
595 #endif
596 #endif
597   ], [AF_INET6], 
598      AC_DEFINE_UNQUOTED(HAVE_AF_INET6,1,[Define to 1 if you have AF_INET6.])
599 )
600
601
602 dnl check for the in6_addr structure
603 CARES_CHECK_STRUCT(
604   [
605 #undef inline
606 #ifdef HAVE_WINDOWS_H
607 #ifndef WIN32_LEAN_AND_MEAN
608 #define WIN32_LEAN_AND_MEAN
609 #endif
610 #include <windows.h>
611 #ifdef HAVE_WINSOCK2_H
612 #include <winsock2.h>
613 #ifdef HAVE_WS2TCPIP_H
614 #include <ws2tcpip.h>
615 #endif
616 #endif
617 #else
618 #ifdef HAVE_SYS_TYPES_H
619 #include <sys/types.h>
620 #endif
621 #ifdef HAVE_NETINET_IN_H
622 #include <netinet/in.h>
623 #endif
624 #endif
625   ], [in6_addr], 
626      AC_DEFINE_UNQUOTED(HAVE_STRUCT_IN6_ADDR,1,[Define to 1 if you have struct in6_addr.])
627 )
628
629 dnl check for the sockaddr_in6 structure
630 CARES_CHECK_STRUCT(
631   [
632 #undef inline
633 #ifdef HAVE_WINDOWS_H
634 #ifndef WIN32_LEAN_AND_MEAN
635 #define WIN32_LEAN_AND_MEAN
636 #endif
637 #include <windows.h>
638 #ifdef HAVE_WINSOCK2_H
639 #include <winsock2.h>
640 #ifdef HAVE_WS2TCPIP_H
641 #include <ws2tcpip.h>
642 #endif
643 #endif
644 #else
645 #ifdef HAVE_SYS_TYPES_H
646 #include <sys/types.h>
647 #endif
648 #ifdef HAVE_NETINET_IN_H
649 #include <netinet/in.h>
650 #endif
651 #endif
652   ], [sockaddr_in6], 
653      AC_DEFINE_UNQUOTED(HAVE_STRUCT_SOCKADDR_IN6,1,
654        [Define to 1 if you have struct sockaddr_in6.]) ac_have_sockaddr_in6=yes
655 )
656
657 AC_CHECK_MEMBER(struct sockaddr_in6.sin6_scope_id,
658     AC_DEFINE_UNQUOTED(HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID,1,
659       [Define to 1 if your struct sockaddr_in6 has sin6_scope_id.])
660    , ,
661   [
662 #undef inline
663 #ifdef HAVE_WINDOWS_H
664 #ifndef WIN32_LEAN_AND_MEAN
665 #define WIN32_LEAN_AND_MEAN
666 #endif
667 #include <windows.h>
668 #ifdef HAVE_WINSOCK2_H
669 #include <winsock2.h>
670 #ifdef HAVE_WS2TCPIP_H
671 #include <ws2tcpip.h>
672 #endif
673 #endif
674 #else
675 #ifdef HAVE_SYS_TYPES_H
676 #include <sys/types.h>
677 #endif
678 #ifdef HAVE_NETINET_IN_H
679 #include <netinet/in.h>
680 #endif
681 #endif
682   ])
683
684 dnl check for the addrinfo structure
685 AC_CHECK_MEMBER(struct addrinfo.ai_flags,
686      AC_DEFINE_UNQUOTED(HAVE_STRUCT_ADDRINFO,1,
687        [Define to 1 if you have struct addrinfo.]),,
688   [
689 #undef inline
690 #ifdef HAVE_WINDOWS_H
691 #ifndef WIN32_LEAN_AND_MEAN
692 #define WIN32_LEAN_AND_MEAN
693 #endif
694 #include <windows.h>
695 #ifdef HAVE_WINSOCK2_H
696 #include <winsock2.h>
697 #ifdef HAVE_WS2TCPIP_H
698 #include <ws2tcpip.h>
699 #endif
700 #endif
701 #else
702 #ifdef HAVE_SYS_TYPES_H
703 #include <sys/types.h>
704 #endif
705 #ifdef HAVE_NETINET_IN_H
706 #include <netinet/in.h>
707 #endif
708 #ifdef HAVE_SYS_SOCKET_H
709 #include <sys/socket.h>
710 #endif
711 #ifdef HAVE_NETDB_H
712 #include <netdb.h>
713 #endif
714 #endif
715   ]
716 )
717
718
719 AC_CHECK_FUNCS([bitncmp \
720   gettimeofday \
721   if_indextoname
722 ],[
723 ],[
724   func="$ac_func"
725   AC_MSG_CHECKING([deeper for $func])
726   AC_LINK_IFELSE([
727     AC_LANG_PROGRAM([[
728     ]],[[
729       $func ();
730     ]])
731   ],[
732     AC_MSG_RESULT([yes])
733     eval "ac_cv_func_$func=yes"
734     AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_$func]), [1],
735       [Define to 1 if you have the $func function.])
736   ],[
737     AC_MSG_RESULT([but still no])
738   ])
739 ])
740
741
742 AC_CHECK_SIZEOF(struct in6_addr, ,
743 [
744 #undef inline
745 #ifdef HAVE_WINDOWS_H
746 #ifndef WIN32_LEAN_AND_MEAN
747 #define WIN32_LEAN_AND_MEAN
748 #endif
749 #include <windows.h>
750 #ifdef HAVE_WINSOCK2_H
751 #include <winsock2.h>
752 #ifdef HAVE_WS2TCPIP_H
753 #include <ws2tcpip.h>
754 #endif
755 #endif
756 #else
757 #ifdef HAVE_SYS_TYPES_H
758 #include <sys/types.h>
759 #endif
760 #ifdef HAVE_SYS_SOCKET_H
761 #include <sys/socket.h>
762 #endif
763 #ifdef HAVE_NETINET_IN_H
764 #include <netinet/in.h>
765 #endif
766 #endif
767 ]
768 )
769
770 AC_CHECK_SIZEOF(struct in_addr, ,
771 [
772 #undef inline
773 #ifdef HAVE_WINDOWS_H
774 #ifndef WIN32_LEAN_AND_MEAN
775 #define WIN32_LEAN_AND_MEAN
776 #endif
777 #include <windows.h>
778 #ifdef HAVE_WINSOCK2_H
779 #include <winsock2.h>
780 #ifdef HAVE_WS2TCPIP_H
781 #include <ws2tcpip.h>
782 #endif
783 #endif
784 #else
785 #ifdef HAVE_SYS_TYPES_H
786 #include <sys/types.h>
787 #endif
788 #ifdef HAVE_SYS_SOCKET_H
789 #include <sys/socket.h>
790 #endif
791 #ifdef HAVE_NETINET_IN_H
792 #include <netinet/in.h>
793 #endif
794 #endif
795 ]
796 )
797
798
799 dnl Check if the getnameinfo function is available
800 dnl and get the types of five of its arguments.
801 CURL_CHECK_FUNC_GETNAMEINFO
802
803
804 AC_C_BIGENDIAN(
805     [AC_DEFINE(ARES_BIG_ENDIAN, 1,
806       [define this if ares is built for a big endian system])],
807     ,
808     [AC_MSG_WARN([couldn't figure out endianess, assuming little endian!])]
809 )
810
811 dnl Check for user-specified random device
812 AC_ARG_WITH(random,
813 AC_HELP_STRING([--with-random=FILE],
814                [read randomness from FILE (default=/dev/urandom)]),
815     [ RANDOM_FILE="$withval" ],
816     [
817         dnl Check for random device.  If we're cross compiling, we can't
818         dnl check, and it's better to assume it doesn't exist than it is
819         dnl to fail on AC_CHECK_FILE or later.
820         if test "$cross_compiling" = "no"; then
821           AC_CHECK_FILE("/dev/urandom", [ RANDOM_FILE="/dev/urandom"] )
822         else
823           AC_MSG_WARN([cannot check for /dev/urandom while cross compiling; assuming none])
824         fi
825         
826     ]
827 )
828 if test -n "$RANDOM_FILE" && test X"$RANDOM_FILE" != Xno ; then
829         AC_SUBST(RANDOM_FILE)
830         AC_DEFINE_UNQUOTED(RANDOM_FILE, "$RANDOM_FILE",
831         [a suitable file/device to read random data from])
832 fi
833
834 CARES_CHECK_OPTION_NONBLOCKING
835 CARES_CHECK_NONBLOCKING_SOCKET
836
837 CARES_CONFIGURE_SYMBOL_HIDING
838
839 CARES_PRIVATE_LIBS="$LIBS"
840 AC_SUBST(CARES_PRIVATE_LIBS)
841
842 CARES_CFLAG_EXTRAS=""
843 if test X"$want_werror" == Xyes; then
844   CARES_CFLAG_EXTRAS="-Werror"
845 fi
846 AC_SUBST(CARES_CFLAG_EXTRAS)
847
848 dnl squeeze whitespace out of some variables
849
850 squeeze CFLAGS
851 squeeze CPPFLAGS
852 squeeze DEFS
853 squeeze LDFLAGS
854 squeeze LIBS
855
856 squeeze CARES_PRIVATE_LIBS
857
858 AC_CONFIG_FILES([Makefile libcares.pc])
859 AC_OUTPUT