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 <si...@josefsson.org> 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 <si...@josefsson.org> + + * m4/sys_socket_h.m4: Test for ws2tcpip.h earlier, needed for + sockaddr_storage test. + 2009-05-07 Simon Josefsson <si...@josefsson.org> * 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