Source: libpsl
Version: 0.23.0-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
libpsl could not be built reproducibly.

This is because the manual page embeds the current build date. The
attached patch generates these values from SOURCE_DATE_EPOCH, if it
exists.

Patch attached that modifies both the Autotools and Meson.build parts,
even though I don't think the Meson build system is used right now.

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


Regards,

-- 
      ,''`.
     : :'  :     Chris Lamb
     `. `'`      [email protected] / chris-lamb.co.uk
       `-
--- a/debian/patches/0004-reproducible-build.patch      1969-12-31 
16:00:00.000000000 -0800
--- b/debian/patches/0004-reproducible-build.patch      2026-07-15 
09:03:12.126939478 -0700
@@ -0,0 +1,34 @@
+Description: Make the build reproducible
+Author: Chris Lamb <[email protected]>
+Last-Update: 2026-07-15
+
+--- libpsl-0.23.0.orig/configure.ac
++++ libpsl-0.23.0/configure.ac
+@@ -42,8 +42,8 @@ AC_SUBST([LIBPSL_VERSION_MAJOR], [$(echo
+ AC_SUBST([LIBPSL_VERSION_MINOR], [$(echo $VERSION | cut -d'.' -f2)])
+ AC_SUBST([LIBPSL_VERSION_PATCH], [$(echo $VERSION | cut -d'.' -f3)])
+ AC_SUBST([LIBPSL_VERSION_NUMBER], [$(printf '0x%02x%02x%02x' 
$LIBPSL_VERSION_MAJOR $LIBPSL_VERSION_MINOR $LIBPSL_VERSION_PATCH)])
+-AC_SUBST([COPYRIGHT_MONTH], [$(date +%B)])
+-AC_SUBST([COPYRIGHT_YEAR], [$(date +%Y)])
++AC_SUBST([COPYRIGHT_MONTH], [m4_esyscmd([date -u -d "@$SOURCE_DATE_EPOCH" +%B 
2>/dev/null || date -u -r $SOURCE_DATE_EPOCH +%B || date -u +%B])])
++AC_SUBST([COPYRIGHT_YEAR], [m4_esyscmd([date -u -d "@$SOURCE_DATE_EPOCH" +%Y 
2>/dev/null || date -u -r $SOURCE_DATE_EPOCH +%Y || date -u +%Y])])
+ AC_CONFIG_FILES([include/libpsl.h tools/psl.1])
+ 
+ dnl
+--- libpsl-0.23.0.orig/meson.build
++++ libpsl-0.23.0/meson.build
+@@ -157,7 +157,13 @@ endif
+ # Shared configuration data for copyright date and version
+ _cdata = configuration_data()
+ _cdata.set('PACKAGE_VERSION', meson.project_version())
+-copyright_date = run_command(['date', '+%B %Y'], check: true).stdout().strip()
++date_exe = find_program('date')
++cmd = run_command('sh', '-c', 'echo $SOURCE_DATE_EPOCH')
++source_date_epoch = cmd.stdout().strip()
++if source_date_epoch == ''
++      source_date_epoch = run_command(date_exe, '+%s').stdout().strip()
++endif
++copyright_date = run_command(date_exe, '-u', '-d', '@' + source_date_epoch, 
'+%B %Y').stdout().strip()
+ _cdata.set('COPYRIGHT_MONTH', copyright_date.split()[0])
+ _cdata.set('COPYRIGHT_YEAR', copyright_date.split()[1])
+ 
--- a/debian/patches/series     2026-07-15 08:56:28.991855043 -0700
--- b/debian/patches/series     2026-07-15 09:03:08.612154387 -0700
@@ -1,3 +1,4 @@
 0001-remove-git-submodules.patch
 0002-make-psl-make-dafsa-py3-based.patch
 0003-rename-cdata-in-docs-as-well.patch
+0004-reproducible-build.patch

Reply via email to