Source: dateutils Version: 0.3.1-1.1 Severity: wishlist Tags: patch User: reproducible-bui...@lists.alioth.debian.org Usertags: timestamps X-Debbugs-Cc: reproducible-bui...@lists.alioth.debian.org
Hi, Whilst working on the Reproducible Builds effort [0], I noticed that dateutils could not be built reproducibly. Patch attached. [0] https://reproducible-builds.org/ Regards, -- ,''`. : :' : Chris Lamb `. `'` la...@debian.org / chris-lamb.co.uk `-
--- a/debian/patches/0002-reproducible-build.diff 1970-01-01 01:00:00.000000000 +0100 --- b/debian/patches/0002-reproducible-build.diff 2016-08-22 20:22:06.728424663 +0100 @@ -0,0 +1,54 @@ +Description: Make the build reproducible +Author: Chris Lamb <la...@debian.org> +Last-Update: 2016-08-22 + +--- dateutils-0.3.1.orig/build-aux/yuck.c ++++ dateutils-0.3.1/build-aux/yuck.c +@@ -1349,6 +1349,38 @@ bollocks: + _exit(EXIT_FAILURE); + } + ++static time_t ++get_current_time(void) ++{ ++ time_t now; ++ char *source_date_epoch, *endptr; ++ unsigned long long epoch; ++ ++ source_date_epoch = getenv("SOURCE_DATE_EPOCH"); ++ ++ if (!source_date_epoch) { ++ return time(NULL); ++ } ++ ++ errno = 0; ++ epoch = strtoull(source_date_epoch, &endptr, 10); ++ ++ if ((errno == ERANGE && (epoch == ULLONG_MAX || epoch == 0)) || (errno != 0 && epoch == 0)) { ++ now = (time_t)-1; ++ } else if (endptr == source_date_epoch) { ++ now = (time_t)-1; ++ } else if (*endptr != '\0') { ++ now = (time_t)-1; ++ } else if (epoch > ULONG_MAX) { ++ now = (time_t)-1; ++ } else { ++ now = (time_t)epoch; ++ } ++ ++ return now; ++} ++ ++ + + static int + wr_pre(void) +@@ -1432,7 +1464,7 @@ wr_man_date(void) + char buf[32U]; + int rc = 0; + +- if ((now = time(NULL)) == (time_t)-1) { ++ if ((now = get_current_time()) == (time_t)-1) { + rc = -1; + } else if ((tp = gmtime(&now)) == NULL) { + rc = -1; --- a/debian/patches/series 2016-08-22 20:01:29.991392761 +0100 --- b/debian/patches/series 2016-08-22 20:17:05.127120394 +0100 @@ -1 +1,2 @@ 0001-do-not-use-march-native-compiler-flags.diff +0002-reproducible-build.diff