aboutsummaryrefslogtreecommitdiff
path: root/infra/libkookie/nixpkgs/pkgs/build-support/setup-hooks/set-source-date-epoch-to-latest.sh
diff options
context:
space:
mode:
Diffstat (limited to 'infra/libkookie/nixpkgs/pkgs/build-support/setup-hooks/set-source-date-epoch-to-latest.sh')
-rw-r--r--infra/libkookie/nixpkgs/pkgs/build-support/setup-hooks/set-source-date-epoch-to-latest.sh34
1 files changed, 34 insertions, 0 deletions
diff --git a/infra/libkookie/nixpkgs/pkgs/build-support/setup-hooks/set-source-date-epoch-to-latest.sh b/infra/libkookie/nixpkgs/pkgs/build-support/setup-hooks/set-source-date-epoch-to-latest.sh
new file mode 100644
index 000000000000..ae34ffec4854
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/build-support/setup-hooks/set-source-date-epoch-to-latest.sh
@@ -0,0 +1,34 @@
+updateSourceDateEpoch() {
+ local path="$1"
+
+ # Get the last modification time of all regular files, sort them,
+ # and get the most recent. Maybe we should use
+ # https://github.com/0-wiz-0/findnewest here.
+ local -a res=($(find "$path" -type f -not -newer "$NIX_BUILD_TOP/.." -printf '%T@ %p\0' \
+ | sort -n --zero-terminated | tail -n1 --zero-terminated | head -c -1))
+ local time="${res[0]//\.[0-9]*/}" # remove the fraction part
+ local newestFile="${res[1]}"
+
+ # Update $SOURCE_DATE_EPOCH if the most recent file we found is newer.
+ if [ "${time:-0}" -gt "$SOURCE_DATE_EPOCH" ]; then
+ echo "setting SOURCE_DATE_EPOCH to timestamp $time of file $newestFile"
+ export SOURCE_DATE_EPOCH="$time"
+
+ # Warn if the new timestamp is too close to the present. This
+ # may indicate that we were being applied to a file generated
+ # during the build, or that an unpacker didn't restore
+ # timestamps properly.
+ local now="$(date +%s)"
+ if [ "$time" -gt $((now - 60)) ]; then
+ echo "warning: file $newestFile may be generated; SOURCE_DATE_EPOCH may be non-deterministic"
+ fi
+ fi
+}
+
+postUnpackHooks+=(_updateSourceDateEpochFromSourceRoot)
+
+_updateSourceDateEpochFromSourceRoot() {
+ if [ -n "$sourceRoot" ]; then
+ updateSourceDateEpoch "$sourceRoot"
+ fi
+}