Skip to content

Commit be86f3d

Browse files
graywolfcivodul
authored andcommitted
gnu: python: Make the build reproducible.
While Python build was reproducible on a single machine, once multiple file systems entered the picture, it was no longer true. The solution adopted by the upstream (and Debian) was cherry-picked. More info: <python/cpython#8226>. * gnu/packages/python.scm (python-3.10) [source]: Apply reproducibility patch. Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com> Modified-by: Maxim Cournoyer <maxim.cournoyer@gmail.com> Change-Id: I0273dc0f8511a7acdcc2b462a26cc29a9756c801
1 parent 3de2265 commit be86f3d

File tree

3 files changed

+32
-0
lines changed

3 files changed

+32
-0
lines changed

gnu/local.mk

+1
Original file line numberDiff line numberDiff line change
@@ -1970,6 +1970,7 @@ dist_patch_DATA = \
19701970
%D%/packages/patches/python-3-hurd-configure.patch \
19711971
%D%/packages/patches/python-angr-addition-type-error.patch \
19721972
%D%/packages/patches/python-angr-check-exec-deps.patch \
1973+
%D%/packages/patches/python-3-reproducible-build.patch \
19731974
%D%/packages/patches/python-aionotify-0.2.0-py3.8.patch \
19741975
%D%/packages/patches/python-argcomplete-1.11.1-fish31.patch \
19751976
%D%/packages/patches/python-cross-compile.patch \
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
From 6c8ea7c1dacd42f3ba00440231ec0e6b1a38300d Mon Sep 17 00:00:00 2001
2+
From: Inada Naoki <songofacandy@gmail.com>
3+
Date: Sat, 14 Jul 2018 00:46:11 +0900
4+
Subject: [PATCH] Use FLAG_REF always for interned strings
5+
6+
---
7+
Python/marshal.c | 9 +++++++--
8+
1 file changed, 7 insertions(+), 2 deletions(-)
9+
10+
diff --git a/Python/marshal.c b/Python/marshal.c
11+
index 6d06266c6a8e2e..51db2e3b2e29a2 100644
12+
--- a/Python/marshal.c
13+
+++ b/Python/marshal.c
14+
@@ -275,9 +275,14 @@ w_ref(PyObject *v, char *flag, WFILE *p)
15+
if (p->version < 3 || p->hashtable == NULL)
16+
return 0; /* not writing object references */
17+
18+
- /* if it has only one reference, it definitely isn't shared */
19+
- if (Py_REFCNT(v) == 1)
20+
+ /* If it has only one reference, it definitely isn't shared.
21+
+ * But we use TYPE_REF always for interned string, to PYC file stable
22+
+ * as possible.
23+
+ */
24+
+ if (Py_REFCNT(v) == 1 &&
25+
+ !(PyUnicode_CheckExact(v) && PyUnicode_CHECK_INTERNED(v))) {
26+
return 0;
27+
+ }
28+
29+
entry = _Py_HASHTABLE_GET_ENTRY(p->hashtable, v);
30+
if (entry != NULL) {

gnu/packages/python.scm

+1
Original file line numberDiff line numberDiff line change
@@ -435,6 +435,7 @@ data types.")
435435
"python-3-deterministic-build-info.patch"
436436
"python-3-fix-tests.patch"
437437
"python-3-hurd-configure.patch"
438+
"python-3-reproducible-build.patch"
438439
"python-3-search-paths.patch"))
439440
(sha256
440441
(base32

0 commit comments

Comments
 (0)