mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-25 11:37:56 +00:00
2b15cb3d09
Thanks to roberto for providing pointers to wedge this into HEAD. Approved by: roberto
529 lines
11 KiB
Plaintext
529 lines
11 KiB
Plaintext
dnl ######################################################################
|
|
dnl Common IPv6 detection for NTP configure.ac files
|
|
AC_DEFUN([NTP_IPV6], [
|
|
|
|
AC_CACHE_CHECK(
|
|
[for struct sockaddr_storage],
|
|
[ntp_cv_sockaddr_storage],
|
|
[AC_COMPILE_IFELSE(
|
|
[AC_LANG_PROGRAM(
|
|
[[
|
|
#ifdef HAVE_SYS_TYPES_H
|
|
# include <sys/types.h>
|
|
#endif
|
|
#ifdef HAVE_SYS_SOCKET_H
|
|
# include <sys/socket.h>
|
|
#endif
|
|
#ifdef HAVE_NETINET_IN_H
|
|
# include <netinet/in.h>
|
|
#endif
|
|
]],
|
|
[[
|
|
struct sockaddr_storage n;
|
|
]]
|
|
)],
|
|
[ntp_cv_sockaddr_storage=yes],
|
|
[ntp_cv_sockaddr_storage=no]
|
|
)]
|
|
)
|
|
case "$ntp_cv_sockaddr_storage" in
|
|
yes)
|
|
AC_DEFINE([HAVE_STRUCT_SOCKADDR_STORAGE], [1],
|
|
[Does a system header define struct sockaddr_storage?])
|
|
AC_CACHE_CHECK(
|
|
[for sockaddr_storage.__ss_family],
|
|
[ntp_cv_have___ss_family],
|
|
[AC_COMPILE_IFELSE(
|
|
[AC_LANG_PROGRAM(
|
|
[[
|
|
#ifdef HAVE_SYS_TYPES_H
|
|
# include <sys/types.h>
|
|
#endif
|
|
#ifdef HAVE_SYS_SOCKET_H
|
|
# include <sys/socket.h>
|
|
#endif
|
|
#ifdef HAVE_NETINET_IN_H
|
|
# include <netinet/in.h>
|
|
#endif
|
|
]],
|
|
[[
|
|
struct sockaddr_storage s;
|
|
s.__ss_family = 1;
|
|
]]
|
|
)],
|
|
[ntp_cv_have___ss_family=yes],
|
|
[ntp_cv_have___ss_family=no]
|
|
)]
|
|
)
|
|
case "$ntp_cv_have___ss_family" in
|
|
yes)
|
|
AC_DEFINE([HAVE___SS_FAMILY_IN_SS], [1],
|
|
[Does struct sockaddr_storage have __ss_family?])
|
|
esac
|
|
AH_VERBATIM(
|
|
[HAVE___SS_FAMILY_IN_SS_VERBATIM],
|
|
[
|
|
/* Handle sockaddr_storage.__ss_family */
|
|
#ifdef HAVE___SS_FAMILY_IN_SS
|
|
# define ss_family __ss_family
|
|
#endif /* HAVE___SS_FAMILY_IN_SS */
|
|
]
|
|
)
|
|
esac
|
|
|
|
|
|
#
|
|
# Look for in_port_t.
|
|
#
|
|
AC_CACHE_CHECK(
|
|
[for in_port_t],
|
|
[isc_cv_have_in_port_t],
|
|
[AC_COMPILE_IFELSE(
|
|
[AC_LANG_PROGRAM(
|
|
[[
|
|
#include <sys/types.h>
|
|
#include <netinet/in.h>
|
|
]],
|
|
[[
|
|
in_port_t port = 25;
|
|
return (0);
|
|
]]
|
|
)],
|
|
[isc_cv_have_in_port_t=yes],
|
|
[isc_cv_have_in_port_t=no]
|
|
)]
|
|
)
|
|
case "$isc_cv_have_in_port_t" in
|
|
no)
|
|
AC_DEFINE([ISC_PLATFORM_NEEDPORTT], [1],
|
|
[Declare in_port_t?])
|
|
esac
|
|
|
|
AC_CACHE_CHECK(
|
|
[type of socklen arg for getsockname()],
|
|
[ntp_cv_getsockname_socklen_type],
|
|
[
|
|
getsockname_socklen_type_found=no
|
|
for getsockname_arg2 in 'struct sockaddr *' 'void *'; do
|
|
for ntp_cv_getsockname_socklen_type in 'socklen_t' 'size_t' 'unsigned int' 'int'; do
|
|
AC_COMPILE_IFELSE(
|
|
[AC_LANG_PROGRAM(
|
|
[[
|
|
#ifdef HAVE_SYS_TYPES_H
|
|
# include <sys/types.h>
|
|
#endif
|
|
#ifdef HAVE_SYS_SOCKET_H
|
|
# include <sys/socket.h>
|
|
#endif
|
|
]], [[
|
|
extern
|
|
getsockname(int, $getsockname_arg2,
|
|
$ntp_cv_getsockname_socklen_type *);
|
|
]]
|
|
)],
|
|
[getsockname_socklen_type_found=yes ; break 2],
|
|
[]
|
|
)
|
|
done
|
|
done
|
|
case "$getsockname_socklen_type_found" in
|
|
no)
|
|
ntp_cv_getsockname_socklen_type='socklen_t'
|
|
esac
|
|
AS_UNSET([getsockname_arg2])
|
|
AS_UNSET([getsockname_socklen_type_found])
|
|
]
|
|
)
|
|
AC_DEFINE_UNQUOTED([GETSOCKNAME_SOCKLEN_TYPE],
|
|
[$ntp_cv_getsockname_socklen_type],
|
|
[What is getsockname()'s socklen type?])
|
|
|
|
AC_CACHE_CHECK(
|
|
[struct sockaddr for sa_len],
|
|
[isc_cv_platform_havesalen],
|
|
[AC_COMPILE_IFELSE(
|
|
[AC_LANG_PROGRAM(
|
|
[[
|
|
#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
]],
|
|
[[
|
|
extern struct sockaddr *ps;
|
|
return ps->sa_len;
|
|
]]
|
|
)],
|
|
[isc_cv_platform_havesalen=yes],
|
|
[isc_cv_platform_havesalen=no]
|
|
)]
|
|
)
|
|
case "$isc_cv_platform_havesalen" in
|
|
yes)
|
|
AC_DEFINE([ISC_PLATFORM_HAVESALEN], [1],
|
|
[struct sockaddr has sa_len?])
|
|
esac
|
|
|
|
AC_ARG_ENABLE(
|
|
[ipv6],
|
|
[AS_HELP_STRING(
|
|
[--enable-ipv6],
|
|
[s use IPv6?]
|
|
)]
|
|
)
|
|
|
|
case "$enable_ipv6" in
|
|
yes|''|autodetect)
|
|
case "$host" in
|
|
powerpc-ibm-aix4*)
|
|
;;
|
|
*)
|
|
AC_DEFINE([WANT_IPV6], [1], [configure --enable-ipv6])
|
|
;;
|
|
esac
|
|
;;
|
|
no)
|
|
;;
|
|
esac
|
|
|
|
|
|
dnl [Bug 1984] ntp/libisc fails to compile on OS X 10.7 (Lion)
|
|
case "$host" in
|
|
*-*-darwin*)
|
|
AC_DEFINE([__APPLE_USE_RFC_3542], [1], [Are we _special_?])
|
|
esac
|
|
|
|
|
|
AC_CACHE_CHECK(
|
|
[for IPv6 structures],
|
|
[isc_cv_found_ipv6],
|
|
[AC_COMPILE_IFELSE(
|
|
[AC_LANG_PROGRAM(
|
|
[[
|
|
#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#include <netinet/in.h>
|
|
]],
|
|
[[
|
|
struct sockaddr_in6 sin6;
|
|
]]
|
|
)],
|
|
[isc_cv_found_ipv6=yes],
|
|
[isc_cv_found_ipv6=no]
|
|
)]
|
|
)
|
|
|
|
#
|
|
# See whether IPv6 support is provided via a Kame add-on.
|
|
# This is done before other IPv6 linking tests so LIBS is properly set.
|
|
#
|
|
AC_MSG_CHECKING([for Kame IPv6 support])
|
|
AC_ARG_WITH(
|
|
[kame],
|
|
[AS_HELP_STRING(
|
|
[--with-kame],
|
|
[- =/usr/local/v6]
|
|
)],
|
|
[use_kame="$withval"],
|
|
[use_kame="no"]
|
|
)
|
|
case "$use_kame" in
|
|
no)
|
|
;;
|
|
yes)
|
|
kame_path=/usr/local/v6
|
|
;;
|
|
*)
|
|
kame_path="$use_kame"
|
|
;;
|
|
esac
|
|
case "$use_kame" in
|
|
no)
|
|
AC_MSG_RESULT([no])
|
|
;;
|
|
*)
|
|
if test -f $kame_path/lib/libinet6.a; then
|
|
AC_MSG_RESULT([$kame_path/lib/libinet6.a])
|
|
LIBS="-L$kame_path/lib -linet6 $LIBS"
|
|
else
|
|
AC_MSG_ERROR([$kame_path/lib/libinet6.a not found.
|
|
|
|
Please choose the proper path with the following command:
|
|
|
|
configure --with-kame=PATH
|
|
])
|
|
fi
|
|
;;
|
|
esac
|
|
|
|
#
|
|
# Whether netinet6/in6.h is needed has to be defined in isc/platform.h.
|
|
# Including it on Kame-using platforms is very bad, though, because
|
|
# Kame uses #error against direct inclusion. So include it on only
|
|
# the platform that is otherwise broken without it -- BSD/OS 4.0 through 4.1.
|
|
# This is done before the in6_pktinfo check because that's what
|
|
# netinet6/in6.h is needed for.
|
|
#
|
|
case "$host" in
|
|
*-bsdi4.[[01]]*)
|
|
AC_DEFINE([ISC_PLATFORM_NEEDNETINET6IN6H], [1],
|
|
[Do we need netinet6/in6.h?])
|
|
isc_netinet6in6_hack="#include <netinet6/in6.h>"
|
|
;;
|
|
*)
|
|
isc_netinet6in6_hack=""
|
|
;;
|
|
esac
|
|
|
|
#
|
|
# This is similar to the netinet6/in6.h issue.
|
|
#
|
|
case "$host" in
|
|
*-sco-sysv*uw*|*-*-sysv*UnixWare*|*-*-sysv*OpenUNIX*)
|
|
AC_DEFINE([ISC_PLATFORM_FIXIN6ISADDR], [1],
|
|
[Do we need to fix in6isaddr?])
|
|
isc_netinetin6_hack="#include <netinet/in6.h>"
|
|
;;
|
|
*)
|
|
isc_netinetin6_hack=""
|
|
;;
|
|
esac
|
|
|
|
|
|
case "$isc_cv_found_ipv6" in
|
|
yes)
|
|
AC_DEFINE([ISC_PLATFORM_HAVEIPV6], [1], [have IPv6?])
|
|
AC_CACHE_CHECK(
|
|
[for in6_pktinfo],
|
|
[isc_cv_have_in6_pktinfo],
|
|
[AC_COMPILE_IFELSE(
|
|
[AC_LANG_PROGRAM(
|
|
[[
|
|
#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#include <netinet/in.h>
|
|
$isc_netinetin6_hack
|
|
$isc_netinet6in6_hack
|
|
]],
|
|
[[
|
|
struct in6_pktinfo xyzzy;
|
|
]]
|
|
)],
|
|
[isc_cv_have_in6_pktinfo=yes],
|
|
[isc_cv_have_in6_pktinfo=no]
|
|
)]
|
|
)
|
|
case "$isc_cv_have_in6_pktinfo" in
|
|
yes)
|
|
AC_DEFINE([ISC_PLATFORM_HAVEIN6PKTINFO], [1],
|
|
[have struct in6_pktinfo?])
|
|
esac
|
|
|
|
|
|
# HMS: Use HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID instead?
|
|
AC_CACHE_CHECK(
|
|
[for sockaddr_in6.sin6_scope_id],
|
|
[isc_cv_have_sin6_scope_id],
|
|
[AC_COMPILE_IFELSE(
|
|
[AC_LANG_PROGRAM(
|
|
[[
|
|
#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#include <netinet/in.h>
|
|
$isc_netinetin6_hack
|
|
$isc_netinet6in6_hack
|
|
]],
|
|
[[
|
|
struct sockaddr_in6 xyzzy;
|
|
xyzzy.sin6_scope_id = 0;
|
|
]]
|
|
)],
|
|
[isc_cv_have_sin6_scope_id=yes],
|
|
[isc_cv_have_sin6_scope_id=no]
|
|
)]
|
|
)
|
|
|
|
case "$isc_cv_have_sin6_scope_id" in
|
|
yes)
|
|
AC_DEFINE([ISC_PLATFORM_HAVESCOPEID], [1], [sin6_scope_id?])
|
|
esac
|
|
esac
|
|
|
|
|
|
# We need this check run even without isc_cv_found_ipv6=yes
|
|
|
|
AC_CACHE_CHECK(
|
|
[for in6addr_any],
|
|
[isc_cv_in6addr_any_links],
|
|
[
|
|
SAVED_LIBS="$LIBS"
|
|
LIBS="$LDADD_LIBNTP $LIBS"
|
|
AC_LINK_IFELSE(
|
|
[AC_LANG_PROGRAM(
|
|
AC_INCLUDES_DEFAULT [[
|
|
#include <sys/socket.h>
|
|
#include <netinet/in.h>
|
|
$isc_netinetin6_hack
|
|
$isc_netinet6in6_hack
|
|
]],
|
|
[[
|
|
printf("%x", in6addr_any.s6_addr[15]);
|
|
]]
|
|
)],
|
|
[isc_cv_in6addr_any_links=yes],
|
|
[isc_cv_in6addr_any_links=no]
|
|
)
|
|
LIBS="$SAVED_LIBS"
|
|
AS_UNSET([SAVED_LIBS])
|
|
]
|
|
)
|
|
|
|
case "$isc_cv_in6addr_any_links" in
|
|
no)
|
|
AC_DEFINE([ISC_PLATFORM_NEEDIN6ADDRANY], [1], [missing in6addr_any?])
|
|
esac
|
|
|
|
|
|
AC_CACHE_CHECK(
|
|
[for struct if_laddrconf],
|
|
[isc_cv_struct_if_laddrconf],
|
|
[AC_COMPILE_IFELSE(
|
|
[AC_LANG_PROGRAM(
|
|
[[
|
|
#include <sys/types.h>
|
|
#include <net/if6.h>
|
|
]],
|
|
[[
|
|
struct if_laddrconf a;
|
|
]]
|
|
)],
|
|
[isc_cv_struct_if_laddrconf=yes],
|
|
[isc_cv_struct_if_laddrconf=no]
|
|
)]
|
|
)
|
|
|
|
case "$isc_cv_struct_if_laddrconf" in
|
|
yes)
|
|
AC_DEFINE([ISC_PLATFORM_HAVEIF_LADDRCONF], [1],
|
|
[have struct if_laddrconf?])
|
|
esac
|
|
|
|
AC_CACHE_CHECK(
|
|
[for struct if_laddrreq],
|
|
isc_cv_struct_if_laddrreq,
|
|
[AC_COMPILE_IFELSE(
|
|
[AC_LANG_PROGRAM(
|
|
[[
|
|
#include <sys/types.h>
|
|
#include <net/if6.h>
|
|
]],
|
|
[[
|
|
struct if_laddrreq a;
|
|
]]
|
|
)],
|
|
[isc_cv_struct_if_laddrreq=yes],
|
|
[isc_cv_struct_if_laddrreq=no]
|
|
)]
|
|
)
|
|
|
|
case "$isc_cv_struct_if_laddrreq" in
|
|
yes)
|
|
AC_DEFINE([ISC_PLATFORM_HAVEIF_LADDRREQ], [1],
|
|
[have struct if_laddrreq?])
|
|
esac
|
|
|
|
AC_CACHE_CHECK(
|
|
[for multicast IP support],
|
|
[ntp_cv_multicast],
|
|
[
|
|
ntp_cv_multicast=no
|
|
case "$host" in
|
|
i386-sequent-sysv4)
|
|
;;
|
|
*)
|
|
AC_COMPILE_IFELSE(
|
|
[AC_LANG_PROGRAM(
|
|
[[
|
|
#ifdef HAVE_NETINET_IN_H
|
|
# include <netinet/in.h>
|
|
#endif
|
|
]],
|
|
[[
|
|
struct ip_mreq ipmr;
|
|
ipmr.imr_interface.s_addr = 0;
|
|
]]
|
|
)],
|
|
[ntp_cv_multicast=yes],
|
|
[]
|
|
)
|
|
;;
|
|
esac
|
|
]
|
|
)
|
|
case "$ntp_cv_multicast" in
|
|
yes)
|
|
AC_DEFINE([MCAST], [1], [Does the target support multicast IP?])
|
|
AC_CACHE_CHECK(
|
|
[arg type needed for setsockopt() IP*_MULTICAST_LOOP],
|
|
[ntp_cv_typeof_ip_multicast_loop],
|
|
[
|
|
case "$host" in
|
|
*-*-netbsd*|*-*-*linux*)
|
|
ntp_cv_typeof_ip_multicast_loop=u_int
|
|
;;
|
|
*)
|
|
ntp_cv_typeof_ip_multicast_loop=u_char
|
|
;;
|
|
esac
|
|
]
|
|
)
|
|
AC_DEFINE_UNQUOTED([TYPEOF_IP_MULTICAST_LOOP],
|
|
[$ntp_cv_typeof_ip_multicast_loop],
|
|
[What type to use for setsockopt])
|
|
esac
|
|
|
|
AC_ARG_ENABLE(
|
|
[getifaddrs],
|
|
[AS_HELP_STRING(
|
|
[--enable-getifaddrs],
|
|
[+ Enable the use of getifaddrs() [[yes|no]].]
|
|
)],
|
|
[want_getifaddrs="$enableval"],
|
|
[want_getifaddrs="yes"]
|
|
)
|
|
|
|
case $want_getifaddrs in
|
|
glibc)
|
|
AC_MSG_WARN([--enable-getifaddrs=glibc is no longer required])
|
|
esac
|
|
case $want_getifaddrs in
|
|
no)
|
|
;;
|
|
*)
|
|
SAVED_LIBS="$LIBS"
|
|
LIBS="$LDADD_LIBNTP $LIBS"
|
|
AC_CHECK_FUNCS([getifaddrs])
|
|
LIBS="$SAVED_LIBS"
|
|
AS_UNSET([SAVED_LIBS])
|
|
;;
|
|
esac
|
|
|
|
#
|
|
# Check for if_nametoindex() for IPv6 scoped addresses support
|
|
#
|
|
case "$host" in
|
|
*-hp-hpux*)
|
|
AC_SEARCH_LIBS([if_nametoindex], [ipv6])
|
|
esac
|
|
SAVED_LIBS="$LIBS"
|
|
LIBS="$LDADD_LIBNTP $LIBS"
|
|
AC_CHECK_FUNCS([if_nametoindex])
|
|
LIBS="$SAVED_LIBS"
|
|
AS_UNSET([SAVED_LIBS])
|
|
case "$ac_cv_func_if_nametoindex" in
|
|
yes)
|
|
AC_DEFINE([ISC_PLATFORM_HAVEIFNAMETOINDEX], [1],
|
|
[ISC: do we have if_nametoindex()?])
|
|
esac
|
|
|
|
])dnl
|
|
dnl ======================================================================
|