From 501ae4e93fd6fa2f7d20d00d1b011f9006802eae Mon Sep 17 00:00:00 2001 From: "Bernhard M. Wiedemann" 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;