More recent MinGW versions have these functions (if compiling at
_VISTA level or higher), but the normal AC_CHECK_FUNCS() check does
not find them because the necessary header file is not #include'd and
the libws2_32 not linked - and our compat functions are incompatible
with the definitions in <ws2tcpip.h>, so compilation fails.

Fix with a custom AC_LINK_IFELSE()/AC_LANG_PROGRAM() construct.

Signed-off-by: Gert Doering <g...@greenie.muc.de>
---
 configure.ac | 24 +++++++++++++++++++++++-
 1 file changed, 23 insertions(+), 1 deletion(-)

diff --git a/configure.ac b/configure.ac
index 0a8255c..2e651d8 100644
--- a/configure.ac
+++ b/configure.ac
@@ -632,7 +632,7 @@ AC_SUBST([SOCKETS_LIBS])

 old_LIBS="${LIBS}"
 LIBS="${LIBS} ${SOCKETS_LIBS}"
-AC_CHECK_FUNCS([sendmsg recvmsg inet_ntop inet_pton])
+AC_CHECK_FUNCS([sendmsg recvmsg])
 # Windows use stdcall for winsock so we cannot auto detect these
 m4_define(
        [SOCKET_FUNCS],
@@ -644,6 +644,27 @@ m4_define(
        [setsockopt getsockopt getsockname poll]dnl
 )
 if test "${WIN32}" = "yes"; then
+# normal autoconf function checking does not find inet_ntop/inet_pton
+# because they need to include the actual header file and link ws2_32.dll
+       LIBS="${LIBS} -lws2_32"
+       AC_MSG_CHECKING([for MinGW inet_ntop()/inet_pton()])
+       AC_LINK_IFELSE(
+               [AC_LANG_PROGRAM(
+                       [[
+#include <ws2tcpip.h>
+                       ]],
+                       [[
+int r = (int) inet_ntop (0, NULL, NULL, 0);
+    r += inet_pton(AF_INET, NULL, NULL);
+return r;
+                       ]]
+               )],
+               [AC_MSG_RESULT([OK])
+                AC_DEFINE([HAVE_INET_NTOP],[1],[MinGW inet_ntop])
+                AC_DEFINE([HAVE_INET_PTON],[1],[MinGW inet_pton])
+               ],
+               [AC_MSG_RESULT([not found])]
+       )
        m4_foreach(
                [F],
                m4_split(SOCKET_FUNCS SOCKET_OPT_FUNCS),
@@ -651,6 +672,7 @@ if test "${WIN32}" = "yes"; then
                        AC_DEFINE([UF], [1], [Win32 builtin])
        )
 else
+       AC_CHECK_FUNCS([inet_ntop inet_pton])
        AC_CHECK_FUNCS(
                SOCKET_FUNCS,
                ,
-- 
2.4.6


Reply via email to