summaryrefslogtreecommitdiff
path: root/src/remake.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/remake.c')
-rw-r--r--src/remake.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/remake.c b/src/remake.c
index dec4667c..bdf78b3e 100644
--- a/src/remake.c
+++ b/src/remake.c
@@ -373,9 +373,15 @@ update_file (struct file *file, unsigned int depth)
{
/* Check for the case where a target has been tried and failed but
the diagnostics haven't been issued. If we need the diagnostics
- then we will have to continue. */
+ then we will have to continue.
+ In the case of double colon rules, this file cannot be pruned if
+ this recipe finished (file->command_state == cs_finished) and there
+ are more double colon rules for this file. Instead the recipe of the
+ next double colon rule of this file should be run. */
if (!(f->updated && f->update_status > us_none
- && !f->dontcare && f->no_diag))
+ && !f->dontcare && f->no_diag)
+ && !(file->double_colon && file->command_state == cs_finished &&
+ f->prev))
{
DBF (DB_VERBOSE, _("Pruning file '%s'.\n"));
return f->command_state == cs_finished ? f->update_status : us_success;