From d93c1f1b00e1dea78b919c7fb7b6ddebecfcf3a5 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Mon, 10 Aug 2009 00:26:10 +0200 Subject: [PATCH] Make really self-contained, also on Solaris 10. --- ChangeLog | 10 ++++++++++ doc/posix-headers/sys_select.texi | 4 ++++ lib/sys_select.in.h | 6 +++++- m4/sys_select_h.m4 | 31 ++++++++++++++++++++++++++++++- tests/test-sys_select.c | 7 ++++++- 5 files changed, 55 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index b5bac665f..339ce0101 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,15 @@ 2009-08-09 Bruno Haible + Make really self-contained, also on Solaris 10. + * lib/sys_select.in.h: Include . + * m4/sys_select_h.m4 (gl_HEADER_SYS_SELECT): Test also against + Solaris 10 problem. + * tests/test-sys_select.c (main): Add check that FD_ZERO can be used. + * doc/posix-headers/sys_select.texi: Mention the Solaris 10 problem. + Reported by Jim Meyering. + +2009-08-09 Bruno Haible + Avoid warnings from 'aclocal' that are due to a use of macro name AM_XGETTEXT_OPTION that is not defined in automake. * modules/argp (configure.ac): Hide use of AM_XGETTEXT_OPTION from diff --git a/doc/posix-headers/sys_select.texi b/doc/posix-headers/sys_select.texi index 1a30318c5..903606576 100644 --- a/doc/posix-headers/sys_select.texi +++ b/doc/posix-headers/sys_select.texi @@ -16,6 +16,10 @@ This header file is not self-contained on some platforms: it requires @item This header file does not define @code{struct timeval} on some platforms: OSF/1 4.0. +@item +This header file is not self-contained --- it requires @code{} +before @code{FD_ZERO} can be used --- on some platforms: +Solaris 10. @end itemize Portability problems not fixed by Gnulib: diff --git a/lib/sys_select.in.h b/lib/sys_select.in.h index 62cd1048b..1fb2d946f 100644 --- a/lib/sys_select.in.h +++ b/lib/sys_select.in.h @@ -42,9 +42,13 @@ # include /* On OSF/1 4.0, provides only a forward declaration - of 'struct timeval', and no definition of this type.. */ + of 'struct timeval', and no definition of this type. */ # include +/* On Solaris 10, provides an FD_ZERO implementation + that relies on memset(), but without including . */ +# include + /* The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_SYS_SELECT_H@ diff --git a/m4/sys_select_h.m4 b/m4/sys_select_h.m4 index c48be2ce3..0bb097e1a 100644 --- a/m4/sys_select_h.m4 +++ b/m4/sys_select_h.m4 @@ -1,4 +1,4 @@ -# sys_select_h.m4 serial 7 +# sys_select_h.m4 serial 8 dnl Copyright (C) 2006-2009 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -11,10 +11,39 @@ AC_DEFUN([gl_HEADER_SYS_SELECT], AC_CACHE_CHECK([whether is self-contained], [gl_cv_header_sys_select_h_selfcontained], [ + dnl Test against two bugs: + dnl 1. On many platforms, assumes prior inclusion of + dnl . + dnl 2. On OSF/1 4.0, provides only a forward declaration + dnl of 'struct timeval', and no definition of this type. AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [[struct timeval b;]])], [gl_cv_header_sys_select_h_selfcontained=yes], [gl_cv_header_sys_select_h_selfcontained=no]) + dnl Test against another bug: + dnl 3. On Solaris 10, provides an FD_ZERO implementation + dnl that relies on memset(), but without including . + if test $gl_cv_header_sys_select_h_selfcontained = yes; then + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[#include ]], + [[int memset; int bzero;]]) + ], + [AC_LINK_IFELSE( + [AC_LANG_PROGRAM([[#include ]], [[ + #undef memset + #define memset nonexistent_memset + extern void *memset (void *, int, unsigned long); + #undef bzero + #define bzero nonexistent_bzero + extern void bzero (void *, unsigned long); + fd_set fds; + FD_ZERO (&fds); + ]]) + ], + [], + [gl_cv_header_sys_select_h_selfcontained=no]) + ]) + fi ]) if test $gl_cv_header_sys_select_h_selfcontained = yes; then SYS_SELECT_H='' diff --git a/tests/test-sys_select.c b/tests/test-sys_select.c index 6449dafde..66079529e 100644 --- a/tests/test-sys_select.c +++ b/tests/test-sys_select.c @@ -1,5 +1,5 @@ /* Test of substitute. - Copyright (C) 2007-2008 Free Software Foundation, Inc. + Copyright (C) 2007-2009 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -26,5 +26,10 @@ struct timeval t1; int main () { + /* Check that FD_ZERO can be used. This should not yield a warning + such as "warning: implicit declaration of function 'memset'". */ + fd_set fds; + FD_ZERO (&fds); + return 0; } -- 2.11.0