summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoland McGrath <roland@redhat.com>1992-10-25 06:16:09 +0000
committerRoland McGrath <roland@redhat.com>1992-10-25 06:16:09 +0000
commit815ee70d7dbb4f47b2ce040119f0c2e33654078a (patch)
tree3603fd07769d54170f3c24eb6b5bc49d225dac9a
parent04b7426dfa74081baf2eb2025c5a0de5d5f3b5bd (diff)
downloadgunmake-815ee70d7dbb4f47b2ce040119f0c2e33654078a.tar.gz
Formerly remake.c.~37~
-rw-r--r--remake.c52
1 files changed, 22 insertions, 30 deletions
diff --git a/remake.c b/remake.c
index 812fa8d..a055925 100644
--- a/remake.c
+++ b/remake.c
@@ -195,26 +195,11 @@ update_file (file, depth)
for (f = file; f != 0; f = f->prev)
{
- register struct dep *d;
int not_started = f->command_state == cs_not_started;
status |= update_file_1 (f, depth);
check_renamed (f);
- for (d = f->also_make; d != 0; d = d->next)
- {
- check_renamed (d->file);
- d->file->command_state = f->command_state;
- d->file->update_status = f->update_status;
- d->file->updated = f->updated;
- if (debug_flag)
- {
- print_spaces (depth);
- printf ("File `%s' was also made by making `%s'.\n",
- d->file->name, f->name);
- }
- }
-
if (status != 0 && !keep_going_flag)
return status;
@@ -552,8 +537,9 @@ update_file_1 (file, depth)
return file->update_status;
}
-/* Set FILE's `updated' flag and re-check its mtime and the mtime's
- of all files listed in its `also_make' member. */
+/* Set FILE's `updated' flag and re-check its mtime and the mtime's of all
+ files listed in its `also_make' member. Under -t, this function also
+ touches FILE. */
void
notice_finished_file (file)
@@ -604,19 +590,24 @@ notice_finished_file (file)
file->last_mtime = 0;
}
- for (d = file->also_make; d != 0; d = d->next)
- {
- d->file->command_state = cs_finished;
- d->file->updated = 1;
- d->file->update_status = file->update_status;
-
- if (!d->file->phony)
- /* Fetch the new modification time.
- We do this instead of just invalidating the cached time
- so that a vpath_search can happen. Otherwise, it would
- never be done because the target is already updated. */
- (void) file_mtime (d->file);
- }
+ if (file->update_status != -1)
+ /* We actually tried to update FILE, which has
+ updated its also_make's as well (if it worked).
+ If it didn't work, it wouldn't work again for them.
+ So mark them as updated with the same status. */
+ for (d = file->also_make; d != 0; d = d->next)
+ {
+ d->file->command_state = cs_finished;
+ d->file->updated = 1;
+ d->file->update_status = file->update_status;
+
+ if (!d->file->phony)
+ /* Fetch the new modification time.
+ We do this instead of just invalidating the cached time
+ so that a vpath_search can happen. Otherwise, it would
+ never be done because the target is already updated. */
+ (void) f_mtime (d->file);
+ }
}
/* Check whether another file (whose mtime is THIS_MTIME)
@@ -792,6 +783,7 @@ remake_file (file)
}
}
+ /* This does the touching under -t. */
notice_finished_file (file);
}