Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/usr.bin/make make(1): group the command line options and arg...
details: https://anonhg.NetBSD.org/src/rev/13960ad6cd10
branches: trunk
changeset: 945344:13960ad6cd10
user: rillig <rillig%NetBSD.org@localhost>
date: Mon Oct 26 21:34:10 2020 +0000
description:
make(1): group the command line options and arguments
By having a single struct that holds all command line options and
arguments, it is easy to see in the code when such a command line
argument is modified. It also cleans up the namespace since the command
line options don't follow a common naming style. Having them in a
struct also means that there is a single place for putting the
documentation, not two as before.
The struct also suggests to extract the initialization code out of main,
which is still too large, having more than 400 lines of code and
covering far too many topics.
diffstat:
usr.bin/make/compat.c | 16 +-
usr.bin/make/cond.c | 6 +-
usr.bin/make/job.c | 34 +++---
usr.bin/make/job.h | 3 +-
usr.bin/make/main.c | 238 ++++++++++++++++++++++---------------------------
usr.bin/make/make.c | 22 ++--
usr.bin/make/make.h | 116 ++++++++++++++++-------
usr.bin/make/parse.c | 30 +++--
usr.bin/make/targ.c | 10 +-
usr.bin/make/var.c | 10 +-
10 files changed, 254 insertions(+), 231 deletions(-)
diffs (truncated from 1296 to 300 lines):
diff -r 34df0ad4097d -r 13960ad6cd10 usr.bin/make/compat.c
--- a/usr.bin/make/compat.c Mon Oct 26 20:18:33 2020 +0000
+++ b/usr.bin/make/compat.c Mon Oct 26 21:34:10 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: compat.c,v 1.168 2020/10/24 04:40:45 rillig Exp $ */
+/* $NetBSD: compat.c,v 1.169 2020/10/26 21:34: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.168 2020/10/24 04:40:45 rillig Exp $");
+MAKE_RCSID("$NetBSD: compat.c,v 1.169 2020/10/26 21:34:10 rillig Exp $");
static GNode *curTarg = NULL;
static pid_t compatChild;
@@ -113,7 +113,7 @@
char *file_freeIt;
const char *file = Var_Value(TARGET, gn, &file_freeIt);
- if (!noExecute && eunlink(file) != -1) {
+ if (!opts.noExecute && eunlink(file) != -1) {
Error("*** %s removed", file);
}
@@ -420,7 +420,7 @@
}
#endif
gn->made = ERROR;
- if (keepgoing) {
+ if (opts.keepgoing) {
/* Abort the current target, but let others continue. */
printf(" (continuing)\n");
} else {
@@ -526,7 +526,7 @@
* If the user is just seeing if something is out-of-date, exit now
* to tell him/her "yes".
*/
- if (queryFlag) {
+ if (opts.queryFlag) {
exit(1);
}
@@ -551,7 +551,7 @@
* Our commands are ok, but we still have to worry about the -t
* flag...
*/
- if (!touchFlag || (gn->type & OP_MAKE)) {
+ if (!opts.touchFlag || (gn->type & OP_MAKE)) {
curTarg = gn;
#ifdef USE_META
if (useMeta && !NoExecute(gn)) {
@@ -586,7 +586,7 @@
pgn->flags |= CHILDMADE;
Make_TimeStamp(pgn, gn);
}
- } else if (keepgoing) {
+ } else if (opts.keepgoing) {
pgn->flags &= ~(unsigned)REMAKE;
} else {
PrintOnError(gn, "\nStop.");
@@ -659,7 +659,7 @@
* If the user has defined a .BEGIN target, execute the commands attached
* to it.
*/
- if (!queryFlag) {
+ if (!opts.queryFlag) {
gn = Targ_FindNode(".BEGIN");
if (gn != NULL) {
Compat_Make(gn, gn);
diff -r 34df0ad4097d -r 13960ad6cd10 usr.bin/make/cond.c
--- a/usr.bin/make/cond.c Mon Oct 26 20:18:33 2020 +0000
+++ b/usr.bin/make/cond.c Mon Oct 26 21:34:10 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: cond.c,v 1.168 2020/10/24 04:51:19 rillig Exp $ */
+/* $NetBSD: cond.c,v 1.169 2020/10/26 21:34:10 rillig Exp $ */
/*
* Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -93,7 +93,7 @@
#include "dir.h"
/* "@(#)cond.c 8.2 (Berkeley) 1/2/94" */
-MAKE_RCSID("$NetBSD: cond.c,v 1.168 2020/10/24 04:51:19 rillig Exp $");
+MAKE_RCSID("$NetBSD: cond.c,v 1.169 2020/10/26 21:34:10 rillig Exp $");
/*
* The parsing of conditional expressions is based on this grammar:
@@ -294,7 +294,7 @@
{
StringListNode *ln;
- for (ln = create->first; ln != NULL; ln = ln->next)
+ for (ln = opts.create->first; ln != NULL; ln = ln->next)
if (Str_Match(ln->datum, arg))
return TRUE;
return FALSE;
diff -r 34df0ad4097d -r 13960ad6cd10 usr.bin/make/job.c
--- a/usr.bin/make/job.c Mon Oct 26 20:18:33 2020 +0000
+++ b/usr.bin/make/job.c Mon Oct 26 21:34:10 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: job.c,v 1.289 2020/10/26 20:11:02 rillig Exp $ */
+/* $NetBSD: job.c,v 1.290 2020/10/26 21:34:10 rillig Exp $ */
/*
* Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -143,7 +143,7 @@
#include "trace.h"
/* "@(#)job.c 8.2 (Berkeley) 3/19/94" */
-MAKE_RCSID("$NetBSD: job.c,v 1.289 2020/10/26 20:11:02 rillig Exp $");
+MAKE_RCSID("$NetBSD: job.c,v 1.290 2020/10/26 21:34:10 rillig Exp $");
/* A shell defines how the commands are run. All commands for a target are
* written into a single file, which is then given to the shell to execute
@@ -402,7 +402,7 @@
#define TARG_FMT "%s %s ---\n" /* Default format */
#define MESSAGE(fp, gn) \
- if (maxJobs != 1 && targPrefix && *targPrefix) \
+ if (opts.maxJobs != 1 && targPrefix && *targPrefix) \
(void)fprintf(fp, TARG_FMT, targPrefix, gn->name)
static sigset_t caught_signals; /* Set of signals we handle */
@@ -449,7 +449,7 @@
return;
if (Targ_Precious(gn))
return;
- if (noExecute)
+ if (opts.noExecute)
return;
file = GNode_Path(gn);
@@ -1083,7 +1083,7 @@
/*
* Set aborting if any error.
*/
- if (errors && !keepgoing && (aborting != ABORT_INTERRUPT)) {
+ if (errors && !opts.keepgoing && (aborting != ABORT_INTERRUPT)) {
/*
* If we found any errors in this batch of children and the -k flag
* wasn't given, we set the aborting flag so no more jobs get
@@ -1235,7 +1235,7 @@
return TRUE;
}
- if (keepgoing) {
+ if (opts.keepgoing) {
(void)fprintf(stdout, "%s: don't know how to make %s (%s)\n",
progname, gn->name, "continuing");
(void)fflush(stdout);
@@ -1524,8 +1524,8 @@
* need to reopen it to feed it to the shell. If the -n flag *was* given,
* we just set the file to be stdout. Cute, huh?
*/
- if (((gn->type & OP_MAKE) && !(noRecursiveExecute)) ||
- (!noExecute && !touchFlag)) {
+ if (((gn->type & OP_MAKE) && !opts.noRecursiveExecute) ||
+ (!opts.noExecute && !opts.touchFlag)) {
/*
* tfile is the name of a file into which all shell commands are
* put. It is removed before the child shell is executed, unless
@@ -1824,7 +1824,7 @@
* our own free will.
*/
if (*cp != '\0') {
- if (!beSilent && job->node != lastNode) {
+ if (!opts.beSilent && job->node != lastNode) {
MESSAGE(stdout, job->node);
lastNode = job->node;
}
@@ -2117,9 +2117,9 @@
{
Job_SetPrefix();
/* Allocate space for all the job info */
- job_table = bmake_malloc((size_t)maxJobs * sizeof *job_table);
- memset(job_table, 0, (size_t)maxJobs * sizeof *job_table);
- job_table_end = job_table + maxJobs;
+ job_table = bmake_malloc((size_t)opts.maxJobs * sizeof *job_table);
+ memset(job_table, 0, (size_t)opts.maxJobs * sizeof *job_table);
+ job_table_end = job_table + opts.maxJobs;
wantToken = 0;
aborting = 0;
@@ -2150,9 +2150,9 @@
/* Preallocate enough for the maximum number of jobs. */
fds = bmake_malloc(sizeof(*fds) *
- (npseudojobs + (size_t)maxJobs) * nfds_per_job());
+ (npseudojobs + (size_t)opts.maxJobs) * nfds_per_job());
jobfds = bmake_malloc(sizeof(*jobfds) *
- (npseudojobs + (size_t)maxJobs) * nfds_per_job());
+ (npseudojobs + (size_t)opts.maxJobs) * nfds_per_job());
/* These are permanent entries and take slots 0 and 1 */
watchfd(&tokenWaitJob);
@@ -2474,10 +2474,10 @@
JobSigUnlock(&mask);
- if (runINTERRUPT && !touchFlag) {
+ if (runINTERRUPT && !opts.touchFlag) {
interrupt = Targ_FindNode(".INTERRUPT");
if (interrupt != NULL) {
- ignoreErrors = FALSE;
+ opts.ignoreErrors = FALSE;
JobRun(interrupt);
}
}
@@ -2730,7 +2730,7 @@
DEBUG3(JOB, "Job_TokenWithdraw(%d): aborting %d, running %d\n",
getpid(), aborting, jobTokensRunning);
- if (aborting || (jobTokensRunning >= maxJobs))
+ if (aborting || (jobTokensRunning >= opts.maxJobs))
return FALSE;
count = read(tokenWaitJob.inPipe, &tok, 1);
diff -r 34df0ad4097d -r 13960ad6cd10 usr.bin/make/job.h
--- a/usr.bin/make/job.h Mon Oct 26 20:18:33 2020 +0000
+++ b/usr.bin/make/job.h Mon Oct 26 21:34:10 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: job.h,v 1.57 2020/10/23 07:14:32 rillig Exp $ */
+/* $NetBSD: job.h,v 1.58 2020/10/26 21:34:10 rillig Exp $ */
/*
* Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -192,7 +192,6 @@
extern char *shellErrFlag;
extern int jobTokensRunning; /* tokens currently "out" */
-extern int maxJobs; /* Max jobs we can run */
void Shell_Init(void);
const char *Shell_GetNewline(void);
diff -r 34df0ad4097d -r 13960ad6cd10 usr.bin/make/main.c
--- a/usr.bin/make/main.c Mon Oct 26 20:18:33 2020 +0000
+++ b/usr.bin/make/main.c Mon Oct 26 21:34:10 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: main.c,v 1.390 2020/10/25 19:19:07 rillig Exp $ */
+/* $NetBSD: main.c,v 1.391 2020/10/26 21:34:10 rillig Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -118,7 +118,7 @@
#include "trace.h"
/* "@(#)main.c 8.3 (Berkeley) 3/19/94" */
-MAKE_RCSID("$NetBSD: main.c,v 1.390 2020/10/25 19:19:07 rillig Exp $");
+MAKE_RCSID("$NetBSD: main.c,v 1.391 2020/10/26 21:34:10 rillig Exp $");
#if defined(MAKE_NATIVE) && !defined(lint)
__COPYRIGHT("@(#) Copyright (c) 1988, 1989, 1990, 1993 "
"The Regents of the University of California. "
@@ -129,38 +129,18 @@
#define DEFMAXLOCAL DEFMAXJOBS
#endif
-StringList * create; /* Targets to be made */
+CmdOpts opts;
time_t now; /* Time at start of make */
GNode *DEFAULT; /* .DEFAULT node */
Boolean allPrecious; /* .PRECIOUS given on line by itself */
Boolean deleteOnError; /* .DELETE_ON_ERROR: set */
-static Boolean noBuiltins; /* -r flag */
-static StringList * makefiles; /* ordered list of makefiles to read */
-static int printVars; /* -[vV] argument */
-#define COMPAT_VARS 1
-#define EXPAND_VARS 2
-static StringList * variables; /* list of variables to print
- * (for -v and -V) */
-int maxJobs; /* -j argument */
static int maxJobTokens; /* -j argument */
-Boolean compatMake; /* -B argument */
-DebugFlags debug; /* -d argument */
Boolean debugVflag; /* -dV */
-Boolean noExecute; /* -n flag */
-Boolean noRecursiveExecute; /* -N flag */
-Boolean keepgoing; /* -k flag */
-Boolean queryFlag; /* -q flag */
-Boolean touchFlag; /* -t flag */
-Boolean enterFlag; /* -w flag */
Boolean enterFlagObj; /* -w and objdir != srcdir */
-Boolean ignoreErrors; /* -i flag */
-Boolean beSilent; /* -s flag */
+
Boolean oldVars; /* variable substitution style */
-Boolean checkEnvFirst; /* -e flag */
-Boolean parseWarnFatal; /* -W flag */
static int jp_0 = -1, jp_1 = -1; /* ends of parent job pipe */
-Boolean varNoExportEnv; /* -X flag */
Boolean doing_depend; /* Set while reading .depend */
static Boolean jobsRunning; /* TRUE if the jobs might be running */
static const char * tracefile;
@@ -176,8 +156,6 @@
pid_t myPid;
int makelevel;
Home |
Main Index |
Thread Index |
Old Index