From 0bf85001e78afe170ee53158a5ca3c2036b5da99 Mon Sep 17 00:00:00 2001 From: Eric Blake Date: Wed, 30 Dec 2009 11:52:31 -0700 Subject: [PATCH] spawn: improve wrapper support Avoid type conflicts if overriding system header. * m4/spawn_h.m4 (gl_SPAWN_H): Check for type existence. (gl_SPAWN_H_DEFAULTS): New defaults. * modules/spawn (Makefile.am): Substitute them. * lib/spawn.in.h: (posix_spawnattr_t, posix_spawn_file_actions_t): Only declare if missing or broken. Signed-off-by: Eric Blake --- ChangeLog | 7 +++++++ lib/spawn.in.h | 4 ++++ m4/spawn_h.m4 | 20 ++++++++++++++++---- modules/spawn | 2 ++ 4 files changed, 29 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2b8207716e..dff8ae98f8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,12 @@ 2009-12-31 Eric Blake + spawn: improve wrapper support + * m4/spawn_h.m4 (gl_SPAWN_H): Check for type existence. + (gl_SPAWN_H_DEFAULTS): New defaults. + * modules/spawn (Makefile.am): Substitute them. + * lib/spawn.in.h: (posix_spawnattr_t, posix_spawn_file_actions_t): + Only declare if missing or broken. + sys_times, sys_utsname: use include_next * m4/sys_times_h.m4 (gl_SYS_TIMES_H): Support wrapping an existing header. diff --git a/lib/spawn.in.h b/lib/spawn.in.h index 61c82aebb7..29b388bbaa 100644 --- a/lib/spawn.in.h +++ b/lib/spawn.in.h @@ -74,6 +74,7 @@ #if @REPLACE_POSIX_SPAWN@ # define posix_spawnattr_t rpl_posix_spawnattr_t #endif +#if @REPLACE_POSIX_SPAWN@ || !@HAVE_POSIX_SPAWNATTR_T@ typedef struct { short int _flags; @@ -84,6 +85,7 @@ typedef struct int _policy; int __pad[16]; } posix_spawnattr_t; +#endif /* Data structure to contain information about the actions to be @@ -91,6 +93,7 @@ typedef struct #if @REPLACE_POSIX_SPAWN@ # define posix_spawn_file_actions_t rpl_posix_spawn_file_actions_t #endif +#if @REPLACE_POSIX_SPAWN@ || !@HAVE_POSIX_SPAWN_FILE_ACTIONS_T@ typedef struct { int _allocated; @@ -98,6 +101,7 @@ typedef struct struct __spawn_action *_actions; int __pad[16]; } posix_spawn_file_actions_t; +#endif /* Flags to be set in the `posix_spawnattr_t'. */ diff --git a/m4/spawn_h.m4 b/m4/spawn_h.m4 index dd915fabdb..a369c27317 100644 --- a/m4/spawn_h.m4 +++ b/m4/spawn_h.m4 @@ -1,4 +1,4 @@ -# spawn_h.m4 serial 3 +# spawn_h.m4 serial 4 dnl Copyright (C) 2008-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, @@ -19,8 +19,17 @@ AC_DEFUN([gl_SPAWN_H], AC_CHECK_HEADERS_ONCE([spawn.h]) if test $ac_cv_header_spawn_h = yes; then HAVE_SPAWN_H=1 + AC_CHECK_TYPES([posix_spawnattr_t], [], [HAVE_POSIX_SPAWNATTR_T=0], [[ +#include + ]]) + AC_CHECK_TYPES([posix_spawn_file_actions_t], [], + [HAVE_POSIX_SPAWN_FILE_ACTIONS_T=0], [[ +#include + ]]) else HAVE_SPAWN_H=0 + HAVE_POSIX_SPAWNATTR_T=0 + HAVE_POSIX_SPAWN_FILE_ACTIONS_T=0 gl_REPLACE_SPAWN_H fi AC_SUBST([HAVE_SPAWN_H]) @@ -66,7 +75,10 @@ AC_DEFUN([gl_SPAWN_H_DEFAULTS], 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]) + HAVE_POSIX_SPAWN=1; AC_SUBST([HAVE_POSIX_SPAWN]) + HAVE_POSIX_SPAWNATTR_T=1; AC_SUBST([HAVE_POSIX_SPAWNATTR_T]) + HAVE_POSIX_SPAWN_FILE_ACTIONS_T=1; + AC_SUBST([HAVE_POSIX_SPAWN_FILE_ACTIONS_T]) + REPLACE_POSIX_SPAWN=0; AC_SUBST([REPLACE_POSIX_SPAWN]) + SPAWN_H=''; AC_SUBST([SPAWN_H]) ]) diff --git a/modules/spawn b/modules/spawn index 616cc454f8..18821520b0 100644 --- a/modules/spawn +++ b/modules/spawn @@ -48,6 +48,8 @@ spawn.h: spawn.in.h $(LINK_WARNING_H) $(ARG_NONNULL_H) -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|@''HAVE_POSIX_SPAWNATTR_T''@|$(HAVE_POSIX_SPAWNATTR_T)|g' \ + -e 's|@''HAVE_POSIX_SPAWN_FILE_ACTIONS_T''@|$(HAVE_POSIX_SPAWN_FILE_ACTIONS_T)|g' \ -e 's|@''REPLACE_POSIX_SPAWN''@|$(REPLACE_POSIX_SPAWN)|g' \ -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -- 2.30.2