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: extract commands-ok check from JobWriteSh...



details:   https://anonhg.NetBSD.org/src/rev/d64c6e8a5526
branches:  trunk
changeset: 379722:d64c6e8a5526
user:      rillig <rillig%NetBSD.org@localhost>
date:      Wed Jun 16 03:56:59 2021 +0000

description:
make: extract commands-ok check from JobWriteShellCommands

This piece of code did not match the function name and thus could not
reasonably be expected in that function.

In job.c 1.399 from 2021-01-29 I missed exactly this little detail when
I added code to skip the apparently unnecessary creation of empty shell
files.  The code I added only handled the happy case, not the case where
the target could not be made.

That code path then differed, leading to a much more verbose error
message than before.

before:
don't know how to make ../missing/no-such.o. Stop

after:
don't know how to make ../missing/no-such.o. Stop
...
`../missing/no-such.o' was not built (made BEINGMADE, ...)!
`muck' was not built (made DEFERRED, type OP_DEPENDS|...)!
    `muck' has .ORDER dependency against build-all (made DEFERRED, ...)

Thanks to sjg for finding and reproducing this unintended change of
behavior.

diffstat:

 usr.bin/make/job.c |  26 +++++++++++++-------------
 1 files changed, 13 insertions(+), 13 deletions(-)

diffs (61 lines):

diff -r 273b625d171a -r d64c6e8a5526 usr.bin/make/job.c
--- a/usr.bin/make/job.c        Wed Jun 16 03:15:47 2021 +0000
+++ b/usr.bin/make/job.c        Wed Jun 16 03:56:59 2021 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: job.c,v 1.433 2021/06/16 03:15:47 rillig Exp $ */
+/*     $NetBSD: job.c,v 1.434 2021/06/16 03:56:59 rillig Exp $ */
 
 /*
  * Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -142,7 +142,7 @@
 #include "trace.h"
 
 /*     "@(#)job.c      8.2 (Berkeley) 3/19/94" */
-MAKE_RCSID("$NetBSD: job.c,v 1.433 2021/06/16 03:15:47 rillig Exp $");
+MAKE_RCSID("$NetBSD: job.c,v 1.434 2021/06/16 03:56:59 rillig Exp $");
 
 /*
  * A shell defines how the commands are run.  All commands for a target are
@@ -1585,7 +1585,7 @@ JobMakeArgv(Job *job, char **argv)
 }
 
 static void
-JobWriteShellCommands(Job *job, GNode *gn, bool cmdsOK, bool *out_run)
+JobWriteShellCommands(Job *job, GNode *gn, bool *out_run)
 {
        /*
         * tfile is the name of a file into which all shell commands
@@ -1595,15 +1595,6 @@ JobWriteShellCommands(Job *job, GNode *g
        char tfile[MAXPATHLEN];
        int tfd;                /* File descriptor to the temp file */
 
-       /*
-        * We're serious here, but if the commands were bogus, we're
-        * also dead...
-        */
-       if (!cmdsOK) {
-               PrintOnError(gn, NULL); /* provide some clue */
-               DieHorribly();
-       }
-
        tfd = Job_TempFile(TMPPAT, tfile, sizeof tfile);
 
        job->cmdFILE = fdopen(tfd, "w+");
@@ -1681,7 +1672,16 @@ JobStart(GNode *gn, bool special)
                 * virtual targets.
                 */
 
-               JobWriteShellCommands(job, gn, cmdsOK, &run);
+               /*
+                * We're serious here, but if the commands were bogus, we're
+                * also dead...
+                */
+               if (!cmdsOK) {
+                       PrintOnError(gn, NULL); /* provide some clue */
+                       DieHorribly();
+               }
+
+               JobWriteShellCommands(job, gn, &run);
                (void)fflush(job->cmdFILE);
        } else if (!GNode_ShouldExecute(gn)) {
                /*



Home | Main Index | Thread Index | Old Index