No empty .Rs/.Re
[netbsd-mini2440.git] / crypto / dist / ipsec-tools / acracoon.m4
blob1f7e6c15398bb751226e80f8076f7386b6355810
1 dnl RACOON_PATH_LIBS(FUNCTION, LIB, SEARCH-PATHS [, ACTION-IF-FOUND
2 dnl            [, ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
3 dnl Search for a library defining FUNC, if it's not already available.
5 AC_DEFUN([RACOON_PATH_LIBS],
6 [AC_PREREQ([2.13])
7 AC_CACHE_CHECK([for $2 containing $1], [ac_cv_search_$1],
8 [ac_func_search_save_LIBS="$LIBS"
9 ac_cv_search_$1="no"
10 AC_TRY_LINK_FUNC([$1], [ac_cv_search_$1="none required"],
11         [LIBS="-l$2 $LIBS"
12         AC_TRY_LINK_FUNC([$1], [ac_cv_search_$1="-l$2"], [])])
13 LIBS="$ac_func_search_save_LIBS"
14 ifelse("x$3", "x", , [ test "$ac_cv_search_$1" = "no" && for i in $3; do
15   LIBS="-L$i -l$2 $ac_func_search_save_LIBS"
16   AC_TRY_LINK_FUNC([$1],
17   [ac_cv_search_$1="-L$i -l$2"
18   break])
19   done 
20 LIBS="$ac_func_search_save_LIBS" ]) ])
21 if test "$ac_cv_search_$1" != "no"; then
22   test "$ac_cv_search_$1" = "none required" || LIBS="$ac_cv_search_$1 $LIBS"
23   $4
24 else :
25   $5
26 fi])
28 dnl  Check if either va_copy() or __va_copy() is available. On linux systems 
29 dnl  at least one of these should be present.
30 AC_DEFUN([RACOON_CHECK_VA_COPY], [
31         saved_CFLAGS=$CFLAGS
32         CFLAGS="-Wall -O2"
33         AC_CACHE_CHECK([for an implementation of va_copy()],
34                 ac_cv_va_copy,[
35                 AC_TRY_RUN([#include <stdarg.h>
36                 void func (int i, ...) {
37                         va_list args1, args2;
38                         va_start (args1, i);
39                         va_copy (args2, args1);
40                         if (va_arg (args1, int) != 1 || va_arg (args2, int) != 1)
41                                 exit (1);
42                         va_end (args1);
43                         va_end (args2);
44                 }
45                 int main() {
46                         func (0, 1);
47                         return 0;
48                 }],
49                 [ac_cv_va_copy=yes],
50                 [ac_cv_va_copy=no],
51                 AC_MSG_WARN(Cross compiling... Unable to test va_copy)
52                 [ac_cv_va_copy=no])
53         ])
54         if test x$ac_cv_va_copy != xyes; then
55                 AC_CACHE_CHECK([for an implementation of __va_copy()],
56                         ac_cv___va_copy,[
57                         AC_TRY_RUN([#include <stdarg.h>
58                         void func (int i, ...) {
59                                 va_list args1, args2;
60                                 va_start (args1, i);
61                                 __va_copy (args2, args1);
62                                 if (va_arg (args1, int) != 1 || va_arg (args2, int) != 1)
63                                         exit (1);
64                                 va_end (args1);
65                                 va_end (args2);
66                         }
67                         int main() {
68                                 func (0, 1);
69                                 return 0;
70                         }],
71                         [ac_cv___va_copy=yes],
72                         [ac_cv___va_copy=no],
73                         AC_MSG_WARN(Cross compiling... Unable to test __va_copy)
74                         [ac_cv___va_copy=no])
75                 ])
76         fi
78         if test "x$ac_cv_va_copy" = "xyes"; then
79                 va_copy_func=va_copy
80         elif test "x$ac_cv___va_copy" = "xyes"; then
81                 va_copy_func=__va_copy
82         fi
84         if test -n "$va_copy_func"; then
85                 AC_DEFINE_UNQUOTED(VA_COPY,$va_copy_func,
86                         [A 'va_copy' style function])
87         else
88                 AC_MSG_WARN([Hmm, neither va_copy() nor __va_copy() found.])
89                 AC_MSG_WARN([Using a generic fallback.])
90         fi
91         CFLAGS=$saved_CFLAGS
92         unset saved_CFLAGS
95 AC_DEFUN([RACOON_CHECK_BUGGY_GETADDRINFO], [
96         AC_MSG_CHECKING(getaddrinfo bug)
97         saved_CFLAGS=$CFLAGS
98         CFLAGS="-Wall -O2"
99         AC_TRY_RUN([
100         #include <sys/types.h>
101         #include <sys/socket.h>
102         #include <netdb.h>
103         #include <stdlib.h>
104         #include <string.h>
105         #include <netinet/in.h>
106         
107         int main()
108         {
109           int passive, gaierr, inet4 = 0, inet6 = 0;
110           struct addrinfo hints, *ai, *aitop;
111           char straddr[INET6_ADDRSTRLEN], strport[16];
112         
113           for (passive = 0; passive <= 1; passive++) {
114             memset(&hints, 0, sizeof(hints));
115             hints.ai_family = AF_UNSPEC;
116             hints.ai_flags = passive ? AI_PASSIVE : 0;
117             hints.ai_protocol = IPPROTO_TCP;
118             hints.ai_socktype = SOCK_STREAM;
119             if ((gaierr = getaddrinfo(NULL, "54321", &hints, &aitop)) != 0) {
120               (void)gai_strerror(gaierr);
121               goto bad;
122             }
123             for (ai = aitop; ai; ai = ai->ai_next) {
124               if (ai->ai_addr == NULL ||
125                   ai->ai_addrlen == 0 ||
126                   getnameinfo(ai->ai_addr, ai->ai_addrlen,
127                               straddr, sizeof(straddr), strport, sizeof(strport),
128                               NI_NUMERICHOST|NI_NUMERICSERV) != 0) {
129                 goto bad;
130               }
131               switch (ai->ai_family) {
132               case AF_INET:
133                 if (strcmp(strport, "54321") != 0) {
134                   goto bad;
135                 }
136                 if (passive) {
137                   if (strcmp(straddr, "0.0.0.0") != 0) {
138                     goto bad;
139                   }
140                 } else {
141                   if (strcmp(straddr, "127.0.0.1") != 0) {
142                     goto bad;
143                   }
144                 }
145                 inet4++;
146                 break;
147               case AF_INET6:
148                 if (strcmp(strport, "54321") != 0) {
149                   goto bad;
150                 }
151                 if (passive) {
152                   if (strcmp(straddr, "::") != 0) {
153                     goto bad;
154                   }
155                 } else {
156                   if (strcmp(straddr, "::1") != 0) {
157                     goto bad;
158                   }
159                 }
160                 inet6++;
161                 break;
162               case AF_UNSPEC:
163                 goto bad;
164                 break;
165               default:
166                 /* another family support? */
167                 break;
168               }
169             }
170           }
171         
172           if (!(inet4 == 0 || inet4 == 2))
173             goto bad;
174           if (!(inet6 == 0 || inet6 == 2))
175             goto bad;
176         
177           if (aitop)
178             freeaddrinfo(aitop);
179           exit(0);
180         
181          bad:
182           if (aitop)
183             freeaddrinfo(aitop);
184           exit(1);
185         }
186         ],
187         AC_MSG_RESULT(good)
188         buggygetaddrinfo=no,
189         AC_MSG_RESULT(buggy)
190         buggygetaddrinfo=yes,
191         AC_MSG_RESULT(Cross compiling ... Assuming getaddrinfo is not buggy.)
192         buggygetaddrinfo=no)
193         CFLAGS=$saved_CFLAGS
194         unset saved_CFLAGS