Source: mccode Version: 0.0~git20240714172335.05614ae+ds5-2 Severity: wishlist Tags: patch User: reproducible-bui...@lists.alioth.debian.org Usertags: timestamps filesystem X-Debbugs-Cc: reproducible-b...@lists.alioth.debian.org
Hi, Whilst working on the Reproducible Builds effort [0], we noticed that mccode could not be built reproducibly. This is because it embeds the current time (via the documentation) and filesystem path in the mccode_config.json. A patch attached that normalises the filesystem paths in .json files and uses SOURCE_DATE_EPOCH to seed the date in the documentation. This does not make the build entirely reproducible, however. [0] https://reproducible-builds.org/ Regards, -- ,''`. : :' : Chris Lamb `. `'` la...@debian.org / chris-lamb.co.uk `-
--- a/debian/patches/0009-Reproducible-builds.patch 1970-01-01 01:00:00.000000000 +0100 --- b/debian/patches/0009-Reproducible-builds.patch 2024-07-17 12:42:10.359758705 +0100 @@ -0,0 +1,54 @@ +Description: Make the build reproducible +Author: Chris Lamb <la...@debian.org> +Last-Update: 2024-07-17 + +--- mccode-0.0~git20240714172335.05614ae+ds5.orig/tools/Python/mcdoc/mcdoc.py ++++ mccode-0.0~git20240714172335.05614ae+ds5/tools/Python/mcdoc/mcdoc.py +@@ -15,7 +15,8 @@ import sys + import os + import re + import subprocess +-from datetime import datetime ++import datetime ++import time + from os.path import join, basename + + sys.path.append(os.path.join(os.path.dirname(__file__), '..')) +@@ -34,6 +35,10 @@ class OverviewDocWriter: + self.instr_info_local_lst = instr_info_local_lst + self.mccode_libdir = mccode_libdir + self.text = '' ++ self.gendate = datetime.datetime.fromtimestamp( ++ int(os.environ.get('SOURCE_DATE_EPOCH', time.time())), ++ tz=datetime.timezone.utc, ++ ) + + def create(self): + ''' action code for create overview page! ''' +@@ -148,7 +153,7 @@ class OverviewDocWriter: + text = text.replace('%TAB_LINES_INSTR_LOCAL%', local_instr_tab) + text = text.replace('%LINK_FILECOLON_DATA%', 'file://%s/data' % self.mccode_libdir) + text = text.replace('%LINK_FILECOLON_SHARE%', 'file://%s/share' % self.mccode_libdir) +- text = text.replace('%GENDATE%', '{0:%Y-%m-%d %H:%M:%S}'.format(datetime.now())) ++ text = text.replace('%GENDATE%', '{0:%Y-%m-%d %H:%M:%S}'.format(self.gendate)) + + #some McXtrace specific edits + if (mccode_config.get_mccode_prefix() == 'mx'): +@@ -452,7 +457,7 @@ class InstrDocWriter: + lstr = lstr + self.lnk_str % l + '\n' + h = h.replace(t[12], lstr) + +- h = h.replace(t[13], '{0:%Y-%m-%d %H:%M:%S}'.format(datetime.now())) ++ h = h.replace(t[13], '{0:%Y-%m-%d %H:%M:%S}'.format(self.gendate)) + + self.text = h + return self.text +@@ -625,7 +630,7 @@ class CompDocWriter: + lstr = lstr + self.lnk_str % l + '\n' + h = h.replace(t[12], lstr) + +- h = h.replace(t[13], '{0:%Y-%m-%d %H:%M:%S}'.format(datetime.now())) ++ h = h.replace(t[13], '{0:%Y-%m-%d %H:%M:%S}'.format(self.gendate)) + + self.text = h + return self.text --- a/debian/patches/series 2024-07-17 10:23:51.185028817 +0100 --- b/debian/patches/series 2024-07-17 11:57:58.764503421 +0100 @@ -5,3 +5,4 @@ 0005-Include-debian.cmake.patch 0006-Stop-installing-postinst-and-errmsg-files.patch 0007-Fix-installation-path-for-a-few-scripts.patch +0009-Reproducible-builds.patch --- a/debian/rules 2024-07-17 10:23:51.185028817 +0100 --- b/debian/rules 2024-07-17 11:13:38.741568507 +0100 @@ -159,6 +159,9 @@ mv debian/mcstas/usr/share/mcstas/mcstas-module debian/mcxtrace/etc/modulefiles/ chmod -x debian/mcxtrace/etc/modulefiles/* debian/mcxtrace/etc/modulefiles/* + # reproducible build + find debian -name mccode_config.json -print0 | xargs -0rt sed -i -e "s@$(CURDIR)@/builddir@g" + # add editor highlight syntaxing mkdir -p debian/mcstas-comps/usr/share/gtksourceview-4/language-specs/ mkdir -p debian/mcxtrace-comps/usr/share/gtksourceview-4/language-specs/