Module Name: src
Committed By: sjg
Date: Sun Mar 10 02:53:38 UTC 2024
Modified Files:
src/usr.bin/make: compat.c job.c main.c make.1 make.h targ.c
Log Message:
make: record exit status in GNode
SetErrorVars can now set .ERROR_EXIT which allows
a .ERROR target to ignore the case of .ERROR_EXIT == 6
which means failure happened elsewhere.
Reviewed by:
To generate a diff of this commit:
cvs rdiff -u -r1.253 -r1.254 src/usr.bin/make/compat.c
cvs rdiff -u -r1.466 -r1.467 src/usr.bin/make/job.c
cvs rdiff -u -r1.611 -r1.612 src/usr.bin/make/main.c
cvs rdiff -u -r1.374 -r1.375 src/usr.bin/make/make.1
cvs rdiff -u -r1.328 -r1.329 src/usr.bin/make/make.h
cvs rdiff -u -r1.179 -r1.180 src/usr.bin/make/targ.c
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.253 src/usr.bin/make/compat.c:1.254
--- src/usr.bin/make/compat.c:1.253 Fri Mar 1 16:41:42 2024
+++ src/usr.bin/make/compat.c Sun Mar 10 02:53:37 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: compat.c,v 1.253 2024/03/01 16:41:42 sjg Exp $ */
+/* $NetBSD: compat.c,v 1.254 2024/03/10 02:53:37 sjg Exp $ */
/*
* Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -91,7 +91,7 @@
#include "pathnames.h"
/* "@(#)compat.c 8.2 (Berkeley) 3/19/94" */
-MAKE_RCSID("$NetBSD: compat.c,v 1.253 2024/03/01 16:41:42 sjg Exp $");
+MAKE_RCSID("$NetBSD: compat.c,v 1.254 2024/03/10 02:53:37 sjg Exp $");
static GNode *curTarg = NULL;
static pid_t compatChild;
@@ -390,6 +390,8 @@ Compat_RunCommand(const char *cmdp, GNod
meta_job_error(NULL, gn, false, status);
#endif
gn->made = ERROR;
+ if (WIFEXITED(reason))
+ gn->exit_status = status;
if (opts.keepgoing) {
/*
* Abort the current target,
Index: src/usr.bin/make/job.c
diff -u src/usr.bin/make/job.c:1.466 src/usr.bin/make/job.c:1.467
--- src/usr.bin/make/job.c:1.466 Fri Mar 1 16:41:42 2024
+++ src/usr.bin/make/job.c Sun Mar 10 02:53:37 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: job.c,v 1.466 2024/03/01 16:41:42 sjg Exp $ */
+/* $NetBSD: job.c,v 1.467 2024/03/10 02:53:37 sjg 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.466 2024/03/01 16:41:42 sjg Exp $");
+MAKE_RCSID("$NetBSD: job.c,v 1.467 2024/03/10 02:53:37 sjg Exp $");
/*
* A shell defines how the commands are run. All commands for a target are
@@ -2044,6 +2044,8 @@ JobReapChild(pid_t pid, int status, bool
job->status = JOB_ST_FINISHED;
job->exit_status = status;
+ if (WIFEXITED(status))
+ job->node->exit_status = WEXITSTATUS(status);
JobFinish(job, status);
}
Index: src/usr.bin/make/main.c
diff -u src/usr.bin/make/main.c:1.611 src/usr.bin/make/main.c:1.612
--- src/usr.bin/make/main.c:1.611 Fri Mar 1 16:41:42 2024
+++ src/usr.bin/make/main.c Sun Mar 10 02:53:37 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: main.c,v 1.611 2024/03/01 16:41:42 sjg Exp $ */
+/* $NetBSD: main.c,v 1.612 2024/03/10 02:53:37 sjg Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -111,7 +111,7 @@
#include "trace.h"
/* "@(#)main.c 8.3 (Berkeley) 3/19/94" */
-MAKE_RCSID("$NetBSD: main.c,v 1.611 2024/03/01 16:41:42 sjg Exp $");
+MAKE_RCSID("$NetBSD: main.c,v 1.612 2024/03/10 02:53:37 sjg Exp $");
#if defined(MAKE_NATIVE)
__COPYRIGHT("@(#) Copyright (c) 1988, 1989, 1990, 1993 "
"The Regents of the University of California. "
@@ -2037,10 +2037,13 @@ static void
SetErrorVars(GNode *gn)
{
StringListNode *ln;
+ char sts[16];
/*
* We can print this even if there is no .ERROR target.
*/
+ snprintf(sts, sizeof(sts), "%d", gn->exit_status);
+ Global_Set(".ERROR_EXIT", sts);
Global_Set(".ERROR_TARGET", gn->name);
Global_Delete(".ERROR_CMD");
Index: src/usr.bin/make/make.1
diff -u src/usr.bin/make/make.1:1.374 src/usr.bin/make/make.1:1.375
--- src/usr.bin/make/make.1:1.374 Thu Jan 25 21:00:59 2024
+++ src/usr.bin/make/make.1 Sun Mar 10 02:53:37 2024
@@ -1,4 +1,4 @@
-.\" $NetBSD: make.1,v 1.374 2024/01/25 21:00:59 sjg Exp $
+.\" $NetBSD: make.1,v 1.375 2024/03/10 02:53:37 sjg Exp $
.\"
.\" Copyright (c) 1990, 1993
.\" The Regents of the University of California. All rights reserved.
@@ -29,7 +29,7 @@
.\"
.\" from: @(#)make.1 8.4 (Berkeley) 3/19/94
.\"
-.Dd January 24, 2024
+.Dd March 9, 2024
.Dt MAKE 1
.Os
.Sh NAME
@@ -879,6 +879,9 @@ Is used in error handling, see
.It Va .ERROR_CWD
Is used in error handling, see
.Va MAKE_PRINT_VAR_ON_ERROR .
+.It Va .ERROR_EXIT
+Is used in error handling, see
+.Va MAKE_PRINT_VAR_ON_ERROR .
.It Va .ERROR_META_FILE
Is used in error handling in
.Dq meta
@@ -1185,6 +1188,8 @@ When
stops due to an error, it sets
.Sq Va .ERROR_TARGET
to the name of the target that failed,
+.Sq Va .ERROR_EXIT
+to the exit status of the failed target,
.Sq Va .ERROR_CMD
to the commands of the failed target,
and in
@@ -2405,11 +2410,9 @@ Any command lines attached to this targe
else is done successfully.
.It Ic .ERROR
Any command lines attached to this target are executed when another target fails.
-The
-.Va .ERROR_TARGET
-variable is set to the target that failed.
-See also
-.Va MAKE_PRINT_VAR_ON_ERROR .
+See
+.Va MAKE_PRINT_VAR_ON_ERROR
+for the variables that will be set.
.It Ic .IGNORE
Mark each of the sources with the
.Ic .IGNORE
Index: src/usr.bin/make/make.h
diff -u src/usr.bin/make/make.h:1.328 src/usr.bin/make/make.h:1.329
--- src/usr.bin/make/make.h:1.328 Fri Mar 1 16:41:42 2024
+++ src/usr.bin/make/make.h Sun Mar 10 02:53:37 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: make.h,v 1.328 2024/03/01 16:41:42 sjg Exp $ */
+/* $NetBSD: make.h,v 1.329 2024/03/10 02:53:37 sjg Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -504,6 +504,7 @@ typedef struct GNode {
const char *fname;
/* Line number where the GNode got defined, 1-based */
unsigned lineno;
+ int exit_status;
} GNode;
/*
Index: src/usr.bin/make/targ.c
diff -u src/usr.bin/make/targ.c:1.179 src/usr.bin/make/targ.c:1.180
--- src/usr.bin/make/targ.c:1.179 Tue Dec 6 00:12:44 2022
+++ src/usr.bin/make/targ.c Sun Mar 10 02:53:37 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: targ.c,v 1.179 2022/12/06 00:12:44 rillig Exp $ */
+/* $NetBSD: targ.c,v 1.180 2024/03/10 02:53:37 sjg Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -107,7 +107,7 @@
#include "dir.h"
/* "@(#)targ.c 8.2 (Berkeley) 3/19/94" */
-MAKE_RCSID("$NetBSD: targ.c,v 1.179 2022/12/06 00:12:44 rillig Exp $");
+MAKE_RCSID("$NetBSD: targ.c,v 1.180 2024/03/10 02:53:37 sjg Exp $");
/*
* All target nodes that appeared on the left-hand side of one of the
@@ -201,6 +201,7 @@ GNode_New(const char *name)
gn->suffix = NULL;
gn->fname = NULL;
gn->lineno = 0;
+ gn->exit_status = 0;
#ifdef CLEANUP
Lst_Append(&allNodes, gn);