bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: gai_strerror on mingw32


From: Bruno Haible
Subject: Re: gai_strerror on mingw32
Date: Wed, 27 Jun 2007 23:04:36 +0200
User-agent: KMail/1.5.4

Hi Simon,

> -  AC_REPLACE_FUNCS(gai_strerror)
> +  # We can't use AC_REPLACE_FUNCS here because gai_strerror may be an
> +  # inline function declared in ws2tcpip.h, so we need to get that
> +  # header included somehow.
> +  AC_MSG_CHECKING([for gai_strerror (possibly via ws2tcpip.h)])
> +  AC_TRY_LINK([
> +#ifdef HAVE_WS2TCPIP_H
> +#include <ws2tcpip.h>
> +#endif
> +], [gai_strerror (0);],
> +  AC_MSG_RESULT([yes]),
> +  [AC_MSG_RESULT([no])
> +   AC_LIBOBJ(gai_strerror)])
> +
>    gl_PREREQ_GETADDRINFO
>  ])

The following can be improved:
  - You're testing HAVE_WS2TCPIP_H without making sure that an
    AC_CHECK_HEADER([ws2tcpip.h]) has been executed before.
  - The test will fail on most Unix platforms when a C++ compiler is being
    used, because in C++ it's a compilatione error to call a function when
    its declaration has not been included. In other words, you need to
    include also <sys/types.h>, <sys/socket.h>, <netdb.h>, to get the
    declaration.
  - Every AC_TRY_LINK or AC_TRY_COMPILE should normally be wrapped in an
    AC_CACHE_CHECK - for speed of reconfiguring.

How about this?


2007-06-27  Simon Josefsson  <address@hidden>
            Bruno Haible  <address@hidden>

        * m4/getaddrinfo.m4 (gl_GETADDRINFO): Check for ws2tcpip.h before
        using HAVE_WS2TCPIP_H. Check for gai_strerror through an explicit
        link test, rather than AC_REPLACE_FUNCS - for mingw.
        (gl_PREREQ_GETADDRINFO): Check for sys/socket.h and ws2tcpip.h
        before using HAVE_SYS_SOCKET_H and HAVE_WS2TCPIP_H.

--- m4/getaddrinfo.m4   9 Aug 2006 22:52:40 -0000       1.18
+++ m4/getaddrinfo.m4   27 Jun 2007 20:59:54 -0000
@@ -1,5 +1,5 @@
-# getaddrinfo.m4 serial 11
-dnl Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc.
+# getaddrinfo.m4 serial 12
+dnl Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -8,6 +8,7 @@
 [
   AC_MSG_NOTICE([checking how to do getaddrinfo, freeaddrinfo and getnameinfo])
 
+  AC_CHECK_HEADERS_ONCE(ws2tcpip.h)
   AC_SEARCH_LIBS(getaddrinfo, [nsl socket])
   AC_CHECK_FUNCS(getaddrinfo,, [
     AC_CACHE_CHECK(for getaddrinfo in ws2tcpip.h and -lws2_32,
@@ -28,7 +29,30 @@
     fi
     ])
 
-  AC_REPLACE_FUNCS(gai_strerror)
+  # We can't use AC_REPLACE_FUNCS here because gai_strerror may be an
+  # inline function declared in ws2tcpip.h, so we need to get that
+  # header included somehow.
+  AC_CHECK_HEADERS_ONCE(sys/socket.h netdb.h ws2tcpip.h)
+  AC_CACHE_CHECK([for gai_strerror (possibly via ws2tcpip.h)],
+    gl_cv_func_gai_strerror, [
+      AC_TRY_LINK([
+#include <sys/types.h>
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#ifdef HAVE_NETDB_H
+#include <netdb.h>
+#endif
+#ifdef HAVE_WS2TCPIP_H
+#include <ws2tcpip.h>
+#endif
+], [gai_strerror (0);],
+        [gl_cv_func_gai_strerror=yes],
+        [gl_cv_func_gai_strerror=no])])
+  if test $gl_cv_func_gai_strerror = no; then
+    AC_LIBOBJ(gai_strerror)
+  fi
+
   gl_PREREQ_GETADDRINFO
 ])
 
@@ -57,7 +81,7 @@
   AC_REQUIRE([gl_HEADER_SYS_SOCKET])
   AC_REQUIRE([AC_C_INLINE])
   AC_REQUIRE([AC_GNU_SOURCE])
-  AC_CHECK_HEADERS_ONCE(netinet/in.h netdb.h)
+  AC_CHECK_HEADERS_ONCE(netinet/in.h sys/socket.h netdb.h ws2tcpip.h)
   AC_CHECK_DECLS([getaddrinfo, freeaddrinfo, gai_strerror, getnameinfo],,,[
   /* sys/types.h is not needed according to POSIX, but the
      sys/socket.h in i386-unknown-freebsd4.10 and





reply via email to

[Prev in Thread] Current Thread [Next in Thread]