Source: brian Version: 2.4.2-6 Severity: normal Tags: patch User: reproducible-bui...@lists.alioth.debian.org Usertags: timestamps, randomness X-Debbugs-Cc: nil...@debian.org, reproducible-b...@lists.alioth.debian.org
Dear Maintainer, Brian does not build reproducibly because: a) It injects timestamps into docs b) It injects files and text in random order into files Super thanks to Felix C. Stegerman <f...@obfusk.net> for helping with patch for the latter reason! :-) I've committed a patch to salsa here[1] and will upload post bullseye release. Also attaching the corresponding patch with this email [1]: https://salsa.debian.org/med-team/brian/-/commit/f16a61b846edb138e0d81cba1cc5e58f0e625ccc Nilesh -- System Information: Debian Release: bullseye/sid APT prefers testing APT policy: (500, 'testing') Architecture: amd64 (x86_64) Kernel: Linux 5.7.0-2-amd64 (SMP w/8 CPU threads) Kernel taint flags: TAINT_OOT_MODULE, TAINT_UNSIGNED_MODULE Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), LANGUAGE not set Shell: /bin/sh linked to /usr/bin/dash Init: systemd (via /run/systemd/system) LSM: AppArmor: enabled
From f16a61b846edb138e0d81cba1cc5e58f0e625ccc Mon Sep 17 00:00:00 2001 From: Nilesh Patra <nil...@debian.org> Date: Thu, 10 Jun 2021 22:03:05 +0530 Subject: [PATCH] Make build reproducible --- debian/patches/reproducible.patch | 65 +++++++++++++++++++++++++++++++ debian/patches/series | 1 + debian/rules | 1 + 3 files changed, 67 insertions(+) create mode 100644 debian/patches/reproducible.patch diff --git a/debian/patches/reproducible.patch b/debian/patches/reproducible.patch new file mode 100644 index 00000000..05db27f0 --- /dev/null +++ b/debian/patches/reproducible.patch @@ -0,0 +1,65 @@ +Description: Fix timestamps, insert files in deterministic order +Author: Nilesh Patra <nil...@debian.org> +Last-Update: 2021-06-10 +--- a/dev/tools/release/setversion.py ++++ b/dev/tools/release/setversion.py +@@ -8,7 +8,7 @@ + * README.txt version + ''' + +-import os, sys, re, datetime ++import os, sys, re, datetime, time + + + def setversion(version): +@@ -47,7 +47,9 @@ + + + def setreleasedate(): +- releasedate = str(datetime.date.today()) ++ releasedate = str(datetime.datetime.utcfromtimestamp( ++ int(os.environ.get('SOURCE_DATE_EPOCH', time.time())) ++ ).date()) + pathname = os.path.abspath(os.path.dirname(__file__)) + os.chdir(pathname) + os.chdir('../../../') +--- a/docs_sphinx/conf.py ++++ b/docs_sphinx/conf.py +@@ -99,8 +99,10 @@ + + # General information about the project. + project = 'Brian 2' +-import datetime +-copyright = '2012–{}, Brian authors'.format(datetime.datetime.today().year) ++import datetime, time ++copyright = '2012–{}, Brian authors'.format(datetime.datetime.utcfromtimestamp( ++ int(os.environ.get('SOURCE_DATE_EPOCH', time.time())) ++ ).year) + + # The version info for the project you're documenting, acts as replacement for + # |version| and |release|, also used in various other places throughout the +--- a/brian2/sphinxext/examplefinder.py ++++ b/brian2/sphinxext/examplefinder.py +@@ -54,9 +54,9 @@ + ''' + name = obj.__name__ + examples_map = get_examples_map() +- examples = the_examples_map[name] ++ examples = sorted(the_examples_map[name]) + tutorials_map = get_tutorials_map() +- tutorials = the_tutorials_map[name] ++ tutorials = sorted(the_tutorials_map[name]) + if len(examples+tutorials)==0: + return '' + txt = 'Tutorials and examples using this' +--- a/brian2/sphinxext/generate_examples.py ++++ b/brian2/sphinxext/generate_examples.py +@@ -160,7 +160,7 @@ + category_additional_files[relpath].append((file, full_name)) + with codecs.open(fname, 'rU', encoding='utf-8') as f: + content = f.read() +- output = file + '\n' + '=' * len(title) + '\n\n' ++ output = file + '\n' + '=' * len(file) + '\n\n' + output += '.. code:: none\n\n' + content_lines = ['\t' + l for l in content.split('\n')] + output += '\n'.join(content_lines) diff --git a/debian/patches/series b/debian/patches/series index 742a3d6c..257f3619 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -1,3 +1,4 @@ ignore_failing_test.patch privacy.patch gsl-compiler-arg.patch +reproducible.patch diff --git a/debian/rules b/debian/rules index a0cd4b0c..d1719605 100755 --- a/debian/rules +++ b/debian/rules @@ -1,6 +1,7 @@ #!/usr/bin/make -f # -*- makefile -*- +export LANG=C.UTF-8 LC_ALL=C.UTF-8 ifeq (,$(findstring get-orig-source, $(MAKECMDGOALS))) export http_proxy=http://127.0.0.1:9/ endif -- GitLab