Source: libecoli
Version: 0.11.6-1
Severity: wishlist
Tags: patch
User: [email protected]
Usertags: timestamps
X-Debbugs-Cc: [email protected]

Hi,

Whilst working on the Reproducible Builds effort [0], we noticed that
libecoli could not be built reproducibly.

This is because the generated manual pages contain the current time.
I've attached a patch that will use SOURCE_DATE_EPOCH instead, falling
back to the current time if this environment variable is not available.
This patch is suitable for forwarding upstream.

(I also included a patch that will ensure the package is reproducible
regardless of the build directory, although this is strictly optional
as we are not doing build dir variation testing at the moment.)

 [0] https://reproducible-builds.org/


Regards,

-- 
      ,''`.
     : :'  :     Chris Lamb
     `. `'`      [email protected] / chris-lamb.co.uk
       `-
--- a/debian/patches/reproducible-build.patch   1969-12-31 16:00:00.000000000 
-0800
--- b/debian/patches/reproducible-build.patch   2026-06-22 12:50:31.681359678 
-0700
@@ -0,0 +1,15 @@
+Description: Make the build reproducible
+Author: Chris Lamb <[email protected]>
+Last-Update: 2026-06-22
+
+--- libecoli-0.11.6.orig/doc/Doxyfile.in
++++ libecoli-0.11.6/doc/Doxyfile.in
+@@ -26,7 +26,7 @@ GENERATE_DEPRECATEDLIST = YES
+ INTERNAL_DOCS           = NO
+ VERBATIM_HEADERS        = NO
+ ALPHABETICAL_INDEX      = NO
+-FULL_PATH_NAMES         = YES
++FULL_PATH_NAMES         = NO
+ STRIP_FROM_PATH         = @TOPDIR@/include
+ STRIP_FROM_INC_PATH     = @TOPDIR@/include
+ WARN_AS_ERROR           = NO
--- a/debian/patches/reproducible-manpages.patch        1969-12-31 
16:00:00.000000000 -0800
--- b/debian/patches/reproducible-manpages.patch        2026-06-22 
13:03:02.331508693 -0700
@@ -0,0 +1,25 @@
+Description: Make the build reproducible
+Author: Chris Lamb <[email protected]>
+Last-Update: 2026-06-22
+
+--- libecoli-0.11.6.orig/doc/gen-man-pages.sh
++++ libecoli-0.11.6/doc/gen-man-pages.sh
+@@ -12,6 +12,10 @@ include_dir="$2"
+ output_dir="$3"
+ stamp="$4"
+ 
++SOURCE_DATE_EPOCH="${SOURCE_DATE_EPOCH:-$(date +%s)}"
++date_fmt="+%Y-%m-%d"
++build_date=$(date -u -d "@$SOURCE_DATE_EPOCH" "$date_fmt" 2>/dev/null || date 
-u -r "$SOURCE_DATE_EPOCH" "$date_fmt" 2>/dev/null || date -u "$date_fmt")
++
+ if [ -z "$xml_dir" ] || [ -z "$include_dir" ] || \
+    [ -z "$output_dir" ] || [ -z "$stamp" ]; then
+       echo "usage: $0 <xml-dir> <include-dir> <output-dir> <stamp-file>" >&2
+@@ -33,6 +37,7 @@ for xml in $groups; do
+               -H "Libecoli Programmer's Manual" \
+               -C "Olivier Matz, Robin Jarry" \
+               -S "2010" \
++              -D "$build_date" \
+               -d "$xml_dir" \
+               -o "$output_dir" \
+               "$xml" || [ "$?" -gt 128 ]
--- a/debian/patches/series     1969-12-31 16:00:00.000000000 -0800
--- b/debian/patches/series     2026-06-22 13:03:01.500017021 -0700
@@ -0,0 +1,2 @@
+reproducible-build.patch
+reproducible-manpages.patch
--- a/doc/Doxyfile.in   2026-06-22 12:40:03.723815462 -0700
--- b/doc/Doxyfile.in   2026-06-22 13:02:52.000000000 -0700
@@ -26,7 +26,7 @@
 INTERNAL_DOCS           = NO
 VERBATIM_HEADERS        = NO
 ALPHABETICAL_INDEX      = NO
-FULL_PATH_NAMES         = YES
+FULL_PATH_NAMES         = NO
 STRIP_FROM_PATH         = @TOPDIR@/include
 STRIP_FROM_INC_PATH     = @TOPDIR@/include
 WARN_AS_ERROR           = NO

Reply via email to