From 267b942383465f8d9ff193e4deaa0d383a09d6b7 Mon Sep 17 00:00:00 2001 From: Yang Tse Date: Wed, 24 Sep 2008 16:43:40 +0000 Subject: [PATCH] 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. --- configure.ac | 1 + lib/config.dos | 1 - m4/curl-functions.m4 | 159 +++++++++++++++++++++++++++++++++++++- packages/vms/config-vms.h | 4 - 4 files changed, 159 insertions(+), 6 deletions(-) diff --git a/configure.ac b/configure.ac index b6b79f0431..1f66edbcb2 100644 --- a/configure.ac +++ b/configure.ac @@ -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 diff --git a/lib/config.dos b/lib/config.dos index 7e1fe47815..7f40bdf863 100644 --- a/lib/config.dos +++ b/lib/config.dos @@ -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 diff --git a/m4/curl-functions.m4 b/m4/curl-functions.m4 index bbb0656e7e..e91147550d 100644 --- a/m4/curl-functions.m4 +++ b/m4/curl-functions.m4 @@ -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 diff --git a/packages/vms/config-vms.h b/packages/vms/config-vms.h index 302915414b..7efbc3c0df 100644 --- a/packages/vms/config-vms.h +++ b/packages/vms/config-vms.h @@ -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