Mercurial > hg > octave-nkf > gnulib-hg
changeset 10504:21e72b03bb51
New module 'spawn'.
author | Bruno Haible <bruno@clisp.org> |
---|---|
date | Sun, 28 Sep 2008 13:26:56 +0200 |
parents | 7cb5bef97652 |
children | bb42f3fdba16 |
files | ChangeLog doc/posix-headers/spawn.texi lib/spawn.in.h m4/spawn_h.m4 modules/spawn |
diffstat | 5 files changed, 524 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2008-09-28 Bruno Haible <bruno@clisp.org> + + New module 'spawn'. + * modules/spawn: New file. + * lib/spawn.in.h: New file. + * m4/spawn_h.m4: New file. + * doc/posix-headers/spawn.texi: Mention the new module. + 2008-09-28 Bruno Haible <bruno@clisp.org> * modules/sched-tests: New file.
--- a/doc/posix-headers/spawn.texi +++ b/doc/posix-headers/spawn.texi @@ -3,16 +3,16 @@ POSIX specification: @url{http://www.opengroup.org/susv3xbd/spawn.h.html} -Gnulib module: --- +Gnulib module: spawn Portability problems fixed by Gnulib: @itemize -@end itemize - -Portability problems not fixed by Gnulib: -@itemize @item This header file is missing on some platforms: MacOS X 10.3, FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Cygwin, mingw, Interix 3.5, BeOS. @end itemize + +Portability problems not fixed by Gnulib: +@itemize +@end itemize
new file mode 100644 --- /dev/null +++ b/lib/spawn.in.h @@ -0,0 +1,377 @@ +/* Definitions for POSIX spawn interface. + Copyright (C) 2000, 2003, 2004, 2008 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + 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 3 of the License, 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, see <http://www.gnu.org/licenses/>. */ + +#ifndef _GL_SPAWN_H + +@PRAGMA_SYSTEM_HEADER@ + +/* The include_next requires a split double-inclusion guard. */ +#if @HAVE_SPAWN_H@ +# @INCLUDE_NEXT@ @NEXT_SPAWN_H@ +#endif + +#ifndef _GL_SPAWN_H +#define _GL_SPAWN_H + +#include <sched.h> +#include <signal.h> +#include <sys/types.h> + +#ifndef __THROW +# define __THROW +#endif + +/* GCC 2.95 and later have "__restrict"; C99 compilers have + "restrict", and "configure" may have defined "restrict". + Other compilers use __restrict, __restrict__, and _Restrict, and + 'configure' might #define 'restrict' to those words, so pick a + different name. */ +#ifndef _Restrict_ +# if 199901L <= __STDC_VERSION__ +# define _Restrict_ restrict +# elif 2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__) +# define _Restrict_ __restrict +# else +# define _Restrict_ +# endif +#endif +/* gcc 3.1 and up support the [restrict] syntax. Don't trust + sys/cdefs.h's definition of __restrict_arr, though, as it + mishandles gcc -ansi -pedantic. */ +#ifndef _Restrict_arr_ +# if ((199901L <= __STDC_VERSION__ \ + || ((3 < __GNUC__ || (3 == __GNUC__ && 1 <= __GNUC_MINOR__)) \ + && !__STRICT_ANSI__)) \ + && !defined __GNUG__) +# define _Restrict_arr_ _Restrict_ +# else +# define _Restrict_arr_ +# endif +#endif + +/* The definition of GL_LINK_WARNING is copied here. */ + + +/* Data structure to contain attributes for thread creation. */ +#if @REPLACE_POSIX_SPAWN@ +# define posix_spawnattr_t rpl_posix_spawnattr_t +#endif +typedef struct +{ + short int _flags; + pid_t _pgrp; + sigset_t _sd; + sigset_t _ss; + struct sched_param _sp; + int _policy; + int __pad[16]; +} posix_spawnattr_t; + + +/* Data structure to contain information about the actions to be + performed in the new process with respect to file descriptors. */ +#if @REPLACE_POSIX_SPAWN@ +# define posix_spawn_file_actions_t rpl_posix_spawn_file_actions_t +#endif +typedef struct +{ + int _allocated; + int _used; + struct __spawn_action *_actions; + int __pad[16]; +} posix_spawn_file_actions_t; + + +/* Flags to be set in the `posix_spawnattr_t'. */ +#define POSIX_SPAWN_RESETIDS 0x01 +#define POSIX_SPAWN_SETPGROUP 0x02 +#define POSIX_SPAWN_SETSIGDEF 0x04 +#define POSIX_SPAWN_SETSIGMASK 0x08 +#define POSIX_SPAWN_SETSCHEDPARAM 0x10 +#define POSIX_SPAWN_SETSCHEDULER 0x20 +/* A GNU extension. */ +#define POSIX_SPAWN_USEVFORK 0x40 + + +#ifdef __cplusplus +extern "C" { +#endif + + +#if @GNULIB_POSIX_SPAWN@ +/* Spawn a new process executing PATH with the attributes describes in *ATTRP. + Before running the process perform the actions described in FILE-ACTIONS. + + This function is a possible cancellation points and therefore not + marked with __THROW. */ +# if @REPLACE_POSIX_SPAWN@ +# define posix_spawn rpl_posix_spawn +# endif +# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@ +extern int posix_spawn (pid_t *_Restrict_ __pid, + const char *_Restrict_ __path, + const posix_spawn_file_actions_t *_Restrict_ __file_actions, + const posix_spawnattr_t *_Restrict_ __attrp, + char *const argv[_Restrict_arr_], + char *const envp[_Restrict_arr_]); +# endif +#endif + +#if @GNULIB_POSIX_SPAWNP@ +/* Similar to `posix_spawn' but search for FILE in the PATH. + + This function is a possible cancellation points and therefore not + marked with __THROW. */ +# if @REPLACE_POSIX_SPAWN@ +# define posix_spawnp rpl_posix_spawnp +# endif +# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@ +extern int posix_spawnp (pid_t *__pid, const char *__file, + const posix_spawn_file_actions_t *__file_actions, + const posix_spawnattr_t *__attrp, + char *const argv[], char *const envp[]); +# endif +#endif + + +#if @GNULIB_POSIX_SPAWNATTR_INIT@ +/* Initialize data structure with attributes for `spawn' to default values. */ +# if @REPLACE_POSIX_SPAWN@ +# define posix_spawnattr_init rpl_posix_spawnattr_init +# endif +# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@ +extern int posix_spawnattr_init (posix_spawnattr_t *__attr) __THROW; +# endif +#endif + +#if @GNULIB_POSIX_SPAWNATTR_DESTROY@ +/* Free resources associated with ATTR. */ +# if @REPLACE_POSIX_SPAWN@ +# define posix_spawnattr_destroy rpl_posix_spawnattr_destroy +# endif +# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@ +extern int posix_spawnattr_destroy (posix_spawnattr_t *__attr) __THROW; +# endif +#endif + +#if @GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT@ +/* Store signal mask for signals with default handling from ATTR in + SIGDEFAULT. */ +# if @REPLACE_POSIX_SPAWN@ +# define posix_spawnattr_getsigdefault rpl_posix_spawnattr_getsigdefault +# endif +# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@ +extern int posix_spawnattr_getsigdefault (const posix_spawnattr_t *_Restrict_ __attr, + sigset_t *_Restrict_ __sigdefault) + __THROW; +# endif +#endif + +#if @GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT@ +/* Set signal mask for signals with default handling in ATTR to SIGDEFAULT. */ +# if @REPLACE_POSIX_SPAWN@ +# define posix_spawnattr_setsigdefault rpl_posix_spawnattr_setsigdefault +# endif +# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@ +extern int posix_spawnattr_setsigdefault (posix_spawnattr_t *_Restrict_ __attr, + const sigset_t *_Restrict_ __sigdefault) + __THROW; +# endif +#endif + +#if @GNULIB_POSIX_SPAWNATTR_GETSIGMASK@ +/* Store signal mask for the new process from ATTR in SIGMASK. */ +# if @REPLACE_POSIX_SPAWN@ +# define posix_spawnattr_getsigmask rpl_posix_spawnattr_getsigmask +# endif +# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@ +extern int posix_spawnattr_getsigmask (const posix_spawnattr_t *_Restrict_ __attr, + sigset_t *_Restrict_ __sigmask) __THROW; +# endif +#endif + +#if @GNULIB_POSIX_SPAWNATTR_SETSIGMASK@ +/* Set signal mask for the new process in ATTR to SIGMASK. */ +# if @REPLACE_POSIX_SPAWN@ +# define posix_spawnattr_setsigmask rpl_posix_spawnattr_setsigmask +# endif +# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@ +extern int posix_spawnattr_setsigmask (posix_spawnattr_t *_Restrict_ __attr, + const sigset_t *_Restrict_ __sigmask) + __THROW; +# endif +#endif + +#if @GNULIB_POSIX_SPAWNATTR_GETFLAGS@ +/* Get flag word from the attribute structure. */ +# if @REPLACE_POSIX_SPAWN@ +# define posix_spawnattr_getflags rpl_posix_spawnattr_getflags +# endif +# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@ +extern int posix_spawnattr_getflags (const posix_spawnattr_t *_Restrict_ __attr, + short int *_Restrict_ __flags) __THROW; +# endif +#endif + +#if @GNULIB_POSIX_SPAWNATTR_SETFLAGS@ +/* Store flags in the attribute structure. */ +# if @REPLACE_POSIX_SPAWN@ +# define posix_spawnattr_setflags rpl_posix_spawnattr_setflags +# endif +# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@ +extern int posix_spawnattr_setflags (posix_spawnattr_t *__attr, + short int __flags) __THROW; +# endif +#endif + +#if @GNULIB_POSIX_SPAWNATTR_GETPGROUP@ +/* Get process group ID from the attribute structure. */ +# if @REPLACE_POSIX_SPAWN@ +# define posix_spawnattr_getpgroup rpl_posix_spawnattr_getpgroup +# endif +# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@ +extern int posix_spawnattr_getpgroup (const posix_spawnattr_t *_Restrict_ __attr, + pid_t *_Restrict_ __pgroup) + __THROW; +# endif +#endif + +#if @GNULIB_POSIX_SPAWNATTR_SETPGROUP@ +/* Store process group ID in the attribute structure. */ +# if @REPLACE_POSIX_SPAWN@ +# define posix_spawnattr_setpgroup rpl_posix_spawnattr_setpgroup +# endif +# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@ +extern int posix_spawnattr_setpgroup (posix_spawnattr_t *__attr, + pid_t __pgroup) __THROW; +# endif +#endif + +#if @GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY@ +/* Get scheduling policy from the attribute structure. */ +# if @REPLACE_POSIX_SPAWN@ +# define posix_spawnattr_getschedpolicy rpl_posix_spawnattr_getschedpolicy +# endif +# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@ +extern int posix_spawnattr_getschedpolicy (const posix_spawnattr_t *_Restrict_ __attr, + int *_Restrict_ __schedpolicy) + __THROW; +# endif +#endif + +#if @GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY@ +/* Store scheduling policy in the attribute structure. */ +# if @REPLACE_POSIX_SPAWN@ +# define posix_spawnattr_setschedpolicy rpl_posix_spawnattr_setschedpolicy +# endif +# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@ +extern int posix_spawnattr_setschedpolicy (posix_spawnattr_t *__attr, + int __schedpolicy) __THROW; +# endif +#endif + +#if @GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM@ +/* Get scheduling parameters from the attribute structure. */ +# if @REPLACE_POSIX_SPAWN@ +# define posix_spawnattr_getschedparam rpl_posix_spawnattr_getschedparam +# endif +# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@ +extern int posix_spawnattr_getschedparam (const posix_spawnattr_t *_Restrict_ __attr, + struct sched_param *_Restrict_ __schedparam) __THROW; +# endif +#endif + +#if @GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM@ +/* Store scheduling parameters in the attribute structure. */ +# if @REPLACE_POSIX_SPAWN@ +# define posix_spawnattr_setschedparam rpl_posix_spawnattr_setschedparam +# endif +# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@ +extern int posix_spawnattr_setschedparam (posix_spawnattr_t *_Restrict_ __attr, + const struct sched_param *_Restrict_ __schedparam) __THROW; +# endif +#endif + + +#if @GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT@ +/* Initialize data structure for file attribute for `spawn' call. */ +# if @REPLACE_POSIX_SPAWN@ +# define posix_spawn_file_actions_init rpl_posix_spawn_file_actions_init +# endif +# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@ +extern int posix_spawn_file_actions_init (posix_spawn_file_actions_t *__file_actions) __THROW; +# endif +#endif + +#if @GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY@ +/* Free resources associated with FILE-ACTIONS. */ +# if @REPLACE_POSIX_SPAWN@ +# define posix_spawn_file_actions_destroy rpl_posix_spawn_file_actions_destroy +# endif +# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@ +extern int posix_spawn_file_actions_destroy (posix_spawn_file_actions_t *__file_actions) __THROW; +# endif +#endif + +#if @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ +/* Add an action to FILE-ACTIONS which tells the implementation to call + `open' for the given file during the `spawn' call. */ +# if @REPLACE_POSIX_SPAWN@ +# define posix_spawn_file_actions_addopen rpl_posix_spawn_file_actions_addopen +# endif +# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@ +extern int posix_spawn_file_actions_addopen (posix_spawn_file_actions_t *_Restrict_ __file_actions, + int __fd, + const char *_Restrict_ __path, + int __oflag, mode_t __mode) + __THROW; +# endif +#endif + +#if @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ +/* Add an action to FILE-ACTIONS which tells the implementation to call + `close' for the given file descriptor during the `spawn' call. */ +# if @REPLACE_POSIX_SPAWN@ +# define posix_spawn_file_actions_addclose rpl_posix_spawn_file_actions_addclose +# endif +# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@ +extern int posix_spawn_file_actions_addclose (posix_spawn_file_actions_t *__file_actions, + int __fd) + __THROW; +# endif +#endif + +#if @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ +/* Add an action to FILE-ACTIONS which tells the implementation to call + `dup2' for the given file descriptors during the `spawn' call. */ +# if @REPLACE_POSIX_SPAWN@ +# define posix_spawn_file_actions_adddup2 rpl_posix_spawn_file_actions_adddup2 +# endif +# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@ +extern int posix_spawn_file_actions_adddup2 (posix_spawn_file_actions_t *__file_actions, + int __fd, int __newfd) __THROW; +# endif +#endif + + +#ifdef __cplusplus +} +#endif + + +#endif /* _GL_SPAWN_H */ +#endif /* _GL_SPAWN_H */
new file mode 100644 --- /dev/null +++ b/m4/spawn_h.m4 @@ -0,0 +1,69 @@ +# spawn_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. + +dnl Written by Bruno Haible. + +AC_DEFUN([gl_SPAWN_H], +[ + dnl Use AC_REQUIRE here, so that the default behavior below is expanded + dnl once only, before all statements that occur in other macros. + AC_REQUIRE([gl_SPAWN_H_DEFAULTS]) + + gl_CHECK_NEXT_HEADERS([spawn.h]) + + AC_CHECK_HEADERS_ONCE([spawn.h]) + if test $ac_cv_header_spawn_h = yes; then + HAVE_SPAWN_H=1 + else + HAVE_SPAWN_H=0 + fi + AC_SUBST([HAVE_SPAWN_H]) + + AC_REQUIRE([AC_C_RESTRICT]) +]) + +dnl Unconditionally enables the replacement of <spawn.h>. +AC_DEFUN([gl_REPLACE_SPAWN_H], +[ + AC_REQUIRE([gl_SPAWN_H_DEFAULTS]) + SPAWN_H='spawn.h' +]) + +AC_DEFUN([gl_SPAWN_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_SPAWN_H_DEFAULTS]) + GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1 +]) + +AC_DEFUN([gl_SPAWN_H_DEFAULTS], +[ + GNULIB_POSIX_SPAWN=0; AC_SUBST([GNULIB_POSIX_SPAWN]) + GNULIB_POSIX_SPAWNP=0; AC_SUBST([GNULIB_POSIX_SPAWNP]) + GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT=0; AC_SUBST([GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT]) + GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE=0; AC_SUBST([GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE]) + GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2=0; AC_SUBST([GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2]) + GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN=0; AC_SUBST([GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN]) + GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY=0; AC_SUBST([GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY]) + GNULIB_POSIX_SPAWNATTR_INIT=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_INIT]) + GNULIB_POSIX_SPAWNATTR_GETFLAGS=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_GETFLAGS]) + GNULIB_POSIX_SPAWNATTR_SETFLAGS=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_SETFLAGS]) + GNULIB_POSIX_SPAWNATTR_GETPGROUP=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_GETPGROUP]) + GNULIB_POSIX_SPAWNATTR_SETPGROUP=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_SETPGROUP]) + GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM]) + GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM]) + GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY]) + GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY]) + GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT]) + GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT]) + GNULIB_POSIX_SPAWNATTR_GETSIGMASK=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_GETSIGMASK]) + GNULIB_POSIX_SPAWNATTR_SETSIGMASK=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_SETSIGMASK]) + GNULIB_POSIX_SPAWNATTR_DESTROY=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_DESTROY]) + dnl Assume proper GNU behavior unless another module says otherwise. + HAVE_POSIX_SPAWN=1; AC_SUBST([HAVE_POSIX_SPAWN]) + REPLACE_POSIX_SPAWN=0; AC_SUBST([REPLACE_POSIX_SPAWN]) + SPAWN_H=''; AC_SUBST([SPAWN_H]) +])
new file mode 100644 --- /dev/null +++ b/modules/spawn @@ -0,0 +1,65 @@ +Description: +A POSIX compliant <spawn.h>. + +Files: +lib/spawn.in.h +m4/spawn_h.m4 + +Depends-on: +include_next +link-warning +sched + +configure.ac: +gl_SPAWN_H + +Makefile.am: +BUILT_SOURCES += $(SPAWN_H) + +# We need the following in order to create a replacement for <spawn.h> when +# the system doesn't have one. +spawn.h: spawn.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''HAVE_SPAWN_H''@|$(HAVE_SPAWN_H)|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_SPAWN_H''@|$(NEXT_SPAWN_H)|g' \ + -e 's|@''GNULIB_POSIX_SPAWN''@|$(GNULIB_POSIX_SPAWN)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNP''@|$(GNULIB_POSIX_SPAWNP)|g' \ + -e 's|@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT''@|$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT)|g' \ + -e 's|@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE''@|$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE)|g' \ + -e 's|@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2''@|$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2)|g' \ + -e 's|@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN''@|$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN)|g' \ + -e 's|@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY''@|$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_INIT''@|$(GNULIB_POSIX_SPAWNATTR_INIT)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_GETFLAGS''@|$(GNULIB_POSIX_SPAWNATTR_GETFLAGS)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_SETFLAGS''@|$(GNULIB_POSIX_SPAWNATTR_SETFLAGS)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_GETPGROUP''@|$(GNULIB_POSIX_SPAWNATTR_GETPGROUP)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_SETPGROUP''@|$(GNULIB_POSIX_SPAWNATTR_SETPGROUP)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM''@|$(GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM''@|$(GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY''@|$(GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY''@|$(GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT''@|$(GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT''@|$(GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_GETSIGMASK''@|$(GNULIB_POSIX_SPAWNATTR_GETSIGMASK)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_SETSIGMASK''@|$(GNULIB_POSIX_SPAWNATTR_SETSIGMASK)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_DESTROY''@|$(GNULIB_POSIX_SPAWNATTR_DESTROY)|g' \ + -e 's|@''HAVE_POSIX_SPAWN''@|$(HAVE_POSIX_SPAWN)|g' \ + -e 's|@''REPLACE_POSIX_SPAWN''@|$(REPLACE_POSIX_SPAWN)|g' \ + -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \ + < $(srcdir)/spawn.in.h; \ + } > $@-t + mv $@-t $@ +MOSTLYCLEANFILES += spawn.h spawn.h-t + +Include: +<spawn.h> + +License: +LGPL + +Maintainer: +Bruno Haible, glibc +