File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / ipsec-tools / acracoon.m4
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 22:39:10 2012 UTC (12 years, 3 months ago) by misho
Branches: ipsec-tools, MAIN
CVS tags: v0_8_2p2, v0_8_1p0, v0_8_1, v0_8_0p0, v0_8_0, HEAD
ipsec-tools

    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>