Bug#861672: libwibble: please make the output reproducible

Chris Lamb lamby at debian.org
Tue May 2 14:48:19 UTC 2017


Source: libwibble
Version: 1.1-1
Severity: wishlist
Tags: patch
User: reproducible-builds at lists.alioth.debian.org
Usertags: toolchain timestamps
X-Debbugs-Cc: reproducible-bugs at lists.alioth.debian.org

Hi,

Whilst working on the Reproducible Builds effort [0], we noticed
that libwibble generates non-reproducible manpages that use its
wibble/commandline/doc.h library.

For example, goplay:

  ├── ./usr/share/man/man1/goplay.1.gz
  ├── ./usr/share/man/man1/goplay.1.gz
  │ │ │ │ │ @@ -1,8 +1,8 @@
  │ │ │ │ │ -.TH GOPLAY 1 "May 29, 2018" "0.5"
  │ │ │ │ │ +.TH GOPLAY 1 "April 26, 2017" "0.5"


Patch attached that uses SOURCE_DATE_EPOCH if available.


 [0] https://reproducible-builds.org/
 [1] https://reproducible-builds.org/specs/source-date-epoch/


Regards,

-- 
      ,''`.
     : :'  :     Chris Lamb
     `. `'`      lamby at debian.org / chris-lamb.co.uk
       `-
-------------- next part --------------
diff --git a/wibble/commandline/doc.cpp b/wibble/commandline/doc.cpp
index 0b99206..7498605 100644
--- a/wibble/commandline/doc.cpp
+++ b/wibble/commandline/doc.cpp
@@ -230,6 +230,15 @@ static string toupper(const std::string& str)
 static string man_date()
 {
 	time_t tnow = time(0);
+	char* source_date_epoch = std::getenv("SOURCE_DATE_EPOCH");
+	if (source_date_epoch) {
+		std::istringstream iss(source_date_epoch);
+		iss >> tnow;
+		if (iss.fail() || !iss.eof()) {
+			std::cerr << "Error: Cannot parse SOURCE_DATE_EPOCH as integer\n";
+			exit(27);
+		}
+	}
 	struct tm* now = gmtime(&tnow);
 	char buf[20];
 	const char* oldlocale = setlocale(LC_TIME, "C");


More information about the Reproducible-bugs mailing list