Hi,

On 07/14/2015 12:39 AM, Karl Berry wrote:
> Thanh is away for ~3 weeks.  He will review both the SOURCE_DATE_EPOCH
> patch (which I suspect will be fine) and Nicolas's other comments when
> he's back.

In addition to my patch to honour $SOURCE_DATE_EPOCH please find
attached an additional patch which uses UTC in the printed timestamps to
also make the timezone reproducible.

I have patched the function makepdftime to use gmtime if
$SOURCE_DATE_EPOCH is set. Otherwise the old behaviour will be kept.

I have tested the patch in our autobuilders against 4 Debian packages
that use pdflatex and these become reproducible.

Cheers,
akira

Description: Use gmtime instead of localtime to produce timezone independent 
output if SOURCE_DATE_EPOCH is set

--- a/texk/web2c/lib/texmfmp.c
+++ b/texk/web2c/lib/texmfmp.c
@@ -2876,7 +2876,7 @@ char start_time_str[TIME_STR_SIZE];
 static char time_str[TIME_STR_SIZE];
     /* minimum size for time_str is 24: "D:YYYYmmddHHMMSS+HH'MM'" */
 
-static void makepdftime(time_t t, char *time_str)
+static void makepdftime(time_t t, char *time_str, int utc)
 {
 
     struct tm lt, gmt;
@@ -2884,7 +2884,12 @@ static void makepdftime(time_t t, char *
     int i, off, off_hours, off_mins;
 
     /* get the time */
-    lt = *localtime(&t);
+    if (utc){
+        lt = *gmtime(&t);
+    }
+    else {
+        lt = *localtime(&t);
+    }
     size = strftime(time_str, TIME_STR_SIZE, "D:%Y%m%d%H%M%S", &lt);
     /* expected format: "YYYYmmddHHMMSS" */
     if (size == 0) {
@@ -2958,11 +2963,12 @@ void initstarttime(void)
                        uexit(EXIT_FAILURE);
                }
                start_time = epoch;
+               makepdftime(start_time, start_time_str, 1);
        }
        else {
                start_time = time((time_t *) NULL);
+               makepdftime(start_time, start_time_str, 0);
        }
-        makepdftime(start_time, start_time_str);
     }
 }
 
@@ -3049,7 +3055,7 @@ void getfilemoddate(integer s)
     if (stat(file_name, &file_data) == 0) {
         size_t len;
 
-        makepdftime(file_data.st_mtime, time_str);
+        makepdftime(file_data.st_mtime, time_str, 0);
         len = strlen(time_str);
         if ((unsigned) (poolptr + len) >= (unsigned) (poolsize)) {
             poolptr = poolsize;

Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
Reproducible-builds mailing list
Reproducible-builds@lists.alioth.debian.org
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/reproducible-builds

Reply via email to