Clang-CXX: copy into the dyndep output on success
When clang-scan-deps
fails to scan (e.g., bad source syntax, junk
flags, etc.), the redirection unconditionally updates the file. If this
fails, the .ddi
file timestamp is updated. If the state is then
reverted (e.g., the command line returns to the state of the last
successful build), the updated file is not useful, but ninja
does not
rerun because:
- the command hash matches the last successful run
- the output file is newer than its inputs
However, since the .ddi
file has been updated with bogus contents from
a failed scan, collation fails as the rules
array is empty (or
incomplete from a batch scan).
If clang-scan-deps
were properly aware of its output file, it could
use this to not write the file if any inner scan fails. Requested in
https://github.com/llvm/llvm-project/issues/72875.
See: https://github.com/llvm/llvm-project/issues/72875
Fixes: #25429 (closed)
Cc: @namniav
Backport: release