Hi Simon, In the <sys/socket.h> test that I added a few weeks ago, I assumed - like specified in POSIX:2001 - a self-contained <sys/socket.h>. However, the current sys_socket module says that I should include <sys/types.h> before it. And indeed, without <sys/types.h> before <sys/socket.h>, the test fails on MacOS X:
gcc -DHAVE_CONFIG_H -I. -I. -I. -I.. -I./.. -I../gllib -I./../gllib -g -O2 -MT test-sys_socket.o -MD -MP -MF .deps/test-sys_socket.Tpo -c -o test-sys_socket.o test-sys_socket.c In file included from test-sys_socket.c:22: /usr/include/sys/socket.h:77: error: parse error before "sa_family_t" /usr/include/sys/socket.h:213: error: parse error before "u_char" /usr/include/sys/socket.h:216: error: parse error before '}' token /usr/include/sys/socket.h:224: error: parse error before "u_short" /usr/include/sys/socket.h:238: error: parse error before "u_char" /usr/include/sys/socket.h:240: error: `int64_t' undeclared here (not in a function) /usr/include/sys/socket.h:240: error: `u_char' undeclared here (not in a function) ... Since our goal is to allow people to program against the POSIX specifications, here is a proposed patch. It causes lib/sys/socket.h to be created on systems like MacOS X. Tested on Linux, MacOS X, mingw. 2007-03-02 Bruno Haible <[EMAIL PROTECTED]> * lib/socket_.h: If sys/socket.h exists, include that and <sys/types.h> before it. Turn HAVE_WINSOCK2_H and HAVE_WS2TCPIP_H into configute-time values. * m4/sys_socket_h.m4 (gl_HEADER_SYS_SOCKET): Test also whether <sys/socket.h> is self-contained. Set ABSOLUTE_SYS_SOCKET_H, HAVE_SYS_SOCKET_H, HAVE_WINSOCK2_H, HAVE_WS2TCPIP_H. * modules/sys_socket (Depends-on): Add absolute-header. (Makefile.am): Substitute ABSOLUTE_SYS_SOCKET_H, HAVE_SYS_SOCKET_H, HAVE_WINSOCK2_H, HAVE_WS2TCPIP_H into sys/socket.h. (Include): Remove requirement of inclusion of <sys/types.h>. *** lib/socket_.h 16 Jan 2007 12:43:13 -0000 1.8 --- lib/socket_.h 3 Mar 2007 01:21:26 -0000 *************** *** 1,5 **** /* Provide a sys/socket header file for systems lacking it (read: MinGW). ! Copyright (C) 2005, 2006 Free Software Foundation, Inc. Written by Simon Josefsson. This program is free software; you can redistribute it and/or modify --- 1,5 ---- /* Provide a sys/socket header file for systems lacking it (read: MinGW). ! Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc. Written by Simon Josefsson. This program is free software; you can redistribute it and/or modify *************** *** 16,27 **** along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ ! #ifndef _SYS_SOCKET_H ! #define _SYS_SOCKET_H ! /* This file is supposed to be used on platforms that lack ! sys/socket.h. It is intended to provide definitions and prototypes ! needed by an application. Currently only MinGW is supported. See the gnulib manual regarding Windows sockets. MinGW has the header files winsock2.h and --- 16,40 ---- along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ ! #ifndef GL_SYS_SOCKET_H ! #define GL_SYS_SOCKET_H ! /* This file is supposed to be used on platforms that lack <sys/socket.h> ! and on platforms where <sys/socket.h> cannot be included standalone. ! It is intended to provide definitions and prototypes needed by an ! application. */ ! ! #if @HAVE_SYS_SOCKET_H@ ! ! /* On many platforms, <sys/socket.h> assumes prior inclusion of ! <sys/types.h>. */ ! ! # include <sys/types.h> ! # include @ABSOLUTE_SYS_SOCKET_H@ ! ! #else ! ! /* A platform that lacks <sys/socket.h>. Currently only MinGW is supported. See the gnulib manual regarding Windows sockets. MinGW has the header files winsock2.h and *************** *** 39,70 **** releases. */ ! #if HAVE_WINSOCK2_H ! # include <winsock2.h> ! #endif ! #if HAVE_WS2TCPIP_H ! # include <ws2tcpip.h> ! #endif /* For shutdown(). */ ! #if !defined SHUT_RD && defined SD_RECEIVE ! # define SHUT_RD SD_RECEIVE ! #endif ! #if !defined SHUT_WR && defined SD_SEND ! # define SHUT_WR SD_SEND ! #endif ! #if !defined SHUT_RDWR && defined SD_BOTH ! # define SHUT_RDWR SD_BOTH ! #endif ! ! #if defined _WIN32 || defined __WIN32__ ! # define ENOTSOCK WSAENOTSOCK ! # define EADDRINUSE WSAEADDRINUSE ! # define ENETRESET WSAENETRESET ! # define ECONNABORTED WSAECONNABORTED ! # define ECONNRESET WSAECONNRESET ! # define ENOTCONN WSAENOTCONN ! # define ESHUTDOWN WSAESHUTDOWN ! #endif ! #endif /* _SYS_SOCKET_H */ --- 52,85 ---- releases. */ ! # if @HAVE_WINSOCK2_H@ ! # include <winsock2.h> ! # endif ! # if @HAVE_WS2TCPIP_H@ ! # include <ws2tcpip.h> ! # endif /* For shutdown(). */ ! # if !defined SHUT_RD && defined SD_RECEIVE ! # define SHUT_RD SD_RECEIVE ! # endif ! # if !defined SHUT_WR && defined SD_SEND ! # define SHUT_WR SD_SEND ! # endif ! # if !defined SHUT_RDWR && defined SD_BOTH ! # define SHUT_RDWR SD_BOTH ! # endif ! ! # if defined _WIN32 || defined __WIN32__ ! # define ENOTSOCK WSAENOTSOCK ! # define EADDRINUSE WSAEADDRINUSE ! # define ENETRESET WSAENETRESET ! # define ECONNABORTED WSAECONNABORTED ! # define ECONNRESET WSAECONNRESET ! # define ENOTCONN WSAENOTCONN ! # define ESHUTDOWN WSAESHUTDOWN ! # endif ! ! #endif /* HAVE_SYS_SOCKET_H */ ! #endif /* GL_SYS_SOCKET_H */ *** m4/sys_socket_h.m4 16 Feb 2006 09:48:07 -0000 1.2 --- m4/sys_socket_h.m4 3 Mar 2007 01:21:26 -0000 *************** *** 1,5 **** ! # sys_socket_h.m4 serial 2 ! dnl Copyright (C) 2005, 2006 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. --- 1,5 ---- ! # sys_socket_h.m4 serial 3 ! dnl Copyright (C) 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,23 **** AC_DEFUN([gl_HEADER_SYS_SOCKET], [ ! AC_CHECK_HEADERS_ONCE([sys/socket.h]) ! if test $ac_cv_header_sys_socket_h = yes; then SYS_SOCKET_H='' else 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([winsock2.h ws2tcpip.h]) ! SYS_SOCKET_H='sys/socket.h' fi ! AC_SUBST(SYS_SOCKET_H) ]) --- 8,55 ---- AC_DEFUN([gl_HEADER_SYS_SOCKET], [ ! AC_CACHE_CHECK([whether <sys/socket.h> is self-contained], ! [gl_cv_header_sys_socket_h_selfcontained], ! [ ! AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <sys/socket.h>], [])], ! [gl_cv_header_sys_socket_h_selfcontained=yes], ! [gl_cv_header_sys_socket_h_selfcontained=no]) ! ]) ! if test $gl_cv_header_sys_socket_h_selfcontained = yes; then SYS_SOCKET_H='' else + SYS_SOCKET_H='sys/socket.h' + 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([sys/socket.h]) ! gl_ABSOLUTE_HEADER([sys/socket.h]) ! ABSOLUTE_SYS_SOCKET_H=\"$gl_cv_absolute_sys_socket_h\" ! AC_SUBST([ABSOLUTE_SYS_SOCKET_H]) ! if test $ac_cv_header_sys_socket_h = yes; then ! HAVE_SYS_SOCKET_H=1 ! HAVE_WINSOCK2_H=0 ! HAVE_WS2TCPIP_H=0 ! else ! HAVE_SYS_SOCKET_H=0 ! AC_CHECK_HEADERS([winsock2.h ws2tcpip.h]) ! if test $ac_cv_header_winsock2_h = yes; then ! HAVE_WINSOCK2_H=1 ! else ! HAVE_WINSOCK2_H=0 ! fi ! 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_WINSOCK2_H]) ! AC_SUBST([HAVE_WS2TCPIP_H]) fi ! AC_SUBST([SYS_SOCKET_H]) ]) *** modules/sys_socket 22 Jan 2007 23:07:42 -0000 1.11 --- modules/sys_socket 3 Mar 2007 01:21:26 -0000 *************** *** 7,12 **** --- 7,13 ---- m4/sockpfaf.m4 Depends-on: + absolute-header configure.ac: gl_HEADER_SYS_SOCKET *************** *** 20,33 **** sys/socket.h: socket_.h @MKDIR_P@ sys { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ ! cat $(srcdir)/socket_.h; \ } > [EMAIL PROTECTED] mv -f [EMAIL PROTECTED] $@ MOSTLYCLEANFILES += sys/socket.h sys/socket.h-t MOSTLYCLEANDIRS += sys Include: - #include <sys/types.h> #include <sys/socket.h> License: --- 21,37 ---- sys/socket.h: socket_.h @MKDIR_P@ sys { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ ! sed -e 's|@''ABSOLUTE_SYS_SOCKET_H''@|$(ABSOLUTE_SYS_SOCKET_H)|g' \ ! -e 's|@''HAVE_SYS_SOCKET_H''@|$(HAVE_SYS_SOCKET_H)|g' \ ! -e 's|@''HAVE_WINSOCK2_H''@|$(HAVE_WINSOCK2_H)|g' \ ! -e 's|@''HAVE_WS2TCPIP_H''@|$(HAVE_WS2TCPIP_H)|g' \ ! < $(srcdir)/socket_.h; \ } > [EMAIL PROTECTED] mv -f [EMAIL PROTECTED] $@ MOSTLYCLEANFILES += sys/socket.h sys/socket.h-t MOSTLYCLEANDIRS += sys Include: #include <sys/socket.h> License: