From 576c45eb0a5314121aeb2f8d8931644b65e5be99 Mon Sep 17 00:00:00 2001 From: Alexandru Ardelean Date: Mon, 12 Jun 2017 23:17:05 +0300 Subject: [PATCH] python3: fix distutils path to package when using bytecodes If there is only Python bytecodes, then the __init__.py script will be concatenated, and the __init__.pyc as well. This is becase this bit `path = os.path.join(path, '__init__'+extension)` is iterated twice. This is a bug in Python3, also because we ship bytecodes instead of source code [ with Python & Python3 ]. Python is not affected. Reported-by: Mirko Vogt Signed-off-by: Alexandru Ardelean --- lang/python/python3/Makefile | 2 +- .../008-fix-distutils-path-creation.patch | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 lang/python/python3/patches/008-fix-distutils-path-creation.patch diff --git a/lang/python/python3/Makefile b/lang/python/python3/Makefile index 97c0f6efe..5438a3ca7 100644 --- a/lang/python/python3/Makefile +++ b/lang/python/python3/Makefile @@ -14,7 +14,7 @@ PYTHON_VERSION:=$(PYTHON3_VERSION) PYTHON_VERSION_MICRO:=$(PYTHON3_VERSION_MICRO) PKG_NAME:=python3 -PKG_RELEASE:=2 +PKG_RELEASE:=3 PKG_VERSION:=$(PYTHON_VERSION).$(PYTHON_VERSION_MICRO) PKG_SOURCE:=Python-$(PKG_VERSION).tar.xz diff --git a/lang/python/python3/patches/008-fix-distutils-path-creation.patch b/lang/python/python3/patches/008-fix-distutils-path-creation.patch new file mode 100644 index 000000000..8db6bdc81 --- /dev/null +++ b/lang/python/python3/patches/008-fix-distutils-path-creation.patch @@ -0,0 +1,16 @@ +diff --git a/Lib/imp.py b/Lib/imp.py +index 781ff23..beeac70 100644 +--- a/Lib/imp.py ++++ b/Lib/imp.py +@@ -203,8 +203,9 @@ def load_package(name, path): + extensions = (machinery.SOURCE_SUFFIXES[:] + + machinery.BYTECODE_SUFFIXES[:]) + for extension in extensions: +- path = os.path.join(path, '__init__'+extension) +- if os.path.exists(path): ++ init_path = os.path.join(path, '__init__'+extension) ++ if os.path.exists(init_path): ++ path = init_path + break + else: + raise ValueError('{!r} is not a package'.format(path))