bug-gnulib
[Top][All Lists]
Advanced

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

Re: sys_socket: sockaddr_storage, new module alignof


From: Simon Josefsson
Subject: Re: sys_socket: sockaddr_storage, new module alignof
Date: Fri, 08 May 2009 20:38:22 +0200
User-agent: Gnus/5.110011 (No Gnus v0.11) Emacs/23.0.93 (gnu/linux)

The test for sockaddr_storage failed incorrectly under mingw because the
HAVE_WS2TCPIP_H wasn't set.  The patch below moves back the test of
ws2tcpip.h before the sockaddr_storage test.

There is something like a catch-22 here: to test for sockaddr_storage,
we need to test for ws2tcpip.h, but to test for that header file, we (if
I understand the intention behind the existing code) have to assume we
are replacing sys/socket.h, because on cygwin you should never include
ws2tcpip.h.  I hope the patch is right, but testing is welcome.

/Simon

>From a40025e452a2be4e7222e2df512f6b955a6fc738 Mon Sep 17 00:00:00 2001
From: Simon Josefsson <address@hidden>
Date: Fri, 8 May 2009 20:34:18 +0200
Subject: [PATCH] m4/sys_socket_h.m4: Test for ws2tcpip.h earlier.

---
 ChangeLog          |    5 +++++
 m4/sys_socket_h.m4 |   46 ++++++++++++++++++++++++++--------------------
 2 files changed, 31 insertions(+), 20 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index aef3402..a3e7c3b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2009-05-08  Simon Josefsson  <address@hidden>
+
+       * m4/sys_socket_h.m4: Test for ws2tcpip.h earlier, needed for
+       sockaddr_storage test.
+
 2009-05-07  Simon Josefsson  <address@hidden>
 
        * modules/sys_socket (Makefile.am): Substitute
diff --git a/m4/sys_socket_h.m4 b/m4/sys_socket_h.m4
index 5bbaad8..d1cb9c2 100644
--- a/m4/sys_socket_h.m4
+++ b/m4/sys_socket_h.m4
@@ -40,6 +40,8 @@ AC_DEFUN([gl_HEADER_SYS_SOCKET],
   else
     SYS_SOCKET_H='sys/socket.h'
   fi
+  # We need to check for ws2tcpip.h now.
+  gl_PREREQ_SYS_H_SOCKET
   AC_CHECK_TYPES([struct sockaddr_storage],,,[
   /* sys/types.h is not needed according to POSIX, but the
      sys/socket.h in i386-unknown-freebsd4.10 and
@@ -57,31 +59,35 @@ AC_DEFUN([gl_HEADER_SYS_SOCKET],
     SYS_SOCKET_H='sys/socket.h'
   fi
   if test -n "$SYS_SOCKET_H"; then
-    dnl Check prerequisites of the <sys/socket.h> replacement.
-    gl_CHECK_NEXT_HEADERS([sys/socket.h])
-    if test $ac_cv_header_sys_socket_h = yes; then
-      HAVE_SYS_SOCKET_H=1
-      HAVE_WS2TCPIP_H=0
-    else
-      HAVE_SYS_SOCKET_H=0
-      dnl We cannot use AC_CHECK_HEADERS_ONCE here, because that would make
-      dnl the check for those headers unconditional; yet cygwin reports
-      dnl that the headers are present but cannot be compiled (since on
-      dnl cygwin, all socket information should come from sys/socket.h).
-      AC_CHECK_HEADERS([ws2tcpip.h])
-      if test $ac_cv_header_ws2tcpip_h = yes; then
-        HAVE_WS2TCPIP_H=1
-      else
-        HAVE_WS2TCPIP_H=0
-      fi
-    fi
     gl_PREREQ_SYS_H_WINSOCK2
-    AC_SUBST([HAVE_SYS_SOCKET_H])
-    AC_SUBST([HAVE_WS2TCPIP_H])
   fi
   AC_SUBST([SYS_SOCKET_H])
 ])
 
+AC_DEFUN([gl_PREREQ_SYS_H_SOCKET],
+[
+  dnl Check prerequisites of the <sys/socket.h> replacement.
+  gl_CHECK_NEXT_HEADERS([sys/socket.h])
+  if test $ac_cv_header_sys_socket_h = yes; then
+    HAVE_SYS_SOCKET_H=1
+    HAVE_WS2TCPIP_H=0
+  else
+    HAVE_SYS_SOCKET_H=0
+    dnl We cannot use AC_CHECK_HEADERS_ONCE here, because that would make
+    dnl the check for those headers unconditional; yet cygwin reports
+    dnl that the headers are present but cannot be compiled (since on
+    dnl cygwin, all socket information should come from sys/socket.h).
+    AC_CHECK_HEADERS([ws2tcpip.h])
+    if test $ac_cv_header_ws2tcpip_h = yes; then
+      HAVE_WS2TCPIP_H=1
+    else
+      HAVE_WS2TCPIP_H=0
+    fi
+  fi
+  AC_SUBST([HAVE_SYS_SOCKET_H])
+  AC_SUBST([HAVE_WS2TCPIP_H])
+])
+
 # Common prerequisites of of the <sys/socket.h> replacement and of the
 # <sys/select.h> replacement.
 # Sets and substitutes HAVE_WINSOCK2_H.
-- 
1.6.2.4





reply via email to

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