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);
+		}
 	}
-    }
 }

Reply via email to