#1140567 libecoli: please make the build reproducible

#1140567#5
Date:
2026-06-22 20:08:03 UTC
From:
To:
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,

#1140567#10
Date:
2026-06-23 08:00:35 UTC
From:
To:
Hi Chris,

I had uploaded 0.11.7-1 a few days ago with a fix for that
reproducibility issue but it seems the upload wasn't processed.

rjarry@ringo:~/debian/libecoli debian/latest$ dput ../libecoli_0.11.7-1_source.changes
Package libecoli was already uploaded to ftp-master
If you want to upload nonetheless, use --force or remove ../libecoli_0.11.7-1_source.ftp-master.upload

I'll try again.

rjarry@ringo:~/debian/libecoli debian/latest$ dput --force ../libecoli_0.11.7-1_source.changes
Uploading libecoli using ftp to ftp-master (host: ftp.upload.debian.org; directory: /pub/UploadQueue/)
running allowed-distribution: check whether a local profile permits uploads to the target distribution
running protected-distribution: warn before uploading to distributions where a special policy applies
running checksum: verify checksums before uploading
running suite-mismatch: check the target distribution for common errors
running gpg: check GnuPG signatures before the upload
Uploading libecoli_0.11.7-1.dsc
Uploading libecoli_0.11.7.orig.tar.xz
Uploading libecoli_0.11.7-1.debian.tar.xz
Uploading libecoli_0.11.7-1_source.buildinfo
Uploading libecoli_0.11.7-1_source.changes

Do you know what could be blocking?

#1140567#15
Date:
2026-06-23 08:00:35 UTC
From:
To:
Hi Chris,

I had uploaded 0.11.7-1 a few days ago with a fix for that
reproducibility issue but it seems the upload wasn't processed.

rjarry@ringo:~/debian/libecoli debian/latest$ dput ../libecoli_0.11.7-1_source.changes
Package libecoli was already uploaded to ftp-master
If you want to upload nonetheless, use --force or remove ../libecoli_0.11.7-1_source.ftp-master.upload

I'll try again.

rjarry@ringo:~/debian/libecoli debian/latest$ dput --force ../libecoli_0.11.7-1_source.changes
Uploading libecoli using ftp to ftp-master (host: ftp.upload.debian.org; directory: /pub/UploadQueue/)
running allowed-distribution: check whether a local profile permits uploads to the target distribution
running protected-distribution: warn before uploading to distributions where a special policy applies
running checksum: verify checksums before uploading
running suite-mismatch: check the target distribution for common errors
running gpg: check GnuPG signatures before the upload
Uploading libecoli_0.11.7-1.dsc
Uploading libecoli_0.11.7.orig.tar.xz
Uploading libecoli_0.11.7-1.debian.tar.xz
Uploading libecoli_0.11.7-1_source.buildinfo
Uploading libecoli_0.11.7-1_source.changes

Do you know what could be blocking?

#1140567#20
Date:
2026-06-23 13:51:27 UTC
From:
To:
Hi Robin,

I've not encountered this particular error myself. However, common issues
for why uploads aren't processed are because of GPG signatures and because
the target distribution is incorrect. If you jump on the #debian-ftp IRC
channel, one of the admins will be able to look at the logs.


Best wishes,

#1140567#25
Date:
2026-09-24 21:51:01 UTC
From:
To:
It seems like the upload was eventually processed, although the fix
included was only a partial fix.

diff --git a/doc/gen-man-pages.sh b/doc/gen-man-pages.sh
index 7112ba6..7bc1969 100755
--- a/doc/gen-man-pages.sh
+++ b/doc/gen-man-pages.sh
@@ -35,7 +35,7 @@ for xml in $groups; do
                -S "2010" \
                -d "$xml_dir" \
                -o "$output_dir" \
-               -D "$(date +%Y-%m-%d ${SOURCE_DATE_EPOCH:+-d @${SOURCE_DATE_EPOCH}})" \
+               -D "$(date +%Y-%m-%d ${SOURCE_DATE_EPOCH:+-u -d @${SOURCE_DATE_EPOCH}})" \
                "$xml" || [ "$?" -gt 128 ]
 done

The -u (a.k.a. --utc) argument to date is needed for the build to be
independent of the timezone:

https://tests.reproducible-builds.org/debian/rb-pkg/forky/amd64/diffoscope-results/libecoli.html

  ./usr/share/man/man3/ec_comp.3.gz

  .TH·EC_COMP·3·2026-06-11·"libecoli"·"Libecoli·Programmer's·Manual"
  vs.
  .TH·EC_COMP·3·2026-06-12·"libecoli"·"Libecoli·Programmer's·Manual"

  Copyright·(C)·2010-2027·Olivier·Matz,·Robin·Jarry.
  vs.
  Copyright·(C)·2010-2026·Olivier·Matz,·Robin·Jarry.

Unfortunately, the Copyright date range at the end of the manpage still
includes the year it was built and not the year from SOURCE_DATE_EPOCH,
so if the package is built in a different calendar year, it will not be
reproducible. I have not figured out a fix for that yet, but am looking
into it...


live well,
  vagrant

#1140567#30
Date:
2026-09-24 22:10:04 UTC
From:
To:
...

I should have waited to send the email! It just required another
argument to doxygen2man:

diff --git a/doc/gen-man-pages.sh b/doc/gen-man-pages.sh
index 7bc1969..3d6710f 100755
--- a/doc/gen-man-pages.sh
+++ b/doc/gen-man-pages.sh
@@ -36,6 +36,7 @@ for xml in $groups; do
                -d "$xml_dir" \
                -o "$output_dir" \
                -D "$(date +%Y-%m-%d ${SOURCE_DATE_EPOCH:+-u -d @${SOURCE_DATE_EPOCH}})" \
+               -Y "$(date +%Y ${SOURCE_DATE_EPOCH:+-u -d @${SOURCE_DATE_EPOCH}})" \
                "$xml" || [ "$?" -gt 128 ]
 done


I also noticed another part of the original patch that was not included,
which has to do with build paths rather than timestamps. It is fairly
minor as all the test infrastructure no longer tests build path
differences, but it would be nice to include otherwise there are
pointless build paths embedded in your documeentation!

diff --git a/doc/Doxyfile.in b/doc/Doxyfile.in
index 7d4097d..6f5e489 100644
--- a/doc/Doxyfile.in
+++ b/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


With those three fixes applied (using "date -u" with doxygen2man, and
also passing the -Y argument to doxygen2man, and disabling the
FULL_PATH_NAMES), I think this should become fully reproducible! :)


live well,
  vagrant

#1140567#35
Date:
2026-10-02 12:19:15 UTC
From:
To:
We believe that the bug you reported is fixed in the latest version of
libecoli, which is due to be installed in the Debian FTP archive.

A summary of the changes between this version and the previous one is
attached.

Thank you for reporting the bug, which will now be closed.  If you
have further comments please address them to 1140567@bugs.debian.org,
and the maintainer will reopen the bug report if appropriate.

Debian distribution maintenance software
pp.
Robin Jarry <robin@jarry.cc> (supplier of updated libecoli package)

(This message was generated automatically at their request; if you
believe that there is a problem with it please contact the archive
administrators by mailing ftpmaster@ftp-master.debian.org)
Format: 1.8
Date: Fri, 02 Oct 2026 11:55:59 +0000
Source: libecoli
Architecture: source
Version: 0.11.8-1
Distribution: unstable
Urgency: medium
Maintainer: Robin Jarry <robin@jarry.cc>
Changed-By: Robin Jarry <robin@jarry.cc>
Closes: 1140567
Changes:
 libecoli (0.11.8-1) unstable; urgency=medium
 .
   * New upstream release. (Closes: #1140567)
Checksums-Sha1:
 e6df16ae79b27d4291b3a0a2a3ee7cf3306ade02 1459 libecoli_0.11.8-1.dsc
 19ca80fb54114f759cf740bfa11922b27cd58804 113396 libecoli_0.11.8.orig.tar.xz
 a11892a624e9a4f5c34decd372a4b742540bed50 5144 libecoli_0.11.8-1.debian.tar.xz
 b1959baab73ffaf2df2b66420af932ba091e07eb 7883 libecoli_0.11.8-1_source.buildinfo
Checksums-Sha256:
 691e917a9efe108cd4d84e362a740cc9693a79279bc97ec3c0709f6e82b90518 1459 libecoli_0.11.8-1.dsc
 e9cf38ffe1127041ce6bd72b4fb7b60d5ac9766d8b3fbbc95bea59fc658ef1e7 113396 libecoli_0.11.8.orig.tar.xz
 00a542278108c329a939a4e77f847fb678c0d6e2d44cfaa89d324d0df8ed4191 5144 libecoli_0.11.8-1.debian.tar.xz
 df213650cf1dba5836c09b4108899679efc1d1670d66767d92f23bb1f5194002 7883 libecoli_0.11.8-1_source.buildinfo
Files:
 82f5d2f0c5baca66377f16426f004615 1459 libs optional libecoli_0.11.8-1.dsc
 f2ce953aa8976fe4a9f4b62110ffe78a 113396 libs optional libecoli_0.11.8.orig.tar.xz
 80212f3ca17e183c0fef3c1d581d0695 5144 libs optional libecoli_0.11.8-1.debian.tar.xz
 6c45675bfeeab780fa14064acf9cb807 7883 libs optional libecoli_0.11.8-1_source.buildinfo
-----BEGIN PGP SIGNATURE-----

iIUEARYKAC0WIQTYtqmQfDq3IEKLYGhicY4NZm/DNQUCar+dMQ8ccm9iaW5AamFy
cnkuY2MACgkQYnGODWZvwzVRgQD7BHinj9BhHnrqH3lorPneRkhPA+ovAmAR++tn
0H00pigA/1Yw9pA71be94lI+2px1+fe9PaFCmJYnfw5jz2PmQxIH
=NWCJ
-----END PGP SIGNATURE-----