| diff -u make-3.82-orig/remake.c make-3.82/remake.c |
| --- make-3.82-orig/remake.c 2010-07-13 03:20:42.000000000 +0200 |
| +++ make-3.82/remake.c 2012-03-21 12:47:52.000000000 +0100 |
| @@ -301,7 +301,7 @@ |
| /* Check for the case where a target has been tried and failed but |
| the diagnostics hasn't been issued. If we need the diagnostics |
| then we will have to continue. */ |
| - if (!(f->updated && f->update_status > 0 && !f->dontcare && f->no_diag)) |
| + if (!(f->updated && f->update_status > 0 && !f->dontcare && f->no_diag) && f->command_state!=cs_not_started ) |
| { |
| DBF (DB_VERBOSE, _("Pruning file `%s'.\n")); |
| return f->command_state == cs_finished ? f->update_status : 0; |
| @@ -614,6 +614,12 @@ |
| d->file->dontcare = file->dontcare; |
| } |
| |
| + /* We may have already encountered this file earlier in the same |
| + * pass before we knew we'd be updating this target. In that |
| + * case calling update_file now would result in the file being |
| + * inappropriately pruned so we toggle the considered bit back |
| + * off first. */ |
| + d->file->considered = !considered; |
| |
| dep_status |= update_file (d->file, depth); |
| |
| |