Get qualifier of arg 1 for getnameinfo apart. Take 3.
[platform/upstream/curl.git] / acinclude.m4
1 #***************************************************************************
2 #                                  _   _ ____  _
3 #  Project                     ___| | | |  _ \| |
4 #                             / __| | | | |_) | |
5 #                            | (__| |_| |  _ <| |___
6 #                             \___|\___/|_| \_\_____|
7 #
8 # Copyright (C) 1998 - 2006, Daniel Stenberg, <daniel@haxx.se>, et al.
9 #
10 # This software is licensed as described in the file COPYING, which
11 # you should have received as part of this distribution. The terms
12 # are also available at http://curl.haxx.se/docs/copyright.html.
13 #
14 # You may opt to use, copy, modify, merge, publish, distribute and/or sell
15 # copies of the Software, and permit persons to whom the Software is
16 # furnished to do so, under the terms of the COPYING file.
17 #
18 # This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
19 # KIND, either express or implied.
20 #
21 # $Id$
22 ###########################################################################
23
24 dnl CURL_CHECK_HEADER_WINDOWS
25 dnl -------------------------------------------------
26 dnl Check for compilable and valid windows.h header 
27
28 AC_DEFUN([CURL_CHECK_HEADER_WINDOWS], [
29   AC_CACHE_CHECK([for windows.h], [ac_cv_header_windows_h], [
30     AC_COMPILE_IFELSE([
31       AC_LANG_PROGRAM([
32 #undef inline
33 #ifndef WIN32_LEAN_AND_MEAN
34 #define WIN32_LEAN_AND_MEAN
35 #endif
36 #include <windows.h>
37       ],[
38         int dummy=2*WINVER;
39       ])
40     ],[
41       ac_cv_header_windows_h="yes"
42     ],[
43       ac_cv_header_windows_h="no"
44     ])
45   ])
46   if test "x$ac_cv_header_windows_h" = "xyes"; then
47     AC_DEFINE_UNQUOTED(HAVE_WINDOWS_H, 1,
48       [Define to 1 if you have the windows.h header file.])
49     AC_DEFINE_UNQUOTED(WIN32_LEAN_AND_MEAN, 1,
50       [Define to avoid automatic inclusion of winsock.h])
51   fi
52 ])
53
54
55 dnl CURL_CHECK_HEADER_WINSOCK
56 dnl -------------------------------------------------
57 dnl Check for compilable and valid winsock.h header 
58
59 AC_DEFUN([CURL_CHECK_HEADER_WINSOCK], [
60   AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
61   AC_CACHE_CHECK([for winsock.h], [ac_cv_header_winsock_h], [
62     AC_COMPILE_IFELSE([
63       AC_LANG_PROGRAM([
64 #undef inline
65 #ifndef WIN32_LEAN_AND_MEAN
66 #define WIN32_LEAN_AND_MEAN
67 #endif
68 #include <windows.h>
69 #include <winsock.h>
70       ],[
71         int dummy=WSACleanup();
72       ])
73     ],[
74       ac_cv_header_winsock_h="yes"
75     ],[
76       ac_cv_header_winsock_h="no"
77     ])
78   ])
79   if test "x$ac_cv_header_winsock_h" = "xyes"; then
80     AC_DEFINE_UNQUOTED(HAVE_WINSOCK_H, 1,
81       [Define to 1 if you have the winsock.h header file.])
82   fi
83 ])
84
85
86 dnl CURL_CHECK_HEADER_WINSOCK2
87 dnl -------------------------------------------------
88 dnl Check for compilable and valid winsock2.h header 
89
90 AC_DEFUN([CURL_CHECK_HEADER_WINSOCK2], [
91   AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
92   AC_CACHE_CHECK([for winsock2.h], [ac_cv_header_winsock2_h], [
93     AC_COMPILE_IFELSE([
94       AC_LANG_PROGRAM([
95 #undef inline
96 #ifndef WIN32_LEAN_AND_MEAN
97 #define WIN32_LEAN_AND_MEAN
98 #endif
99 #include <windows.h>
100 #include <winsock2.h>
101       ],[
102         int dummy=2*IPPROTO_ESP;
103       ])
104     ],[
105       ac_cv_header_winsock2_h="yes"
106     ],[
107       ac_cv_header_winsock2_h="no"
108     ])
109   ])
110   if test "x$ac_cv_header_winsock2_h" = "xyes"; then
111     AC_DEFINE_UNQUOTED(HAVE_WINSOCK2_H, 1,
112       [Define to 1 if you have the winsock2.h header file.])
113   fi
114 ])
115
116
117 dnl CURL_CHECK_HEADER_WS2TCPIP
118 dnl -------------------------------------------------
119 dnl Check for compilable and valid ws2tcpip.h header
120
121 AC_DEFUN([CURL_CHECK_HEADER_WS2TCPIP], [
122   AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
123   AC_CACHE_CHECK([for ws2tcpip.h], [ac_cv_header_ws2tcpip_h], [
124     AC_COMPILE_IFELSE([
125       AC_LANG_PROGRAM([
126 #undef inline
127 #ifndef WIN32_LEAN_AND_MEAN
128 #define WIN32_LEAN_AND_MEAN
129 #endif
130 #include <windows.h>
131 #include <winsock2.h>
132 #include <ws2tcpip.h>
133       ],[
134         int dummy=2*IP_PKTINFO;
135       ])
136     ],[
137       ac_cv_header_ws2tcpip_h="yes"
138     ],[
139       ac_cv_header_ws2tcpip_h="no"
140     ])
141   ])
142   if test "x$ac_cv_header_ws2tcpip_h" = "xyes"; then
143     AC_DEFINE_UNQUOTED(HAVE_WS2TCPIP_H, 1,
144       [Define to 1 if you have the ws2tcpip.h header file.])
145   fi
146 ])
147
148
149 dnl CURL_CHECK_TYPE_SOCKLEN_T
150 dnl -------------------------------------------------
151 dnl Check for existing socklen_t type, and provide
152 dnl an equivalent type if socklen_t not available
153
154 AC_DEFUN([CURL_CHECK_TYPE_SOCKLEN_T], [
155   AC_REQUIRE([CURL_CHECK_HEADER_WS2TCPIP])dnl
156   AC_CHECK_TYPE([socklen_t], ,[
157     AC_CACHE_CHECK([for socklen_t equivalent], 
158       [curl_cv_socklen_t_equiv], [
159       curl_cv_socklen_t_equiv="unknown"
160       for arg2 in "struct sockaddr" void; do
161         for t in int size_t unsigned long "unsigned long"; do
162           AC_COMPILE_IFELSE([
163             AC_LANG_PROGRAM([
164 #undef inline
165 #ifdef HAVE_WINDOWS_H
166 #ifndef WIN32_LEAN_AND_MEAN
167 #define WIN32_LEAN_AND_MEAN
168 #endif
169 #include <windows.h>
170 #ifdef HAVE_WINSOCK2_H
171 #include <winsock2.h>
172 #else
173 #ifdef HAVE_WINSOCK_H
174 #include <winsock.h>
175 #endif
176 #endif
177 #else
178 #ifdef HAVE_SYS_TYPES_H
179 #include <sys/types.h>
180 #endif
181 #ifdef HAVE_SYS_SOCKET_H
182 #include <sys/socket.h>
183 #endif
184 #endif
185               int getpeername (int, $arg2 *, $t *);
186             ],[
187               $t len=0;
188               getpeername(0,0,&len);
189             ])
190           ],[
191              curl_cv_socklen_t_equiv="$t"
192              break 2
193           ])
194         done
195       done
196     ])
197     if test "$curl_cv_socklen_t_equiv" = "unknown"; then
198       AC_MSG_ERROR([Cannot find a type to use in place of socklen_t])
199     else
200       AC_DEFINE_UNQUOTED(socklen_t, $curl_cv_socklen_t_equiv,
201         [type to use in place of socklen_t if not defined])
202     fi
203   ],[
204 #undef inline
205 #ifdef HAVE_WINDOWS_H
206 #ifndef WIN32_LEAN_AND_MEAN
207 #define WIN32_LEAN_AND_MEAN
208 #endif
209 #include <windows.h>
210 #ifdef HAVE_WINSOCK2_H
211 #include <winsock2.h>
212 #ifdef HAVE_WS2TCPIP_H
213 #include <ws2tcpip.h>
214 #endif
215 #endif
216 #else
217 #ifdef HAVE_SYS_TYPES_H
218 #include <sys/types.h>
219 #endif
220 #ifdef HAVE_SYS_SOCKET_H
221 #include <sys/socket.h>
222 #endif
223 #endif
224   ])
225 ])
226
227
228 dnl CURL_CHECK_FUNC_GETNAMEINFO
229 dnl -------------------------------------------------
230 dnl Test if the getnameinfo function is available, 
231 dnl and check the types of five of its arguments.
232 dnl If the function succeeds HAVE_GETNAMEINFO will be
233 dnl defined, defining the types of the arguments in
234 dnl GETNAMEINFO_TYPE_ARG1, GETNAMEINFO_TYPE_ARG2,
235 dnl GETNAMEINFO_TYPE_ARG46 and GETNAMEINFO_TYPE_ARG7,
236 dnl and also defining the type qualifier of first 
237 dnl argument in GETNAMEINFO_QUAL_ARG1.
238
239 AC_DEFUN([CURL_CHECK_FUNC_GETNAMEINFO], [
240   AC_REQUIRE([CURL_CHECK_HEADER_WS2TCPIP])dnl
241   AC_REQUIRE([CURL_CHECK_TYPE_SOCKLEN_T])dnl
242   AC_CHECK_HEADERS(sys/types.h sys/socket.h netdb.h)
243   #
244   AC_MSG_CHECKING([for getnameinfo])
245   AC_LINK_IFELSE([
246       AC_LANG_FUNC_LINK_TRY([getnameinfo])
247     ],[
248       AC_MSG_RESULT([yes])
249       curl_cv_getnameinfo="yes"
250     ],[
251       AC_MSG_RESULT([no])
252       curl_cv_getnameinfo="no"
253   ])
254   #
255   if test "$curl_cv_getnameinfo" != "yes"; then
256     AC_MSG_CHECKING([deeper for getnameinfo])
257     AC_TRY_LINK([
258       ],[
259         getnameinfo();
260       ],[
261         AC_MSG_RESULT([yes])
262         curl_cv_getnameinfo="yes"
263       ],[
264         AC_MSG_RESULT([but still no])
265         curl_cv_getnameinfo="no"
266     ])
267   fi
268   #
269   if test "$curl_cv_getnameinfo" != "yes"; then
270     AC_MSG_CHECKING([deeper and deeper for getnameinfo])
271     AC_TRY_LINK([
272 #undef inline
273 #ifdef HAVE_WINDOWS_H
274 #ifndef WIN32_LEAN_AND_MEAN
275 #define WIN32_LEAN_AND_MEAN
276 #endif
277 #include <windows.h>
278 #ifdef HAVE_WINSOCK2_H
279 #include <winsock2.h>
280 #ifdef HAVE_WS2TCPIP_H
281 #include <ws2tcpip.h>
282 #endif
283 #endif
284 #else
285 #ifdef HAVE_SYS_TYPES_H
286 #include <sys/types.h>
287 #endif
288 #ifdef HAVE_SYS_SOCKET_H
289 #include <sys/socket.h>
290 #endif
291 #ifdef HAVE_NETDB_H
292 #include <netdb.h>
293 #endif
294 #endif
295       ],[
296         getnameinfo(0, 0, 0, 0, 0, 0, 0);
297       ],[ 
298         AC_MSG_RESULT([yes])
299         curl_cv_getnameinfo="yes"
300       ],[
301         AC_MSG_RESULT([but still no])
302         curl_cv_getnameinfo="no"
303     ])
304   fi
305   #
306   if test "$curl_cv_getnameinfo" = "yes"; then
307     AC_CACHE_CHECK([types of arguments for getnameinfo],
308       [curl_cv_func_getnameinfo_args], [
309       curl_cv_func_getnameinfo_args="unknown"
310       for gni_arg1 in 'struct sockaddr *' 'const struct sockaddr *' 'void *'; do
311         for gni_arg2 in 'socklen_t' 'size_t' 'int'; do
312           for gni_arg46 in 'size_t' 'int' 'socklen_t' 'unsigned int' 'DWORD'; do
313             for gni_arg7 in 'int' 'unsigned int'; do
314               AC_COMPILE_IFELSE([
315                 AC_LANG_PROGRAM([
316 #undef inline 
317 #ifdef HAVE_WINDOWS_H
318 #ifndef WIN32_LEAN_AND_MEAN
319 #define WIN32_LEAN_AND_MEAN
320 #endif
321 #if (!defined(_WIN32_WINNT)) || (_WIN32_WINNT < 0x0501)
322 #undef _WIN32_WINNT
323 #define _WIN32_WINNT 0x0501
324 #endif
325 #include <windows.h>
326 #ifdef HAVE_WINSOCK2_H
327 #include <winsock2.h> 
328 #ifdef HAVE_WS2TCPIP_H
329 #include <ws2tcpip.h>
330 #endif
331 #endif
332 #define GNICALLCONV WSAAPI
333 #else
334 #ifdef HAVE_SYS_TYPES_H
335 #include <sys/types.h>
336 #endif
337 #ifdef HAVE_SYS_SOCKET_H
338 #include <sys/socket.h>
339 #endif
340 #ifdef HAVE_NETDB_H
341 #include <netdb.h>
342 #endif
343 #define GNICALLCONV
344 #endif
345                   extern int GNICALLCONV getnameinfo($gni_arg1, $gni_arg2,
346                                          char *, $gni_arg46,
347                                          char *, $gni_arg46,
348                                          $gni_arg7);
349                 ],[
350                   $gni_arg2 salen=0;
351                   $gni_arg46 hostlen=0;
352                   $gni_arg46 servlen=0;
353                   $gni_arg7 flags=0;
354                   int res = getnameinfo(0, salen, 0, hostlen, 0, servlen, flags);
355                 ])
356               ],[
357                  curl_cv_func_getnameinfo_args="$gni_arg1,$gni_arg2,$gni_arg46,$gni_arg7"
358                  break 4
359               ])
360             done
361           done
362         done
363       done
364     ]) # AC_CACHE_CHECK
365     if test "$curl_cv_func_getnameinfo_args" = "unknown"; then
366       AC_MSG_WARN([Cannot find proper types to use for getnameinfo args])
367       AC_MSG_WARN([HAVE_GETNAMEINFO will not be defined])
368     else
369       gni_prev_IFS=$IFS; IFS=','
370       set dummy `echo "$curl_cv_func_getnameinfo_args" | sed 's/\*/\*/g'`
371       IFS=$gni_prev_IFS
372       shift
373       AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG2, $[2],
374         [Define to the type of arg 2 for getnameinfo.])
375       AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG46, $[3],
376         [Define to the type of args 4 and 6 for getnameinfo.])
377       AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG7, $[4],
378         [Define to the type of arg 7 for getnameinfo.])
379       #
380       gni_qual_type_arg1=$[1]
381       #
382       case "$gni_qual_type_arg1" in
383         const*)
384           gni_qual_arg1=const
385           gni_type_arg1=`echo $gni_qual_type_arg1 | sed 's/^const //'`
386         ;;
387         *)
388           gni_qual_arg1=
389           gni_type_arg1=$gni_qual_type_arg1
390         ;;
391       esac
392       #
393       AC_DEFINE_UNQUOTED(GETNAMEINFO_QUAL_ARG1, "$gni_qual_arg1",
394         [Define to the type qualifier of arg 1 for getnameinfo.])
395       AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG1, "$gni_type_arg1",
396         [Define to the type of arg 1 for getnameinfo.])
397       #
398       AC_DEFINE_UNQUOTED(HAVE_GETNAMEINFO, 1,
399         [Define to 1 if you have the getnameinfo function.])
400       ac_cv_func_getnameinfo="yes"
401     fi
402   fi
403 ]) # AC_DEFUN
404
405
406 dnl CURL_CHECK_NONBLOCKING_SOCKET
407 dnl -------------------------------------------------
408 dnl Check for how to set a socket to non-blocking state. There seems to exist
409 dnl four known different ways, with the one used almost everywhere being POSIX
410 dnl and XPG3, while the other different ways for different systems (old BSD,
411 dnl Windows and Amiga).
412 dnl
413 dnl There are two known platforms (AIX 3.x and SunOS 4.1.x) where the
414 dnl O_NONBLOCK define is found but does not work. This condition is attempted
415 dnl to get caught in this script by using an excessive number of #ifdefs...
416 dnl
417 AC_DEFUN([CURL_CHECK_NONBLOCKING_SOCKET],
418 [
419   AC_MSG_CHECKING([non-blocking sockets style])
420
421   AC_TRY_COMPILE([
422 /* headers for O_NONBLOCK test */
423 #include <sys/types.h>
424 #include <unistd.h>
425 #include <fcntl.h>
426 ],[
427 /* try to compile O_NONBLOCK */
428
429 #if defined(sun) || defined(__sun__) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)
430 # if defined(__SVR4) || defined(__srv4__)
431 #  define PLATFORM_SOLARIS
432 # else
433 #  define PLATFORM_SUNOS4
434 # endif
435 #endif
436 #if (defined(_AIX) || defined(__xlC__)) && !defined(_AIX4)
437 # define PLATFORM_AIX_V3
438 #endif
439
440 #if defined(PLATFORM_SUNOS4) || defined(PLATFORM_AIX_V3) || defined(__BEOS__)
441 #error "O_NONBLOCK does not work on this platform"
442 #endif
443   int socket;
444   int flags = fcntl(socket, F_SETFL, flags | O_NONBLOCK);
445 ],[
446 dnl the O_NONBLOCK test was fine
447 nonblock="O_NONBLOCK"
448 AC_DEFINE(HAVE_O_NONBLOCK, 1, [use O_NONBLOCK for non-blocking sockets])
449 ],[
450 dnl the code was bad, try a different program now, test 2
451
452   AC_TRY_COMPILE([
453 /* headers for FIONBIO test */
454 #include <unistd.h>
455 #include <stropts.h>
456 ],[
457 /* FIONBIO source test (old-style unix) */
458  int socket;
459  int flags = ioctl(socket, FIONBIO, &flags);
460 ],[
461 dnl FIONBIO test was good
462 nonblock="FIONBIO"
463 AC_DEFINE(HAVE_FIONBIO, 1, [use FIONBIO for non-blocking sockets])
464 ],[
465 dnl FIONBIO test was also bad
466 dnl the code was bad, try a different program now, test 3
467
468   AC_TRY_COMPILE([
469 /* headers for ioctlsocket test (Windows) */
470 #undef inline
471 #ifdef HAVE_WINDOWS_H
472 #ifndef WIN32_LEAN_AND_MEAN
473 #define WIN32_LEAN_AND_MEAN
474 #endif
475 #include <windows.h>
476 #ifdef HAVE_WINSOCK2_H
477 #include <winsock2.h>
478 #else
479 #ifdef HAVE_WINSOCK_H
480 #include <winsock.h>
481 #endif
482 #endif
483 #endif
484 ],[
485 /* ioctlsocket source code */
486  SOCKET sd;
487  unsigned long flags = 0;
488  sd = socket(0, 0, 0);
489  ioctlsocket(sd, FIONBIO, &flags);
490 ],[
491 dnl ioctlsocket test was good
492 nonblock="ioctlsocket"
493 AC_DEFINE(HAVE_IOCTLSOCKET, 1, [use ioctlsocket() for non-blocking sockets])
494 ],[
495 dnl ioctlsocket didnt compile!, go to test 4
496
497   AC_TRY_LINK([
498 /* headers for IoctlSocket test (Amiga?) */
499 #include <sys/ioctl.h>
500 ],[
501 /* IoctlSocket source code */
502  int socket;
503  int flags = IoctlSocket(socket, FIONBIO, (long)1);
504 ],[
505 dnl ioctlsocket test was good
506 nonblock="IoctlSocket"
507 AC_DEFINE(HAVE_IOCTLSOCKET_CASE, 1, [use Ioctlsocket() for non-blocking sockets])
508 ],[
509 dnl Ioctlsocket didnt compile, do test 5!
510   AC_TRY_COMPILE([
511 /* headers for SO_NONBLOCK test (BeOS) */
512 #include <socket.h>
513 ],[
514 /* SO_NONBLOCK source code */
515  long b = 1;
516  int socket;
517  int flags = setsockopt(socket, SOL_SOCKET, SO_NONBLOCK, &b, sizeof(b));
518 ],[
519 dnl the SO_NONBLOCK test was good
520 nonblock="SO_NONBLOCK"
521 AC_DEFINE(HAVE_SO_NONBLOCK, 1, [use SO_NONBLOCK for non-blocking sockets])
522 ],[
523 dnl test 5 didnt compile!
524 nonblock="nada"
525 AC_DEFINE(HAVE_DISABLED_NONBLOCKING, 1, [disabled non-blocking sockets])
526 ])
527 dnl end of fifth test
528
529 ])
530 dnl end of forth test
531
532 ])
533 dnl end of third test
534
535 ])
536 dnl end of second test
537
538 ])
539 dnl end of non-blocking try-compile test
540   AC_MSG_RESULT($nonblock)
541
542   if test "$nonblock" = "nada"; then
543     AC_MSG_WARN([non-block sockets disabled])
544   fi
545 ])
546
547
548 dnl TYPE_SOCKADDR_STORAGE
549 dnl -------------------------------------------------
550 dnl Check for struct sockaddr_storage. Most IPv6-enabled hosts have it, but
551 dnl AIX 4.3 is one known exception.
552 AC_DEFUN([TYPE_SOCKADDR_STORAGE],
553 [
554    AC_CHECK_TYPE([struct sockaddr_storage],
555         AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE, 1,
556                   [if struct sockaddr_storage is defined]), ,
557    [
558 #undef inline
559 #ifdef HAVE_WINDOWS_H
560 #ifndef WIN32_LEAN_AND_MEAN
561 #define WIN32_LEAN_AND_MEAN
562 #endif
563 #include <windows.h>
564 #ifdef HAVE_WINSOCK2_H
565 #include <winsock2.h>
566 #endif
567 #else
568 #ifdef HAVE_SYS_TYPES_H
569 #include <sys/types.h>
570 #endif
571 #ifdef HAVE_SYS_SOCKET_H
572 #include <sys/socket.h>
573 #endif
574 #ifdef HAVE_NETINET_IN_H
575 #include <netinet/in.h>
576 #endif
577 #ifdef HAVE_ARPA_INET_H
578 #include <arpa/inet.h>
579 #endif
580 #endif
581    ])
582 ])
583
584
585 dnl TYPE_IN_ADDR_T
586 dnl -------------------------------------------------
587 dnl Check for in_addr_t: it is used to receive the return code of inet_addr()
588 dnl and a few other things.
589 AC_DEFUN([TYPE_IN_ADDR_T],
590 [
591    AC_CHECK_TYPE([in_addr_t], ,[
592       AC_MSG_CHECKING([for in_addr_t equivalent])
593       AC_CACHE_VAL([curl_cv_in_addr_t_equiv],
594       [
595          curl_cv_in_addr_t_equiv=
596          for t in "unsigned long" int size_t unsigned long; do
597             AC_TRY_COMPILE([
598 #undef inline
599 #ifdef HAVE_WINDOWS_H
600 #ifndef WIN32_LEAN_AND_MEAN
601 #define WIN32_LEAN_AND_MEAN
602 #endif
603 #include <windows.h>
604 #ifdef HAVE_WINSOCK2_H
605 #include <winsock2.h>
606 #else
607 #ifdef HAVE_WINSOCK_H
608 #include <winsock.h>
609 #endif
610 #endif
611 #else
612 #ifdef HAVE_SYS_TYPES_H
613 #include <sys/types.h>
614 #endif
615 #ifdef HAVE_SYS_SOCKET_H
616 #include <sys/socket.h>
617 #endif
618 #ifdef HAVE_NETINET_IN_H
619 #include <netinet/in.h>
620 #endif
621 #ifdef HAVE_ARPA_INET_H
622 #include <arpa/inet.h>
623 #endif
624 #endif
625             ],[
626                $t data = inet_addr ("1.2.3.4");
627             ],[
628                curl_cv_in_addr_t_equiv="$t"
629                break
630             ])
631          done
632
633          if test "x$curl_cv_in_addr_t_equiv" = x; then
634             AC_MSG_ERROR([Cannot find a type to use in place of in_addr_t])
635          fi
636       ])
637       AC_MSG_RESULT($curl_cv_in_addr_t_equiv)
638       AC_DEFINE_UNQUOTED(in_addr_t, $curl_cv_in_addr_t_equiv,
639                         [type to use in place of in_addr_t if not 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 #else
650 #ifdef HAVE_WINSOCK_H
651 #include <winsock.h>
652 #endif
653 #endif
654 #else
655 #ifdef HAVE_SYS_TYPES_H
656 #include <sys/types.h>
657 #endif
658 #ifdef HAVE_SYS_SOCKET_H
659 #include <sys/socket.h>
660 #endif
661 #ifdef HAVE_NETINET_IN_H
662 #include <netinet/in.h>
663 #endif
664 #ifdef HAVE_ARPA_INET_H
665 #include <arpa/inet.h>
666 #endif
667 #endif
668   ]) dnl AC_CHECK_TYPE
669 ]) dnl AC_DEFUN
670
671 dnl ************************************************************
672 dnl check for "localhost", if it doesn't exist, we can't do the
673 dnl gethostbyname_r tests!
674 dnl 
675
676 AC_DEFUN([CURL_CHECK_WORKING_RESOLVER],[
677 AC_MSG_CHECKING([if "localhost" resolves])
678 AC_TRY_RUN([
679 #include <string.h>
680 #include <sys/types.h>
681 #include <netdb.h>
682
683 int
684 main () {
685 struct hostent *h;
686 h = gethostbyname("localhost");
687 exit (h == NULL ? 1 : 0); }],[
688       AC_MSG_RESULT(yes)],[
689       AC_MSG_RESULT(no)
690       AC_MSG_ERROR([can't figure out gethostbyname_r() since localhost doesn't resolve])
691
692       ]
693 )
694 ])
695
696 dnl ************************************************************
697 dnl check for working getaddrinfo() that works with AI_NUMERICHOST
698 dnl
699 AC_DEFUN([CURL_CHECK_WORKING_GETADDRINFO],[
700   AC_CACHE_CHECK(for working getaddrinfo, ac_cv_working_getaddrinfo,[
701   AC_TRY_RUN( [
702 #include <netdb.h>
703 #include <sys/types.h>
704 #include <sys/socket.h>
705
706 int main(void)
707 {
708     struct addrinfo hints, *ai;
709     int error;
710
711     memset(&hints, 0, sizeof(hints));
712     hints.ai_flags = AI_NUMERICHOST;
713     hints.ai_family = AF_UNSPEC;
714     hints.ai_socktype = SOCK_STREAM;
715     error = getaddrinfo("127.0.0.1", "8080", &hints, &ai);
716     if (error) {
717         return 1;
718     }
719     return 0;
720 }
721 ],[
722   ac_cv_working_getaddrinfo="yes"
723 ],[
724   ac_cv_working_getaddrinfo="no"
725 ],[
726   ac_cv_working_getaddrinfo="yes"
727 ])])
728 if test "$ac_cv_working_getaddrinfo" = "yes"; then
729   AC_DEFINE(HAVE_GETADDRINFO, 1, [Define if getaddrinfo exists and works])
730   AC_DEFINE(ENABLE_IPV6, 1, [Define if you want to enable IPv6 support])
731
732   IPV6_ENABLED=1
733   AC_SUBST(IPV6_ENABLED)
734 fi
735 ])
736
737 dnl ************************************************************
738 dnl check for working NI_WITHSCOPEID in getnameinfo()
739 dnl
740 AC_DEFUN([CURL_CHECK_NI_WITHSCOPEID],[
741   AC_CACHE_CHECK(for working NI_WITHSCOPEID, ac_cv_working_ni_withscopeid,[
742
743  AC_RUN_IFELSE([[
744 #include <stdio.h>
745 #include <sys/types.h>
746 #include <sys/socket.h>
747 #include <netdb.h>
748 int main()
749 {
750 #ifdef NI_WITHSCOPEID
751    struct sockaddr_storage ss;
752    int sslen = sizeof(ss);
753    int rc;
754    char hbuf[NI_MAXHOST];
755    int fd = socket(AF_INET6, SOCK_STREAM, 0);
756    if(fd < 0) {
757      perror("socket()");
758      return 1; /* couldn't create socket of either kind */
759    }
760
761    rc = getsockname(fd, (struct sockaddr *)&ss, &sslen);
762    if(rc) {
763      perror("getsockname()");
764      return 2;
765    }
766
767    rc = getnameinfo((struct sockaddr *)&ss, sslen, hbuf, sizeof(hbuf),
768                      NULL, 0,
769                      NI_NUMERICHOST | NI_NUMERICSERV | NI_WITHSCOPEID);
770
771    if(rc) {
772      printf("rc = %s\n", gai_strerror(rc));
773      return 3;
774    }
775
776    return 0; /* everything works fine, use NI_WITHSCOPEID! */
777 #else
778    return 4; /* we don't seem to have the definition, don't use it */
779 #endif
780 }
781 ]],
782 dnl program worked:
783 [ ac_cv_working_ni_withscopeid="yes" ],
784 dnl program failed:
785 [ ac_cv_working_ni_withscopeid="no" ],
786 dnl we cross-compile, check the headers using the preprocessor
787 [
788
789  AC_EGREP_CPP(WORKS,
790 [
791 #include <stdio.h>
792 #include <sys/types.h>
793 #include <sys/socket.h>
794 #include <netdb.h>
795
796 #ifdef NI_WITHSCOPEID
797 WORKS
798 #endif
799 ],
800   ac_cv_working_ni_withscopeid="yes",
801   ac_cv_working_ni_withscopeid="no" )
802
803  ]
804 ) dnl end of AC_RUN_IFELSE
805
806 ]) dnl end of AC_CACHE_CHECK
807
808 if test "$ac_cv_working_ni_withscopeid" = "yes"; then
809   AC_DEFINE(HAVE_NI_WITHSCOPEID, 1,
810             [Define if NI_WITHSCOPEID exists and works])
811 fi
812
813 ]) dnl end of AC_DEFUN
814
815
816 AC_DEFUN([CURL_CHECK_LOCALTIME_R],
817 [
818   dnl check for localtime_r
819   AC_CHECK_FUNCS(localtime_r,[
820     AC_MSG_CHECKING(whether localtime_r is declared)
821     AC_EGREP_CPP(localtime_r,[
822 #include <time.h>],[
823       AC_MSG_RESULT(yes)],[
824       AC_MSG_RESULT(no)
825       AC_MSG_CHECKING(whether localtime_r with -D_REENTRANT is declared)
826       AC_EGREP_CPP(localtime_r,[
827 #define _REENTRANT
828 #include <time.h>],[
829         AC_DEFINE(NEED_REENTRANT)
830         AC_MSG_RESULT(yes)],
831         AC_MSG_RESULT(no))])])
832 ])
833
834 dnl
835 dnl This function checks for strerror_r(). If it isn't found at first, it
836 dnl retries with _THREAD_SAFE defined, as that is what AIX seems to require
837 dnl in order to find this function.
838 dnl
839 dnl If the function is found, it will then proceed to check how the function
840 dnl actually works: glibc-style or POSIX-style.
841 dnl
842 dnl glibc:
843 dnl      char *strerror_r(int errnum, char *buf, size_t n);
844 dnl  
845 dnl  What this one does is to return the error string (no surprises there),
846 dnl  but it doesn't usually copy anything into buf!  The 'buf' and 'n'
847 dnl  parameters are only meant as an optional working area, in case strerror_r
848 dnl  needs it.  A quick test on a few systems shows that it's generally not
849 dnl  touched at all.
850 dnl
851 dnl POSIX:
852 dnl      int strerror_r(int errnum, char *buf, size_t n);
853 dnl
854 AC_DEFUN([CURL_CHECK_STRERROR_R],
855 [
856   AC_CHECK_FUNCS(strerror_r)
857
858   if test "x$ac_cv_func_strerror_r" = "xyes"; then
859
860     AC_MSG_CHECKING(whether strerror_r is declared)
861     AC_EGREP_CPP(strerror_r,[
862 #include <string.h>],[
863       AC_MSG_RESULT(yes)],[
864       AC_MSG_RESULT(no)
865       AC_MSG_CHECKING(whether strerror_r with -D_REENTRANT is declared)
866       AC_EGREP_CPP(strerror_r,[
867 #define _REENTRANT
868 #include <string.h>],[
869         CPPFLAGS="-D_REENTRANT $CPPFLAGS"
870         AC_MSG_RESULT(yes)],
871         AC_MSG_RESULT(no)
872         AC_DEFINE(HAVE_NO_STRERROR_R_DECL, 1, [we have no strerror_r() proto])
873        ) dnl with _THREAD_SAFE
874     ]) dnl plain cpp for it
875
876     dnl determine if this strerror_r() is glibc or POSIX
877     AC_MSG_CHECKING([for a glibc strerror_r API])
878     AC_TRY_RUN([
879 #include <string.h>
880 #include <errno.h>
881 int
882 main () {
883   char buffer[1024]; /* big enough to play with */
884   char *string =
885     strerror_r(EACCES, buffer, sizeof(buffer));
886     /* this should've returned a string */
887     if(!string || !string[0])
888       return 99;
889     return 0;
890 }
891 ],
892     GLIBC_STRERROR_R="1"
893     AC_DEFINE(HAVE_GLIBC_STRERROR_R, 1, [we have a glibc-style strerror_r()])
894     AC_MSG_RESULT([yes]),
895     AC_MSG_RESULT([no]),
896
897     dnl Use an inferior method of strerror_r detection while cross-compiling
898     AC_EGREP_CPP(yes, [
899 #include <features.h>
900 #ifdef __GLIBC__
901 yes
902 #endif
903 ], 
904       dnl looks like glibc, so assume a glibc-style strerror_r()
905       GLIBC_STRERROR_R="1"
906       AC_DEFINE(HAVE_GLIBC_STRERROR_R, 1, [we have a glibc-style strerror_r()])
907       AC_MSG_RESULT([yes]),
908       AC_MSG_NOTICE([cannot determine strerror_r() style: edit lib/config.h manually!])
909     ) dnl while cross-compiling
910     )
911
912     if test -z "$GLIBC_STRERROR_R"; then
913
914       AC_MSG_CHECKING([for a POSIX strerror_r API])
915       AC_TRY_RUN([
916 #include <string.h>
917 #include <errno.h>
918 int
919 main () {
920   char buffer[1024]; /* big enough to play with */
921   int error =
922     strerror_r(EACCES, buffer, sizeof(buffer));
923     /* This should've returned zero, and written an error string in the
924        buffer.*/
925     if(!buffer[0] || error)
926       return 99;
927     return 0;
928 }
929 ],
930       AC_DEFINE(HAVE_POSIX_STRERROR_R, 1, [we have a POSIX-style strerror_r()])
931       AC_MSG_RESULT([yes]),
932       AC_MSG_RESULT([no]) ,
933       dnl cross-compiling!
934       AC_MSG_NOTICE([cannot determine strerror_r() style: edit lib/config.h manually!])
935     )
936
937     fi dnl if not using glibc API
938
939   fi dnl we have a strerror_r
940
941 ])
942
943 AC_DEFUN([CURL_CHECK_INET_NTOA_R],
944 [
945   dnl determine if function definition for inet_ntoa_r exists.
946   AC_CHECK_FUNCS(inet_ntoa_r,[
947     AC_MSG_CHECKING(whether inet_ntoa_r is declared)
948     AC_EGREP_CPP(inet_ntoa_r,[
949 #include <arpa/inet.h>],[
950       AC_DEFINE(HAVE_INET_NTOA_R_DECL, 1, [inet_ntoa_r() is declared])
951       AC_MSG_RESULT(yes)],[
952       AC_MSG_RESULT(no)
953       AC_MSG_CHECKING(whether inet_ntoa_r with -D_REENTRANT is declared)
954       AC_EGREP_CPP(inet_ntoa_r,[
955 #define _REENTRANT
956 #include <arpa/inet.h>],[
957         AC_DEFINE(HAVE_INET_NTOA_R_DECL, 1, [inet_ntoa_r() is declared])
958         AC_DEFINE(NEED_REENTRANT, 1, [need REENTRANT defined])
959         AC_MSG_RESULT(yes)],
960         AC_MSG_RESULT(no))])])
961 ])
962
963 AC_DEFUN([CURL_CHECK_GETHOSTBYADDR_R],
964 [
965   dnl check for number of arguments to gethostbyaddr_r. it might take
966   dnl either 5, 7, or 8 arguments.
967   AC_CHECK_FUNCS(gethostbyaddr_r,[
968     AC_MSG_CHECKING(if gethostbyaddr_r takes 5 arguments)
969     AC_TRY_COMPILE([
970 #include <sys/types.h>
971 #include <netdb.h>],[
972 char * address;
973 int length;
974 int type;
975 struct hostent h;
976 struct hostent_data hdata;
977 int rc;
978 rc = gethostbyaddr_r(address, length, type, &h, &hdata);],[
979       AC_MSG_RESULT(yes)
980       AC_DEFINE(HAVE_GETHOSTBYADDR_R_5, 1, [gethostbyaddr_r() takes 5 args])
981       ac_cv_gethostbyaddr_args=5],[
982       AC_MSG_RESULT(no)
983       AC_MSG_CHECKING(if gethostbyaddr_r with -D_REENTRANT takes 5 arguments)
984       AC_TRY_COMPILE([
985 #define _REENTRANT
986 #include <sys/types.h>
987 #include <netdb.h>],[
988 char * address;
989 int length;
990 int type;
991 struct hostent h;
992 struct hostent_data hdata;
993 int rc;
994 rc = gethostbyaddr_r(address, length, type, &h, &hdata);],[
995         AC_MSG_RESULT(yes)
996         AC_DEFINE(HAVE_GETHOSTBYADDR_R_5, 1, [gethostbyaddr_r() takes 5 args])
997         AC_DEFINE(NEED_REENTRANT, 1, [need REENTRANT])
998         ac_cv_gethostbyaddr_args=5],[
999         AC_MSG_RESULT(no)
1000         AC_MSG_CHECKING(if gethostbyaddr_r takes 7 arguments)
1001         AC_TRY_COMPILE([
1002 #include <sys/types.h>
1003 #include <netdb.h>],[
1004 char * address;
1005 int length;
1006 int type;
1007 struct hostent h;
1008 char buffer[8192];
1009 int h_errnop;
1010 struct hostent * hp;
1011
1012 hp = gethostbyaddr_r(address, length, type, &h,
1013                      buffer, 8192, &h_errnop);],[
1014           AC_MSG_RESULT(yes)
1015           AC_DEFINE(HAVE_GETHOSTBYADDR_R_7, 1, [gethostbyaddr_r() takes 7 args] )
1016           ac_cv_gethostbyaddr_args=7],[
1017           AC_MSG_RESULT(no)
1018           AC_MSG_CHECKING(if gethostbyaddr_r takes 8 arguments)
1019           AC_TRY_COMPILE([
1020 #include <sys/types.h>
1021 #include <netdb.h>],[
1022 char * address;
1023 int length;
1024 int type;
1025 struct hostent h;
1026 char buffer[8192];
1027 int h_errnop;
1028 struct hostent * hp;
1029 int rc;
1030
1031 rc = gethostbyaddr_r(address, length, type, &h,
1032                      buffer, 8192, &hp, &h_errnop);],[
1033             AC_MSG_RESULT(yes)
1034             AC_DEFINE(HAVE_GETHOSTBYADDR_R_8, 1, [gethostbyaddr_r() takes 8 args])
1035             ac_cv_gethostbyaddr_args=8],[
1036             AC_MSG_RESULT(no)
1037             have_missing_r_funcs="$have_missing_r_funcs gethostbyaddr_r"])])])])])
1038 ])
1039
1040 AC_DEFUN([CURL_CHECK_GETHOSTBYNAME_R],
1041 [
1042   dnl check for number of arguments to gethostbyname_r. it might take
1043   dnl either 3, 5, or 6 arguments.
1044   AC_CHECK_FUNCS(gethostbyname_r,[
1045     AC_MSG_CHECKING([if gethostbyname_r takes 3 arguments])
1046     AC_TRY_COMPILE([
1047 #include <string.h>
1048 #include <sys/types.h>
1049 #include <netdb.h>
1050 #undef NULL
1051 #define NULL (void *)0
1052
1053 int
1054 gethostbyname_r(const char *, struct hostent *, struct hostent_data *);],[
1055 struct hostent_data data;
1056 gethostbyname_r(NULL, NULL, NULL);],[
1057       AC_MSG_RESULT(yes)
1058       AC_DEFINE(HAVE_GETHOSTBYNAME_R_3, 1, [gethostbyname_r() takes 3 args])
1059       ac_cv_gethostbyname_args=3],[
1060       AC_MSG_RESULT(no)
1061       AC_MSG_CHECKING([if gethostbyname_r with -D_REENTRANT takes 3 arguments])
1062       AC_TRY_COMPILE([
1063 #define _REENTRANT
1064
1065 #include <string.h>
1066 #include <sys/types.h>
1067 #include <netdb.h>
1068 #undef NULL
1069 #define NULL (void *)0
1070
1071 int
1072 gethostbyname_r(const char *,struct hostent *, struct hostent_data *);],[
1073 struct hostent_data data;
1074 gethostbyname_r(NULL, NULL, NULL);],[
1075         AC_MSG_RESULT(yes)
1076         AC_DEFINE(HAVE_GETHOSTBYNAME_R_3, 1, [gethostbyname_r() takes 3 args])
1077         AC_DEFINE(NEED_REENTRANT, 1, [needs REENTRANT])
1078         ac_cv_gethostbyname_args=3],[
1079         AC_MSG_RESULT(no)
1080         AC_MSG_CHECKING([if gethostbyname_r takes 5 arguments])
1081         AC_TRY_COMPILE([
1082 #include <sys/types.h>
1083 #include <netdb.h>
1084 #undef NULL
1085 #define NULL (void *)0
1086
1087 struct hostent *
1088 gethostbyname_r(const char *, struct hostent *, char *, int, int *);],[
1089 gethostbyname_r(NULL, NULL, NULL, 0, NULL);],[
1090           AC_MSG_RESULT(yes)
1091           AC_DEFINE(HAVE_GETHOSTBYNAME_R_5, 1, [gethostbyname_r() takes 5 args])
1092           ac_cv_gethostbyname_args=5],[
1093           AC_MSG_RESULT(no)
1094           AC_MSG_CHECKING([if gethostbyname_r takes 6 arguments])
1095           AC_TRY_COMPILE([
1096 #include <sys/types.h>
1097 #include <netdb.h>
1098 #undef NULL
1099 #define NULL (void *)0
1100
1101 int
1102 gethostbyname_r(const char *, struct hostent *, char *, size_t,
1103 struct hostent **, int *);],[
1104 gethostbyname_r(NULL, NULL, NULL, 0, NULL, NULL);],[
1105             AC_MSG_RESULT(yes)
1106             AC_DEFINE(HAVE_GETHOSTBYNAME_R_6, 1, [gethostbyname_r() takes 6 args])
1107             ac_cv_gethostbyname_args=6],[
1108             AC_MSG_RESULT(no)
1109             have_missing_r_funcs="$have_missing_r_funcs gethostbyname_r"],
1110             [ac_cv_gethostbyname_args=0])],
1111           [ac_cv_gethostbyname_args=0])],
1112         [ac_cv_gethostbyname_args=0])],
1113       [ac_cv_gethostbyname_args=0])])
1114
1115 if test "$ac_cv_func_gethostbyname_r" = "yes"; then
1116   if test "$ac_cv_gethostbyname_args" = "0"; then
1117     dnl there's a gethostbyname_r() function, but we don't know how
1118     dnl many arguments it wants!
1119     AC_MSG_ERROR([couldn't figure out how to use gethostbyname_r()])
1120   fi
1121 fi
1122 ])
1123
1124
1125 dnl **********************************************************************
1126 dnl CURL_DETECT_ICC ([ACTION-IF-YES])
1127 dnl
1128 dnl check if this is the Intel ICC compiler, and if so run the ACTION-IF-YES
1129 dnl sets the $ICC variable to "yes" or "no"
1130 dnl **********************************************************************
1131 AC_DEFUN([CURL_DETECT_ICC],
1132 [
1133     ICC="no"
1134     AC_MSG_CHECKING([for icc in use])
1135     if test "$GCC" = "yes"; then
1136        dnl check if this is icc acting as gcc in disguise
1137        AC_EGREP_CPP([^__INTEL_COMPILER], [__INTEL_COMPILER],
1138          dnl action if the text is found, this it has not been replaced by the
1139          dnl cpp
1140          ICC="no",
1141          dnl the text was not found, it was replaced by the cpp
1142          ICC="yes"
1143          AC_MSG_RESULT([yes])
1144          [$1]
1145        )
1146     fi
1147     if test "$ICC" = "no"; then
1148         # this is not ICC
1149         AC_MSG_RESULT([no])
1150     fi
1151 ])
1152
1153 dnl We create a function for detecting which compiler we use and then set as
1154 dnl pendantic compiler options as possible for that particular compiler. The
1155 dnl options are only used for debug-builds.
1156
1157 AC_DEFUN([CURL_CC_DEBUG_OPTS],
1158 [
1159     if test "z$ICC" = "z"; then
1160       CURL_DETECT_ICC
1161     fi
1162
1163     if test "$GCC" = "yes"; then
1164
1165        dnl figure out gcc version!
1166        AC_MSG_CHECKING([gcc version])
1167        gccver=`$CC -dumpversion`
1168        num1=`echo $gccver | cut -d . -f1`
1169        num2=`echo $gccver | cut -d . -f2`
1170        gccnum=`(expr $num1 "*" 100 + $num2) 2>/dev/null`
1171        AC_MSG_RESULT($gccver)
1172
1173        if test "$ICC" = "yes"; then
1174          dnl this is icc, not gcc.
1175
1176          dnl ICC warnings we ignore:
1177          dnl * 269 warns on our "%Od" printf formatters for curl_off_t output:
1178          dnl   "invalid format string conversion"
1179          dnl * 279 warns on static conditions in while expressions
1180          dnl * 981 warns on "operands are evaluated in unspecified order"
1181          dnl * 1418 "external definition with no prior declaration"
1182          dnl * 1419 warns on "external declaration in primary source file"
1183          dnl   which we know and do on purpose.
1184
1185          WARN="-wd279,269,981,1418,1419"
1186
1187          if test "$gccnum" -gt "600"; then
1188             dnl icc 6.0 and older doesn't have the -Wall flag
1189             WARN="-Wall $WARN"
1190          fi
1191        else dnl $ICC = yes
1192          dnl this is a set of options we believe *ALL* gcc versions support:
1193          WARN="-W -Wall -Wwrite-strings -pedantic -Wpointer-arith -Wnested-externs -Winline -Wmissing-prototypes"
1194
1195          dnl -Wcast-align is a bit too annoying on all gcc versions ;-)
1196
1197          if test "$gccnum" -ge "207"; then
1198            dnl gcc 2.7 or later
1199            WARN="$WARN -Wmissing-declarations"
1200          fi
1201
1202          if test "$gccnum" -gt "295"; then
1203            dnl only if the compiler is newer than 2.95 since we got lots of
1204            dnl "`_POSIX_C_SOURCE' is not defined" in system headers with
1205            dnl gcc 2.95.4 on FreeBSD 4.9!
1206            WARN="$WARN -Wundef -Wno-long-long -Wsign-compare"
1207          fi
1208
1209          if test "$gccnum" -ge "296"; then
1210            dnl gcc 2.96 or later
1211            WARN="$WARN -Wfloat-equal"
1212          fi
1213
1214          if test "$gccnum" -gt "296"; then
1215            dnl this option does not exist in 2.96
1216            WARN="$WARN -Wno-format-nonliteral"
1217          fi
1218
1219          dnl -Wunreachable-code seems totally unreliable on my gcc 3.3.2 on
1220          dnl on i686-Linux as it gives us heaps with false positives.
1221          dnl Also, on gcc 4.0.X it is totally unbearable and complains all
1222          dnl over making it unusable for generic purposes. Let's not use it.
1223
1224          if test "$gccnum" -ge "303"; then
1225            dnl gcc 3.3 and later
1226            WARN="$WARN -Wendif-labels -Wstrict-prototypes"
1227          fi
1228
1229          if test "$gccnum" -ge "304"; then
1230            # try these on gcc 3.4
1231            WARN="$WARN -Wdeclaration-after-statement"
1232          fi
1233
1234          for flag in $CPPFLAGS; do
1235            case "$flag" in
1236             -I*)
1237               dnl Include path, provide a -isystem option for the same dir
1238               dnl to prevent warnings in those dirs. The -isystem was not very
1239               dnl reliable on earlier gcc versions.
1240               add=`echo $flag | sed 's/^-I/-isystem /g'`
1241               WARN="$WARN $add"
1242               ;;
1243            esac
1244          done
1245
1246        fi dnl $ICC = no
1247
1248        CFLAGS="$CFLAGS $WARN"
1249
1250       AC_MSG_NOTICE([Added this set of compiler options: $WARN])
1251
1252     else dnl $GCC = yes
1253
1254       AC_MSG_NOTICE([Added no extra compiler options])
1255
1256     fi dnl $GCC = yes
1257
1258     dnl strip off optimizer flags
1259     NEWFLAGS=""
1260     for flag in $CFLAGS; do
1261       case "$flag" in
1262       -O*)
1263         dnl echo "cut off $flag"
1264         ;;
1265       *)
1266         NEWFLAGS="$NEWFLAGS $flag"
1267         ;;
1268       esac
1269     done
1270     CFLAGS=$NEWFLAGS
1271
1272 ]) dnl end of AC_DEFUN()
1273
1274
1275 dnl Determine the name of the library to pass to dlopen() based on the name
1276 dnl that would normally be given to AC_CHECK_LIB.  The preprocessor symbol
1277 dnl given is set to the quoted library file name. 
1278 dnl The standard dynamic library file name is first generated, based on the
1279 dnl current system type, then a search is performed for that file on the
1280 dnl standard dynamic library path.  If it is a symbolic link, the destination
1281 dnl of the link is used as the file name, after stripping off any minor
1282 dnl version numbers. If a library file can't be found, a guess is made.
1283 dnl This macro assumes AC_PROG_LIBTOOL has been called and requires perl
1284 dnl to be available in the PATH, or $PERL to be set to its location.
1285 dnl
1286 dnl CURL_DLLIB_NAME(VARIABLE, library_name)
1287 dnl e.g. CURL_DLLIB_NAME(LDAP_NAME, ldap) on a Linux system might result
1288 dnl in LDAP_NAME holding the string "libldap.so.2".
1289
1290 AC_DEFUN([CURL_DLLIB_NAME],
1291 [
1292 AC_MSG_CHECKING([name of dynamic library $2])
1293 dnl The shared library extension variable name changes from version to
1294 dnl version of libtool.  Try a few names then just set one statically.
1295 test -z "$shared_ext" && shared_ext="$shrext_cmds"
1296 test -z "$shared_ext" && shared_ext="$shrext"
1297 test -z "$shared_ext" && shared_ext=".so"
1298
1299 dnl Create the library link name of the correct form for this platform
1300 LIBNAME_LINK_SPEC=`echo "$library_names_spec" | $SED 's/^.* //'`
1301 DLGUESSLIB=`name=$2 eval echo "$libname_spec"`
1302 DLGUESSFILE=`libname="$DLGUESSLIB" release="" major="" versuffix="" eval echo "$LIBNAME_LINK_SPEC"`
1303
1304 dnl Synthesize a likely dynamic library name in case we can't find an actual one
1305 SO_NAME_SPEC="$soname_spec"
1306 dnl soname_spec undefined when identical to the 1st entry in library_names_spec
1307 test -z "$SO_NAME_SPEC" && SO_NAME_SPEC=`echo "$library_names_spec" | $SED 's/ .*$//'`
1308 DLGUESSSOFILE=`libname="$DLGUESSLIB" release="" major="" versuffix="" eval echo "$SO_NAME_SPEC"`
1309
1310 if test "$cross_compiling" = yes; then
1311   dnl Can't look at filesystem when cross-compiling
1312   AC_DEFINE_UNQUOTED($1, "$DLGUESSSOFILE", [$2 dynamic library file])
1313   AC_MSG_RESULT([$DLGUESSSOFILE (guess while cross-compiling)])
1314 else
1315
1316   DLFOUNDFILE=""
1317   if test "$sys_lib_dlsearch_path_spec" ; then
1318     dnl Search for the link library name and see what it points to.
1319     for direc in $sys_lib_dlsearch_path_spec ; do
1320       DLTRYFILE="$direc/$DLGUESSFILE"
1321       dnl Find where the symbolic link for this name points
1322       changequote(<<, >>)dnl
1323       <<
1324       DLFOUNDFILE=`${PERL:-perl} -e 'use File::Basename; (basename(readlink($ARGV[0])) =~ /^(.*[^\d]\.\d+)[\d\.]*$/ && print ${1}) || exit 1;' "$DLTRYFILE" 2>&5`
1325       >>
1326       changequote([, ])dnl
1327       if test "$?" -eq "0"; then
1328         dnl Found the file link
1329         break
1330       fi
1331     done
1332   fi
1333
1334   if test -z "$DLFOUNDFILE" ; then
1335     dnl Couldn't find a link library, so guess at a name.
1336     DLFOUNDFILE="$DLGUESSSOFILE"
1337   fi
1338
1339   AC_DEFINE_UNQUOTED($1, "$DLFOUNDFILE", [$2 dynamic library file])
1340   AC_MSG_RESULT($DLFOUNDFILE)
1341 fi
1342 ])
1343
1344 # This is only a temporary fix. This macro is here to replace the broken one
1345 # delivered by the automake project (including the 1.9.6 release). As soon as
1346 # they ship a working version we SHOULD remove this work-around.
1347
1348 AC_DEFUN([AM_MISSING_HAS_RUN],
1349 [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
1350 test x"${MISSING+set}" = xset || MISSING="\${SHELL} \"$am_aux_dir/missing\""
1351 # Use eval to expand $SHELL
1352 if eval "$MISSING --run true"; then
1353   am_missing_run="$MISSING --run "
1354 else
1355   am_missing_run=
1356   AC_MSG_WARN([`missing' script is too old or missing])
1357 fi
1358 ])