Module Name: src
Committed By: rillig
Date: Mon Nov 23 19:27:20 UTC 2020
Modified Files:
src/usr.bin/make: compat.c
Log Message:
make(1): split Compat_Make into smaller functions
To generate a diff of this commit:
cvs rdiff -u -r1.184 -r1.185 src/usr.bin/make/compat.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.184 src/usr.bin/make/compat.c:1.185
--- src/usr.bin/make/compat.c:1.184 Mon Nov 23 19:14:24 2020
+++ src/usr.bin/make/compat.c Mon Nov 23 19:27:20 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: compat.c,v 1.184 2020/11/23 19:14:24 rillig Exp $ */
+/* $NetBSD: compat.c,v 1.185 2020/11/23 19:27:20 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.184 2020/11/23 19:14:24 rillig Exp $");
+MAKE_RCSID("$NetBSD: compat.c,v 1.185 2020/11/23 19:27:20 rillig Exp $");
static GNode *curTarg = NULL;
static pid_t compatChild;
@@ -461,21 +461,9 @@ MakeNodes(GNodeList *gnodes, GNode *pgn)
}
}
-/* Make a target.
- *
- * If an error is detected and not being ignored, the process exits.
- *
- * Input:
- * gn The node to make
- * pgn Parent to abort if necessary
- */
-void
-Compat_Make(GNode *gn, GNode *pgn)
+static Boolean
+MakeUnmade(GNode *const gn, GNode *const pgn)
{
- if (shellName == NULL) /* we came here from jobs */
- Shell_Init();
-
- if (gn->made == UNMADE && (gn == pgn || !(pgn->type & OP_MADE))) {
/*
* First mark ourselves to be made, then apply whatever transformations
* the suffix module thinks are necessary. Once that's done, we can
@@ -487,16 +475,16 @@ Compat_Make(GNode *gn, GNode *pgn)
gn->flags |= REMAKE;
gn->made = BEINGMADE;
if (!(gn->type & OP_MADE))
- Suff_FindDeps(gn);
+ Suff_FindDeps(gn);
MakeNodes(gn->children, gn);
if (!(gn->flags & REMAKE)) {
- gn->made = ABORTED;
- pgn->flags &= ~(unsigned)REMAKE;
- goto cohorts;
+ gn->made = ABORTED;
+ pgn->flags &= ~(unsigned)REMAKE;
+ return FALSE;
}
if (Lst_FindDatum(gn->implicitParents, pgn) != NULL)
- Var_Set(IMPSRC, GNode_VarTarget(gn), pgn);
+ Var_Set(IMPSRC, GNode_VarTarget(gn), pgn);
/*
* All the children were made ok. Now youngestChild->mtime contains the
@@ -506,18 +494,18 @@ Compat_Make(GNode *gn, GNode *pgn)
*/
DEBUG1(MAKE, "Examining %s...", gn->name);
if (!GNode_IsOODate(gn)) {
- gn->made = UPTODATE;
- DEBUG0(MAKE, "up-to-date.\n");
- goto cohorts;
+ gn->made = UPTODATE;
+ DEBUG0(MAKE, "up-to-date.\n");
+ return FALSE;
} else
- DEBUG0(MAKE, "out-of-date.\n");
+ DEBUG0(MAKE, "out-of-date.\n");
/*
* If the user is just seeing if something is out-of-date, exit now
* to tell him/her "yes".
*/
if (opts.queryFlag)
- exit(1);
+ exit(1);
/*
* We need to be re-made. We also have to make sure we've got a $?
@@ -531,83 +519,111 @@ Compat_Make(GNode *gn, GNode *pgn)
* should not be printed so CompatRunCommand knows what to do.
*/
if (Targ_Ignore(gn))
- gn->type |= OP_IGNORE;
+ gn->type |= OP_IGNORE;
if (Targ_Silent(gn))
- gn->type |= OP_SILENT;
+ gn->type |= OP_SILENT;
if (Job_CheckCommands(gn, Fatal)) {
- /*
- * Our commands are ok, but we still have to worry about the -t
- * flag...
- */
- if (!opts.touchFlag || (gn->type & OP_MAKE)) {
- curTarg = gn;
+ /*
+ * Our commands are ok, but we still have to worry about
+ * the -t flag.
+ */
+ if (!opts.touchFlag || (gn->type & OP_MAKE)) {
+ curTarg = gn;
#ifdef USE_META
- if (useMeta && GNode_ShouldExecute(gn)) {
- meta_job_start(NULL, gn);
- }
+ if (useMeta && GNode_ShouldExecute(gn)) {
+ meta_job_start(NULL, gn);
+ }
#endif
- RunCommands(gn);
- curTarg = NULL;
- } else {
- Job_Touch(gn, (gn->type & OP_SILENT) != 0);
- }
+ RunCommands(gn);
+ curTarg = NULL;
+ } else {
+ Job_Touch(gn, (gn->type & OP_SILENT) != 0);
+ }
} else {
- gn->made = ERROR;
+ gn->made = ERROR;
}
#ifdef USE_META
if (useMeta && GNode_ShouldExecute(gn)) {
- if (meta_job_finish(NULL) != 0)
- gn->made = ERROR;
+ if (meta_job_finish(NULL) != 0)
+ gn->made = ERROR;
}
#endif
if (gn->made != ERROR) {
- /*
- * If the node was made successfully, mark it so, update
- * its modification time and timestamp all its parents.
- * This is to keep its state from affecting that of its parent.
- */
- gn->made = MADE;
- if (Make_Recheck(gn) == 0)
- pgn->flags |= FORCE;
- if (!(gn->type & OP_EXEC)) {
- pgn->flags |= CHILDMADE;
- GNode_UpdateYoungestChild(pgn, gn);
- }
+ /*
+ * If the node was made successfully, mark it so, update
+ * its modification time and timestamp all its parents.
+ * This is to keep its state from affecting that of its parent.
+ */
+ gn->made = MADE;
+ if (Make_Recheck(gn) == 0)
+ pgn->flags |= FORCE;
+ if (!(gn->type & OP_EXEC)) {
+ pgn->flags |= CHILDMADE;
+ GNode_UpdateYoungestChild(pgn, gn);
+ }
} else if (opts.keepgoing) {
- pgn->flags &= ~(unsigned)REMAKE;
+ pgn->flags &= ~(unsigned)REMAKE;
} else {
- PrintOnError(gn, "\nStop.");
- exit(1);
+ PrintOnError(gn, "\nStop.");
+ exit(1);
}
- } else if (gn->made == ERROR) {
- /* Already had an error when making this. Tell the parent to abort. */
- pgn->flags &= ~(unsigned)REMAKE;
- } else {
+ return TRUE;
+}
+
+static void
+MakeOther(GNode *gn, GNode *pgn)
+{
+
if (Lst_FindDatum(gn->implicitParents, pgn) != NULL) {
- const char *target = GNode_VarTarget(gn);
- Var_Set(IMPSRC, target != NULL ? target : "", pgn);
+ const char *target = GNode_VarTarget(gn);
+ Var_Set(IMPSRC, target != NULL ? target : "", pgn);
}
+
switch(gn->made) {
- case BEINGMADE:
+ case BEINGMADE:
Error("Graph cycles through %s", gn->name);
gn->made = ERROR;
pgn->flags &= ~(unsigned)REMAKE;
break;
- case MADE:
+ case MADE:
if (!(gn->type & OP_EXEC)) {
- pgn->flags |= CHILDMADE;
- GNode_UpdateYoungestChild(pgn, gn);
+ pgn->flags |= CHILDMADE;
+ GNode_UpdateYoungestChild(pgn, gn);
}
break;
- case UPTODATE:
+ case UPTODATE:
if (!(gn->type & OP_EXEC))
- GNode_UpdateYoungestChild(pgn, gn);
+ GNode_UpdateYoungestChild(pgn, gn);
break;
- default:
+ default:
break;
}
+}
+
+/* Make a target.
+ *
+ * If an error is detected and not being ignored, the process exits.
+ *
+ * Input:
+ * gn The node to make
+ * pgn Parent to abort if necessary
+ */
+void
+Compat_Make(GNode *gn, GNode *pgn)
+{
+ if (shellName == NULL) /* we came here from jobs */
+ Shell_Init();
+
+ if (gn->made == UNMADE && (gn == pgn || !(pgn->type & OP_MADE))) {
+ if (!MakeUnmade(gn, pgn))
+ goto cohorts;
+ } else if (gn->made == ERROR) {
+ /* Already had an error when making this. Tell the parent to abort. */
+ pgn->flags &= ~(unsigned)REMAKE;
+ } else {
+ MakeOther(gn, pgn);
}
cohorts: