poky/meta/recipes-devtools/python/python3/0001-Do-not-hardcode-lib-as-location-for-site-packages-an.patch
Alexander Kanavin 28c5a5033e python3: update to 3.8.1
Drop backports, rebase other patches.

0001-main.c-if-OEPYTHON3HOME-is-set-use-instead-of-PYTHON.patch
is removed as the use case (allowing python 2 and 3 to coexist
in SDKs) is no longer relevant with Python 2.x reaching end of line
and upstream has refactored the code making a rebase difficult.
If needed, please re-add the patch to py2, rather than py3.

Python 3.8 no longer adds "m" to "3.8" in paths, so adjust the recipes
and classes accordingly.

The manifest for the 3.8.0 version is updated; particularly pkgutil
module is now packaged in -core (as other things in core need it);
this also necessitates allowing empty -pkgutil package to avoid
breakage across layers.

(From OE-Core rev: e6ab9f16b92aa1abdae82c535c1a452a1341b0e2)

Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2020-01-21 12:52:52 +00:00

215 lines
8.5 KiB
Diff

From a078b6ff1492e848ad1055764fb9a414abaf3e12 Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Tue, 5 Feb 2019 15:52:02 +0100
Subject: [PATCH] Do not hardcode "lib" as location for modules, site-packages
and lib-dynload
Upstream-Status: Inappropriate [oe-core specific]
Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
---
Include/pythonrun.h | 2 ++
Lib/site.py | 4 ++--
Makefile.pre.in | 5 +++--
Modules/getpath.c | 22 ++++++++++++++--------
Python/getplatform.c | 10 ++++++++++
Python/sysmodule.c | 2 ++
6 files changed, 33 insertions(+), 12 deletions(-)
diff --git a/Include/pythonrun.h b/Include/pythonrun.h
index 46091e0..61b2e15 100644
--- a/Include/pythonrun.h
+++ b/Include/pythonrun.h
@@ -7,6 +7,8 @@
extern "C" {
#endif
+PyAPI_FUNC(const char *) Py_GetLib(void);
+
#ifndef Py_LIMITED_API
PyAPI_FUNC(int) PyRun_SimpleStringFlags(const char *, PyCompilerFlags *);
PyAPI_FUNC(int) PyRun_AnyFileExFlags(
diff --git a/Lib/site.py b/Lib/site.py
index a065ab0..1d720ef 100644
--- a/Lib/site.py
+++ b/Lib/site.py
@@ -335,12 +335,12 @@ def getsitepackages(prefixes=None):
seen.add(prefix)
if os.sep == '/':
- sitepackages.append(os.path.join(prefix, "lib",
+ sitepackages.append(os.path.join(prefix, sys.lib,
"python%d.%d" % sys.version_info[:2],
"site-packages"))
else:
sitepackages.append(prefix)
- sitepackages.append(os.path.join(prefix, "lib", "site-packages"))
+ sitepackages.append(os.path.join(prefix, sys.lib, "site-packages"))
return sitepackages
def addsitepackages(known_paths, prefixes=None):
diff --git a/Makefile.pre.in b/Makefile.pre.in
index 65665df..be49140 100644
--- a/Makefile.pre.in
+++ b/Makefile.pre.in
@@ -143,7 +143,7 @@ LIBDIR= @libdir@
MANDIR= @mandir@
INCLUDEDIR= @includedir@
CONFINCLUDEDIR= $(exec_prefix)/include
-SCRIPTDIR= $(prefix)/lib
+SCRIPTDIR= @libdir@
ABIFLAGS= @ABIFLAGS@
# Detailed destination directories
@@ -753,6 +753,7 @@ Modules/getpath.o: $(srcdir)/Modules/getpath.c Makefile
-DEXEC_PREFIX='"$(exec_prefix)"' \
-DVERSION='"$(VERSION)"' \
-DVPATH='"$(VPATH)"' \
+ -DLIB='"$(LIB)"' \
-o $@ $(srcdir)/Modules/getpath.c
Programs/python.o: $(srcdir)/Programs/python.c
@@ -868,7 +869,7 @@ regen-symbol: $(srcdir)/Include/graminit.h
Python/compile.o Python/symtable.o Python/ast_unparse.o Python/ast.o Python/future.o Parser/parsetok.o: $(srcdir)/Include/graminit.h $(srcdir)/Include/Python-ast.h
Python/getplatform.o: $(srcdir)/Python/getplatform.c
- $(CC) -c $(PY_CORE_CFLAGS) -DPLATFORM='"$(MACHDEP)"' -o $@ $(srcdir)/Python/getplatform.c
+ $(CC) -c $(PY_CORE_CFLAGS) -DPLATFORM='"$(MACHDEP)"' -DLIB='"$(LIB)"' -o $@ $(srcdir)/Python/getplatform.c
Python/importdl.o: $(srcdir)/Python/importdl.c
$(CC) -c $(PY_CORE_CFLAGS) -I$(DLINCLDIR) -o $@ $(srcdir)/Python/importdl.c
diff --git a/Modules/getpath.c b/Modules/getpath.c
index b727f66..c003e46 100644
--- a/Modules/getpath.c
+++ b/Modules/getpath.c
@@ -128,6 +128,7 @@ typedef struct {
wchar_t *exec_prefix; /* EXEC_PREFIX macro */
wchar_t *lib_python; /* "lib/pythonX.Y" */
+ wchar_t *multilib_python; /* "lib[suffix]/pythonX.Y" */
int prefix_found; /* found platform independent libraries? */
int exec_prefix_found; /* found the platform dependent libraries? */
@@ -386,7 +387,7 @@ search_for_prefix(PyCalculatePath *calculate, _PyPathConfig *pathconfig,
if (delim) {
*delim = L'\0';
}
- status = joinpath(prefix, calculate->lib_python, prefix_len);
+ status = joinpath(prefix, calculate->multilib_python, prefix_len);
if (_PyStatus_EXCEPTION(status)) {
return status;
}
@@ -444,7 +445,7 @@ search_for_prefix(PyCalculatePath *calculate, _PyPathConfig *pathconfig,
do {
/* Path: <argv0_path or substring> / <lib_python> / LANDMARK */
size_t n = wcslen(prefix);
- status = joinpath(prefix, calculate->lib_python, prefix_len);
+ status = joinpath(prefix, calculate->multilib_python, prefix_len);
if (_PyStatus_EXCEPTION(status)) {
return status;
}
@@ -467,7 +468,7 @@ search_for_prefix(PyCalculatePath *calculate, _PyPathConfig *pathconfig,
if (safe_wcscpy(prefix, calculate->prefix, prefix_len) < 0) {
return PATHLEN_ERR();
}
- status = joinpath(prefix, calculate->lib_python, prefix_len);
+ status = joinpath(prefix, calculate->multilib_python, prefix_len);
if (_PyStatus_EXCEPTION(status)) {
return status;
}
@@ -510,7 +511,7 @@ calculate_prefix(PyCalculatePath *calculate, _PyPathConfig *pathconfig,
if (safe_wcscpy(prefix, calculate->prefix, prefix_len) < 0) {
return PATHLEN_ERR();
}
- status = joinpath(prefix, calculate->lib_python, prefix_len);
+ status = joinpath(prefix, calculate->multilib_python, prefix_len);
if (_PyStatus_EXCEPTION(status)) {
return status;
}
@@ -635,7 +636,7 @@ search_for_exec_prefix(PyCalculatePath *calculate, _PyPathConfig *pathconfig,
return PATHLEN_ERR();
}
}
- status = joinpath(exec_prefix, calculate->lib_python, exec_prefix_len);
+ status = joinpath(exec_prefix, calculate->multilib_python, exec_prefix_len);
if (_PyStatus_EXCEPTION(status)) {
return status;
}
@@ -667,7 +668,7 @@ search_for_exec_prefix(PyCalculatePath *calculate, _PyPathConfig *pathconfig,
do {
/* Path: <argv0_path or substring> / <lib_python> / "lib-dynload" */
size_t n = wcslen(exec_prefix);
- status = joinpath(exec_prefix, calculate->lib_python, exec_prefix_len);
+ status = joinpath(exec_prefix, calculate->multilib_python, exec_prefix_len);
if (_PyStatus_EXCEPTION(status)) {
return status;
}
@@ -689,7 +690,7 @@ search_for_exec_prefix(PyCalculatePath *calculate, _PyPathConfig *pathconfig,
if (safe_wcscpy(exec_prefix, calculate->exec_prefix, exec_prefix_len) < 0) {
return PATHLEN_ERR();
}
- status = joinpath(exec_prefix, calculate->lib_python, exec_prefix_len);
+ status = joinpath(exec_prefix, calculate->multilib_python, exec_prefix_len);
if (_PyStatus_EXCEPTION(status)) {
return status;
}
@@ -928,7 +929,7 @@ calculate_argv0_path(PyCalculatePath *calculate, const wchar_t *program_full_pat
return PATHLEN_ERR();
}
reduce(argv0_path);
- status = joinpath(argv0_path, calculate->lib_python, argv0_path_len);
+ status = joinpath(argv0_path, calculate->multilib_python, argv0_path_len);
if (_PyStatus_EXCEPTION(status)) {
PyMem_RawFree(wbuf);
return status;
@@ -1201,6 +1202,10 @@ calculate_init(PyCalculatePath *calculate, const PyConfig *config)
if (!calculate->lib_python) {
return DECODE_LOCALE_ERR("EXEC_PREFIX define", len);
}
+ calculate->multilib_python = Py_DecodeLocale(LIB "/python" VERSION, &len);
+ if (!calculate->multilib_python) {
+ return DECODE_LOCALE_ERR("EXEC_PREFIX define", len);
+ }
calculate->warnings = config->pathconfig_warnings;
calculate->pythonpath_env = config->pythonpath_env;
@@ -1216,6 +1221,7 @@ calculate_free(PyCalculatePath *calculate)
PyMem_RawFree(calculate->prefix);
PyMem_RawFree(calculate->exec_prefix);
PyMem_RawFree(calculate->lib_python);
+ PyMem_RawFree(calculate->multilib_python);
PyMem_RawFree(calculate->path_env);
}
diff --git a/Python/getplatform.c b/Python/getplatform.c
index 81a0f7a..d55396b 100644
--- a/Python/getplatform.c
+++ b/Python/getplatform.c
@@ -10,3 +10,13 @@ Py_GetPlatform(void)
{
return PLATFORM;
}
+
+#ifndef LIB
+#define LIB "lib"
+#endif
+
+const char *
+Py_GetLib(void)
+{
+ return LIB;
+}
diff --git a/Python/sysmodule.c b/Python/sysmodule.c
index 5b0fb81..0dce754 100644
--- a/Python/sysmodule.c
+++ b/Python/sysmodule.c
@@ -2668,6 +2668,8 @@ _PySys_InitCore(_PyRuntimeState *runtime, PyInterpreterState *interp,
PyUnicode_FromString(Py_GetCopyright()));
SET_SYS_FROM_STRING("platform",
PyUnicode_FromString(Py_GetPlatform()));
+ SET_SYS_FROM_STRING("lib",
+ PyUnicode_FromString(Py_GetLib()));
SET_SYS_FROM_STRING("maxsize",
PyLong_FromSsize_t(PY_SSIZE_T_MAX));
SET_SYS_FROM_STRING("float_info",