Module Name:    src
Committed By:   rillig
Date:           Tue Nov 24 18:17:45 UTC 2020

Modified Files:
        src/usr.bin/make: compat.c job.c make.h
        src/usr.bin/make/unit-tests: deptgt-end-fail-indirect.exp

Log Message:
make(1): fix error handling for dependency of .END in -k mode

Fix one bug, find 4 new ones.  All these bugs have been around since
2005-05-08, when dependencies on the .BEGIN, .END and .INTERRUPT nodes
were implemented.  Before that, checking gn->made == ERROR was
appropriate, but adding the dependencies made ABORTED a new possible
error value from Compat_Make.


To generate a diff of this commit:
cvs rdiff -u -r1.190 -r1.191 src/usr.bin/make/compat.c
cvs rdiff -u -r1.328 -r1.329 src/usr.bin/make/job.c
cvs rdiff -u -r1.216 -r1.217 src/usr.bin/make/make.h
cvs rdiff -u -r1.1 -r1.2 \
    src/usr.bin/make/unit-tests/deptgt-end-fail-indirect.exp

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/compat.c
diff -u src/usr.bin/make/compat.c:1.190 src/usr.bin/make/compat.c:1.191
--- src/usr.bin/make/compat.c:1.190	Tue Nov 24 17:42:31 2020
+++ src/usr.bin/make/compat.c	Tue Nov 24 18:17:45 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: compat.c,v 1.190 2020/11/24 17:42:31 rillig Exp $	*/
+/*	$NetBSD: compat.c,v 1.191 2020/11/24 18:17:45 rillig Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -96,7 +96,7 @@
 #include "pathnames.h"
 
 /*	"@(#)compat.c	8.2 (Berkeley) 3/19/94"	*/
-MAKE_RCSID("$NetBSD: compat.c,v 1.190 2020/11/24 17:42:31 rillig Exp $");
+MAKE_RCSID("$NetBSD: compat.c,v 1.191 2020/11/24 18:17:45 rillig Exp $");
 
 static GNode *curTarg = NULL;
 static pid_t compatChild;
@@ -639,6 +639,8 @@ Compat_Make(GNode *gn, GNode *pgn)
 	if (gn->made == UNMADE && (gn == pgn || !(pgn->type & OP_MADE))) {
 		if (!MakeUnmade(gn, pgn))
 			goto cohorts;
+
+		/* XXX: Replace with GNode_IsError(gn) */
 	} else if (gn->made == ERROR) {
 		/*
 		 * Already had an error when making this.
@@ -689,6 +691,7 @@ Compat_Run(GNodeList *targs)
 		gn = Targ_FindNode(".BEGIN");
 		if (gn != NULL) {
 			Compat_Make(gn, gn);
+			/* XXX: Replace with GNode_IsError(gn) */
 			if (gn->made == ERROR) {
 				PrintOnError(gn, "\nStop.");
 				exit(1);
@@ -722,7 +725,7 @@ Compat_Run(GNodeList *targs)
 	if (indirectErrors == 0) {
 		GNode *endNode = Targ_GetEndNode();
 		Compat_Make(endNode, endNode);
-		if (gn->made == ERROR || endNode->made == ERROR) {
+		if (GNode_IsError(gn) || GNode_IsError(endNode)) {
 			PrintOnError(gn, "\nStop.");
 			exit(1);
 		}

Index: src/usr.bin/make/job.c
diff -u src/usr.bin/make/job.c:1.328 src/usr.bin/make/job.c:1.329
--- src/usr.bin/make/job.c:1.328	Mon Nov 23 23:41:11 2020
+++ src/usr.bin/make/job.c	Tue Nov 24 18:17:45 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: job.c,v 1.328 2020/11/23 23:41:11 rillig Exp $	*/
+/*	$NetBSD: job.c,v 1.329 2020/11/24 18:17:45 rillig Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -143,7 +143,7 @@
 #include "trace.h"
 
 /*	"@(#)job.c	8.2 (Berkeley) 3/19/94"	*/
-MAKE_RCSID("$NetBSD: job.c,v 1.328 2020/11/23 23:41:11 rillig Exp $");
+MAKE_RCSID("$NetBSD: job.c,v 1.329 2020/11/24 18:17:45 rillig Exp $");
 
 /* A shell defines how the commands are run.  All commands for a target are
  * written into a single file, which is then given to the shell to execute
@@ -1843,6 +1843,7 @@ JobRun(GNode *targ)
     }
 #else
     Compat_Make(targ, targ);
+    /* XXX: Replace with GNode_IsError(gn) */
     if (targ->made == ERROR) {
 	PrintOnError(targ, "\n\nStop.");
 	exit(1);
@@ -2739,6 +2740,7 @@ Job_RunTarget(const char *target, const 
 	Var_Set(ALLSRC, fname, gn);
 
     JobRun(gn);
+    /* XXX: Replace with GNode_IsError(gn) */
     if (gn->made == ERROR) {
 	PrintOnError(gn, "\n\nStop.");
 	exit(1);

Index: src/usr.bin/make/make.h
diff -u src/usr.bin/make/make.h:1.216 src/usr.bin/make/make.h:1.217
--- src/usr.bin/make/make.h:1.216	Tue Nov 24 17:42:31 2020
+++ src/usr.bin/make/make.h	Tue Nov 24 18:17:45 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: make.h,v 1.216 2020/11/24 17:42:31 rillig Exp $	*/
+/*	$NetBSD: make.h,v 1.217 2020/11/24 18:17:45 rillig Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -701,6 +701,12 @@ GNode_Path(const GNode *gn)
     return gn->path != NULL ? gn->path : gn->name;
 }
 
+MAKE_INLINE Boolean
+GNode_IsError(const GNode *gn)
+{
+	return gn->made == ERROR || gn->made == ABORTED;
+}
+
 MAKE_INLINE const char *
 GNode_VarTarget(GNode *gn) { return Var_ValueDirect(TARGET, gn); }
 MAKE_INLINE const char *

Index: src/usr.bin/make/unit-tests/deptgt-end-fail-indirect.exp
diff -u src/usr.bin/make/unit-tests/deptgt-end-fail-indirect.exp:1.1 src/usr.bin/make/unit-tests/deptgt-end-fail-indirect.exp:1.2
--- src/usr.bin/make/unit-tests/deptgt-end-fail-indirect.exp:1.1	Tue Nov 24 17:59:42 2020
+++ src/usr.bin/make/unit-tests/deptgt-end-fail-indirect.exp	Tue Nov 24 18:17:45 2020
@@ -1,4 +1,7 @@
 : all
 false
 *** Error code 1 (continuing)
-exit status 0
+
+Stop.
+make: stopped in unit-tests
+exit status 1

Reply via email to