summaryrefslogtreecommitdiff
path: root/usr.bin/make/compat.c
diff options
context:
space:
mode:
authorrillig <rillig@NetBSD.org>2020-12-06 23:02:56 +0000
committerrillig <rillig@NetBSD.org>2020-12-06 23:02:56 +0000
commit05f377f09d9a2d6fdff5c2286004df16f8d0c4ea (patch)
treec2a3a5de19c060121f6fb98003b367eee0a2687d /usr.bin/make/compat.c
parent1fbc64e8e79951f673b0bd1e352f13f98dbafc78 (diff)
make(1): refactor Compat_Run to show the error condition more clearly
This refactoring allows to gradually change the conditions for the "Stop." error message, to demonstrate which cases are affected by each tiny change.
Diffstat (limited to 'usr.bin/make/compat.c')
-rw-r--r--usr.bin/make/compat.c34
1 files changed, 21 insertions, 13 deletions
diff --git a/usr.bin/make/compat.c b/usr.bin/make/compat.c
index 8aa7f6eebe7..d498147398a 100644
--- a/usr.bin/make/compat.c
+++ b/usr.bin/make/compat.c
@@ -1,4 +1,4 @@
-/* $NetBSD: compat.c,v 1.197 2020/12/06 22:49:40 rillig Exp $ */
+/* $NetBSD: compat.c,v 1.198 2020/12/06 23:02:56 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.197 2020/12/06 22:49:40 rillig Exp $");
+MAKE_RCSID("$NetBSD: compat.c,v 1.198 2020/12/06 23:02:56 rillig Exp $");
static GNode *curTarg = NULL;
static pid_t compatChild;
@@ -664,8 +664,9 @@ void
Compat_Run(GNodeList *targs)
{
GNode *gn = NULL; /* Current root target */
- int indirectErrors; /* Number of targets not remade due to errors */
- Boolean seenError;
+ Boolean mainError;
+ Boolean mainDepError;
+ Boolean endError;
if (!shellName)
Shell_Init();
@@ -705,7 +706,7 @@ Compat_Run(GNodeList *targs)
*/
Make_ExpandUse(targs);
- indirectErrors = 0;
+ mainDepError = FALSE;
while (!Lst_IsEmpty(targs)) {
gn = Lst_Dequeue(targs);
Compat_Make(gn, gn);
@@ -715,21 +716,28 @@ Compat_Run(GNodeList *targs)
} else if (gn->made == ABORTED) {
printf("`%s' not remade because of errors.\n",
gn->name);
- indirectErrors++;
+ mainDepError = TRUE;
}
}
/*
+ * XXX: what about multiple main targets if the first few fail but
+ * the last one succeeds? This should not count as overall success.
+ */
+ mainError = GNode_IsError(gn);
+
+ /*
* If the user has defined a .END target, run its commands.
*/
- seenError = indirectErrors > 0;
- if (!seenError) {
+ if (!mainDepError) {
GNode *endNode = Targ_GetEndNode();
Compat_Make(endNode, endNode);
- seenError = GNode_IsError(gn) || GNode_IsError(endNode);
- if (seenError) {
- PrintOnError(gn, "\nStop.");
- exit(1);
- }
+ endError = GNode_IsError(endNode);
+ } else
+ endError = FALSE;
+
+ if (!mainDepError && (mainError || endError)) {
+ PrintOnError(gn, "\nStop.");
+ exit(1);
}
}