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

Reply via email to