python,python3: add support for SOURCE_DATE_EPOCH var
authorAlexandru Ardelean <ardeleanalex@gmail.com>
Tue, 19 Dec 2017 20:29:52 +0000 (22:29 +0200)
committerAlexandru Ardelean <ardeleanalex@gmail.com>
Tue, 19 Dec 2017 22:11:47 +0000 (00:11 +0200)
See:
https://github.com/openwrt/packages/issues/5278

This should make Python & Python3 packages reproducible
when building.
In my local tests, I got the same sha256 for a sample
.pyc file, so likely this is the solution that should address
this.

Signed-off-by: Alexandru Ardelean <ardeleanalex@gmail.com>
lang/python/python/Makefile
lang/python/python/patches/012-add-support-source-date-epoch-pyc.patch [new file with mode: 0644]
lang/python/python3/Makefile
lang/python/python3/patches/012-add-support-source-date-epoch-pyc.patch [new file with mode: 0644]

index 0e0ffc25c61cffb5533433145bb301bb61256f4f..b1bccfc8e42ca228588f0584469cc4a30e18c80a 100644 (file)
@@ -14,7 +14,7 @@ PKG_NAME:=python
 PKG_VERSION:=$(PYTHON_VERSION).$(PYTHON_VERSION_MICRO)
 # XXX: reset PKG_RELEASE to 1 only if Python's pip & setuptools versions have also bumped;
 #      otherwise, keep bumping PKG_RELEASE
-PKG_RELEASE:=5
+PKG_RELEASE:=6
 
 PKG_SOURCE:=Python-$(PKG_VERSION).tar.xz
 PKG_SOURCE_URL:=https://www.python.org/ftp/python/$(PKG_VERSION)
diff --git a/lang/python/python/patches/012-add-support-source-date-epoch-pyc.patch b/lang/python/python/patches/012-add-support-source-date-epoch-pyc.patch
new file mode 100644 (file)
index 0000000..6f33bed
--- /dev/null
@@ -0,0 +1,10 @@
+--- a/Lib/py_compile.py
++++ b/Lib/py_compile.py
+@@ -108,6 +108,7 @@ def compile(file, cfile=None, dfile=None, doraise=False):
+             timestamp = long(os.fstat(f.fileno()).st_mtime)
+         except AttributeError:
+             timestamp = long(os.stat(file).st_mtime)
++        timestamp = long(os.getenv('SOURCE_DATE_EPOCH', timestamp))
+         codestring = f.read()
+     try:
+         codeobject = __builtin__.compile(codestring, dfile or file,'exec')
index 924fec58f050338ffd95eed9c0ee6187a04b6c61..b5d9cf46f4819efbdf4dc273c358737d1b4590d3 100644 (file)
@@ -16,7 +16,7 @@ PYTHON_VERSION_MICRO:=$(PYTHON3_VERSION_MICRO)
 PKG_NAME:=python3
 # XXX: reset PKG_RELEASE to 1 only if Python's pip & setuptools versions have also bumped;
 #      otherwise, keep bumping PKG_RELEASE
-PKG_RELEASE:=11
+PKG_RELEASE:=12
 PKG_VERSION:=$(PYTHON_VERSION).$(PYTHON_VERSION_MICRO)
 
 PKG_SOURCE:=Python-$(PKG_VERSION).tar.xz
diff --git a/lang/python/python3/patches/012-add-support-source-date-epoch-pyc.patch b/lang/python/python3/patches/012-add-support-source-date-epoch-pyc.patch
new file mode 100644 (file)
index 0000000..4c2c2f7
--- /dev/null
@@ -0,0 +1,13 @@
+--- a/Lib/py_compile.py
++++ b/Lib/py_compile.py
+@@ -137,8 +137,9 @@ def compile(file, cfile=None, dfile=None
+     except FileExistsError:
+         pass
+     source_stats = loader.path_stats(file)
++    mtime = int(os.getenv('SOURCE_DATE_EPOCH', source_stats['mtime']))
+     bytecode = importlib._bootstrap_external._code_to_bytecode(
+-            code, source_stats['mtime'], source_stats['size'])
++            code, mtime, source_stats['size'])
+     mode = importlib._bootstrap_external._calc_mode(file)
+     importlib._bootstrap_external._write_atomic(cfile, bytecode, mode)
+     return cfile