Module Name: src Committed By: rillig Date: Fri Jan 5 23:22:06 UTC 2024
Modified Files: src/usr.bin/make: compat.c job.c main.c make.c parse.c str.c suff.c var.c Log Message: make: miscellaneous cleanups To generate a diff of this commit: cvs rdiff -u -r1.251 -r1.252 src/usr.bin/make/compat.c cvs rdiff -u -r1.462 -r1.463 src/usr.bin/make/job.c cvs rdiff -u -r1.607 -r1.608 src/usr.bin/make/main.c cvs rdiff -u -r1.261 -r1.262 src/usr.bin/make/make.c cvs rdiff -u -r1.714 -r1.715 src/usr.bin/make/parse.c cvs rdiff -u -r1.101 -r1.102 src/usr.bin/make/str.c cvs rdiff -u -r1.376 -r1.377 src/usr.bin/make/suff.c cvs rdiff -u -r1.1092 -r1.1093 src/usr.bin/make/var.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.251 src/usr.bin/make/compat.c:1.252 --- src/usr.bin/make/compat.c:1.251 Tue Dec 26 20:09:42 2023 +++ src/usr.bin/make/compat.c Fri Jan 5 23:22:06 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: compat.c,v 1.251 2023/12/26 20:09:42 sjg Exp $ */ +/* $NetBSD: compat.c,v 1.252 2024/01/05 23:22:06 rillig 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.251 2023/12/26 20:09:42 sjg Exp $"); +MAKE_RCSID("$NetBSD: compat.c,v 1.252 2024/01/05 23:22:06 rillig Exp $"); static GNode *curTarg = NULL; static pid_t compatChild; @@ -107,10 +107,8 @@ CompatDeleteTarget(GNode *gn) if (gn != NULL && !GNode_IsPrecious(gn) && (gn->type & OP_PHONY) == 0) { const char *file = GNode_VarTarget(gn); - - if (!opts.noExecute && unlink_file(file) == 0) { + if (!opts.noExecute && unlink_file(file) == 0) Error("*** %s removed", file); - } } } @@ -132,9 +130,8 @@ CompatInterrupt(int signo) /* Run .INTERRUPT only if hit with interrupt signal. */ if (signo == SIGINT) { GNode *gn = Targ_FindNode(".INTERRUPT"); - if (gn != NULL) { + if (gn != NULL) Compat_Make(gn, gn); - } } } @@ -360,9 +357,8 @@ Compat_RunCommand(const char *cmdp, GNod while ((retstat = wait(&reason)) != cpid) { if (retstat > 0) JobReapChild(retstat, reason, false); /* not ours? */ - if (retstat == -1 && errno != EINTR) { + if (retstat == -1 && errno != EINTR) break; - } } if (retstat < 0) Index: src/usr.bin/make/job.c diff -u src/usr.bin/make/job.c:1.462 src/usr.bin/make/job.c:1.463 --- src/usr.bin/make/job.c:1.462 Fri Dec 29 12:59:43 2023 +++ src/usr.bin/make/job.c Fri Jan 5 23:22:06 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: job.c,v 1.462 2023/12/29 12:59:43 rillig Exp $ */ +/* $NetBSD: job.c,v 1.463 2024/01/05 23:22:06 rillig 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.462 2023/12/29 12:59:43 rillig Exp $"); +MAKE_RCSID("$NetBSD: job.c,v 1.463 2024/01/05 23:22:06 rillig Exp $"); /* * A shell defines how the commands are run. All commands for a target are @@ -928,12 +928,10 @@ JobWriteCommand(Job *job, ShellWriter *w escCmd = shell->hasErrCtl ? NULL : EscapeShellDblQuot(xcmd); if (!cmdFlags.echo) { - if (job->echo && run && shell->hasEchoCtl) { + if (job->echo && run && shell->hasEchoCtl) ShellWriter_EchoOff(wr); - } else { - if (shell->hasErrCtl) - cmdFlags.echo = true; - } + else if (shell->hasErrCtl) + cmdFlags.echo = true; } if (cmdFlags.ignerr) { @@ -2182,11 +2180,10 @@ Shell_GetNewline(void) void Job_SetPrefix(void) { - if (targPrefix != NULL) { + if (targPrefix != NULL) free(targPrefix); - } else if (!Var_Exists(SCOPE_GLOBAL, ".MAKE.JOB.PREFIX")) { + else if (!Var_Exists(SCOPE_GLOBAL, ".MAKE.JOB.PREFIX")) Global_Set(".MAKE.JOB.PREFIX", "---"); - } targPrefix = Var_Subst("${.MAKE.JOB.PREFIX}", SCOPE_GLOBAL, VARE_WANTRES); @@ -2484,18 +2481,9 @@ Job_ParseShell(char *line) * its word and copy it to a new location. In either case, * we need to record the path the user gave for the shell. */ + char *name = path + (str_basename(path) - path); shellPath = path; - path = strrchr(path, '/'); - if (path == NULL) { - path = UNCONST(shellPath); - } else { - path++; - } - if (newShell.name != NULL) { - shellName = newShell.name; - } else { - shellName = path; - } + shellName = newShell.name != NULL ? newShell.name : name; if (!fullSpec) { if ((sh = FindShellByName(shellName)) == NULL) { Parse_Error(PARSE_WARNING, @@ -2592,11 +2580,10 @@ Job_Finish(void) GNode *endNode = Targ_GetEndNode(); if (!Lst_IsEmpty(&endNode->commands) || !Lst_IsEmpty(&endNode->children)) { - if (job_errors != 0) { + if (job_errors != 0) Error("Errors reported so .END ignored"); - } else { + else JobRun(endNode); - } } return job_errors; } @@ -2867,9 +2854,8 @@ Job_TokenWithdraw(void) if (count == 0) Fatal("eof on job pipe!"); if (count < 0 && jobTokensRunning != 0) { - if (errno != EAGAIN) { + if (errno != EAGAIN) Fatal("job pipe read: %s", strerror(errno)); - } DEBUG1(JOB, "(%d) blocked for token\n", getpid()); wantToken = 1; return false; Index: src/usr.bin/make/main.c diff -u src/usr.bin/make/main.c:1.607 src/usr.bin/make/main.c:1.608 --- src/usr.bin/make/main.c:1.607 Fri Jan 5 22:20:07 2024 +++ src/usr.bin/make/main.c Fri Jan 5 23:22:06 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: main.c,v 1.607 2024/01/05 22:20:07 sjg Exp $ */ +/* $NetBSD: main.c,v 1.608 2024/01/05 23:22:06 rillig 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.607 2024/01/05 22:20:07 sjg Exp $"); +MAKE_RCSID("$NetBSD: main.c,v 1.608 2024/01/05 23:22:06 rillig Exp $"); #if defined(MAKE_NATIVE) __COPYRIGHT("@(#) Copyright (c) 1988, 1989, 1990, 1993 " "The Regents of the University of California. " @@ -222,8 +222,7 @@ MainParseArgDebugFile(const char *arg) opts.debug_file = fopen(fname, mode); if (opts.debug_file == NULL) { - fprintf(stderr, "Cannot open debug file \"%s\"\n", - fname); + fprintf(stderr, "Cannot open debug file \"%s\"\n", fname); exit(2); } free(fname); @@ -408,9 +407,9 @@ MainParseArgJobs(const char *arg) if (*p != '\0') { double d; - if (*p == 'C') { + if (*p == 'C') d = (opts.maxJobs > 0) ? opts.maxJobs : 1; - } else if (*p == '.') { + else if (*p == '.') { d = strtod(arg, &end); p = end; } else Index: src/usr.bin/make/make.c diff -u src/usr.bin/make/make.c:1.261 src/usr.bin/make/make.c:1.262 --- src/usr.bin/make/make.c:1.261 Fri Dec 29 18:53:24 2023 +++ src/usr.bin/make/make.c Fri Jan 5 23:22:06 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: make.c,v 1.261 2023/12/29 18:53:24 rillig Exp $ */ +/* $NetBSD: make.c,v 1.262 2024/01/05 23:22:06 rillig Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -104,7 +104,7 @@ #include "job.h" /* "@(#)make.c 8.1 (Berkeley) 6/6/93" */ -MAKE_RCSID("$NetBSD: make.c,v 1.261 2023/12/29 18:53:24 rillig Exp $"); +MAKE_RCSID("$NetBSD: make.c,v 1.262 2024/01/05 23:22:06 rillig Exp $"); /* Sequence # to detect recursion. */ static unsigned int checked_seqno = 1; @@ -330,13 +330,12 @@ GNode_IsOODate(GNode *gn) * out-of-date. */ if (DEBUG(MAKE)) { - if (gn->type & OP_FORCE) { + if (gn->type & OP_FORCE) debug_printf("! operator..."); - } else if (gn->type & OP_PHONY) { + else if (gn->type & OP_PHONY) debug_printf(".PHONY node..."); - } else { + else debug_printf(".EXEC node..."); - } } oodate = true; } else if (IsOODateRegular(gn)) { @@ -440,11 +439,10 @@ Make_HandleUse(GNode *cgn, GNode *pgn) * We don't need to do this for commands. * They get expanded properly when we execute. */ - if (gn->uname == NULL) { + if (gn->uname == NULL) gn->uname = gn->name; - } else { + else free(gn->name); - } gn->name = Var_Subst(gn->uname, pgn, VARE_WANTRES); /* TODO: handle errors */ if (gn->uname != NULL && strcmp(gn->name, gn->uname) != 0) { @@ -546,9 +544,8 @@ Make_Recheck(GNode *gn) * depend on FRC to be made, so we have to check for gn->children * being empty as well. */ - if (!Lst_IsEmpty(gn->commands) || Lst_IsEmpty(gn->children)) { + if (!Lst_IsEmpty(gn->commands) || Lst_IsEmpty(gn->children)) gn->mtime = now; - } #else /* * This is what Make does and it's actually a good thing, as it @@ -689,9 +686,8 @@ Make_Update(GNode *cgn) * now -- some rules won't actually update the file. If the file * still doesn't exist, make its mtime now. */ - if (cgn->made != UPTODATE) { + if (cgn->made != UPTODATE) mtime = Make_Recheck(cgn); - } /* * If this is a `::' node, we must consult its first instance Index: src/usr.bin/make/parse.c diff -u src/usr.bin/make/parse.c:1.714 src/usr.bin/make/parse.c:1.715 --- src/usr.bin/make/parse.c:1.714 Wed Jan 3 20:24:16 2024 +++ src/usr.bin/make/parse.c Fri Jan 5 23:22:06 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: parse.c,v 1.714 2024/01/03 20:24:16 sjg Exp $ */ +/* $NetBSD: parse.c,v 1.715 2024/01/05 23:22:06 rillig Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -105,7 +105,7 @@ #include "pathnames.h" /* "@(#)parse.c 8.3 (Berkeley) 3/19/94" */ -MAKE_RCSID("$NetBSD: parse.c,v 1.714 2024/01/03 20:24:16 sjg Exp $"); +MAKE_RCSID("$NetBSD: parse.c,v 1.715 2024/01/05 23:22:06 rillig Exp $"); /* Detects a multiple-inclusion guard in a makefile. */ typedef enum { @@ -336,7 +336,7 @@ GetInclude(size_t i) return Vector_Get(&includes, i); } -/* The makefile that is currently being read. */ +/* The makefile or the body of a .for loop that is currently being read. */ static IncludedFile * CurFile(void) { Index: src/usr.bin/make/str.c diff -u src/usr.bin/make/str.c:1.101 src/usr.bin/make/str.c:1.102 --- src/usr.bin/make/str.c:1.101 Sun Dec 17 22:46:44 2023 +++ src/usr.bin/make/str.c Fri Jan 5 23:22:06 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: str.c,v 1.101 2023/12/17 22:46:44 rillig Exp $ */ +/* $NetBSD: str.c,v 1.102 2024/01/05 23:22:06 rillig Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -71,7 +71,7 @@ #include "make.h" /* "@(#)str.c 5.8 (Berkeley) 6/1/90" */ -MAKE_RCSID("$NetBSD: str.c,v 1.101 2023/12/17 22:46:44 rillig Exp $"); +MAKE_RCSID("$NetBSD: str.c,v 1.102 2024/01/05 23:22:06 rillig Exp $"); static HashTable interned_strings; @@ -107,6 +107,10 @@ str_concat3(const char *s1, const char * * Fracture a string into an array of words (as delineated by tabs or spaces) * taking quotation marks into account. * + * A string that is empty or only contains whitespace nevertheless results in + * a single word. This is unexpected in many places, and the caller needs to + * correct for this edge case. + * * If expand is true, quotes are removed and escape sequences such as \r, \t, * etc... are expanded. In this case, return NULL on parse errors. * Index: src/usr.bin/make/suff.c diff -u src/usr.bin/make/suff.c:1.376 src/usr.bin/make/suff.c:1.377 --- src/usr.bin/make/suff.c:1.376 Sat Dec 30 15:00:56 2023 +++ src/usr.bin/make/suff.c Fri Jan 5 23:22:06 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: suff.c,v 1.376 2023/12/30 15:00:56 rillig Exp $ */ +/* $NetBSD: suff.c,v 1.377 2024/01/05 23:22:06 rillig Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -115,7 +115,7 @@ #include "dir.h" /* "@(#)suff.c 8.4 (Berkeley) 3/21/94" */ -MAKE_RCSID("$NetBSD: suff.c,v 1.376 2023/12/30 15:00:56 rillig Exp $"); +MAKE_RCSID("$NetBSD: suff.c,v 1.377 2024/01/05 23:22:06 rillig Exp $"); typedef List SuffixList; typedef ListNode SuffixListNode; @@ -1281,8 +1281,7 @@ ExpandChildrenRegular(char *p, GNode *pg /* TODO: handle errors */ if (junk.str == var_Error) { Parse_Error(PARSE_FATAL, - "Malformed expression at \"%s\"", - p); + "Malformed expression at \"%s\"", p); p++; } else { p += nested_p - p; @@ -1917,8 +1916,7 @@ FindDepsRegular(GNode *gn, CandidateSear if (targ->node == NULL) targ->node = Targ_GetNode(targ->file); - ApplyTransform(targ->node, src->node, - targ->suff, src->suff); + ApplyTransform(targ->node, src->node, targ->suff, src->suff); if (targ->node != gn) { /* Index: src/usr.bin/make/var.c diff -u src/usr.bin/make/var.c:1.1092 src/usr.bin/make/var.c:1.1093 --- src/usr.bin/make/var.c:1.1092 Fri Jan 5 21:56:55 2024 +++ src/usr.bin/make/var.c Fri Jan 5 23:22:06 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: var.c,v 1.1092 2024/01/05 21:56:55 rillig Exp $ */ +/* $NetBSD: var.c,v 1.1093 2024/01/05 23:22:06 rillig Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -139,7 +139,7 @@ #include "metachar.h" /* "@(#)var.c 8.3 (Berkeley) 3/19/94" */ -MAKE_RCSID("$NetBSD: var.c,v 1.1092 2024/01/05 21:56:55 rillig Exp $"); +MAKE_RCSID("$NetBSD: var.c,v 1.1093 2024/01/05 23:22:06 rillig Exp $"); /* * Variables are defined using one of the VAR=value assignments. Their @@ -1596,7 +1596,6 @@ ModifyWord_Loop(Substring word, SepBuf * s = Var_Subst(args->body, args->scope, args->emode); /* TODO: handle errors */ - assert(word.end[0] == '\0'); /* assume null-terminated word */ DEBUG2(VAR, "ModifyWord_Loop: expand \"%s\" to \"%s\"\n", args->body, s); @@ -2001,7 +2000,7 @@ ModChain_ShouldEval(const ModChain *ch) typedef enum ApplyModifierResult { /* Continue parsing */ AMR_OK, - /* Not a match, try other modifiers as well. */ + /* Not a match, try the ':from=to' modifier as well. */ AMR_UNKNOWN, /* Error out with "Bad modifier" message. */ AMR_BAD, @@ -4287,11 +4286,11 @@ ParseVarnameLong( ParseVarname(&p, startc, endc, scope, emode, &varname); name = LazyBuf_Get(&varname); - if (*p == ':') { + if (*p == ':') haveModifier = true; - } else if (*p == endc) { + else if (*p == endc) haveModifier = false; - } else { + else { Parse_Error(PARSE_FATAL, "Unclosed variable \"%.*s\"", (int)Substring_Length(name), name.start); LazyBuf_Done(&varname); @@ -4399,10 +4398,9 @@ Var_Parse_FastLane(const char **pp, VarE if (*p != '}') return false; - if (emode == VARE_PARSE_ONLY) - *out_value = FStr_InitRefer(""); - else - *out_value = FStr_InitOwn(bmake_strsedup(*pp + 4, p)); + *out_value = emode == VARE_PARSE_ONLY + ? FStr_InitRefer("") + : FStr_InitOwn(bmake_strsedup(*pp + 4, p)); *pp = p + 1; return true; }