Avoid rerunning mkvmi repeatedly for no reason #875
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This is a pretty minor thing, but I noticed that every time I run
cmake --build
, it regenerates vmi-metadata.h for no apparent reason. The CMake scripts say that it depends only on pl-vmi.c and the mkvmi utility itself, neither of which should change on every build. So I debugged this further usingmake -d
and found this in the output:As it turns out,
mkvmi
tries to be smart - if the generated file already exists with identical contents, it doesn't overwrite the file to avoid touching the mtime. Unfortunately this causes problems here -mkvmi
is being called because the output file is outdated, but then it doesn't actually update the output file's mtime, so on the next build the file is still considered outdated andmkvmi
is called again, etc.This PR removes the extra check and simply rewrites the output file every time, which fixes this problem. The downside is that now every time that pl-vmi.c changes, all dependents of vmi-metadata.h (i. e. most of the SWI-Prolog core) are rebuilt, even if the contents of vmi-metadata.h haven't actually changed.
The same problem applies to defatom, but it's less of an issue there, because changing the ATOMS input file will almost always cause a real change to the generated headers.