On Android 11, I'm seeing a test failure: FAIL: test-execute.sh =====================
test-execute-main: test-execute-child subprocess failed ../../gltests/test-execute-main.c:138: assertion 'ret == 127' failed Aborted test-execute.sh: test case 3 failed ../../gltests/test-execute-main.c:151: assertion 'ret == 0' failed Aborted test-execute.sh: test case 4 failed FAIL test-execute.sh (exit status: 1) When I run make check TESTS=test-execute.sh or rm -f test-execute.sh.log; make test-execute.sh.log I see the test cases 3 and 4 fail, because the child program has exited with exit code 71. Whereas when I run ../../gltests/test-execute.sh directly, all the tests pass. Apparently the SIGPIPE handler gets set to SIG_IGN, either by 'make' or by the test-driver. This patch implements a workaround. 2023-01-17 Bruno Haible <br...@clisp.org> execute tests: Avoid test failure on Android. * tests/test-execute-main.c (main): Reset the SIGPIPE handler to default. diff --git a/tests/test-execute-main.c b/tests/test-execute-main.c index d89b34465b..fbaa9c9d2e 100644 --- a/tests/test-execute-main.c +++ b/tests/test-execute-main.c @@ -58,6 +58,18 @@ main (int argc, char *argv[]) const char *progname = "test-execute-child"; int test = atoi (argv[2]); +#if defined __ANDROID__ + /* On Android 11, when this test is executed through 'make' (GNU make 4.4) and + build-aux/test-driver, i.e. through + make check TESTS=test-execute.sh + or + rm -f test-execute.sh.log; make test-execute.sh.log + the signal handler for SIGPIPE is set to SIG_IGN. This causes the tests + 3 and 4 to fail. Work around it by resetting the signal handler for + SIGPIPE to the default. */ + signal (SIGPIPE, SIG_DFL); +#endif + switch (test) { case 14: