Source: gmt
Version: 5.2.1+dfsg-5
Severity: wishlist
Tags: patch upstream
User: reproducible-bui...@lists.alioth.debian.org
Usertags: timestamps
X-Debbugs-Cc: reproducible-bui...@lists.alioth.debian.org
Dear Maintainer,
While working on the `reproducible builds' effort [1], we have noticed
that 'gmt' could not be built reproducibly.
The attached patch honours the SOURCE_DATE_EPOCH environment
variable [2] to get a reproducible build date from the last
debian changelog entry.
Once applied, gmt can be built reproducibly in our current
experimental framework.
Regards,
Alexis Bienvenüe.
[1]: https://wiki.debian.org/ReproducibleBuilds
[2]: https://reproducible-builds.org/specs/source-date-epoch/
Description: Honour SOURCE_DATE_EPOCH
Honour the SOURCE_DATE_EPOCH environment variable to set the sources
last modification date.
See https://reproducible-builds.org/specs/source-date-epoch/
Author: Alexis Bienvenüe
Index: gmt-5.2.1+dfsg/cmake/modules/today.c
===
--- gmt-5.2.1+dfsg.orig/cmake/modules/today.c
+++ gmt-5.2.1+dfsg/cmake/modules/today.c
@@ -5,18 +5,32 @@
#include
#include
+#include
#define BUFSIZE 32
int main () {
char today_string[BUFSIZE];
- /* obtain current time as time since epoch */
- time_t clock = time (NULL);
-
- /* convert time since epoch to calendar time expressed as local time */
- struct tm *p_time = localtime (&clock);
+ time_t clock;
+struct tm *p_time;
+/* See https://reproducible-builds.org/specs/source-date-epoch/ */
+char* source_date_epoch = getenv("SOURCE_DATE_EPOCH");
+if(source_date_epoch) {
+ /* get sources last modification date from environment */
+ clock = strtoull(source_date_epoch, NULL, 10);
+
+ /* Use UTC for reproducibility */
+ p_time = gmtime (&clock);
+} else {
+ /* obtain current time as time since epoch */
+ clock = time (NULL);
+
+ /* convert time since epoch to calendar time expressed as local time */
+ p_time = localtime (&clock);
+}
+
/* convert tm object to custom textual representation ;mm;dd;Mmm*/
size_t result = strftime(today_string, BUFSIZE, "%Y;%m;%d;%B", p_time);