1178825Sdfrdnl $Id: krb-ipv6.m4 14166 2004-08-26 12:35:42Z joda $
255682Smarkmdnl
355682Smarkmdnl test for IPv6
455682Smarkmdnl
5127808SnectarAC_DEFUN([AC_KRB_IPV6], [
655682SmarkmAC_ARG_WITH(ipv6,
7178825Sdfr	AS_HELP_STRING([--without-ipv6],[do not enable IPv6 support]),[
855682Smarkmif test "$withval" = "no"; then
955682Smarkm	ac_cv_lib_ipv6=no
1055682Smarkmfi])
1178527Sassarsave_CFLAGS="${CFLAGS}"
12102644SnectarAC_CACHE_CHECK([for IPv6 stack type], v6type,
1355682Smarkm[dnl check for different v6 implementations (by itojun)
1455682Smarkmv6type=unknown
1555682Smarkmv6lib=none
1655682Smarkm
1755682Smarkmfor i in v6d toshiba kame inria zeta linux; do
1855682Smarkm	case $i in
1955682Smarkm	v6d)
2072445Sassar		AC_EGREP_CPP(yes, [
2155682Smarkm#include </usr/local/v6/include/sys/types.h>
2255682Smarkm#ifdef __V6D__
2355682Smarkmyes
2455682Smarkm#endif],
2555682Smarkm			[v6type=$i; v6lib=v6;
2655682Smarkm			v6libdir=/usr/local/v6/lib;
2755682Smarkm			CFLAGS="-I/usr/local/v6/include $CFLAGS"])
2855682Smarkm		;;
2955682Smarkm	toshiba)
3072445Sassar		AC_EGREP_CPP(yes, [
3155682Smarkm#include <sys/param.h>
3255682Smarkm#ifdef _TOSHIBA_INET6
3355682Smarkmyes
3455682Smarkm#endif],
3555682Smarkm			[v6type=$i; v6lib=inet6;
3655682Smarkm			v6libdir=/usr/local/v6/lib;
3755682Smarkm			CFLAGS="-DINET6 $CFLAGS"])
3855682Smarkm		;;
3955682Smarkm	kame)
4072445Sassar		AC_EGREP_CPP(yes, [
4155682Smarkm#include <netinet/in.h>
4255682Smarkm#ifdef __KAME__
4355682Smarkmyes
4455682Smarkm#endif],
4555682Smarkm			[v6type=$i; v6lib=inet6;
4655682Smarkm			v6libdir=/usr/local/v6/lib;
4755682Smarkm			CFLAGS="-DINET6 $CFLAGS"])
4855682Smarkm		;;
4955682Smarkm	inria)
5072445Sassar		AC_EGREP_CPP(yes, [
5155682Smarkm#include <netinet/in.h>
5255682Smarkm#ifdef IPV6_INRIA_VERSION
5355682Smarkmyes
5455682Smarkm#endif],
5555682Smarkm			[v6type=$i; CFLAGS="-DINET6 $CFLAGS"])
5655682Smarkm		;;
5755682Smarkm	zeta)
5872445Sassar		AC_EGREP_CPP(yes, [
5955682Smarkm#include <sys/param.h>
6055682Smarkm#ifdef _ZETA_MINAMI_INET6
6155682Smarkmyes
6255682Smarkm#endif],
6355682Smarkm			[v6type=$i; v6lib=inet6;
6455682Smarkm			v6libdir=/usr/local/v6/lib;
6555682Smarkm			CFLAGS="-DINET6 $CFLAGS"])
6655682Smarkm		;;
6755682Smarkm	linux)
6855682Smarkm		if test -d /usr/inet6; then
6955682Smarkm			v6type=$i
7055682Smarkm			v6lib=inet6
7155682Smarkm			v6libdir=/usr/inet6
7255682Smarkm			CFLAGS="-DINET6 $CFLAGS"
7355682Smarkm		fi
7455682Smarkm		;;
7555682Smarkm	esac
7655682Smarkm	if test "$v6type" != "unknown"; then
7755682Smarkm		break
7855682Smarkm	fi
7955682Smarkmdone
8055682Smarkm
8155682Smarkmif test "$v6lib" != "none"; then
8255682Smarkm	for dir in $v6libdir /usr/local/v6/lib /usr/local/lib; do
8355682Smarkm		if test -d $dir -a -f $dir/lib$v6lib.a; then
8455682Smarkm			LIBS="-L$dir -l$v6lib $LIBS"
8555682Smarkm			break
8655682Smarkm		fi
8755682Smarkm	done
8855682Smarkmfi
89102644Snectar])
90102644Snectar
91102644SnectarAC_CACHE_CHECK([for IPv6], ac_cv_lib_ipv6, [
92178825SdfrAC_LINK_IFELSE([AC_LANG_PROGRAM([[
9355682Smarkm#ifdef HAVE_SYS_TYPES_H
9455682Smarkm#include <sys/types.h>
9555682Smarkm#endif
9655682Smarkm#ifdef HAVE_SYS_SOCKET_H
9755682Smarkm#include <sys/socket.h>
9855682Smarkm#endif
9955682Smarkm#ifdef HAVE_NETINET_IN_H
10055682Smarkm#include <netinet/in.h>
10155682Smarkm#endif
10255682Smarkm#ifdef HAVE_NETINET_IN6_H
10355682Smarkm#include <netinet/in6.h>
10455682Smarkm#endif
105178825Sdfr]],
106178825Sdfr[[
10755682Smarkm struct sockaddr_in6 sin6;
10855682Smarkm int s;
10955682Smarkm
11055682Smarkm s = socket(AF_INET6, SOCK_DGRAM, 0);
11155682Smarkm
11255682Smarkm sin6.sin6_family = AF_INET6;
11355682Smarkm sin6.sin6_port = htons(17);
11455682Smarkm sin6.sin6_addr = in6addr_any;
11555682Smarkm bind(s, (struct sockaddr *)&sin6, sizeof(sin6));
116178825Sdfr]])],
117178825Sdfr[ac_cv_lib_ipv6=yes],
118178825Sdfr[ac_cv_lib_ipv6=no])])
11955682Smarkmif test "$ac_cv_lib_ipv6" = yes; then
12055682Smarkm  AC_DEFINE(HAVE_IPV6, 1, [Define if you have IPv6.])
12178527Sassarelse
12278527Sassar  CFLAGS="${save_CFLAGS}"
12355682Smarkmfi
12490926Snectar
12590926Snectar## test for AIX missing in6addr_loopback
12690926Snectarif test "$ac_cv_lib_ipv6" = yes; then
12790926Snectar	AC_CACHE_CHECK([for in6addr_loopback],[ac_cv_var_in6addr_loopback],[
128178825Sdfr	AC_LINK_IFELSE([AC_LANG_PROGRAM([[
12990926Snectar#ifdef HAVE_SYS_TYPES_H
13090926Snectar#include <sys/types.h>
13190926Snectar#endif
13290926Snectar#ifdef HAVE_SYS_SOCKET_H
13390926Snectar#include <sys/socket.h>
13490926Snectar#endif
13590926Snectar#ifdef HAVE_NETINET_IN_H
13690926Snectar#include <netinet/in.h>
13790926Snectar#endif
13890926Snectar#ifdef HAVE_NETINET_IN6_H
13990926Snectar#include <netinet/in6.h>
140178825Sdfr#endif]],[[
14190926Snectarstruct sockaddr_in6 sin6;
14290926Snectarsin6.sin6_addr = in6addr_loopback;
143178825Sdfr]])],[ac_cv_var_in6addr_loopback=yes],[ac_cv_var_in6addr_loopback=no])])
14490926Snectar	if test "$ac_cv_var_in6addr_loopback" = yes; then
14590926Snectar		AC_DEFINE(HAVE_IN6ADDR_LOOPBACK, 1, 
14690926Snectar			[Define if you have the in6addr_loopback variable])
14790926Snectar	fi
14890926Snectarfi
14990926Snectar])