Module Name:    src
Committed By:   rillig
Date:           Mon Dec  7 01:35:33 UTC 2020

Modified Files:
        src/usr.bin/make: compat.c
        src/usr.bin/make/unit-tests: opt-keep-going-multiple.exp opt.exp

Log Message:
make(1): fix wrong exit status for multiple failed main targets


To generate a diff of this commit:
cvs rdiff -u -r1.203 -r1.204 src/usr.bin/make/compat.c
cvs rdiff -u -r1.1 -r1.2 \
    src/usr.bin/make/unit-tests/opt-keep-going-multiple.exp
cvs rdiff -u -r1.7 -r1.8 src/usr.bin/make/unit-tests/opt.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.203 src/usr.bin/make/compat.c:1.204
--- src/usr.bin/make/compat.c:1.203	Mon Dec  7 01:32:04 2020
+++ src/usr.bin/make/compat.c	Mon Dec  7 01:35:33 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: compat.c,v 1.203 2020/12/07 01:32:04 rillig Exp $	*/
+/*	$NetBSD: compat.c,v 1.204 2020/12/07 01:35:33 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.203 2020/12/07 01:32:04 rillig Exp $");
+MAKE_RCSID("$NetBSD: compat.c,v 1.204 2020/12/07 01:35:33 rillig Exp $");
 
 static GNode *curTarg = NULL;
 static pid_t compatChild;
@@ -714,21 +714,12 @@ Compat_Run(GNodeList *targs)
 		} else if (gn->made == ABORTED) {
 			printf("`%s' not remade because of errors.\n",
 			       gn->name);
-			seenError = TRUE;
 		}
+		if (GNode_IsError(gn))
+			seenError = TRUE;
 	}
 
-	/*
-	 * XXX: what about multiple main targets if the first few fail but
-	 * the last one succeeds?  This should not count as overall success.
-	 * See opt-keep-going-multiple.mk.
-	 */
-	if (GNode_IsError(gn))
-		seenError = TRUE;
-
-	/*
-	 * If the user has defined a .END target, run its commands.
-	 */
+	/* If the user has defined a .END target, run its commands. */
 	if (!seenError) {
 		GNode *endNode = Targ_GetEndNode();
 		Compat_Make(endNode, endNode);

Index: src/usr.bin/make/unit-tests/opt-keep-going-multiple.exp
diff -u src/usr.bin/make/unit-tests/opt-keep-going-multiple.exp:1.1 src/usr.bin/make/unit-tests/opt-keep-going-multiple.exp:1.2
--- src/usr.bin/make/unit-tests/opt-keep-going-multiple.exp:1.1	Mon Dec  7 01:32:04 2020
+++ src/usr.bin/make/unit-tests/opt-keep-going-multiple.exp	Mon Dec  7 01:35:33 2020
@@ -3,5 +3,7 @@ false fail1
 false fail2
 *** Error code 1 (continuing)
 true succeed
-: The end.
-exit status 0
+
+Stop.
+make: stopped in unit-tests
+exit status 1

Index: src/usr.bin/make/unit-tests/opt.exp
diff -u src/usr.bin/make/unit-tests/opt.exp:1.7 src/usr.bin/make/unit-tests/opt.exp:1.8
--- src/usr.bin/make/unit-tests/opt.exp:1.7	Wed Nov 18 01:06:59 2020
+++ src/usr.bin/make/unit-tests/opt.exp	Mon Dec  7 01:35:33 2020
@@ -12,6 +12,10 @@ make -r -f /dev/null -- -VAR=value -f /d
 make: don't know how to make -f (continuing)
 `/dev/null' is up to date.
 
+Stop.
+make: stopped in unit-tests
+*** Error code 1 (ignored)
+
 make -?
 usage: make [-BeikNnqrSstWwX]
             [-C directory] [-D variable] [-d flags] [-f makefile]

Reply via email to