krb-ipv6.m4 revision 178826
155714Skrisdnl $Id: krb-ipv6.m4 14166 2004-08-26 12:35:42Z joda $
255714Skrisdnl
355714Skrisdnl test for IPv6
455714Skrisdnl
555714SkrisAC_DEFUN([AC_KRB_IPV6], [
655714SkrisAC_ARG_WITH(ipv6,
755714Skris	AS_HELP_STRING([--without-ipv6],[do not enable IPv6 support]),[
855714Skrisif test "$withval" = "no"; then
955714Skris	ac_cv_lib_ipv6=no
1055714Skrisfi])
1155714Skrissave_CFLAGS="${CFLAGS}"
1255714SkrisAC_CACHE_CHECK([for IPv6 stack type], v6type,
1355714Skris[dnl check for different v6 implementations (by itojun)
1455714Skrisv6type=unknown
1555714Skrisv6lib=none
1655714Skris
1755714Skrisfor i in v6d toshiba kame inria zeta linux; do
1855714Skris	case $i in
1955714Skris	v6d)
2055714Skris		AC_EGREP_CPP(yes, [
2155714Skris#include </usr/local/v6/include/sys/types.h>
2255714Skris#ifdef __V6D__
2355714Skrisyes
2455714Skris#endif],
2555714Skris			[v6type=$i; v6lib=v6;
2655714Skris			v6libdir=/usr/local/v6/lib;
2755714Skris			CFLAGS="-I/usr/local/v6/include $CFLAGS"])
2855714Skris		;;
2955714Skris	toshiba)
3055714Skris		AC_EGREP_CPP(yes, [
3155714Skris#include <sys/param.h>
3255714Skris#ifdef _TOSHIBA_INET6
3355714Skrisyes
3455714Skris#endif],
3555714Skris			[v6type=$i; v6lib=inet6;
3655714Skris			v6libdir=/usr/local/v6/lib;
3755714Skris			CFLAGS="-DINET6 $CFLAGS"])
3855714Skris		;;
3955714Skris	kame)
4055714Skris		AC_EGREP_CPP(yes, [
4155714Skris#include <netinet/in.h>
4255714Skris#ifdef __KAME__
4355714Skrisyes
4455714Skris#endif],
4555714Skris			[v6type=$i; v6lib=inet6;
4655714Skris			v6libdir=/usr/local/v6/lib;
4755714Skris			CFLAGS="-DINET6 $CFLAGS"])
4855714Skris		;;
4955714Skris	inria)
5055714Skris		AC_EGREP_CPP(yes, [
5155714Skris#include <netinet/in.h>
5255714Skris#ifdef IPV6_INRIA_VERSION
5355714Skrisyes
5455714Skris#endif],
5555714Skris			[v6type=$i; CFLAGS="-DINET6 $CFLAGS"])
5655714Skris		;;
5755714Skris	zeta)
5855714Skris		AC_EGREP_CPP(yes, [
5955714Skris#include <sys/param.h>
6055714Skris#ifdef _ZETA_MINAMI_INET6
6155714Skrisyes
62109998Smarkm#endif],
6355714Skris			[v6type=$i; v6lib=inet6;
6455714Skris			v6libdir=/usr/local/v6/lib;
6555714Skris			CFLAGS="-DINET6 $CFLAGS"])
6655714Skris		;;
6755714Skris	linux)
6855714Skris		if test -d /usr/inet6; then
6955714Skris			v6type=$i
7055714Skris			v6lib=inet6
7155714Skris			v6libdir=/usr/inet6
7255714Skris			CFLAGS="-DINET6 $CFLAGS"
7355714Skris		fi
7455714Skris		;;
7555714Skris	esac
7655714Skris	if test "$v6type" != "unknown"; then
7755714Skris		break
7855714Skris	fi
7955714Skrisdone
8055714Skris
8155714Skrisif test "$v6lib" != "none"; then
8255714Skris	for dir in $v6libdir /usr/local/v6/lib /usr/local/lib; do
8355714Skris		if test -d $dir -a -f $dir/lib$v6lib.a; then
8455714Skris			LIBS="-L$dir -l$v6lib $LIBS"
85109998Smarkm			break
8655714Skris		fi
8755714Skris	done
8855714Skrisfi
8955714Skris])
9055714Skris
9155714SkrisAC_CACHE_CHECK([for IPv6], ac_cv_lib_ipv6, [
9255714SkrisAC_LINK_IFELSE([AC_LANG_PROGRAM([[
9355714Skris#ifdef HAVE_SYS_TYPES_H
9455714Skris#include <sys/types.h>
9555714Skris#endif
9655714Skris#ifdef HAVE_SYS_SOCKET_H
9755714Skris#include <sys/socket.h>
9855714Skris#endif
9955714Skris#ifdef HAVE_NETINET_IN_H
10055714Skris#include <netinet/in.h>
10155714Skris#endif
10255714Skris#ifdef HAVE_NETINET_IN6_H
10355714Skris#include <netinet/in6.h>
10455714Skris#endif
10555714Skris]],
10655714Skris[[
10755714Skris struct sockaddr_in6 sin6;
10855714Skris int s;
10955714Skris
11055714Skris s = socket(AF_INET6, SOCK_DGRAM, 0);
11155714Skris
11255714Skris sin6.sin6_family = AF_INET6;
11355714Skris sin6.sin6_port = htons(17);
11455714Skris sin6.sin6_addr = in6addr_any;
11555714Skris bind(s, (struct sockaddr *)&sin6, sizeof(sin6));
11655714Skris]])],
11755714Skris[ac_cv_lib_ipv6=yes],
11855714Skris[ac_cv_lib_ipv6=no])])
11955714Skrisif test "$ac_cv_lib_ipv6" = yes; then
12055714Skris  AC_DEFINE(HAVE_IPV6, 1, [Define if you have IPv6.])
12155714Skriselse
12255714Skris  CFLAGS="${save_CFLAGS}"
12355714Skrisfi
12455714Skris
12555714Skris## test for AIX missing in6addr_loopback
12655714Skrisif test "$ac_cv_lib_ipv6" = yes; then
12755714Skris	AC_CACHE_CHECK([for in6addr_loopback],[ac_cv_var_in6addr_loopback],[
12855714Skris	AC_LINK_IFELSE([AC_LANG_PROGRAM([[
12955714Skris#ifdef HAVE_SYS_TYPES_H
13055714Skris#include <sys/types.h>
13155714Skris#endif
13255714Skris#ifdef HAVE_SYS_SOCKET_H
13355714Skris#include <sys/socket.h>
13455714Skris#endif
13555714Skris#ifdef HAVE_NETINET_IN_H
13655714Skris#include <netinet/in.h>
13755714Skris#endif
13855714Skris#ifdef HAVE_NETINET_IN6_H
13955714Skris#include <netinet/in6.h>
14055714Skris#endif]],[[
14155714Skrisstruct sockaddr_in6 sin6;
14255714Skrissin6.sin6_addr = in6addr_loopback;
14355714Skris]])],[ac_cv_var_in6addr_loopback=yes],[ac_cv_var_in6addr_loopback=no])])
14455714Skris	if test "$ac_cv_var_in6addr_loopback" = yes; then
14555714Skris		AC_DEFINE(HAVE_IN6ADDR_LOOPBACK, 1, 
14655714Skris			[Define if you have the in6addr_loopback variable])
14755714Skris	fi
14855714Skrisfi
14955714Skris])