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>