Annotation of embedaddon/ipsec-tools/acracoon.m4, revision 1.1.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>