From 1b6dd4781f901a769718c49f6f255c15fd376f6e Mon Sep 17 00:00:00 2001 From: Alexandru Ardelean Date: Tue, 19 Dec 2017 22:29:52 +0200 Subject: [PATCH] python,python3: add support for SOURCE_DATE_EPOCH var 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 --- lang/python/python/Makefile | 2 +- .../012-add-support-source-date-epoch-pyc.patch | 10 ++++++++++ lang/python/python3/Makefile | 2 +- .../012-add-support-source-date-epoch-pyc.patch | 13 +++++++++++++ 4 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 lang/python/python/patches/012-add-support-source-date-epoch-pyc.patch create mode 100644 lang/python/python3/patches/012-add-support-source-date-epoch-pyc.patch diff --git a/lang/python/python/Makefile b/lang/python/python/Makefile index 0e0ffc25c..b1bccfc8e 100644 --- a/lang/python/python/Makefile +++ b/lang/python/python/Makefile @@ -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 index 000000000..6f33bed1e --- /dev/null +++ b/lang/python/python/patches/012-add-support-source-date-epoch-pyc.patch @@ -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') diff --git a/lang/python/python3/Makefile b/lang/python/python3/Makefile index 924fec58f..b5d9cf46f 100644 --- a/lang/python/python3/Makefile +++ b/lang/python/python3/Makefile @@ -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 index 000000000..4c2c2f7cd --- /dev/null +++ b/lang/python/python3/patches/012-add-support-source-date-epoch-pyc.patch @@ -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