diff options
author | Mike Frysinger <vapier@gentoo.org> | 2023-01-11 21:40:04 -0500 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2023-01-11 21:59:40 -0500 |
commit | 054b02ce444c6c65dc5cfa68e67741ce43e76b1b (patch) | |
tree | 789ae9a85820118c48513ec3dbb9a5b421d0be80 | |
parent | f15852df5f71631cfc4f03c0b8897b0a20fc79d3 (diff) | |
download | automake-054b02ce444c6c65dc5cfa68e67741ce43e76b1b.tar.gz |
dirstamp: use append too instead of truncate
We changed the depfiles logic to use >> (append) instead of > (truncate)
due to it being slightly faster & nicer to the disk. Do the same with
the dirstamp files as we only need the files to exist -- we don't care
about their content, and we never put anything in them ourselves. If
someone else were to, we clean them up normally with `make clean`.
Simple test case on my Linux 6.1 w/ext4 on SSD:
@: > foo.txt
for (i = 0; i < 1000000; ++i) close(open("foo.txt", O_WRONLY|O_CREAT|O_TRUNC, 0666));
-> 769 msec
@: >>foo.txt
for (i = 0; i < 1000000; ++i) close(open("foo.txt", O_WRONLY|O_CREAT|O_APPEND, 0666));
-> 2 sec
-rw-r--r-- | bin/automake.in | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/bin/automake.in b/bin/automake.in index 306913279..1c13a3187 100644 --- a/bin/automake.in +++ b/bin/automake.in @@ -7902,7 +7902,7 @@ sub require_build_directory $output_rules .= ("$dirstamp:\n" . "\t\@\$(MKDIR_P) $directory\n" - . "\t\@: > $dirstamp\n"); + . "\t\@: >>$dirstamp\n"); return $dirstamp; } |