krb-ipv6.m4 revision 90926
1dnl $Id: krb-ipv6.m4,v 1.12 2001/08/19 16:27:02 joda Exp $
2dnl
3dnl test for IPv6
4dnl
5AC_DEFUN(AC_KRB_IPV6, [
6AC_ARG_WITH(ipv6,
7[  --without-ipv6	do not enable IPv6 support],[
8if test "$withval" = "no"; then
9	ac_cv_lib_ipv6=no
10fi])
11save_CFLAGS="${CFLAGS}"
12AC_CACHE_VAL(ac_cv_lib_ipv6,
13[dnl check for different v6 implementations (by itojun)
14v6type=unknown
15v6lib=none
16
17AC_MSG_CHECKING([ipv6 stack type])
18for i in v6d toshiba kame inria zeta linux; do
19	case $i in
20	v6d)
21		AC_EGREP_CPP(yes, [
22#include </usr/local/v6/include/sys/types.h>
23#ifdef __V6D__
24yes
25#endif],
26			[v6type=$i; v6lib=v6;
27			v6libdir=/usr/local/v6/lib;
28			CFLAGS="-I/usr/local/v6/include $CFLAGS"])
29		;;
30	toshiba)
31		AC_EGREP_CPP(yes, [
32#include <sys/param.h>
33#ifdef _TOSHIBA_INET6
34yes
35#endif],
36			[v6type=$i; v6lib=inet6;
37			v6libdir=/usr/local/v6/lib;
38			CFLAGS="-DINET6 $CFLAGS"])
39		;;
40	kame)
41		AC_EGREP_CPP(yes, [
42#include <netinet/in.h>
43#ifdef __KAME__
44yes
45#endif],
46			[v6type=$i; v6lib=inet6;
47			v6libdir=/usr/local/v6/lib;
48			CFLAGS="-DINET6 $CFLAGS"])
49		;;
50	inria)
51		AC_EGREP_CPP(yes, [
52#include <netinet/in.h>
53#ifdef IPV6_INRIA_VERSION
54yes
55#endif],
56			[v6type=$i; CFLAGS="-DINET6 $CFLAGS"])
57		;;
58	zeta)
59		AC_EGREP_CPP(yes, [
60#include <sys/param.h>
61#ifdef _ZETA_MINAMI_INET6
62yes
63#endif],
64			[v6type=$i; v6lib=inet6;
65			v6libdir=/usr/local/v6/lib;
66			CFLAGS="-DINET6 $CFLAGS"])
67		;;
68	linux)
69		if test -d /usr/inet6; then
70			v6type=$i
71			v6lib=inet6
72			v6libdir=/usr/inet6
73			CFLAGS="-DINET6 $CFLAGS"
74		fi
75		;;
76	esac
77	if test "$v6type" != "unknown"; then
78		break
79	fi
80done
81AC_MSG_RESULT($v6type)
82
83if test "$v6lib" != "none"; then
84	for dir in $v6libdir /usr/local/v6/lib /usr/local/lib; do
85		if test -d $dir -a -f $dir/lib$v6lib.a; then
86			LIBS="-L$dir -l$v6lib $LIBS"
87			break
88		fi
89	done
90fi
91AC_TRY_LINK([
92#ifdef HAVE_SYS_TYPES_H
93#include <sys/types.h>
94#endif
95#ifdef HAVE_SYS_SOCKET_H
96#include <sys/socket.h>
97#endif
98#ifdef HAVE_NETINET_IN_H
99#include <netinet/in.h>
100#endif
101#ifdef HAVE_NETINET_IN6_H
102#include <netinet/in6.h>
103#endif
104],
105[
106 struct sockaddr_in6 sin6;
107 int s;
108
109 s = socket(AF_INET6, SOCK_DGRAM, 0);
110
111 sin6.sin6_family = AF_INET6;
112 sin6.sin6_port = htons(17);
113 sin6.sin6_addr = in6addr_any;
114 bind(s, (struct sockaddr *)&sin6, sizeof(sin6));
115],
116ac_cv_lib_ipv6=yes,
117ac_cv_lib_ipv6=no)])
118AC_MSG_CHECKING(for IPv6)
119AC_MSG_RESULT($ac_cv_lib_ipv6)
120if test "$ac_cv_lib_ipv6" = yes; then
121  AC_DEFINE(HAVE_IPV6, 1, [Define if you have IPv6.])
122else
123  CFLAGS="${save_CFLAGS}"
124fi
125
126## test for AIX missing in6addr_loopback
127if test "$ac_cv_lib_ipv6" = yes; then
128	AC_CACHE_CHECK([for in6addr_loopback],[ac_cv_var_in6addr_loopback],[
129	AC_TRY_LINK([
130#ifdef HAVE_SYS_TYPES_H
131#include <sys/types.h>
132#endif
133#ifdef HAVE_SYS_SOCKET_H
134#include <sys/socket.h>
135#endif
136#ifdef HAVE_NETINET_IN_H
137#include <netinet/in.h>
138#endif
139#ifdef HAVE_NETINET_IN6_H
140#include <netinet/in6.h>
141#endif],[
142struct sockaddr_in6 sin6;
143sin6.sin6_addr = in6addr_loopback;
144],ac_cv_var_in6addr_loopback=yes,ac_cv_var_in6addr_loopback=no)])
145	if test "$ac_cv_var_in6addr_loopback" = yes; then
146		AC_DEFINE(HAVE_IN6ADDR_LOOPBACK, 1, 
147			[Define if you have the in6addr_loopback variable])
148	fi
149fi
150])