Module Name: src
Committed By: rillig
Date: Mon Nov 23 19:35:10 UTC 2020
Modified Files:
src/usr.bin/make: compat.c
Log Message:
make(1): indent compat.c with tabs instead of spaces
To generate a diff of this commit:
cvs rdiff -u -r1.185 -r1.186 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.185 src/usr.bin/make/compat.c:1.186
--- src/usr.bin/make/compat.c:1.185 Mon Nov 23 19:27:20 2020
+++ src/usr.bin/make/compat.c Mon Nov 23 19:35:10 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: compat.c,v 1.185 2020/11/23 19:27:20 rillig Exp $ */
+/* $NetBSD: compat.c,v 1.186 2020/11/23 19:35:10 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.185 2020/11/23 19:27:20 rillig Exp $");
+MAKE_RCSID("$NetBSD: compat.c,v 1.186 2020/11/23 19:35:10 rillig Exp $");
static GNode *curTarg = NULL;
static pid_t compatChild;
@@ -109,13 +109,13 @@ static int compatSigno;
static void
CompatDeleteTarget(GNode *gn)
{
- if (gn != NULL && !Targ_Precious(gn)) {
- const char *file = GNode_VarTarget(gn);
+ if (gn != NULL && !Targ_Precious(gn)) {
+ const char *file = GNode_VarTarget(gn);
- if (!opts.noExecute && eunlink(file) != -1) {
- Error("*** %s removed", file);
+ if (!opts.noExecute && eunlink(file) != -1) {
+ Error("*** %s removed", file);
+ }
}
- }
}
/* Interrupt the creation of the current target and remove it if it ain't
@@ -129,34 +129,34 @@ CompatDeleteTarget(GNode *gn)
static void
CompatInterrupt(int signo)
{
- CompatDeleteTarget(curTarg);
+ CompatDeleteTarget(curTarg);
- if (curTarg != NULL && !Targ_Precious(curTarg)) {
- /*
- * Run .INTERRUPT only if hit with interrupt signal
- */
- if (signo == SIGINT) {
- GNode *gn = Targ_FindNode(".INTERRUPT");
- if (gn != NULL) {
- Compat_Make(gn, gn);
- }
+ if (curTarg != NULL && !Targ_Precious(curTarg)) {
+ /*
+ * Run .INTERRUPT only if hit with interrupt signal
+ */
+ if (signo == SIGINT) {
+ GNode *gn = Targ_FindNode(".INTERRUPT");
+ if (gn != NULL) {
+ Compat_Make(gn, gn);
+ }
+ }
}
- }
- if (signo == SIGQUIT)
- _exit(signo);
+ if (signo == SIGQUIT)
+ _exit(signo);
- /*
- * If there is a child running, pass the signal on.
- * We will exist after it has exited.
- */
- compatSigno = signo;
- if (compatChild > 0) {
- KILLPG(compatChild, signo);
- } else {
- bmake_signal(signo, SIG_DFL);
- kill(myPid, signo);
- }
+ /*
+ * If there is a child running, pass the signal on.
+ * We will exist after it has exited.
+ */
+ compatSigno = signo;
+ if (compatChild > 0) {
+ KILLPG(compatChild, signo);
+ } else {
+ bmake_signal(signo, SIG_DFL);
+ kill(myPid, signo);
+ }
}
static void
@@ -193,272 +193,278 @@ DebugFailedTarget(const char *cmd, GNode
int
Compat_RunCommand(const char *cmdp, GNode *gn)
{
- char *cmdStart; /* Start of expanded command */
- char *bp;
- Boolean silent; /* Don't print command */
- Boolean doIt; /* Execute even if -n */
- volatile Boolean errCheck; /* Check errors */
- int reason; /* Reason for child's death */
- int status; /* Description of child's death */
- pid_t cpid; /* Child actually found */
- pid_t retstat; /* Result of wait */
- StringListNode *cmdNode; /* Node where current command is located */
- const char **volatile av; /* Argument vector for thing to exec */
- char **volatile mav; /* Copy of the argument vector for freeing */
- Boolean useShell; /* TRUE if command should be executed
+ char *cmdStart; /* Start of expanded command */
+ char *bp;
+ Boolean silent; /* Don't print command */
+ Boolean doIt; /* Execute even if -n */
+ volatile Boolean errCheck; /* Check errors */
+ int reason; /* Reason for child's death */
+ int status; /* Description of child's death */
+ pid_t cpid; /* Child actually found */
+ pid_t retstat; /* Result of wait */
+ StringListNode *cmdNode; /* Node where current command is located */
+ const char **volatile av; /* Argument vector for thing to exec */
+ char **volatile mav; /* Copy of the argument vector for freeing */
+ Boolean useShell; /* TRUE if command should be executed
* using a shell */
- const char *volatile cmd = cmdp;
+ const char *volatile cmd = cmdp;
+
+ silent = (gn->type & OP_SILENT) != 0;
+ errCheck = !(gn->type & OP_IGNORE);
+ doIt = FALSE;
+
+ /* Luckily the commands don't end up in a string pool, otherwise
+ * this comparison could match too early, in a dependency using "..."
+ * for delayed commands, run in parallel mode, using the same shell
+ * command line more than once; see JobPrintCommand.
+ * TODO: write a unit-test to protect against this potential bug. */
+ cmdNode = Lst_FindDatum(gn->commands, cmd);
+ (void)Var_Subst(cmd, gn, VARE_WANTRES, &cmdStart);
+ /* TODO: handle errors */
+
+ if (cmdStart[0] == '\0') {
+ free(cmdStart);
+ return 0;
+ }
+ cmd = cmdStart;
+ LstNode_Set(cmdNode, cmdStart);
+
+ if (gn->type & OP_SAVE_CMDS) {
+ GNode *endNode = Targ_GetEndNode();
+ if (gn != endNode) {
+ Lst_Append(endNode->commands, cmdStart);
+ return 0;
+ }
+ }
+ if (strcmp(cmdStart, "...") == 0) {
+ gn->type |= OP_SAVE_CMDS;
+ return 0;
+ }
+
+ for (;;) {
+ if (*cmd == '@')
+ silent = !DEBUG(LOUD);
+ else if (*cmd == '-')
+ errCheck = FALSE;
+ else if (*cmd == '+') {
+ doIt = TRUE;
+ if (!shellName) /* we came here from jobs */
+ Shell_Init();
+ } else
+ break;
+ cmd++;
+ }
- silent = (gn->type & OP_SILENT) != 0;
- errCheck = !(gn->type & OP_IGNORE);
- doIt = FALSE;
-
- /* Luckily the commands don't end up in a string pool, otherwise
- * this comparison could match too early, in a dependency using "..."
- * for delayed commands, run in parallel mode, using the same shell
- * command line more than once; see JobPrintCommand.
- * TODO: write a unit-test to protect against this potential bug. */
- cmdNode = Lst_FindDatum(gn->commands, cmd);
- (void)Var_Subst(cmd, gn, VARE_WANTRES, &cmdStart);
- /* TODO: handle errors */
+ while (ch_isspace(*cmd))
+ cmd++;
- if (cmdStart[0] == '\0') {
- free(cmdStart);
- return 0;
- }
- cmd = cmdStart;
- LstNode_Set(cmdNode, cmdStart);
-
- if (gn->type & OP_SAVE_CMDS) {
- GNode *endNode = Targ_GetEndNode();
- if (gn != endNode) {
- Lst_Append(endNode->commands, cmdStart);
- return 0;
- }
- }
- if (strcmp(cmdStart, "...") == 0) {
- gn->type |= OP_SAVE_CMDS;
- return 0;
- }
-
- for (;;) {
- if (*cmd == '@')
- silent = !DEBUG(LOUD);
- else if (*cmd == '-')
- errCheck = FALSE;
- else if (*cmd == '+') {
- doIt = TRUE;
- if (!shellName) /* we came here from jobs */
- Shell_Init();
- } else
- break;
- cmd++;
- }
-
- while (ch_isspace(*cmd))
- cmd++;
-
- /*
- * If we did not end up with a command, just skip it.
- */
- if (cmd[0] == '\0')
- return 0;
+ /*
+ * If we did not end up with a command, just skip it.
+ */
+ if (cmd[0] == '\0')
+ return 0;
#if !defined(MAKE_NATIVE)
- /*
- * In a non-native build, the host environment might be weird enough
- * that it's necessary to go through a shell to get the correct
- * behaviour. Or perhaps the shell has been replaced with something
- * that does extra logging, and that should not be bypassed.
- */
- useShell = TRUE;
+ /*
+ * In a non-native build, the host environment might be weird enough
+ * that it's necessary to go through a shell to get the correct
+ * behaviour. Or perhaps the shell has been replaced with something
+ * that does extra logging, and that should not be bypassed.
+ */
+ useShell = TRUE;
#else
- /*
- * Search for meta characters in the command. If there are no meta
- * characters, there's no need to execute a shell to execute the
- * command.
- *
- * Additionally variable assignments and empty commands
- * go to the shell. Therefore treat '=' and ':' like shell
- * meta characters as documented in make(1).
- */
+ /*
+ * Search for meta characters in the command. If there are no meta
+ * characters, there's no need to execute a shell to execute the
+ * command.
+ *
+ * Additionally variable assignments and empty commands
+ * go to the shell. Therefore treat '=' and ':' like shell
+ * meta characters as documented in make(1).
+ */
- useShell = needshell(cmd);
+ useShell = needshell(cmd);
#endif
- /*
- * Print the command before echoing if we're not supposed to be quiet for
- * this one. We also print the command if -n given.
- */
- if (!silent || !GNode_ShouldExecute(gn)) {
- printf("%s\n", cmd);
- fflush(stdout);
- }
-
- /*
- * If we're not supposed to execute any commands, this is as far as
- * we go...
- */
- if (!doIt && !GNode_ShouldExecute(gn))
- return 0;
-
- DEBUG1(JOB, "Execute: '%s'\n", cmd);
-
- if (useShell) {
- /*
- * We need to pass the command off to the shell, typically
- * because the command contains a "meta" character.
- */
- static const char *shargv[5];
-
- /* The following work for any of the builtin shell specs. */
- int shargc = 0;
- shargv[shargc++] = shellPath;
- if (errCheck && shellErrFlag)
- shargv[shargc++] = shellErrFlag;
- shargv[shargc++] = DEBUG(SHELL) ? "-xc" : "-c";
- shargv[shargc++] = cmd;
- shargv[shargc] = NULL;
- av = shargv;
- bp = NULL;
- mav = NULL;
- } else {
- /*
- * No meta-characters, so no need to exec a shell. Break the command
- * into words to form an argument vector we can execute.
- */
- Words words = Str_Words(cmd, FALSE);
- mav = words.words;
- bp = words.freeIt;
- av = (void *)mav;
- }
+ /*
+ * Print the command before echoing if we're not supposed to be quiet
+ * for this one. We also print the command if -n given.
+ */
+ if (!silent || !GNode_ShouldExecute(gn)) {
+ printf("%s\n", cmd);
+ fflush(stdout);
+ }
+
+ /*
+ * If we're not supposed to execute any commands, this is as far as
+ * we go...
+ */
+ if (!doIt && !GNode_ShouldExecute(gn))
+ return 0;
-#ifdef USE_META
- if (useMeta) {
- meta_compat_start();
- }
-#endif
+ DEBUG1(JOB, "Execute: '%s'\n", cmd);
+
+ if (useShell) {
+ /*
+ * We need to pass the command off to the shell, typically
+ * because the command contains a "meta" character.
+ */
+ static const char *shargv[5];
+
+ /* The following work for any of the builtin shell specs. */
+ int shargc = 0;
+ shargv[shargc++] = shellPath;
+ if (errCheck && shellErrFlag)
+ shargv[shargc++] = shellErrFlag;
+ shargv[shargc++] = DEBUG(SHELL) ? "-xc" : "-c";
+ shargv[shargc++] = cmd;
+ shargv[shargc] = NULL;
+ av = shargv;
+ bp = NULL;
+ mav = NULL;
+ } else {
+ /*
+ * No meta-characters, so no need to exec a shell. Break the
+ * command into words to form an argument vector we can
+ * execute.
+ */
+ Words words = Str_Words(cmd, FALSE);
+ mav = words.words;
+ bp = words.freeIt;
+ av = (void *)mav;
+ }
- /*
- * Fork and execute the single command. If the fork fails, we abort.
- */
- compatChild = cpid = vFork();
- if (cpid < 0) {
- Fatal("Could not fork");
- }
- if (cpid == 0) {
- Var_ExportVars();
#ifdef USE_META
if (useMeta) {
- meta_compat_child();
+ meta_compat_start();
}
#endif
- (void)execvp(av[0], (char *const *)UNCONST(av));
- execDie("exec", av[0]);
- }
-
- free(mav);
- free(bp);
-
- /* XXX: Memory management looks suspicious here. */
- /* XXX: Setting a list item to NULL is unexpected. */
- LstNode_SetNull(cmdNode);
+ /*
+ * Fork and execute the single command. If the fork fails, we abort.
+ */
+ compatChild = cpid = vFork();
+ if (cpid < 0) {
+ Fatal("Could not fork");
+ }
+ if (cpid == 0) {
+ Var_ExportVars();
#ifdef USE_META
- if (useMeta) {
- meta_compat_parent(cpid);
- }
+ if (useMeta) {
+ meta_compat_child();
+ }
#endif
+ (void)execvp(av[0], (char *const *)UNCONST(av));
+ execDie("exec", av[0]);
+ }
- /*
- * The child is off and running. Now all we can do is wait...
- */
- while ((retstat = wait(&reason)) != cpid) {
- if (retstat > 0)
- JobReapChild(retstat, reason, FALSE); /* not ours? */
- if (retstat == -1 && errno != EINTR) {
- break;
- }
- }
-
- if (retstat < 0)
- Fatal("error in wait: %d: %s", retstat, strerror(errno));
-
- if (WIFSTOPPED(reason)) {
- status = WSTOPSIG(reason); /* stopped */
- } else if (WIFEXITED(reason)) {
- status = WEXITSTATUS(reason); /* exited */
-#if defined(USE_META) && defined(USE_FILEMON_ONCE)
+ free(mav);
+ free(bp);
+
+ /* XXX: Memory management looks suspicious here. */
+ /* XXX: Setting a list item to NULL is unexpected. */
+ LstNode_SetNull(cmdNode);
+
+#ifdef USE_META
if (useMeta) {
- meta_cmd_finish(NULL);
+ meta_compat_parent(cpid);
+ }
+#endif
+
+ /*
+ * The child is off and running. Now all we can do is wait...
+ */
+ while ((retstat = wait(&reason)) != cpid) {
+ if (retstat > 0)
+ JobReapChild(retstat, reason, FALSE); /* not ours? */
+ if (retstat == -1 && errno != EINTR) {
+ break;
+ }
}
+
+ if (retstat < 0)
+ Fatal("error in wait: %d: %s", retstat, strerror(errno));
+
+ if (WIFSTOPPED(reason)) {
+ status = WSTOPSIG(reason); /* stopped */
+ } else if (WIFEXITED(reason)) {
+ status = WEXITSTATUS(reason); /* exited */
+#if defined(USE_META) && defined(USE_FILEMON_ONCE)
+ if (useMeta) {
+ meta_cmd_finish(NULL);
+ }
#endif
- if (status != 0) {
- if (DEBUG(ERROR))
- DebugFailedTarget(cmd, gn);
- printf("*** Error code %d", status);
- }
- } else {
- status = WTERMSIG(reason); /* signaled */
- printf("*** Signal %d", status);
- }
+ if (status != 0) {
+ if (DEBUG(ERROR))
+ DebugFailedTarget(cmd, gn);
+ printf("*** Error code %d", status);
+ }
+ } else {
+ status = WTERMSIG(reason); /* signaled */
+ printf("*** Signal %d", status);
+ }
- if (!WIFEXITED(reason) || status != 0) {
- if (errCheck) {
+ if (!WIFEXITED(reason) || status != 0) {
+ if (errCheck) {
#ifdef USE_META
- if (useMeta) {
- meta_job_error(NULL, gn, 0, status);
- }
+ if (useMeta) {
+ meta_job_error(NULL, gn, 0, status);
+ }
#endif
- gn->made = ERROR;
- if (opts.keepgoing) {
- /* Abort the current target, but let others continue. */
- printf(" (continuing)\n");
- } else {
- printf("\n");
- }
- if (deleteOnError)
- CompatDeleteTarget(gn);
- } else {
- /*
- * Continue executing commands for this target.
- * If we return 0, this will happen...
- */
- printf(" (ignored)\n");
- status = 0;
- }
- }
-
- free(cmdStart);
- compatChild = 0;
- if (compatSigno) {
- bmake_signal(compatSigno, SIG_DFL);
- kill(myPid, compatSigno);
- }
+ gn->made = ERROR;
+ if (opts.keepgoing) {
+ /*
+ * Abort the current target,
+ * but let others continue.
+ */
+ printf(" (continuing)\n");
+ } else {
+ printf("\n");
+ }
+ if (deleteOnError)
+ CompatDeleteTarget(gn);
+ } else {
+ /*
+ * Continue executing commands for this target.
+ * If we return 0, this will happen...
+ */
+ printf(" (ignored)\n");
+ status = 0;
+ }
+ }
- return status;
+ free(cmdStart);
+ compatChild = 0;
+ if (compatSigno) {
+ bmake_signal(compatSigno, SIG_DFL);
+ kill(myPid, compatSigno);
+ }
+
+ return status;
}
static void
RunCommands(GNode *gn)
{
- StringListNode *ln;
- for (ln = gn->commands->first; ln != NULL; ln = ln->next) {
- const char *cmd = ln->datum;
- if (Compat_RunCommand(cmd, gn) != 0)
- break;
- }
+ StringListNode *ln;
+
+ for (ln = gn->commands->first; ln != NULL; ln = ln->next) {
+ const char *cmd = ln->datum;
+ if (Compat_RunCommand(cmd, gn) != 0)
+ break;
+ }
}
static void
MakeNodes(GNodeList *gnodes, GNode *pgn)
{
- GNodeListNode *ln;
- for (ln = gnodes->first; ln != NULL; ln = ln->next) {
- GNode *cohort = ln->datum;
- Compat_Make(cohort, pgn);
- }
+ GNodeListNode *ln;
+
+ for (ln = gnodes->first; ln != NULL; ln = ln->next) {
+ GNode *cohort = ln->datum;
+ Compat_Make(cohort, pgn);
+ }
}
static Boolean
@@ -581,7 +587,7 @@ MakeOther(GNode *gn, GNode *pgn)
Var_Set(IMPSRC, target != NULL ? target : "", pgn);
}
- switch(gn->made) {
+ switch (gn->made) {
case BEINGMADE:
Error("Graph cycles through %s", gn->name);
gn->made = ERROR;
@@ -613,21 +619,24 @@ MakeOther(GNode *gn, GNode *pgn)
void
Compat_Make(GNode *gn, GNode *pgn)
{
- if (shellName == NULL) /* we came here from jobs */
- Shell_Init();
+ 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);
- }
+ 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:
- MakeNodes(gn->cohorts, pgn);
+ MakeNodes(gn->cohorts, pgn);
}
/* Initialize this module and start making.
@@ -638,79 +647,81 @@ cohorts:
void
Compat_Run(GNodeList *targs)
{
- GNode *gn = NULL; /* Current root target */
- int errors; /* Number of targets not remade due to errors */
+ GNode *gn = NULL; /* Current root target */
+ int errors; /* Number of targets not remade due to errors */
- if (!shellName)
- Shell_Init();
+ if (!shellName)
+ Shell_Init();
- if (bmake_signal(SIGINT, SIG_IGN) != SIG_IGN)
- bmake_signal(SIGINT, CompatInterrupt);
- if (bmake_signal(SIGTERM, SIG_IGN) != SIG_IGN)
- bmake_signal(SIGTERM, CompatInterrupt);
- if (bmake_signal(SIGHUP, SIG_IGN) != SIG_IGN)
- bmake_signal(SIGHUP, CompatInterrupt);
- if (bmake_signal(SIGQUIT, SIG_IGN) != SIG_IGN)
- bmake_signal(SIGQUIT, CompatInterrupt);
-
- /* Create the .END node now, to keep the (debug) output of the
- * counter.mk test the same as before 2020-09-23. This implementation
- * detail probably doesn't matter though. */
- (void)Targ_GetEndNode();
- /*
- * If the user has defined a .BEGIN target, execute the commands attached
- * to it.
- */
- if (!opts.queryFlag) {
- gn = Targ_FindNode(".BEGIN");
- if (gn != NULL) {
- Compat_Make(gn, gn);
- if (gn->made == ERROR) {
- PrintOnError(gn, "\nStop.");
- exit(1);
- }
+ if (bmake_signal(SIGINT, SIG_IGN) != SIG_IGN)
+ bmake_signal(SIGINT, CompatInterrupt);
+ if (bmake_signal(SIGTERM, SIG_IGN) != SIG_IGN)
+ bmake_signal(SIGTERM, CompatInterrupt);
+ if (bmake_signal(SIGHUP, SIG_IGN) != SIG_IGN)
+ bmake_signal(SIGHUP, CompatInterrupt);
+ if (bmake_signal(SIGQUIT, SIG_IGN) != SIG_IGN)
+ bmake_signal(SIGQUIT, CompatInterrupt);
+
+ /* Create the .END node now, to keep the (debug) output of the
+ * counter.mk test the same as before 2020-09-23. This implementation
+ * detail probably doesn't matter though. */
+ (void)Targ_GetEndNode();
+
+ /*
+ * If the user has defined a .BEGIN target, execute the commands
+ * attached to it.
+ */
+ if (!opts.queryFlag) {
+ gn = Targ_FindNode(".BEGIN");
+ if (gn != NULL) {
+ Compat_Make(gn, gn);
+ if (gn->made == ERROR) {
+ PrintOnError(gn, "\nStop.");
+ exit(1);
+ }
+ }
}
- }
- /*
- * Expand .USE nodes right now, because they can modify the structure
- * of the tree.
- */
- Make_ExpandUse(targs);
-
- /*
- * For each entry in the list of targets to create, call Compat_Make on
- * it to create the thing. Compat_Make will leave the 'made' field of gn
- * in one of several states:
- * UPTODATE gn was already up-to-date
- * MADE gn was recreated successfully
- * ERROR An error occurred while gn was being created
- * ABORTED gn was not remade because one of its inferiors
- * could not be made due to errors.
- */
- errors = 0;
- while (!Lst_IsEmpty(targs)) {
- gn = Lst_Dequeue(targs);
- Compat_Make(gn, gn);
-
- if (gn->made == UPTODATE) {
- printf("`%s' is up to date.\n", gn->name);
- } else if (gn->made == ABORTED) {
- printf("`%s' not remade because of errors.\n", gn->name);
- errors++;
- }
- }
-
- /*
- * If the user has defined a .END target, run its commands.
- */
- if (errors == 0) {
- GNode *endNode = Targ_GetEndNode();
- Compat_Make(endNode, endNode);
- /* XXX: Did you mean endNode->made instead of gn->made? */
- if (gn->made == ERROR) {
- PrintOnError(gn, "\nStop.");
- exit(1);
+ /*
+ * Expand .USE nodes right now, because they can modify the structure
+ * of the tree.
+ */
+ Make_ExpandUse(targs);
+
+ /*
+ * For each entry in the list of targets to create, call Compat_Make
+ * on it to create the thing. Compat_Make will leave the 'made' field
+ * of gn in one of several states:
+ * UPTODATE gn was already up-to-date
+ * MADE gn was recreated successfully
+ * ERROR An error occurred while gn was being created
+ * ABORTED gn was not remade because one of its inferiors
+ * could not be made due to errors.
+ */
+ errors = 0;
+ while (!Lst_IsEmpty(targs)) {
+ gn = Lst_Dequeue(targs);
+ Compat_Make(gn, gn);
+
+ if (gn->made == UPTODATE) {
+ printf("`%s' is up to date.\n", gn->name);
+ } else if (gn->made == ABORTED) {
+ printf("`%s' not remade because of errors.\n",
+ gn->name);
+ errors++;
+ }
+ }
+
+ /*
+ * If the user has defined a .END target, run its commands.
+ */
+ if (errors == 0) {
+ GNode *endNode = Targ_GetEndNode();
+ Compat_Make(endNode, endNode);
+ /* XXX: Did you mean endNode->made instead of gn->made? */
+ if (gn->made == ERROR) {
+ PrintOnError(gn, "\nStop.");
+ exit(1);
+ }
}
- }
}