Meta: Provide a way to only update a file if the output changes

This is only useful for build commands that update their destination in all cases
and thus sometimes confuse cmake into rebuilding everything needlessly.
This commit is contained in:
Ben Wiederhake 2020-08-02 22:05:45 +02:00 committed by Andreas Kling
parent 98e18d7339
commit aaa13e5739

View file

@ -0,0 +1,28 @@
#!/bin/sh
set -e
if [ "$#" -lt "2" ]; then
echo "USAGE: $0 <file> <cmd...>"
exit 1
fi
DST_FILE="$1"
shift
# Just in case:
mkdir -p -- "$(dirname -- "${DST_FILE}")"
cleanup()
{
rm -f -- "${DST_FILE}.tmp"
}
trap cleanup 0 1 2 3 6
"$@" > "${DST_FILE}.tmp"
# If we get here, the command was successful, and we can overwrite the destination.
if ! cmp --quiet -- "${DST_FILE}.tmp" "${DST_FILE}"; then
# File changed, need to overwrite:
mv -f -- "${DST_FILE}.tmp" "${DST_FILE}"
fi