From: Bruno Haible Date: Sun, 19 Oct 2008 21:27:14 +0000 (+0200) Subject: New module 'sys_wait'. X-Git-Tag: v0.1~6809 X-Git-Url: http://erislabs.org.uk/gitweb/?a=commitdiff_plain;h=b810369f25f3bf464a633edc6ea2a20f0dbab3a9;p=gnulib.git New module 'sys_wait'. --- diff --git a/ChangeLog b/ChangeLog index 7d832166a..18a0984c2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,14 @@ 2008-10-19 Bruno Haible + New module 'sys_wait'. + * modules/sys_wait: New file. + * lib/sys_wait.in.h: New file, partially copied from + lib/wait-process.c. + * m4/sys_wait_h.m4: New file. + * doc/posix-headers/sys_wait.texi: Mention the new module. + +2008-10-19 Bruno Haible + * m4/wait-process.m4 (gl_WAIT_PROCESS): Remove test for unistd.h. 2008-10-19 Bruno Haible diff --git a/doc/posix-headers/sys_wait.texi b/doc/posix-headers/sys_wait.texi index 8f39d3a30..b404c1206 100644 --- a/doc/posix-headers/sys_wait.texi +++ b/doc/posix-headers/sys_wait.texi @@ -3,15 +3,15 @@ POSIX specification: @url{http://www.opengroup.org/susv3xbd/sys/wait.h.html} -Gnulib module: --- +Gnulib module: sys_wait Portability problems fixed by Gnulib: @itemize +@item +This header file is missing on some platforms: +mingw. @end itemize Portability problems not fixed by Gnulib: @itemize -@item -This header file is missing on some platforms: -mingw. @end itemize diff --git a/lib/sys_wait.in.h b/lib/sys_wait.in.h new file mode 100644 index 000000000..cb4b91627 --- /dev/null +++ b/lib/sys_wait.in.h @@ -0,0 +1,108 @@ +/* A POSIX-like . + Copyright (C) 2001-2003, 2005-2008 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 + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + 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_WAIT_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif + +/* The include_next requires a split double-inclusion guard. */ +#if !((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) +# @INCLUDE_NEXT@ @NEXT_SYS_WAIT_H@ +#endif + +#ifndef _GL_SYS_WAIT_H +#define _GL_SYS_WAIT_H + +/* The definition of GL_LINK_WARNING is copied here. */ + +#if !((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) +/* Unix API. */ + +/* The following macros apply to an argument x, that is a status of a process, + as returned by waitpid(). + On nearly all systems, including Linux/x86, WEXITSTATUS are bits 15..8 and + WTERMSIG are bits 7..0, while BeOS uses the opposite. Therefore programs + have to use the abstract macros. */ + +/* For valid x, exactly one of WIFSIGNALED(x), WIFEXITED(x), WIFSTOPPED(x) + is true. */ +# ifndef WIFSIGNALED +# define WIFSIGNALED(x) (WTERMSIG (x) != 0 && WTERMSIG(x) != 0x7f) +# endif +# ifndef WIFEXITED +# define WIFEXITED(x) (WTERMSIG (x) == 0) +# endif +# ifndef WIFSTOPPED +# define WIFSTOPPED(x) (WTERMSIG (x) == 0x7f) +# endif + +/* The termination signal. Only to be accessed if WIFSIGNALED(x) is true. */ +# ifndef WTERMSIG +# define WTERMSIG(x) ((x) & 0x7f) +# endif + +/* The exit status. Only to be accessed if WIFEXITED(x) is true. */ +# ifndef WEXITSTATUS +# define WEXITSTATUS(x) (((x) >> 8) & 0xff) +# endif + +/* True if the process dumped core. Not standardized by POSIX. */ +# ifndef WCOREDUMP +# define WCOREDUMP(x) ((x) & 0x80) +# endif + +# ifdef __cplusplus +extern "C" { +# endif + +/* Declarations of functions. */ + +# ifdef __cplusplus +} +# endif + +#else +/* Native Windows API. */ + +# include + +# define waitpid(pid,statusp,options) _cwait (statusp, pid, WAIT_CHILD) + +/* The following macros apply to an argument x, that is a status of a process, + as returned by waitpid() or, equivalently, _cwait() or GetExitCodeProcess(). + This value is simply an 'int', not composed of bit fields. */ + +/* When an unhandled fatal signal terminates a process, the exit code is 3. */ +# define WIFSIGNALED(x) ((x) == 3) +# define WIFEXITED(x) ((x) != 3) +# define WIFSTOPPED(x) 0 + +/* The signal that terminated a process is not known posthum. */ +# define WTERMSIG(x) SIGTERM + +# define WEXITSTATUS(x) (x) + +/* There are no core dumps. */ +# define WCOREDUMP(x) 0 + +#endif + +#endif /* _GL_SYS_WAIT_H */ +#endif /* _GL_SYS_WAIT_H */ diff --git a/m4/sys_wait_h.m4 b/m4/sys_wait_h.m4 new file mode 100644 index 000000000..9d7fb445c --- /dev/null +++ b/m4/sys_wait_h.m4 @@ -0,0 +1,26 @@ +# sys_wait_h.m4 serial 1 +dnl Copyright (C) 2008 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. + +AC_DEFUN([gl_SYS_WAIT_H], +[ + AC_REQUIRE([gl_SYS_WAIT_H_DEFAULTS]) + + gl_CHECK_NEXT_HEADERS([sys/wait.h]) + SYS_WAIT_H='sys/wait.h' + AC_SUBST([SYS_WAIT_H]) +]) + +AC_DEFUN([gl_SYS_WAIT_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_SYS_WAIT_H_DEFAULTS]) + GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1 +]) + +AC_DEFUN([gl_SYS_WAIT_H_DEFAULTS], +[ + dnl Assume proper GNU behavior unless another module says otherwise. +]) diff --git a/modules/sys_wait b/modules/sys_wait new file mode 100644 index 000000000..a287d45ec --- /dev/null +++ b/modules/sys_wait @@ -0,0 +1,42 @@ +Description: +A for systems with missing declarations. + +Files: +lib/sys_wait.in.h +m4/sys_wait_h.m4 + +Depends-on: +include_next +link-warning + +configure.ac: +gl_SYS_WAIT_H +AC_PROG_MKDIR_P + +Makefile.am: +BUILT_SOURCES += $(SYS_WAIT_H) + +# We need the following in order to create when the system +# has one that is incomplete. +sys/wait.h: sys_wait.in.h + @MKDIR_P@ sys + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_SYS_WAIT_H''@|$(NEXT_SYS_WAIT_H)|g' \ + -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \ + < $(srcdir)/sys_wait.in.h; \ + } > $@-t + mv $@-t $@ +MOSTLYCLEANFILES += sys/wait.h sys/wait.h-t +MOSTLYCLEANDIRS += sys + +Include: +#include + +License: +LGPLv2+ + +Maintainer: +Bruno Haible