diff options
-rw-r--r-- | redo.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/redo.c b/redo.c index 5dc8064..8bdf85d 100644 --- a/redo.c +++ b/redo.c @@ -677,14 +677,22 @@ redo_ifchange(int targetc, char *targetv[]) char *target = targetchdir(job->target); char *depfile = targetdep(target); - rename(job->temp_depfile, depfile); - if (stat(job->temp_target, &st) == 0 && st.st_size > 0) { + int dfd, tfd; + + dfd = open(job->temp_depfile, O_WRONLY|O_APPEND); + tfd = open(job->temp_target, O_RDONLY); + dprintf(dfd, "=%s@%s\n", hashfile(tfd), target); + close(dfd); + close(tfd); + rename(job->temp_target, target); } else { remove(job->temp_target); } + + rename(job->temp_depfile, depfile); } vacate(job->implicit); |