configure script now checks availability of the inet_ntop() function,
authorYang Tse <yangsita@gmail.com>
Wed, 24 Sep 2008 16:43:40 +0000 (16:43 +0000)
committerYang Tse <yangsita@gmail.com>
Wed, 24 Sep 2008 16:43:40 +0000 (16:43 +0000)
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
lib/config.dos
m4/curl-functions.m4
packages/vms/config-vms.h

index b6b79f0..1f66edb 100644 (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
index 7e1fe47..7f40bdf 100644 (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
index bbb0656..e911475 100644 (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
index 3029154..7efbc3c 100644 (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.           */
 /* 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