diff --git a/remake.c b/remake.c index 355901b2..7c08026d 100644 --- a/remake.c +++ b/remake.c @@ -569,11 +569,24 @@ notice_finished_file (file) it had some recursive commands, and they lost. */ && file->update_status != 1) { - if (file->phony) - file->update_status = 0; + if (file->cmds != 0 && file->cmds->any_recurse) + { + /* If all the command lines were recursive, + we don't want to do the touching. */ + unsigned int i; + for (i = 0; i < file->cmds->ncommand_lines; ++i) + if (!file->cmds->lines_recurse[i]) + goto have_nonrecursing; + } else - /* Should set file's modification date and do nothing else. */ - file->update_status = touch_file (file); + { + have_nonrecursing: + if (file->phony) + file->update_status = 0; + else + /* Should set file's modification date and do nothing else. */ + file->update_status = touch_file (file); + } } if (!file->phony)