summaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/python/python3
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-devtools/python/python3')
-rw-r--r--meta/recipes-devtools/python/python3/0001-Do-not-add-usr-lib-termcap-to-linker-flags-to-avoid-.patch14
-rw-r--r--meta/recipes-devtools/python/python3/0001-Do-not-hardcode-lib-as-location-for-site-packages-an.patch196
-rw-r--r--meta/recipes-devtools/python/python3/0001-Do-not-use-the-shell-version-of-python-config-that-w.patch7
-rw-r--r--meta/recipes-devtools/python/python3/0001-Don-t-search-system-for-headers-libraries.patch27
-rw-r--r--meta/recipes-devtools/python/python3/0001-Lib-pty.py-handle-stdin-I-O-errors-same-way-as-maste.patch47
-rw-r--r--meta/recipes-devtools/python/python3/0001-Lib-sysconfig.py-use-prefix-value-from-build-configu.patch32
-rw-r--r--meta/recipes-devtools/python/python3/0001-Makefile-do-not-compile-.pyc-in-parallel.patch65
-rw-r--r--meta/recipes-devtools/python/python3/0001-Makefile.pre-use-qemu-wrapper-when-gathering-profile.patch7
-rw-r--r--meta/recipes-devtools/python/python3/0001-Skip-failing-tests-due-to-load-variability-on-YP-AB.patch50
-rw-r--r--meta/recipes-devtools/python/python3/0001-Use-FLAG_REF-always-for-interned-strings.patch33
-rw-r--r--meta/recipes-devtools/python/python3/0001-bpo-36852-proper-detection-of-mips-architecture-for-.patch206
-rw-r--r--meta/recipes-devtools/python/python3/0001-distutils-sysconfig-append-STAGING_LIBDIR-python-sys.patch24
-rw-r--r--meta/recipes-devtools/python/python3/0001-python3-use-cc_basename-to-replace-CC-for-checking-c.patch45
-rw-r--r--meta/recipes-devtools/python/python3/0001-sysconfig.py-use-platlibdir-also-for-purelib.patch28
-rw-r--r--meta/recipes-devtools/python/python3/0001-test_ctypes.test_find-skip-without-tools-sdk.patch34
-rw-r--r--meta/recipes-devtools/python/python3/0001-test_locale.py-correct-the-test-output-format.patch46
-rw-r--r--meta/recipes-devtools/python/python3/0002-Don-t-do-runtime-test-to-get-float-byte-order.patch199
-rw-r--r--meta/recipes-devtools/python/python3/0003-setup.py-pass-missing-libraries-to-Extension-for-mul.patch80
-rw-r--r--meta/recipes-devtools/python/python3/0017-setup.py-do-not-report-missing-dependencies-for-disa.patch38
-rw-r--r--meta/recipes-devtools/python/python3/0020-configure.ac-setup.py-do-not-add-a-curses-include-pa.patch49
-rw-r--r--meta/recipes-devtools/python/python3/12-distutils-prefix-is-inside-staging-area.patch50
-rw-r--r--meta/recipes-devtools/python/python3/avoid_warning_about_tkinter.patch33
-rw-r--r--meta/recipes-devtools/python/python3/cgi_py.patch4
-rw-r--r--meta/recipes-devtools/python/python3/create_manifest3.py47
-rw-r--r--meta/recipes-devtools/python/python3/crosspythonpath.patch34
-rw-r--r--meta/recipes-devtools/python/python3/get_module_deps3.py92
-rw-r--r--meta/recipes-devtools/python/python3/makerace.patch32
-rw-r--r--meta/recipes-devtools/python/python3/python-config.patch31
-rw-r--r--meta/recipes-devtools/python/python3/python3-manifest.json228
-rw-r--r--meta/recipes-devtools/python/python3/reformat_sysconfig.py21
-rw-r--r--meta/recipes-devtools/python/python3/run-ptest2
31 files changed, 1064 insertions, 737 deletions
diff --git a/meta/recipes-devtools/python/python3/0001-Do-not-add-usr-lib-termcap-to-linker-flags-to-avoid-.patch b/meta/recipes-devtools/python/python3/0001-Do-not-add-usr-lib-termcap-to-linker-flags-to-avoid-.patch
index 09f279ba1d..62ef6efc28 100644
--- a/meta/recipes-devtools/python/python3/0001-Do-not-add-usr-lib-termcap-to-linker-flags-to-avoid-.patch
+++ b/meta/recipes-devtools/python/python3/0001-Do-not-add-usr-lib-termcap-to-linker-flags-to-avoid-.patch
@@ -1,4 +1,4 @@
-From 23294c6ba6896115828293fdb7e67b47b38ba675 Mon Sep 17 00:00:00 2001
+From 80f872e4573f542d33f91514538755557d566f79 Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Fri, 25 Jan 2019 19:04:13 +0100
Subject: [PATCH] Do not add /usr/lib/termcap to linker flags to avoid host
@@ -12,14 +12,14 @@ Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
1 file changed, 1 deletion(-)
diff --git a/setup.py b/setup.py
-index b4357e3..fbec00d 100644
+index 43e807f..11b5cf5 100644
--- a/setup.py
+++ b/setup.py
-@@ -856,7 +856,6 @@ class PyBuildExt(build_ext):
+@@ -1149,7 +1149,6 @@ class PyBuildExt(build_ext):
'termcap'):
readline_libs.append('termcap')
- exts.append( Extension('readline', ['readline.c'],
-- library_dirs=['/usr/lib/termcap'],
- extra_link_args=readline_extra_link_args,
- libraries=readline_libs) )
+ self.add(Extension('readline', ['readline.c'],
+- library_dirs=['/usr/lib/termcap'],
+ extra_link_args=readline_extra_link_args,
+ libraries=readline_libs))
else:
diff --git a/meta/recipes-devtools/python/python3/0001-Do-not-hardcode-lib-as-location-for-site-packages-an.patch b/meta/recipes-devtools/python/python3/0001-Do-not-hardcode-lib-as-location-for-site-packages-an.patch
deleted file mode 100644
index 661f52d01f..0000000000
--- a/meta/recipes-devtools/python/python3/0001-Do-not-hardcode-lib-as-location-for-site-packages-an.patch
+++ /dev/null
@@ -1,196 +0,0 @@
-From 0fbdad1eaf541a8e92be81f39514cd249b3b0801 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 | 18 ++++++++++++------
- Python/getplatform.c | 10 ++++++++++
- Python/sysmodule.c | 2 ++
- 6 files changed, 31 insertions(+), 10 deletions(-)
-
-diff --git a/Include/pythonrun.h b/Include/pythonrun.h
-index 6f0c6fc..0a17edd 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_AnyFileFlags(FILE *, const char *, PyCompilerFlags *);
-diff --git a/Lib/site.py b/Lib/site.py
-index ffd132b..b55f6d8 100644
---- a/Lib/site.py
-+++ b/Lib/site.py
-@@ -334,12 +334,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 6e81b2f..671a20e 100644
---- a/Makefile.pre.in
-+++ b/Makefile.pre.in
-@@ -142,7 +142,7 @@ LIBDIR= @libdir@
- MANDIR= @mandir@
- INCLUDEDIR= @includedir@
- CONFINCLUDEDIR= $(exec_prefix)/include
--SCRIPTDIR= $(prefix)/lib
-+SCRIPTDIR= @libdir@
- ABIFLAGS= @ABIFLAGS@
-
- # Detailed destination directories
-@@ -768,6 +768,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
-@@ -856,7 +857,7 @@ regen-opcode:
- Python/compile.o Python/symtable.o Python/ast_unparse.o Python/ast.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 e6a3e8e..0c62af6 100644
---- a/Modules/getpath.c
-+++ b/Modules/getpath.c
-@@ -123,6 +123,7 @@ typedef struct {
- wchar_t *exec_prefix; /* EXEC_PREFIX define */
-
- wchar_t *lib_python; /* "lib/pythonX.Y" */
-+ wchar_t *multilib_python; /* "lib[suffix]/pythonX.Y" */
- wchar_t argv0_path[MAXPATHLEN+1];
- wchar_t zip_path[MAXPATHLEN+1]; /* ".../lib/pythonXY.zip" */
-
-@@ -314,7 +315,7 @@ search_for_prefix(const _PyCoreConfig *core_config,
- if (delim) {
- *delim = L'\0';
- }
-- joinpath(prefix, calculate->lib_python);
-+ joinpath(prefix, calculate->multilib_python);
- joinpath(prefix, LANDMARK);
- return 1;
- }
-@@ -343,7 +344,7 @@ search_for_prefix(const _PyCoreConfig *core_config,
- copy_absolute(prefix, calculate->argv0_path, MAXPATHLEN+1);
- do {
- n = wcslen(prefix);
-- joinpath(prefix, calculate->lib_python);
-+ joinpath(prefix, calculate->multilib_python);
- joinpath(prefix, LANDMARK);
- if (ismodule(prefix)) {
- return 1;
-@@ -355,7 +356,7 @@ search_for_prefix(const _PyCoreConfig *core_config,
- /* Look at configure's PREFIX */
- wcsncpy(prefix, calculate->prefix, MAXPATHLEN);
- prefix[MAXPATHLEN] = L'\0';
-- joinpath(prefix, calculate->lib_python);
-+ joinpath(prefix, calculate->multilib_python);
- joinpath(prefix, LANDMARK);
- if (ismodule(prefix)) {
- return 1;
-@@ -427,7 +428,7 @@ search_for_exec_prefix(const _PyCoreConfig *core_config,
- wcsncpy(exec_prefix, core_config->home, MAXPATHLEN);
- }
- exec_prefix[MAXPATHLEN] = L'\0';
-- joinpath(exec_prefix, calculate->lib_python);
-+ joinpath(exec_prefix, calculate->multilib_python);
- joinpath(exec_prefix, L"lib-dynload");
- return 1;
- }
-@@ -464,7 +465,7 @@ search_for_exec_prefix(const _PyCoreConfig *core_config,
- copy_absolute(exec_prefix, calculate->argv0_path, MAXPATHLEN+1);
- do {
- n = wcslen(exec_prefix);
-- joinpath(exec_prefix, calculate->lib_python);
-+ joinpath(exec_prefix, calculate->multilib_python);
- joinpath(exec_prefix, L"lib-dynload");
- if (isdir(exec_prefix)) {
- return 1;
-@@ -476,7 +477,7 @@ search_for_exec_prefix(const _PyCoreConfig *core_config,
- /* Look at configure's EXEC_PREFIX */
- wcsncpy(exec_prefix, calculate->exec_prefix, MAXPATHLEN);
- exec_prefix[MAXPATHLEN] = L'\0';
-- joinpath(exec_prefix, calculate->lib_python);
-+ joinpath(exec_prefix, calculate->multilib_python);
- joinpath(exec_prefix, L"lib-dynload");
- if (isdir(exec_prefix)) {
- return 1;
-@@ -871,6 +872,10 @@ calculate_init(PyCalculatePath *calculate,
- 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);
-+ }
- return _Py_INIT_OK();
- }
-
-@@ -882,6 +887,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 efe5b29..de77b17 100644
---- a/Python/sysmodule.c
-+++ b/Python/sysmodule.c
-@@ -2319,6 +2319,8 @@ _PySys_BeginInit(PyObject **sysmod)
- 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",
diff --git a/meta/recipes-devtools/python/python3/0001-Do-not-use-the-shell-version-of-python-config-that-w.patch b/meta/recipes-devtools/python/python3/0001-Do-not-use-the-shell-version-of-python-config-that-w.patch
index 83fd52d87f..d98f243cb1 100644
--- a/meta/recipes-devtools/python/python3/0001-Do-not-use-the-shell-version-of-python-config-that-w.patch
+++ b/meta/recipes-devtools/python/python3/0001-Do-not-use-the-shell-version-of-python-config-that-w.patch
@@ -1,4 +1,4 @@
-From 148861fa16f2aaacd518770f337ea54b5182f981 Mon Sep 17 00:00:00 2001
+From 2406432449784243b7590009d42bd0e871253b2e Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Tue, 29 Jan 2019 15:03:01 +0100
Subject: [PATCH] Do not use the shell version of python-config that was
@@ -9,15 +9,16 @@ outputs directories correctly.
Upstream-Status: Inappropriate [oe-specific]
Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
+
---
Makefile.pre.in | 9 +++------
1 file changed, 3 insertions(+), 6 deletions(-)
diff --git a/Makefile.pre.in b/Makefile.pre.in
-index 2d2e11f..cc19942 100644
+index ee85f35..f0aedb7 100644
--- a/Makefile.pre.in
+++ b/Makefile.pre.in
-@@ -1431,12 +1431,9 @@ python-config: $(srcdir)/Misc/python-config.in Misc/python-config.sh
+@@ -1640,12 +1640,9 @@ python-config: $(srcdir)/Misc/python-config.in Misc/python-config.sh
sed -e "s,@EXENAME@,$(BINDIR)/python$(LDVERSION)$(EXE)," < $(srcdir)/Misc/python-config.in >python-config.py
@ # Replace makefile compat. variable references with shell script compat. ones; $(VAR) -> ${VAR}
LC_ALL=C sed -e 's,\$$(\([A-Za-z0-9_]*\)),\$$\{\1\},g' < Misc/python-config.sh >python-config
diff --git a/meta/recipes-devtools/python/python3/0001-Don-t-search-system-for-headers-libraries.patch b/meta/recipes-devtools/python/python3/0001-Don-t-search-system-for-headers-libraries.patch
new file mode 100644
index 0000000000..5485020eb4
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/0001-Don-t-search-system-for-headers-libraries.patch
@@ -0,0 +1,27 @@
+From b6ead2d17ceafed47e598b6f50f3ff669deec5ab Mon Sep 17 00:00:00 2001
+From: Jeremy Puhlman <jpuhlman@mvista.com>
+Date: Wed, 4 Mar 2020 00:06:42 +0000
+Subject: [PATCH] Don't search system for headers/libraries
+
+Upstream-Status: Inappropriate [oe-core specific]
+Signed-off-by: Jeremy Puhlman <jpuhlman@mvista.com>
+
+---
+ setup.py | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/setup.py b/setup.py
+index c190002..5ef368d 100644
+--- a/setup.py
++++ b/setup.py
+@@ -854,8 +854,8 @@ class PyBuildExt(build_ext):
+ add_dir_to_list(self.compiler.include_dirs,
+ sysconfig.get_config_var("INCLUDEDIR"))
+
+- system_lib_dirs = ['/lib64', '/usr/lib64', '/lib', '/usr/lib']
+- system_include_dirs = ['/usr/include']
++ system_lib_dirs = []
++ system_include_dirs = []
+ # lib_dirs and inc_dirs are used to search for files;
+ # if a file is found in one of those directories, it can
+ # be assumed that no additional -I,-L directives are needed.
diff --git a/meta/recipes-devtools/python/python3/0001-Lib-pty.py-handle-stdin-I-O-errors-same-way-as-maste.patch b/meta/recipes-devtools/python/python3/0001-Lib-pty.py-handle-stdin-I-O-errors-same-way-as-maste.patch
new file mode 100644
index 0000000000..df5179e877
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/0001-Lib-pty.py-handle-stdin-I-O-errors-same-way-as-maste.patch
@@ -0,0 +1,47 @@
+From 86061629f4a179e740a17e53dd2c98ab47af2fe2 Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex@linutronix.de>
+Date: Thu, 16 Sep 2021 16:35:37 +0200
+Subject: [PATCH] Lib/pty.py: handle stdin I/O errors same way as master I/O
+ errors
+
+reading stdin can throw the same I/O errors as reading from master fd does,
+e.g. when running under Yocto's test harness:
+======================================================================
+ERROR: test_spawn_doesnt_hang (test.test_pty.PtyTest)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+ File "/usr/lib/python3.10/test/test_pty.py", line 316, in test_spawn_doesnt_hang
+ pty.spawn([sys.executable, '-c', 'print("hi there")'])
+ File "/usr/lib/python3.10/pty.py", line 181, in spawn
+ _copy(master_fd, master_read, stdin_read)
+ File "/usr/lib/python3.10/pty.py", line 157, in _copy
+ data = stdin_read(STDIN_FILENO)
+ File "/usr/lib/python3.10/pty.py", line 132, in _read
+ return os.read(fd, 1024)
+OSError: [Errno 5] Input/output error
+
+So let's treat both channels the same.
+
+Upstream-Status: Submitted [https://github.com/python/cpython/pull/28388]
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+
+---
+ Lib/pty.py | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/Lib/pty.py b/Lib/pty.py
+index 8d8ce40..35439c6 100644
+--- a/Lib/pty.py
++++ b/Lib/pty.py
+@@ -154,7 +154,10 @@ def _copy(master_fd, master_read=_read, stdin_read=_read):
+ os.write(STDOUT_FILENO, data)
+
+ if STDIN_FILENO in rfds:
+- data = stdin_read(STDIN_FILENO)
++ try:
++ data = stdin_read(STDIN_FILENO)
++ except OSError:
++ data = b""
+ if not data:
+ fds.remove(STDIN_FILENO)
+ else:
diff --git a/meta/recipes-devtools/python/python3/0001-Lib-sysconfig.py-use-prefix-value-from-build-configu.patch b/meta/recipes-devtools/python/python3/0001-Lib-sysconfig.py-use-prefix-value-from-build-configu.patch
new file mode 100644
index 0000000000..a9240b3c8a
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/0001-Lib-sysconfig.py-use-prefix-value-from-build-configu.patch
@@ -0,0 +1,32 @@
+From 01d209277e145072e478d8b9acfea3638ee16cdc Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex@linutronix.de>
+Date: Fri, 10 Sep 2021 12:28:31 +0200
+Subject: [PATCH] Lib/sysconfig.py: use prefix value from build configuration
+ file
+
+This allows correctly substituting them for target installs using
+native python.
+
+Upstream-Status: Inappropriate [oe-core cross builds]
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+
+---
+ Lib/sysconfig.py | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py
+index e64bcdc..40c6b3e 100644
+--- a/Lib/sysconfig.py
++++ b/Lib/sysconfig.py
+@@ -613,6 +613,11 @@ def get_config_vars(*args):
+ _init_non_posix(_CONFIG_VARS)
+ if os.name == 'posix':
+ _init_posix(_CONFIG_VARS)
++ _CONFIG_VARS['installed_base'] = _CONFIG_VARS['prefix']
++ _CONFIG_VARS['base'] = _CONFIG_VARS['prefix']
++ _CONFIG_VARS['installed_platbase'] = _CONFIG_VARS['prefix']
++ _CONFIG_VARS['platbase'] = _CONFIG_VARS['prefix']
++ _CONFIG_VARS['platlibdir'] = _CONFIG_VARS['PLATLIBDIR']
+ # For backward compatibility, see issue19555
+ SO = _CONFIG_VARS.get('EXT_SUFFIX')
+ if SO is not None:
diff --git a/meta/recipes-devtools/python/python3/0001-Makefile-do-not-compile-.pyc-in-parallel.patch b/meta/recipes-devtools/python/python3/0001-Makefile-do-not-compile-.pyc-in-parallel.patch
new file mode 100644
index 0000000000..2f037ecb09
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/0001-Makefile-do-not-compile-.pyc-in-parallel.patch
@@ -0,0 +1,65 @@
+From c960837b8fd83074bab5148236f3d0595468cea4 Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex.kanavin@gmail.com>
+Date: Thu, 16 Jan 2020 12:34:20 +0100
+Subject: [PATCH] Makefile: do not compile .pyc in parallel
+
+This was found to lock up builds, break reproducibility, and produce strange file ownership
+races.
+
+The upstream commit introducing the change was:
+https://github.com/python/cpython/commit/1a2dd82f56bd813aacc570e172cefe55a8a41504
+
+The build lock up issue is reported here:
+https://bugs.python.org/issue45945
+
+The repro failures are documented here:
+https://autobuilder.yocto.io/pub/repro-fail/oe-reproducible-20211130-yr_o1a8d/packages/diff-html/
+
+Upstream-Status: Inappropriate [see issues above]
+Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
+
+---
+ Makefile.pre.in | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/Makefile.pre.in b/Makefile.pre.in
+index edd70d4..5e13ba2 100644
+--- a/Makefile.pre.in
++++ b/Makefile.pre.in
+@@ -1601,30 +1601,30 @@ libinstall: build_all $(srcdir)/Modules/xxmodule.c
+ fi
+ -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
+ $(PYTHON_FOR_BUILD) -Wi $(DESTDIR)$(LIBDEST)/compileall.py \
+- -j0 -d $(LIBDEST) -f \
++ -d $(LIBDEST) -f \
+ -x 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \
+ $(DESTDIR)$(LIBDEST)
+ -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
+ $(PYTHON_FOR_BUILD) -Wi -O $(DESTDIR)$(LIBDEST)/compileall.py \
+- -j0 -d $(LIBDEST) -f \
++ -d $(LIBDEST) -f \
+ -x 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \
+ $(DESTDIR)$(LIBDEST)
+ -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
+ $(PYTHON_FOR_BUILD) -Wi -OO $(DESTDIR)$(LIBDEST)/compileall.py \
+- -j0 -d $(LIBDEST) -f \
++ -d $(LIBDEST) -f \
+ -x 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \
+ $(DESTDIR)$(LIBDEST)
+ -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
+ $(PYTHON_FOR_BUILD) -Wi $(DESTDIR)$(LIBDEST)/compileall.py \
+- -j0 -d $(LIBDEST)/site-packages -f \
++ -d $(LIBDEST)/site-packages -f \
+ -x badsyntax $(DESTDIR)$(LIBDEST)/site-packages
+ -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
+ $(PYTHON_FOR_BUILD) -Wi -O $(DESTDIR)$(LIBDEST)/compileall.py \
+- -j0 -d $(LIBDEST)/site-packages -f \
++ -d $(LIBDEST)/site-packages -f \
+ -x badsyntax $(DESTDIR)$(LIBDEST)/site-packages
+ -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
+ $(PYTHON_FOR_BUILD) -Wi -OO $(DESTDIR)$(LIBDEST)/compileall.py \
+- -j0 -d $(LIBDEST)/site-packages -f \
++ -d $(LIBDEST)/site-packages -f \
+ -x badsyntax $(DESTDIR)$(LIBDEST)/site-packages
+ -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
+ $(PYTHON_FOR_BUILD) -m lib2to3.pgen2.driver $(DESTDIR)$(LIBDEST)/lib2to3/Grammar.txt
diff --git a/meta/recipes-devtools/python/python3/0001-Makefile.pre-use-qemu-wrapper-when-gathering-profile.patch b/meta/recipes-devtools/python/python3/0001-Makefile.pre-use-qemu-wrapper-when-gathering-profile.patch
index fa7735ff93..e1dabc92a3 100644
--- a/meta/recipes-devtools/python/python3/0001-Makefile.pre-use-qemu-wrapper-when-gathering-profile.patch
+++ b/meta/recipes-devtools/python/python3/0001-Makefile.pre-use-qemu-wrapper-when-gathering-profile.patch
@@ -1,19 +1,20 @@
-From cf6a9100902484e4d028ee88742dd2487b014a98 Mon Sep 17 00:00:00 2001
+From 9f85089cc3a21d5ff235bb37c6c9758f2b70497d Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Wed, 30 Jan 2019 12:41:04 +0100
Subject: [PATCH] Makefile.pre: use qemu wrapper when gathering profile data
Upstream-Status: Inappropriate [oe-core specific]
Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
+
---
Makefile.pre.in | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/Makefile.pre.in b/Makefile.pre.in
-index a3a02a7..d5503dd 100644
+index f0aedb7..edd70d4 100644
--- a/Makefile.pre.in
+++ b/Makefile.pre.in
-@@ -507,8 +507,7 @@ build_all_generate_profile:
+@@ -519,8 +519,7 @@ build_all_generate_profile:
$(MAKE) @DEF_MAKE_RULE@ CFLAGS_NODIST="$(CFLAGS_NODIST) $(PGO_PROF_GEN_FLAG)" LDFLAGS_NODIST="$(LDFLAGS_NODIST) $(PGO_PROF_GEN_FLAG)" LIBS="$(LIBS)"
run_profile_task:
diff --git a/meta/recipes-devtools/python/python3/0001-Skip-failing-tests-due-to-load-variability-on-YP-AB.patch b/meta/recipes-devtools/python/python3/0001-Skip-failing-tests-due-to-load-variability-on-YP-AB.patch
new file mode 100644
index 0000000000..96c5a3c840
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/0001-Skip-failing-tests-due-to-load-variability-on-YP-AB.patch
@@ -0,0 +1,50 @@
+From 7171aeee22a0b7ab57cdf3d1ae15530549f8f92a Mon Sep 17 00:00:00 2001
+From: Yi Fan Yu <yifan.yu@windriver.com>
+Date: Thu, 1 Apr 2021 13:08:37 -0700
+Subject: [PATCH] Skip failing tests due to load variability on YP AB
+
+Skip these tests until AB-INT is solved.
+
+[YOCTO #14296]
+
+Upstream-Status: Inappropriate [OE-Specific]
+
+Signed-off-by: Yi Fan Yu <yifan.yu@windriver.com>
+
+---
+ Lib/test/_test_multiprocessing.py | 2 ++
+ Lib/test/test_time.py | 1 +
+ 2 files changed, 3 insertions(+)
+
+diff --git a/Lib/test/_test_multiprocessing.py b/Lib/test/_test_multiprocessing.py
+index 3bc5b8f..a6e106d 100644
+--- a/Lib/test/_test_multiprocessing.py
++++ b/Lib/test/_test_multiprocessing.py
+@@ -568,6 +568,7 @@ class _TestProcess(BaseTestCase):
+
+ close_queue(q)
+
++ @unittest.skip('timing related test, dependent on load')
+ def test_many_processes(self):
+ if self.TYPE == 'threads':
+ self.skipTest('test not appropriate for {}'.format(self.TYPE))
+@@ -4817,6 +4818,7 @@ class TestWait(unittest.TestCase):
+ sem.release()
+ time.sleep(period)
+
++ @unittest.skip('timing related test, dependent on load')
+ def test_wait_integer(self):
+ from multiprocessing.connection import wait
+
+diff --git a/Lib/test/test_time.py b/Lib/test/test_time.py
+index 875615a..aebaa8c 100644
+--- a/Lib/test/test_time.py
++++ b/Lib/test/test_time.py
+@@ -474,6 +474,7 @@ class TimeTestCase(unittest.TestCase):
+ def test_perf_counter(self):
+ time.perf_counter()
+
++ @unittest.skip('timing related test, dependent on load')
+ def test_process_time(self):
+ # process_time() should not include time spend during a sleep
+ start = time.process_time()
diff --git a/meta/recipes-devtools/python/python3/0001-Use-FLAG_REF-always-for-interned-strings.patch b/meta/recipes-devtools/python/python3/0001-Use-FLAG_REF-always-for-interned-strings.patch
new file mode 100644
index 0000000000..993ac243fc
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/0001-Use-FLAG_REF-always-for-interned-strings.patch
@@ -0,0 +1,33 @@
+From d7217b79a4e125d4fcc1087743171b94d91d1121 Mon Sep 17 00:00:00 2001
+From: Inada Naoki <songofacandy@gmail.com>
+Date: Sat, 14 Jul 2018 00:46:11 +0900
+Subject: [PATCH] Use FLAG_REF always for interned strings
+
+Upstream-Status: Submitted [https://github.com/python/cpython/pull/8226]
+Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
+
+---
+ Python/marshal.c | 9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/Python/marshal.c b/Python/marshal.c
+index 4125240..341c9aa 100644
+--- a/Python/marshal.c
++++ b/Python/marshal.c
+@@ -298,9 +298,14 @@ w_ref(PyObject *v, char *flag, WFILE *p)
+ if (p->version < 3 || p->hashtable == NULL)
+ return 0; /* not writing object references */
+
+- /* if it has only one reference, it definitely isn't shared */
+- if (Py_REFCNT(v) == 1)
++ /* If it has only one reference, it definitely isn't shared.
++ * But we use TYPE_REF always for interned string, to PYC file stable
++ * as possible.
++ */
++ if (Py_REFCNT(v) == 1 &&
++ !(PyUnicode_CheckExact(v) && PyUnicode_CHECK_INTERNED(v))) {
+ return 0;
++ }
+
+ entry = _Py_hashtable_get_entry(p->hashtable, v);
+ if (entry != NULL) {
diff --git a/meta/recipes-devtools/python/python3/0001-bpo-36852-proper-detection-of-mips-architecture-for-.patch b/meta/recipes-devtools/python/python3/0001-bpo-36852-proper-detection-of-mips-architecture-for-.patch
new file mode 100644
index 0000000000..6ab335a405
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/0001-bpo-36852-proper-detection-of-mips-architecture-for-.patch
@@ -0,0 +1,206 @@
+From bb409432f03dd8256865292e382ad16613737829 Mon Sep 17 00:00:00 2001
+From: Matthias Schoepfer <matthias.schoepfer@ithinx.io>
+Date: Fri, 31 May 2019 15:34:34 +0200
+Subject: [PATCH] bpo-36852: proper detection of mips architecture for soft
+
+ float
+
+When (cross) compiling for softfloat mips, __mips_hard_float will not be
+defined and detection of OS triplet in configure.ac / configure will fail.
+
+This also has to do with the custom detection of the build triplet. Trying
+to do this in a more autoconf/autotools manner.
+
+Upstream-Status: Submitted [https://github.com/python/cpython/pull/13196]
+Signed-off-by: Matthias Schoepfer <matthias.schoepfer@ithinx.io>
+
+---
+ configure.ac | 175 +++++++--------------------------------------------
+ 1 file changed, 21 insertions(+), 154 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 4230ef2..ee08b1b 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -718,160 +718,27 @@ then
+ fi
+
+
+-AC_MSG_CHECKING([for the platform triplet based on compiler characteristics])
+-cat >> conftest.c <<EOF
+-#undef bfin
+-#undef cris
+-#undef fr30
+-#undef linux
+-#undef hppa
+-#undef hpux
+-#undef i386
+-#undef mips
+-#undef powerpc
+-#undef sparc
+-#undef unix
+-#if defined(__ANDROID__)
+- # Android is not a multiarch system.
+-#elif defined(__linux__)
+-# if defined(__x86_64__) && defined(__LP64__)
+- x86_64-linux-gnu
+-# elif defined(__x86_64__) && defined(__ILP32__)
+- x86_64-linux-gnux32
+-# elif defined(__i386__)
+- i386-linux-gnu
+-# elif defined(__aarch64__) && defined(__AARCH64EL__)
+-# if defined(__ILP32__)
+- aarch64_ilp32-linux-gnu
+-# else
+- aarch64-linux-gnu
+-# endif
+-# elif defined(__aarch64__) && defined(__AARCH64EB__)
+-# if defined(__ILP32__)
+- aarch64_be_ilp32-linux-gnu
+-# else
+- aarch64_be-linux-gnu
+-# endif
+-# elif defined(__alpha__)
+- alpha-linux-gnu
+-# elif defined(__ARM_EABI__) && defined(__ARM_PCS_VFP)
+-# if defined(__ARMEL__)
+- arm-linux-gnueabihf
+-# else
+- armeb-linux-gnueabihf
+-# endif
+-# elif defined(__ARM_EABI__) && !defined(__ARM_PCS_VFP)
+-# if defined(__ARMEL__)
+- arm-linux-gnueabi
+-# else
+- armeb-linux-gnueabi
+-# endif
+-# elif defined(__hppa__)
+- hppa-linux-gnu
+-# elif defined(__ia64__)
+- ia64-linux-gnu
+-# elif defined(__m68k__) && !defined(__mcoldfire__)
+- m68k-linux-gnu
+-# elif defined(__mips_hard_float) && defined(__mips_isa_rev) && (__mips_isa_rev >=6) && defined(_MIPSEL)
+-# if _MIPS_SIM == _ABIO32
+- mipsisa32r6el-linux-gnu
+-# elif _MIPS_SIM == _ABIN32
+- mipsisa64r6el-linux-gnuabin32
+-# elif _MIPS_SIM == _ABI64
+- mipsisa64r6el-linux-gnuabi64
+-# else
+-# error unknown platform triplet
+-# endif
+-# elif defined(__mips_hard_float) && defined(__mips_isa_rev) && (__mips_isa_rev >=6)
+-# if _MIPS_SIM == _ABIO32
+- mipsisa32r6-linux-gnu
+-# elif _MIPS_SIM == _ABIN32
+- mipsisa64r6-linux-gnuabin32
+-# elif _MIPS_SIM == _ABI64
+- mipsisa64r6-linux-gnuabi64
+-# else
+-# error unknown platform triplet
+-# endif
+-# elif defined(__mips_hard_float) && defined(_MIPSEL)
+-# if _MIPS_SIM == _ABIO32
+- mipsel-linux-gnu
+-# elif _MIPS_SIM == _ABIN32
+- mips64el-linux-gnuabin32
+-# elif _MIPS_SIM == _ABI64
+- mips64el-linux-gnuabi64
+-# else
+-# error unknown platform triplet
+-# endif
+-# elif defined(__mips_hard_float)
+-# if _MIPS_SIM == _ABIO32
+- mips-linux-gnu
+-# elif _MIPS_SIM == _ABIN32
+- mips64-linux-gnuabin32
+-# elif _MIPS_SIM == _ABI64
+- mips64-linux-gnuabi64
+-# else
+-# error unknown platform triplet
+-# endif
+-# elif defined(__or1k__)
+- or1k-linux-gnu
+-# elif defined(__powerpc__) && defined(__SPE__)
+- powerpc-linux-gnuspe
+-# elif defined(__powerpc64__)
+-# if defined(__LITTLE_ENDIAN__)
+- powerpc64le-linux-gnu
+-# else
+- powerpc64-linux-gnu
+-# endif
+-# elif defined(__powerpc__)
+- powerpc-linux-gnu
+-# elif defined(__s390x__)
+- s390x-linux-gnu
+-# elif defined(__s390__)
+- s390-linux-gnu
+-# elif defined(__sh__) && defined(__LITTLE_ENDIAN__)
+- sh4-linux-gnu
+-# elif defined(__sparc__) && defined(__arch64__)
+- sparc64-linux-gnu
+-# elif defined(__sparc__)
+- sparc-linux-gnu
+-# elif defined(__riscv)
+-# if __riscv_xlen == 32
+- riscv32-linux-gnu
+-# elif __riscv_xlen == 64
+- riscv64-linux-gnu
+-# else
+-# error unknown platform triplet
+-# endif
+-# else
+-# error unknown platform triplet
+-# endif
+-#elif defined(__FreeBSD_kernel__)
+-# if defined(__LP64__)
+- x86_64-kfreebsd-gnu
+-# elif defined(__i386__)
+- i386-kfreebsd-gnu
+-# else
+-# error unknown platform triplet
+-# endif
+-#elif defined(__gnu_hurd__)
+- i386-gnu
+-#elif defined(__APPLE__)
+- darwin
+-#elif defined(__VXWORKS__)
+- vxworks
+-#else
+-# error unknown platform triplet
+-#endif
+-
+-EOF
+-
+-if $CPP $CPPFLAGS conftest.c >conftest.out 2>/dev/null; then
+- PLATFORM_TRIPLET=`grep -v '^#' conftest.out | grep -v '^ *$' | tr -d ' '`
+- AC_MSG_RESULT([$PLATFORM_TRIPLET])
+-else
+- AC_MSG_RESULT([none])
+-fi
+-rm -f conftest.c conftest.out
++AC_CANONICAL_TARGET
++## Not using $target to filter out vendor
++## Need to handle macos, vxworks and hurd special (?) :-/
++case ${target_os} in
++ darwin*)
++ PLATFORM_TRIPLET=darwin
++ ;;
++ hurd*)
++ PLATFORM_TRIPLET=i386-gnu
++ ;;
++ vxworks*)
++ PLATFORM_TRIPLET=vxworks
++ ;;
++ *)
++ if test "${target_cpu}" != "i686"; then
++ PLATFORM_TRIPLET=${target_cpu}-${target_os}
++ else
++ PLATFORM_TRIPLET=i386-${target_os}
++ fi
++ ;;
++esac
+
+ AC_MSG_CHECKING([for multiarch])
+ AS_CASE([$ac_sys_system],
diff --git a/meta/recipes-devtools/python/python3/0001-distutils-sysconfig-append-STAGING_LIBDIR-python-sys.patch b/meta/recipes-devtools/python/python3/0001-distutils-sysconfig-append-STAGING_LIBDIR-python-sys.patch
index 8083345a4e..3c62c2acb8 100644
--- a/meta/recipes-devtools/python/python3/0001-distutils-sysconfig-append-STAGING_LIBDIR-python-sys.patch
+++ b/meta/recipes-devtools/python/python3/0001-distutils-sysconfig-append-STAGING_LIBDIR-python-sys.patch
@@ -1,4 +1,4 @@
-From 4865615a2bc2b78c739e4c33f536712c7f9af061 Mon Sep 17 00:00:00 2001
+From 78dd1def953e18e7cda0325bb26d27c051bb6890 Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Thu, 31 Jan 2019 16:46:30 +0100
Subject: [PATCH] distutils/sysconfig: append
@@ -10,28 +10,14 @@ Upstream-Status: Inappropriate [oe-core specific]
Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
---
- Lib/distutils/sysconfig.py | 2 ++
- Lib/sysconfig.py | 2 ++
- 2 files changed, 4 insertions(+)
+ Lib/sysconfig.py | 2 ++
+ 1 file changed, 2 insertions(+)
-diff --git a/Lib/distutils/sysconfig.py b/Lib/distutils/sysconfig.py
-index e07a6c8..6b8c129 100644
---- a/Lib/distutils/sysconfig.py
-+++ b/Lib/distutils/sysconfig.py
-@@ -421,6 +421,8 @@ def _init_posix():
- platform=sys.platform,
- multiarch=getattr(sys.implementation, '_multiarch', ''),
- ))
-+ if 'STAGING_LIBDIR' in os.environ:
-+ sys.path.append(os.environ['STAGING_LIBDIR']+'/python-sysconfigdata')
- _temp = __import__(name, globals(), locals(), ['build_time_vars'], 0)
- build_time_vars = _temp.build_time_vars
- global _config_vars
diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py
-index 9ee4d31..e586abd 100644
+index 40c6b3e..ac94cc7 100644
--- a/Lib/sysconfig.py
+++ b/Lib/sysconfig.py
-@@ -412,6 +412,8 @@ def _init_posix(vars):
+@@ -474,6 +474,8 @@ def _init_posix(vars):
"""Initialize the module as appropriate for POSIX systems."""
# _sysconfigdata is generated at build time, see _generate_posix_vars()
name = _get_sysconfigdata_name()
diff --git a/meta/recipes-devtools/python/python3/0001-python3-use-cc_basename-to-replace-CC-for-checking-c.patch b/meta/recipes-devtools/python/python3/0001-python3-use-cc_basename-to-replace-CC-for-checking-c.patch
index 5735954628..6bb85fcb34 100644
--- a/meta/recipes-devtools/python/python3/0001-python3-use-cc_basename-to-replace-CC-for-checking-c.patch
+++ b/meta/recipes-devtools/python/python3/0001-python3-use-cc_basename-to-replace-CC-for-checking-c.patch
@@ -1,4 +1,4 @@
-From 2645317fef09afe31b01bb2c1d4fe5b9afdbb11a Mon Sep 17 00:00:00 2001
+From 9f68a27eb34394a00f1011c06900c609f15fb15c Mon Sep 17 00:00:00 2001
From: Changqing Li <changqing.li@windriver.com>
Date: Mon, 22 Oct 2018 15:19:51 +0800
Subject: [PATCH] python3: use cc_basename to replace CC for checking compiler
@@ -21,15 +21,16 @@ Signed-off-by: Li Zhou <li.zhou@windriver.com>
patch originally from Li Zhou, I just rework it to new version
Signed-off-by: Changqing Li <changqing.li@windriver.com>
+
---
configure.ac | 19 ++++++++++---------
1 file changed, 10 insertions(+), 9 deletions(-)
diff --git a/configure.ac b/configure.ac
-index a7de901..4a3681f 100644
+index 0c06914..299786b 100644
--- a/configure.ac
+++ b/configure.ac
-@@ -54,6 +54,7 @@ AC_CONFIG_HEADER(pyconfig.h)
+@@ -61,6 +61,7 @@ AC_CONFIG_HEADER(pyconfig.h)
AC_CANONICAL_HOST
AC_SUBST(build)
AC_SUBST(host)
@@ -37,7 +38,7 @@ index a7de901..4a3681f 100644
# pybuilddir.txt will be created by --generate-posix-vars in the Makefile
rm -f pybuilddir.txt
-@@ -695,7 +696,7 @@ AC_MSG_RESULT($with_cxx_main)
+@@ -688,7 +689,7 @@ AC_MSG_RESULT($with_cxx_main)
preset_cxx="$CXX"
if test -z "$CXX"
then
@@ -46,7 +47,7 @@ index a7de901..4a3681f 100644
gcc) AC_PATH_TOOL(CXX, [g++], [g++], [notfound]) ;;
cc) AC_PATH_TOOL(CXX, [c++], [c++], [notfound]) ;;
clang|*/clang) AC_PATH_TOOL(CXX, [clang++], [clang++], [notfound]) ;;
-@@ -979,7 +980,7 @@ rmdir CaseSensitiveTestDir
+@@ -976,7 +977,7 @@ rmdir CaseSensitiveTestDir
case $ac_sys_system in
hp*|HP*)
@@ -55,7 +56,7 @@ index a7de901..4a3681f 100644
cc|*/cc) CC="$CC -Ae";;
esac;;
esac
-@@ -1336,7 +1337,7 @@ else
+@@ -1374,7 +1375,7 @@ else
fi],
[AC_MSG_RESULT(no)])
if test "$Py_LTO" = 'true' ; then
@@ -63,8 +64,8 @@ index a7de901..4a3681f 100644
+ case $cc_basename in
*clang*)
AC_SUBST(LLVM_AR)
- AC_PATH_TARGET_TOOL(LLVM_AR, llvm-ar, '', ${llvm_path})
-@@ -1426,7 +1427,7 @@ then
+ AC_PATH_TOOL(LLVM_AR, llvm-ar, '', ${llvm_path})
+@@ -1467,7 +1468,7 @@ then
fi
fi
LLVM_PROF_ERR=no
@@ -73,16 +74,16 @@ index a7de901..4a3681f 100644
*clang*)
# Any changes made here should be reflected in the GCC+Darwin case below
PGO_PROF_GEN_FLAG="-fprofile-instr-generate"
-@@ -1500,7 +1501,7 @@ then
- WRAP="-fwrapv"
- fi
+@@ -1528,7 +1529,7 @@ esac
+ # compiler and platform. BASECFLAGS tweaks need to be made even if the
+ # user set OPT.
-- case $CC in
-+ case $cc_basename in
- *clang*)
- cc_is_clang=1
- ;;
-@@ -1623,7 +1624,7 @@ yes)
+-case $CC in
++case $cc_basename in
+ *clang*)
+ cc_is_clang=1
+ ;;
+@@ -1664,7 +1665,7 @@ yes)
# ICC doesn't recognize the option, but only emits a warning
## XXX does it emit an unused result warning and can it be disabled?
@@ -91,16 +92,16 @@ index a7de901..4a3681f 100644
*icc*)
ac_cv_disable_unused_result_warning=no
;;
-@@ -1965,7 +1966,7 @@ yes)
+@@ -2018,7 +2019,7 @@ yes)
+ ;;
esac
- # ICC needs -fp-model strict or floats behave badly
-case "$CC" in
+case "$cc_basename" in
*icc*)
+ # ICC needs -fp-model strict or floats behave badly
CFLAGS_NODIST="$CFLAGS_NODIST -fp-model strict"
- ;;
-@@ -2727,7 +2728,7 @@ then
+@@ -2836,7 +2837,7 @@ then
then
LINKFORSHARED="-Wl,--export-dynamic"
fi;;
@@ -109,7 +110,7 @@ index a7de901..4a3681f 100644
*gcc*)
if $CC -Xlinker --help 2>&1 | grep export-dynamic >/dev/null
then
-@@ -5429,7 +5430,7 @@ if test "$have_gcc_asm_for_x87" = yes; then
+@@ -5622,7 +5623,7 @@ if test "$have_gcc_asm_for_x87" = yes; then
# Some versions of gcc miscompile inline asm:
# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46491
# http://gcc.gnu.org/ml/gcc/2010-11/msg00366.html
diff --git a/meta/recipes-devtools/python/python3/0001-sysconfig.py-use-platlibdir-also-for-purelib.patch b/meta/recipes-devtools/python/python3/0001-sysconfig.py-use-platlibdir-also-for-purelib.patch
new file mode 100644
index 0000000000..4fb63a9b7a
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/0001-sysconfig.py-use-platlibdir-also-for-purelib.patch
@@ -0,0 +1,28 @@
+From 9162460d81ccc725fb04a14b27d0bf4afcfb69c9 Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex@linutronix.de>
+Date: Sun, 12 Sep 2021 21:44:36 +0200
+Subject: [PATCH] sysconfig.py: use platlibdir also for purelib
+
+This is needed in multilib configurations where hardcoding 'lib'
+is not correct.
+
+Upstream-Status: Inappropriate [oe-core specific]
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+
+---
+ Lib/sysconfig.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py
+index daf9f00..e64bcdc 100644
+--- a/Lib/sysconfig.py
++++ b/Lib/sysconfig.py
+@@ -27,7 +27,7 @@ _INSTALL_SCHEMES = {
+ 'posix_prefix': {
+ 'stdlib': '{installed_base}/{platlibdir}/python{py_version_short}',
+ 'platstdlib': '{platbase}/{platlibdir}/python{py_version_short}',
+- 'purelib': '{base}/lib/python{py_version_short}/site-packages',
++ 'purelib': '{base}/{platlibdir}/python{py_version_short}/site-packages',
+ 'platlib': '{platbase}/{platlibdir}/python{py_version_short}/site-packages',
+ 'include':
+ '{installed_base}/include/python{py_version_short}{abiflags}',
diff --git a/meta/recipes-devtools/python/python3/0001-test_ctypes.test_find-skip-without-tools-sdk.patch b/meta/recipes-devtools/python/python3/0001-test_ctypes.test_find-skip-without-tools-sdk.patch
new file mode 100644
index 0000000000..371021c0a9
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/0001-test_ctypes.test_find-skip-without-tools-sdk.patch
@@ -0,0 +1,34 @@
+From 13aa6449c47980c7270dad2527c3911517bf34e6 Mon Sep 17 00:00:00 2001
+From: Tim Orling <timothy.t.orling@intel.com>
+Date: Fri, 18 Jun 2021 11:56:50 -0700
+Subject: [PATCH] test_ctypes.test_find: skip without tools-sdk
+
+These tests need full packagegroup-core-buildessential, the
+easiest way to dynamically check for that is looking for
+'tools-sdk' in IMAGE_FEATURES.
+
+Upstream-Status: Inappropriate [oe-specific]
+
+Signed-off-by: Tim Orling <timothy.t.orlign@intel.com>
+
+---
+ Lib/ctypes/test/test_find.py | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/Lib/ctypes/test/test_find.py b/Lib/ctypes/test/test_find.py
+index 1ff9d01..59def26 100644
+--- a/Lib/ctypes/test/test_find.py
++++ b/Lib/ctypes/test/test_find.py
+@@ -113,10 +113,12 @@ class FindLibraryLinux(unittest.TestCase):
+ # LD_LIBRARY_PATH)
+ self.assertEqual(find_library(libname), 'lib%s.so' % libname)
+
++ @unittest.skip("Needs IMAGE_FEATURE += \"tools-sdk\"")
+ def test_find_library_with_gcc(self):
+ with unittest.mock.patch("ctypes.util._findSoname_ldconfig", lambda *args: None):
+ self.assertNotEqual(find_library('c'), None)
+
++ @unittest.skip("Needs IMAGE_FEATURE += \"tools-sdk\"")
+ def test_find_library_with_ld(self):
+ with unittest.mock.patch("ctypes.util._findSoname_ldconfig", lambda *args: None), \
+ unittest.mock.patch("ctypes.util._findLib_gcc", lambda *args: None):
diff --git a/meta/recipes-devtools/python/python3/0001-test_locale.py-correct-the-test-output-format.patch b/meta/recipes-devtools/python/python3/0001-test_locale.py-correct-the-test-output-format.patch
new file mode 100644
index 0000000000..c762f98307
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/0001-test_locale.py-correct-the-test-output-format.patch
@@ -0,0 +1,46 @@
+From 46856e692377d21be3562f6f90c242f5c9594ae2 Mon Sep 17 00:00:00 2001
+From: Mingli Yu <mingli.yu@windriver.com>
+Date: Mon, 5 Aug 2019 15:57:39 +0800
+Subject: [PATCH] test_locale.py: correct the test output format
+
+Before this patch:
+ # python3 -m test -v test_locale
+ [snip]
+ test_getsetlocale_issue1813 (test.test_locale.TestMiscellaneous) ... testing with ('tr_TR', 'ISO8859-9') ok
+ [snip]
+
+ After this patch:
+ # python3 -m test -v test_locale
+ [snip]
+ test_getsetlocale_issue1813 (test.test_locale.TestMiscellaneous) ... testing with ('tr_TR', 'ISO8859-9')... ok
+ [snip]
+
+ Make the test ended with "... ok" is common in python
+ unittest world, we should make it keep consistent
+ with other test cases in case it may be ignored to
+ record in the report if we use the common filter
+ "... ok".
+
+Upstream-Status: Submitted [https://github.com/python/cpython/pull/15132]
+
+Rebased for 3.9.4, still not accepted upstream Signed-off-by: Alejandro Hernandez <alejandro@enedino.org>
+
+Signed-off-by: Mingli Yu <mingli.yu@windriver.com>
+
+---
+ Lib/test/test_locale.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Lib/test/test_locale.py b/Lib/test/test_locale.py
+index f844e62..04df0c2 100644
+--- a/Lib/test/test_locale.py
++++ b/Lib/test/test_locale.py
+@@ -564,7 +564,7 @@ class TestMiscellaneous(unittest.TestCase):
+ self.skipTest('test needs Turkish locale')
+ loc = locale.getlocale(locale.LC_CTYPE)
+ if verbose:
+- print('testing with %a' % (loc,), end=' ', flush=True)
++ print('testing with %a...' % (loc,), end=' ', flush=True)
+ try:
+ locale.setlocale(locale.LC_CTYPE, loc)
+ except locale.Error as exc:
diff --git a/meta/recipes-devtools/python/python3/0002-Don-t-do-runtime-test-to-get-float-byte-order.patch b/meta/recipes-devtools/python/python3/0002-Don-t-do-runtime-test-to-get-float-byte-order.patch
deleted file mode 100644
index 3721e7c2aa..0000000000
--- a/meta/recipes-devtools/python/python3/0002-Don-t-do-runtime-test-to-get-float-byte-order.patch
+++ /dev/null
@@ -1,199 +0,0 @@
-From fa96a7fd19e17b9c6b4dd01c3c3774fb382dddc6 Mon Sep 17 00:00:00 2001
-From: Ross Burton <ross.burton@intel.com>
-Date: Wed, 5 Sep 2018 11:45:52 +0100
-Subject: [PATCH] Don't do runtime test to get float byte order
-
-Python uses AC_RUN_IFELSE to determine the byte order for floats and doubles,
-and falls back onto "I don't know" if it can't run code. This results in
-crippled floating point numbers in Python, and the regression tests fail.
-
-Instead of running code, take a macro from autoconf-archive which compiles C
-with a special double in which has an ASCII representation, and then greps the
-binary to identify the format.
-
-Upstream-Status: Submitted [https://bugs.python.org/issue34585]
-Signed-off-by: Ross Burton <ross.burton@intel.com>
----
- configure.ac | 72 +++------------------------
- m4/ax_c_float_words_bigendian.m4 | 83 ++++++++++++++++++++++++++++++++
- 2 files changed, 90 insertions(+), 65 deletions(-)
- create mode 100644 m4/ax_c_float_words_bigendian.m4
-
-diff --git a/configure.ac b/configure.ac
-index 4a3681f..4ab19a6 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -4328,77 +4328,19 @@ fi
- # * Check for various properties of floating point *
- # **************************************************
-
--AC_MSG_CHECKING(whether C doubles are little-endian IEEE 754 binary64)
--AC_CACHE_VAL(ac_cv_little_endian_double, [
--AC_RUN_IFELSE([AC_LANG_SOURCE([[
--#include <string.h>
--int main() {
-- double x = 9006104071832581.0;
-- if (memcmp(&x, "\x05\x04\x03\x02\x01\xff\x3f\x43", 8) == 0)
-- return 0;
-- else
-- return 1;
--}
--]])],
--[ac_cv_little_endian_double=yes],
--[ac_cv_little_endian_double=no],
--[ac_cv_little_endian_double=no])])
--AC_MSG_RESULT($ac_cv_little_endian_double)
--if test "$ac_cv_little_endian_double" = yes
--then
-- AC_DEFINE(DOUBLE_IS_LITTLE_ENDIAN_IEEE754, 1,
-- [Define if C doubles are 64-bit IEEE 754 binary format, stored
-- with the least significant byte first])
--fi
--
--AC_MSG_CHECKING(whether C doubles are big-endian IEEE 754 binary64)
--AC_CACHE_VAL(ac_cv_big_endian_double, [
--AC_RUN_IFELSE([AC_LANG_SOURCE([[
--#include <string.h>
--int main() {
-- double x = 9006104071832581.0;
-- if (memcmp(&x, "\x43\x3f\xff\x01\x02\x03\x04\x05", 8) == 0)
-- return 0;
-- else
-- return 1;
--}
--]])],
--[ac_cv_big_endian_double=yes],
--[ac_cv_big_endian_double=no],
--[ac_cv_big_endian_double=no])])
--AC_MSG_RESULT($ac_cv_big_endian_double)
--if test "$ac_cv_big_endian_double" = yes
-+AX_C_FLOAT_WORDS_BIGENDIAN
-+if test "$ax_cv_c_float_words_bigendian" = "yes"
- then
- AC_DEFINE(DOUBLE_IS_BIG_ENDIAN_IEEE754, 1,
- [Define if C doubles are 64-bit IEEE 754 binary format, stored
- with the most significant byte first])
--fi
--
--# Some ARM platforms use a mixed-endian representation for doubles.
--# While Python doesn't currently have full support for these platforms
--# (see e.g., issue 1762561), we can at least make sure that float <-> string
--# conversions work.
--AC_MSG_CHECKING(whether C doubles are ARM mixed-endian IEEE 754 binary64)
--AC_CACHE_VAL(ac_cv_mixed_endian_double, [
--AC_RUN_IFELSE([AC_LANG_SOURCE([[
--#include <string.h>
--int main() {
-- double x = 9006104071832581.0;
-- if (memcmp(&x, "\x01\xff\x3f\x43\x05\x04\x03\x02", 8) == 0)
-- return 0;
-- else
-- return 1;
--}
--]])],
--[ac_cv_mixed_endian_double=yes],
--[ac_cv_mixed_endian_double=no],
--[ac_cv_mixed_endian_double=no])])
--AC_MSG_RESULT($ac_cv_mixed_endian_double)
--if test "$ac_cv_mixed_endian_double" = yes
-+elif test "$ax_cv_c_float_words_bigendian" = "no"
- then
-- AC_DEFINE(DOUBLE_IS_ARM_MIXED_ENDIAN_IEEE754, 1,
-+ AC_DEFINE(DOUBLE_IS_LITTLE_ENDIAN_IEEE754, 1,
- [Define if C doubles are 64-bit IEEE 754 binary format, stored
-- in ARM mixed-endian order (byte order 45670123)])
-+ with the least significant byte first])
-+else
-+ AC_MSG_ERROR([Cannot identify floating point byte order])
- fi
-
- # The short float repr introduced in Python 3.1 requires the
-diff --git a/m4/ax_c_float_words_bigendian.m4 b/m4/ax_c_float_words_bigendian.m4
-new file mode 100644
-index 0000000..216b90d
---- /dev/null
-+++ b/m4/ax_c_float_words_bigendian.m4
-@@ -0,0 +1,83 @@
-+# ===============================================================================
-+# https://www.gnu.org/software/autoconf-archive/ax_c_float_words_bigendian.html
-+# ===============================================================================
-+#
-+# SYNOPSIS
-+#
-+# AX_C_FLOAT_WORDS_BIGENDIAN([ACTION-IF-TRUE], [ACTION-IF-FALSE], [ACTION-IF-UNKNOWN])
-+#
-+# DESCRIPTION
-+#
-+# Checks the ordering of words within a multi-word float. This check is
-+# necessary because on some systems (e.g. certain ARM systems), the float
-+# word ordering can be different from the byte ordering. In a multi-word
-+# float context, "big-endian" implies that the word containing the sign
-+# bit is found in the memory location with the lowest address. This
-+# implementation was inspired by the AC_C_BIGENDIAN macro in autoconf.
-+#
-+# The endianness is detected by first compiling C code that contains a
-+# special double float value, then grepping the resulting object file for
-+# certain strings of ASCII values. The double is specially crafted to have
-+# a binary representation that corresponds with a simple string. In this
-+# implementation, the string "noonsees" was selected because the
-+# individual word values ("noon" and "sees") are palindromes, thus making
-+# this test byte-order agnostic. If grep finds the string "noonsees" in
-+# the object file, the target platform stores float words in big-endian
-+# order. If grep finds "seesnoon", float words are in little-endian order.
-+# If neither value is found, the user is instructed to specify the
-+# ordering.
-+#
-+# LICENSE
-+#
-+# Copyright (c) 2008 Daniel Amelang <dan@amelang.net>
-+#
-+# Copying and distribution of this file, with or without modification, are
-+# permitted in any medium without royalty provided the copyright notice
-+# and this notice are preserved. This file is offered as-is, without any
-+# warranty.
-+
-+#serial 11
-+
-+AC_DEFUN([AX_C_FLOAT_WORDS_BIGENDIAN],
-+ [AC_CACHE_CHECK(whether float word ordering is bigendian,
-+ ax_cv_c_float_words_bigendian, [
-+
-+ax_cv_c_float_words_bigendian=unknown
-+AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
-+
-+double d = 90904234967036810337470478905505011476211692735615632014797120844053488865816695273723469097858056257517020191247487429516932130503560650002327564517570778480236724525140520121371739201496540132640109977779420565776568942592.0;
-+
-+]])], [
-+
-+if grep noonsees conftest.$ac_objext >/dev/null ; then
-+ ax_cv_c_float_words_bigendian=yes
-+fi
-+if grep seesnoon conftest.$ac_objext >/dev/null ; then
-+ if test "$ax_cv_c_float_words_bigendian" = unknown; then
-+ ax_cv_c_float_words_bigendian=no
-+ else
-+ ax_cv_c_float_words_bigendian=unknown
-+ fi
-+fi
-+
-+])])
-+
-+case $ax_cv_c_float_words_bigendian in
-+ yes)
-+ m4_default([$1],
-+ [AC_DEFINE([FLOAT_WORDS_BIGENDIAN], 1,
-+ [Define to 1 if your system stores words within floats
-+ with the most significant word first])]) ;;
-+ no)
-+ $2 ;;
-+ *)
-+ m4_default([$3],
-+ [AC_MSG_ERROR([
-+
-+Unknown float word ordering. You need to manually preset
-+ax_cv_c_float_words_bigendian=no (or yes) according to your system.
-+
-+ ])]) ;;
-+esac
-+
-+])# AX_C_FLOAT_WORDS_BIGENDIAN
diff --git a/meta/recipes-devtools/python/python3/0003-setup.py-pass-missing-libraries-to-Extension-for-mul.patch b/meta/recipes-devtools/python/python3/0003-setup.py-pass-missing-libraries-to-Extension-for-mul.patch
deleted file mode 100644
index b9d5bc9c51..0000000000
--- a/meta/recipes-devtools/python/python3/0003-setup.py-pass-missing-libraries-to-Extension-for-mul.patch
+++ /dev/null
@@ -1,80 +0,0 @@
-From b881a79adcd4ae5ac8fe4f49d0fc77c47f777919 Mon Sep 17 00:00:00 2001
-From: Hongxu Jia <hongxu.jia@windriver.com>
-Date: Fri, 4 Aug 2017 11:16:14 +0800
-Subject: [PATCH] setup.py: pass missing libraries to Extension for
- multiprocessing module
-
-In the following commit:
-...
-commit e711cafab13efc9c1fe6c5cd75826401445eb585
-Author: Benjamin Peterson <benjamin@python.org>
-Date: Wed Jun 11 16:44:04 2008 +0000
-
- Merged revisions 64104,64117 via svnmerge from
- svn+ssh://pythondev@svn.python.org/python/trunk
-...
-(see diff in setup.py)
-It assigned libraries for multiprocessing module according
-the host_platform, but not pass it to Extension.
-
-In glibc, the following commit caused two definition of
-sem_getvalue are different.
-https://sourceware.org/git/?p=glibc.git;a=commit;h=042e1521c794a945edc43b5bfa7e69ad70420524
-(see diff in nptl/sem_getvalue.c for detail)
-`__new_sem_getvalue' is the latest sem_getvalue@@GLIBC_2.1
-and `__old_sem_getvalue' is to compat the old version
-sem_getvalue@GLIBC_2.0.
-
-To build python for embedded Linux systems:
-http://www.yoctoproject.org/docs/2.3.1/yocto-project-qs/yocto-project-qs.html
-If not explicitly link to library pthread (-lpthread), it will
-load glibc's sem_getvalue randomly at runtime.
-
-Such as build python on linux x86_64 host and run the python
-on linux x86_32 target. If not link library pthread, it caused
-multiprocessing bounded semaphore could not work correctly.
-...
->>> import multiprocessing
->>> pool_sema = multiprocessing.BoundedSemaphore(value=1)
->>> pool_sema.acquire()
-True
->>> pool_sema.release()
-Traceback (most recent call last):
- File "<stdin>", line 1, in <module>
-ValueError: semaphore or lock released too many times
-...
-
-And the semaphore issue also caused multiprocessing.Queue().put() hung.
-
-Upstream-Status: Submitted [https://github.com/python/cpython/pull/2999]
-
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
----
- setup.py | 7 +++++--
- 1 file changed, 5 insertions(+), 2 deletions(-)
-
-diff --git a/setup.py b/setup.py
-index b7a36a6..658ead3 100644
---- a/setup.py
-+++ b/setup.py
-@@ -1584,8 +1584,10 @@ class PyBuildExt(build_ext):
- elif host_platform.startswith('netbsd'):
- macros = dict()
- libraries = []
--
-- else: # Linux and other unices
-+ elif host_platform.startswith(('linux')):
-+ macros = dict()
-+ libraries = ['pthread']
-+ else: # Other unices
- macros = dict()
- libraries = ['rt']
-
-@@ -1603,6 +1605,7 @@ class PyBuildExt(build_ext):
-
- exts.append ( Extension('_multiprocessing', multiprocessing_srcs,
- define_macros=list(macros.items()),
-+ libraries=libraries,
- include_dirs=["Modules/_multiprocessing"]))
- # End multiprocessing
-
diff --git a/meta/recipes-devtools/python/python3/0017-setup.py-do-not-report-missing-dependencies-for-disa.patch b/meta/recipes-devtools/python/python3/0017-setup.py-do-not-report-missing-dependencies-for-disa.patch
new file mode 100644
index 0000000000..0ead57e465
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/0017-setup.py-do-not-report-missing-dependencies-for-disa.patch
@@ -0,0 +1,38 @@
+From 246c5ffe75a2d494e415d8a7522df9fe22056d41 Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex.kanavin@gmail.com>
+Date: Mon, 7 Oct 2019 13:22:14 +0200
+Subject: [PATCH] setup.py: do not report missing dependencies for disabled
+ modules
+
+Reporting those missing dependencies is misleading as the modules would not
+have been built anyway. This particularly matters in oe-core's automated
+build completeness checker which relies on the report.
+
+Upstream-Status: Inappropriate [oe-core specific]
+Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+Signed-off-by: Alejandro Hernandez Samaniego <alejandro@enedino.org>
+
+---
+ setup.py | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/setup.py b/setup.py
+index 2be4738..62f0e18 100644
+--- a/setup.py
++++ b/setup.py
+@@ -517,6 +517,14 @@ class PyBuildExt(build_ext):
+ print("%-*s %-*s %-*s" % (longest, e, longest, f,
+ longest, g))
+
++ # There is no need to report missing module dependencies,
++ # if the modules have been disabled in the first place.
++ # cannot use mods_disabled here, because remove_configured_extensions adds
++ # only disabled extensions into it (doesn't cover _dbm, _gdbm, readline
++ # we support disabling through PACKAGECONFIG)
++ sysconf_dis = sysconfig.get_config_var('MODDISABLED_NAMES').split()
++ self.missing = list(set(self.missing) - set(sysconf_dis))
++
+ if self.missing:
+ print()
+ print("Python build finished successfully!")
diff --git a/meta/recipes-devtools/python/python3/0020-configure.ac-setup.py-do-not-add-a-curses-include-pa.patch b/meta/recipes-devtools/python/python3/0020-configure.ac-setup.py-do-not-add-a-curses-include-pa.patch
new file mode 100644
index 0000000000..30d2906439
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/0020-configure.ac-setup.py-do-not-add-a-curses-include-pa.patch
@@ -0,0 +1,49 @@
+From 788cd0464ee2b175493a0167ceee8c0045ce323c Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex.kanavin@gmail.com>
+Date: Sun, 16 Feb 2020 17:50:25 +0100
+Subject: [PATCH] configure.ac, setup.py: do not add a curses include path from
+ the host
+
+This leads to host contamination, and particularly can cause
+curses modules to fail at runtime if the host curses is configured
+differently to native curses (observed on current OpenSuse Tumbleweed
+as dnf failures).
+
+Upstream-Status: Inappropriate [oe-core specific]
+Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
+
+---
+ configure.ac | 6 ------
+ setup.py | 2 --
+ 2 files changed, 8 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index e5e3df8..bfdd987 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -5092,12 +5092,6 @@ then
+ [Define if you have struct stat.st_mtimensec])
+ fi
+
+-# first curses header check
+-ac_save_cppflags="$CPPFLAGS"
+-if test "$cross_compiling" = no; then
+- CPPFLAGS="$CPPFLAGS -I/usr/include/ncursesw"
+-fi
+-
+ AC_CHECK_HEADERS(curses.h ncurses.h)
+
+ # On Solaris, term.h requires curses.h
+diff --git a/setup.py b/setup.py
+index 62f0e18..c190002 100644
+--- a/setup.py
++++ b/setup.py
+@@ -1169,8 +1169,6 @@ class PyBuildExt(build_ext):
+ panel_library = 'panel'
+ if curses_library == 'ncursesw':
+ curses_defines.append(('HAVE_NCURSESW', '1'))
+- if not CROSS_COMPILING:
+- curses_includes.append('/usr/include/ncursesw')
+ # Bug 1464056: If _curses.so links with ncursesw,
+ # _curses_panel.so must link with panelw.
+ panel_library = 'panelw'
diff --git a/meta/recipes-devtools/python/python3/12-distutils-prefix-is-inside-staging-area.patch b/meta/recipes-devtools/python/python3/12-distutils-prefix-is-inside-staging-area.patch
index dcc0932c7f..de4c6c4e19 100644
--- a/meta/recipes-devtools/python/python3/12-distutils-prefix-is-inside-staging-area.patch
+++ b/meta/recipes-devtools/python/python3/12-distutils-prefix-is-inside-staging-area.patch
@@ -1,4 +1,4 @@
-From 1397979ee445ff6826aa5469511e003539f77bb2 Mon Sep 17 00:00:00 2001
+From 33b5a31df6050110f4481a24f5a0a0bf7fe80096 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Tue, 14 May 2013 15:00:26 -0700
Subject: [PATCH] python3: Add target and native recipes
@@ -7,48 +7,52 @@ Upstream-Status: Inappropriate [embedded specific]
02/2015 Rebased for Python 3.4.2
-# The proper prefix is inside our staging area.
-# Signed-Off: Michael 'Mickey' Lauer <mickey@vanille-media.de>
-# Signed-off-by: Phil Blundell <philb@gnu.org>
-# Signed-off-by: Khem Raj <raj.khem@gmail.com>
-# Signed-off-by: Alejandro Hernandez <alejandro.hernandez@linux.intel.com>
+The proper prefix is inside our staging area.
+Signed-Off: Michael 'Mickey' Lauer <mickey@vanille-media.de>
+Signed-off-by: Phil Blundell <philb@gnu.org>
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Signed-off-by: Alejandro Hernandez <alejandro.hernandez@linux.intel.com>
---
- Lib/distutils/sysconfig.py | 10 ++++++++--
- 1 file changed, 8 insertions(+), 2 deletions(-)
+ Lib/distutils/sysconfig.py | 14 +++++++++++---
+ 1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/Lib/distutils/sysconfig.py b/Lib/distutils/sysconfig.py
-index 6b8c129..3ca7f79 100644
+index 3414a76..361d3a1 100644
--- a/Lib/distutils/sysconfig.py
+++ b/Lib/distutils/sysconfig.py
-@@ -84,7 +84,9 @@ def get_python_inc(plat_specific=0, prefix=None):
+@@ -277,7 +277,9 @@ def get_python_inc(plat_specific=0, prefix=None):
If 'prefix' is supplied, use it instead of sys.base_prefix or
sys.base_exec_prefix -- i.e., ignore 'plat_specific'.
"""
- if prefix is None:
-+ if prefix is None and os.environ['STAGING_INCDIR'] != "":
++ if prefix is None and os.environ.get('STAGING_INCDIR', ""):
+ prefix = os.environ['STAGING_INCDIR'].rstrip('include')
+ elif prefix is None:
prefix = plat_specific and BASE_EXEC_PREFIX or BASE_PREFIX
if os.name == "posix":
if python_build:
-@@ -122,6 +124,10 @@ def get_python_lib(plat_specific=0, standard_lib=0, prefix=None):
+@@ -320,7 +322,13 @@ def get_python_lib(plat_specific=0, standard_lib=0, prefix=None):
If 'prefix' is supplied, use it instead of sys.base_prefix or
sys.base_exec_prefix -- i.e., ignore 'plat_specific'.
"""
-+ lib_basename = os.environ['STAGING_LIBDIR'].split('/')[-1]
-+ if prefix is None and os.environ['STAGING_LIBDIR'] != "":
+- if prefix is None:
++ if os.environ.get('STAGING_LIBDIR', ""):
++ lib_basename = os.environ['STAGING_LIBDIR'].split('/')[-1]
++ else:
++ lib_basename = "lib"
++ if prefix is None and os.environ.get('STAGING_LIBDIR', ""):
+ prefix = os.environ['STAGING_LIBDIR'].rstrip(lib_basename)
-+
- if prefix is None:
++ elif prefix is None:
if standard_lib:
prefix = plat_specific and BASE_EXEC_PREFIX or BASE_PREFIX
-@@ -130,7 +136,7 @@ def get_python_lib(plat_specific=0, standard_lib=0, prefix=None):
-
- if os.name == "posix":
- libpython = os.path.join(prefix,
-- "lib", "python" + get_python_version())
-+ lib_basename, "python" + get_python_version())
+ else:
+@@ -334,7 +342,7 @@ def get_python_lib(plat_specific=0, standard_lib=0, prefix=None):
+ else:
+ # Pure Python
+ libdir = "lib"
+- libpython = os.path.join(prefix, libdir,
++ libpython = os.path.join(prefix, lib_basename,
+ "python" + get_python_version())
if standard_lib:
return libpython
- else:
diff --git a/meta/recipes-devtools/python/python3/avoid_warning_about_tkinter.patch b/meta/recipes-devtools/python/python3/avoid_warning_about_tkinter.patch
index 24e67b4ca1..2de72b7199 100644
--- a/meta/recipes-devtools/python/python3/avoid_warning_about_tkinter.patch
+++ b/meta/recipes-devtools/python/python3/avoid_warning_about_tkinter.patch
@@ -1,4 +1,4 @@
-From fead48c8b501a8d7c3db21df2e599f90f38f11d3 Mon Sep 17 00:00:00 2001
+From 6a23d52c905cd1f6a5944255903ec86ea8b904bb Mon Sep 17 00:00:00 2001
From: Andrei Gherzan <andrei@gherzan.ro>
Date: Mon, 28 Jan 2019 15:57:54 +0000
Subject: [PATCH] _tkinter module needs tk module along with tcl. tk is not yet
@@ -11,26 +11,21 @@ Also simply disable the tk module since its not in DEPENDS.
Signed-off-by: Andrei Gherzan <andrei@gherzan.ro>
---
- setup.py | 8 +++++---
- 1 file changed, 5 insertions(+), 3 deletions(-)
+ setup.py | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/setup.py b/setup.py
-index fbec00d..b7a36a6 100644
+index 11b5cf5..2be4738 100644
--- a/setup.py
+++ b/setup.py
-@@ -1623,10 +1623,12 @@ class PyBuildExt(build_ext):
- self.extensions.extend(exts)
+@@ -1895,8 +1895,8 @@ class PyBuildExt(build_ext):
+ self.detect_decimal()
+ self.detect_ctypes()
+ self.detect_multiprocessing()
+- if not self.detect_tkinter():
+- self.missing.append('_tkinter')
++# if not self.detect_tkinter():
++# self.missing.append('_tkinter')
+ self.detect_uuid()
- # Call the method for detecting whether _tkinter can be compiled
-- self.detect_tkinter(inc_dirs, lib_dirs)
-+ # self.detect_tkinter(inc_dirs, lib_dirs)
-
-- if '_tkinter' not in [e.name for e in self.extensions]:
-- missing.append('_tkinter')
-+ # tkinter module will not be avalaible as yocto
-+ # doesn't have tk integrated (yet)
-+ #if '_tkinter' not in [e.name for e in self.extensions]:
-+ # missing.append('_tkinter')
-
- # Build the _uuid module if possible
- uuid_incs = find_file("uuid.h", inc_dirs, ["/usr/include/uuid"])
+ ## # Uncomment these lines if you want to play with xxmodule.c
diff --git a/meta/recipes-devtools/python/python3/cgi_py.patch b/meta/recipes-devtools/python/python3/cgi_py.patch
index 6c4ba54320..81e6099cfb 100644
--- a/meta/recipes-devtools/python/python3/cgi_py.patch
+++ b/meta/recipes-devtools/python/python3/cgi_py.patch
@@ -1,4 +1,4 @@
-From 62336285cba38017b35cb761c03f0c7e80a671a3 Mon Sep 17 00:00:00 2001
+From 5b0d1212d661e9a8a36738279fc9109f96eebd25 Mon Sep 17 00:00:00 2001
From: Mark Hatle <mark.hatle@windriver.com>
Date: Wed, 21 Sep 2011 20:55:33 -0500
Subject: [PATCH] Lib/cgi.py: Update the script as mentioned in the comment
@@ -12,7 +12,7 @@ Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
1 file changed, 1 insertion(+), 10 deletions(-)
diff --git a/Lib/cgi.py b/Lib/cgi.py
-index 8cf6687..094c7b4 100755
+index 6cb8cf2..a873ff3 100755
--- a/Lib/cgi.py
+++ b/Lib/cgi.py
@@ -1,13 +1,4 @@
diff --git a/meta/recipes-devtools/python/python3/create_manifest3.py b/meta/recipes-devtools/python/python3/create_manifest3.py
index 4da02a2991..045240ea0b 100644
--- a/meta/recipes-devtools/python/python3/create_manifest3.py
+++ b/meta/recipes-devtools/python/python3/create_manifest3.py
@@ -36,7 +36,7 @@
# Tha method to handle cached files does not work when a module includes a folder which
# itself contains the pycache folder, gladly this is almost never the case.
#
-# Author: Alejandro Enedino Hernandez Samaniego "aehs29" <aehs29 at gmail dot com>
+# Author: Alejandro Enedino Hernandez Samaniego <alejandro at enedino dot org>
import sys
@@ -45,6 +45,11 @@ import json
import os
import collections
+if '-d' in sys.argv:
+ debugFlag = '-d'
+else:
+ debugFlag = ''
+
# Get python version from ${PYTHON_MAJMIN}
pyversion = str(sys.argv[1])
@@ -84,6 +89,12 @@ def prepend_comments(comments, json_manifest):
manifest.seek(0, 0)
manifest.write(comments + json_contents)
+def print_indent(msg, offset):
+ for l in msg.splitlines():
+ msg = ' ' * offset + l
+ print(msg)
+
+
# Read existing JSON manifest
with open('python3-manifest.json') as manifest:
# The JSON format doesn't allow comments so we hack the call to keep the comments using a marker
@@ -99,7 +110,7 @@ with open('python3-manifest.json') as manifest:
# Not exactly the same so it should not be a function
#
-print ('Getting dependencies for package: core')
+print_indent('Getting dependencies for package: core', 0)
# This special call gets the core dependencies and
@@ -109,7 +120,7 @@ print ('Getting dependencies for package: core')
# on the new core package, they will still find them
# even when checking the old_manifest
-output = subprocess.check_output([sys.executable, 'get_module_deps3.py', 'python-core-package']).decode('utf8')
+output = subprocess.check_output([sys.executable, 'get_module_deps3.py', 'python-core-package', '%s' % debugFlag]).decode('utf8')
for coredep in output.split():
coredep = coredep.replace(pyversion,'${PYTHON_MAJMIN}')
if isCached(coredep):
@@ -149,17 +160,16 @@ for filedep in old_manifest['core']['files']:
# Get actual module name , shouldnt be affected by libdir/bindir, etc.
pymodule = os.path.splitext(os.path.basename(os.path.normpath(filedep)))[0]
-
# We now know that were dealing with a python module, so we can import it
# and check what its dependencies are.
# We launch a separate task for each module for deterministic behavior.
# Each module will only import what is necessary for it to work in specific.
# The output of each task will contain each module's dependencies
- print ('Getting dependencies for module: %s' % pymodule)
- output = subprocess.check_output([sys.executable, 'get_module_deps3.py', '%s' % pymodule]).decode('utf8')
- print ('The following dependencies were found for module %s:\n' % pymodule)
- print (output)
+ print_indent('Getting dependencies for module: %s' % pymodule, 2)
+ output = subprocess.check_output([sys.executable, 'get_module_deps3.py', '%s' % pymodule, '%s' % debugFlag]).decode('utf8')
+ print_indent('The following dependencies were found for module %s:\n' % pymodule, 4)
+ print_indent(output, 6)
for pymodule_dep in output.split():
@@ -178,12 +188,13 @@ for filedep in old_manifest['core']['files']:
# all others will use this a base.
+print('\n\nChecking for directories...\n')
# To improve the script speed, we check which packages contain directories
# since we will be looping through (only) those later.
for pypkg in old_manifest:
for filedep in old_manifest[pypkg]['files']:
if isFolder(filedep):
- print ('%s is a folder' % filedep)
+ print_indent('%s is a directory' % filedep, 2)
if pypkg not in hasfolders:
hasfolders.append(pypkg)
if filedep not in allfolders:
@@ -221,14 +232,14 @@ for pypkg in old_manifest:
print('\n')
print('--------------------------')
- print ('Handling package %s' % pypkg)
+ print('Handling package %s' % pypkg)
print('--------------------------')
# Handle special cases, we assume that when they were manually added
# to the manifest we knew what we were doing.
special_packages = ['misc', 'modules', 'dev', 'tests']
if pypkg in special_packages or 'staticdev' in pypkg:
- print('Passing %s package directly' % pypkg)
+ print_indent('Passing %s package directly' % pypkg, 2)
new_manifest[pypkg] = old_manifest[pypkg]
continue
@@ -259,7 +270,7 @@ for pypkg in old_manifest:
# Get actual module name , shouldnt be affected by libdir/bindir, etc.
# We need to check if the imported module comes from another (e.g. sqlite3.dump)
- path,pymodule = os.path.split(filedep)
+ path, pymodule = os.path.split(filedep)
path = os.path.basename(path)
pymodule = os.path.splitext(os.path.basename(pymodule))[0]
@@ -279,10 +290,10 @@ for pypkg in old_manifest:
# Each module will only import what is necessary for it to work in specific.
# The output of each task will contain each module's dependencies
- print ('\nGetting dependencies for module: %s' % pymodule)
- output = subprocess.check_output([sys.executable, 'get_module_deps3.py', '%s' % pymodule]).decode('utf8')
- print ('The following dependencies were found for module %s:\n' % pymodule)
- print (output)
+ print_indent('\nGetting dependencies for module: %s' % pymodule, 2)
+ output = subprocess.check_output([sys.executable, 'get_module_deps3.py', '%s' % pymodule, '%s' % debugFlag]).decode('utf8')
+ print_indent('The following dependencies were found for module %s:\n' % pymodule, 4)
+ print_indent(output, 6)
reportFILES = []
reportRDEPS = []
@@ -325,7 +336,7 @@ for pypkg in old_manifest:
# print('Checking folder %s on package %s' % (pymodule_dep,pypkg_with_folder))
for folder_dep in old_manifest[pypkg_with_folder]['files'] or folder_dep in old_manifest[pypkg_with_folder]['cached']:
if folder_dep == folder:
- print ('%s folder found in %s' % (folder, pypkg_with_folder))
+ print ('%s directory found in %s' % (folder, pypkg_with_folder))
folderFound = True
if pypkg_with_folder not in new_manifest[pypkg]['rdepends'] and pypkg_with_folder != pypkg:
new_manifest[pypkg]['rdepends'].append(pypkg_with_folder)
@@ -424,7 +435,7 @@ prepend_comments(comments,'python3-manifest.json.new')
if (repeated):
error_msg = '\n\nERROR:\n'
- error_msg += 'The following files are repeated (contained in more than one package),\n'
+ error_msg += 'The following files were found in more than one package),\n'
error_msg += 'this is likely to happen when new files are introduced after an upgrade,\n'
error_msg += 'please check which package should get it,\n modify the manifest accordingly and re-run the create_manifest task:\n'
error_msg += '\n'.join(repeated)
diff --git a/meta/recipes-devtools/python/python3/crosspythonpath.patch b/meta/recipes-devtools/python/python3/crosspythonpath.patch
new file mode 100644
index 0000000000..5bb25264da
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/crosspythonpath.patch
@@ -0,0 +1,34 @@
+From baa3a232e64e9bf5ae945366efdb8088ccf9b828 Mon Sep 17 00:00:00 2001
+From: Ricardo Ribalda <ricardo@ribalda.com>
+Date: Tue, 18 Nov 2014 03:35:33 -0500
+Subject: [PATCH] configure.ac: add CROSSPYTHONPATH into PYTHONPATH for
+ PYTHON_FOR_BUILD
+
+When building x86->x86 the system will try to execute .so and related items
+from the default PYTHONPATH. This will fail if the target CPU contains
+instructions that the host CPU does not have, add CROSSPYTHONPATH
+into PYTHONPATH so we can prepend the list to find correct libs.
+
+Upstream-Status: Inappropriate [OE-Core integration specific]
+
+Credits-to: Mark Hatle <mark.hatle@windriver.com>
+Credits-to: Jackie Huang <jackie.huang@windriver.com>
+Signed-off-by: Ricardo Ribalda <ricardo@ribalda.com>
+
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index d0db062..e5e3df8 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -83,7 +83,7 @@ if test "$cross_compiling" = yes; then
+ AC_MSG_ERROR([python$PACKAGE_VERSION interpreter not found])
+ fi
+ AC_MSG_RESULT($interp)
+- PYTHON_FOR_BUILD='_PYTHON_PROJECT_BASE=$(abs_builddir) _PYTHON_HOST_PLATFORM=$(_PYTHON_HOST_PLATFORM) PYTHONPATH=$(shell test -f pybuilddir.txt && echo $(abs_builddir)/`cat pybuilddir.txt`:)$(srcdir)/Lib _PYTHON_SYSCONFIGDATA_NAME=_sysconfigdata_$(ABIFLAGS)_$(MACHDEP)_$(MULTIARCH) '$interp
++ PYTHON_FOR_BUILD='_PYTHON_PROJECT_BASE=$(abs_builddir) _PYTHON_HOST_PLATFORM=$(_PYTHON_HOST_PLATFORM) PYTHONPATH=$(CROSSPYTHONPATH):$(shell test -f pybuilddir.txt && echo $(abs_builddir)/`cat pybuilddir.txt`:)$(srcdir)/Lib _PYTHON_SYSCONFIGDATA_NAME=_sysconfigdata_$(ABIFLAGS)_$(MACHDEP)_$(MULTIARCH) '$interp
+ fi
+ elif test "$cross_compiling" = maybe; then
+ AC_MSG_ERROR([Cross compiling required --host=HOST-TUPLE and --build=ARCH])
diff --git a/meta/recipes-devtools/python/python3/get_module_deps3.py b/meta/recipes-devtools/python/python3/get_module_deps3.py
index fd12baad84..1f4c982aed 100644
--- a/meta/recipes-devtools/python/python3/get_module_deps3.py
+++ b/meta/recipes-devtools/python/python3/get_module_deps3.py
@@ -3,12 +3,17 @@
# them out, the output of this execution will have all dependencies
# for a specific module, which will be parsed an dealt on create_manifest.py
#
-# Author: Alejandro Enedino Hernandez Samaniego "aehs29" <aehs29@gmail.com>
+# Author: Alejandro Enedino Hernandez Samaniego <alejandro at enedino dot org>
-# We can get a log per module, for all the dependencies that were found, but its messy.
-debug=False
import sys
+import os
+
+# We can get a log per module, for all the dependencies that were found, but its messy.
+if '-d' in sys.argv:
+ debug = True
+else:
+ debug = False
# We can get a list of the modules which are currently required to run python
# so we run python-core and get its modules, we then import what we need
@@ -18,13 +23,13 @@ import sys
# We use importlib to achieve this, so we also need to know what modules importlib needs
import importlib
-core_deps=set(sys.modules)
+core_deps = set(sys.modules)
def fix_path(dep_path):
import os
# We DONT want the path on our HOST system
- pivot='recipe-sysroot-native'
- dep_path=dep_path[dep_path.find(pivot)+len(pivot):]
+ pivot = 'recipe-sysroot-native'
+ dep_path = dep_path[dep_path.find(pivot)+len(pivot):]
if '/usr/bin' in dep_path:
dep_path = dep_path.replace('/usr/bin''${bindir}')
@@ -45,19 +50,30 @@ def fix_path(dep_path):
# Module to import was passed as an argument
current_module = str(sys.argv[1]).rstrip()
-if(debug==True):
- log = open('log_%s' % current_module,'w')
+if debug == True:
+ log = open('temp/log_%s' % current_module.strip('.*'),'w')
log.write('Module %s generated the following dependencies:\n' % current_module)
-try:
- importlib.import_module('%s' % current_module)
+try:
+ m = importlib.import_module(current_module)
+ # handle python packages which may not include all modules in the __init__
+ if os.path.basename(m.__file__) == "__init__.py":
+ modulepath = os.path.dirname(m.__file__)
+ for i in os.listdir(modulepath):
+ if i.startswith("_") or not(i.endswith(".py")):
+ continue
+ submodule = "{}.{}".format(current_module, i[:-3])
+ try:
+ importlib.import_module(submodule)
+ except:
+ pass # ignore all import or other exceptions raised during import
except ImportError as e:
- if (debug==True):
- log.write('Module was not found')
+ if debug == True:
+ log.write('Module was not found\n')
pass
# Get current module dependencies, dif will contain a list of specific deps for this module
-module_deps=set(sys.modules)
+module_deps = set(sys.modules)
# We handle the core package (1st pass on create_manifest.py) as a special case
if current_module == 'python-core-package':
@@ -69,14 +85,18 @@ else:
# Check where each dependency came from
for item in dif:
- dep_path=''
+ # Main module returns script filename, __main matches mp_main__ as well
+ if 'main__' in item:
+ continue
+
+ dep_path = ''
try:
- if (debug==True):
- log.write('Calling: sys.modules[' + '%s' % item + '].__file__\n')
+ if debug == True:
+ log.write('\nCalling: sys.modules[' + '%s' % item + '].__file__\n')
dep_path = sys.modules['%s' % item].__file__
except AttributeError as e:
# Deals with thread (builtin module) not having __file__ attribute
- if debug==True:
+ if debug == True:
log.write(item + ' ')
log.write(str(e))
log.write('\n')
@@ -84,11 +104,16 @@ for item in dif:
except NameError as e:
# Deals with NameError: name 'dep_path' is not defined
# because module is not found (wasn't compiled?), e.g. bddsm
- if (debug==True):
+ if debug == True:
log.write(item+' ')
log.write(str(e))
pass
+ if dep_path == '':
+ continue
+ if debug == True:
+ log.write('Dependency path found:\n%s\n' % dep_path)
+
# Site-customize is a special case since we (OpenEmbedded) put it there manually
if 'sitecustomize' in dep_path:
dep_path = '${libdir}/python${PYTHON_MAJMIN}/sitecustomize.py'
@@ -99,48 +124,51 @@ for item in dif:
dep_path = fix_path(dep_path)
import sysconfig
- soabi=sysconfig.get_config_var('SOABI')
+ soabi = sysconfig.get_config_var('SOABI')
# Check if its a shared library and deconstruct it
if soabi in dep_path:
- if (debug==True):
- log.write('Shared library found in %s' % dep_path)
+ if debug == True:
+ log.write('Shared library found in %s\n' % dep_path)
dep_path = dep_path.replace(soabi,'*')
print (dep_path)
continue
+ if "_sysconfigdata" in dep_path:
+ dep_path = dep_path.replace(sysconfig._get_sysconfigdata_name(), "_sysconfigdata*")
- if (debug==True):
+ if debug == True:
log.write(dep_path+'\n')
# Prints out result, which is what will be used by create_manifest
print (dep_path)
- import imp
- cpython_tag = imp.get_tag()
- cached=''
+ cpython_tag = sys.implementation.cache_tag
+ cached = ''
# Theres no naive way to find *.pyc files on python3
try:
- if (debug==True):
- log.write('Calling: sys.modules[' + '%s' % item + '].__cached__\n')
+ if debug == True:
+ log.write('\nCalling: sys.modules[' + '%s' % item + '].__cached__\n')
cached = sys.modules['%s' % item].__cached__
except AttributeError as e:
# Deals with thread (builtin module) not having __cached__ attribute
- if debug==True:
+ if debug == True:
log.write(item + ' ')
log.write(str(e))
log.write('\n')
pass
except NameError as e:
# Deals with NameError: name 'cached' is not defined
- if (debug==True):
+ if debug == True:
log.write(item+' ')
log.write(str(e))
pass
if cached is not None:
- if (debug==True):
- log.write(cached)
+ if debug == True:
+ log.write(cached + '\n')
cached = fix_path(cached)
cached = cached.replace(cpython_tag,'*')
+ if "_sysconfigdata" in cached:
+ cached = cached.replace(sysconfig._get_sysconfigdata_name(), "_sysconfigdata*")
print (cached)
-if debug==True:
+if debug == True:
log.close()
diff --git a/meta/recipes-devtools/python/python3/makerace.patch b/meta/recipes-devtools/python/python3/makerace.patch
new file mode 100644
index 0000000000..2c06784ffc
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/makerace.patch
@@ -0,0 +1,32 @@
+From 7cc02dfa593d1350a689d64a7a6f2dc6478afe24 Mon Sep 17 00:00:00 2001
+From: Richard Purdie <richard.purdie@linuxfoundation.org>
+Date: Tue, 13 Jul 2021 23:19:29 +0100
+Subject: [PATCH] python3: Fix make race
+
+libainstall installs python-config.py but the .pyc cache files are generated
+by the libinstall target. This means some builds may not generate the pyc files
+for python-config.py depending on the order things happen in. This means builds
+are not always reproducible.
+
+Add a dependency to avoid the race.
+
+Upstream-Status: Pending
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+
+---
+ Makefile.pre.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Makefile.pre.in b/Makefile.pre.in
+index 5e13ba2..026bffd 100644
+--- a/Makefile.pre.in
++++ b/Makefile.pre.in
+@@ -1527,7 +1527,7 @@ TESTSUBDIRS= ctypes/test \
+ unittest/test unittest/test/testmock
+
+ TEST_MODULES=@TEST_MODULES@
+-libinstall: build_all $(srcdir)/Modules/xxmodule.c
++libinstall: build_all $(srcdir)/Modules/xxmodule.c libainstall
+ @for i in $(SCRIPTDIR) $(LIBDEST); \
+ do \
+ if test ! -d $(DESTDIR)$$i; then \
diff --git a/meta/recipes-devtools/python/python3/python-config.patch b/meta/recipes-devtools/python/python3/python-config.patch
index f23b8b7df0..4da399e46e 100644
--- a/meta/recipes-devtools/python/python3/python-config.patch
+++ b/meta/recipes-devtools/python/python3/python-config.patch
@@ -1,4 +1,7 @@
-python-config: Revert to using distutils.sysconfig
+From 8632f25ac4e2c53a3c2c8a1b4fc97fc86e8aad5a Mon Sep 17 00:00:00 2001
+From: Tyler Hall <tylerwhall@gmail.com>
+Date: Sun, 4 May 2014 20:06:43 -0400
+Subject: [PATCH] python-config: Revert to using distutils.sysconfig
The newer sysconfig module shares some code with distutils.sysconfig, but the same modifications as in
@@ -11,29 +14,35 @@ as appropriate.
Upstream-Status: Inappropriate [Embedded Specific]
Signed-off-by: Tyler Hall <tylerwhall@gmail.com>
-:
-Index: Python-3.3.3/Misc/python-config.in
-===================================================================
---- Python-3.3.3.orig/Misc/python-config.in
-+++ Python-3.3.3/Misc/python-config.in
-@@ -4,7 +4,7 @@
+
+---
+ Misc/python-config.in | 12 +++++++-----
+ 1 file changed, 7 insertions(+), 5 deletions(-)
+
+diff --git a/Misc/python-config.in b/Misc/python-config.in
+index ebd99da..0492e08 100644
+--- a/Misc/python-config.in
++++ b/Misc/python-config.in
+@@ -6,7 +6,9 @@
import getopt
import os
import sys
-import sysconfig
++import warnings
++warnings.filterwarnings("ignore", category=DeprecationWarning)
+from distutils import sysconfig
valid_opts = ['prefix', 'exec-prefix', 'includes', 'libs', 'cflags',
- 'ldflags', 'extension-suffix', 'help', 'abiflags', 'configdir']
-@@ -32,14 +32,14 @@ if '--help' in opt_flags:
+ 'ldflags', 'extension-suffix', 'help', 'abiflags', 'configdir',
+@@ -35,14 +37,14 @@ if '--help' in opt_flags:
for opt in opt_flags:
if opt == '--prefix':
-- print(sysconfig.get_config_var('prefix'))
+- print(getvar('prefix'))
+ print(sysconfig.PREFIX)
elif opt == '--exec-prefix':
-- print(sysconfig.get_config_var('exec_prefix'))
+- print(getvar('exec_prefix'))
+ print(sysconfig.EXEC_PREFIX)
elif opt in ('--includes', '--cflags'):
diff --git a/meta/recipes-devtools/python/python3/python3-manifest.json b/meta/recipes-devtools/python/python3/python3-manifest.json
index 0a4ab2cbe4..2f5dad6486 100644
--- a/meta/recipes-devtools/python/python3/python3-manifest.json
+++ b/meta/recipes-devtools/python/python3/python3-manifest.json
@@ -115,7 +115,7 @@
"cached": []
},
"asyncio": {
- "summary": "Python Asynchronous I/",
+ "summary": "Python Asynchronous I/O",
"rdepends": [
"core",
"io",
@@ -172,36 +172,27 @@
],
"files": [
"${libdir}/python${PYTHON_MAJMIN}/compileall.py",
+ "${libdir}/python${PYTHON_MAJMIN}/filecmp.py",
"${libdir}/python${PYTHON_MAJMIN}/py_compile.py"
],
"cached": [
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/compileall.*.pyc",
+ "${libdir}/python${PYTHON_MAJMIN}/__pycache__/filecmp.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/py_compile.*.pyc"
]
},
"compression": {
"summary": "Python high-level compression support",
"rdepends": [
- "core",
- "shell",
- "unixadmin"
+ "core"
],
"files": [
- "${libdir}/python${PYTHON_MAJMIN}/_compression.py",
- "${libdir}/python${PYTHON_MAJMIN}/bz2.py",
"${libdir}/python${PYTHON_MAJMIN}/gzip.py",
- "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_bz2.*.so",
- "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_lzma.*.so",
- "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/zlib.*.so",
- "${libdir}/python${PYTHON_MAJMIN}/lzma.py",
"${libdir}/python${PYTHON_MAJMIN}/tarfile.py",
"${libdir}/python${PYTHON_MAJMIN}/zipfile.py"
],
"cached": [
- "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_compression.*.pyc",
- "${libdir}/python${PYTHON_MAJMIN}/__pycache__/bz2.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/gzip.*.pyc",
- "${libdir}/python${PYTHON_MAJMIN}/__pycache__/lzma.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/tarfile.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/zipfile.*.pyc"
]
@@ -210,9 +201,10 @@
"summary": "Python interpreter and core modules",
"rdepends": [],
"files": [
- "${bindir}/python*[!-config]",
- "${includedir}/python${PYTHON_BINABI}/pyconfig*.h",
- "${prefix}/lib/python${PYTHON_MAJMIN}/config*/*[!.a]",
+ "${bindir}/python${PYTHON_MAJMIN}",
+ "${bindir}/python${PYTHON_MAJMIN}.real",
+ "${bindir}/python3",
+ "${includedir}/python${PYTHON_MAJMIN}/pyconfig*.h",
"${libdir}/python${PYTHON_MAJMIN}/UserDict.py",
"${libdir}/python${PYTHON_MAJMIN}/UserList.py",
"${libdir}/python${PYTHON_MAJMIN}/UserString.py",
@@ -220,6 +212,7 @@
"${libdir}/python${PYTHON_MAJMIN}/_abcoll.py",
"${libdir}/python${PYTHON_MAJMIN}/_bootlocale.py",
"${libdir}/python${PYTHON_MAJMIN}/_collections_abc.py",
+ "${libdir}/python${PYTHON_MAJMIN}/_compression.py",
"${libdir}/python${PYTHON_MAJMIN}/_markupbase.py",
"${libdir}/python${PYTHON_MAJMIN}/_sitebuiltins.py",
"${libdir}/python${PYTHON_MAJMIN}/_sysconfigdata*.py",
@@ -228,6 +221,7 @@
"${libdir}/python${PYTHON_MAJMIN}/argparse.py",
"${libdir}/python${PYTHON_MAJMIN}/ast.py",
"${libdir}/python${PYTHON_MAJMIN}/bisect.py",
+ "${libdir}/python${PYTHON_MAJMIN}/bz2.py",
"${libdir}/python${PYTHON_MAJMIN}/code.py",
"${libdir}/python${PYTHON_MAJMIN}/codecs.py",
"${libdir}/python${PYTHON_MAJMIN}/codeop.py",
@@ -244,6 +238,7 @@
"${libdir}/python${PYTHON_MAJMIN}/encodings/latin_1.py",
"${libdir}/python${PYTHON_MAJMIN}/encodings/utf_8.py",
"${libdir}/python${PYTHON_MAJMIN}/enum.py",
+ "${libdir}/python${PYTHON_MAJMIN}/fnmatch.py",
"${libdir}/python${PYTHON_MAJMIN}/functools.py",
"${libdir}/python${PYTHON_MAJMIN}/genericpath.py",
"${libdir}/python${PYTHON_MAJMIN}/getopt.py",
@@ -264,13 +259,16 @@
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/__pycache__/time.*.so",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/__pycache__/xreadlines.*.so",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_bisect.*.so",
+ "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_bz2.*.so",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_csv.*.so",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_heapq.*.so",
+ "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_lzma.*.so",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_opcode.*.so",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_posixsubprocess.*.so",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_struct.*.so",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/array.*.so",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/binascii.*.so",
+ "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/grp.*.so",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/math.*.so",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/parser.*.so",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/readline.*.so",
@@ -278,19 +276,26 @@
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/time.*.so",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/unicodedata.*.so",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/xreadlines.*.so",
+ "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/zlib.*.so",
"${libdir}/python${PYTHON_MAJMIN}/linecache.py",
"${libdir}/python${PYTHON_MAJMIN}/locale.py",
+ "${libdir}/python${PYTHON_MAJMIN}/lzma.py",
"${libdir}/python${PYTHON_MAJMIN}/new.py",
+ "${libdir}/python${PYTHON_MAJMIN}/ntpath.py",
"${libdir}/python${PYTHON_MAJMIN}/opcode.py",
"${libdir}/python${PYTHON_MAJMIN}/operator.py",
"${libdir}/python${PYTHON_MAJMIN}/optparse.py",
"${libdir}/python${PYTHON_MAJMIN}/os.py",
+ "${libdir}/python${PYTHON_MAJMIN}/pathlib.py",
+ "${libdir}/python${PYTHON_MAJMIN}/pkgutil.py",
"${libdir}/python${PYTHON_MAJMIN}/platform.py",
"${libdir}/python${PYTHON_MAJMIN}/posixpath.py",
"${libdir}/python${PYTHON_MAJMIN}/re.py",
"${libdir}/python${PYTHON_MAJMIN}/reprlib.py",
"${libdir}/python${PYTHON_MAJMIN}/rlcompleter.py",
+ "${libdir}/python${PYTHON_MAJMIN}/runpy.py",
"${libdir}/python${PYTHON_MAJMIN}/selectors.py",
+ "${libdir}/python${PYTHON_MAJMIN}/shutil.py",
"${libdir}/python${PYTHON_MAJMIN}/signal.py",
"${libdir}/python${PYTHON_MAJMIN}/site.py",
"${libdir}/python${PYTHON_MAJMIN}/sitecustomize.py",
@@ -309,21 +314,27 @@
"${libdir}/python${PYTHON_MAJMIN}/tokenize.py",
"${libdir}/python${PYTHON_MAJMIN}/traceback.py",
"${libdir}/python${PYTHON_MAJMIN}/types.py",
+ "${libdir}/python${PYTHON_MAJMIN}/typing.py",
+ "${libdir}/python${PYTHON_MAJMIN}/urllib",
+ "${libdir}/python${PYTHON_MAJMIN}/urllib/parse.py",
"${libdir}/python${PYTHON_MAJMIN}/warnings.py",
- "${libdir}/python${PYTHON_MAJMIN}/weakref.py"
+ "${libdir}/python${PYTHON_MAJMIN}/weakref.py",
+ "${prefix}/lib/python${PYTHON_MAJMIN}/config*/*[!.a]"
],
"cached": [
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/__future__.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/_bootlocale.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/_collections_abc.*.pyc",
+ "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_compression.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/_markupbase.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/_sitebuiltins.*.pyc",
- "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_sysconfigdata.*.pyc",
+ "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_sysconfigdata*.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/_weakrefset.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/abc.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/argparse.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/ast.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/bisect.*.pyc",
+ "${libdir}/python${PYTHON_MAJMIN}/__pycache__/bz2.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/code.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/codecs.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/codeop.*.pyc",
@@ -334,6 +345,7 @@
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/csv.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/dis.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/enum.*.pyc",
+ "${libdir}/python${PYTHON_MAJMIN}/__pycache__/fnmatch.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/functools.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/genericpath.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/getopt.*.pyc",
@@ -345,16 +357,22 @@
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/keyword.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/linecache.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/locale.*.pyc",
+ "${libdir}/python${PYTHON_MAJMIN}/__pycache__/lzma.*.pyc",
+ "${libdir}/python${PYTHON_MAJMIN}/__pycache__/ntpath.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/opcode.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/operator.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/optparse.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/os.*.pyc",
+ "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pathlib.*.pyc",
+ "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pkgutil.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/platform.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/posixpath.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/re.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/reprlib.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/rlcompleter.*.pyc",
+ "${libdir}/python${PYTHON_MAJMIN}/__pycache__/runpy.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/selectors.*.pyc",
+ "${libdir}/python${PYTHON_MAJMIN}/__pycache__/shutil.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/signal.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/site.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/sre_compile.*.pyc",
@@ -372,6 +390,7 @@
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/tokenize.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/traceback.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/types.*.pyc",
+ "${libdir}/python${PYTHON_MAJMIN}/__pycache__/typing.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/warnings.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/weakref.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/collections/__pycache__",
@@ -383,7 +402,9 @@
"${libdir}/python${PYTHON_MAJMIN}/importlib/__pycache__",
"${libdir}/python${PYTHON_MAJMIN}/importlib/__pycache__/abc.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/importlib/__pycache__/machinery.*.pyc",
- "${libdir}/python${PYTHON_MAJMIN}/importlib/__pycache__/util.*.pyc"
+ "${libdir}/python${PYTHON_MAJMIN}/importlib/__pycache__/util.*.pyc",
+ "${libdir}/python${PYTHON_MAJMIN}/urllib/__pycache__",
+ "${libdir}/python${PYTHON_MAJMIN}/urllib/__pycache__/parse.*.pyc"
]
},
"crypt": {
@@ -399,10 +420,10 @@
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_blake2.*.so",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_crypt.*.so",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_hashlib.*.so",
+ "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_md5.*.so",
+ "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_sha1.*.so",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_sha256.*.so",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_sha3.*.so",
- "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_sha1.*.so",
- "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_md5.*.so",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_sha512.*.so"
],
"cached": [
@@ -413,7 +434,10 @@
"ctypes": {
"summary": "Python C types support",
"rdepends": [
- "core"
+ "core",
+ "crypt",
+ "io",
+ "math"
],
"files": [
"${libdir}/python${PYTHON_MAJMIN}/ctypes",
@@ -484,7 +508,7 @@
"files": [
"${base_libdir}/*.a",
"${base_libdir}/*.o",
- "${bindir}/python*-config",
+ "${bindir}/python*-config*",
"${datadir}/aclocal",
"${datadir}/pkgconfig",
"${includedir}",
@@ -495,7 +519,8 @@
"${libdir}/pkgconfig"
],
"rdepends": [
- "core"
+ "core",
+ "distutils"
],
"summary": "Python development package"
},
@@ -511,22 +536,21 @@
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/difflib.*.pyc"
]
},
- "distutils-staticdev": {
- "cached": [
- "${libdir}/python${PYTHON_MAJMIN}/config/__pycache__/lib*.a"
- ],
- "files": [
- "${libdir}/python${PYTHON_MAJMIN}/config/lib*.a"
- ],
+ "distutils-windows": {
+ "summary": "Python distribution utilities (Windows installer stubs)",
"rdepends": [
- "distutils"
+ "core"
],
- "summary": "Python distribution utilities (static libraries)"
+ "files": [],
+ "cached": []
},
"distutils": {
"summary": "Python Distribution Utilities",
"rdepends": [
- "core"
+ "compression",
+ "core",
+ "email",
+ "stringold"
],
"files": [
"${libdir}/python${PYTHON_MAJMIN}/distutils"
@@ -539,7 +563,6 @@
"core",
"debugger",
"difflib",
- "logging",
"pprint",
"shell",
"stringold",
@@ -560,7 +583,9 @@
"datetime",
"io",
"math",
- "netclient"
+ "mime",
+ "netclient",
+ "stringold"
],
"files": [
"${libdir}/python${PYTHON_MAJMIN}/email",
@@ -631,13 +656,11 @@
"io": {
"summary": "Python low-level I/O",
"rdepends": [
- "compression",
"core",
"crypt",
"math",
"netclient",
- "shell",
- "unixadmin"
+ "shell"
],
"files": [
"${libdir}/python${PYTHON_MAJMIN}/_pyio.py",
@@ -674,7 +697,11 @@
"summary": "Python logging support",
"rdepends": [
"core",
- "stringold"
+ "io",
+ "netserver",
+ "pickle",
+ "stringold",
+ "threading"
],
"files": [
"${libdir}/python${PYTHON_MAJMIN}/logging"
@@ -784,33 +811,42 @@
"profile",
"pydoc",
"resource",
- "runpy",
"shell",
"smtpd",
"sqlite3",
+ "statistics",
"stringold",
"syslog",
"terminal",
"threading",
"tkinter",
- "typing",
"unittest",
"unixadmin",
"venv",
"xml",
"xmlrpc"
],
+ "rrecommends": [
+ "distutils-windows"
+ ],
"summary": "All Python modules"
},
"multiprocessing": {
"summary": "Python multiprocessing support",
"rdepends": [
"core",
+ "crypt",
+ "ctypes",
"io",
- "pickle"
+ "math",
+ "mmap",
+ "netclient",
+ "pickle",
+ "threading"
],
"files": [
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_multiprocessing.*.so",
+ "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_posixshmem.*.so",
"${libdir}/python${PYTHON_MAJMIN}/multiprocessing"
],
"cached": []
@@ -837,10 +873,9 @@
"${libdir}/python${PYTHON_MAJMIN}/mimetypes.py",
"${libdir}/python${PYTHON_MAJMIN}/nntplib.py",
"${libdir}/python${PYTHON_MAJMIN}/poplib.py",
+ "${libdir}/python${PYTHON_MAJMIN}/secrets.py",
"${libdir}/python${PYTHON_MAJMIN}/smtplib.py",
"${libdir}/python${PYTHON_MAJMIN}/telnetlib.py",
- "${libdir}/python${PYTHON_MAJMIN}/urllib",
- "${libdir}/python${PYTHON_MAJMIN}/urllib/__pycache__",
"${libdir}/python${PYTHON_MAJMIN}/uuid.py"
],
"cached": [
@@ -850,6 +885,7 @@
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/mimetypes.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/nntplib.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/poplib.*.pyc",
+ "${libdir}/python${PYTHON_MAJMIN}/__pycache__/secrets.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/smtplib.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/telnetlib.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/uuid.*.pyc"
@@ -858,7 +894,6 @@
"netserver": {
"summary": "Python Internet Protocol servers",
"rdepends": [
- "compression",
"core",
"crypt",
"datetime",
@@ -868,9 +903,7 @@
"math",
"mime",
"netclient",
- "shell",
- "stringold",
- "unixadmin"
+ "stringold"
],
"files": [
"${libdir}/python${PYTHON_MAJMIN}/cgi.py",
@@ -927,12 +960,8 @@
"rdepends": [
"core"
],
- "files": [
- "${libdir}/python${PYTHON_MAJMIN}/pkgutil.py"
- ],
- "cached": [
- "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pkgutil.*.pyc"
- ]
+ "files": [],
+ "cached": []
},
"plistlib": {
"summary": "Generate and parse Mac OS X .plist files",
@@ -951,7 +980,8 @@
"pprint": {
"summary": "Python pretty-print support",
"rdepends": [
- "core"
+ "core",
+ "profile"
],
"files": [
"${libdir}/python${PYTHON_MAJMIN}/pprint.py"
@@ -967,12 +997,14 @@
],
"files": [
"${libdir}/python${PYTHON_MAJMIN}/cProfile.py",
+ "${libdir}/python${PYTHON_MAJMIN}/dataclasses.py",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_lsprof.*.so",
"${libdir}/python${PYTHON_MAJMIN}/profile.py",
"${libdir}/python${PYTHON_MAJMIN}/pstats.py"
],
"cached": [
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/cProfile.*.pyc",
+ "${libdir}/python${PYTHON_MAJMIN}/__pycache__/dataclasses.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/profile.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/pstats.*.pyc"
]
@@ -980,9 +1012,7 @@
"pydoc": {
"summary": "Python interactive help support",
"rdepends": [
- "core",
- "netclient",
- "pkgutil"
+ "core"
],
"files": [
"${bindir}/pydoc*",
@@ -1003,40 +1033,21 @@
],
"cached": []
},
- "runpy": {
- "summary": "Python helper for locating/executing scripts in module namespace",
- "rdepends": [
- "core",
- "pkgutil"
- ],
- "files": [
- "${libdir}/python${PYTHON_MAJMIN}/runpy.py"
- ],
- "cached": [
- "${libdir}/python${PYTHON_MAJMIN}/__pycache__/runpy.*.pyc"
- ]
- },
"shell": {
"summary": "Python shell-like functionality",
"rdepends": [
- "compression",
"core",
- "stringold",
- "unixadmin"
+ "stringold"
],
"files": [
"${libdir}/python${PYTHON_MAJMIN}/cmd.py",
- "${libdir}/python${PYTHON_MAJMIN}/fnmatch.py",
"${libdir}/python${PYTHON_MAJMIN}/glob.py",
- "${libdir}/python${PYTHON_MAJMIN}/shlex.py",
- "${libdir}/python${PYTHON_MAJMIN}/shutil.py"
+ "${libdir}/python${PYTHON_MAJMIN}/shlex.py"
],
"cached": [
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/cmd.*.pyc",
- "${libdir}/python${PYTHON_MAJMIN}/__pycache__/fnmatch.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/glob.*.pyc",
- "${libdir}/python${PYTHON_MAJMIN}/__pycache__/shlex.*.pyc",
- "${libdir}/python${PYTHON_MAJMIN}/__pycache__/shutil.*.pyc"
+ "${libdir}/python${PYTHON_MAJMIN}/__pycache__/shlex.*.pyc"
]
},
"smtpd": {
@@ -1076,6 +1087,20 @@
],
"cached": []
},
+ "statistics": {
+ "summary": "Basic statistics module",
+ "rdepends": [
+ "core",
+ "math",
+ "numbers"
+ ],
+ "files": [
+ "${libdir}/python${PYTHON_MAJMIN}/statistics.py"
+ ],
+ "cached": [
+ "${libdir}/python${PYTHON_MAJMIN}/__pycache__/statistics.*.pyc"
+ ]
+ },
"stringold": {
"summary": "Python string APIs [deprecated]",
"rdepends": [
@@ -1119,13 +1144,11 @@
"core"
],
"files": [
- "${libdir}/python${PYTHON_MAJMIN}/_dummy_thread.py",
"${libdir}/python${PYTHON_MAJMIN}/_threading_local.py",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_queue.*.so",
"${libdir}/python${PYTHON_MAJMIN}/queue.py"
],
"cached": [
- "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_dummy_thread.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/_threading_local.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/queue.*.pyc"
]
@@ -1136,31 +1159,22 @@
"core"
],
"files": [
- "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_tkinter.*.so",
+ "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_tkinter.*.so",
"${libdir}/python${PYTHON_MAJMIN}/tkinter"
],
"cached": []
},
- "typing": {
- "summary": "Python typing support",
- "rdepends": [
- "core"
- ],
- "files": [
- "${libdir}/python${PYTHON_MAJMIN}/typing.py"
- ],
- "cached": [
- "${libdir}/python${PYTHON_MAJMIN}/__pycache__/typing.*.pyc"
- ]
- },
"unittest": {
"summary": "Python unit testing framework",
"rdepends": [
+ "asyncio",
"core",
"difflib",
+ "io",
"logging",
+ "netclient",
+ "numbers",
"pprint",
- "shell",
"stringold"
],
"files": [
@@ -1178,7 +1192,6 @@
],
"files": [
"${libdir}/python${PYTHON_MAJMIN}/getpass.py",
- "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/grp.*.so",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/nis.*.so"
],
"cached": [
@@ -1188,12 +1201,9 @@
"venv": {
"summary": "Provides support for creating lightweight virtual environments with their own site directories, optionally isolated from system site directories.",
"rdepends": [
- "compression",
"core",
"logging",
- "shell",
- "stringold",
- "unixadmin"
+ "stringold"
],
"files": [
"${bindir}/pyvenv*",
@@ -1216,7 +1226,21 @@
"xmlrpc": {
"summary": "Python XML-RPC support",
"rdepends": [
+ "compression",
"core",
+ "crypt",
+ "datetime",
+ "email",
+ "fcntl",
+ "html",
+ "io",
+ "math",
+ "mime",
+ "netclient",
+ "netserver",
+ "numbers",
+ "pydoc",
+ "stringold",
"xml"
],
"files": [
diff --git a/meta/recipes-devtools/python/python3/reformat_sysconfig.py b/meta/recipes-devtools/python/python3/reformat_sysconfig.py
new file mode 100644
index 0000000000..5e2b12879d
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/reformat_sysconfig.py
@@ -0,0 +1,21 @@
+#! /usr/bin/env python3
+#
+# SPDX-License-Identifier: MIT
+#
+# Copyright 2019 by Garmin Ltd. or its subsidiaries
+#
+# A script to reformat python sysconfig
+
+import sys
+import pprint
+l = {}
+g = {}
+with open(sys.argv[1], 'r') as f:
+ exec(f.read(), g, l)
+
+with open(sys.argv[1], 'w') as f:
+ for k in sorted(l.keys()):
+ f.write('%s = ' % k)
+ pprint.pprint(l[k], stream=f, width=1)
+ f.write('\n')
+
diff --git a/meta/recipes-devtools/python/python3/run-ptest b/meta/recipes-devtools/python/python3/run-ptest
index 3863c6d314..405b07f495 100644
--- a/meta/recipes-devtools/python/python3/run-ptest
+++ b/meta/recipes-devtools/python/python3/run-ptest
@@ -1,3 +1,3 @@
#!/bin/sh
-python3 -m test -v | sed -e '/\.\.\. ok/ s/^/PASS: /g' -e '/\.\.\. [ERROR|FAIL]/ s/^/FAIL: /g' -e '/\.\.\. skipped/ s/^/SKIP: /g' -e 's/ \.\.\. ok//g' -e 's/ \.\.\. ERROR//g' -e 's/ \.\.\. FAIL//g' -e 's/ \.\.\. skipped//g'
+python3 -m test -v | sed -u -e '/\.\.\. ok/ s/^/PASS: /g' -r -e '/\.\.\. (ERROR|FAIL)/ s/^/FAIL: /g' -e '/\.\.\. skipped/ s/^/SKIP: /g' -e 's/ \.\.\. ok//g' -e 's/ \.\.\. ERROR//g' -e 's/ \.\.\. FAIL//g' -e 's/ \.\.\. skipped//g'