diff options
author | Paul Smith <psmith@gnu.org> | 2022-12-17 14:01:02 -0500 |
---|---|---|
committer | Paul Smith <psmith@gnu.org> | 2022-12-18 14:44:17 -0500 |
commit | c0023150f176a91526d88b45eb02334add9059e1 (patch) | |
tree | 41a6467e579c52cd7db9a8f6e25ee9ee9157d43a | |
parent | a89eef87e6782179a7ab10824fe0cf3cbe48d3ee (diff) | |
download | make-git-c0023150f176a91526d88b45eb02334add9059e1.tar.gz |
* src/job.c (new_job): [SV 63510] Trace phony prerequisite rebuilds
-rw-r--r-- | src/job.c | 51 |
1 files changed, 45 insertions, 6 deletions
@@ -1893,7 +1893,6 @@ new_job (struct file *file) Use message here so that changes to working directories are logged. */ if (ISDB (DB_WHY)) { - char *newer = allocated_variable_expand_for_file ("$?", c->file); const char *nm; if (! cmds->fileinfo.filenm) @@ -1905,11 +1904,51 @@ new_job (struct file *file) nm = n; } - OSSS (message, 0, - _("%s: update target '%s' due to: %s"), nm, c->file->name, - newer[0] == '\0' ? _("target does not exist") : newer); - - free (newer); + if (c->file->phony) + OSS (message, 0, _("%s: update target '%s' due to: target is .PHONY"), + nm, c->file->name); + else if (c->file->last_mtime == NONEXISTENT_MTIME) + OSS (message, 0, + _("%s: update target '%s' due to: target does not exist"), + nm, c->file->name); + else + { + char *newer = allocated_variable_expand_for_file ("$?", c->file); + if (newer[0] != '\0') + { + OSSS (message, 0, _("%s: update target '%s' due to: %s"), + nm, c->file->name, newer); + free (newer); + } + else + { + /* One or more files didn't exist, and didn't get created. */ + size_t len = 0; + struct dep *d; + + for (d = c->file->deps; d != NULL; d = d->next) + if (d->file->last_mtime == NONEXISTENT_MTIME) + len += strlen (d->file->name) + 1; + + if (!len) + OSS (message, 0, + _("%s: update target '%s' due to: unknown reasons"), + nm, c->file->name); + else + { + char *cp = newer = alloca (len); + for (d = c->file->deps; d != NULL; d = d->next) + if (d->file->last_mtime == NONEXISTENT_MTIME) + { + if (cp > newer) + *(cp++) = ' '; + cp = stpcpy (cp, d->file->name); + } + OSSS (message, 0, _("%s: update target '%s' due to: %s"), + nm, c->file->name, newer); + } + } + } } /* The job is now primed. Start it running. |