Author: Bernhard M. Wiedemann Date: 2019-05-03 Override mtime with zip -X and 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. Index: zip30/zipup.c =================================================================== --- zip30.orig/zipup.c +++ zip30/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;