source: rtems-libbsd/ipsec-tools/acracoon.m4 @ 91b858d

55-freebsd-126-freebsd-12
Last change on this file since 91b858d was ff36f5e, checked in by Christian Mauderer <christian.mauderer@…>, on 05/30/18 at 12:27:35

Import ipsec-tools 0.8.2.

Import unchanged ipsec-tools sources in the release version 0.8.2. The
homepage of ipsec-tools is http://ipsec-tools.sourceforge.net/. The
sources can be obtained from there.

  • Property mode set to 100644
File size: 4.9 KB
Line 
1dnl RACOON_PATH_LIBS(FUNCTION, LIB, SEARCH-PATHS [, ACTION-IF-FOUND
2dnl            [, ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
3dnl Search for a library defining FUNC, if it's not already available.
4
5AC_DEFUN([RACOON_PATH_LIBS],
6[AC_PREREQ([2.13])
7AC_CACHE_CHECK([for $2 containing $1], [ac_cv_search_$1],
8[ac_func_search_save_LIBS="$LIBS"
9ac_cv_search_$1="no"
10AC_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"], [])])
13LIBS="$ac_func_search_save_LIBS"
14ifelse("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
20LIBS="$ac_func_search_save_LIBS" ]) ])
21if test "$ac_cv_search_$1" != "no"; then
22  test "$ac_cv_search_$1" = "none required" || LIBS="$ac_cv_search_$1 $LIBS"
23  $4
24else :
25  $5
26fi])
27
28dnl  Check if either va_copy() or __va_copy() is available. On linux systems
29dnl  at least one of these should be present.
30AC_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
77
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
83
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
93])
94
95AC_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
195])
Note: See TracBrowser for help on using the repository browser.