summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--remake.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/remake.c b/remake.c
index 9c9017e..390532c 100644
--- a/remake.c
+++ b/remake.c
@@ -211,7 +211,24 @@ update_file (file, depth)
if (status != 0 && !keep_going_flag)
return status;
- commands_finished |= not_started && f->command_state == cs_finished;
+ switch (f->command_state)
+ {
+ case cs_finished:
+ commands_finished |= not_started;
+ break;
+
+ case cs_running:
+ case cs_deps_running:
+ /* Don't run the other :: rules for this
+ file until this rule is finished. */
+ return 0;
+
+ default:
+ error ("internal error: `%s' command_state == %d in update_file_1",
+ f->name, (int) f->command_state);
+ abort ();
+ break;
+ }
}
/* For a top level target, if we have found nothing whatever to do for it,