# HG changeset patch # User Paul Eggert # Date 1300621909 -3600 # Node ID 2081227303c569d9ac140a68598127051a2c08e4 # Parent 6a7f017ac09c68bc4fe8285d4472cbe49a7184ea socklen: do not depend on sys_socket While trying to modify Emacs to use gnulib's socklen module, I discovered a circular dependency: socklen depends on sys_socket and vice versa. Emacs can use socklen, but it does not need sys_socket because it has its own substitute for sys/socket.h. * m4/socklen.m4 (gl_SOCKET_HEADERS): New macro, extracted from gl_TYPE_SOCKLEN_T. (gl_CHECK_SOCKET_HEADERS): New macro, taken from parts of gl_PREREQ_SYS_H_SOCKET. (gl_TYPE_SOCKLEN_T): Require it instead of requiring gl_PREREQ_SYS_H_SOCKET. * m4/sys_socket_h.m4 (gl_PREREQ_SYS_H_SOCKET): Require gl_CHECK_SOCKET_HEADERS instead of doing its work ourselves. * modules/socklen (Depends-on): Do not depend on sys_socket. (Include): Adjust to match the code used in gl_SOCKET_HEADERS. diff --git a/ChangeLog b/ChangeLog --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,22 @@ +2011-03-20 Paul Eggert + Bruno Haible + + socklen: do not depend on sys_socket + While trying to modify Emacs to use gnulib's socklen module, + I discovered a circular dependency: socklen depends on sys_socket + and vice versa. Emacs can use socklen, but it does not need + sys_socket because it has its own substitute for sys/socket.h. + * m4/socklen.m4 (gl_SOCKET_HEADERS): New macro, extracted from + gl_TYPE_SOCKLEN_T. + (gl_CHECK_SOCKET_HEADERS): New macro, taken from parts of + gl_PREREQ_SYS_H_SOCKET. + (gl_TYPE_SOCKLEN_T): Require it instead of requiring + gl_PREREQ_SYS_H_SOCKET. + * m4/sys_socket_h.m4 (gl_PREREQ_SYS_H_SOCKET): Require + gl_CHECK_SOCKET_HEADERS instead of doing its work ourselves. + * modules/socklen (Depends-on): Do not depend on sys_socket. + (Include): Adjust to match the code used in gl_SOCKET_HEADERS. + 2011-03-20 Jim Meyering maint.mk: sort file names *after* new transformation diff --git a/m4/socklen.m4 b/m4/socklen.m4 --- a/m4/socklen.m4 +++ b/m4/socklen.m4 @@ -1,4 +1,4 @@ -# socklen.m4 serial 9 +# socklen.m4 serial 10 dnl Copyright (C) 2005-2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -12,12 +12,8 @@ dnl HP-UX 10.20, IRIX 6.5, OSF/1 4.0, Interix 3.5, BeOS. dnl So we have to test to find something that will work. -dnl On mingw32, socklen_t is in ws2tcpip.h ('int'), so we try to find -dnl it there first. That file is included by gnulib's sys_socket.in.h, which -dnl all users of this module should include. Cygwin must not include -dnl ws2tcpip.h. AC_DEFUN([gl_TYPE_SOCKLEN_T], - [AC_REQUIRE([gl_HEADER_SYS_SOCKET])dnl + [AC_REQUIRE([gl_CHECK_SOCKET_HEADERS])dnl AC_CHECK_TYPE([socklen_t], , [AC_MSG_CHECKING([for socklen_t equivalent]) AC_CACHE_VAL([gl_cv_socklen_t_equiv], @@ -45,9 +41,37 @@ AC_MSG_RESULT([$gl_cv_socklen_t_equiv]) AC_DEFINE_UNQUOTED([socklen_t], [$gl_cv_socklen_t_equiv], [type to use in place of socklen_t if not defined])], - [#include - #if HAVE_SYS_SOCKET_H - # include - #elif HAVE_WS2TCPIP_H - # include - #endif])]) + [gl_SOCKET_HEADERS])]) + +dnl On mingw32, socklen_t is in ws2tcpip.h ('int'), so we try to find +dnl it there too. But on Cygwin, wc2tcpip.h must not be included. Users +dnl of this module should use the same include pattern as gl_SOCKET_HEADERS. +dnl When you change this macro, keep also in sync: +dnl - gl_CHECK_SOCKET_HEADERS, +dnl - the Include section of modules/socklen. +AC_DEFUN([gl_SOCKET_HEADERS], +[ +/* is not needed according to POSIX, but the + in i386-unknown-freebsd4.10 and + powerpc-apple-darwin5.5 required it. */ +#include +#if HAVE_SYS_SOCKET_H +# include +#elif HAVE_WS2TCPIP_H +# include +#endif +]) + +dnl Tests for the existence of the header for socket facilities. +dnl Defines the C macros HAVE_SYS_SOCKET_H, HAVE_WS2TCPIP_H. +dnl This macro must match gl_SOCKET_HEADERS. +AC_DEFUN([gl_CHECK_SOCKET_HEADERS], + [AC_CHECK_HEADERS_ONCE([sys/socket.h]) + if test $ac_cv_header_sys_socket_h = no; then + 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]) + fi + ]) diff --git a/m4/sys_socket_h.m4 b/m4/sys_socket_h.m4 --- a/m4/sys_socket_h.m4 +++ b/m4/sys_socket_h.m4 @@ -1,4 +1,4 @@ -# sys_socket_h.m4 serial 21 +# sys_socket_h.m4 serial 22 dnl Copyright (C) 2005-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -101,17 +101,13 @@ AC_DEFUN([gl_PREREQ_SYS_H_SOCKET], [ dnl Check prerequisites of the replacement. + AC_REQUIRE([gl_CHECK_SOCKET_HEADERS]) 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 diff --git a/modules/socklen b/modules/socklen --- a/modules/socklen +++ b/modules/socklen @@ -5,7 +5,6 @@ m4/socklen.m4 Depends-on: -sys_socket configure.ac: gl_TYPE_SOCKLEN_T @@ -13,8 +12,12 @@ Makefile.am: Include: - - +#include +#if HAVE_SYS_SOCKET_H +# include +#elif HAVE_WS2TCPIP_H +# include +#endif License: unlimited