configure script now checks availability of the inet_ntop() function,

and when not crosscompiling verifies if it is IPv6 capable.

HAVE_INET_NTOP will only be defined when an IPv6 capable working
inet_ntop function is available.
This commit is contained in:
Yang Tse 2008-09-24 16:43:40 +00:00
parent 142cb601f8
commit 267b942383
4 changed files with 159 additions and 6 deletions

View File

@ -2076,6 +2076,7 @@ CURL_CHECK_FUNC_GETHOSTNAME
CURL_CHECK_FUNC_GETSERVBYPORT_R
CURL_CHECK_FUNC_GMTIME_R
CURL_CHECK_FUNC_INET_NTOA_R
CURL_CHECK_FUNC_INET_NTOP
CURL_CHECK_FUNC_LOCALTIME_R
CURL_CHECK_FUNC_SIGACTION
CURL_CHECK_FUNC_STRCASECMP

View File

@ -25,7 +25,6 @@
#define HAVE_IO_H 1
#define HAVE_IOCTLSOCKET 1
#define HAVE_INET_PTON 1
#define HAVE_INET_NTOP 1
#define HAVE_LOCALE_H 1
#define HAVE_LONGLONG 1
#define HAVE_MEMORY_H 1

View File

@ -22,7 +22,7 @@
#***************************************************************************
# File version for 'aclocal' use. Keep it a single number.
# serial 21
# serial 22
dnl CURL_INCLUDES_ARPA_INET
@ -1270,6 +1270,163 @@ AC_DEFUN([CURL_CHECK_FUNC_INET_NTOA_R], [
])
dnl CURL_CHECK_FUNC_INET_NTOP
dnl -------------------------------------------------
dnl Verify if inet_ntop is available, prototyped, can
dnl be compiled and seems to work. If all of these are
dnl true, and usage has not been previously disallowed
dnl with shell variable curl_disallow_inet_ntop, then
dnl HAVE_INET_NTOP will be defined.
AC_DEFUN([CURL_CHECK_FUNC_INET_NTOP], [
AC_REQUIRE([CURL_INCLUDES_ARPA_INET])dnl
AC_REQUIRE([CURL_INCLUDES_STRING])dnl
#
tst_links_inet_ntop="unknown"
tst_proto_inet_ntop="unknown"
tst_compi_inet_ntop="unknown"
tst_works_inet_ntop="unknown"
tst_allow_inet_ntop="unknown"
#
AC_MSG_CHECKING([if inet_ntop can be linked])
AC_LINK_IFELSE([
AC_LANG_FUNC_LINK_TRY([inet_ntop])
],[
AC_MSG_RESULT([yes])
tst_links_inet_ntop="yes"
],[
AC_MSG_RESULT([no])
tst_links_inet_ntop="no"
])
#
if test "$tst_links_inet_ntop" = "yes"; then
AC_MSG_CHECKING([if inet_ntop is prototyped])
AC_EGREP_CPP([inet_ntop],[
$curl_includes_arpa_inet
],[
AC_MSG_RESULT([yes])
tst_proto_inet_ntop="yes"
],[
AC_MSG_RESULT([no])
tst_proto_inet_ntop="no"
])
fi
#
if test "$tst_proto_inet_ntop" = "yes"; then
AC_MSG_CHECKING([if inet_ntop is compilable])
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([[
$curl_includes_arpa_inet
]],[[
if(0 != inet_ntop(0, 0, 0, 0))
return 1;
]])
],[
AC_MSG_RESULT([yes])
tst_compi_inet_ntop="yes"
],[
AC_MSG_RESULT([no])
tst_compi_inet_ntop="no"
])
fi
#
dnl only do runtime verification when not cross-compiling
if test "x$cross_compiling" != "xyes" &&
test "$tst_compi_inet_ntop" = "yes"; then
AC_MSG_CHECKING([if inet_ntop seems to work])
AC_RUN_IFELSE([
AC_LANG_PROGRAM([[
$curl_includes_arpa_inet
$curl_includes_string
]],[[
char ipv6res[sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")];
char ipv4res[sizeof "255.255.255.255"];
unsigned char ipv6a[26];
unsigned char ipv4a[5];
char *ipv6ptr = 0;
char *ipv4ptr = 0;
/* - */
ipv4res[0] = '\0';
ipv4a[0] = 0xc0;
ipv4a[1] = 0xa8;
ipv4a[2] = 0x64;
ipv4a[3] = 0x01;
ipv4a[4] = 0x01;
/* - */
ipv4ptr = inet_ntop(AF_INET, ipv4a, ipv4res, sizeof(ipv4res));
if(!ipv4ptr)
exit(1); /* fail */
if(ipv4ptr != ipv4res)
exit(1); /* fail */
if(!ipv4ptr[0])
exit(1); /* fail */
if(memcmp(ipv4res, "192.168.100.1", 13) != 0)
exit(1); /* fail */
/* - */
ipv6res[0] = '\0';
memset(ipv6a, 0, sizeof(ipv6a));
ipv6a[0] = 0xfe;
ipv6a[1] = 0x80;
ipv6a[8] = 0x02;
ipv6a[9] = 0x14;
ipv6a[10] = 0x4f;
ipv6a[11] = 0xff;
ipv6a[12] = 0xfe;
ipv6a[13] = 0x0b;
ipv6a[14] = 0x76;
ipv6a[15] = 0xc8;
ipv6a[25] = 0x01;
/* - */
ipv6ptr = inet_ntop(AF_INET6, ipv6a, ipv6res, sizeof(ipv6res));
if(!ipv6ptr)
exit(1); /* fail */
if(ipv6ptr != ipv6res)
exit(1); /* fail */
if(!ipv6ptr[0])
exit(1); /* fail */
if(memcmp(ipv6res, "fe80::214:4fff:fe0b:76c8", 24) != 0)
exit(1); /* fail */
/* - */
exit(0);
]])
],[
AC_MSG_RESULT([yes])
tst_works_inet_ntop="yes"
],[
AC_MSG_RESULT([no])
tst_works_inet_ntop="no"
])
fi
#
if test "$tst_compi_inet_ntop" = "yes" &&
test "$tst_works_inet_ntop" != "no"; then
AC_MSG_CHECKING([if inet_ntop usage allowed])
if test "x$curl_disallow_inet_ntop" != "xyes"; then
AC_MSG_RESULT([yes])
tst_allow_inet_ntop="yes"
else
AC_MSG_RESULT([no])
tst_allow_inet_ntop="no"
fi
fi
#
AC_MSG_CHECKING([if inet_ntop might be used])
if test "$tst_links_inet_ntop" = "yes" &&
test "$tst_proto_inet_ntop" = "yes" &&
test "$tst_compi_inet_ntop" = "yes" &&
test "$tst_allow_inet_ntop" = "yes" &&
test "$tst_works_inet_ntop" != "no"; then
AC_MSG_RESULT([yes])
AC_DEFINE_UNQUOTED(HAVE_INET_NTOP, 1,
[Define to 1 if you have a IPv6 capable working inet_ntop function.])
ac_cv_func_inet_ntop="yes"
else
AC_MSG_RESULT([no])
ac_cv_func_inet_ntop="no"
fi
])
dnl CURL_CHECK_FUNC_LOCALTIME_R
dnl -------------------------------------------------
dnl Verify if localtime_r is available, prototyped, can

View File

@ -1,7 +1,6 @@
/* MSK, 02/05/04, Hand edited for trail build on Alpha V7.3, DEC C 6.5-003 */
/* MSK, 03/09/04, Seems to work for all platforms I've built on so far. */
/* Added HAVE_SYS_IOCTL_H and IOCTL_3_ARGS defines */
/* MSK, 06/04/04, Added HAVE_INET_NTOP */
/* TES, 10/06/04, Added MAX_INITIAL_POST_SIZE, HAVE_BASENAME */
/* MSK, 02/02/05, Changed HAVE_TERMIOS_H to an undef since the change in */
/* getpass.c no longer undef'd it during compile. */
@ -265,9 +264,6 @@
/* IOCTL_3_ARGS defined to match the ioctl function in stropts.h */
#define IOCTL_3_ARGS 1
/* Somewhere around 7.12.0 HAVE_INET_NTOP was introduced. */
#define HAVE_INET_NTOP 1
/* to disable LDAP */
#define CURL_DISABLE_LDAP 1