aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRon Yorston <rmy@pobox.com>2024-04-20 16:08:09 +0100
committerRon Yorston <rmy@pobox.com>2024-04-20 16:08:09 +0100
commit356bfacef7da39052d404e2db166996cf7b74d4d (patch)
treeecfb1fdec1ea3dcd5ff8a1b4010e322404b6e1d8
parentec3bd5c462717a6cd1668f536c8aab9d76ea04b0 (diff)
downloadbusybox-w32-356bfacef7da39052d404e2db166996cf7b74d4d.tar.gz
busybox-w32-356bfacef7da39052d404e2db166996cf7b74d4d.tar.bz2
busybox-w32-356bfacef7da39052d404e2db166996cf7b74d4d.zip
make: skip shell -e option when running commands
POSIX says, regarding execution of commands: The execution line shall then be executed by a shell as if it were passed as the argument to the system() interface, except that if errors are not being ignored then the shell -e option shall also be in effect. As a non-POSIX extension, skip the use of the -e option. This is how GNU make and BSD make behave. (GitHub issue #409)
-rw-r--r--miscutils/make.c3
-rwxr-xr-xtestsuite/make.tests7
2 files changed, 8 insertions, 2 deletions
diff --git a/miscutils/make.c b/miscutils/make.c
index 87f17aad7..970919ddc 100644
--- a/miscutils/make.c
+++ b/miscutils/make.c
@@ -2217,7 +2217,7 @@ docmds(struct name *np, struct cmd *cp)
2217 if (sdomake) { 2217 if (sdomake) {
2218 // Get the shell to execute it 2218 // Get the shell to execute it
2219 int status; 2219 int status;
2220 char *cmd = !signore ? auto_concat("set -e;", q) : q; 2220 char *cmd = !signore && posix ? auto_concat("set -e;", q) : q;
2221 2221
2222 target = np; 2222 target = np;
2223 status = system(cmd); 2223 status = system(cmd);
@@ -2233,7 +2233,6 @@ docmds(struct name *np, struct cmd *cp)
2233 diagnostic("failed to build '%s'", np->n_name); 2233 diagnostic("failed to build '%s'", np->n_name);
2234 estat |= MAKE_FAILURE; 2234 estat |= MAKE_FAILURE;
2235 free(command); 2235 free(command);
2236 free(cmd);
2237 break; 2236 break;
2238 } else if (doinclude) { 2237 } else if (doinclude) {
2239 warning("failed to build '%s'", np->n_name); 2238 warning("failed to build '%s'", np->n_name);
diff --git a/testsuite/make.tests b/testsuite/make.tests
index 1fc95a8d2..c512fbdaa 100755
--- a/testsuite/make.tests
+++ b/testsuite/make.tests
@@ -497,6 +497,13 @@ test.b:
497' 497'
498cd .. || exit 1; rm -rf make.tempdir 2>/dev/null 498cd .. || exit 1; rm -rf make.tempdir 2>/dev/null
499 499
500# Don't use the shell -e option when running commands.
501testing "make no shell -e option when running commands" \
502 "make -f -" "OK\n" "" '
503target:
504 @false; echo OK
505'
506
500# An empty original suffix indicates that every word should have 507# An empty original suffix indicates that every word should have
501# the new suffix added. If neither suffix is provided the words 508# the new suffix added. If neither suffix is provided the words
502# remain unchanged. 509# remain unchanged.