Home | History | Annotate | Line # | Download | only in ipsec-tools
acracoon.m4 revision 1.1
      1  1.1  manu dnl RACOON_PATH_LIBS(FUNCTION, LIB, SEARCH-PATHS [, ACTION-IF-FOUND
      2  1.1  manu dnl            [, ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
      3  1.1  manu dnl Search for a library defining FUNC, if it's not already available.
      4  1.1  manu 
      5  1.1  manu AC_DEFUN([RACOON_PATH_LIBS],
      6  1.1  manu [AC_PREREQ([2.13])
      7  1.1  manu AC_CACHE_CHECK([for $2 containing $1], [ac_cv_search_$1],
      8  1.1  manu [ac_func_search_save_LIBS="$LIBS"
      9  1.1  manu ac_cv_search_$1="no"
     10  1.1  manu AC_TRY_LINK_FUNC([$1], [ac_cv_search_$1="none required"],
     11  1.1  manu 	[LIBS="-l$2 $LIBS"
     12  1.1  manu 	AC_TRY_LINK_FUNC([$1], [ac_cv_search_$1="-l$2"], [])])
     13  1.1  manu LIBS="$ac_func_search_save_LIBS"
     14  1.1  manu ifelse("x$3", "x", , [ test "$ac_cv_search_$1" = "no" && for i in $3; do
     15  1.1  manu   LIBS="-L$i -l$2 $ac_func_search_save_LIBS"
     16  1.1  manu   AC_TRY_LINK_FUNC([$1],
     17  1.1  manu   [ac_cv_search_$1="-L$i -l$2"
     18  1.1  manu   break])
     19  1.1  manu   done 
     20  1.1  manu LIBS="$ac_func_search_save_LIBS" ]) ])
     21  1.1  manu if test "$ac_cv_search_$1" != "no"; then
     22  1.1  manu   test "$ac_cv_search_$1" = "none required" || LIBS="$ac_cv_search_$1 $LIBS"
     23  1.1  manu   $4
     24  1.1  manu else :
     25  1.1  manu   $5
     26  1.1  manu fi])
     27  1.1  manu 
     28  1.1  manu dnl  Check if either va_copy() or __va_copy() is available. On linux systems 
     29  1.1  manu dnl  at least one of these should be present.
     30  1.1  manu AC_DEFUN([RACOON_CHECK_VA_COPY], [
     31  1.1  manu 	saved_CFLAGS=$CFLAGS
     32  1.1  manu 	CFLAGS="-Wall -O2"
     33  1.1  manu 	AC_CACHE_CHECK([for an implementation of va_copy()],
     34  1.1  manu 		ac_cv_va_copy,[
     35  1.1  manu 		AC_TRY_RUN([#include <stdarg.h>
     36  1.1  manu 		void func (int i, ...) {
     37  1.1  manu 			va_list args1, args2;
     38  1.1  manu 			va_start (args1, i);
     39  1.1  manu 			va_copy (args2, args1);
     40  1.1  manu 			if (va_arg (args1, int) != 1 || va_arg (args2, int) != 1)
     41  1.1  manu 				exit (1);
     42  1.1  manu 	 		va_end (args1);
     43  1.1  manu 			va_end (args2);
     44  1.1  manu 		}
     45  1.1  manu 		int main() {
     46  1.1  manu 			func (0, 1);
     47  1.1  manu 			return 0;
     48  1.1  manu 		}],
     49  1.1  manu 		[ac_cv_va_copy=yes],
     50  1.1  manu 		[ac_cv_va_copy=no],
     51  1.1  manu 		[])
     52  1.1  manu 	])
     53  1.1  manu 	if test x$ac_cv_va_copy != xyes; then
     54  1.1  manu 		AC_CACHE_CHECK([for an implementation of __va_copy()],
     55  1.1  manu 			ac_cv___va_copy,[
     56  1.1  manu 			AC_TRY_RUN([#include <stdarg.h>
     57  1.1  manu 			void func (int i, ...) {
     58  1.1  manu 				va_list args1, args2;
     59  1.1  manu 				va_start (args1, i);
     60  1.1  manu 				__va_copy (args2, args1);
     61  1.1  manu 				if (va_arg (args1, int) != 1 || va_arg (args2, int) != 1)
     62  1.1  manu 					exit (1);
     63  1.1  manu 				va_end (args1);
     64  1.1  manu 				va_end (args2);
     65  1.1  manu 			}
     66  1.1  manu 			int main() {
     67  1.1  manu 				func (0, 1);
     68  1.1  manu 				return 0;
     69  1.1  manu 			}],
     70  1.1  manu 			[ac_cv___va_copy=yes],
     71  1.1  manu 			[ac_cv___va_copy=no],
     72  1.1  manu 			[])
     73  1.1  manu 		])
     74  1.1  manu 	fi
     75  1.1  manu 
     76  1.1  manu 	if test "x$ac_cv_va_copy" = "xyes"; then
     77  1.1  manu 		va_copy_func=va_copy
     78  1.1  manu 	elif test "x$ac_cv___va_copy" = "xyes"; then
     79  1.1  manu 		va_copy_func=__va_copy
     80  1.1  manu 	fi
     81  1.1  manu 
     82  1.1  manu 	if test -n "$va_copy_func"; then
     83  1.1  manu 		AC_DEFINE_UNQUOTED(VA_COPY,$va_copy_func,
     84  1.1  manu 			[A 'va_copy' style function])
     85  1.1  manu 	else
     86  1.1  manu 		AC_MSG_WARN([Hmm, neither va_copy() nor __va_copy() found.])
     87  1.1  manu 		AC_MSG_WARN([Using a generic fallback.])
     88  1.1  manu 	fi
     89  1.1  manu 	CFLAGS=$saved_CFLAGS
     90  1.1  manu 	unset saved_CFLAGS
     91  1.1  manu ])
     92  1.1  manu 
     93  1.1  manu AC_DEFUN([RACOON_CHECK_BUGGY_GETADDRINFO], [
     94  1.1  manu 	AC_MSG_CHECKING(getaddrinfo bug)
     95  1.1  manu 	saved_CFLAGS=$CFLAGS
     96  1.1  manu 	CFLAGS="-Wall -O2"
     97  1.1  manu 	AC_TRY_RUN([
     98  1.1  manu 	#include <sys/types.h>
     99  1.1  manu 	#include <sys/socket.h>
    100  1.1  manu 	#include <netdb.h>
    101  1.1  manu 	#include <stdlib.h>
    102  1.1  manu 	#include <string.h>
    103  1.1  manu 	#include <netinet/in.h>
    104  1.1  manu 	
    105  1.1  manu 	int main()
    106  1.1  manu 	{
    107  1.1  manu 	  int passive, gaierr, inet4 = 0, inet6 = 0;
    108  1.1  manu 	  struct addrinfo hints, *ai, *aitop;
    109  1.1  manu 	  char straddr[INET6_ADDRSTRLEN], strport[16];
    110  1.1  manu 	
    111  1.1  manu 	  for (passive = 0; passive <= 1; passive++) {
    112  1.1  manu 	    memset(&hints, 0, sizeof(hints));
    113  1.1  manu 	    hints.ai_family = AF_UNSPEC;
    114  1.1  manu 	    hints.ai_flags = passive ? AI_PASSIVE : 0;
    115  1.1  manu 	    hints.ai_protocol = IPPROTO_TCP;
    116  1.1  manu 	    hints.ai_socktype = SOCK_STREAM;
    117  1.1  manu 	    if ((gaierr = getaddrinfo(NULL, "54321", &hints, &aitop)) != 0) {
    118  1.1  manu 	      (void)gai_strerror(gaierr);
    119  1.1  manu 	      goto bad;
    120  1.1  manu 	    }
    121  1.1  manu 	    for (ai = aitop; ai; ai = ai->ai_next) {
    122  1.1  manu 	      if (ai->ai_addr == NULL ||
    123  1.1  manu 	          ai->ai_addrlen == 0 ||
    124  1.1  manu 	          getnameinfo(ai->ai_addr, ai->ai_addrlen,
    125  1.1  manu 	                      straddr, sizeof(straddr), strport, sizeof(strport),
    126  1.1  manu 	                      NI_NUMERICHOST|NI_NUMERICSERV) != 0) {
    127  1.1  manu 	        goto bad;
    128  1.1  manu 	      }
    129  1.1  manu 	      switch (ai->ai_family) {
    130  1.1  manu 	      case AF_INET:
    131  1.1  manu 		if (strcmp(strport, "54321") != 0) {
    132  1.1  manu 		  goto bad;
    133  1.1  manu 		}
    134  1.1  manu 	        if (passive) {
    135  1.1  manu 	          if (strcmp(straddr, "0.0.0.0") != 0) {
    136  1.1  manu 	            goto bad;
    137  1.1  manu 	          }
    138  1.1  manu 	        } else {
    139  1.1  manu 	          if (strcmp(straddr, "127.0.0.1") != 0) {
    140  1.1  manu 	            goto bad;
    141  1.1  manu 	          }
    142  1.1  manu 	        }
    143  1.1  manu 	        inet4++;
    144  1.1  manu 	        break;
    145  1.1  manu 	      case AF_INET6:
    146  1.1  manu 		if (strcmp(strport, "54321") != 0) {
    147  1.1  manu 		  goto bad;
    148  1.1  manu 		}
    149  1.1  manu 	        if (passive) {
    150  1.1  manu 	          if (strcmp(straddr, "::") != 0) {
    151  1.1  manu 	            goto bad;
    152  1.1  manu 	          }
    153  1.1  manu 	        } else {
    154  1.1  manu 	          if (strcmp(straddr, "::1") != 0) {
    155  1.1  manu 	            goto bad;
    156  1.1  manu 	          }
    157  1.1  manu 	        }
    158  1.1  manu 	        inet6++;
    159  1.1  manu 	        break;
    160  1.1  manu 	      case AF_UNSPEC:
    161  1.1  manu 	        goto bad;
    162  1.1  manu 	        break;
    163  1.1  manu 	      default:
    164  1.1  manu 	        /* another family support? */
    165  1.1  manu 	        break;
    166  1.1  manu 	      }
    167  1.1  manu 	    }
    168  1.1  manu 	  }
    169  1.1  manu 	
    170  1.1  manu 	  if (!(inet4 == 0 || inet4 == 2))
    171  1.1  manu 	    goto bad;
    172  1.1  manu 	  if (!(inet6 == 0 || inet6 == 2))
    173  1.1  manu 	    goto bad;
    174  1.1  manu 	
    175  1.1  manu 	  if (aitop)
    176  1.1  manu 	    freeaddrinfo(aitop);
    177  1.1  manu 	  exit(0);
    178  1.1  manu 	
    179  1.1  manu 	 bad:
    180  1.1  manu 	  if (aitop)
    181  1.1  manu 	    freeaddrinfo(aitop);
    182  1.1  manu 	  exit(1);
    183  1.1  manu 	}
    184  1.1  manu 	],
    185  1.1  manu 	AC_MSG_RESULT(good)
    186  1.1  manu 	buggygetaddrinfo=no,
    187  1.1  manu 	AC_MSG_RESULT(buggy)
    188  1.1  manu 	buggygetaddrinfo=yes,
    189  1.1  manu 	AC_MSG_RESULT(buggy)
    190  1.1  manu 	buggygetaddrinfo=yes)
    191  1.1  manu 	CFLAGS=$saved_CFLAGS
    192  1.1  manu 	unset saved_CFLAGS
    193  1.1  manu ])
    194