Module Name: src
Committed By: rillig
Date: Sat Jul 20 14:09:27 UTC 2024
Modified Files:
src/usr.bin/make: job.c
src/usr.bin/make/unit-tests: cmd-errors-jobs.exp cmd-errors-jobs.mk
Log Message:
make: don't run erroneous commands in parallel mode
To generate a diff of this commit:
cvs rdiff -u -r1.480 -r1.481 src/usr.bin/make/job.c
cvs rdiff -u -r1.10 -r1.11 src/usr.bin/make/unit-tests/cmd-errors-jobs.exp
cvs rdiff -u -r1.9 -r1.10 src/usr.bin/make/unit-tests/cmd-errors-jobs.mk
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/usr.bin/make/job.c
diff -u src/usr.bin/make/job.c:1.480 src/usr.bin/make/job.c:1.481
--- src/usr.bin/make/job.c:1.480 Sun Jul 7 07:50:57 2024
+++ src/usr.bin/make/job.c Sat Jul 20 14:09:27 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: job.c,v 1.480 2024/07/07 07:50:57 rillig Exp $ */
+/* $NetBSD: job.c,v 1.481 2024/07/20 14:09:27 rillig Exp $ */
/*
* Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -141,7 +141,7 @@
#include "trace.h"
/* "@(#)job.c 8.2 (Berkeley) 3/19/94" */
-MAKE_RCSID("$NetBSD: job.c,v 1.480 2024/07/07 07:50:57 rillig Exp $");
+MAKE_RCSID("$NetBSD: job.c,v 1.481 2024/07/20 14:09:27 rillig Exp $");
/*
* A shell defines how the commands are run. All commands for a target are
@@ -1680,6 +1680,8 @@ JobStart(GNode *gn, bool special)
* virtual targets.
*/
+ int parseErrorsBefore;
+
/*
* We're serious here, but if the commands were bogus, we're
* also dead...
@@ -1689,7 +1691,10 @@ JobStart(GNode *gn, bool special)
DieHorribly();
}
+ parseErrorsBefore = parseErrors;
JobWriteShellCommands(job, gn, &run);
+ if (parseErrors != parseErrorsBefore)
+ run = false;
(void)fflush(job->cmdFILE);
} else if (!GNode_ShouldExecute(gn)) {
/*
Index: src/usr.bin/make/unit-tests/cmd-errors-jobs.exp
diff -u src/usr.bin/make/unit-tests/cmd-errors-jobs.exp:1.10 src/usr.bin/make/unit-tests/cmd-errors-jobs.exp:1.11
--- src/usr.bin/make/unit-tests/cmd-errors-jobs.exp:1.10 Sat Jul 20 13:59:31 2024
+++ src/usr.bin/make/unit-tests/cmd-errors-jobs.exp Sat Jul 20 14:09:27 2024
@@ -1,12 +1,8 @@
: undefined--eol
make: in target "unclosed-expression": Unclosed variable "UNCLOSED"
-: unclosed-expression-
make: in target "unclosed-modifier": while evaluating variable "UNCLOSED" with value "": Unclosed expression, expecting '}'
-: unclosed-modifier-
make: in target "unknown-modifier": while evaluating variable "UNKNOWN" with value "": Unknown modifier "Z"
-: unknown-modifier--eol
make: in target "depend-source": while evaluating variable "UNCLOSED" with value "": Unclosed expression, expecting '}'
-: depend-source-
: end-eol
: Making depend-target
: .END-eol
Index: src/usr.bin/make/unit-tests/cmd-errors-jobs.mk
diff -u src/usr.bin/make/unit-tests/cmd-errors-jobs.mk:1.9 src/usr.bin/make/unit-tests/cmd-errors-jobs.mk:1.10
--- src/usr.bin/make/unit-tests/cmd-errors-jobs.mk:1.9 Sat Jul 20 13:59:31 2024
+++ src/usr.bin/make/unit-tests/cmd-errors-jobs.mk Sat Jul 20 14:09:27 2024
@@ -1,4 +1,4 @@
-# $NetBSD: cmd-errors-jobs.mk,v 1.9 2024/07/20 13:59:31 rillig Exp $
+# $NetBSD: cmd-errors-jobs.mk,v 1.10 2024/07/20 14:09:27 rillig Exp $
#
# Demonstrate how errors in expressions affect whether the commands
# are actually executed in jobs mode.
@@ -17,20 +17,17 @@ undefined:
unclosed-expression:
# expect: make: in target "unclosed-expression": Unclosed variable "UNCLOSED"
-# XXX: This command is executed even though it contains parse errors.
-# expect: : unclosed-expression-
+# expect-not: : unclosed-expression-
: $@-${UNCLOSED
unclosed-modifier:
# expect: make: in target "unclosed-modifier": while evaluating variable "UNCLOSED" with value "": Unclosed expression, expecting '}'
-# XXX: This command is executed even though it contains parse errors.
-# expect: : unclosed-modifier-
+# expect-not: : unclosed-modifier-
: $@-${UNCLOSED:
unknown-modifier:
# expect: make: in target "unknown-modifier": while evaluating variable "UNKNOWN" with value "": Unknown modifier "Z"
-# XXX: This command is executed even though it contains parse errors.
-# expect: : unknown-modifier--eol
+# expect-not: : unknown-modifier--eol
: $@-${UNKNOWN:Z}-eol
depend-target: depend-source