Annotation of embedaddon/ipsec-tools/acracoon.m4, revision 1.1
1.1 ! misho 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.
! 4:
! 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])
! 27:
! 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
! 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:
! 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
! 195: ])
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>