When compiling for Android 4.3, the Android headers define the types posix_spawnattr_t and posix_spawn_file_actions_t. But the corresponding functions are not declared and not available at link time. Therefore gnulib attempts to build its replacements, which fails because the types don't contain the expected members:
spawn_faction_addclose.c: In function 'posix_spawn_file_actions_addclose': spawn_faction_addclose.c:50:19: error: request for member '_used' in something not a structure or union if (file_actions->_used == file_actions->_allocated ^ spawn_faction_addclose.c:50:42: error: request for member '_allocated' in something not a structure or union if (file_actions->_used == file_actions->_allocated ^ spawn_faction_addclose.c:59:24: error: request for member '_actions' in something not a structure or union rec = &file_actions->_actions[file_actions->_used]; ^ This patch fixes it. 2018-05-13 Bruno Haible <br...@clisp.org> posix_spawn: Fix compilation error on Android. * lib/spawn.in.h (posix_spawnattr_t): Consider also the case HAVE_POSIX_SPAWNATTR_T = 1 && HAVE_POSIX_SPAWN = 0. (posix_spawn_file_actions_t): Consider also the case HAVE_POSIX_SPAWN_FILE_ACTIONS_T = 1 && HAVE_POSIX_SPAWN = 0. diff --git a/lib/spawn.in.h b/lib/spawn.in.h index b0dfcb5..a606176 100644 --- a/lib/spawn.in.h +++ b/lib/spawn.in.h @@ -79,10 +79,10 @@ /* Data structure to contain attributes for thread creation. */ -#if @REPLACE_POSIX_SPAWN@ +#if @REPLACE_POSIX_SPAWN@ || (@HAVE_POSIX_SPAWNATTR_T@ && !@HAVE_POSIX_SPAWN@) # define posix_spawnattr_t rpl_posix_spawnattr_t #endif -#if @REPLACE_POSIX_SPAWN@ || !@HAVE_POSIX_SPAWNATTR_T@ +#if @REPLACE_POSIX_SPAWN@ || !@HAVE_POSIX_SPAWNATTR_T@ || !@HAVE_POSIX_SPAWN@ # if !GNULIB_defined_posix_spawnattr_t typedef struct { @@ -101,10 +101,10 @@ typedef struct /* Data structure to contain information about the actions to be performed in the new process with respect to file descriptors. */ -#if @REPLACE_POSIX_SPAWN@ +#if @REPLACE_POSIX_SPAWN@ || (@HAVE_POSIX_SPAWN_FILE_ACTIONS_T@ && !@HAVE_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@ +#if @REPLACE_POSIX_SPAWN@ || !@HAVE_POSIX_SPAWN_FILE_ACTIONS_T@ || !@HAVE_POSIX_SPAWN@ # if !GNULIB_defined_posix_spawn_file_actions_t typedef struct {