aboutsummaryrefslogtreecommitdiffstats
path: root/tools/zip/patches/011-reproducible-mtime.patch
diff options
context:
space:
mode:
Diffstat (limited to 'tools/zip/patches/011-reproducible-mtime.patch')
-rw-r--r--tools/zip/patches/011-reproducible-mtime.patch41
1 files changed, 41 insertions, 0 deletions
diff --git a/tools/zip/patches/011-reproducible-mtime.patch b/tools/zip/patches/011-reproducible-mtime.patch
new file mode 100644
index 0000000000..6ce8445e83
--- /dev/null
+++ b/tools/zip/patches/011-reproducible-mtime.patch
@@ -0,0 +1,41 @@
+From 501ae4e93fd6fa2f7d20d00d1b011f9006802eae Mon Sep 17 00:00:00 2001
+From: "Bernhard M. Wiedemann" <bwiedemann@suse.de>
+Date: Fri, 3 May 2019 16:32:24 +0200
+Subject: [PATCH] Override mtime with zip -X
+
+with SOURCE_DATE_EPOCH
+to allow for reproducible builds of .zip files
+
+See https://reproducible-builds.org/ for why this is good
+and https://reproducible-builds.org/specs/source-date-epoch/
+for the definition of this variable.
+
+Uses clamping to keep older mtimes than SOURCE_DATE_EPOCH intact.
+---
+ zipup.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+--- a/zipup.c
++++ b/zipup.c
+@@ -414,6 +414,7 @@ struct zlist far *z; /* zip entry to
+ ush tempcext = 0;
+ char *tempextra = NULL;
+ char *tempcextra = NULL;
++ const char *source_date_epoch;
+
+
+ #ifdef WINDLL
+@@ -674,6 +675,13 @@ struct zlist far *z; /* zip entry to
+
+ } /* strcmp(z->name, "-") == 0 */
+
++ if (extra_fields == 0 && (source_date_epoch = getenv("SOURCE_DATE_EPOCH")) != NULL) {
++ time_t epoch = strtoull(source_date_epoch, NULL, 10);
++ if (epoch > 0) {
++ ulg epochtim = unix2dostime(&epoch);
++ if (z->tim > epochtim) z->tim = epochtim;
++ }
++ }
+ if (extra_fields == 2) {
+ unsigned len;
+ char *p;