summaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/python
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-devtools/python')
-rw-r--r--meta/recipes-devtools/python/python-async.inc14
-rw-r--r--meta/recipes-devtools/python/python-cython.inc45
-rw-r--r--meta/recipes-devtools/python/python-extras.inc2
-rw-r--r--meta/recipes-devtools/python/python-git.inc32
-rw-r--r--meta/recipes-devtools/python/python-gitdb.inc24
-rw-r--r--meta/recipes-devtools/python/python-mako.inc21
-rw-r--r--meta/recipes-devtools/python/python-native/0001-python-native-fix-one-do_populate_sysroot-warning.patch39
-rw-r--r--meta/recipes-devtools/python/python-native/10-distutils-fix-swig-parameter.patch18
-rw-r--r--meta/recipes-devtools/python/python-native/11-distutils-never-modify-shebang-line.patch20
-rw-r--r--meta/recipes-devtools/python/python-native/debug.patch32
-rw-r--r--meta/recipes-devtools/python/python-native/multilib.patch235
-rw-r--r--meta/recipes-devtools/python/python-native/nohostlibs.patch54
-rw-r--r--meta/recipes-devtools/python/python-native/revert_use_of_sysconfigdata.patch86
-rw-r--r--meta/recipes-devtools/python/python-native/unixccompiler.patch20
-rw-r--r--meta/recipes-devtools/python/python-native_2.7.16.bb89
-rw-r--r--meta/recipes-devtools/python/python-nose.inc18
-rw-r--r--meta/recipes-devtools/python/python-nose_1.3.7.bb2
-rw-r--r--meta/recipes-devtools/python/python-pbr.inc6
-rw-r--r--meta/recipes-devtools/python/python-pyasn1.inc31
-rw-r--r--meta/recipes-devtools/python/python-pycryptodome.inc30
-rw-r--r--meta/recipes-devtools/python/python-rfc3986-validator/0001-setup.py-move-pytest-runner-to-test_requirements.patch32
-rw-r--r--meta/recipes-devtools/python/python-scons-native_3.0.1.bb8
-rw-r--r--meta/recipes-devtools/python/python-scons_3.0.1.bb21
-rw-r--r--meta/recipes-devtools/python/python-setuptools.inc39
-rw-r--r--meta/recipes-devtools/python/python-setuptools_40.8.0.bb9
-rw-r--r--meta/recipes-devtools/python/python-six.inc9
-rw-r--r--meta/recipes-devtools/python/python-subunit.inc14
-rw-r--r--meta/recipes-devtools/python/python-testtools.inc27
-rw-r--r--meta/recipes-devtools/python/python.inc47
-rw-r--r--meta/recipes-devtools/python/python/0001-distutils-set-the-prefix-to-be-inside-staging-direct.patch51
-rw-r--r--meta/recipes-devtools/python/python/0001-python2-use-cc_basename-to-replace-CC-for-checking-c.patch114
-rw-r--r--meta/recipes-devtools/python/python/01-use-proper-tools-for-cross-build.patch100
-rw-r--r--meta/recipes-devtools/python/python/03-fix-tkinter-detection.patch46
-rw-r--r--meta/recipes-devtools/python/python/05-enable-ctypes-cross-build.patch27
-rw-r--r--meta/recipes-devtools/python/python/06-avoid_usr_lib_termcap_path_in_linking.patch35
-rw-r--r--meta/recipes-devtools/python/python/add-CROSSPYTHONPATH-for-PYTHON_FOR_BUILD.patch28
-rw-r--r--meta/recipes-devtools/python/python/add-md5module-support.patch18
-rw-r--r--meta/recipes-devtools/python/python/avoid_warning_about_tkinter.patch29
-rw-r--r--meta/recipes-devtools/python/python/avoid_warning_for_sunos_specific_module.patch23
-rw-r--r--meta/recipes-devtools/python/python/bpo-35907-cve-2019-9948-fix.patch55
-rw-r--r--meta/recipes-devtools/python/python/bpo-35907-cve-2019-9948.patch55
-rw-r--r--meta/recipes-devtools/python/python/bpo-36216-cve-2019-9636-fix.patch28
-rw-r--r--meta/recipes-devtools/python/python/bpo-36216-cve-2019-9636.patch111
-rw-r--r--meta/recipes-devtools/python/python/builddir.patch46
-rw-r--r--meta/recipes-devtools/python/python/cgi_py.patch23
-rw-r--r--meta/recipes-devtools/python/python/check-if-target-is-64b-not-host.patch57
-rw-r--r--meta/recipes-devtools/python/python/create_manifest2.py298
-rw-r--r--meta/recipes-devtools/python/python/fix_for_using_different_libdir.patch77
-rw-r--r--meta/recipes-devtools/python/python/float-endian.patch216
-rw-r--r--meta/recipes-devtools/python/python/get_module_deps2.py112
-rw-r--r--meta/recipes-devtools/python/python/host_include_contamination.patch28
-rw-r--r--meta/recipes-devtools/python/python/multilib.patch298
-rw-r--r--meta/recipes-devtools/python/python/parallel-makeinst-create-bindir.patch19
-rw-r--r--meta/recipes-devtools/python/python/pass-missing-libraries-to-Extension-for-mul.patch82
-rw-r--r--meta/recipes-devtools/python/python/python-2.7.3-remove-bsdb-rpath.patch28
-rw-r--r--meta/recipes-devtools/python/python/python2-manifest.json1138
-rw-r--r--meta/recipes-devtools/python/python/run-ptest3
-rw-r--r--meta/recipes-devtools/python/python/search_db_h_in_inc_dirs_and_avoid_warning.patch35
-rw-r--r--meta/recipes-devtools/python/python/setup_py_skip_cross_import_check.patch27
-rw-r--r--meta/recipes-devtools/python/python/setuptweaks.patch57
-rw-r--r--meta/recipes-devtools/python/python/sitecustomize.py37
-rw-r--r--meta/recipes-devtools/python/python/support_SOURCE_DATE_EPOCH_in_py_compile_2.7.patch34
-rw-r--r--meta/recipes-devtools/python/python/use_sysroot_ncurses_instead_of_host.patch21
-rw-r--r--meta/recipes-devtools/python/python3-alabaster_0.7.16.bb12
-rw-r--r--meta/recipes-devtools/python/python3-asn1crypto_1.5.1.bb24
-rw-r--r--meta/recipes-devtools/python/python3-async_0.6.2.bb2
-rw-r--r--meta/recipes-devtools/python/python3-atomicwrites/run-ptest3
-rw-r--r--meta/recipes-devtools/python/python3-atomicwrites_1.4.1.bb27
-rw-r--r--meta/recipes-devtools/python/python3-attrs/0001-conftest.py-disable-deadline.patch45
-rw-r--r--meta/recipes-devtools/python/python3-attrs/0001-test_funcs-skip-test_unknown-for-pytest-8.patch30
-rw-r--r--meta/recipes-devtools/python/python3-attrs/run-ptest3
-rw-r--r--meta/recipes-devtools/python/python3-attrs_23.2.0.bb39
-rw-r--r--meta/recipes-devtools/python/python3-babel_2.14.0.bb26
-rw-r--r--meta/recipes-devtools/python/python3-bcrypt-crates.inc114
-rw-r--r--meta/recipes-devtools/python/python3-bcrypt/0001-Bump-pyo3-from-0.20.0-to-0.20.3-in-src-_bcrypt-746.patch111
-rw-r--r--meta/recipes-devtools/python/python3-bcrypt/run-ptest3
-rw-r--r--meta/recipes-devtools/python/python3-bcrypt_4.1.2.bb37
-rw-r--r--meta/recipes-devtools/python/python3-beartype_0.18.5.bb11
-rw-r--r--meta/recipes-devtools/python/python3-booleanpy_4.0.bb13
-rw-r--r--meta/recipes-devtools/python/python3-build_1.2.1.bb32
-rw-r--r--meta/recipes-devtools/python/python3-calver/0001-setup.py-hard-code-version.patch32
-rw-r--r--meta/recipes-devtools/python/python3-calver/run-ptest3
-rw-r--r--meta/recipes-devtools/python/python3-calver_2022.6.26.bb28
-rw-r--r--meta/recipes-devtools/python/python3-certifi_2024.2.2.bb16
-rw-r--r--meta/recipes-devtools/python/python3-cffi_1.16.0.bb18
-rw-r--r--meta/recipes-devtools/python/python3-chardet_5.2.0.bb24
-rw-r--r--meta/recipes-devtools/python/python3-click/run-ptest3
-rw-r--r--meta/recipes-devtools/python/python3-click_8.1.7.bb39
-rw-r--r--meta/recipes-devtools/python/python3-cryptography-crates.inc102
-rw-r--r--meta/recipes-devtools/python/python3-cryptography-vectors_42.0.5.bb31
-rw-r--r--meta/recipes-devtools/python/python3-cryptography/0001-pyproject.toml-remove-benchmark-disable-option.patch43
-rwxr-xr-xmeta/recipes-devtools/python/python3-cryptography/check-memfree.py10
-rw-r--r--meta/recipes-devtools/python/python3-cryptography/run-ptest9
-rw-r--r--meta/recipes-devtools/python/python3-cryptography_42.0.5.bb67
-rw-r--r--meta/recipes-devtools/python/python3-cython_3.0.10.bb37
-rw-r--r--meta/recipes-devtools/python/python3-dbus_1.2.8.bb24
-rw-r--r--meta/recipes-devtools/python/python3-dbus_1.3.2.bb23
-rw-r--r--meta/recipes-devtools/python/python3-dbusmock_0.31.1.bb22
-rw-r--r--meta/recipes-devtools/python/python3-docutils_0.14.bb18
-rw-r--r--meta/recipes-devtools/python/python3-docutils_0.20.1.bb20
-rw-r--r--meta/recipes-devtools/python/python3-dtc/0001-Revert-libfdt-overlay-make-overlay_get_target-public.patch132
-rw-r--r--meta/recipes-devtools/python/python3-dtc_1.7.0.bb25
-rw-r--r--meta/recipes-devtools/python/python3-dtschema_2024.4.bb20
-rw-r--r--meta/recipes-devtools/python/python3-editables_0.5.bb15
-rw-r--r--meta/recipes-devtools/python/python3-flit-core_3.9.0.bb37
-rw-r--r--meta/recipes-devtools/python/python3-git_2.1.11.bb2
-rw-r--r--meta/recipes-devtools/python/python3-git_3.1.43.bb32
-rw-r--r--meta/recipes-devtools/python/python3-gitdb_2.0.5.bb2
-rw-r--r--meta/recipes-devtools/python/python3-gitdb_4.0.11.bb22
-rw-r--r--meta/recipes-devtools/python/python3-hatch-fancy-pypi-readme_24.1.0.bb14
-rw-r--r--meta/recipes-devtools/python/python3-hatch-vcs_0.4.0.bb14
-rw-r--r--meta/recipes-devtools/python/python3-hatchling_1.24.1.bb17
-rw-r--r--meta/recipes-devtools/python/python3-hypothesis/run-ptest10
-rw-r--r--meta/recipes-devtools/python/python3-hypothesis/test_binary_search.py135
-rw-r--r--meta/recipes-devtools/python/python3-hypothesis/test_rle.py101
-rw-r--r--meta/recipes-devtools/python/python3-hypothesis_6.100.1.bb39
-rw-r--r--meta/recipes-devtools/python/python3-idna_3.7.bb14
-rw-r--r--meta/recipes-devtools/python/python3-imagesize_1.4.1.bb13
-rw-r--r--meta/recipes-devtools/python/python3-importlib-metadata_7.1.0.bb20
-rw-r--r--meta/recipes-devtools/python/python3-iniconfig_2.0.0.bb13
-rw-r--r--meta/recipes-devtools/python/python3-iniparse/0001-Add-python-3-compatibility.patch552
-rw-r--r--meta/recipes-devtools/python/python3-iniparse_0.4.bb17
-rw-r--r--meta/recipes-devtools/python/python3-iniparse_0.5.bb14
-rw-r--r--meta/recipes-devtools/python/python3-installer/interpreter.patch71
-rw-r--r--meta/recipes-devtools/python/python3-installer_0.7.0.bb34
-rw-r--r--meta/recipes-devtools/python/python3-iso8601_2.1.0.bb15
-rw-r--r--meta/recipes-devtools/python/python3-isodate_0.6.1.bb16
-rw-r--r--meta/recipes-devtools/python/python3-jinja2/run-ptest3
-rw-r--r--meta/recipes-devtools/python/python3-jinja2_3.1.3.bb48
-rw-r--r--meta/recipes-devtools/python/python3-jsonpointer/run-ptest3
-rw-r--r--meta/recipes-devtools/python/python3-jsonpointer_2.4.bb28
-rw-r--r--meta/recipes-devtools/python/python3-jsonschema-specifications_2023.12.1.bb16
-rw-r--r--meta/recipes-devtools/python/python3-jsonschema_4.21.1.bb50
-rw-r--r--meta/recipes-devtools/python/python3-libarchive-c_5.1.bb21
-rw-r--r--meta/recipes-devtools/python/python3-license-expression/run-ptest3
-rw-r--r--meta/recipes-devtools/python/python3-license-expression_30.3.0.bb38
-rw-r--r--meta/recipes-devtools/python/python3-lxml_5.2.1.bb42
-rw-r--r--meta/recipes-devtools/python/python3-magic_0.4.27.bb22
-rw-r--r--meta/recipes-devtools/python/python3-mako_1.0.7.bb2
-rw-r--r--meta/recipes-devtools/python/python3-mako_1.3.3.bb20
-rw-r--r--meta/recipes-devtools/python/python3-markdown_3.6.bb13
-rw-r--r--meta/recipes-devtools/python/python3-markupsafe/run-ptest3
-rw-r--r--meta/recipes-devtools/python/python3-markupsafe_2.1.5.bb27
-rw-r--r--meta/recipes-devtools/python/python3-maturin-crates.inc618
-rw-r--r--meta/recipes-devtools/python/python3-maturin/0001-Add-32-bit-RISC-V-support.patch102
-rw-r--r--meta/recipes-devtools/python/python3-maturin_1.4.0.bb43
-rw-r--r--meta/recipes-devtools/python/python3-meson-python_0.15.0.bb27
-rw-r--r--meta/recipes-devtools/python/python3-more-itertools/run-ptest3
-rw-r--r--meta/recipes-devtools/python/python3-more-itertools_10.2.0.bb29
-rw-r--r--meta/recipes-devtools/python/python3-ndg-httpsclient_0.5.1.bb31
-rw-r--r--meta/recipes-devtools/python/python3-nose_1.3.7.bb6
-rw-r--r--meta/recipes-devtools/python/python3-numpy/0001-Don-t-search-usr-and-so-on-for-libraries-by-default-.patch70
-rw-r--r--meta/recipes-devtools/python/python3-numpy/0001-numpy-core-Define-RISCV-32-support.patch50
-rw-r--r--meta/recipes-devtools/python/python3-numpy/fix_reproducibility.patch33
-rw-r--r--meta/recipes-devtools/python/python3-numpy/run-ptest5
-rw-r--r--meta/recipes-devtools/python/python3-numpy_1.26.4.bb64
-rw-r--r--meta/recipes-devtools/python/python3-packaging_24.0.bb18
-rw-r--r--meta/recipes-devtools/python/python3-pathlib2_2.3.7.bb12
-rw-r--r--meta/recipes-devtools/python/python3-pathspec_0.12.1.bb13
-rw-r--r--meta/recipes-devtools/python/python3-pbr/0001-change-shebang-to-python3.patch42
-rw-r--r--meta/recipes-devtools/python/python3-pbr_5.1.2.bb5
-rw-r--r--meta/recipes-devtools/python/python3-pbr_6.0.0.bb4
-rw-r--r--meta/recipes-devtools/python/python3-pip/no_shebang_mangling.patch36
-rw-r--r--meta/recipes-devtools/python/python3-pip_19.0.2.bb30
-rw-r--r--meta/recipes-devtools/python/python3-pip_24.0.bb60
-rw-r--r--meta/recipes-devtools/python/python3-pluggy/run-ptest3
-rw-r--r--meta/recipes-devtools/python/python3-pluggy_1.5.0.bb29
-rw-r--r--meta/recipes-devtools/python/python3-ply_3.11.bb18
-rw-r--r--meta/recipes-devtools/python/python3-poetry-core_1.9.0.bb42
-rw-r--r--meta/recipes-devtools/python/python3-pretend_1.0.9.bb11
-rw-r--r--meta/recipes-devtools/python/python3-psutil_5.9.8.bb41
-rw-r--r--meta/recipes-devtools/python/python3-py_1.11.0.bb14
-rw-r--r--meta/recipes-devtools/python/python3-pyasn1/run-ptest3
-rw-r--r--meta/recipes-devtools/python/python3-pyasn1_0.6.0.bb3
-rw-r--r--meta/recipes-devtools/python/python3-pycairo_1.15.6.bb31
-rw-r--r--meta/recipes-devtools/python/python3-pycairo_1.26.0.bb26
-rw-r--r--meta/recipes-devtools/python/python3-pycparser_2.22.bb21
-rw-r--r--meta/recipes-devtools/python/python3-pycryptodome_3.20.0.bb5
-rw-r--r--meta/recipes-devtools/python/python3-pycryptodomex_3.20.0.bb9
-rw-r--r--meta/recipes-devtools/python/python3-pyelftools_0.31.bb15
-rw-r--r--meta/recipes-devtools/python/python3-pygments_2.17.2.bb14
-rw-r--r--meta/recipes-devtools/python/python3-pygobject_3.28.3.bb29
-rw-r--r--meta/recipes-devtools/python/python3-pygobject_3.48.2.bb39
-rw-r--r--meta/recipes-devtools/python/python3-pyopenssl_24.1.0.bb23
-rw-r--r--meta/recipes-devtools/python/python3-pyparsing_3.1.2.bb30
-rw-r--r--meta/recipes-devtools/python/python3-pyproject-hooks_1.0.0.bb26
-rw-r--r--meta/recipes-devtools/python/python3-pyproject-metadata_0.7.1.bb27
-rw-r--r--meta/recipes-devtools/python/python3-pyrsistent_0.20.0.bb14
-rw-r--r--meta/recipes-devtools/python/python3-pysocks_1.7.1.bb20
-rw-r--r--meta/recipes-devtools/python/python3-pytest-runner_6.0.1.bb16
-rw-r--r--meta/recipes-devtools/python/python3-pytest-subtests_0.12.1.bb20
-rw-r--r--meta/recipes-devtools/python/python3-pytest_8.1.1.bb41
-rw-r--r--meta/recipes-devtools/python/python3-pytz/run-ptest3
-rw-r--r--meta/recipes-devtools/python/python3-pytz_2024.1.bb36
-rw-r--r--meta/recipes-devtools/python/python3-pyyaml/0001-Fix-builds-with-Cython-3.patch54
-rw-r--r--meta/recipes-devtools/python/python3-pyyaml/run-ptest3
-rw-r--r--meta/recipes-devtools/python/python3-pyyaml_6.0.1.bb40
-rw-r--r--meta/recipes-devtools/python/python3-rdflib_7.0.0.bb21
-rw-r--r--meta/recipes-devtools/python/python3-referencing_0.34.0.bb14
-rw-r--r--meta/recipes-devtools/python/python3-requests_2.31.0.bb26
-rw-r--r--meta/recipes-devtools/python/python3-rfc3339-validator_0.1.4.bb21
-rw-r--r--meta/recipes-devtools/python/python3-rfc3986-validator_0.1.1.bb24
-rw-r--r--meta/recipes-devtools/python/python3-rfc3987_1.3.8.bb11
-rw-r--r--meta/recipes-devtools/python/python3-rpds-py-crates.inc80
-rw-r--r--meta/recipes-devtools/python/python3-rpds-py_0.18.0.bb15
-rw-r--r--meta/recipes-devtools/python/python3-ruamel-yaml_0.18.6.bb23
-rw-r--r--meta/recipes-devtools/python/python3-scons/0001-Fix-man-page-installation.patch29
-rw-r--r--meta/recipes-devtools/python/python3-scons_4.7.0.bb36
-rw-r--r--meta/recipes-devtools/python/python3-semantic-version_2.10.0.bb18
-rw-r--r--meta/recipes-devtools/python/python3-setuptools-rust_1.9.0.bb35
-rw-r--r--meta/recipes-devtools/python/python3-setuptools-scm_8.0.4.bb31
-rw-r--r--meta/recipes-devtools/python/python3-setuptools/0001-_distutils-sysconfig.py-make-it-possible-to-substite.patch58
-rw-r--r--meta/recipes-devtools/python/python3-setuptools/0001-conditionally-do-not-fetch-code-by-easy_install.patch (renamed from meta/recipes-devtools/python/files/0001-conditionally-do-not-fetch-code-by-easy_install.patch)15
-rw-r--r--meta/recipes-devtools/python/python3-setuptools_40.8.0.bb6
-rw-r--r--meta/recipes-devtools/python/python3-setuptools_69.5.1.bb55
-rw-r--r--meta/recipes-devtools/python/python3-six_1.12.0.bb2
-rw-r--r--meta/recipes-devtools/python/python3-six_1.16.0.bb4
-rw-r--r--meta/recipes-devtools/python/python3-smartypants/0001-Change-hash-bang-to-python3.patch47
-rw-r--r--meta/recipes-devtools/python/python3-smartypants_2.0.0.bb14
-rw-r--r--meta/recipes-devtools/python/python3-smmap_2.0.5.bb2
-rw-r--r--meta/recipes-devtools/python/python3-smmap_6.0.0.bb (renamed from meta/recipes-devtools/python/python-smmap.inc)13
-rw-r--r--meta/recipes-devtools/python/python3-snowballstemmer_2.2.0.bb13
-rw-r--r--meta/recipes-devtools/python/python3-sortedcontainers_2.4.0.bb9
-rw-r--r--meta/recipes-devtools/python/python3-spdx-tools_0.8.2.bb28
-rw-r--r--meta/recipes-devtools/python/python3-sphinx-rtd-theme_2.0.0.bb26
-rw-r--r--meta/recipes-devtools/python/python3-sphinx_7.2.6.bb35
-rw-r--r--meta/recipes-devtools/python/python3-sphinxcontrib-applehelp_1.0.8.bb12
-rw-r--r--meta/recipes-devtools/python/python3-sphinxcontrib-devhelp_1.0.6.bb12
-rw-r--r--meta/recipes-devtools/python/python3-sphinxcontrib-htmlhelp_2.0.5.bb12
-rw-r--r--meta/recipes-devtools/python/python3-sphinxcontrib-jquery_4.1.bb12
-rw-r--r--meta/recipes-devtools/python/python3-sphinxcontrib-jsmath_1.0.1.bb12
-rw-r--r--meta/recipes-devtools/python/python3-sphinxcontrib-qthelp_1.0.7.bb12
-rw-r--r--meta/recipes-devtools/python/python3-sphinxcontrib-serializinghtml_1.1.10.bb12
-rw-r--r--meta/recipes-devtools/python/python3-subunit_1.3.0.bb2
-rw-r--r--meta/recipes-devtools/python/python3-subunit_1.4.4.bb15
-rw-r--r--meta/recipes-devtools/python/python3-testtools_2.3.0.bb2
-rw-r--r--meta/recipes-devtools/python/python3-testtools_2.7.1.bb20
-rw-r--r--meta/recipes-devtools/python/python3-toml_0.10.2.bb15
-rw-r--r--meta/recipes-devtools/python/python3-tomli_2.0.1.bb18
-rw-r--r--meta/recipes-devtools/python/python3-trove-classifiers/run-ptest3
-rw-r--r--meta/recipes-devtools/python/python3-trove-classifiers_2024.4.10.bb26
-rw-r--r--meta/recipes-devtools/python/python3-typing-extensions_4.11.0.bb24
-rw-r--r--meta/recipes-devtools/python/python3-typogrify_2.0.7.bb14
-rw-r--r--meta/recipes-devtools/python/python3-unittest-automake-output_0.2.bb13
-rw-r--r--meta/recipes-devtools/python/python3-uritools_4.0.2.bb11
-rw-r--r--meta/recipes-devtools/python/python3-urllib3_2.2.1.bb24
-rw-r--r--meta/recipes-devtools/python/python3-vcversioner_2.16.0.0.bb12
-rw-r--r--meta/recipes-devtools/python/python3-wcwidth/run-ptest3
-rw-r--r--meta/recipes-devtools/python/python3-wcwidth_0.2.13.bb27
-rw-r--r--meta/recipes-devtools/python/python3-webcolors/run-ptest3
-rw-r--r--meta/recipes-devtools/python/python3-webcolors_1.13.bb28
-rw-r--r--meta/recipes-devtools/python/python3-websockets_12.0.bb16
-rw-r--r--meta/recipes-devtools/python/python3-wheel_0.43.0.bb15
-rw-r--r--meta/recipes-devtools/python/python3-xmltodict/run-ptest3
-rw-r--r--meta/recipes-devtools/python/python3-xmltodict_0.13.0.bb31
-rw-r--r--meta/recipes-devtools/python/python3-yamllint_1.35.1.bb15
-rw-r--r--meta/recipes-devtools/python/python3-zipp_3.18.1.bb18
-rw-r--r--meta/recipes-devtools/python/python3/0001-Avoid-shebang-overflow-on-python-config.py.patch30
-rw-r--r--meta/recipes-devtools/python/python3/0001-Do-not-add-usr-lib-termcap-to-linker-flags-to-avoid-.patch25
-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.patch35
-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-fix-another-place-where-lib-is-hard.patch31
-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.pre-use-qemu-wrapper-when-gathering-profile.patch16
-rw-r--r--meta/recipes-devtools/python/python3/0001-Skip-failing-tests-due-to-load-variability-on-YP-AB.patch72
-rw-r--r--meta/recipes-devtools/python/python3/0001-Update-test_sysconfig-for-posix_user-purelib.patch37
-rw-r--r--meta/recipes-devtools/python/python3/0001-distutils-sysconfig-append-STAGING_LIBDIR-python-sys.patch42
-rw-r--r--meta/recipes-devtools/python/python3/0001-gh-114492-Initialize-struct-termios-before-calling-t.patch26
-rw-r--r--meta/recipes-devtools/python/python3/0001-main.c-if-OEPYTHON3HOME-is-set-use-instead-of-PYTHON.patch47
-rw-r--r--meta/recipes-devtools/python/python3/0001-python3-use-cc_basename-to-replace-CC-for-checking-c.patch78
-rw-r--r--meta/recipes-devtools/python/python3/0001-skip-no_stdout_fileno-test-due-to-load-variability.patch29
-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/0001-test_storlines-skip-due-to-load-variability.patch30
-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/0020-configure.ac-setup.py-do-not-add-a-curses-include-pa.patch33
-rw-r--r--meta/recipes-devtools/python/python3/12-distutils-prefix-is-inside-staging-area.patch54
-rw-r--r--meta/recipes-devtools/python/python3/avoid_warning_about_tkinter.patch36
-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/deterministic_imports.patch40
-rw-r--r--meta/recipes-devtools/python/python3/get_module_deps3.py94
-rw-r--r--meta/recipes-devtools/python/python3/makerace.patch31
-rw-r--r--meta/recipes-devtools/python/python3/python-config.patch46
-rw-r--r--meta/recipes-devtools/python/python3/python3-manifest.json346
-rw-r--r--meta/recipes-devtools/python/python3/reformat_sysconfig.py21
-rw-r--r--meta/recipes-devtools/python/python3/run-ptest4
-rw-r--r--meta/recipes-devtools/python/python3_3.12.3.bb470
-rw-r--r--meta/recipes-devtools/python/python3_3.7.2.bb299
-rw-r--r--meta/recipes-devtools/python/python_2.7.16.bb271
294 files changed, 6776 insertions, 6590 deletions
diff --git a/meta/recipes-devtools/python/python-async.inc b/meta/recipes-devtools/python/python-async.inc
deleted file mode 100644
index 139bf2c51c..0000000000
--- a/meta/recipes-devtools/python/python-async.inc
+++ /dev/null
@@ -1,14 +0,0 @@
-SUMMARY = "Python framework to process interdependent tasks in a pool of workers"
-HOMEPAGE = "http://github.com/gitpython-developers/async"
-SECTION = "devel/python"
-LICENSE = "BSD"
-LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=88df8e78b9edfd744953862179f2d14e"
-
-inherit pypi
-
-SRC_URI[md5sum] = "9b06b5997de2154f3bc0273f80bcef6b"
-SRC_URI[sha256sum] = "ac6894d876e45878faae493b0cf61d0e28ec417334448ac0a6ea2229d8343051"
-
-RDEPENDS_${PN} += "${PYTHON_PN}-threading"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python-cython.inc b/meta/recipes-devtools/python/python-cython.inc
new file mode 100644
index 0000000000..87a2e88a1a
--- /dev/null
+++ b/meta/recipes-devtools/python/python-cython.inc
@@ -0,0 +1,45 @@
+SUMMARY = "The Cython language"
+HOMEPAGE = "https://pypi.org/project/Cython/"
+DESCRIPTION = "Cython is a language specially designed for writing Python extension modules. \
+It's designed to bridge the gap between the nice, high-level, easy-to-use world of Python \
+and the messy, low-level world of C."
+SECTION = "devel/python"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=61c3ee8961575861fa86c7e62bc9f69c"
+PYPI_PACKAGE = "Cython"
+BBCLASSEXTEND = "native nativesdk"
+
+SRC_URI[sha256sum] = "dcc96739331fb854dcf503f94607576cfe8488066c61ca50dfd55836f132de99"
+UPSTREAM_CHECK_REGEX = "Cython-(?P<pver>.*)\.tar"
+
+inherit pypi
+
+RDEPENDS:${PN}:class-target += "\
+ python3-misc \
+ python3-netserver \
+ python3-pkgutil \
+ python3-pyparsing \
+ python3-setuptools \
+ python3-shell \
+ python3-xml \
+"
+
+RDEPENDS:${PN}:class-nativesdk += "\
+ nativesdk-python3-misc \
+ nativesdk-python3-netserver \
+ nativesdk-python3-pkgutil \
+ nativesdk-python3-pyparsing \
+ nativesdk-python3-setuptools \
+ nativesdk-python3-shell \
+ nativesdk-python3-xml \
+"
+
+do_install:append() {
+ # Make sure we use /usr/bin/env python
+ for PYTHSCRIPT in `grep -rIl '^#!.*python' ${D}`; do
+ sed -i -e '1s|^#!.*|#!/usr/bin/env python3|' $PYTHSCRIPT
+ done
+
+ # remove build paths from generated sources
+ sed -i -e 's|${WORKDIR}||' ${S}/Cython/*.c ${S}/Cython/Compiler/*.c ${S}/Cython/Plex/*.c
+}
diff --git a/meta/recipes-devtools/python/python-extras.inc b/meta/recipes-devtools/python/python-extras.inc
index b5e11b711a..335bde2724 100644
--- a/meta/recipes-devtools/python/python-extras.inc
+++ b/meta/recipes-devtools/python/python-extras.inc
@@ -1,5 +1,5 @@
SUMMARY = "Useful extra bits for Python - things that should be in the standard library"
-HOMEPAGE = "https://pypi.python.org/pypi/extras/"
+HOMEPAGE = "https://pypi.org/project/extras/"
SECTION = "devel/python"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://LICENSE;md5=6d108f338b2f68fe48ac366c4650bd8b"
diff --git a/meta/recipes-devtools/python/python-git.inc b/meta/recipes-devtools/python/python-git.inc
deleted file mode 100644
index f973e9f42c..0000000000
--- a/meta/recipes-devtools/python/python-git.inc
+++ /dev/null
@@ -1,32 +0,0 @@
-SUMMARY = "Python library used to interact with Git repositories"
-DESCRIPTION = "GitPython provides object model read and write access to \
-a git repository. Access repository information conveniently, alter the \
-index directly, handle remotes, or go down to low-level object database \
-access with big-files support."
-HOMEPAGE = "http://github.com/gitpython-developers/GitPython"
-SECTION = "devel/python"
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=8b8d26c37c1d5a04f9b0186edbebc183"
-
-PYPI_PACKAGE = "GitPython"
-
-inherit pypi
-
-SRC_URI[md5sum] = "cee43a39a1468084d49d1c49fb675204"
-SRC_URI[sha256sum] = "8237dc5bfd6f1366abeee5624111b9d6879393d84745a507de0fda86043b65a8"
-
-DEPENDS = "${PYTHON_PN}-gitdb"
-
-RDEPENDS_${PN} += " \
- ${PYTHON_PN}-datetime \
- ${PYTHON_PN}-gitdb \
- ${PYTHON_PN}-io \
- ${PYTHON_PN}-logging \
- ${PYTHON_PN}-math \
- ${PYTHON_PN}-netclient \
- ${PYTHON_PN}-stringold \
- ${PYTHON_PN}-unittest \
- ${PYTHON_PN}-unixadmin \
- git \
-"
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python-gitdb.inc b/meta/recipes-devtools/python/python-gitdb.inc
deleted file mode 100644
index 633752fd1b..0000000000
--- a/meta/recipes-devtools/python/python-gitdb.inc
+++ /dev/null
@@ -1,24 +0,0 @@
-SUMMARY = "A pure-Python git object database"
-HOMEPAGE = "http://github.com/gitpython-developers/gitdb"
-SECTION = "devel/python"
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=59e5ecb13339a936eedf83282eaf4528"
-
-inherit pypi
-
-PYPI_PACKAGE = "gitdb2"
-
-SRC_URI[md5sum] = "94e59e5fb00960541f6e137b1456ab0a"
-SRC_URI[sha256sum] = "83361131a1836661a155172932a13c08bda2db3674e4caa32368aa6eb02f38c2"
-
-DEPENDS = "${PYTHON_PN}-async ${PYTHON_PN}-setuptools-native ${PYTHON_PN}-smmap"
-
-RDEPENDS_${PN} += "${PYTHON_PN}-async \
- ${PYTHON_PN}-compression \
- ${PYTHON_PN}-crypt \
- ${PYTHON_PN}-io \
- ${PYTHON_PN}-mmap \
- ${PYTHON_PN}-shell \
- ${PYTHON_PN}-smmap \
-"
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python-mako.inc b/meta/recipes-devtools/python/python-mako.inc
deleted file mode 100644
index e265bde85f..0000000000
--- a/meta/recipes-devtools/python/python-mako.inc
+++ /dev/null
@@ -1,21 +0,0 @@
-SUMMARY = "Templating library for Python"
-HOMEPAGE = "http://www.makotemplates.org/"
-SECTION = "devel/python"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=1bb21fa2d2f7a534c884b990430a6863"
-
-PYPI_PACKAGE = "Mako"
-
-inherit pypi
-
-SRC_URI[md5sum] = "5836cc997b1b773ef389bf6629c30e65"
-SRC_URI[sha256sum] = "4e02fde57bd4abb5ec400181e4c314f56ac3e49ba4fb8b0d50bba18cb27d25ae"
-
-RDEPENDS_${PN} = "${PYTHON_PN}-html \
- ${PYTHON_PN}-netclient \
- ${PYTHON_PN}-threading \
-"
-
-RDEPENDS_${PN}_class-native = ""
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python-native/0001-python-native-fix-one-do_populate_sysroot-warning.patch b/meta/recipes-devtools/python/python-native/0001-python-native-fix-one-do_populate_sysroot-warning.patch
deleted file mode 100644
index 989818927d..0000000000
--- a/meta/recipes-devtools/python/python-native/0001-python-native-fix-one-do_populate_sysroot-warning.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From 12292444e1b3662b994bc223d92b8338fb0895ff Mon Sep 17 00:00:00 2001
-From: Changqing Li <changqing.li@windriver.com>
-Date: Thu, 25 Oct 2018 07:32:14 +0000
-Subject: [PATCH] python-native: fix one do_populate_sysroot warning
-
-Fix below warning:
-WARNING: Skipping RPATH /usr/lib64 as is a standard search path for
-work/x86_64-linux/python-native/2.7.15-r1.1/recipe-sysroot-native/
-usr/lib/python2.7/lib-dynload/_bsddb.so
-
-setup.py will check db.h under include_dirs, for native build,
-/usr/lib64 will be insert to postion 0 of include_dirs, so
-it's priority is higher then our sysroot, cause db.h sysroot
-is ignored, and rpath set to /usr/lib64. and this cause warning
-when do_populate_sysroot. use append to fix it.
-
-Upstream-Status: Inappropriate [oe-specific]
-
-Signed-off-by: Changqing Li <changqing.li@windriver.com>
----
- setup.py | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/setup.py b/setup.py
-index 7bf13ed..6c0f29b 100644
---- a/setup.py
-+++ b/setup.py
-@@ -40,7 +40,7 @@ def add_dir_to_list(dirlist, dir):
- 1) 'dir' is not already in 'dirlist'
- 2) 'dir' actually exists, and is a directory."""
- if dir is not None and os.path.isdir(dir) and dir not in dirlist:
-- dirlist.insert(0, dir)
-+ dirlist.append(dir)
-
- def macosx_sdk_root():
- """
---
-2.18.0
-
diff --git a/meta/recipes-devtools/python/python-native/10-distutils-fix-swig-parameter.patch b/meta/recipes-devtools/python/python-native/10-distutils-fix-swig-parameter.patch
deleted file mode 100644
index a39247ce70..0000000000
--- a/meta/recipes-devtools/python/python-native/10-distutils-fix-swig-parameter.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-Upstream-Status: Pending
-
-# Some versions of SWIG do not use the extension parameter.
-# Make it optional.
-# Signed-Off: Michael 'Mickey' Lauer <mickey@vanille-media.de>
-Index: Python-2.6.1/Lib/distutils/command/build_ext.py
-===================================================================
---- Python-2.6.1.orig/Lib/distutils/command/build_ext.py
-+++ Python-2.6.1/Lib/distutils/command/build_ext.py
-@@ -566,7 +566,7 @@ class build_ext (Command):
- target_lang=language)
-
-
-- def swig_sources (self, sources, extension):
-+ def swig_sources (self, sources, extension=None):
-
- """Walk the list of source files in 'sources', looking for SWIG
- interface (.i) files. Run SWIG on all that are found, and
diff --git a/meta/recipes-devtools/python/python-native/11-distutils-never-modify-shebang-line.patch b/meta/recipes-devtools/python/python-native/11-distutils-never-modify-shebang-line.patch
deleted file mode 100644
index c92469b9b6..0000000000
--- a/meta/recipes-devtools/python/python-native/11-distutils-never-modify-shebang-line.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-Upstream-Status: Pending
-
-# Don't modify the she-bang line for a cross-build.
-# Otherwise it points to our hostpython (which we do not want)
-#
-# Signed-Off: Michael 'Mickey' Lauer <mickey@vanille-media.de>
-
-Index: Python-2.6.1/Lib/distutils/command/build_scripts.py
-===================================================================
---- Python-2.6.1.orig/Lib/distutils/command/build_scripts.py
-+++ Python-2.6.1/Lib/distutils/command/build_scripts.py
-@@ -87,7 +87,7 @@ class build_scripts (Command):
- continue
-
- match = first_line_re.match(first_line)
-- if match:
-+ if False: #match:
- adjust = 1
- post_interp = match.group(1) or ''
-
diff --git a/meta/recipes-devtools/python/python-native/debug.patch b/meta/recipes-devtools/python/python-native/debug.patch
deleted file mode 100644
index 3617882640..0000000000
--- a/meta/recipes-devtools/python/python-native/debug.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-Upstream-Status: Pending
-
-Index: Python-2.7.12/Lib/distutils/unixccompiler.py
-===================================================================
---- Python-2.7.12.orig/Lib/distutils/unixccompiler.py
-+++ Python-2.7.12/Lib/distutils/unixccompiler.py
-@@ -278,6 +278,8 @@ class UnixCCompiler(CCompiler):
-
-
-
-+ print "Looking in %s for %s" % (lib, dirs)
-+
- for dir in dirs:
- shared = os.path.join(dir, shared_f)
- dylib = os.path.join(dir, dylib_f)
-@@ -298,12 +300,16 @@ class UnixCCompiler(CCompiler):
- # assuming that *all* Unix C compilers do. And of course I'm
- # ignoring even GCC's "-static" option. So sue me.
- if os.path.exists(dylib):
-+ print "Found %s" % (dylib)
- return dylib
- elif os.path.exists(xcode_stub):
-+ print "Found %s" % (xcode_stub)
- return xcode_stub
- elif os.path.exists(shared):
-+ print "Found %s" % (shared)
- return shared
- elif os.path.exists(static):
-+ print "Found %s" % (static)
- return static
-
- # Oops, didn't find it in *any* of 'dirs'
diff --git a/meta/recipes-devtools/python/python-native/multilib.patch b/meta/recipes-devtools/python/python-native/multilib.patch
deleted file mode 100644
index af0f173c6d..0000000000
--- a/meta/recipes-devtools/python/python-native/multilib.patch
+++ /dev/null
@@ -1,235 +0,0 @@
-Rebased for Python 2.7.9
-
-Signed-off-by: Alejandro Hernandez <alejandro.hernandez@linux.intel.com>
-
-2011/09/29
-The python recipe building was failing because python-native
-could not handle sys.lib var. sys.lib var is defined in the
-multilib patch hence added this multilib.patch for python-native
-recipe.
-
-Upstream-Status: Inappropriate [oe-specific]
-
-Signed-off-by: Nitin A Kamble <nitin.a.kamble@intel.com>
-
-Index: Python-2.7.14/Include/pythonrun.h
-===================================================================
---- Python-2.7.14.orig/Include/pythonrun.h
-+++ Python-2.7.14/Include/pythonrun.h
-@@ -108,6 +108,7 @@ PyAPI_FUNC(char *) Py_GetPath(void);
- /* In their own files */
- PyAPI_FUNC(const char *) Py_GetVersion(void);
- PyAPI_FUNC(const char *) Py_GetPlatform(void);
-+PyAPI_FUNC(const char *) Py_GetLib(void);
- PyAPI_FUNC(const char *) Py_GetCopyright(void);
- PyAPI_FUNC(const char *) Py_GetCompiler(void);
- PyAPI_FUNC(const char *) Py_GetBuildInfo(void);
-Index: Python-2.7.14/Lib/distutils/command/install.py
-===================================================================
---- Python-2.7.14.orig/Lib/distutils/command/install.py
-+++ Python-2.7.14/Lib/distutils/command/install.py
-@@ -22,6 +22,8 @@ from site import USER_BASE
- from site import USER_SITE
-
-
-+libname = sys.lib
-+
- if sys.version < "2.2":
- WINDOWS_SCHEME = {
- 'purelib': '$base',
-@@ -42,7 +44,7 @@ else:
- INSTALL_SCHEMES = {
- 'unix_prefix': {
- 'purelib': '$base/lib/python$py_version_short/site-packages',
-- 'platlib': '$platbase/lib/python$py_version_short/site-packages',
-+ 'platlib': '$platbase/'+libname+'/python$py_version_short/site-packages',
- 'headers': '$base/include/python$py_version_short/$dist_name',
- 'scripts': '$base/bin',
- 'data' : '$base',
-Index: Python-2.7.14/Lib/pydoc.py
-===================================================================
---- Python-2.7.14.orig/Lib/pydoc.py
-+++ Python-2.7.14/Lib/pydoc.py
-@@ -375,7 +375,7 @@ class Doc:
- docmodule = docclass = docroutine = docother = docproperty = docdata = fail
-
- def getdocloc(self, object,
-- basedir=os.path.join(sys.exec_prefix, "lib",
-+ basedir=os.path.join(sys.exec_prefix, "sys.lib",
- "python"+sys.version[0:3])):
- """Return the location of module docs or None"""
-
-Index: Python-2.7.14/Lib/site.py
-===================================================================
---- Python-2.7.14.orig/Lib/site.py
-+++ Python-2.7.14/Lib/site.py
-@@ -288,13 +288,19 @@ def getsitepackages():
- if sys.platform in ('os2emx', 'riscos'):
- sitepackages.append(os.path.join(prefix, "Lib", "site-packages"))
- elif os.sep == '/':
-- sitepackages.append(os.path.join(prefix, "lib",
-+ sitepackages.append(os.path.join(prefix, sys.lib,
- "python" + sys.version[:3],
- "site-packages"))
-- sitepackages.append(os.path.join(prefix, "lib", "site-python"))
-+ if sys.lib != "lib":
-+ sitepackages.append(os.path.join(prefix, "lib",
-+ "python" + sys.version[:3],
-+ "site-packages"))
-+ sitepackages.append(os.path.join(prefix, sys.lib, "site-python"))
-+ if sys.lib != "lib":
-+ sitepackages.append(os.path.join(prefix, "lib", "site-python"))
- 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):
-Index: Python-2.7.14/Lib/test/test_dl.py
-===================================================================
---- Python-2.7.14.orig/Lib/test/test_dl.py
-+++ Python-2.7.14/Lib/test/test_dl.py
-@@ -4,10 +4,11 @@
- import unittest
- from test.test_support import verbose, import_module
- dl = import_module('dl', deprecated=True)
-+import sys
-
- sharedlibs = [
-- ('/usr/lib/libc.so', 'getpid'),
-- ('/lib/libc.so.6', 'getpid'),
-+ ('/usr/'+sys.lib+'/libc.so', 'getpid'),
-+ ('/'+sys.lib+'/libc.so.6', 'getpid'),
- ('/usr/bin/cygwin1.dll', 'getpid'),
- ('/usr/lib/libc.dylib', 'getpid'),
- ]
-Index: Python-2.7.14/Lib/trace.py
-===================================================================
---- Python-2.7.14.orig/Lib/trace.py
-+++ Python-2.7.14/Lib/trace.py
-@@ -754,10 +754,10 @@ def main(argv=None):
- # should I also call expanduser? (after all, could use $HOME)
-
- s = s.replace("$prefix",
-- os.path.join(sys.prefix, "lib",
-+ os.path.join(sys.prefix, sys.lib,
- "python" + sys.version[:3]))
- s = s.replace("$exec_prefix",
-- os.path.join(sys.exec_prefix, "lib",
-+ os.path.join(sys.exec_prefix, sys.lib,
- "python" + sys.version[:3]))
- s = os.path.normpath(s)
- ignore_dirs.append(s)
-Index: Python-2.7.14/Makefile.pre.in
-===================================================================
---- Python-2.7.14.orig/Makefile.pre.in
-+++ Python-2.7.14/Makefile.pre.in
-@@ -91,6 +91,7 @@ PY_CFLAGS= $(CFLAGS) $(CPPFLAGS) $(CFLAG
-
- # Machine-dependent subdirectories
- MACHDEP= @MACHDEP@
-+LIB= @LIB@
-
- # Multiarch directory (may be empty)
- MULTIARCH= @MULTIARCH@
-@@ -110,7 +111,7 @@ LIBDIR= @libdir@
- MANDIR= @mandir@
- INCLUDEDIR= @includedir@
- CONFINCLUDEDIR= $(exec_prefix)/include
--SCRIPTDIR= $(prefix)/lib
-+SCRIPTDIR= $(prefix)/@LIB@
-
- # Detailed destination directories
- BINLIBDEST= $(LIBDIR)/python$(VERSION)
-@@ -644,6 +645,7 @@ Modules/getpath.o: $(srcdir)/Modules/get
- -DEXEC_PREFIX='"$(exec_prefix)"' \
- -DVERSION='"$(VERSION)"' \
- -DVPATH='"$(VPATH)"' \
-+ -DLIB='"$(LIB)"' \
- -o $@ $(srcdir)/Modules/getpath.c
-
- Modules/python.o: $(srcdir)/Modules/python.c
-@@ -692,7 +694,7 @@ regen-ast:
- Python/compile.o Python/symtable.o Python/ast.o: $(srcdir)/Include/graminit.h $(srcdir)/Include/Python-ast.h
-
- Python/getplatform.o: $(srcdir)/Python/getplatform.c
-- $(CC) -c $(PY_CFLAGS) -DPLATFORM='"$(MACHDEP)"' -o $@ $(srcdir)/Python/getplatform.c
-+ $(CC) -c $(PY_CFLAGS) -DPLATFORM='"$(MACHDEP)"' -DLIB='"$(LIB)"' -o $@ $(srcdir)/Python/getplatform.c
-
- Python/importdl.o: $(srcdir)/Python/importdl.c
- $(CC) -c $(PY_CFLAGS) -I$(DLINCLDIR) -o $@ $(srcdir)/Python/importdl.c
-Index: Python-2.7.14/Modules/getpath.c
-===================================================================
---- Python-2.7.14.orig/Modules/getpath.c
-+++ Python-2.7.14/Modules/getpath.c
-@@ -100,6 +100,13 @@
- #error "PREFIX, EXEC_PREFIX, VERSION, and VPATH must be constant defined"
- #endif
-
-+#define LIB_PYTHON LIB "/python" VERSION
-+
-+#ifndef PYTHONPATH
-+#define PYTHONPATH PREFIX "/" LIB_PYTHON ":" \
-+ EXEC_PREFIX "/" LIB_PYTHON "/lib-dynload"
-+#endif
-+
- #ifndef LANDMARK
- #define LANDMARK "os.py"
- #endif
-@@ -108,7 +115,7 @@ static char prefix[MAXPATHLEN+1];
- static char exec_prefix[MAXPATHLEN+1];
- static char progpath[MAXPATHLEN+1];
- static char *module_search_path = NULL;
--static char lib_python[] = "lib/python" VERSION;
-+static char lib_python[] = LIB_PYTHON;
-
- static void
- reduce(char *dir)
-Index: Python-2.7.14/Python/getplatform.c
-===================================================================
---- Python-2.7.14.orig/Python/getplatform.c
-+++ Python-2.7.14/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;
-+}
-Index: Python-2.7.14/Python/sysmodule.c
-===================================================================
---- Python-2.7.14.orig/Python/sysmodule.c
-+++ Python-2.7.14/Python/sysmodule.c
-@@ -1437,6 +1437,8 @@ _PySys_Init(void)
- PyString_FromString(Py_GetCopyright()));
- SET_SYS_FROM_STRING("platform",
- PyString_FromString(Py_GetPlatform()));
-+ SET_SYS_FROM_STRING("lib",
-+ PyString_FromString(Py_GetLib()));
- SET_SYS_FROM_STRING("executable",
- PyString_FromString(Py_GetProgramFullPath()));
- SET_SYS_FROM_STRING("prefix",
-Index: Python-2.7.14/configure.ac
-===================================================================
---- Python-2.7.14.orig/configure.ac
-+++ Python-2.7.14/configure.ac
-@@ -758,6 +758,11 @@ SunOS*)
- ;;
- esac
-
-+AC_SUBST(LIB)
-+AC_MSG_CHECKING(LIB)
-+LIB=`basename ${libdir}`
-+AC_MSG_RESULT($LIB)
-+
-
- AC_SUBST(LIBRARY)
- AC_MSG_CHECKING(LIBRARY)
diff --git a/meta/recipes-devtools/python/python-native/nohostlibs.patch b/meta/recipes-devtools/python/python-native/nohostlibs.patch
deleted file mode 100644
index 078060b49e..0000000000
--- a/meta/recipes-devtools/python/python-native/nohostlibs.patch
+++ /dev/null
@@ -1,54 +0,0 @@
-Upstream-Status: Inappropriate [embedded specific]
-
-2014/12/15
-Rebased for python-2.7.9
-Signed-off-by: Nitin A Kamble <nitin.a.kamble@intel.com>
-Signed-off-by: Alejandro Hernandez <alejandro.hernandez@linux.intel.com>
-
-Index: Python-2.7.9/setup.py
-===================================================================
---- Python-2.7.9.orig/setup.py
-+++ Python-2.7.9/setup.py
-@@ -439,9 +439,9 @@ class PyBuildExt(build_ext):
-
- def detect_modules(self):
- # Ensure that /usr/local is always used
-- if not cross_compiling:
-- add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib')
-- add_dir_to_list(self.compiler.include_dirs, '/usr/local/include')
-+ # if not cross_compiling:
-+ # add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib')
-+ # add_dir_to_list(self.compiler.include_dirs, '/usr/local/include')
- if cross_compiling:
- self.add_gcc_paths()
- self.add_multiarch_paths()
-@@ -480,15 +480,15 @@ class PyBuildExt(build_ext):
- for directory in reversed(options.dirs):
- add_dir_to_list(dir_list, directory)
-
-- if os.path.normpath(sys.prefix) != '/usr' \
-- and not sysconfig.get_config_var('PYTHONFRAMEWORK'):
-+ #if os.path.normpath(sys.prefix) != '/usr' \
-+ #and not sysconfig.get_config_var('PYTHONFRAMEWORK'):
- # OSX note: Don't add LIBDIR and INCLUDEDIR to building a framework
- # (PYTHONFRAMEWORK is set) to avoid # linking problems when
- # building a framework with different architectures than
- # the one that is currently installed (issue #7473)
-- add_dir_to_list(self.compiler.library_dirs,
-+ add_dir_to_list(self.compiler.library_dirs,
- sysconfig.get_config_var("LIBDIR"))
-- add_dir_to_list(self.compiler.include_dirs,
-+ add_dir_to_list(self.compiler.include_dirs,
- sysconfig.get_config_var("INCLUDEDIR"))
-
- try:
-@@ -761,8 +761,7 @@ class PyBuildExt(build_ext):
- pass # Issue 7384: Already linked against curses or tinfo.
- elif curses_library:
- readline_libs.append(curses_library)
-- elif self.compiler.find_library_file(lib_dirs +
-- ['/usr/lib/termcap'],
-+ elif self.compiler.find_library_file(lib_dirs,
- 'termcap'):
- readline_libs.append('termcap')
- exts.append( Extension('readline', ['readline.c'],
diff --git a/meta/recipes-devtools/python/python-native/revert_use_of_sysconfigdata.patch b/meta/recipes-devtools/python/python-native/revert_use_of_sysconfigdata.patch
deleted file mode 100644
index 202aaf1069..0000000000
--- a/meta/recipes-devtools/python/python-native/revert_use_of_sysconfigdata.patch
+++ /dev/null
@@ -1,86 +0,0 @@
-On older versions of Python, sysconfig read the data from both the Makefile and
-the Python.h file generated at build time, created dictionaries with their variables
-and used those when using get_config_var(), now it uses _sysconfigdata.build_time_vars[]
-which contains information from the HOST, erroneous in our case, this patch reverts this
-behavior and uses Python.h and Makefile to get information.
-
-Upstream-Status: Inappropriate [oe-specific]
-
-Signed-off-by: Alejandro Hernandez <alejandro.hernandez@linux.intel.com>
-
-Index: Python-2.7.9/Lib/distutils/sysconfig.py
-===================================================================
---- Python-2.7.9.orig/Lib/distutils/sysconfig.py
-+++ Python-2.7.9/Lib/distutils/sysconfig.py
-@@ -401,12 +401,66 @@ _config_vars = None
-
- def _init_posix():
- """Initialize the module as appropriate for POSIX systems."""
-- # _sysconfigdata is generated at build time, see the sysconfig module
-- from _sysconfigdata import build_time_vars
-- global _config_vars
-- _config_vars = {}
-- _config_vars.update(build_time_vars)
-+ g = {}
-+ # load the installed Makefile:
-+ try:
-+ filename = get_makefile_filename()
-+ parse_makefile(filename, g)
-+ except IOError, msg:
-+ my_msg = "invalid Python installation: unable to open %s" % filename
-+ if hasattr(msg, "strerror"):
-+ my_msg = my_msg + " (%s)" % msg.strerror
-+
-+ raise DistutilsPlatformError(my_msg)
-+
-+ # load the installed pyconfig.h:
-+ try:
-+ filename = get_config_h_filename()
-+ parse_config_h(file(filename), g)
-+ except IOError, msg:
-+ my_msg = "invalid Python installation: unable to open %s" % filename
-+ if hasattr(msg, "strerror"):
-+ my_msg = my_msg + " (%s)" % msg.strerror
-+
-+ raise DistutilsPlatformError(my_msg)
-+
-+ # On AIX, there are wrong paths to the linker scripts in the Makefile
-+ # -- these paths are relative to the Python source, but when installed
-+ # the scripts are in another directory.
-+ if python_build:
-+ g['LDSHARED'] = g['BLDSHARED']
-
-+ elif get_python_version() < '2.1':
-+ # The following two branches are for 1.5.2 compatibility.
-+ if sys.platform == 'aix4': # what about AIX 3.x ?
-+ # Linker script is in the config directory, not in Modules as the
-+ # Makefile says.
-+ python_lib = get_python_lib(standard_lib=1)
-+ ld_so_aix = os.path.join(python_lib, 'config', 'ld_so_aix')
-+ python_exp = os.path.join(python_lib, 'config', 'python.exp')
-+
-+ g['LDSHARED'] = "%s %s -bI:%s" % (ld_so_aix, g['CC'], python_exp)
-+
-+ elif sys.platform == 'beos':
-+ # Linker script is in the config directory. In the Makefile it is
-+ # relative to the srcdir, which after installation no longer makes
-+ # sense.
-+ python_lib = get_python_lib(standard_lib=1)
-+ linkerscript_path = string.split(g['LDSHARED'])[0]
-+ linkerscript_name = os.path.basename(linkerscript_path)
-+ linkerscript = os.path.join(python_lib, 'config',
-+ linkerscript_name)
-+
-+ # XXX this isn't the right place to do this: adding the Python
-+ # library to the link, if needed, should be in the "build_ext"
-+ # command. (It's also needed for non-MS compilers on Windows, and
-+ # it's taken care of for them by the 'build_ext.get_libraries()'
-+ # method.)
-+ g['LDSHARED'] = ("%s -L%s/lib -lpython%s" %
-+ (linkerscript, PREFIX, get_python_version()))
-+
-+ global _config_vars
-+ _config_vars = g
-
- def _init_nt():
- """Initialize the module as appropriate for NT"""
diff --git a/meta/recipes-devtools/python/python-native/unixccompiler.patch b/meta/recipes-devtools/python/python-native/unixccompiler.patch
deleted file mode 100644
index 4502829129..0000000000
--- a/meta/recipes-devtools/python/python-native/unixccompiler.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-Upstream-Status: Pending
-
-The CC variable,sometimes like:"x86_64-poky-linux-gcc -m64 --sysroot=/${TMPDIR}/sysroots/qemux86-64", contains option information.
-This will lead to wrong compiler name "qemux86-64" rather than "x86_64-poky-linux-gcc" when python finding the compiler name.
-
-Signed-off-by: Mei Lei <lei.mei@intel.com>
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-Index: Python-2.7.2/Lib/distutils/unixccompiler.py
-===================================================================
---- Python-2.7.2.orig/Lib/distutils/unixccompiler.py 2011-11-24 13:51:10.539998722 -0800
-+++ Python-2.7.2/Lib/distutils/unixccompiler.py 2011-11-24 15:54:36.872137766 -0800
-@@ -282,7 +282,7 @@
- # this time, there's no way to determine this information from
- # the configuration data stored in the Python installation, so
- # we use this hack.
-- compiler = os.path.basename(sysconfig.get_config_var("CC"))
-+ compiler = sysconfig.get_config_var("CC")
- if sys.platform[:6] == "darwin":
- # MacOSX's linker doesn't understand the -R flag at all
- return "-L" + dir
diff --git a/meta/recipes-devtools/python/python-native_2.7.16.bb b/meta/recipes-devtools/python/python-native_2.7.16.bb
deleted file mode 100644
index b7442800d9..0000000000
--- a/meta/recipes-devtools/python/python-native_2.7.16.bb
+++ /dev/null
@@ -1,89 +0,0 @@
-require python.inc
-EXTRANATIVEPATH += "bzip2-native"
-DEPENDS = "openssl-native bzip2-replacement-native zlib-native readline-native sqlite3-native expat-native gdbm-native db-native"
-
-SRC_URI += "\
- file://05-enable-ctypes-cross-build.patch \
- file://10-distutils-fix-swig-parameter.patch \
- file://11-distutils-never-modify-shebang-line.patch \
- file://0001-distutils-set-the-prefix-to-be-inside-staging-direct.patch \
- file://debug.patch \
- file://unixccompiler.patch \
- file://nohostlibs.patch \
- file://multilib.patch \
- file://add-md5module-support.patch \
- file://builddir.patch \
- file://parallel-makeinst-create-bindir.patch \
- file://revert_use_of_sysconfigdata.patch \
- file://0001-python-native-fix-one-do_populate_sysroot-warning.patch \
- "
-
-S = "${WORKDIR}/Python-${PV}"
-
-FILESEXTRAPATHS =. "${FILE_DIRNAME}/${PN}:"
-
-inherit native
-
-EXTRA_OECONF_append = " --bindir=${bindir}/${PN} --with-system-expat=${STAGING_DIR_HOST}"
-
-EXTRA_OEMAKE = '\
- LIBC="" \
- STAGING_LIBDIR=${STAGING_LIBDIR_NATIVE} \
- STAGING_INCDIR=${STAGING_INCDIR_NATIVE} \
-'
-
-do_configure_append() {
- autoreconf --verbose --install --force --exclude=autopoint ../Python-${PV}/Modules/_ctypes/libffi
-}
-
-# Regenerate all of the generated files
-# This ensures that pgen and friends get created during the compile phase
-do_compile_prepend() {
- oe_runmake regen-all
-}
-
-do_install() {
- oe_runmake 'DESTDIR=${D}' install
- install -d ${D}${bindir}/${PN}
- install -m 0755 Parser/pgen ${D}${bindir}/${PN}
-
- # Make sure we use /usr/bin/env python
- for PYTHSCRIPT in `grep -rIl ${bindir}/${PN}/python ${D}${bindir}/${PN}`; do
- sed -i -e '1s|^#!.*|#!/usr/bin/env python|' $PYTHSCRIPT
- done
-
- # Add a symlink to the native Python so that scripts can just invoke
- # "nativepython" and get the right one without needing absolute paths
- # (these often end up too long for the #! parser in the kernel as the
- # buffer is 128 bytes long).
- ln -s python-native/python ${D}${bindir}/nativepython
-
- # We don't want modules in ~/.local being used in preference to those
- # installed in the native sysroot, so disable user site support.
- sed -i -e 's,^\(ENABLE_USER_SITE = \).*,\1False,' ${D}${libdir}/python${PYTHON_MAJMIN}/site.py
-}
-
-python(){
-
- # Read JSON manifest
- import json
- pythondir = d.getVar('THISDIR')
- with open(pythondir+'/python/python2-manifest.json') as manifest_file:
- manifest_str = manifest_file.read()
- json_start = manifest_str.find('# EOC') + 6
- manifest_file.seek(json_start)
- manifest_str = manifest_file.read()
- python_manifest = json.loads(manifest_str)
-
- rprovides = d.getVar('RPROVIDES').split()
-
- # Hardcoded since it cant be python-native-foo, should be python-foo-native
- pn = 'python'
-
- for key in python_manifest:
- pypackage = pn + '-' + key + '-native'
- if pypackage not in rprovides:
- rprovides.append(pypackage)
-
- d.setVar('RPROVIDES', ' '.join(rprovides))
-}
diff --git a/meta/recipes-devtools/python/python-nose.inc b/meta/recipes-devtools/python/python-nose.inc
deleted file mode 100644
index ccec68a0e1..0000000000
--- a/meta/recipes-devtools/python/python-nose.inc
+++ /dev/null
@@ -1,18 +0,0 @@
-SUMMARY = "Extends Python unittest to make testing easier"
-HOMEPAGE = "http://readthedocs.org/docs/nose/"
-DESCRIPTION = "nose extends the test loading and running features of unittest, \
-making it easier to write, find and run tests."
-SECTION = "devel/python"
-LICENSE = "LGPLv2.1"
-LIC_FILES_CHKSUM = "file://lgpl.txt;md5=a6f89e2100d9b6cdffcea4f398e37343"
-
-SRC_URI[md5sum] = "4d3ad0ff07b61373d2cefc89c5d0b20b"
-SRC_URI[sha256sum] = "f1bffef9cbc82628f6e7d7b40d7e255aefaa1adb6a1b1d26c69a8b79e6208a98"
-
-inherit pypi
-
-RDEPENDS_${PN} = "\
- ${PYTHON_PN}-unittest \
- "
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python-nose_1.3.7.bb b/meta/recipes-devtools/python/python-nose_1.3.7.bb
deleted file mode 100644
index 6d69d2d62e..0000000000
--- a/meta/recipes-devtools/python/python-nose_1.3.7.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-inherit setuptools
-require python-nose.inc
diff --git a/meta/recipes-devtools/python/python-pbr.inc b/meta/recipes-devtools/python/python-pbr.inc
index 0e64501c32..f08d9fd381 100644
--- a/meta/recipes-devtools/python/python-pbr.inc
+++ b/meta/recipes-devtools/python/python-pbr.inc
@@ -1,12 +1,14 @@
SUMMARY = "Python Build Reasonableness"
DESCRIPTION = "PBR is a library that injects some useful and sensible default behaviors into your setuptools run"
-HOMEPAGE = "https://pypi.python.org/pypi/pbr"
+HOMEPAGE = "https://pypi.org/project/pbr"
SECTION = "devel/python"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://LICENSE;md5=1dece7821bf3fd70fe1309eaa37d52a2"
+SRC_URI += "file://0001-change-shebang-to-python3.patch"
+
inherit pypi
-RDEPENDS_${PN} += "${PYTHON_PN}-pip"
+RDEPENDS:${PN} += "python3-pip"
BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python-pyasn1.inc b/meta/recipes-devtools/python/python-pyasn1.inc
new file mode 100644
index 0000000000..7b269f2940
--- /dev/null
+++ b/meta/recipes-devtools/python/python-pyasn1.inc
@@ -0,0 +1,31 @@
+SUMMARY = "Python library implementing ASN.1 types."
+HOMEPAGE = "http://pyasn1.sourceforge.net/"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=190f79253908c986e6cacf380c3a5f6d"
+
+SRC_URI[sha256sum] = "3a35ab2c4b5ef98e17dfdec8ab074046fbda76e281c5a706ccd82328cfc8f64c"
+
+RDEPENDS:${PN}:class-target += " \
+ python3-codecs \
+ python3-logging \
+ python3-math \
+ python3-shell \
+"
+
+BBCLASSEXTEND = "native nativesdk"
+
+inherit ptest
+
+SRC_URI += " \
+ file://run-ptest \
+ "
+
+RDEPENDS:${PN}-ptest += " \
+ python3-pytest \
+ python3-unittest-automake-output \
+"
+
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}/tests
+ cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+}
diff --git a/meta/recipes-devtools/python/python-pycryptodome.inc b/meta/recipes-devtools/python/python-pycryptodome.inc
new file mode 100644
index 0000000000..8d9b6d911e
--- /dev/null
+++ b/meta/recipes-devtools/python/python-pycryptodome.inc
@@ -0,0 +1,30 @@
+SUMMARY = "Cryptographic library for Python"
+DESCRIPTION = "PyCryptodome is a self-contained Python package of low-level\
+ cryptographic primitives."
+HOMEPAGE = "http://www.pycryptodome.org"
+LICENSE = "PD & BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=29242a70410a4eeff488a28164e7ab93"
+
+inherit pypi
+
+PYPI_PACKAGE_EXT = "tar.gz"
+
+RDEPENDS:${PN} += " \
+ python3-cffi \
+ python3-ctypes \
+ python3-io \
+ python3-math \
+"
+
+RDEPENDS:${PN}-tests += " \
+ python3-unittest \
+"
+
+PACKAGES =+ "${PN}-tests"
+
+FILES:${PN}-tests = " \
+ ${PYTHON_SITEPACKAGES_DIR}/Crypto/SelfTest/ \
+ ${PYTHON_SITEPACKAGES_DIR}/Crypto/SelfTest/__pycache__/ \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python-rfc3986-validator/0001-setup.py-move-pytest-runner-to-test_requirements.patch b/meta/recipes-devtools/python/python-rfc3986-validator/0001-setup.py-move-pytest-runner-to-test_requirements.patch
new file mode 100644
index 0000000000..8a646874e8
--- /dev/null
+++ b/meta/recipes-devtools/python/python-rfc3986-validator/0001-setup.py-move-pytest-runner-to-test_requirements.patch
@@ -0,0 +1,32 @@
+From 3531ff73631a0d59234eb4713e7b3a7f5ea57bbb Mon Sep 17 00:00:00 2001
+From: Nicola Lunghi <nicola.lunghi@jci.com>
+Date: Thu, 14 Nov 2019 12:17:51 +0000
+Subject: [PATCH] setup.py: move pytest-runner to test_requirements
+
+This fixes an issue with yocto build.
+pytest-runner is only needed when running tests.
+
+Upstream-Status: Pending
+---
+ setup.py | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/setup.py b/setup.py
+index 53ebea7..ebb0de2 100644
+--- a/setup.py
++++ b/setup.py
+@@ -10,9 +10,9 @@ with open('README.md') as readme_file:
+
+ requirements = []
+
+-setup_requirements = ['pytest-runner', ]
++setup_requirements = []
+
+-test_requirements = ['pytest>=3', ]
++test_requirements = ['pytest>=3', 'pytest-runner']
+
+ setup(
+ author="Nicolas Aimetti",
+--
+2.20.1
+
diff --git a/meta/recipes-devtools/python/python-scons-native_3.0.1.bb b/meta/recipes-devtools/python/python-scons-native_3.0.1.bb
deleted file mode 100644
index 68b63c9357..0000000000
--- a/meta/recipes-devtools/python/python-scons-native_3.0.1.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-require python-scons_${PV}.bb
-inherit native pythonnative
-DEPENDS = "python-native"
-RDEPENDS_${PN} = ""
-
-do_install_append() {
- create_wrapper ${D}${bindir}/scons SCONS_LIB_DIR='${STAGING_DIR_HOST}/${PYTHON_SITEPACKAGES_DIR}' PYTHONNOUSERSITE='1'
-}
diff --git a/meta/recipes-devtools/python/python-scons_3.0.1.bb b/meta/recipes-devtools/python/python-scons_3.0.1.bb
deleted file mode 100644
index d5084b2d16..0000000000
--- a/meta/recipes-devtools/python/python-scons_3.0.1.bb
+++ /dev/null
@@ -1,21 +0,0 @@
-SUMMARY = "Software Construction tool (make/autotools replacement)"
-SECTION = "devel/python"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=46ddf66004e5be5566367cb525a66fc6"
-
-SRC_URI[md5sum] = "b6a292e251b34b82c203b56cfa3968b3"
-SRC_URI[sha256sum] = "24475e38d39c19683bc88054524df018fe6949d70fbd4c69e298d39a0269f173"
-
-UPSTREAM_CHECK_URI = "http://scons.org/pages/download.html"
-UPSTREAM_CHECK_REGEX = "(?P<pver>\d+(\.\d+)+)\.tar"
-
-inherit pypi setuptools
-
-RDEPENDS_${PN} = "\
- python-fcntl \
- python-io \
- python-json \
- python-subprocess \
- python-shell \
- python-pprint \
- "
diff --git a/meta/recipes-devtools/python/python-setuptools.inc b/meta/recipes-devtools/python/python-setuptools.inc
deleted file mode 100644
index 9092d7ad03..0000000000
--- a/meta/recipes-devtools/python/python-setuptools.inc
+++ /dev/null
@@ -1,39 +0,0 @@
-SUMMARY = "Download, build, install, upgrade, and uninstall Python packages"
-HOMEPAGE = "https://pypi.python.org/pypi/setuptools"
-SECTION = "devel/python"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;beginline=1;endline=19;md5=9a33897f1bca1160d7aad3835152e158"
-
-PYPI_PACKAGE_EXT = "zip"
-
-inherit pypi
-
-SRC_URI_append_class-native = " file://0001-conditionally-do-not-fetch-code-by-easy_install.patch"
-
-SRC_URI[md5sum] = "712697a5bc975cf479d487cd68206c20"
-SRC_URI[sha256sum] = "6e4eec90337e849ade7103723b9a99631c1f0d19990d6e8412dc42f5ae8b304d"
-
-DEPENDS += "${PYTHON_PN}"
-
-RDEPENDS_${PN} = "\
- ${PYTHON_PN}-compile \
- ${PYTHON_PN}-compression \
- ${PYTHON_PN}-ctypes \
- ${PYTHON_PN}-distutils \
- ${PYTHON_PN}-email \
- ${PYTHON_PN}-html \
- ${PYTHON_PN}-netserver \
- ${PYTHON_PN}-numbers \
- ${PYTHON_PN}-pkgutil \
- ${PYTHON_PN}-plistlib \
- ${PYTHON_PN}-shell \
- ${PYTHON_PN}-stringold \
- ${PYTHON_PN}-threading \
- ${PYTHON_PN}-unittest \
- ${PYTHON_PN}-xml \
-"
-do_install_prepend() {
- install -d ${D}${PYTHON_SITEPACKAGES_DIR}
-}
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python-setuptools_40.8.0.bb b/meta/recipes-devtools/python/python-setuptools_40.8.0.bb
deleted file mode 100644
index cf9440495b..0000000000
--- a/meta/recipes-devtools/python/python-setuptools_40.8.0.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-require python-setuptools.inc
-
-PROVIDES = "python-distribute"
-
-inherit setuptools
-
-RREPLACES_${PN} = "python-distribute"
-RPROVIDES_${PN} = "python-distribute"
-RCONFLICTS_${PN} = "python-distribute"
diff --git a/meta/recipes-devtools/python/python-six.inc b/meta/recipes-devtools/python/python-six.inc
index c706dcaf25..6b1b4ba481 100644
--- a/meta/recipes-devtools/python/python-six.inc
+++ b/meta/recipes-devtools/python/python-six.inc
@@ -1,14 +1,11 @@
SUMMARY = "Python 2 and 3 compatibility library"
-HOMEPAGE = "https://pypi.python.org/pypi/six/"
+HOMEPAGE = "https://pypi.org/project/six/"
SECTION = "devel/python"
LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=83e0f622bd5ac7d575dbd83d094d69b5"
-
-SRC_URI[md5sum] = "9ae5d1feed8c0215f4ae4adcd9207fcb"
-SRC_URI[sha256sum] = "d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=43cfc9e4ac0e377acfb9b76f56b8415d"
inherit pypi
-RDEPENDS_${PN} = "${PYTHON_PN}-io"
+RDEPENDS:${PN} = "python3-io"
BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python-subunit.inc b/meta/recipes-devtools/python/python-subunit.inc
deleted file mode 100644
index afaaa51fa5..0000000000
--- a/meta/recipes-devtools/python/python-subunit.inc
+++ /dev/null
@@ -1,14 +0,0 @@
-SUMMARY = "Python implementation of subunit test streaming protocol"
-HOMEPAGE = "https://pypi.python.org/pypi/python-subunit/"
-SECTION = "devel/python"
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://README.rst;beginline=1;endline=20;md5=909c08e291647fd985fbe5d9836d51b6"
-
-PYPI_PACKAGE = "python-subunit"
-
-SRC_URI[md5sum] = "16d468a3aeafe6c60a0c3b2b9132d65b"
-SRC_URI[sha256sum] = "9607edbee4c1e5a30ff88549ce8d9feb0b9bcbcb5e55033a9d76e86075465cbb"
-
-inherit pypi
-
-BBCLASSEXTEND = "nativesdk"
diff --git a/meta/recipes-devtools/python/python-testtools.inc b/meta/recipes-devtools/python/python-testtools.inc
deleted file mode 100644
index 1011c98a32..0000000000
--- a/meta/recipes-devtools/python/python-testtools.inc
+++ /dev/null
@@ -1,27 +0,0 @@
-SUMMARY = "Extensions to the Python standard library unit testing framework"
-HOMEPAGE = "https://pypi.python.org/pypi/testtools/"
-SECTION = "devel/python"
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=e2c9d3e8ba7141c83bfef190e0b9379a"
-
-inherit pypi
-
-SRC_URI[md5sum] = "0f0feb915497816cb99e39437494217e"
-SRC_URI[sha256sum] = "5827ec6cf8233e0f29f51025addd713ca010061204fdea77484a2934690a0559"
-
-DEPENDS += " \
- ${PYTHON_PN}-pbr \
- "
-
-# Satisfy setup.py 'setup_requires'
-DEPENDS += " \
- ${PYTHON_PN}-pbr-native \
- "
-
-RDEPENDS_${PN} += "\
- ${PYTHON_PN}-extras \
- ${PYTHON_PN}-pbr \
- ${PYTHON_PN}-six \
- "
-
-BBCLASSEXTEND = "nativesdk"
diff --git a/meta/recipes-devtools/python/python.inc b/meta/recipes-devtools/python/python.inc
deleted file mode 100644
index 779df53521..0000000000
--- a/meta/recipes-devtools/python/python.inc
+++ /dev/null
@@ -1,47 +0,0 @@
-SUMMARY = "The Python Programming Language"
-HOMEPAGE = "http://www.python.org"
-LICENSE = "PSFv2"
-SECTION = "devel/python"
-# bump this on every change in contrib/python/generate-manifest-2.7.py
-INC_PR = "r1"
-
-LIC_FILES_CHKSUM = "file://LICENSE;md5=e466242989bd33c1bd2b6a526a742498"
-
-SRC_URI = "http://www.python.org/ftp/python/${PV}/Python-${PV}.tar.xz \
- "
-
-SRC_URI[md5sum] = "30157d85a2c0479c09ea2cbe61f2aaf5"
-SRC_URI[sha256sum] = "f222ef602647eecb6853681156d32de4450a2c39f4de93bd5b20235f2e660ed7"
-
-# python recipe is actually python 2.x
-# also, exclude pre-releases for both python 2.x and 3.x
-UPSTREAM_CHECK_REGEX = "[Pp]ython-(?P<pver>2(\.\d+)+).tar"
-
-CVE_PRODUCT = "python"
-
-PYTHON_MAJMIN = "2.7"
-
-inherit autotools pkgconfig
-
-EXTRA_OECONF = "\
- --with-threads \
- --with-pymalloc \
- --without-cxx-main \
- --with-signal-module \
- --enable-shared \
- --enable-ipv6=${@bb.utils.contains('DISTRO_FEATURES', 'ipv6', 'yes', 'no', d)} \
- ac_cv_header_bluetooth_bluetooth_h=no ac_cv_header_bluetooth_h=no \
- ${PYTHONLSBOPTS} \
-"
-
-do_configure_prepend() {
- libdirleaf="$(echo ${libdir} | sed -e 's:${prefix}/::')"
- sed -i -e "s:SEDMELIBLEAF:${libdirleaf}:g" \
- ${S}/configure.ac
-}
-
-do_install_append () {
- sed -i -e 's:${HOSTTOOLS_DIR}/install:install:g' \
- -e 's:${HOSTTOOLS_DIR}/mkdir:mkdir:g' \
- ${D}/${libdir}/python${PYTHON_MAJMIN}/_sysconfigdata.py
-}
diff --git a/meta/recipes-devtools/python/python/0001-distutils-set-the-prefix-to-be-inside-staging-direct.patch b/meta/recipes-devtools/python/python/0001-distutils-set-the-prefix-to-be-inside-staging-direct.patch
deleted file mode 100644
index 502f849804..0000000000
--- a/meta/recipes-devtools/python/python/0001-distutils-set-the-prefix-to-be-inside-staging-direct.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-From 4cdf2e9df13c6327fcc94d53e4953005543aef3d Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Wed, 6 Apr 2016 17:43:02 +0300
-Subject: [PATCH 01/10] distutils: set the prefix to be inside staging
- directory
-
-The proper prefix is inside our staging area.
-
-Upstream-Status: Inappropriate [embedded specific]
-Signed-off-by: Michael 'Mickey' Lauer <mickey@vanille-media.de>
-Signed-off-by: Phil Blundell <philb@gnu.org>
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- Lib/distutils/sysconfig.py | 10 +++++++---
- 1 file changed, 7 insertions(+), 3 deletions(-)
-
-diff --git a/Lib/distutils/sysconfig.py b/Lib/distutils/sysconfig.py
-index de7da1d..f3aacf7 100644
---- a/Lib/distutils/sysconfig.py
-+++ b/Lib/distutils/sysconfig.py
-@@ -75,7 +75,7 @@ def get_python_inc(plat_specific=0, prefix=None):
- sys.exec_prefix -- i.e., ignore 'plat_specific'.
- """
- if prefix is None:
-- prefix = plat_specific and EXEC_PREFIX or PREFIX
-+ prefix = os.environ['STAGING_INCDIR'].rstrip('include')
-
- if os.name == "posix":
- if python_build:
-@@ -115,12 +115,16 @@ def get_python_lib(plat_specific=0, standard_lib=0, prefix=None):
- If 'prefix' is supplied, use it instead of sys.prefix or
- sys.exec_prefix -- i.e., ignore 'plat_specific'.
- """
-+ lib_basename = os.environ['STAGING_LIBDIR'].split('/')[-1]
- if prefix is None:
-- prefix = plat_specific and EXEC_PREFIX or PREFIX
-+ if plat_specific:
-+ prefix = os.environ['STAGING_LIBDIR'].rstrip(lib_basename)
-+ else:
-+ prefix = PREFIX
-
- if os.name == "posix":
- libpython = os.path.join(prefix,
-- "lib", "python" + get_python_version())
-+ lib_basename, "python" + get_python_version())
- if standard_lib:
- return libpython
- else:
---
-2.8.0.rc3
-
diff --git a/meta/recipes-devtools/python/python/0001-python2-use-cc_basename-to-replace-CC-for-checking-c.patch b/meta/recipes-devtools/python/python/0001-python2-use-cc_basename-to-replace-CC-for-checking-c.patch
deleted file mode 100644
index 6e4f820913..0000000000
--- a/meta/recipes-devtools/python/python/0001-python2-use-cc_basename-to-replace-CC-for-checking-c.patch
+++ /dev/null
@@ -1,114 +0,0 @@
-From 3f49be81e31c164654aeb10b65ebade982ca2ed8 Mon Sep 17 00:00:00 2001
-From: Changqing Li <changqing.li@windriver.com>
-Date: Mon, 22 Oct 2018 15:24:48 +0800
-Subject: [PATCH] python2: use cc_basename to replace CC for checking compiler
-
-When working path contains "clang"/"gcc"/"icc", it might be part of $CC
-because of the "--sysroot" parameter. That could cause judgement error
-about clang/gcc/icc compilers. e.g.
-When "icc" is containded in working path, below errors are reported when
-compiling python:
-x86_64-wrs-linux-gcc: error: strict: No such file or directory
-x86_64-wrs-linux-gcc: error: unrecognized command line option '-fp-model'
-
-Here use cc_basename to replace CC for checking compiler to avoid such
-kind of issue.
-
-Upstream-Status: Pending
-
-Signed-off-by: Li Zhou <li.zhou@windriver.com>
-
-Patch orignally from Li Zhou, I just rework it to new version
-
-Signed-off-by: Changqing Li <changqing.li@windriver.com>
----
- configure.ac | 18 +++++++++---------
- 1 file changed, 9 insertions(+), 9 deletions(-)
-
-diff --git a/configure.ac b/configure.ac
-index db1c940..dfcd89a 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -684,7 +684,7 @@ AC_MSG_RESULT($with_cxx_main)
- preset_cxx="$CXX"
- if test -z "$CXX"
- then
-- case "$CC" in
-+ case "$cc_basename" in
- gcc) AC_PATH_TOOL(CXX, [g++], [g++], [notfound]) ;;
- cc) AC_PATH_TOOL(CXX, [c++], [c++], [notfound]) ;;
- esac
-@@ -757,14 +757,14 @@ rmdir CaseSensitiveTestDir
-
- case $MACHDEP in
- bsdos*)
-- case $CC in
-+ case $cc_basename in
- gcc) CC="$CC -D_HAVE_BSDI";;
- esac;;
- esac
-
- case $ac_sys_system in
- hp*|HP*)
-- case $CC in
-+ case $cc_basename in
- cc|*/cc) CC="$CC -Ae";;
- esac;;
- SunOS*)
-@@ -1084,7 +1084,7 @@ then
- fi
-
- # Clang also needs -fwrapv
-- case $CC in
-+ case $cc_basename in
- *clang*) WRAP="-fwrapv"
- ;;
- esac
-@@ -1304,7 +1304,7 @@ yes)
- esac
-
- # ICC needs -fp-model strict or floats behave badly
--case "$CC" in
-+case "$cc_basename" in
- *icc*)
- BASECFLAGS="$BASECFLAGS -fp-model strict"
- ;;
-@@ -1443,7 +1443,7 @@ else
- fi],
- [AC_MSG_RESULT(no)])
- if test "$Py_LTO" = 'true' ; then
-- case $CC in
-+ case $cc_basename in
- *clang*)
- # Any changes made here should be reflected in the GCC+Darwin case below
- LTOFLAGS="-flto"
-@@ -1508,7 +1508,7 @@ then
- fi
- fi
- LLVM_PROF_ERR=no
--case $CC in
-+case $cc_basename in
- *clang*)
- # Any changes made here should be reflected in the GCC+Darwin case below
- PGO_PROF_GEN_FLAG="-fprofile-instr-generate"
-@@ -2322,7 +2322,7 @@ then
- then CCSHARED="-fPIC"
- else CCSHARED="-Kpic -belf"
- fi;;
-- IRIX*/6*) case $CC in
-+ IRIX*/6*) case $cc_basename in
- *gcc*) CCSHARED="-shared";;
- *) CCSHARED="";;
- esac;;
-@@ -2366,7 +2366,7 @@ then
- then
- LINKFORSHARED="-Wl,--export-dynamic"
- fi;;
-- SunOS/5*) case $CC in
-+ SunOS/5*) case $cc_basename in
- *gcc*)
- if $CC -Xlinker --help 2>&1 | grep export-dynamic >/dev/null
- then
---
-2.7.4
-
diff --git a/meta/recipes-devtools/python/python/01-use-proper-tools-for-cross-build.patch b/meta/recipes-devtools/python/python/01-use-proper-tools-for-cross-build.patch
deleted file mode 100644
index e795a74b91..0000000000
--- a/meta/recipes-devtools/python/python/01-use-proper-tools-for-cross-build.patch
+++ /dev/null
@@ -1,100 +0,0 @@
-We need to ensure our host tools get run during build, not the freshly
-built cross-tools (this will not work), so we introduce HOSTPYTHON and HOSTPGEN.
-
-Upstream-Status: Inappropriate [embedded specific]
-
-Signed-off-by: Michael 'Mickey' Lauer <mickey@vanille-media.de>
-Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
-
-Rebased for python-2.7.9
-Signed-off-by: Alejandro Hernandez <alejandro.hernandez@linux.intel.com>
-
-Rebased for python-2.7.14
-Signed-off-by: Derek Straka <derek@asterius.io>
-
-Index: Python-2.7.13/Makefile.pre.in
-===================================================================
---- Python-2.7.13.orig/Makefile.pre.in
-+++ Python-2.7.13/Makefile.pre.in
-@@ -245,6 +245,7 @@ LIBFFI_INCLUDEDIR= @LIBFFI_INCLUDEDIR@
- ##########################################################################
- # Parser
- PGEN= Parser/pgen$(EXE)
-+HOSTPGEN= $(PGEN)$(EXE)
-
- PSRCS= \
- Parser/acceler.c \
-@@ -512,7 +513,7 @@ $(BUILDPYTHON): Modules/python.o $(LIBRA
- $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) $(LDLAST)
-
- platform: $(BUILDPYTHON) pybuilddir.txt
-- $(RUNSHARED) $(PYTHON_FOR_BUILD) -c 'import sys ; from sysconfig import get_platform ; print get_platform()+"-"+sys.version[0:3]' >platform
-+ $(RUNSHARED) $(PYTHON_FOR_BUILD) -c 'import sys ; from distutils.util import get_platform ; print get_platform()+"-"+sys.version[0:3]' >platform
-
- # Create build directory and generate the sysconfig build-time data there.
- # pybuilddir.txt contains the name of the build dir and is used for
-@@ -663,7 +663,7 @@
- # Regenerate Include/graminit.h and Python/graminit.c
- # from Grammar/Grammar using pgen
- @$(MKDIR_P) Include
-- $(PGEN) $(srcdir)/Grammar/Grammar \
-+ $(HOSTPGEN) $(srcdir)/Grammar/Grammar \
- $(srcdir)/Include/graminit.h \
- $(srcdir)/Python/graminit.c
-
-@@ -1121,27 +1122,27 @@ libinstall: build_all $(srcdir)/Lib/$(PL
- $(DESTDIR)$(LIBDEST)/distutils/tests ; \
- fi
- PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
-- $(PYTHON_FOR_BUILD) -Wi -tt $(DESTDIR)$(LIBDEST)/compileall.py \
-+ $(HOSTPYTHON) -Wi -tt $(DESTDIR)$(LIBDEST)/compileall.py \
- -d $(LIBDEST) -f \
- -x 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \
- $(DESTDIR)$(LIBDEST)
- PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
-- $(PYTHON_FOR_BUILD) -Wi -tt -O $(DESTDIR)$(LIBDEST)/compileall.py \
-+ $(HOSTPYTHON) -Wi -tt $(DESTDIR)$(LIBDEST)/compileall.py \
- -d $(LIBDEST) -f \
- -x 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \
- $(DESTDIR)$(LIBDEST)
- -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
-- $(PYTHON_FOR_BUILD) -Wi -t $(DESTDIR)$(LIBDEST)/compileall.py \
-+ $(HOSTPYTHON) -Wi -tt $(DESTDIR)$(LIBDEST)/compileall.py \
- -d $(LIBDEST)/site-packages -f \
- -x badsyntax $(DESTDIR)$(LIBDEST)/site-packages
- -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
-- $(PYTHON_FOR_BUILD) -Wi -t -O $(DESTDIR)$(LIBDEST)/compileall.py \
-+ $(HOSTPYTHON) -Wi -tt $(DESTDIR)$(LIBDEST)/compileall.py \
- -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
-+ $(HOSTPYTHON) -m lib2to3.pgen2.driver $(DESTDIR)$(LIBDEST)/lib2to3/Grammar.txt
- -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
-- $(PYTHON_FOR_BUILD) -m lib2to3.pgen2.driver $(DESTDIR)$(LIBDEST)/lib2to3/PatternGrammar.txt
-+ $(HOSTPYTHON) -m lib2to3.pgen2.driver $(DESTDIR)$(LIBDEST)/lib2to3/PatternGrammar.txt
-
- # Create the PLATDIR source directory, if one wasn't distributed..
- $(srcdir)/Lib/$(PLATDIR):
-Index: Python-2.7.13/setup.py
-===================================================================
---- Python-2.7.13.orig/setup.py
-+++ Python-2.7.13/setup.py
-@@ -350,6 +350,7 @@ class PyBuildExt(build_ext):
- self.failed.append(ext.name)
- self.announce('*** WARNING: renaming "%s" since importing it'
- ' failed: %s' % (ext.name, why), level=3)
-+ return
- assert not self.inplace
- basename, tail = os.path.splitext(ext_filename)
- newname = basename + "_failed" + tail
-@@ -574,6 +575,9 @@ class PyBuildExt(build_ext):
-
- # XXX Omitted modules: gl, pure, dl, SGI-specific modules
-
-+ lib_dirs = [ os.getenv("STAGING_LIBDIR"), os.getenv("STAGING_BASELIBDIR") ]
-+ inc_dirs = [ os.getenv("STAGING_INCDIR") ]
-+
- #
- # The following modules are all pretty straightforward, and compile
- # on pretty much any POSIXish platform.
diff --git a/meta/recipes-devtools/python/python/03-fix-tkinter-detection.patch b/meta/recipes-devtools/python/python/03-fix-tkinter-detection.patch
deleted file mode 100644
index 650ceb5951..0000000000
--- a/meta/recipes-devtools/python/python/03-fix-tkinter-detection.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-Upstream-Status: Inappropriate [embedded specific]
-
-We need to supply STAGING_INCDIR here, otherwise the Tk headers
-will not be found.
-
-Signed-off-by: Michael 'Mickey' Lauer <mickey@vanille.de>
-Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
-
-Rebased for python-2.7.9
-
-diff --git a/setup.py b/setup.py
-index 8fe1fb8..67eda74 100644
---- a/setup.py
-+++ b/setup.py
-@@ -1892,7 +1892,7 @@ class PyBuildExt(build_ext):
- dotversion = dotversion[:-1] + '.' + dotversion[-1]
- tcl_include_sub = []
- tk_include_sub = []
-- for dir in inc_dirs:
-+ for dir in [os.getenv("STAGING_INCDIR")]:
- tcl_include_sub += [dir + os.sep + "tcl" + dotversion]
- tk_include_sub += [dir + os.sep + "tk" + dotversion]
- tk_include_sub += tcl_include_sub
-@@ -1911,22 +1911,6 @@ class PyBuildExt(build_ext):
- if dir not in include_dirs:
- include_dirs.append(dir)
-
-- # Check for various platform-specific directories
-- if host_platform == 'sunos5':
-- include_dirs.append('/usr/openwin/include')
-- added_lib_dirs.append('/usr/openwin/lib')
-- elif os.path.exists('/usr/X11R6/include'):
-- include_dirs.append('/usr/X11R6/include')
-- added_lib_dirs.append('/usr/X11R6/lib64')
-- added_lib_dirs.append('/usr/X11R6/lib')
-- elif os.path.exists('/usr/X11R5/include'):
-- include_dirs.append('/usr/X11R5/include')
-- added_lib_dirs.append('/usr/X11R5/lib')
-- else:
-- # Assume default location for X11
-- include_dirs.append('/usr/X11/include')
-- added_lib_dirs.append('/usr/X11/lib')
--
- # If Cygwin, then verify that X is installed before proceeding
- if host_platform == 'cygwin':
- x11_inc = find_file('X11/Xlib.h', [], include_dirs)
diff --git a/meta/recipes-devtools/python/python/05-enable-ctypes-cross-build.patch b/meta/recipes-devtools/python/python/05-enable-ctypes-cross-build.patch
deleted file mode 100644
index 5cc8742462..0000000000
--- a/meta/recipes-devtools/python/python/05-enable-ctypes-cross-build.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-Rebased for python 2.7.9
-
-Upstream-Status: Inappropriate [embedded specific]
-
-# CTypes need to know the actual host we are building on.
-# Signed-Off: Michael Dietrich <mdt@emdete.de>
-
-Index: Python-2.7.9/setup.py
-===================================================================
---- Python-2.7.9.orig/setup.py
-+++ Python-2.7.9/setup.py
-@@ -2028,12 +2028,12 @@ class PyBuildExt(build_ext):
-
- # Pass empty CFLAGS because we'll just append the resulting
- # CFLAGS to Python's; -g or -O2 is to be avoided.
-- cmd = "cd %s && env CFLAGS='' '%s/configure' %s" \
-- % (ffi_builddir, ffi_srcdir, " ".join(config_args))
-+ cmd = "(cd %s && autoconf -W cross) && (cd %s && env CFLAGS='' '%s/configure' %s)" \
-+ % (ffi_srcdir, ffi_builddir, ffi_srcdir, " ".join(config_args))
-
- res = os.system(cmd)
- if res or not os.path.exists(ffi_configfile):
-- print "Failed to configure _ctypes module"
-+ print "Failed to configure _ctypes module (res=%d) or missing conffile=%s" % ( res, ffi_configfile )
- return False
-
- fficonfig = {}
diff --git a/meta/recipes-devtools/python/python/06-avoid_usr_lib_termcap_path_in_linking.patch b/meta/recipes-devtools/python/python/06-avoid_usr_lib_termcap_path_in_linking.patch
deleted file mode 100644
index 435b319013..0000000000
--- a/meta/recipes-devtools/python/python/06-avoid_usr_lib_termcap_path_in_linking.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-Upstream-Status: Pending
-
-The poison directories patch has detected library path issue while
-compiling the python in cross environment, as seen bellow.
-
-warning: library search path "/usr/lib/termcap" is unsafe for cross-compilation
-
-This Patch fixes this issue in the python build environment.
-11 Oct 2010
-Nitin A Kamble <nitin.a.kamble@intel.com>
-
-2011/09/29
-Rebased for python 2.7.2
-Signed-off-by: Nitin A Kamble <nitin.a.kamble@intel.com>
-
-Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
-
-diff --git a/setup.py b/setup.py
-index 67eda74..59c537e 100644
---- a/setup.py
-+++ b/setup.py
-@@ -761,12 +761,10 @@ class PyBuildExt(build_ext):
- pass # Issue 7384: Already linked against curses or tinfo.
- elif curses_library:
- readline_libs.append(curses_library)
-- elif self.compiler.find_library_file(lib_dirs +
-- ['/usr/lib/termcap'],
-+ elif self.compiler.find_library_file(lib_dirs,
- '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) )
- else:
diff --git a/meta/recipes-devtools/python/python/add-CROSSPYTHONPATH-for-PYTHON_FOR_BUILD.patch b/meta/recipes-devtools/python/python/add-CROSSPYTHONPATH-for-PYTHON_FOR_BUILD.patch
deleted file mode 100644
index 329734064b..0000000000
--- a/meta/recipes-devtools/python/python/add-CROSSPYTHONPATH-for-PYTHON_FOR_BUILD.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-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]
-
-Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
-Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
----
- configure.ac | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-Index: Python-2.7.14/configure.ac
-===================================================================
---- Python-2.7.14.orig/configure.ac
-+++ Python-2.7.14/configure.ac
-@@ -36,7 +36,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:$(srcdir)/Lib/$(PLATDIR) '$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:$(srcdir)/Lib/plat-$(MACHDEP) '$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/python/add-md5module-support.patch b/meta/recipes-devtools/python/python/add-md5module-support.patch
deleted file mode 100644
index 33fea77554..0000000000
--- a/meta/recipes-devtools/python/python/add-md5module-support.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-
-Upstream-Status: Inappropriate [configuration]
-
-Signed-off-by: Saul Wold <sgw@linux.intel.com>
-
-Index: Python-2.7.2/Modules/Setup.dist
-===================================================================
---- Python-2.7.2.orig/Modules/Setup.dist 2011-06-11 08:46:26.000000000 -0700
-+++ Python-2.7.2/Modules/Setup.dist 2011-12-27 15:51:41.244623219 -0800
-@@ -248,7 +248,7 @@
- # Message-Digest Algorithm, described in RFC 1321. The necessary files
- # md5.c and md5.h are included here.
-
--#_md5 md5module.c md5.c
-+_md5 md5module.c md5.c
-
-
- # The _sha module implements the SHA checksum algorithms.
diff --git a/meta/recipes-devtools/python/python/avoid_warning_about_tkinter.patch b/meta/recipes-devtools/python/python/avoid_warning_about_tkinter.patch
deleted file mode 100644
index 287095f615..0000000000
--- a/meta/recipes-devtools/python/python/avoid_warning_about_tkinter.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-_tkinter module needs tk module along with tcl. tk is not yet integrated
-in yocto so we skip the check for this module.
-Avoid a warning by not adding this module to missing variable.
-
-Upstream-Status: Inappropriate [distribution]
-
-Also simply disable the tk module since its not in DEPENDS.
-Signed-off-by: Andrei Gherzan <andrei@gherzan.ro>
-
-Index: Python-2.7.13/setup.py
-===================================================================
---- Python-2.7.13.orig/setup.py
-+++ Python-2.7.13/setup.py
-@@ -1783,10 +1783,12 @@ class PyBuildExt(build_ext):
- self.extensions.extend(exts)
-
- # 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')
-
- ## # Uncomment these lines if you want to play with xxmodule.c
- ## ext = Extension('xx', ['xxmodule.c'])
diff --git a/meta/recipes-devtools/python/python/avoid_warning_for_sunos_specific_module.patch b/meta/recipes-devtools/python/python/avoid_warning_for_sunos_specific_module.patch
deleted file mode 100644
index 8ba5823014..0000000000
--- a/meta/recipes-devtools/python/python/avoid_warning_for_sunos_specific_module.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-sunaudiodev module is sunos specific so we avoid a warning by not
-adding this module to missing variable.
-
-Upstream-Status: Inappropriate [distribution]
-
-Signed-off-by: Andrei Gherzan <andrei@gherzan.ro>
-
-Index: Python-2.7.13/setup.py
-===================================================================
---- Python-2.7.13.orig/setup.py
-+++ Python-2.7.13/setup.py
-@@ -1671,8 +1671,9 @@ class PyBuildExt(build_ext):
- if host_platform == 'sunos5':
- # SunOS specific modules
- exts.append( Extension('sunaudiodev', ['sunaudiodev.c']) )
-- else:
-- missing.append('sunaudiodev')
-+ # If platform is not sunos warning is useless
-+ #else:
-+ # missing.append('sunaudiodev')
-
- if host_platform == 'darwin':
- # _scproxy
diff --git a/meta/recipes-devtools/python/python/bpo-35907-cve-2019-9948-fix.patch b/meta/recipes-devtools/python/python/bpo-35907-cve-2019-9948-fix.patch
deleted file mode 100644
index b267237018..0000000000
--- a/meta/recipes-devtools/python/python/bpo-35907-cve-2019-9948-fix.patch
+++ /dev/null
@@ -1,55 +0,0 @@
-From 179a5f75f1121dab271fe8f90eb35145f9dcbbda Mon Sep 17 00:00:00 2001
-From: Sihoon Lee <push0ebp@gmail.com>
-Date: Fri, 17 May 2019 02:41:06 +0900
-Subject: [PATCH] Update test_urllib.py and urllib.py\nchange assertEqual into
- assertRasies in DummyURLopener test, and simplify mitigation
-
-Upstream-Status: Submitted https://github.com/python/cpython/pull/11842
-
-CVE: CVE-2019-9948
-
-Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
----
- Lib/test/test_urllib.py | 11 +++--------
- Lib/urllib.py | 4 ++--
- 2 files changed, 5 insertions(+), 10 deletions(-)
-
-diff --git a/Lib/test/test_urllib.py b/Lib/test/test_urllib.py
-index e5f210e62a18..1e23dfb0bb16 100644
---- a/Lib/test/test_urllib.py
-+++ b/Lib/test/test_urllib.py
-@@ -1027,14 +1027,9 @@ def test_local_file_open(self):
- class DummyURLopener(urllib.URLopener):
- def open_local_file(self, url):
- return url
-- self.assertEqual(DummyURLopener().open(
-- 'local-file://example'), '//example')
-- self.assertEqual(DummyURLopener().open(
-- 'local_file://example'), '//example')
-- self.assertRaises(IOError, urllib.urlopen,
-- 'local-file://example')
-- self.assertRaises(IOError, urllib.urlopen,
-- 'local_file://example')
-+ for url in ('local_file://example', 'local-file://example'):
-+ self.assertRaises(IOError, DummyURLopener().open, url)
-+ self.assertRaises(IOError, urllib.urlopen, url)
-
- # Just commented them out.
- # Can't really tell why keep failing in windows and sparc.
-diff --git a/Lib/urllib.py b/Lib/urllib.py
-index a24e9a5c68fb..39b834054e9e 100644
---- a/Lib/urllib.py
-+++ b/Lib/urllib.py
-@@ -203,10 +203,10 @@ def open(self, fullurl, data=None):
- name = 'open_' + urltype
- self.type = urltype
- name = name.replace('-', '_')
--
-+
- # bpo-35907: # disallow the file reading with the type not allowed
- if not hasattr(self, name) or \
-- (self == _urlopener and name == 'open_local_file'):
-+ getattr(self, name) == self.open_local_file:
- if proxy:
- return self.open_unknown_proxy(proxy, fullurl, data)
- else:
diff --git a/meta/recipes-devtools/python/python/bpo-35907-cve-2019-9948.patch b/meta/recipes-devtools/python/python/bpo-35907-cve-2019-9948.patch
deleted file mode 100644
index f4c225d2fc..0000000000
--- a/meta/recipes-devtools/python/python/bpo-35907-cve-2019-9948.patch
+++ /dev/null
@@ -1,55 +0,0 @@
-From 8f99cc799e4393bf1112b9395b2342f81b3f45ef Mon Sep 17 00:00:00 2001
-From: push0ebp <push0ebp@shl-MacBook-Pro.local>
-Date: Thu, 14 Feb 2019 02:05:46 +0900
-Subject: [PATCH] bpo-35907: Avoid file reading as disallowing the unnecessary
- URL scheme in urllib
-
-Upstream-Status: Submitted https://github.com/python/cpython/pull/11842
-
-CVE: CVE-2019-9948
-
-Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
----
- Lib/test/test_urllib.py | 12 ++++++++++++
- Lib/urllib.py | 5 ++++-
- 2 files changed, 16 insertions(+), 1 deletion(-)
-
-diff --git a/Lib/test/test_urllib.py b/Lib/test/test_urllib.py
-index 1ce9201c0693..e5f210e62a18 100644
---- a/Lib/test/test_urllib.py
-+++ b/Lib/test/test_urllib.py
-@@ -1023,6 +1023,18 @@ def open_spam(self, url):
- "spam://c:|windows%/:=&?~#+!$,;'@()*[]|/path/"),
- "//c:|windows%/:=&?~#+!$,;'@()*[]|/path/")
-
-+ def test_local_file_open(self):
-+ class DummyURLopener(urllib.URLopener):
-+ def open_local_file(self, url):
-+ return url
-+ self.assertEqual(DummyURLopener().open(
-+ 'local-file://example'), '//example')
-+ self.assertEqual(DummyURLopener().open(
-+ 'local_file://example'), '//example')
-+ self.assertRaises(IOError, urllib.urlopen,
-+ 'local-file://example')
-+ self.assertRaises(IOError, urllib.urlopen,
-+ 'local_file://example')
-
- # Just commented them out.
- # Can't really tell why keep failing in windows and sparc.
-diff --git a/Lib/urllib.py b/Lib/urllib.py
-index d85504a5cb7e..a24e9a5c68fb 100644
---- a/Lib/urllib.py
-+++ b/Lib/urllib.py
-@@ -203,7 +203,10 @@ def open(self, fullurl, data=None):
- name = 'open_' + urltype
- self.type = urltype
- name = name.replace('-', '_')
-- if not hasattr(self, name):
-+
-+ # bpo-35907: # disallow the file reading with the type not allowed
-+ if not hasattr(self, name) or \
-+ (self == _urlopener and name == 'open_local_file'):
- if proxy:
- return self.open_unknown_proxy(proxy, fullurl, data)
- else:
diff --git a/meta/recipes-devtools/python/python/bpo-36216-cve-2019-9636-fix.patch b/meta/recipes-devtools/python/python/bpo-36216-cve-2019-9636-fix.patch
deleted file mode 100644
index 2ce4d2cde7..0000000000
--- a/meta/recipes-devtools/python/python/bpo-36216-cve-2019-9636-fix.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 06b5ee585d6e76bdbb4002f642d864d860cbbd2b Mon Sep 17 00:00:00 2001
-From: Steve Dower <steve.dower@python.org>
-Date: Tue, 12 Mar 2019 08:23:33 -0700
-Subject: [PATCH] bpo-36216: Only print test messages when verbose
-
-CVE: CVE-2019-9636
-
-Upstream-Status: Backport https://github.com/python/cpython/pull/12291/commits/06b5ee585d6e76bdbb4002f642d864d860cbbd2b
-
-Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
----
- Lib/test/test_urlparse.py | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/Lib/test/test_urlparse.py b/Lib/test/test_urlparse.py
-index 73b0228ea8e3..1830d0b28688 100644
---- a/Lib/test/test_urlparse.py
-+++ b/Lib/test/test_urlparse.py
-@@ -644,7 +644,8 @@ def test_urlsplit_normalization(self):
- for scheme in [u"http", u"https", u"ftp"]:
- for c in denorm_chars:
- url = u"{}://netloc{}false.netloc/path".format(scheme, c)
-- print "Checking %r" % url
-+ if test_support.verbose:
-+ print "Checking %r" % url
- with self.assertRaises(ValueError):
- urlparse.urlsplit(url)
-
diff --git a/meta/recipes-devtools/python/python/bpo-36216-cve-2019-9636.patch b/meta/recipes-devtools/python/python/bpo-36216-cve-2019-9636.patch
deleted file mode 100644
index 352b13ba9b..0000000000
--- a/meta/recipes-devtools/python/python/bpo-36216-cve-2019-9636.patch
+++ /dev/null
@@ -1,111 +0,0 @@
-From 3e3669c9c41a27e1466e2c28b3906e3dd0ce3e7e Mon Sep 17 00:00:00 2001
-From: Steve Dower <steve.dower@python.org>
-Date: Thu, 7 Mar 2019 08:25:22 -0800
-Subject: [PATCH] bpo-36216: Add check for characters in netloc that normalize
- to separators (GH-12201)
-
-CVE: CVE-2019-9636
-
-Upstream-Status: Backport https://github.com/python/cpython/pull/12216/commits/3e3669c9c41a27e1466e2c28b3906e3dd0ce3e7e
-
-Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
----
- Doc/library/urlparse.rst | 20 ++++++++++++++++
- Lib/test/test_urlparse.py | 24 +++++++++++++++++++
- Lib/urlparse.py | 17 +++++++++++++
- .../2019-03-06-09-38-40.bpo-36216.6q1m4a.rst | 3 +++
- 4 files changed, 64 insertions(+)
- create mode 100644 Misc/NEWS.d/next/Security/2019-03-06-09-38-40.bpo-36216.6q1m4a.rst
-
-diff --git a/Lib/test/test_urlparse.py b/Lib/test/test_urlparse.py
-index 4e1ded73c266..73b0228ea8e3 100644
---- a/Lib/test/test_urlparse.py
-+++ b/Lib/test/test_urlparse.py
-@@ -1,4 +1,6 @@
- from test import test_support
-+import sys
-+import unicodedata
- import unittest
- import urlparse
-
-@@ -624,6 +626,28 @@ def test_portseparator(self):
- self.assertEqual(urlparse.urlparse("http://www.python.org:80"),
- ('http','www.python.org:80','','','',''))
-
-+ def test_urlsplit_normalization(self):
-+ # Certain characters should never occur in the netloc,
-+ # including under normalization.
-+ # Ensure that ALL of them are detected and cause an error
-+ illegal_chars = u'/:#?@'
-+ hex_chars = {'{:04X}'.format(ord(c)) for c in illegal_chars}
-+ denorm_chars = [
-+ c for c in map(unichr, range(128, sys.maxunicode))
-+ if (hex_chars & set(unicodedata.decomposition(c).split()))
-+ and c not in illegal_chars
-+ ]
-+ # Sanity check that we found at least one such character
-+ self.assertIn(u'\u2100', denorm_chars)
-+ self.assertIn(u'\uFF03', denorm_chars)
-+
-+ for scheme in [u"http", u"https", u"ftp"]:
-+ for c in denorm_chars:
-+ url = u"{}://netloc{}false.netloc/path".format(scheme, c)
-+ print "Checking %r" % url
-+ with self.assertRaises(ValueError):
-+ urlparse.urlsplit(url)
-+
- def test_main():
- test_support.run_unittest(UrlParseTestCase)
-
-diff --git a/Lib/urlparse.py b/Lib/urlparse.py
-index f7c2b032b097..54eda08651ab 100644
---- a/Lib/urlparse.py
-+++ b/Lib/urlparse.py
-@@ -165,6 +165,21 @@ def _splitnetloc(url, start=0):
- delim = min(delim, wdelim) # use earliest delim position
- return url[start:delim], url[delim:] # return (domain, rest)
-
-+def _checknetloc(netloc):
-+ if not netloc or not isinstance(netloc, unicode):
-+ return
-+ # looking for characters like \u2100 that expand to 'a/c'
-+ # IDNA uses NFKC equivalence, so normalize for this check
-+ import unicodedata
-+ netloc2 = unicodedata.normalize('NFKC', netloc)
-+ if netloc == netloc2:
-+ return
-+ _, _, netloc = netloc.rpartition('@') # anything to the left of '@' is okay
-+ for c in '/?#@:':
-+ if c in netloc2:
-+ raise ValueError("netloc '" + netloc2 + "' contains invalid " +
-+ "characters under NFKC normalization")
-+
- def urlsplit(url, scheme='', allow_fragments=True):
- """Parse a URL into 5 components:
- <scheme>://<netloc>/<path>?<query>#<fragment>
-@@ -193,6 +208,7 @@ def urlsplit(url, scheme='', allow_fragments=True):
- url, fragment = url.split('#', 1)
- if '?' in url:
- url, query = url.split('?', 1)
-+ _checknetloc(netloc)
- v = SplitResult(scheme, netloc, url, query, fragment)
- _parse_cache[key] = v
- return v
-@@ -216,6 +232,7 @@ def urlsplit(url, scheme='', allow_fragments=True):
- url, fragment = url.split('#', 1)
- if '?' in url:
- url, query = url.split('?', 1)
-+ _checknetloc(netloc)
- v = SplitResult(scheme, netloc, url, query, fragment)
- _parse_cache[key] = v
- return v
-diff --git a/Misc/NEWS.d/next/Security/2019-03-06-09-38-40.bpo-36216.6q1m4a.rst b/Misc/NEWS.d/next/Security/2019-03-06-09-38-40.bpo-36216.6q1m4a.rst
-new file mode 100644
-index 000000000000..1e1ad92c6feb
---- /dev/null
-+++ b/Misc/NEWS.d/next/Security/2019-03-06-09-38-40.bpo-36216.6q1m4a.rst
-@@ -0,0 +1,3 @@
-+Changes urlsplit() to raise ValueError when the URL contains characters that
-+decompose under IDNA encoding (NFKC-normalization) into characters that
-+affect how the URL is parsed.
-\ No newline at end of file
diff --git a/meta/recipes-devtools/python/python/builddir.patch b/meta/recipes-devtools/python/python/builddir.patch
deleted file mode 100644
index ad629a022e..0000000000
--- a/meta/recipes-devtools/python/python/builddir.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-When cross compiling python, we used to need to install the Makefile, pyconfig.h
-and the python library to their final location before being able to compile the
-rest of python. This change allows us to point python at its own source when
-building, avoiding a variety of sysroot staging issues and simplifying the main
-python recipe.
-
-Upstream-Status: Inappropriate
-RP 2012/11/13
-
-Index: Python-2.7.9/Lib/sysconfig.py
-===================================================================
---- Python-2.7.9.orig/Lib/sysconfig.py
-+++ Python-2.7.9/Lib/sysconfig.py
-@@ -93,6 +93,7 @@ _PREFIX = os.path.normpath(sys.prefix)
- _EXEC_PREFIX = os.path.normpath(sys.exec_prefix)
- _CONFIG_VARS = None
- _USER_BASE = None
-+_PYTHONBUILDDIR = os.environ.get("PYTHONBUILDDIR", None)
-
- def _safe_realpath(path):
- try:
-@@ -100,7 +101,9 @@ def _safe_realpath(path):
- except OSError:
- return path
-
--if sys.executable:
-+if _PYTHONBUILDDIR:
-+ _PROJECT_BASE = _PYTHONBUILDDIR
-+elif sys.executable:
- _PROJECT_BASE = os.path.dirname(_safe_realpath(sys.executable))
- else:
- # sys.executable can be empty if argv[0] has been changed and Python is
-Index: Python-2.7.9/Lib/distutils/sysconfig.py
-===================================================================
---- Python-2.7.9.orig/Lib/distutils/sysconfig.py
-+++ Python-2.7.9/Lib/distutils/sysconfig.py
-@@ -26,6 +26,9 @@ EXEC_PREFIX = os.path.normpath(sys.exec_
- # live in project/PCBuild9. If we're dealing with an x64 Windows build,
- # it'll live in project/PCbuild/amd64.
- project_base = os.path.dirname(os.path.abspath(sys.executable))
-+_PYTHONBUILDDIR = os.environ.get("PYTHONBUILDDIR", None)
-+if _PYTHONBUILDDIR:
-+ project_base = _PYTHONBUILDDIR
- if os.name == "nt" and "pcbuild" in project_base[-8:].lower():
- project_base = os.path.abspath(os.path.join(project_base, os.path.pardir))
- # PC/VS7.1
diff --git a/meta/recipes-devtools/python/python/cgi_py.patch b/meta/recipes-devtools/python/python/cgi_py.patch
deleted file mode 100644
index de504f9dcf..0000000000
--- a/meta/recipes-devtools/python/python/cgi_py.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-Lib/cgi.py: Update the script as mentioned in the comment
-
-Upstream-Status: Inappropriate [distribution]
-
-Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
-
---- Python-2.6.6/Lib/cgi.py.orig 2010-08-01 22:14:27.000000000 -0500
-+++ Python-2.6.6/Lib/cgi.py 2011-09-21 15:28:40.478208631 -0500
-@@ -1,13 +1,4 @@
--#! /usr/local/bin/python
--
--# NOTE: the above "/usr/local/bin/python" is NOT a mistake. It is
--# intentionally NOT "/usr/bin/env python". On many systems
--# (e.g. Solaris), /usr/local/bin is not in $PATH as passed to CGI
--# scripts, and /usr/local/bin is the default directory where Python is
--# installed, so /usr/bin/env would be unable to find python. Granted,
--# binary installations by Linux vendors often install Python in
--# /usr/bin. So let those vendors patch cgi.py to match their choice
--# of installation.
-+#! /usr/bin/env python
-
- """Support module for CGI (Common Gateway Interface) scripts.
-
diff --git a/meta/recipes-devtools/python/python/check-if-target-is-64b-not-host.patch b/meta/recipes-devtools/python/python/check-if-target-is-64b-not-host.patch
deleted file mode 100644
index e6d6c65bbe..0000000000
--- a/meta/recipes-devtools/python/python/check-if-target-is-64b-not-host.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-Author: Andrei Gherzan <andrei@gherzan.ro>
-Date: Sun Mar 25 02:02:27 2012 +0200
-
-This patch was added for 64bit host machines. In the compile process python
-is checking if platform is a 64bit platform using sys.maxint which is the host's
-value. The patch fixes this issue so that python would check if TARGET machine
-is 64bit not the HOST machine. In this way will have "dl" and "imageop" modules
-built if HOST machine is 64bit but the target machine is 32bit.
-
-Signed-off-by: Andrei Gherzan <andrei@gherzan.ro>
-
-Upstream-Status: Pending
-
-Index: Python-2.7.11/setup.py
-===================================================================
---- Python-2.7.11.orig/setup.py
-+++ Python-2.7.11/setup.py
-@@ -35,6 +35,21 @@ COMPILED_WITH_PYDEBUG = ('--with-pydebug
- # This global variable is used to hold the list of modules to be disabled.
- disabled_module_list = []
-
-+def target_is_64bit_platform ():
-+ """
-+ In case of cross-compile, some modules are not build as setup checks if HOST
-+ is 64bit and not TARGET.
-+ As python was built for TARGET we can check this in pyconfig.h in this way:
-+ Sizeof LONG on a 32 bit platform is 4 bytes
-+ Sizeof LONG on a 64 bit platform is 8 bytes
-+ """
-+ pyconf = open("pyconfig.h").read()
-+ aux = re.search(r"#s*define\s+SIZEOF_LONG\s+8\s*", pyconf)
-+ if aux is not None:
-+ return True
-+ else:
-+ return False
-+
- def add_dir_to_list(dirlist, dir):
- """Add the directory 'dir' to the list 'dirlist' (at the front) if
- 1) 'dir' is not already in 'dirlist'
-@@ -716,7 +731,7 @@ class PyBuildExt(build_ext):
- exts.append( Extension('audioop', ['audioop.c']) )
-
- # Disabled on 64-bit platforms
-- if sys.maxsize != 9223372036854775807L:
-+ if not target_is_64bit_platform():
- # Operations on images
- exts.append( Extension('imageop', ['imageop.c']) )
- else:
-@@ -1545,7 +1560,7 @@ class PyBuildExt(build_ext):
- missing.append('_codecs_%s' % loc)
-
- # Dynamic loading module
-- if sys.maxint == 0x7fffffff:
-+ if not target_is_64bit_platform():
- # This requires sizeof(int) == sizeof(long) == sizeof(char*)
- dl_inc = find_file('dlfcn.h', [], inc_dirs)
- if (dl_inc is not None) and (host_platform not in ['atheos']):
diff --git a/meta/recipes-devtools/python/python/create_manifest2.py b/meta/recipes-devtools/python/python/create_manifest2.py
deleted file mode 100644
index 34659515cb..0000000000
--- a/meta/recipes-devtools/python/python/create_manifest2.py
+++ /dev/null
@@ -1,298 +0,0 @@
-# This script is used as a bitbake task to create a new python manifest
-# $ bitbake python -c create_manifest
-#
-# Our goal is to keep python-core as small as posible and add other python
-# packages only when the user needs them, hence why we split upstream python
-# into several packages.
-#
-# In a very simplistic way what this does is:
-# Launch python and see specifically what is required for it to run at a minimum
-#
-# Go through the python-manifest file and launch a separate task for every single
-# one of the files on each package, this task will check what was required for that
-# specific module to run, these modules will be called dependencies.
-# The output of such task will be a list of the modules or dependencies that were
-# found for that file.
-#
-# Such output will be parsed by this script, we will look for each dependency on the
-# manifest and if we find that another package already includes it, then we will add
-# that package as an RDEPENDS to the package we are currently checking; in case we dont
-# find the current dependency on any other package we will add it to the current package
-# as part of FILES.
-#
-#
-# This way we will create a new manifest from the data structure that was built during
-# this process, on this new manifest each package will contain specifically only
-# what it needs to run.
-#
-# There are some caveats which we try to deal with, such as repeated files on different
-# packages, packages that include folders, wildcards, and special packages.
-# Its also important to note that this method only works for python files, and shared
-# libraries. Static libraries, header files and binaries need to be dealt with manually.
-#
-# Author: Alejandro Enedino Hernandez Samaniego "aehs29" <aehs29 at gmail dot com>
-
-
-import sys
-import subprocess
-import json
-import os
-import collections
-
-# Hack to get native python search path (for folders), not fond of it but it works for now
-pivot='recipe-sysroot-native'
-for p in sys.path:
- if pivot in p:
- nativelibfolder=p[:p.find(pivot)+len(pivot)]
-
-# Empty dict to hold the whole manifest
-new_manifest = collections.OrderedDict()
-
-# Check for repeated files, folders and wildcards
-allfiles=[]
-repeated=[]
-wildcards=[]
-
-hasfolders=[]
-allfolders=[]
-
-def isFolder(value):
- if os.path.isdir(value.replace('${libdir}',nativelibfolder+'/usr/lib')) or os.path.isdir(value.replace('${libdir}',nativelibfolder+'/usr/lib64')) or os.path.isdir(value.replace('${libdir}',nativelibfolder+'/usr/lib32')):
- return True
- else:
- return False
-
-def prepend_comments(comments, json_manifest):
- with open(json_manifest, 'r+') as manifest:
- json_contents = manifest.read()
- manifest.seek(0, 0)
- manifest.write(comments + json_contents)
-
-# Read existing JSON manifest
-with open('python2-manifest.json') as manifest:
- # The JSON format doesn't allow comments so we hack the call to keep the comments using a marker
- manifest_str = manifest.read()
- json_start = manifest_str.find('# EOC') + 6 # EOC + \n
- manifest.seek(0)
- comments = manifest.read(json_start)
- manifest_str = manifest.read()
- old_manifest = json.loads(manifest_str, object_pairs_hook=collections.OrderedDict)
-
-# First pass to get core-package functionality, because we base everything on the fact that core is actually working
-# Not exactly the same so it should not be a function
-print ("Getting dependencies for core package:")
-
-# Special call to check for core package
-output = subprocess.check_output([sys.executable, 'get_module_deps2.py', 'python-core-package'])
-for item in output.split():
- # We append it so it doesnt hurt what we currently have:
- if item not in old_manifest['core']['files']:
- # We use the same data structure since its the one which will be used to check
- # dependencies for other packages
- old_manifest['core']['files'].append(item)
-
-for value in old_manifest['core']['files']:
- # Ignore folders, since we don't import those, difficult to handle multilib
- if isFolder(value):
- # Pass it directly
- if value not in old_manifest['core']['files']:
- old_manifest['core']['files'].append(value)
- # Ignore binaries, since we don't import those, assume it was added correctly (manually)
- if '${bindir}' in value:
- # Pass it directly
- if value not in old_manifest['core']['files']:
- old_manifest['core']['files'].append(value)
- continue
- # Ignore empty values
- if value == '':
- continue
- if '${includedir}' in value:
- if value not in old_manifest['core']['files']:
- old_manifest['core']['files'].append(value)
- continue
- # Get module name , shouldnt be affected by libdir/bindir
- value = os.path.splitext(os.path.basename(os.path.normpath(value)))[0]
-
-
- # Launch separate task for each module for deterministic behavior
- # Each module will only import what is necessary for it to work in specific
- print ('Getting dependencies for module: %s' % value)
- output = subprocess.check_output([sys.executable, 'get_module_deps2.py', '%s' % value])
- for item in output.split():
- # We append it so it doesnt hurt what we currently have:
- if item not in old_manifest['core']['files']:
- old_manifest['core']['files'].append(item)
-
-# We check which packages include folders
-for key in old_manifest:
- for value in old_manifest[key]['files']:
- # Ignore folders, since we don't import those, difficult to handle multilib
- if isFolder(value):
- print ('%s is a folder' % value)
- if key not in hasfolders:
- hasfolders.append(key)
- if value not in allfolders:
- allfolders.append(value)
-
-for key in old_manifest:
- # Use an empty dict as data structure to hold data for each package and fill it up
- new_manifest[key] = collections.OrderedDict()
- new_manifest[key]['summary'] = old_manifest[key]['summary']
- new_manifest[key]['rdepends']=[]
- new_manifest[key]['files'] = []
-
- # All packages should depend on core
- if key != 'core':
- new_manifest[key]['rdepends'].append('core')
-
- # Handle special cases, we assume that when they were manually added
- # to the manifest we knew what we were doing.
- print ('Handling package %s' % key)
- special_packages=['misc', 'modules', 'tests', 'dev']
- if key in special_packages or 'staticdev' in key:
- print('Passing %s package directly' % key)
- new_manifest[key]=old_manifest[key]
- continue
-
- for value in old_manifest[key]['files']:
- # We already handled core on the first pass
- if key == 'core':
- new_manifest[key]['files'].append(value)
- continue
- # Ignore folders, since we don't import those, difficult to handle multilib
- if isFolder(value):
- # Pass folders directly
- new_manifest[key]['files'].append(value)
- # Ignore binaries, since we don't import those
- if '${bindir}' in value:
- # Pass it directly to the new manifest data structure
- if value not in new_manifest[key]['files']:
- new_manifest[key]['files'].append(value)
- continue
- # Ignore empty values
- if value == '':
- continue
- if '${includedir}' in value:
- if value not in new_manifest[key]['files']:
- new_manifest[key]['files'].append(value)
- continue
- # Get module name , shouldnt be affected by libdir/bindir
- value = os.path.splitext(os.path.basename(os.path.normpath(value)))[0]
-
- # Launch separate task for each module for deterministic behavior
- # Each module will only import what is necessary for it to work in specific
- print ('Getting dependencies for module: %s' % value)
- output = subprocess.check_output([sys.executable, 'get_module_deps2.py', '%s' % value])
-
- # We can print dependencies for debugging purposes
- #print (output)
- # Output will have all dependencies
- for item in output.split():
-
- # Warning: This first part is ugly
- # One of the dependencies that was found, could be inside of one of the folders included by another package
- # We need to check if this happens so we can add the package containing the folder as an RDEPENDS
- # e.g. Folder encodings contained in codecs
- # This would be solved if no packages included any folders
-
- # This can be done in two ways:
- # 1 - We assume that if we take out the filename from the path we would get
- # the folder string, then we would check if folder string is in the list of folders
- # This would not work if a package contains a folder which contains another folder
- # e.g. path/folder1/folder2/filename folder_string= path/folder1/folder2
- # folder_string would not match any value contained in the list of folders
- #
- # 2 - We do it the other way around, checking if the folder is contained in the path
- # e.g. path/folder1/folder2/filename folder_string= path/folder1/folder2
- # is folder_string inside path/folder1/folder2/filename?,
- # Yes, it works, but we waste a couple of milliseconds.
-
- inFolders=False
- for folder in allfolders:
- # The module could have a directory named after it, e.g. xml, if we take out the filename from the path
- # we'll end up with ${libdir}, and we want ${libdir}/xml
- if isFolder(item):
- check_path = item
- else:
- check_path = os.path.dirname(item)
- if folder in check_path :
- inFolders = True # Did we find a folder?
- folderFound = False # Second flag to break inner for
- # Loop only through packages which contain folders
- for keyfolder in hasfolders:
- if (folderFound == False):
- #print("Checking folder %s on package %s" % (item,keyfolder))
- for file_folder in old_manifest[keyfolder]['files']:
- if file_folder==folder:
- print ('%s found in %s' % (folder, keyfolder))
- folderFound = True
- if keyfolder not in new_manifest[key]['rdepends'] and keyfolder != key:
- new_manifest[key]['rdepends'].append(keyfolder)
- else:
- break
-
- # A folder was found so we're done with this item, we can go on
- if inFolders:
- continue
-
- # We might already have it on the dictionary since it could depend on a (previously checked) module
- if item not in new_manifest[key]['files']:
- # Handle core as a special package, we already did it so we pass it to NEW data structure directly
- if key=='core':
- print('Adding %s to %s FILES' % (item, key))
- if item.endswith('*'):
- wildcards.append(item)
- new_manifest[key]['files'].append(item)
-
- # Check for repeated files
- if item not in allfiles:
- allfiles.append(item)
- else:
- repeated.append(item)
-
- else:
-
- # Check if this dependency is already contained on another package, so we add it
- # as an RDEPENDS, or if its not, it means it should be contained on the current
- # package, so we should add it to FILES
- for newkey in old_manifest:
- # Debug
- #print("Checking %s " % item + " in %s" % newkey)
- if item in old_manifest[newkey]['files']:
- # Since were nesting, we need to check its not the same key
- if(newkey!=key):
- if newkey not in new_manifest[key]['rdepends']:
- # Add it to the new manifest data struct
- # Debug
- print('Adding %s to %s RDEPENDS, because it contains %s' % (newkey, key, item))
- new_manifest[key]['rdepends'].append(newkey)
- break
- else:
- # Debug
- print('Adding %s to %s FILES' % (item, key))
- # Since it wasnt found on another package, its not an RDEP, so add it to FILES for this package
- new_manifest[key]['files'].append(item)
- if item.endswith('*'):
- wildcards.append(item)
- if item not in allfiles:
- allfiles.append(item)
- else:
- repeated.append(item)
-
-print ('The following files are repeated (contained in more than one package), please check which package should get it:')
-print (repeated)
-print('The following files contain wildcards, please check they are necessary')
-print(wildcards)
-print('The following files contain folders, please check they are necessary')
-print(hasfolders)
-
-# Sort it just so it looks nice
-for key in new_manifest:
- new_manifest[key]['files'].sort()
- new_manifest[key]['rdepends'].sort()
-
-# Create the manifest from the data structure that was built
-with open('python2-manifest.json.new','w') as outfile:
- json.dump(new_manifest,outfile, indent=4)
-
-prepend_comments(comments,'python2-manifest.json.new')
diff --git a/meta/recipes-devtools/python/python/fix_for_using_different_libdir.patch b/meta/recipes-devtools/python/python/fix_for_using_different_libdir.patch
deleted file mode 100644
index 5f7309367c..0000000000
--- a/meta/recipes-devtools/python/python/fix_for_using_different_libdir.patch
+++ /dev/null
@@ -1,77 +0,0 @@
-Upstream-Status: Inappropriate [Embedded specific]
-
-This patch fixes issuing with different libdir like lib64.
-This patch makes the native python binary modules findable
-in the install process of the host python.
-
-Signed-off-by: Nitin A Kamble <nitin.a.kamble@intel.com>
-Date: 2012/03/14
-
-Updated for python 2.7.3
-Signed-off-by: Nitin A Kamble <nitin.a.kamble@intel.com>
-Date: 2012/05/01
-
-Rebased for python-2.7.9
-Signed-off-by: Alejandro Hernandez <alejandro.hernandez@linux.intel.com>
-
-
-Index: Python-2.7.9/Lib/sysconfig.py
-===================================================================
---- Python-2.7.9.orig/Lib/sysconfig.py
-+++ Python-2.7.9/Lib/sysconfig.py
-@@ -9,7 +9,7 @@ _INSTALL_SCHEMES = {
- 'posix_prefix': {
- 'stdlib': '{base}/'+sys.lib+'/python{py_version_short}',
- 'platstdlib': '{platbase}/'+sys.lib+'/python{py_version_short}',
-- 'purelib': '{base}/lib/python{py_version_short}/site-packages',
-+ 'purelib': '{base}/'+sys.lib+'/python{py_version_short}/site-packages',
- 'platlib': '{platbase}/'+sys.lib+'/python{py_version_short}/site-packages',
- 'include': '{base}/include/python{py_version_short}',
- 'platinclude': '{platbase}/include/python{py_version_short}',
-@@ -67,7 +67,7 @@ _INSTALL_SCHEMES = {
- 'posix_user': {
- 'stdlib': '{userbase}/'+sys.lib+'/python{py_version_short}',
- 'platstdlib': '{userbase}/'+sys.lib+'/python{py_version_short}',
-- 'purelib': '{userbase}/lib/python{py_version_short}/site-packages',
-+ 'purelib': '{userbase}/'+sys.lib+'/python{py_version_short}/site-packages',
- 'platlib': '{userbase}/'+sys.lib+'/python{py_version_short}/site-packages',
- 'include': '{userbase}/include/python{py_version_short}',
- 'scripts': '{userbase}/bin',
-Index: Python-2.7.9/Makefile.pre.in
-===================================================================
---- Python-2.7.9.orig/Makefile.pre.in
-+++ Python-2.7.9/Makefile.pre.in
-@@ -1046,27 +1046,27 @@ libinstall: build_all $(srcdir)/Lib/$(PL
- $(INSTALL_DATA) $(srcdir)/Modules/xxmodule.c \
- $(DESTDIR)$(LIBDEST)/distutils/tests ; \
- fi
-- PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
-+ PYTHONPATH=$(DESTDIR)$(LIBDEST):${CROSSPYTHONPATH} $(RUNSHARED) \
- $(HOSTPYTHON) -Wi -tt $(DESTDIR)$(LIBDEST)/compileall.py \
- -d $(LIBDEST) -f \
- -x 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \
- $(DESTDIR)$(LIBDEST)
-- PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
-+ PYTHONPATH=$(DESTDIR)$(LIBDEST):${CROSSPYTHONPATH}$(RUNSHARED) \
- $(HOSTPYTHON) -Wi -tt $(DESTDIR)$(LIBDEST)/compileall.py \
- -d $(LIBDEST) -f \
- -x 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \
- $(DESTDIR)$(LIBDEST)
-- -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
-+ -PYTHONPATH=$(DESTDIR)$(LIBDEST):${CROSSPYTHONPATH} $(RUNSHARED) \
- $(HOSTPYTHON) -Wi -tt $(DESTDIR)$(LIBDEST)/compileall.py \
- -d $(LIBDEST)/site-packages -f \
- -x badsyntax $(DESTDIR)$(LIBDEST)/site-packages
-- -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
-+ -PYTHONPATH=$(DESTDIR)$(LIBDEST):${CROSSPYTHONPATH} $(RUNSHARED) \
- $(HOSTPYTHON) -Wi -tt $(DESTDIR)$(LIBDEST)/compileall.py \
- -d $(LIBDEST)/site-packages -f \
- -x badsyntax $(DESTDIR)$(LIBDEST)/site-packages
-- -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
-+ -PYTHONPATH=$(DESTDIR)$(LIBDEST):${CROSSPYTHONPATH} $(RUNSHARED) \
- $(HOSTPYTHON) -m lib2to3.pgen2.driver $(DESTDIR)$(LIBDEST)/lib2to3/Grammar.txt
-- -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
-+ -PYTHONPATH=$(DESTDIR)$(LIBDEST):${CROSSPYTHONPATH} $(RUNSHARED) \
- $(HOSTPYTHON) -m lib2to3.pgen2.driver $(DESTDIR)$(LIBDEST)/lib2to3/PatternGrammar.txt
-
- # Create the PLATDIR source directory, if one wasn't distributed..
diff --git a/meta/recipes-devtools/python/python/float-endian.patch b/meta/recipes-devtools/python/python/float-endian.patch
deleted file mode 100644
index 8a5c90aec4..0000000000
--- a/meta/recipes-devtools/python/python/float-endian.patch
+++ /dev/null
@@ -1,216 +0,0 @@
-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: Backport
-Signed-off-by: Ross Burton <ross.burton@intel.com>
-
-From 253f47b28120c42cfe53a4e2f5ed0ab0ed469deb Mon Sep 17 00:00:00 2001
-From: Ross Burton <ross@burtonini.com>
-Date: Wed, 19 Sep 2018 07:25:48 +0100
-Subject: [PATCH] closes bpo-34585: Don't do runtime test to get float byte
- order. (GH-9085)
-
-Currently configure.ac uses AC_RUN_IFELSE to determine the byte order of doubles, but this silently fails under cross compilation and Python doesn't do floats properly.
-
-Instead, steal a macro from autoconf-archive which compiles code using magic doubles (which encode to ASCII) and grep for the representation in the binary.
-
-RFC because this doesn't yet handle the weird ancient ARMv4 OABI 'mixed-endian' encoding properly. This encoding is ancient and I don't believe the union of "Python 3.8 users" and "OABI users" has anything in. Should the support for this just be dropped too? Alternatively, someone will need to find an OABI toolchain to verify the encoding of the magic double.
-
-Signed-off-by: Ross Burton <ross.burton@intel.com>
----
- .../Build/2018-09-18-16-28-31.bpo-34585.CGMu0h.rst | 3 +
- configure.ac | 76 ++++----------------
- m4/ax_c_float_words_bigendian.m4 | 83 ++++++++++++++++++++++
- 3 files changed, 99 insertions(+), 63 deletions(-)
- create mode 100644 Misc/NEWS.d/next/Build/2018-09-18-16-28-31.bpo-34585.CGMu0h.rst
- create mode 100644 m4/ax_c_float_words_bigendian.m4
-
-diff --git a/configure.ac b/configure.ac
-index 913d5469d0..7672735396 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -3835,74 +3835,24 @@ 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_LITTLE_ENDIAN_IEEE754, 1,
-+ [Define if C doubles are 64-bit IEEE 754 binary format, stored
-+ with the least significant byte first])
-+else
-+ # 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.
-+ # FLOAT_WORDS_BIGENDIAN doesnt actually detect this case, but if it's not big
-+ # or little, then it must be this?
- AC_DEFINE(DOUBLE_IS_ARM_MIXED_ENDIAN_IEEE754, 1,
- [Define if C doubles are 64-bit IEEE 754 binary format, stored
- in ARM mixed-endian order (byte order 45670123)])
-diff --git a/m4/ax_c_float_words_bigendian.m4 b/m4/ax_c_float_words_bigendian.m4
-new file mode 100644
-index 0000000000..216b90d803
---- /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
---
-2.11.0
-
diff --git a/meta/recipes-devtools/python/python/get_module_deps2.py b/meta/recipes-devtools/python/python/get_module_deps2.py
deleted file mode 100644
index 73e7c6f6dc..0000000000
--- a/meta/recipes-devtools/python/python/get_module_deps2.py
+++ /dev/null
@@ -1,112 +0,0 @@
-# This script is launched on separate task for each python module
-# It checks for dependencies for that specific module and prints
-# 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>
-
-
-# We can get a log per module, for all the dependencies that were found, but its messy.
-debug=False
-
-import sys
-
-# 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
-# and check what modules are currently running, if we substract them from the
-# modules we had initially, we get the dependencies for the module we imported.
-
-# We use importlib to achieve this, so we also need to know what modules importlib needs
-import importlib
-
-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):]
-
- if '/usr/bin' in dep_path:
- dep_path = dep_path.replace('/usr/bin''${bindir}')
-
- # Handle multilib, is there a better way?
- if '/usr/lib32' in dep_path:
- dep_path = dep_path.replace('/usr/lib32','${libdir}')
- if '/usr/lib64' in dep_path:
- dep_path = dep_path.replace('/usr/lib64','${libdir}')
- if '/usr/lib' in dep_path:
- dep_path = dep_path.replace('/usr/lib','${libdir}')
- if '/usr/include' in dep_path:
- dep_path = dep_path.replace('/usr/include','${includedir}')
- if '__init__.' in dep_path:
- dep_path = os.path.split(dep_path)[0]
-
- # If a *.pyc file was imported, we replace it with *.py (since we deal with PYCs on create_manifest)
- if '.pyc' in dep_path:
- dep_path = dep_path.replace('.pyc','.py')
-
- return 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')
- log.write('Module %s generated the following dependencies:\n' % current_module)
-try:
- importlib.import_module('%s' % current_module)
-except ImportError as e:
- if (debug==True):
- log.write('Module was not found')
- pass
-
-
-# Get current module dependencies, dif will contain a list of specific deps for this module
-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':
- dif = core_deps
-else:
- dif = module_deps-core_deps
-
-
-# Check where each dependency came from
-for item in dif:
- dep_path=''
- try:
- if (debug==True):
- log.write('Calling: 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:
- log.write(item + ' ')
- log.write(str(e))
- log.write('\n')
- pass
- 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):
- log.write(item+' ')
- log.write(str(e))
- pass
-
- # Site-customize is a special case since we (OpenEmbedded) put it there manually
- if 'sitecustomize' in dep_path:
- dep_path = '${libdir}/python2.7/sitecustomize.py'
- # Prints out result, which is what will be used by create_manifest
- print (dep_path)
- continue
-
- dep_path = fix_path(dep_path)
-
- if (debug==True):
- log.write(dep_path+'\n')
-
- # Prints out result, which is what will be used by create_manifest
- print (dep_path)
-
-if debug==True:
- log.close()
diff --git a/meta/recipes-devtools/python/python/host_include_contamination.patch b/meta/recipes-devtools/python/python/host_include_contamination.patch
deleted file mode 100644
index e0aafb218b..0000000000
--- a/meta/recipes-devtools/python/python/host_include_contamination.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-when building python for qemux86-64 on ubuntu 11.10/64bit
-it gropes into host includes and then mixes them with cross
-includes and as a result some modules fail to compile and link
-one of the modules is python-elementtree which is then not
-found during image creation
-
-Proble is that setup.py tries to add native includes that newer
-ubuntu has introduced for multiarch support. But that should
-only happen for native builds and not cross building python
-so we add a check here.
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-Upstream-Status: Pending
-
-
-diff --git a/setup.py b/setup.py
-index ba2d242..bf859be 100644
---- a/setup.py
-+++ b/setup.py
-@@ -393,6 +393,8 @@ class PyBuildExt(build_ext):
-
- if not find_executable('dpkg-architecture'):
- return
-+ if os.environ.get('CROSS_COMPILE') is not None:
-+ return
- opt = ''
- if cross_compiling:
- opt = '-t' + sysconfig.get_config_var('HOST_GNU_TYPE')
diff --git a/meta/recipes-devtools/python/python/multilib.patch b/meta/recipes-devtools/python/python/multilib.patch
deleted file mode 100644
index d24bc15f01..0000000000
--- a/meta/recipes-devtools/python/python/multilib.patch
+++ /dev/null
@@ -1,298 +0,0 @@
-Rebased for python-2.7.9
-Signed-off-by: Alejandro Hernandez <alejandro.hernandez@linux.intel.com>
-Upstream-Status: Pending
-Index: Python-2.7.14/configure.ac
-===================================================================
---- Python-2.7.14.orig/configure.ac
-+++ Python-2.7.14/configure.ac
-@@ -758,6 +758,10 @@ SunOS*)
- ;;
- esac
-
-+AC_SUBST(LIB)
-+AC_MSG_CHECKING(LIB)
-+LIB="SEDMELIBLEAF"
-+AC_MSG_RESULT($LIB)
-
- AC_SUBST(LIBRARY)
- AC_MSG_CHECKING(LIBRARY)
-Index: Python-2.7.14/Include/pythonrun.h
-===================================================================
---- Python-2.7.14.orig/Include/pythonrun.h
-+++ Python-2.7.14/Include/pythonrun.h
-@@ -108,6 +108,7 @@ PyAPI_FUNC(char *) Py_GetPath(void);
- /* In their own files */
- PyAPI_FUNC(const char *) Py_GetVersion(void);
- PyAPI_FUNC(const char *) Py_GetPlatform(void);
-+PyAPI_FUNC(const char *) Py_GetLib(void);
- PyAPI_FUNC(const char *) Py_GetCopyright(void);
- PyAPI_FUNC(const char *) Py_GetCompiler(void);
- PyAPI_FUNC(const char *) Py_GetBuildInfo(void);
-Index: Python-2.7.14/Lib/distutils/command/install.py
-===================================================================
---- Python-2.7.14.orig/Lib/distutils/command/install.py
-+++ Python-2.7.14/Lib/distutils/command/install.py
-@@ -22,6 +22,8 @@ from site import USER_BASE
- from site import USER_SITE
-
-
-+libname = sys.lib
-+
- if sys.version < "2.2":
- WINDOWS_SCHEME = {
- 'purelib': '$base',
-@@ -41,8 +43,8 @@ else:
-
- INSTALL_SCHEMES = {
- 'unix_prefix': {
-- 'purelib': '$base/lib/python$py_version_short/site-packages',
-- 'platlib': '$platbase/lib/python$py_version_short/site-packages',
-+ 'purelib': '$platbase/'+libname+'/python$py_version_short/site-packages',
-+ 'platlib': '$platbase/'+libname+'/python$py_version_short/site-packages',
- 'headers': '$base/include/python$py_version_short/$dist_name',
- 'scripts': '$base/bin',
- 'data' : '$base',
-Index: Python-2.7.14/Lib/distutils/sysconfig.py
-===================================================================
---- Python-2.7.14.orig/Lib/distutils/sysconfig.py
-+++ Python-2.7.14/Lib/distutils/sysconfig.py
-@@ -119,8 +119,11 @@ def get_python_lib(plat_specific=0, stan
- prefix = plat_specific and EXEC_PREFIX or PREFIX
-
- if os.name == "posix":
-- libpython = os.path.join(prefix,
-- "lib", "python" + get_python_version())
-+ if plat_specific or standard_lib:
-+ lib = sys.lib
-+ else:
-+ lib = "lib"
-+ libpython = os.path.join(prefix, lib, "python" + get_python_version())
- if standard_lib:
- return libpython
- else:
-Index: Python-2.7.14/Lib/pydoc.py
-===================================================================
---- Python-2.7.14.orig/Lib/pydoc.py
-+++ Python-2.7.14/Lib/pydoc.py
-@@ -375,7 +375,7 @@ class Doc:
- docmodule = docclass = docroutine = docother = docproperty = docdata = fail
-
- def getdocloc(self, object,
-- basedir=os.path.join(sys.exec_prefix, "lib",
-+ basedir=os.path.join(sys.exec_prefix, "sys.lib",
- "python"+sys.version[0:3])):
- """Return the location of module docs or None"""
-
-Index: Python-2.7.14/Lib/site.py
-===================================================================
---- Python-2.7.14.orig/Lib/site.py
-+++ Python-2.7.14/Lib/site.py
-@@ -288,13 +288,18 @@ def getsitepackages():
- if sys.platform in ('os2emx', 'riscos'):
- sitepackages.append(os.path.join(prefix, "Lib", "site-packages"))
- elif os.sep == '/':
-- sitepackages.append(os.path.join(prefix, "lib",
-+ sitepackages.append(os.path.join(prefix, sys.lib,
- "python" + sys.version[:3],
- "site-packages"))
-- sitepackages.append(os.path.join(prefix, "lib", "site-python"))
-+ sitepackages.append(os.path.join(prefix, sys.lib, "site-python"))
-+ if sys.lib != "lib":
-+ sitepackages.append(os.path.join(prefix, "lib",
-+ "python" + sys.version[:3],
-+ "site-packages"))
-+ sitepackages.append(os.path.join(prefix, "lib", "site-python"))
- 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):
-Index: Python-2.7.14/Lib/sysconfig.py
-===================================================================
---- Python-2.7.14.orig/Lib/sysconfig.py
-+++ Python-2.7.14/Lib/sysconfig.py
-@@ -7,10 +7,10 @@ from os.path import pardir, realpath
-
- _INSTALL_SCHEMES = {
- 'posix_prefix': {
-- 'stdlib': '{base}/lib/python{py_version_short}',
-- 'platstdlib': '{platbase}/lib/python{py_version_short}',
-+ 'stdlib': '{base}/'+sys.lib+'/python{py_version_short}',
-+ 'platstdlib': '{platbase}/'+sys.lib+'/python{py_version_short}',
- 'purelib': '{base}/lib/python{py_version_short}/site-packages',
-- 'platlib': '{platbase}/lib/python{py_version_short}/site-packages',
-+ 'platlib': '{platbase}/'+sys.lib+'/python{py_version_short}/site-packages',
- 'include': '{base}/include/python{py_version_short}',
- 'platinclude': '{platbase}/include/python{py_version_short}',
- 'scripts': '{base}/bin',
-@@ -65,10 +65,10 @@ _INSTALL_SCHEMES = {
- 'data' : '{userbase}',
- },
- 'posix_user': {
-- 'stdlib': '{userbase}/lib/python{py_version_short}',
-- 'platstdlib': '{userbase}/lib/python{py_version_short}',
-+ 'stdlib': '{userbase}/'+sys.lib+'/python{py_version_short}',
-+ 'platstdlib': '{userbase}/'+sys.lib+'/python{py_version_short}',
- 'purelib': '{userbase}/lib/python{py_version_short}/site-packages',
-- 'platlib': '{userbase}/lib/python{py_version_short}/site-packages',
-+ 'platlib': '{userbase}/'+sys.lib+'/python{py_version_short}/site-packages',
- 'include': '{userbase}/include/python{py_version_short}',
- 'scripts': '{userbase}/bin',
- 'data' : '{userbase}',
-Index: Python-2.7.14/Lib/test/test_dl.py
-===================================================================
---- Python-2.7.14.orig/Lib/test/test_dl.py
-+++ Python-2.7.14/Lib/test/test_dl.py
-@@ -4,10 +4,11 @@
- import unittest
- from test.test_support import verbose, import_module
- dl = import_module('dl', deprecated=True)
-+import sys
-
- sharedlibs = [
-- ('/usr/lib/libc.so', 'getpid'),
-- ('/lib/libc.so.6', 'getpid'),
-+ ('/usr/'+sys.lib+'/libc.so', 'getpid'),
-+ ('/'+sys.lib+'/libc.so.6', 'getpid'),
- ('/usr/bin/cygwin1.dll', 'getpid'),
- ('/usr/lib/libc.dylib', 'getpid'),
- ]
-Index: Python-2.7.14/Lib/test/test_site.py
-===================================================================
---- Python-2.7.14.orig/Lib/test/test_site.py
-+++ Python-2.7.14/Lib/test/test_site.py
-@@ -252,12 +252,16 @@ class HelperFunctionsTests(unittest.Test
- self.assertEqual(dirs[0], wanted)
- elif os.sep == '/':
- # OS X, Linux, FreeBSD, etc
-- self.assertEqual(len(dirs), 2)
- wanted = os.path.join('xoxo', 'lib', 'python' + sys.version[:3],
- 'site-packages')
-- self.assertEqual(dirs[0], wanted)
-+ self.assertTrue(wanted in dirs)
- wanted = os.path.join('xoxo', 'lib', 'site-python')
-- self.assertEqual(dirs[1], wanted)
-+ self.assertTrue(wanted in dirs)
-+ wanted = os.path.join('xoxo', sys.lib, 'python' + sys.version[:3],
-+ 'site-packages')
-+ self.assertTrue(wanted in dirs)
-+ wanted = os.path.join('xoxo', sys.lib, 'site-python')
-+ self.assertTrue(wanted in dirs)
- else:
- # other platforms
- self.assertEqual(len(dirs), 2)
-Index: Python-2.7.14/Lib/trace.py
-===================================================================
---- Python-2.7.14.orig/Lib/trace.py
-+++ Python-2.7.14/Lib/trace.py
-@@ -754,10 +754,10 @@ def main(argv=None):
- # should I also call expanduser? (after all, could use $HOME)
-
- s = s.replace("$prefix",
-- os.path.join(sys.prefix, "lib",
-+ os.path.join(sys.prefix, sys.lib,
- "python" + sys.version[:3]))
- s = s.replace("$exec_prefix",
-- os.path.join(sys.exec_prefix, "lib",
-+ os.path.join(sys.exec_prefix, sys.lib,
- "python" + sys.version[:3]))
- s = os.path.normpath(s)
- ignore_dirs.append(s)
-Index: Python-2.7.14/Makefile.pre.in
-===================================================================
---- Python-2.7.14.orig/Makefile.pre.in
-+++ Python-2.7.14/Makefile.pre.in
-@@ -91,6 +91,7 @@ PY_CFLAGS= $(CFLAGS) $(CPPFLAGS) $(CFLAG
-
- # Machine-dependent subdirectories
- MACHDEP= @MACHDEP@
-+LIB= @LIB@
-
- # Multiarch directory (may be empty)
- MULTIARCH= @MULTIARCH@
-@@ -110,7 +111,7 @@ LIBDIR= @libdir@
- MANDIR= @mandir@
- INCLUDEDIR= @includedir@
- CONFINCLUDEDIR= $(exec_prefix)/include
--SCRIPTDIR= $(prefix)/lib
-+SCRIPTDIR= $(prefix)/@LIB@
-
- # Detailed destination directories
- BINLIBDEST= $(LIBDIR)/python$(VERSION)
-@@ -645,6 +646,7 @@ Modules/getpath.o: $(srcdir)/Modules/get
- -DEXEC_PREFIX='"$(exec_prefix)"' \
- -DVERSION='"$(VERSION)"' \
- -DVPATH='"$(VPATH)"' \
-+ -DLIB='"$(LIB)"' \
- -o $@ $(srcdir)/Modules/getpath.c
-
- Modules/python.o: $(srcdir)/Modules/python.c
-@@ -693,7 +695,7 @@ regen-ast:
- Python/compile.o Python/symtable.o Python/ast.o: $(srcdir)/Include/graminit.h $(srcdir)/Include/Python-ast.h
-
- Python/getplatform.o: $(srcdir)/Python/getplatform.c
-- $(CC) -c $(PY_CFLAGS) -DPLATFORM='"$(MACHDEP)"' -o $@ $(srcdir)/Python/getplatform.c
-+ $(CC) -c $(PY_CFLAGS) -DPLATFORM='"$(MACHDEP)"' -DLIB='"$(LIB)"' -o $@ $(srcdir)/Python/getplatform.c
-
- Python/importdl.o: $(srcdir)/Python/importdl.c
- $(CC) -c $(PY_CFLAGS) -I$(DLINCLDIR) -o $@ $(srcdir)/Python/importdl.c
-Index: Python-2.7.14/Modules/getpath.c
-===================================================================
---- Python-2.7.14.orig/Modules/getpath.c
-+++ Python-2.7.14/Modules/getpath.c
-@@ -100,6 +100,13 @@
- #error "PREFIX, EXEC_PREFIX, VERSION, and VPATH must be constant defined"
- #endif
-
-+#define LIB_PYTHON LIB "/python" VERSION
-+
-+#ifndef PYTHONPATH
-+#define PYTHONPATH PREFIX "/" LIB_PYTHON ":" \
-+ EXEC_PREFIX "/" LIB_PYTHON "/lib-dynload"
-+#endif
-+
- #ifndef LANDMARK
- #define LANDMARK "os.py"
- #endif
-@@ -108,7 +115,7 @@ static char prefix[MAXPATHLEN+1];
- static char exec_prefix[MAXPATHLEN+1];
- static char progpath[MAXPATHLEN+1];
- static char *module_search_path = NULL;
--static char lib_python[] = "lib/python" VERSION;
-+static char lib_python[] = LIB_PYTHON;
-
- static void
- reduce(char *dir)
-Index: Python-2.7.14/Python/getplatform.c
-===================================================================
---- Python-2.7.14.orig/Python/getplatform.c
-+++ Python-2.7.14/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;
-+}
-Index: Python-2.7.14/Python/sysmodule.c
-===================================================================
---- Python-2.7.14.orig/Python/sysmodule.c
-+++ Python-2.7.14/Python/sysmodule.c
-@@ -1437,6 +1437,8 @@ _PySys_Init(void)
- PyString_FromString(Py_GetCopyright()));
- SET_SYS_FROM_STRING("platform",
- PyString_FromString(Py_GetPlatform()));
-+ SET_SYS_FROM_STRING("lib",
-+ PyString_FromString(Py_GetLib()));
- SET_SYS_FROM_STRING("executable",
- PyString_FromString(Py_GetProgramFullPath()));
- SET_SYS_FROM_STRING("prefix",
diff --git a/meta/recipes-devtools/python/python/parallel-makeinst-create-bindir.patch b/meta/recipes-devtools/python/python/parallel-makeinst-create-bindir.patch
deleted file mode 100644
index abab41e957..0000000000
--- a/meta/recipes-devtools/python/python/parallel-makeinst-create-bindir.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-When using make -j with the 'install' target, it's possible for altbininstall
-(which normally creates BINDIR) and libainstall (which doesn't, though it
-installs python-config there) to race, resulting in a failure due to
-attempting to install python-config into a nonexistent BINDIR. Ensure it also
-exists in the libainstall target.
-
-Upstream-Status: Pending
-
---- Python-2.7.3.orig/Makefile.pre.in
-+++ Python-2.7.3/Makefile.pre.in
-@@ -1187,7 +1187,7 @@
- LIBPC= $(LIBDIR)/pkgconfig
-
- libainstall: @DEF_MAKE_RULE@ python-config
-- @for i in $(LIBDIR) $(LIBP) $(LIBPL) $(LIBPC); \
-+ @for i in $(LIBDIR) $(LIBP) $(LIBPL) $(LIBPC) $(BINDIR); \
- do \
- if test ! -d $(DESTDIR)$$i; then \
- echo "Creating directory $$i"; \
diff --git a/meta/recipes-devtools/python/python/pass-missing-libraries-to-Extension-for-mul.patch b/meta/recipes-devtools/python/python/pass-missing-libraries-to-Extension-for-mul.patch
deleted file mode 100644
index 44fcaacf30..0000000000
--- a/meta/recipes-devtools/python/python/pass-missing-libraries-to-Extension-for-mul.patch
+++ /dev/null
@@ -1,82 +0,0 @@
-From 71447f04979b267f8866573b67a4340b2719d799 Mon Sep 17 00:00:00 2001
-From: Hongxu Jia <hongxu.jia@windriver.com>
-Date: Fri, 4 Aug 2017 14:10:43 +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 54054c2..9646bfc 100644
---- a/setup.py
-+++ b/setup.py
-@@ -1586,8 +1586,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']
-
-@@ -1610,6 +1612,7 @@ class PyBuildExt(build_ext):
- if sysconfig.get_config_var('WITH_THREAD'):
- exts.append ( Extension('_multiprocessing', multiprocessing_srcs,
- define_macros=macros.items(),
-+ libraries=libraries,
- include_dirs=["Modules/_multiprocessing"]))
- else:
- missing.append('_multiprocessing')
---
-2.7.4
-
diff --git a/meta/recipes-devtools/python/python/python-2.7.3-remove-bsdb-rpath.patch b/meta/recipes-devtools/python/python/python-2.7.3-remove-bsdb-rpath.patch
deleted file mode 100644
index 216be0a448..0000000000
--- a/meta/recipes-devtools/python/python/python-2.7.3-remove-bsdb-rpath.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-Upstream-Status: Inappropriate [embedded specific]
-
-Remove the RPATH to avoid QA issue warning.
-
-RP: Added secondary unnecessary rpath to the list 2012/8/7
-Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
-
-
-Index: Python-2.7.3/setup.py
-===================================================================
---- Python-2.7.3.orig/setup.py 2012-08-07 10:41:58.560132529 +0000
-+++ Python-2.7.3/setup.py 2012-08-07 11:09:47.852094515 +0000
-@@ -1042,7 +1042,6 @@
- exts.append(Extension('_bsddb', ['_bsddb.c'],
- depends = ['bsddb.h'],
- library_dirs=dblib_dir,
-- runtime_library_dirs=dblib_dir,
- include_dirs=db_incs,
- libraries=dblibs))
- else:
-@@ -1252,7 +1251,6 @@
- print "building dbm using bdb"
- dbmext = Extension('dbm', ['dbmmodule.c'],
- library_dirs=dblib_dir,
-- runtime_library_dirs=dblib_dir,
- include_dirs=db_incs,
- define_macros=[
- ('HAVE_BERKDB_H', None),
diff --git a/meta/recipes-devtools/python/python/python2-manifest.json b/meta/recipes-devtools/python/python/python2-manifest.json
deleted file mode 100644
index eb52e862ab..0000000000
--- a/meta/recipes-devtools/python/python/python2-manifest.json
+++ /dev/null
@@ -1,1138 +0,0 @@
-# DO NOT (entirely) modify this file manually, please read.
-#
-# IMPORTANT NOTE:
-# Please keep in mind that the create_manifest task relies on the fact the the
-# target and native Python packages are the same, and it also needs to be executed
-# with a fully working native package (with all the PACKAGECONFIGs enabled and all
-# and all the modules should be working, check log.do_compile), otherwise the script
-# will fail to find dependencies correctly, this note is valid either if you are
-# upgrading to a new Python version or adding a new package.
-#
-#
-# If you are adding a new package please follow the next steps:
-# How to add a new package:
-# - If a user wants to add a new package all that has to be done is:
-# Modify the python2-manifest.json file, and add the required file(s) to the FILES list,
-# fill up the SUMMARY section as well, the script should handle all the rest.
-#
-# Real example:
-# We want to add a web browser package, including the file webbrowser.py
-# which at the moment is on python-misc.
-# "webbrowser": {
-# "files": ["${libdir}/python2.7/lib-dynload/webbrowser.py"],
-# "rdepends": [],
-# "summary": "Python Web Browser support"}
-#
-# * Note that the rdepends field was left empty
-#
-# We run $ bitbake python -c create_manifest and the resulting manifest
-# should be completed after a few seconds, showing something like:
-# "webbrowser": {
-# "files": ["${libdir}/python2.7/webbrowser.py"],
-# "rdepends": ["core","fcntl","io","pickle","shell","subprocess"],
-# "summary": "Python Web Browser support"}
-#
-#
-# If you are upgrading Python to a new version please follow the next steps:
-# After each Python upgrade, the create_manifest task should be executed, because we
-# don't control what changes on upstream Python, so, some module dependency
-# might have changed without us realizing it, a certain module can either have
-# more or less dependencies, or could be depending on a new file that was just
-# created on the new release and for obvious reasons we wouldn't have it on our
-# old manifest, all of these issues would cause runtime errors on our system.
-#
-# - Upgrade both the native and target Python packages to a new version
-# - Run the create_manifest task for the target Python package as its shown below:
-#
-# $ bitbake python -c create_manifest
-#
-# This will automatically replace your manifest file located under the Python directory
-# with an new one, which contains the new dependencies (if any).
-#
-# Several things could have gone wrong here, I will try to explain a few:
-#
-# a) A new file was introduced on this release, e.g. sha3*.so:
-# The task will check what its needed to import every module, more than one module would
-# would probably depend on sha3*.so, although only one module should contain it.
-#
-# After running the task, the new manifest will have the sha3*.so file on more than one
-# module, you need to manually decide which one of them should get it and delete it from
-# the others, for example sha3*.so should likely be on ${PN}-crypt.
-# Once you have deleted from the others you need to run the create_manifest task again,
-# this will populate the other module's rdepends fields, with ${PN}-crypt and you should be
-# good to go.
-#
-# b) The native package wasn't built correctly and its missing a certain module:
-# As mentioned before, you need to make sure the native package was built with all the modules
-# because it is used as base to build the manifest file, you need to manually check log.do_compile
-# since it won't error out the compile function if its only missing a couple of modules.
-#
-# e.g. missing the _uuid module, log.do_compile would show the following:
-# Python build finished successfully!
-# The necessary bits to build these optional modules were not found:
-# _uuid
-#
-# What will happen here is that the new manifest would not be aware that the _uuid module exists, so
-# not only we won't know of any dependencies to it, but also, the _uuid* files will be packaged on
-# the misc package (which is where any file that doesn't belong anywhere else ends up).
-#
-# This will eventually cause runtime errors on our system if we don't include the misc package on
-# on our image, because the _uuid files will be missing.
-# If we build the _uuid module correctly and run the create_manifest task the _uuid files will be
-# detected correctly along with its dependencies, and we will get a working manifest.
-#
-# This is the reason why it is important to make sure we have a fully working native build,
-# so we can avoid these errors.
-#
-#
-#
-# DO NOT MODIFY THE NEXT LINE!, IT IS USED AS A MARKER FOR THE ACTUAL JSON MANIFEST
-# EOC
-{
- "tests": {
- "summary": "Python test suite",
- "rdepends": [
- "core",
- "modules"
- ],
- "files": [
- "${libdir}/python2.7/*/test",
- "${libdir}/python2.7/*/tests",
- "${libdir}/python2.7/idlelib/idle_test/",
- "${libdir}/python2.7/test"
- ],
- "cached": []
- },
- "2to3": {
- "summary": "Python automated Python 2 to 3 code translator",
- "rdepends": [
- "core"
- ],
- "files": [
- "${bindir}/2to3*",
- "${libdir}/python2.7/lib2to3"
- ]
- },
- "argparse": {
- "summary": "Python command line argument parser",
- "rdepends": [
- "codecs",
- "core",
- "lang",
- "textutils"
- ],
- "files": [
- "${libdir}/python2.7/argparse.py"
- ]
- },
- "audio": {
- "summary": "Python Audio Handling",
- "rdepends": [
- "core",
- "crypt",
- "fcntl",
- "io",
- "math"
- ],
- "files": [
- "${libdir}/python2.7/audiodev.py",
- "${libdir}/python2.7/chunk.py",
- "${libdir}/python2.7/lib-dynload/audioop.so",
- "${libdir}/python2.7/lib-dynload/ossaudiodev.so",
- "${libdir}/python2.7/sndhdr.py",
- "${libdir}/python2.7/sunau.py",
- "${libdir}/python2.7/sunaudio.py",
- "${libdir}/python2.7/toaiff.py",
- "${libdir}/python2.7/wave.py"
- ]
- },
- "bsddb": {
- "summary": "Python bindings for the Berkeley Database",
- "rdepends": [
- "core"
- ],
- "files": [
- "${libdir}/python2.7/bsddb",
- "${libdir}/python2.7/lib-dynload/_bsddb.so"
- ]
- },
- "codecs": {
- "summary": "Python codec",
- "rdepends": [
- "core",
- "io",
- "lang"
- ],
- "files": [
- "${libdir}/python2.7/gettext.py",
- "${libdir}/python2.7/lib-dynload/_codecs_cn.so",
- "${libdir}/python2.7/lib-dynload/_codecs_hk.so",
- "${libdir}/python2.7/lib-dynload/_codecs_iso2022.so",
- "${libdir}/python2.7/lib-dynload/_codecs_jp.so",
- "${libdir}/python2.7/lib-dynload/_codecs_kr.so",
- "${libdir}/python2.7/lib-dynload/_codecs_tw.so",
- "${libdir}/python2.7/lib-dynload/_multibytecodec.so",
- "${libdir}/python2.7/lib-dynload/unicodedata.so",
- "${libdir}/python2.7/locale.py",
- "${libdir}/python2.7/stringprep.py",
- "${libdir}/python2.7/xdrlib.py"
- ]
- },
- "compile": {
- "summary": "Python bytecode compilation support",
- "rdepends": [
- "core"
- ],
- "files": [
- "${libdir}/python2.7/compileall.py",
- "${libdir}/python2.7/py_compile.py"
- ]
- },
- "compiler": {
- "summary": "Python compiler support",
- "rdepends": [
- "core",
- "io",
- "lang"
- ],
- "files": [
- "${libdir}/python2.7/compiler"
- ]
- },
- "compression": {
- "summary": "Python high-level compression support",
- "rdepends": [
- "core",
- "io",
- "shell",
- "unixadmin",
- "zlib"
- ],
- "files": [
- "${libdir}/python2.7/gzip.py",
- "${libdir}/python2.7/lib-dynload/bz2.so",
- "${libdir}/python2.7/tarfile.py",
- "${libdir}/python2.7/zipfile.py"
- ]
- },
- "contextlib": {
- "summary": "Python utilities for with-statementcontexts.",
- "rdepends": [
- "core",
- "lang"
- ],
- "files": [
- "${libdir}/python2.7/contextlib.py"
- ]
- },
- "core": {
- "summary": "Python interpreter and core modules",
- "rdepends": [],
- "files": [
- "${bindir}/python*",
- "${includedir}/python2.7/pyconfig*.h",
- "${libdir}/python2.7/ConfigParser.py",
- "${libdir}/python2.7/UserDict.py",
- "${libdir}/python2.7/UserList.py",
- "${libdir}/python2.7/UserString.py",
- "${libdir}/python2.7/__future__.py",
- "${libdir}/python2.7/_abcoll.py",
- "${libdir}/python2.7/_sysconfigdata.py",
- "${libdir}/python2.7/_weakrefset.py",
- "${libdir}/python2.7/abc.py",
- "${libdir}/python2.7/ast.py",
- "${libdir}/python2.7/atexit.py",
- "${libdir}/python2.7/codecs.py",
- "${libdir}/python2.7/collections.py",
- "${libdir}/python2.7/copy.py",
- "${libdir}/python2.7/copy_reg.py",
- "${libdir}/python2.7/encodings",
- "${libdir}/python2.7/encodings/aliases.py",
- "${libdir}/python2.7/encodings/utf_8.py",
- "${libdir}/python2.7/genericpath.py",
- "${libdir}/python2.7/getopt.py",
- "${libdir}/python2.7/heapq.py",
- "${libdir}/python2.7/importlib",
- "${libdir}/python2.7/keyword.py",
- "${libdir}/python2.7/lib-dynload/_collections.so",
- "${libdir}/python2.7/lib-dynload/_heapq.so",
- "${libdir}/python2.7/lib-dynload/_locale.so",
- "${libdir}/python2.7/lib-dynload/_struct.so",
- "${libdir}/python2.7/lib-dynload/binascii.so",
- "${libdir}/python2.7/lib-dynload/itertools.so",
- "${libdir}/python2.7/lib-dynload/operator.so",
- "${libdir}/python2.7/lib-dynload/readline.so",
- "${libdir}/python2.7/lib-dynload/strop.so",
- "${libdir}/python2.7/lib-dynload/time.so",
- "${libdir}/python2.7/lib-dynload/xreadlines.so",
- "${libdir}/python2.7/linecache.py",
- "${libdir}/python2.7/new.py",
- "${libdir}/python2.7/os.py",
- "${libdir}/python2.7/platform.py",
- "${libdir}/python2.7/posixpath.py",
- "${libdir}/python2.7/re.py",
- "${libdir}/python2.7/rlcompleter.py",
- "${libdir}/python2.7/site.py",
- "${libdir}/python2.7/sitecustomize.py",
- "${libdir}/python2.7/sre_compile.py",
- "${libdir}/python2.7/sre_constants.py",
- "${libdir}/python2.7/sre_parse.py",
- "${libdir}/python2.7/stat.py",
- "${libdir}/python2.7/string.py",
- "${libdir}/python2.7/struct.py",
- "${libdir}/python2.7/sysconfig.py",
- "${libdir}/python2.7/traceback.py",
- "${libdir}/python2.7/types.py",
- "${libdir}/python2.7/warnings.py",
- "${libdir}/python2.7/weakref.py"
- ]
- },
- "crypt": {
- "summary": "Python basic cryptographic and hashing support",
- "rdepends": [
- "core"
- ],
- "files": [
- "${libdir}/python2.7/hashlib.py",
- "${libdir}/python2.7/lib-dynload/_hashlib.so",
- "${libdir}/python2.7/lib-dynload/crypt.so",
- "${libdir}/python2.7/md5.py",
- "${libdir}/python2.7/sha.py"
- ]
- },
- "ctypes": {
- "summary": "Python C types support",
- "rdepends": [
- "core"
- ],
- "files": [
- "${libdir}/python2.7/ctypes",
- "${libdir}/python2.7/lib-dynload/_ctypes.so",
- "${libdir}/python2.7/lib-dynload/_ctypes_test.so"
- ]
- },
- "curses": {
- "summary": "Python curses support",
- "rdepends": [
- "core"
- ],
- "files": [
- "${libdir}/python2.7/curses",
- "${libdir}/python2.7/lib-dynload/_curses.so",
- "${libdir}/python2.7/lib-dynload/_curses_panel.so"
- ]
- },
- "datetime": {
- "summary": "Python calendar and time support",
- "rdepends": [
- "codecs",
- "core",
- "lang"
- ],
- "files": [
- "${libdir}/python2.7/_strptime.py",
- "${libdir}/python2.7/calendar.py",
- "${libdir}/python2.7/lib-dynload/datetime.so"
- ]
- },
- "db": {
- "summary": "Python file-based database support",
- "rdepends": [
- "bsddb",
- "core",
- "gdbm"
- ],
- "files": [
- "${libdir}/python2.7/anydbm.py",
- "${libdir}/python2.7/dbhash.py",
- "${libdir}/python2.7/dumbdbm.py",
- "${libdir}/python2.7/lib-dynload/dbm.so",
- "${libdir}/python2.7/whichdb.py"
- ]
- },
- "debugger": {
- "summary": "Python debugger",
- "rdepends": [
- "core",
- "io",
- "lang",
- "pprint",
- "shell"
- ],
- "files": [
- "${libdir}/python2.7/bdb.py",
- "${libdir}/python2.7/pdb.py"
- ]
- },
- "dev": {
- "files": [
- "${base_libdir}/*.a",
- "${base_libdir}/*.o",
- "${datadir}/aclocal",
- "${datadir}/pkgconfig",
- "${includedir}",
- "${libdir}/*.a",
- "${libdir}/*.la",
- "${libdir}/*.o",
- "${libdir}/lib*${SOLIBSDEV}",
- "${libdir}/pkgconfig",
- "${libdir}/python2.7/config/Makefile"
- ],
- "rdepends": [
- "core"
- ],
- "summary": "Python development package"
- },
- "difflib": {
- "summary": "Python helpers for computing deltas between objects",
- "rdepends": [
- "core",
- "lang"
- ],
- "files": [
- "${libdir}/python2.7/difflib.py"
- ]
- },
- "distutils-staticdev": {
- "files": [
- "${libdir}/python2.7/config/lib*.a"
- ],
- "rdepends": [
- "distutils"
- ],
- "summary": "Python distribution utilities (static libraries)"
- },
- "distutils": {
- "summary": "Python Distribution Utilities",
- "rdepends": [
- "core"
- ],
- "files": [
- "${libdir}/python2.7/config",
- "${libdir}/python2.7/distutils"
- ]
- },
- "doctest": {
- "summary": "Python framework for running examples in docstrings",
- "rdepends": [
- "core",
- "crypt",
- "debugger",
- "difflib",
- "fcntl",
- "io",
- "lang",
- "math",
- "pprint",
- "shell",
- "unittest"
- ],
- "files": [
- "${libdir}/python2.7/doctest.py"
- ]
- },
- "email": {
- "summary": "Python email support",
- "rdepends": [
- "contextlib",
- "core",
- "crypt",
- "fcntl",
- "io",
- "lang",
- "math",
- "netclient",
- "pickle",
- "subprocess",
- "textutils",
- "threading"
- ],
- "files": [
- "${libdir}/python2.7/email",
- "${libdir}/python2.7/imaplib.py"
- ]
- },
- "fcntl": {
- "summary": "Python's fcntl interface",
- "rdepends": [
- "core"
- ],
- "files": [
- "${libdir}/python2.7/lib-dynload/fcntl.so"
- ]
- },
- "gdbm": {
- "summary": "Python GNU database support",
- "rdepends": [
- "core"
- ],
- "files": [
- "${libdir}/python2.7/lib-dynload/gdbm.so"
- ]
- },
- "hotshot": {
- "summary": "Python hotshot performance profiler",
- "rdepends": [
- "core"
- ],
- "files": [
- "${libdir}/python2.7/hotshot",
- "${libdir}/python2.7/lib-dynload/_hotshot.so"
- ]
- },
- "html": {
- "summary": "Python HTML processing support",
- "rdepends": [
- "core"
- ],
- "files": [
- "${libdir}/python2.7/HTMLParser.py",
- "${libdir}/python2.7/formatter.py",
- "${libdir}/python2.7/htmlentitydefs.py",
- "${libdir}/python2.7/htmllib.py",
- "${libdir}/python2.7/markupbase.py",
- "${libdir}/python2.7/sgmllib.py"
- ]
- },
- "idle": {
- "summary": "Python Integrated Development Environment",
- "rdepends": [
- "core"
- ],
- "files": [
- "${bindir}/idle",
- "${libdir}/python2.7/idlelib"
- ]
- },
- "image": {
- "summary": "Python graphical image handling",
- "rdepends": [
- "core"
- ],
- "files": [
- "${libdir}/python2.7/colorsys.py",
- "${libdir}/python2.7/imghdr.py"
- ]
- },
- "io": {
- "summary": "Python low-level I/O",
- "rdepends": [
- "contextlib",
- "core",
- "crypt",
- "fcntl",
- "lang",
- "math",
- "netclient",
- "textutils"
- ],
- "files": [
- "${libdir}/python2.7/StringIO.py",
- "${libdir}/python2.7/_pyio.py",
- "${libdir}/python2.7/io.py",
- "${libdir}/python2.7/lib-dynload/_io.so",
- "${libdir}/python2.7/lib-dynload/_socket.so",
- "${libdir}/python2.7/lib-dynload/_ssl.so",
- "${libdir}/python2.7/lib-dynload/cStringIO.so",
- "${libdir}/python2.7/lib-dynload/select.so",
- "${libdir}/python2.7/lib-dynload/termios.so",
- "${libdir}/python2.7/pipes.py",
- "${libdir}/python2.7/socket.py",
- "${libdir}/python2.7/ssl.py",
- "${libdir}/python2.7/tempfile.py"
- ]
- },
- "json": {
- "summary": "Python JSON support",
- "rdepends": [
- "core"
- ],
- "files": [
- "${libdir}/python2.7/json",
- "${libdir}/python2.7/lib-dynload/_json.so"
- ]
- },
- "lang": {
- "summary": "Python low-level language support",
- "rdepends": [
- "core"
- ],
- "files": [
- "${libdir}/python2.7/bisect.py",
- "${libdir}/python2.7/code.py",
- "${libdir}/python2.7/codeop.py",
- "${libdir}/python2.7/dis.py",
- "${libdir}/python2.7/functools.py",
- "${libdir}/python2.7/inspect.py",
- "${libdir}/python2.7/lib-dynload/_bisect.so",
- "${libdir}/python2.7/lib-dynload/_functools.so",
- "${libdir}/python2.7/lib-dynload/array.so",
- "${libdir}/python2.7/lib-dynload/parser.so",
- "${libdir}/python2.7/opcode.py",
- "${libdir}/python2.7/repr.py",
- "${libdir}/python2.7/symbol.py",
- "${libdir}/python2.7/token.py",
- "${libdir}/python2.7/tokenize.py"
- ]
- },
- "logging": {
- "summary": "Python logging support",
- "rdepends": [
- "core",
- "io",
- "threading"
- ],
- "files": [
- "${libdir}/python2.7/logging"
- ]
- },
- "mailbox": {
- "summary": "Python mailbox format support",
- "rdepends": [
- "codecs",
- "contextlib",
- "core",
- "crypt",
- "datetime",
- "email",
- "fcntl",
- "io",
- "lang",
- "math",
- "mime",
- "netclient",
- "textutils"
- ],
- "files": [
- "${libdir}/python2.7/mailbox.py"
- ]
- },
- "math": {
- "summary": "Python math support",
- "rdepends": [
- "core",
- "crypt"
- ],
- "files": [
- "${libdir}/python2.7/lib-dynload/_random.so",
- "${libdir}/python2.7/lib-dynload/cmath.so",
- "${libdir}/python2.7/lib-dynload/math.so",
- "${libdir}/python2.7/random.py",
- "${libdir}/python2.7/sets.py"
- ]
- },
- "mime": {
- "summary": "Python MIME handling APIs",
- "rdepends": [
- "contextlib",
- "core",
- "crypt",
- "fcntl",
- "io",
- "lang",
- "math",
- "netclient",
- "textutils"
- ],
- "files": [
- "${libdir}/python2.7/MimeWriter.py",
- "${libdir}/python2.7/mimetools.py",
- "${libdir}/python2.7/mimetypes.py",
- "${libdir}/python2.7/quopri.py",
- "${libdir}/python2.7/rfc822.py",
- "${libdir}/python2.7/uu.py"
- ]
- },
- "mmap": {
- "summary": "Python memory-mapped file support",
- "rdepends": [
- "core"
- ],
- "files": [
- "${libdir}/python2.7/lib-dynload/mmap.so"
- ]
- },
- "modules": {
- "files": [],
- "rdepends": [
- "2to3",
- "argparse",
- "audio",
- "bsddb",
- "codecs",
- "compile",
- "compiler",
- "compression",
- "contextlib",
- "core",
- "crypt",
- "ctypes",
- "curses",
- "datetime",
- "db",
- "debugger",
- "difflib",
- "distutils",
- "doctest",
- "email",
- "fcntl",
- "gdbm",
- "hotshot",
- "html",
- "idle",
- "image",
- "io",
- "json",
- "lang",
- "logging",
- "mailbox",
- "math",
- "mime",
- "mmap",
- "multiprocessing",
- "netclient",
- "netserver",
- "numbers",
- "pickle",
- "pkgutil",
- "plistlib",
- "pprint",
- "profile",
- "pydoc",
- "re",
- "resource",
- "robotparser",
- "runpy",
- "shell",
- "smtpd",
- "sqlite3",
- "sqlite3",
- "stringold",
- "subprocess",
- "syslog",
- "terminal",
- "textutils",
- "threading",
- "tkinter",
- "unittest",
- "unixadmin",
- "xml",
- "xmlrpc",
- "zlib"
- ],
- "summary": "All Python modules"
- },
- "multiprocessing": {
- "summary": "Python multiprocessing support",
- "rdepends": [
- "core",
- "fcntl",
- "io",
- "pickle",
- "subprocess",
- "threading"
- ],
- "files": [
- "${libdir}/python2.7/lib-dynload/_multiprocessing.so",
- "${libdir}/python2.7/multiprocessing"
- ]
- },
- "netclient": {
- "summary": "Python Internet Protocol clients",
- "rdepends": [
- "codecs",
- "contextlib",
- "core",
- "crypt",
- "ctypes",
- "datetime",
- "email",
- "fcntl",
- "io",
- "lang",
- "math",
- "mime",
- "pickle",
- "subprocess",
- "textutils",
- "threading"
- ],
- "files": [
- "${libdir}/python2.7/Cookie.py",
- "${libdir}/python2.7/_LWPCookieJar.py",
- "${libdir}/python2.7/_MozillaCookieJar.py",
- "${libdir}/python2.7/base64.py",
- "${libdir}/python2.7/cookielib.py",
- "${libdir}/python2.7/ftplib.py",
- "${libdir}/python2.7/hmac.py",
- "${libdir}/python2.7/httplib.py",
- "${libdir}/python2.7/nntplib.py",
- "${libdir}/python2.7/poplib.py",
- "${libdir}/python2.7/smtplib.py",
- "${libdir}/python2.7/telnetlib.py",
- "${libdir}/python2.7/urllib.py",
- "${libdir}/python2.7/urllib2.py",
- "${libdir}/python2.7/urlparse.py",
- "${libdir}/python2.7/uuid.py"
- ]
- },
- "netserver": {
- "summary": "Python Internet Protocol servers",
- "rdepends": [
- "compression",
- "contextlib",
- "core",
- "crypt",
- "fcntl",
- "io",
- "lang",
- "math",
- "mime",
- "netclient",
- "shell",
- "textutils",
- "threading",
- "unixadmin",
- "zlib"
- ],
- "files": [
- "${libdir}/python2.7/BaseHTTPServer.py",
- "${libdir}/python2.7/CGIHTTPServer.py",
- "${libdir}/python2.7/SimpleHTTPServer.py",
- "${libdir}/python2.7/SocketServer.py",
- "${libdir}/python2.7/cgi.py"
- ]
- },
- "numbers": {
- "summary": "Python number APIs",
- "rdepends": [
- "codecs",
- "core",
- "lang",
- "math",
- "threading"
- ],
- "files": [
- "${libdir}/python2.7/decimal.py",
- "${libdir}/python2.7/fractions.py",
- "${libdir}/python2.7/numbers.py"
- ]
- },
- "pickle": {
- "summary": "Python serialisation/persistence support",
- "rdepends": [
- "core",
- "io"
- ],
- "files": [
- "${libdir}/python2.7/lib-dynload/cPickle.so",
- "${libdir}/python2.7/pickle.py",
- "${libdir}/python2.7/pickletools.py",
- "${libdir}/python2.7/shelve.py"
- ]
- },
- "pkgutil": {
- "summary": "Python package extension utility support",
- "rdepends": [
- "core"
- ],
- "files": [
- "${libdir}/python2.7/pkgutil.py"
- ]
- },
- "plistlib": {
- "summary": "Generate and parse Mac OS X .plist files",
- "rdepends": [
- "core",
- "datetime",
- "io"
- ],
- "files": [
- "${libdir}/python2.7/plistlib.py"
- ]
- },
- "pprint": {
- "summary": "Python pretty-print support",
- "rdepends": [
- "core",
- "io"
- ],
- "files": [
- "${libdir}/python2.7/pprint.py"
- ]
- },
- "profile": {
- "summary": "Python basic performance profiling support",
- "rdepends": [
- "codecs",
- "core",
- "lang",
- "resource",
- "textutils"
- ],
- "files": [
- "${libdir}/python2.7/cProfile.py",
- "${libdir}/python2.7/lib-dynload/_lsprof.so",
- "${libdir}/python2.7/profile.py",
- "${libdir}/python2.7/pstats.py"
- ]
- },
- "pydoc": {
- "summary": "Python interactive help support",
- "rdepends": [
- "codecs",
- "core",
- "lang",
- "pkgutil"
- ],
- "files": [
- "${bindir}/pydoc",
- "${libdir}/python2.7/pydoc.py",
- "${libdir}/python2.7/pydoc_data"
- ]
- },
- "re": {
- "summary": "Python Regular Expression APIs",
- "rdepends": [
- "core"
- ],
- "files": [
- "${libdir}/python2.7/sre.py"
- ]
- },
- "resource": {
- "summary": "Python resource control interface",
- "rdepends": [
- "core"
- ],
- "files": [
- "${libdir}/python2.7/lib-dynload/resource.so"
- ]
- },
- "robotparser": {
- "summary": "Python robots.txt parser",
- "rdepends": [
- "contextlib",
- "core",
- "io",
- "lang",
- "netclient",
- "textutils"
- ],
- "files": [
- "${libdir}/python2.7/robotparser.py"
- ]
- },
- "runpy": {
- "summary": "Python helper for locating/executing scripts in module namespace",
- "rdepends": [
- "core",
- "pkgutil"
- ],
- "files": [
- "${libdir}/python2.7/runpy.py"
- ]
- },
- "shell": {
- "summary": "Python shell-like functionality",
- "rdepends": [
- "compression",
- "core",
- "io",
- "unixadmin",
- "zlib"
- ],
- "files": [
- "${libdir}/python2.7/cmd.py",
- "${libdir}/python2.7/commands.py",
- "${libdir}/python2.7/dircache.py",
- "${libdir}/python2.7/fnmatch.py",
- "${libdir}/python2.7/glob.py",
- "${libdir}/python2.7/popen2.py",
- "${libdir}/python2.7/shlex.py",
- "${libdir}/python2.7/shutil.py"
- ]
- },
- "smtpd": {
- "summary": "Python Simple Mail Transport Daemon",
- "rdepends": [
- "core",
- "fcntl",
- "io",
- "lang"
- ],
- "files": [
- "${bindir}/smtpd.py",
- "${libdir}/python2.7/asynchat.py",
- "${libdir}/python2.7/asyncore.py",
- "${libdir}/python2.7/smtpd.py"
- ]
- },
- "sqlite3": {
- "summary": "Python Sqlite3 database support",
- "rdepends": [
- "core",
- "datetime"
- ],
- "files": [
- "${libdir}/python2.7/lib-dynload/_sqlite3.so",
- "${libdir}/python2.7/sqlite3"
- ]
- },
- "stringold": {
- "summary": "Python string APIs [deprecated]",
- "rdepends": [
- "core"
- ],
- "files": [
- "${libdir}/python2.7/stringold.py"
- ]
- },
- "subprocess": {
- "summary": "Python subprocess support",
- "rdepends": [
- "core",
- "fcntl",
- "io",
- "pickle",
- "threading"
- ],
- "files": [
- "${libdir}/python2.7/subprocess.py"
- ]
- },
- "syslog": {
- "summary": "Python syslog interface",
- "rdepends": [
- "core"
- ],
- "files": [
- "${libdir}/python2.7/lib-dynload/syslog.so"
- ]
- },
- "terminal": {
- "summary": "Python terminal controlling support",
- "rdepends": [
- "core",
- "io"
- ],
- "files": [
- "${libdir}/python2.7/pty.py",
- "${libdir}/python2.7/tty.py"
- ]
- },
- "textutils": {
- "summary": "Python option parsin",
- "rdepends": [
- "codecs",
- "core",
- "io",
- "lang"
- ],
- "files": [
- "${libdir}/python2.7/csv.py",
- "${libdir}/python2.7/lib-dynload/_csv.so",
- "${libdir}/python2.7/optparse.py",
- "${libdir}/python2.7/textwrap.py"
- ]
- },
- "threading": {
- "summary": "Python threading & synchronization support",
- "rdepends": [
- "core"
- ],
- "files": [
- "${libdir}/python2.7/Queue.py",
- "${libdir}/python2.7/_threading_local.py",
- "${libdir}/python2.7/dummy_thread.py",
- "${libdir}/python2.7/dummy_threading.py",
- "${libdir}/python2.7/mutex.py",
- "${libdir}/python2.7/threading.py"
- ]
- },
- "tkinter": {
- "summary": "Python Tcl/Tk bindings",
- "rdepends": [
- "core"
- ],
- "files": [
- "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_tkinter.so",
- "${libdir}/python2.7/lib-tk"
- ]
- },
- "unittest": {
- "summary": "Python unit testing framework",
- "rdepends": [
- "core",
- "difflib",
- "io",
- "lang",
- "pprint",
- "shell"
- ],
- "files": [
- "${libdir}/python2.7/unittest"
- ]
- },
- "unixadmin": {
- "summary": "Python Unix administration support",
- "rdepends": [
- "core",
- "io"
- ],
- "files": [
- "${libdir}/python2.7/getpass.py",
- "${libdir}/python2.7/lib-dynload/grp.so",
- "${libdir}/python2.7/lib-dynload/nis.so"
- ]
- },
- "xml": {
- "summary": "Python basic XML support",
- "rdepends": [
- "core"
- ],
- "files": [
- "${libdir}/python2.7/lib-dynload/_elementtree.so",
- "${libdir}/python2.7/lib-dynload/pyexpat.so",
- "${libdir}/python2.7/xml"
- ]
- },
- "xmlrpc": {
- "summary": "Python XML-RPC support",
- "rdepends": [
- "codecs",
- "compression",
- "contextlib",
- "core",
- "crypt",
- "datetime",
- "fcntl",
- "io",
- "lang",
- "math",
- "mime",
- "netclient",
- "netserver",
- "pkgutil",
- "pydoc",
- "textutils",
- "threading",
- "xml",
- "zlib"
- ],
- "files": [
- "${libdir}/python2.7/DocXMLRPCServer.py",
- "${libdir}/python2.7/SimpleXMLRPCServer.py",
- "${libdir}/python2.7/xmlrpclib.py"
- ]
- },
- "zlib": {
- "summary": "Python zlib compression support",
- "rdepends": [
- "core"
- ],
- "files": [
- "${libdir}/python2.7/lib-dynload/zlib.so"
- ]
- }
-}
diff --git a/meta/recipes-devtools/python/python/run-ptest b/meta/recipes-devtools/python/python/run-ptest
deleted file mode 100644
index c7002a4560..0000000000
--- a/meta/recipes-devtools/python/python/run-ptest
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-
-python -mtest -W | sed -u -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'
diff --git a/meta/recipes-devtools/python/python/search_db_h_in_inc_dirs_and_avoid_warning.patch b/meta/recipes-devtools/python/python/search_db_h_in_inc_dirs_and_avoid_warning.patch
deleted file mode 100644
index dacb552ec7..0000000000
--- a/meta/recipes-devtools/python/python/search_db_h_in_inc_dirs_and_avoid_warning.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-python should search for db.h in inc_dirs and not in a hardcoded path.
-If db.h is found but HASHVERSION is not 2 we avoid a warning by not
-adding this module to missing variable.
-
-Upstream-Status: Inappropriate [distribution]
-
-Signed-off-by: Andrei Gherzan <andrei@gherzan.ro>
-
-
-diff --git a/setup.py b/setup.py
-index b887808..ae51607 100644
---- a/setup.py
-+++ b/setup.py
-@@ -1237,6 +1237,8 @@ class PyBuildExt(build_ext):
- # the more recent berkeleydb's db.h file first in the include path
- # when attempting to compile and it will fail.
- f = "/usr/include/db.h"
-+ if len(inc_dirs) != 0:
-+ f = os.path.join(inc_dirs[0], "db.h")
-
- if host_platform == 'darwin':
- if is_macosx_sdk_path(f):
-@@ -1257,8 +1259,10 @@ class PyBuildExt(build_ext):
- libraries=libraries))
- else:
- exts.append(Extension('bsddb185', ['bsddbmodule.c']))
-- else:
-- missing.append('bsddb185')
-+ # If a newer version is detected don't report an useless
-+ # warning
-+ #else:
-+ # missing.append('bsddb185')
- else:
- missing.append('bsddb185')
-
diff --git a/meta/recipes-devtools/python/python/setup_py_skip_cross_import_check.patch b/meta/recipes-devtools/python/python/setup_py_skip_cross_import_check.patch
deleted file mode 100644
index 6ccdb948b9..0000000000
--- a/meta/recipes-devtools/python/python/setup_py_skip_cross_import_check.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-This patch skips over the 'import check' setup.py does when building
-extensions. This generally won't work when cross-compiling.
-
-Upstream-Status: Inappropriate [embedded-specific]
-
-Signed-off-by: Tom Zanussi <tom.zanussi@intel.com>
-
-Index: Python-2.7.2/setup.py
-===================================================================
---- Python-2.7.2.orig/setup.py 2011-11-04 16:46:34.553796410 -0500
-+++ Python-2.7.2/setup.py 2011-11-04 16:59:49.692802313 -0500
-@@ -287,6 +287,15 @@
- (ext.name, sys.exc_info()[1]))
- self.failed.append(ext.name)
- return
-+
-+ # If we're cross-compiling, we want to skip the import check
-+ # i.e. we shouldn't be dynamically loading target shared libs
-+ if os.environ.get('CROSS_COMPILE') is not None:
-+ self.announce(
-+ 'WARNING: skipping import check for cross-compiled "%s"' %
-+ ext.name)
-+ return
-+
- # Workaround for Mac OS X: The Carbon-based modules cannot be
- # reliably imported into a command-line Python
- if 'Carbon' in ext.extra_link_args:
diff --git a/meta/recipes-devtools/python/python/setuptweaks.patch b/meta/recipes-devtools/python/python/setuptweaks.patch
deleted file mode 100644
index 3a91b1916c..0000000000
--- a/meta/recipes-devtools/python/python/setuptweaks.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-This patch removes various ways native system options can pass into the python
-compilation and somehow break C modules.
-
-Upstream-Status: Inappropriate [OE Specific]
-
-RP 2012/04/23
-
-Index: Python-2.7.2/setup.py
-===================================================================
---- Python-2.7.2.orig/setup.py 2012-04-23 20:03:47.295582553 +0000
-+++ Python-2.7.2/setup.py 2012-04-23 20:03:15.000000000 +0000
-@@ -231,7 +231,13 @@
- # compilers
- if compiler is not None:
- (ccshared,cflags) = sysconfig.get_config_vars('CCSHARED','CFLAGS')
-- args['compiler_so'] = compiler + ' ' + ccshared + ' ' + cflags
-+ # Need to filter out -isysroot from the flags. Ideally should
-+ # figure out target flags here.
-+ flags = []
-+ for f in cflags.split():
-+ if not f.startswith("-isystem"):
-+ flags.append(f)
-+ args['compiler_so'] = compiler + ' ' + ccshared + ' ' + ' '.join(flags)
- self.compiler.set_executables(**args)
-
- build_ext.build_extensions(self)
-@@ -393,7 +399,6 @@
- # into configure and stored in the Makefile (issue found on OS X 10.3).
- for env_var, arg_name, dir_list in (
- ('LDFLAGS', '-R', self.compiler.runtime_library_dirs),
-- ('LDFLAGS', '-L', self.compiler.library_dirs),
- ('CPPFLAGS', '-I', self.compiler.include_dirs)):
- env_val = sysconfig.get_config_var(env_var)
- if env_val:
-@@ -419,16 +424,16 @@
- for directory in reversed(options.dirs):
- add_dir_to_list(dir_list, directory)
-
-- if os.path.normpath(sys.prefix) != '/usr' \
-- and not sysconfig.get_config_var('PYTHONFRAMEWORK'):
-+# if os.path.normpath(sys.prefix) != '/usr' \
-+# and not sysconfig.get_config_var('PYTHONFRAMEWORK'):
- # OSX note: Don't add LIBDIR and INCLUDEDIR to building a framework
- # (PYTHONFRAMEWORK is set) to avoid # linking problems when
- # building a framework with different architectures than
- # the one that is currently installed (issue #7473)
-- add_dir_to_list(self.compiler.library_dirs,
-- sysconfig.get_config_var("LIBDIR"))
-- add_dir_to_list(self.compiler.include_dirs,
-- sysconfig.get_config_var("INCLUDEDIR"))
-+# add_dir_to_list(self.compiler.library_dirs,
-+# sysconfig.get_config_var("LIBDIR"))
-+# add_dir_to_list(self.compiler.include_dirs,
-+# sysconfig.get_config_var("INCLUDEDIR"))
-
- try:
- have_unicode = unicode
diff --git a/meta/recipes-devtools/python/python/sitecustomize.py b/meta/recipes-devtools/python/python/sitecustomize.py
deleted file mode 100644
index 4c8b5e2ba3..0000000000
--- a/meta/recipes-devtools/python/python/sitecustomize.py
+++ /dev/null
@@ -1,37 +0,0 @@
-# OpenEmbedded sitecustomize.py (C) 2002-2008 Michael 'Mickey' Lauer <mlauer@vanille-media.de>
-# GPLv2 or later
-# Version: 20081123
-# Features:
-# * set proper default encoding
-# * enable readline completion in the interactive interpreter
-# * load command line history on startup
-# * save command line history on exit
-
-import os
-
-def __exithandler():
- try:
- readline.write_history_file( "%s/.python-history" % os.getenv( "HOME", "/tmp" ) )
- except IOError:
- pass
-
-def __registerExitHandler():
- import atexit
- atexit.register( __exithandler )
-
-def __enableReadlineSupport():
- readline.set_history_length( 1000 )
- readline.parse_and_bind( "tab: complete" )
- try:
- readline.read_history_file( "%s/.python-history" % os.getenv( "HOME", "/tmp" ) )
- except IOError:
- pass
-
-import sys
-try:
- import rlcompleter, readline
-except ImportError:
- pass
-else:
- __registerExitHandler()
- __enableReadlineSupport()
diff --git a/meta/recipes-devtools/python/python/support_SOURCE_DATE_EPOCH_in_py_compile_2.7.patch b/meta/recipes-devtools/python/python/support_SOURCE_DATE_EPOCH_in_py_compile_2.7.patch
deleted file mode 100644
index 12651798ee..0000000000
--- a/meta/recipes-devtools/python/python/support_SOURCE_DATE_EPOCH_in_py_compile_2.7.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-The compiled .pyc files contain time stamp corresponding to the compile time.
-This prevents binary reproducibility. This patch allows to achieve binary
-reproducibility by overriding the build time stamp by the value
-exported via SOURCE_DATE_EPOCH.
-
-Patch by Bernhard M. Wiedemann
-
-Upstream-Status: Backport
-
-Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
-
-Fri Feb 24 17:08:25 UTC 2017 - bwiedemann@suse.com
-
-- Add reproducible.patch to allow reproducible builds of various
- python packages like python-amqp
- Upstream: https://github.com/python/cpython/pull/296
-
-
-@@ -0,0 +1,15 @@
-Index: Python-2.7.13/Lib/py_compile.py
-===================================================================
---- Python-2.7.13.orig/Lib/py_compile.py
-+++ Python-2.7.13/Lib/py_compile.py
-@@ -108,6 +108,10 @@ def compile(file, cfile=None, dfile=None
- timestamp = long(os.fstat(f.fileno()).st_mtime)
- except AttributeError:
- timestamp = long(os.stat(file).st_mtime)
-+ sde = os.environ.get('SOURCE_DATE_EPOCH')
-+ if sde and timestamp > int(sde):
-+ timestamp = int(sde)
-+ os.utime(file, (timestamp, timestamp))
- codestring = f.read()
- try:
- codeobject = __builtin__.compile(codestring, dfile or file,'exec')
diff --git a/meta/recipes-devtools/python/python/use_sysroot_ncurses_instead_of_host.patch b/meta/recipes-devtools/python/python/use_sysroot_ncurses_instead_of_host.patch
deleted file mode 100644
index fb4a3bcf95..0000000000
--- a/meta/recipes-devtools/python/python/use_sysroot_ncurses_instead_of_host.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-Python tries to use ncursesw from the host,
-if it is not found causes an error on configure,
-we should use ncursesw from sysroot instead
-
-Upstream-Status: Pending
-
-Signed-off-by: Alejandro Hernandez <alejandro.hernandez@linux.intel.com>
-
-Index: Python-2.7.9/configure.ac
-===================================================================
---- Python-2.7.9.orig/configure.ac
-+++ Python-2.7.9/configure.ac
-@@ -4311,7 +4311,7 @@ fi
-
- # first curses configure check
- ac_save_cppflags="$CPPFLAGS"
--CPPFLAGS="$CPPFLAGS -I/usr/include/ncursesw"
-+CPPFLAGS="$CPPFLAGS -I=/usr/include/ncursesw"
-
- AC_CHECK_HEADERS(curses.h ncurses.h)
-
diff --git a/meta/recipes-devtools/python/python3-alabaster_0.7.16.bb b/meta/recipes-devtools/python/python3-alabaster_0.7.16.bb
new file mode 100644
index 0000000000..c61fce454f
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-alabaster_0.7.16.bb
@@ -0,0 +1,12 @@
+SUMMARY = "Alabaster is a visually (c)lean, responsive, configurable theme for the Sphinx documentation system."
+HOMEPAGE = "https://alabaster.readthedocs.io/en/latest/"
+BUGTRACKER = "https://github.com/sphinx-doc/alabaster/issues"
+SECTION = "devel/python"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=21860fdb805bf4e0bfaf94b566b747fa"
+
+SRC_URI[sha256sum] = "75a8b99c28a5dad50dd7f8ccdd447a121ddb3892da9e53d1ca5cca3106d58d65"
+
+inherit python_flit_core pypi
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-asn1crypto_1.5.1.bb b/meta/recipes-devtools/python/python3-asn1crypto_1.5.1.bb
new file mode 100644
index 0000000000..322497b09b
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-asn1crypto_1.5.1.bb
@@ -0,0 +1,24 @@
+SUMMARY = "A fast, pure Python library for parsing and serializing ASN.1 structures"
+HOMEPAGE = "https://github.com/wbond/asn1crypto"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=b5cda97fbd7959ad47a952651a87051a"
+
+PYPI_PACKAGE = "asn1crypto"
+
+SRC_URI[sha256sum] = "13ae38502be632115abf8a24cbe5f4da52e3b5231990aff31123c805306ccb9c"
+
+inherit pypi setuptools3
+
+RDEPENDS:${PN}:class-target += " \
+ python3-codecs \
+ python3-crypt \
+ python3-ctypes \
+ python3-datetime \
+ python3-io \
+ python3-netclient \
+ python3-numbers \
+ python3-shell \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-async_0.6.2.bb b/meta/recipes-devtools/python/python3-async_0.6.2.bb
deleted file mode 100644
index 0da5fdecdc..0000000000
--- a/meta/recipes-devtools/python/python3-async_0.6.2.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-inherit setuptools3
-require python-async.inc
diff --git a/meta/recipes-devtools/python/python3-atomicwrites/run-ptest b/meta/recipes-devtools/python/python3-atomicwrites/run-ptest
new file mode 100644
index 0000000000..8d2017d39c
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-atomicwrites/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+pytest --automake
diff --git a/meta/recipes-devtools/python/python3-atomicwrites_1.4.1.bb b/meta/recipes-devtools/python/python3-atomicwrites_1.4.1.bb
new file mode 100644
index 0000000000..848f74d612
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-atomicwrites_1.4.1.bb
@@ -0,0 +1,27 @@
+SUMMARY = "Powerful Python library for atomic file writes"
+HOMEPAGE = "https://github.com/untitaker/python-atomicwrites"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=91cc36cfafeefb7863673bcfcb1d4da4"
+
+SRC_URI[sha256sum] = "81b2c9071a49367a7f770170e5eec8cb66567cfbbc8c73d20ce5ca4a8d71cf11"
+
+inherit pypi setuptools3 ptest
+
+SRC_URI += " \
+ file://run-ptest \
+"
+
+RDEPENDS:${PN}-ptest += " \
+ python3-pytest \
+ python3-unittest-automake-output \
+ python3-unixadmin \
+"
+
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}/tests
+ cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+}
+
+RDEPENDS:${PN} = "python3-misc"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-attrs/0001-conftest.py-disable-deadline.patch b/meta/recipes-devtools/python/python3-attrs/0001-conftest.py-disable-deadline.patch
new file mode 100644
index 0000000000..b1e6d99916
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-attrs/0001-conftest.py-disable-deadline.patch
@@ -0,0 +1,45 @@
+From 41103f017f6a233ebb477dd1712fe82ea8f1c84c Mon Sep 17 00:00:00 2001
+From: Tim Orling <tim.orling@konsulko.com>
+Date: Thu, 29 Feb 2024 08:45:54 -0800
+Subject: [PATCH] conftest.py: disable deadline
+
+The deadline is by default 200ms, but this is intended to be useful to
+the developer and not necessarily recommended for heavily loaded CI
+systems. Avoid warnings by disabling the deadline completely.
+
+https://github.com/HypothesisWorks/hypothesis/issues/3713
+https://hypothesis.readthedocs.io/en/latest/settings.html#hypothesis.settings.deadline
+https://lists.openembedded.org/g/openembedded-core/topic/104640034#196437
+
+Fixes:
+"""
+Unreliable test timings! On an initial run, this test took 268.29ms,
+which exceeded the deadline of 200.00ms, but on a subsequent run it
+took 2.63 ms, which did not. If you expect this sort of variability in
+your test timings, consider turning deadlines off for this test by
+setting deadline=None.
+"""
+
+Upstream-Status: Submitted [https://github.com/python-attrs/attrs/pull/1252]
+
+Signed-off-by: Tim Orling <tim.orling@konsulko.com>
+---
+ conftest.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/conftest.py b/conftest.py
+index 144e5f3..fdead3d 100644
+--- a/conftest.py
++++ b/conftest.py
+@@ -20,7 +20,7 @@ def _frozen(request):
+ def pytest_configure(config):
+ # HealthCheck.too_slow causes more trouble than good -- especially in CIs.
+ settings.register_profile(
+- "patience", settings(suppress_health_check=[HealthCheck.too_slow])
++ "patience", settings(suppress_health_check=[HealthCheck.too_slow], deadline=None)
+ )
+ settings.load_profile("patience")
+
+--
+2.34.1
+
diff --git a/meta/recipes-devtools/python/python3-attrs/0001-test_funcs-skip-test_unknown-for-pytest-8.patch b/meta/recipes-devtools/python/python3-attrs/0001-test_funcs-skip-test_unknown-for-pytest-8.patch
new file mode 100644
index 0000000000..bb69c0f157
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-attrs/0001-test_funcs-skip-test_unknown-for-pytest-8.patch
@@ -0,0 +1,30 @@
+From cbe95e1aa6d95195dce13406a6f0522b2964babc Mon Sep 17 00:00:00 2001
+From: Tim Orling <tim.orling@konsulko.com>
+Date: Fri, 16 Feb 2024 07:17:19 -0800
+Subject: [PATCH] test_funcs: skip test_unknown for pytest 8
+
+https://github.com/python-attrs/attrs/issues/1233
+
+Upstream-Status: Inappropriate [Test case needs to be properly fixed upstream]
+
+Signed-off-by: Tim Orling <tim.orling@konsulko.com>
+---
+ tests/test_funcs.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tests/test_funcs.py b/tests/test_funcs.py
+index 044aaab..0872c31 100644
+--- a/tests/test_funcs.py
++++ b/tests/test_funcs.py
+@@ -593,7 +593,7 @@ class TestAssoc:
+ for k, v in change_dict.items():
+ assert getattr(changed, k) == v
+
+- @given(simple_classes())
++ @pytest.mark.skip('Broken with pytest 8. See https://github.com/python-attrs/attrs/issues/1233')
+ def test_unknown(self, C):
+ """
+ Wanting to change an unknown attribute raises an
+--
+2.34.1
+
diff --git a/meta/recipes-devtools/python/python3-attrs/run-ptest b/meta/recipes-devtools/python/python3-attrs/run-ptest
new file mode 100644
index 0000000000..8d2017d39c
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-attrs/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+pytest --automake
diff --git a/meta/recipes-devtools/python/python3-attrs_23.2.0.bb b/meta/recipes-devtools/python/python3-attrs_23.2.0.bb
new file mode 100644
index 0000000000..a638097988
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-attrs_23.2.0.bb
@@ -0,0 +1,39 @@
+SUMMARY = "Classes Without Boilerplate"
+HOMEPAGE = "http://www.attrs.org/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=5e55731824cf9205cfabeab9a0600887"
+
+SRC_URI[sha256sum] = "935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30"
+
+inherit pypi ptest python_hatchling
+
+SRC_URI += " \
+ file://0001-test_funcs-skip-test_unknown-for-pytest-8.patch \
+ file://0001-conftest.py-disable-deadline.patch \
+ file://run-ptest \
+"
+
+DEPENDS += " \
+ python3-hatch-vcs-native \
+ python3-hatch-fancy-pypi-readme-native \
+"
+
+RDEPENDS:${PN}+= " \
+ python3-compression \
+ python3-ctypes \
+ python3-crypt \
+"
+
+RDEPENDS:${PN}-ptest += " \
+ python3-hypothesis \
+ python3-pytest \
+ python3-unittest-automake-output \
+"
+
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}/tests
+ cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+ install ${S}/conftest.py ${D}${PTEST_PATH}/
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-babel_2.14.0.bb b/meta/recipes-devtools/python/python3-babel_2.14.0.bb
new file mode 100644
index 0000000000..cd40d4222b
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-babel_2.14.0.bb
@@ -0,0 +1,26 @@
+SUMMARY = "A collection of tools for internationalizing Python applications"
+HOMEPAGE = "http://babel.edgewall.org/"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=0f97d9a63e91407b4c0d01efde91cfc0"
+
+SRC_URI[sha256sum] = "6919867db036398ba21eb5c7a0f6b28ab8cbc3ae7a73a44ebe34ae74a4e7d363"
+
+PYPI_PACKAGE = "Babel"
+
+inherit pypi setuptools3
+
+CLEANBROKEN = "1"
+
+RDEPENDS:${PN} += " \
+ python3-codecs \
+ python3-difflib \
+ python3-netserver \
+ python3-numbers \
+ python3-pickle \
+ python3-pytz \
+ python3-setuptools \
+ python3-shell \
+ python3-threading \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-bcrypt-crates.inc b/meta/recipes-devtools/python/python3-bcrypt-crates.inc
new file mode 100644
index 0000000000..0e7479f0b5
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-bcrypt-crates.inc
@@ -0,0 +1,114 @@
+# Autogenerated with 'bitbake -c update_crates python3-bcrypt'
+
+# from src/_bcrypt/Cargo.lock
+SRC_URI += " \
+ crate://crates.io/autocfg/1.1.0 \
+ crate://crates.io/base64/0.21.5 \
+ crate://crates.io/bcrypt/0.15.0 \
+ crate://crates.io/bcrypt-pbkdf/0.10.0 \
+ crate://crates.io/bitflags/1.3.2 \
+ crate://crates.io/block-buffer/0.10.4 \
+ crate://crates.io/blowfish/0.9.1 \
+ crate://crates.io/byteorder/1.5.0 \
+ crate://crates.io/cfg-if/1.0.0 \
+ crate://crates.io/cipher/0.4.4 \
+ crate://crates.io/cpufeatures/0.2.11 \
+ crate://crates.io/crypto-common/0.1.6 \
+ crate://crates.io/digest/0.10.7 \
+ crate://crates.io/generic-array/0.14.7 \
+ crate://crates.io/getrandom/0.2.11 \
+ crate://crates.io/heck/0.4.1 \
+ crate://crates.io/indoc/2.0.4 \
+ crate://crates.io/inout/0.1.3 \
+ crate://crates.io/libc/0.2.151 \
+ crate://crates.io/lock_api/0.4.11 \
+ crate://crates.io/memoffset/0.9.0 \
+ crate://crates.io/once_cell/1.19.0 \
+ crate://crates.io/parking_lot/0.12.1 \
+ crate://crates.io/parking_lot_core/0.9.9 \
+ crate://crates.io/pbkdf2/0.12.2 \
+ crate://crates.io/portable-atomic/1.6.0 \
+ crate://crates.io/proc-macro2/1.0.70 \
+ crate://crates.io/pyo3/0.20.3 \
+ crate://crates.io/pyo3-build-config/0.20.3 \
+ crate://crates.io/pyo3-ffi/0.20.3 \
+ crate://crates.io/pyo3-macros/0.20.3 \
+ crate://crates.io/pyo3-macros-backend/0.20.3 \
+ crate://crates.io/quote/1.0.33 \
+ crate://crates.io/redox_syscall/0.4.1 \
+ crate://crates.io/scopeguard/1.2.0 \
+ crate://crates.io/sha2/0.10.8 \
+ crate://crates.io/smallvec/1.11.2 \
+ crate://crates.io/subtle/2.5.0 \
+ crate://crates.io/syn/2.0.41 \
+ crate://crates.io/target-lexicon/0.12.12 \
+ crate://crates.io/typenum/1.17.0 \
+ crate://crates.io/unicode-ident/1.0.12 \
+ crate://crates.io/unindent/0.2.3 \
+ crate://crates.io/version_check/0.9.4 \
+ crate://crates.io/wasi/0.11.0+wasi-snapshot-preview1 \
+ crate://crates.io/windows-targets/0.48.5 \
+ crate://crates.io/windows_aarch64_gnullvm/0.48.5 \
+ crate://crates.io/windows_aarch64_msvc/0.48.5 \
+ crate://crates.io/windows_i686_gnu/0.48.5 \
+ crate://crates.io/windows_i686_msvc/0.48.5 \
+ crate://crates.io/windows_x86_64_gnu/0.48.5 \
+ crate://crates.io/windows_x86_64_gnullvm/0.48.5 \
+ crate://crates.io/windows_x86_64_msvc/0.48.5 \
+ crate://crates.io/zeroize/1.7.0 \
+"
+
+SRC_URI[autocfg-1.1.0.sha256sum] = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+SRC_URI[base64-0.21.5.sha256sum] = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9"
+SRC_URI[bcrypt-0.15.0.sha256sum] = "28d1c9c15093eb224f0baa400f38fcd713fc1391a6f1c389d886beef146d60a3"
+SRC_URI[bcrypt-pbkdf-0.10.0.sha256sum] = "6aeac2e1fe888769f34f05ac343bbef98b14d1ffb292ab69d4608b3abc86f2a2"
+SRC_URI[bitflags-1.3.2.sha256sum] = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+SRC_URI[block-buffer-0.10.4.sha256sum] = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+SRC_URI[blowfish-0.9.1.sha256sum] = "e412e2cd0f2b2d93e02543ceae7917b3c70331573df19ee046bcbc35e45e87d7"
+SRC_URI[byteorder-1.5.0.sha256sum] = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
+SRC_URI[cfg-if-1.0.0.sha256sum] = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+SRC_URI[cipher-0.4.4.sha256sum] = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad"
+SRC_URI[cpufeatures-0.2.11.sha256sum] = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0"
+SRC_URI[crypto-common-0.1.6.sha256sum] = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+SRC_URI[digest-0.10.7.sha256sum] = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+SRC_URI[generic-array-0.14.7.sha256sum] = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+SRC_URI[getrandom-0.2.11.sha256sum] = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f"
+SRC_URI[heck-0.4.1.sha256sum] = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+SRC_URI[indoc-2.0.4.sha256sum] = "1e186cfbae8084e513daff4240b4797e342f988cecda4fb6c939150f96315fd8"
+SRC_URI[inout-0.1.3.sha256sum] = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5"
+SRC_URI[libc-0.2.151.sha256sum] = "302d7ab3130588088d277783b1e2d2e10c9e9e4a16dd9050e6ec93fb3e7048f4"
+SRC_URI[lock_api-0.4.11.sha256sum] = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45"
+SRC_URI[memoffset-0.9.0.sha256sum] = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
+SRC_URI[once_cell-1.19.0.sha256sum] = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
+SRC_URI[parking_lot-0.12.1.sha256sum] = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+SRC_URI[parking_lot_core-0.9.9.sha256sum] = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e"
+SRC_URI[pbkdf2-0.12.2.sha256sum] = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2"
+SRC_URI[portable-atomic-1.6.0.sha256sum] = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0"
+SRC_URI[proc-macro2-1.0.70.sha256sum] = "39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b"
+SRC_URI[pyo3-0.20.3.sha256sum] = "53bdbb96d49157e65d45cc287af5f32ffadd5f4761438b527b055fb0d4bb8233"
+SRC_URI[pyo3-build-config-0.20.3.sha256sum] = "deaa5745de3f5231ce10517a1f5dd97d53e5a2fd77aa6b5842292085831d48d7"
+SRC_URI[pyo3-ffi-0.20.3.sha256sum] = "62b42531d03e08d4ef1f6e85a2ed422eb678b8cd62b762e53891c05faf0d4afa"
+SRC_URI[pyo3-macros-0.20.3.sha256sum] = "7305c720fa01b8055ec95e484a6eca7a83c841267f0dd5280f0c8b8551d2c158"
+SRC_URI[pyo3-macros-backend-0.20.3.sha256sum] = "7c7e9b68bb9c3149c5b0cade5d07f953d6d125eb4337723c4ccdb665f1f96185"
+SRC_URI[quote-1.0.33.sha256sum] = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
+SRC_URI[redox_syscall-0.4.1.sha256sum] = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
+SRC_URI[scopeguard-1.2.0.sha256sum] = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+SRC_URI[sha2-0.10.8.sha256sum] = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8"
+SRC_URI[smallvec-1.11.2.sha256sum] = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970"
+SRC_URI[subtle-2.5.0.sha256sum] = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc"
+SRC_URI[syn-2.0.41.sha256sum] = "44c8b28c477cc3bf0e7966561e3460130e1255f7a1cf71931075f1c5e7a7e269"
+SRC_URI[target-lexicon-0.12.12.sha256sum] = "14c39fd04924ca3a864207c66fc2cd7d22d7c016007f9ce846cbb9326331930a"
+SRC_URI[typenum-1.17.0.sha256sum] = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
+SRC_URI[unicode-ident-1.0.12.sha256sum] = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+SRC_URI[unindent-0.2.3.sha256sum] = "c7de7d73e1754487cb58364ee906a499937a0dfabd86bcb980fa99ec8c8fa2ce"
+SRC_URI[version_check-0.9.4.sha256sum] = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+SRC_URI[wasi-0.11.0+wasi-snapshot-preview1.sha256sum] = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+SRC_URI[windows-targets-0.48.5.sha256sum] = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+SRC_URI[windows_aarch64_gnullvm-0.48.5.sha256sum] = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+SRC_URI[windows_aarch64_msvc-0.48.5.sha256sum] = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+SRC_URI[windows_i686_gnu-0.48.5.sha256sum] = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+SRC_URI[windows_i686_msvc-0.48.5.sha256sum] = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+SRC_URI[windows_x86_64_gnu-0.48.5.sha256sum] = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+SRC_URI[windows_x86_64_gnullvm-0.48.5.sha256sum] = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+SRC_URI[windows_x86_64_msvc-0.48.5.sha256sum] = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+SRC_URI[zeroize-1.7.0.sha256sum] = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d"
diff --git a/meta/recipes-devtools/python/python3-bcrypt/0001-Bump-pyo3-from-0.20.0-to-0.20.3-in-src-_bcrypt-746.patch b/meta/recipes-devtools/python/python3-bcrypt/0001-Bump-pyo3-from-0.20.0-to-0.20.3-in-src-_bcrypt-746.patch
new file mode 100644
index 0000000000..3f671fcc98
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-bcrypt/0001-Bump-pyo3-from-0.20.0-to-0.20.3-in-src-_bcrypt-746.patch
@@ -0,0 +1,111 @@
+From cfdd98b3215cc12e66190a9c7f0a32c052e3c2e7 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 26 Feb 2024 18:26:30 -0800
+Subject: [PATCH] Bump pyo3 from 0.20.0 to 0.20.3 in /src/_bcrypt (#746)
+
+It fixes build on hosts without 64bit atomics
+
+Upstream-Status: Backport [https://github.com/pyca/bcrypt/commit/c2ef9350798ab59b18e8a0e04a01389858578fe0]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/_bcrypt/Cargo.lock | 22 ++++++++++++++--------
+ src/_bcrypt/Cargo.toml | 2 +-
+ 2 files changed, 15 insertions(+), 9 deletions(-)
+
+--- a/src/_bcrypt/Cargo.lock
++++ b/src/_bcrypt/Cargo.lock
+@@ -233,6 +233,12 @@ dependencies = [
+ ]
+
+ [[package]]
++name = "portable-atomic"
++version = "1.6.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0"
++
++[[package]]
+ name = "proc-macro2"
+ version = "1.0.70"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+@@ -243,15 +249,16 @@ dependencies = [
+
+ [[package]]
+ name = "pyo3"
+-version = "0.20.0"
++version = "0.20.3"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "04e8453b658fe480c3e70c8ed4e3d3ec33eb74988bd186561b0cc66b85c3bc4b"
++checksum = "53bdbb96d49157e65d45cc287af5f32ffadd5f4761438b527b055fb0d4bb8233"
+ dependencies = [
+ "cfg-if",
+ "indoc",
+ "libc",
+ "memoffset",
+ "parking_lot",
++ "portable-atomic",
+ "pyo3-build-config",
+ "pyo3-ffi",
+ "pyo3-macros",
+@@ -260,9 +267,9 @@ dependencies = [
+
+ [[package]]
+ name = "pyo3-build-config"
+-version = "0.20.0"
++version = "0.20.3"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "a96fe70b176a89cff78f2fa7b3c930081e163d5379b4dcdf993e3ae29ca662e5"
++checksum = "deaa5745de3f5231ce10517a1f5dd97d53e5a2fd77aa6b5842292085831d48d7"
+ dependencies = [
+ "once_cell",
+ "target-lexicon",
+@@ -270,9 +277,9 @@ dependencies = [
+
+ [[package]]
+ name = "pyo3-ffi"
+-version = "0.20.0"
++version = "0.20.3"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "214929900fd25e6604661ed9cf349727c8920d47deff196c4e28165a6ef2a96b"
++checksum = "62b42531d03e08d4ef1f6e85a2ed422eb678b8cd62b762e53891c05faf0d4afa"
+ dependencies = [
+ "libc",
+ "pyo3-build-config",
+@@ -280,9 +287,9 @@ dependencies = [
+
+ [[package]]
+ name = "pyo3-macros"
+-version = "0.20.0"
++version = "0.20.3"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "dac53072f717aa1bfa4db832b39de8c875b7c7af4f4a6fe93cdbf9264cf8383b"
++checksum = "7305c720fa01b8055ec95e484a6eca7a83c841267f0dd5280f0c8b8551d2c158"
+ dependencies = [
+ "proc-macro2",
+ "pyo3-macros-backend",
+@@ -292,12 +299,13 @@ dependencies = [
+
+ [[package]]
+ name = "pyo3-macros-backend"
+-version = "0.20.0"
++version = "0.20.3"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "7774b5a8282bd4f25f803b1f0d945120be959a36c72e08e7cd031c792fdfd424"
++checksum = "7c7e9b68bb9c3149c5b0cade5d07f953d6d125eb4337723c4ccdb665f1f96185"
+ dependencies = [
+ "heck",
+ "proc-macro2",
++ "pyo3-build-config",
+ "quote",
+ "syn",
+ ]
+--- a/src/_bcrypt/Cargo.toml
++++ b/src/_bcrypt/Cargo.toml
+@@ -6,7 +6,7 @@ edition = "2018"
+ publish = false
+
+ [dependencies]
+-pyo3 = { version = "0.20.0", features = ["abi3"] }
++pyo3 = { version = "0.20.3", features = ["abi3"] }
+ bcrypt = "0.15"
+ bcrypt-pbkdf = "0.10.0"
+ base64 = "0.21.5"
diff --git a/meta/recipes-devtools/python/python3-bcrypt/run-ptest b/meta/recipes-devtools/python/python3-bcrypt/run-ptest
new file mode 100644
index 0000000000..8d2017d39c
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-bcrypt/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+pytest --automake
diff --git a/meta/recipes-devtools/python/python3-bcrypt_4.1.2.bb b/meta/recipes-devtools/python/python3-bcrypt_4.1.2.bb
new file mode 100644
index 0000000000..93fa645f33
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-bcrypt_4.1.2.bb
@@ -0,0 +1,37 @@
+SUMMARY = "Modern password hashing for your software and your servers."
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=8f7bb094c7232b058c7e9f2e431f389c"
+HOMEPAGE = "https://pypi.org/project/bcrypt/"
+
+DEPENDS += "python3-cffi-native"
+LDFLAGS:append = "${@bb.utils.contains('DISTRO_FEATURES', 'ptest', ' -fuse-ld=bfd', '', d)}"
+
+SRC_URI[sha256sum] = "33313a1200a3ae90b75587ceac502b048b840fc69e7f7a0905b5f87fac7a1258"
+
+inherit pypi python_setuptools3_rust ptest-cargo cargo-update-recipe-crates
+
+SRC_URI += " \
+ file://0001-Bump-pyo3-from-0.20.0-to-0.20.3-in-src-_bcrypt-746.patch \
+ file://run-ptest \
+"
+
+CARGO_SRC_DIR = "src/_bcrypt"
+
+require ${BPN}-crates.inc
+
+RDEPENDS:${PN}-ptest += " \
+ python3-pytest \
+ python3-unittest-automake-output \
+"
+
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}/tests
+ cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+}
+
+RDEPENDS:${PN}:class-target += "\
+ python3-cffi \
+ python3-ctypes \
+ python3-shell \
+ python3-six \
+"
diff --git a/meta/recipes-devtools/python/python3-beartype_0.18.5.bb b/meta/recipes-devtools/python/python3-beartype_0.18.5.bb
new file mode 100644
index 0000000000..04fbd3139f
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-beartype_0.18.5.bb
@@ -0,0 +1,11 @@
+SUMMARY = "Unbearably fast runtime type checking in pure Python."
+HOMEPAGE = "https://beartype.readthedocs.io"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=e71f94261c1b39896cacacfeaf60560e"
+
+SRC_URI[sha256sum] = "264ddc2f1da9ec94ff639141fbe33d22e12a9f75aa863b83b7046ffff1381927"
+
+inherit setuptools3 pypi
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-booleanpy_4.0.bb b/meta/recipes-devtools/python/python3-booleanpy_4.0.bb
new file mode 100644
index 0000000000..41fd3d960a
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-booleanpy_4.0.bb
@@ -0,0 +1,13 @@
+SUMMARY = "Define boolean algebras, create and parse boolean expressions and create custom boolean DSL"
+HOMEPAGE = "https://github.com/bastikr/boolean.py"
+
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=d118b5feceee598ebeca76e13395c2bd"
+
+SRC_URI[sha256sum] = "17b9a181630e43dde1851d42bef546d616d5d9b4480357514597e78b203d06e4"
+
+PYPI_PACKAGE = "boolean.py"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-build_1.2.1.bb b/meta/recipes-devtools/python/python3-build_1.2.1.bb
new file mode 100644
index 0000000000..0156861201
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-build_1.2.1.bb
@@ -0,0 +1,32 @@
+SUMMARY = "A simple, correct PEP517 package builder"
+HOMEPAGE = "https://github.com/pypa/build"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=310439af287b0fb4780b2ad6907c256c"
+
+SRC_URI[sha256sum] = "526263f4870c26f26c433545579475377b2b7588b6f1eac76a001e873ae3e19d"
+
+inherit pypi python_flit_core
+
+DEPENDS += "python3-pyproject-hooks-native"
+
+DEPENDS:remove:class-native = "python3-build-native"
+
+# Skip dependencies as we're doing a minimal build to bootstrap
+PEP517_BUILD_OPTS:class-native = "--skip-dependency-check"
+
+do_compile:prepend:class-native() {
+ export PYTHONPATH="${S}/src"
+}
+
+RDEPENDS:${PN} += " \
+ python3-compression \
+ python3-difflib \
+ python3-ensurepip \
+ python3-logging \
+ python3-packaging \
+ python3-pyproject-hooks \
+ python3-tomllib \
+ python3-venv \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-calver/0001-setup.py-hard-code-version.patch b/meta/recipes-devtools/python/python3-calver/0001-setup.py-hard-code-version.patch
new file mode 100644
index 0000000000..43f8a78ef0
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-calver/0001-setup.py-hard-code-version.patch
@@ -0,0 +1,32 @@
+From 390a233ed969f82b2ef209b23bfb523e785603f9 Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Tue, 9 May 2023 10:19:41 -0400
+Subject: [PATCH] setup.py: hard-code version
+
+setup.py is pulling the build version from the current date rather than
+a release tag or other predictable method, causing reproducibility
+issues in builds. Patch this to make reproducible builds work while
+discussing this with upstream maintainer (or developing a patch that can
+make calver rely on a more standard pyproject.toml solution).
+
+Upstream-Status: Inappropriate (configuration)
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ setup.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/setup.py b/setup.py
+index 73f6b10..2e27cf1 100644
+--- a/setup.py
++++ b/setup.py
+@@ -42,5 +42,5 @@ setup(
+ "use_calver = calver.integration:version",
+ ],
+ },
+- version=calver_version(True),
++ version=calver_version("2022.6.26"),
+ )
+--
+2.40.0
+
diff --git a/meta/recipes-devtools/python/python3-calver/run-ptest b/meta/recipes-devtools/python/python3-calver/run-ptest
new file mode 100644
index 0000000000..8d2017d39c
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-calver/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+pytest --automake
diff --git a/meta/recipes-devtools/python/python3-calver_2022.6.26.bb b/meta/recipes-devtools/python/python3-calver_2022.6.26.bb
new file mode 100644
index 0000000000..71b5431400
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-calver_2022.6.26.bb
@@ -0,0 +1,28 @@
+SUMMARY = "Setuptools extension for CalVer package versions"
+HOMEPAGE = "https://github.com/di/calver"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+SRC_URI = " \
+ git://github.com/di/calver;branch=master;protocol=https \
+ file://run-ptest \
+ file://0001-setup.py-hard-code-version.patch \
+"
+SRCREV = "3268d8acf2c345f32a1c5f08ba25dc67f76cca81"
+
+inherit python_setuptools_build_meta ptest
+
+S = "${WORKDIR}/git"
+
+RDEPENDS:${PN}-ptest += " \
+ python3-pretend \
+ python3-pytest \
+ python3-unittest-automake-output \
+"
+
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}/tests
+ cp -rf ${S}/tests ${D}${PTEST_PATH}/
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-certifi_2024.2.2.bb b/meta/recipes-devtools/python/python3-certifi_2024.2.2.bb
new file mode 100644
index 0000000000..4e61b8d9d4
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-certifi_2024.2.2.bb
@@ -0,0 +1,16 @@
+SUMMARY = "Python package for providing Mozilla's CA Bundle."
+DESCRIPTION = "This installable Python package contains a CA Bundle that you can reference in your \
+Python code. This is useful for verifying HTTP requests, for example. This is the same CA Bundle \
+which ships with the Requests codebase, and is derived from Mozilla Firefox's canonical set."
+HOMEPAGE = " http://certifi.io/"
+
+LICENSE = "ISC"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=11618cb6a975948679286b1211bd573c"
+
+SRC_URI[sha256sum] = "0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native nativesdk"
+
+RDEPENDS:${PN} += "python3-io"
diff --git a/meta/recipes-devtools/python/python3-cffi_1.16.0.bb b/meta/recipes-devtools/python/python3-cffi_1.16.0.bb
new file mode 100644
index 0000000000..c5f6578ab2
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-cffi_1.16.0.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Foreign Function Interface for Python calling C code"
+HOMEPAGE = "http://cffi.readthedocs.org/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=5677e2fdbf7cdda61d6dd2b57df547bf"
+DEPENDS += "libffi python3-pycparser"
+
+SRC_URI[sha256sum] = "bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0"
+
+inherit pypi setuptools3
+
+RDEPENDS:${PN}:class-target = " \
+ python3-ctypes \
+ python3-io \
+ python3-pycparser \
+ python3-shell \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-chardet_5.2.0.bb b/meta/recipes-devtools/python/python3-chardet_5.2.0.bb
new file mode 100644
index 0000000000..ed792b1c7e
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-chardet_5.2.0.bb
@@ -0,0 +1,24 @@
+SUMMARY = "Universal encoding detector for Python 2 and 3"
+HOMEPAGE = "https://pypi.org/project/chardet/"
+LICENSE = "LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=4fbd65380cdd255951079008b364516c"
+
+SRC_URI[sha256sum] = "1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7"
+
+# setup.py of chardet needs this.
+DEPENDS += "python3-pytest-runner-native"
+
+inherit pypi python_setuptools_build_meta
+
+PACKAGES =+ "${PN}-cli"
+FILES:${PN}-cli += " \
+ ${PYTHON_SITEPACKAGES_DIR}/chardet/cli \
+"
+
+RDEPENDS:${PN}-cli = "${PN} "
+
+RDEPENDS:${PN}:class-target += " \
+ python3-logging \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-click/run-ptest b/meta/recipes-devtools/python/python3-click/run-ptest
new file mode 100644
index 0000000000..b63c4de0d9
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-click/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+pytest -o log_cli=true -o log_cli_level=INFO | sed -e 's/\[...%\]//g'| sed -e 's/PASSED/PASS/g'| sed -e 's/FAILED/FAIL/g'|sed -e 's/SKIPPED/SKIP/g'| awk '{if ($NF=="PASS" || $NF=="FAIL" || $NF=="SKIP" || $NF=="XFAIL" || $NF=="XPASS"){printf "%s: %s\n", $NF, $0}else{print}}'| awk '{if ($NF=="PASS" || $NF=="FAIL" || $NF=="SKIP" || $NF=="XFAIL" || $NF=="XPASS") {$NF="";print $0}else{print}}'
diff --git a/meta/recipes-devtools/python/python3-click_8.1.7.bb b/meta/recipes-devtools/python/python3-click_8.1.7.bb
new file mode 100644
index 0000000000..7d91e1af83
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-click_8.1.7.bb
@@ -0,0 +1,39 @@
+SUMMARY = "A simple wrapper around optparse for powerful command line utilities."
+DESCRIPTION = "\
+Click is a Python package for creating beautiful command line interfaces \
+in a composable way with as little code as necessary. It's the "Command \
+Line Interface Creation Kit". It's highly configurable but comes with \
+sensible defaults out of the box."
+HOMEPAGE = "http://click.pocoo.org/"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=1fa98232fd645608937a0fdc82e999b8"
+
+SRC_URI[sha256sum] = "ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"
+
+inherit pypi setuptools3 ptest
+
+SRC_URI += "file://run-ptest"
+
+RDEPENDS:${PN}-ptest += " \
+ python3-pytest \
+ python3-terminal \
+ python3-unixadmin \
+"
+
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}/tests
+ cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+ cp -rf ${S}/setup.cfg ${D}${PTEST_PATH}/
+ cp -rf ${S}/docs ${D}${PTEST_PATH}/
+}
+
+UPSTREAM_CHECK_REGEX = "click/(?P<pver>\d+(\.\d+)+)/"
+
+CLEANBROKEN = "1"
+
+RDEPENDS:${PN} += "\
+ python3-io \
+ python3-threading \
+ "
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-cryptography-crates.inc b/meta/recipes-devtools/python/python3-cryptography-crates.inc
new file mode 100644
index 0000000000..b26e22b70c
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-cryptography-crates.inc
@@ -0,0 +1,102 @@
+# Autogenerated with 'bitbake -c update_crates python3-cryptography'
+
+# from src/rust/Cargo.lock
+SRC_URI += " \
+ crate://crates.io/asn1/0.15.5 \
+ crate://crates.io/asn1_derive/0.15.5 \
+ crate://crates.io/autocfg/1.1.0 \
+ crate://crates.io/base64/0.21.7 \
+ crate://crates.io/bitflags/1.3.2 \
+ crate://crates.io/bitflags/2.4.2 \
+ crate://crates.io/cc/1.0.83 \
+ crate://crates.io/cfg-if/1.0.0 \
+ crate://crates.io/foreign-types/0.3.2 \
+ crate://crates.io/foreign-types-shared/0.1.1 \
+ crate://crates.io/heck/0.4.1 \
+ crate://crates.io/indoc/2.0.4 \
+ crate://crates.io/libc/0.2.152 \
+ crate://crates.io/lock_api/0.4.11 \
+ crate://crates.io/memoffset/0.9.0 \
+ crate://crates.io/once_cell/1.19.0 \
+ crate://crates.io/openssl/0.10.63 \
+ crate://crates.io/openssl-macros/0.1.1 \
+ crate://crates.io/openssl-sys/0.9.99 \
+ crate://crates.io/parking_lot/0.12.1 \
+ crate://crates.io/parking_lot_core/0.9.9 \
+ crate://crates.io/pem/3.0.3 \
+ crate://crates.io/pkg-config/0.3.29 \
+ crate://crates.io/portable-atomic/1.6.0 \
+ crate://crates.io/proc-macro2/1.0.78 \
+ crate://crates.io/pyo3/0.20.3 \
+ crate://crates.io/pyo3-build-config/0.20.3 \
+ crate://crates.io/pyo3-ffi/0.20.3 \
+ crate://crates.io/pyo3-macros/0.20.3 \
+ crate://crates.io/pyo3-macros-backend/0.20.3 \
+ crate://crates.io/quote/1.0.35 \
+ crate://crates.io/redox_syscall/0.4.1 \
+ crate://crates.io/scopeguard/1.2.0 \
+ crate://crates.io/self_cell/1.0.3 \
+ crate://crates.io/smallvec/1.13.1 \
+ crate://crates.io/syn/2.0.48 \
+ crate://crates.io/target-lexicon/0.12.13 \
+ crate://crates.io/unicode-ident/1.0.12 \
+ crate://crates.io/unindent/0.2.3 \
+ crate://crates.io/vcpkg/0.2.15 \
+ crate://crates.io/windows-targets/0.48.5 \
+ crate://crates.io/windows_aarch64_gnullvm/0.48.5 \
+ crate://crates.io/windows_aarch64_msvc/0.48.5 \
+ crate://crates.io/windows_i686_gnu/0.48.5 \
+ crate://crates.io/windows_i686_msvc/0.48.5 \
+ crate://crates.io/windows_x86_64_gnu/0.48.5 \
+ crate://crates.io/windows_x86_64_gnullvm/0.48.5 \
+ crate://crates.io/windows_x86_64_msvc/0.48.5 \
+"
+
+SRC_URI[asn1-0.15.5.sha256sum] = "ae3ecbce89a22627b5e8e6e11d69715617138290289e385cde773b1fe50befdb"
+SRC_URI[asn1_derive-0.15.5.sha256sum] = "861af988fac460ac69a09f41e6217a8fb9178797b76fcc9478444be6a59be19c"
+SRC_URI[autocfg-1.1.0.sha256sum] = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+SRC_URI[base64-0.21.7.sha256sum] = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567"
+SRC_URI[bitflags-1.3.2.sha256sum] = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+SRC_URI[bitflags-2.4.2.sha256sum] = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf"
+SRC_URI[cc-1.0.83.sha256sum] = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+SRC_URI[cfg-if-1.0.0.sha256sum] = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+SRC_URI[foreign-types-0.3.2.sha256sum] = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+SRC_URI[foreign-types-shared-0.1.1.sha256sum] = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+SRC_URI[heck-0.4.1.sha256sum] = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+SRC_URI[indoc-2.0.4.sha256sum] = "1e186cfbae8084e513daff4240b4797e342f988cecda4fb6c939150f96315fd8"
+SRC_URI[libc-0.2.152.sha256sum] = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7"
+SRC_URI[lock_api-0.4.11.sha256sum] = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45"
+SRC_URI[memoffset-0.9.0.sha256sum] = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
+SRC_URI[once_cell-1.19.0.sha256sum] = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
+SRC_URI[openssl-0.10.63.sha256sum] = "15c9d69dd87a29568d4d017cfe8ec518706046a05184e5aea92d0af890b803c8"
+SRC_URI[openssl-macros-0.1.1.sha256sum] = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
+SRC_URI[openssl-sys-0.9.99.sha256sum] = "22e1bf214306098e4832460f797824c05d25aacdf896f64a985fb0fd992454ae"
+SRC_URI[parking_lot-0.12.1.sha256sum] = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+SRC_URI[parking_lot_core-0.9.9.sha256sum] = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e"
+SRC_URI[pem-3.0.3.sha256sum] = "1b8fcc794035347fb64beda2d3b462595dd2753e3f268d89c5aae77e8cf2c310"
+SRC_URI[pkg-config-0.3.29.sha256sum] = "2900ede94e305130c13ddd391e0ab7cbaeb783945ae07a279c268cb05109c6cb"
+SRC_URI[portable-atomic-1.6.0.sha256sum] = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0"
+SRC_URI[proc-macro2-1.0.78.sha256sum] = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae"
+SRC_URI[pyo3-0.20.3.sha256sum] = "53bdbb96d49157e65d45cc287af5f32ffadd5f4761438b527b055fb0d4bb8233"
+SRC_URI[pyo3-build-config-0.20.3.sha256sum] = "deaa5745de3f5231ce10517a1f5dd97d53e5a2fd77aa6b5842292085831d48d7"
+SRC_URI[pyo3-ffi-0.20.3.sha256sum] = "62b42531d03e08d4ef1f6e85a2ed422eb678b8cd62b762e53891c05faf0d4afa"
+SRC_URI[pyo3-macros-0.20.3.sha256sum] = "7305c720fa01b8055ec95e484a6eca7a83c841267f0dd5280f0c8b8551d2c158"
+SRC_URI[pyo3-macros-backend-0.20.3.sha256sum] = "7c7e9b68bb9c3149c5b0cade5d07f953d6d125eb4337723c4ccdb665f1f96185"
+SRC_URI[quote-1.0.35.sha256sum] = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef"
+SRC_URI[redox_syscall-0.4.1.sha256sum] = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
+SRC_URI[scopeguard-1.2.0.sha256sum] = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+SRC_URI[self_cell-1.0.3.sha256sum] = "58bf37232d3bb9a2c4e641ca2a11d83b5062066f88df7fed36c28772046d65ba"
+SRC_URI[smallvec-1.13.1.sha256sum] = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7"
+SRC_URI[syn-2.0.48.sha256sum] = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f"
+SRC_URI[target-lexicon-0.12.13.sha256sum] = "69758bda2e78f098e4ccb393021a0963bb3442eac05f135c30f61b7370bbafae"
+SRC_URI[unicode-ident-1.0.12.sha256sum] = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+SRC_URI[unindent-0.2.3.sha256sum] = "c7de7d73e1754487cb58364ee906a499937a0dfabd86bcb980fa99ec8c8fa2ce"
+SRC_URI[vcpkg-0.2.15.sha256sum] = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+SRC_URI[windows-targets-0.48.5.sha256sum] = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+SRC_URI[windows_aarch64_gnullvm-0.48.5.sha256sum] = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+SRC_URI[windows_aarch64_msvc-0.48.5.sha256sum] = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+SRC_URI[windows_i686_gnu-0.48.5.sha256sum] = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+SRC_URI[windows_i686_msvc-0.48.5.sha256sum] = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+SRC_URI[windows_x86_64_gnu-0.48.5.sha256sum] = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+SRC_URI[windows_x86_64_gnullvm-0.48.5.sha256sum] = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+SRC_URI[windows_x86_64_msvc-0.48.5.sha256sum] = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
diff --git a/meta/recipes-devtools/python/python3-cryptography-vectors_42.0.5.bb b/meta/recipes-devtools/python/python3-cryptography-vectors_42.0.5.bb
new file mode 100644
index 0000000000..ee522af08e
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-cryptography-vectors_42.0.5.bb
@@ -0,0 +1,31 @@
+SUMMARY = "Test vectors for the cryptography package."
+HOMEPAGE = "https://cryptography.io/"
+SECTION = "devel/python"
+LICENSE = "Apache-2.0 | BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=8c3617db4fb6fae01f1d253ab91511e4 \
+ file://LICENSE.APACHE;md5=4e168cce331e5c827d4c2b68a6200e1b \
+ file://LICENSE.BSD;md5=5ae30ba4123bc4f2fa49aa0b0dce887b"
+
+# NOTE: Make sure to keep this recipe at the same version as python3-cryptography
+# Upgrade both recipes at the same time
+
+SRC_URI[sha256sum] = "505cd5e3b0cb32da1526f07042b7fc38a4b6c356710cb73d2b5f76b037a38ed1"
+
+PYPI_PACKAGE = "cryptography_vectors"
+
+inherit pypi python_setuptools_build_meta
+
+DEPENDS += " \
+ python3-cryptography \
+"
+
+do_install:append () {
+ # Remove the sha256 checksum lines for pycache files
+ sed ${D}${PYTHON_SITEPACKAGES_DIR}/cryptography_vectors-${PV}.dist-info/RECORD -e '/__pycache__/d' -i
+}
+
+BBCLASSEXTEND = "native nativesdk"
+
+UPSTREAM_CHECK_REGEX = ""
+
+RECIPE_NO_UPDATE_REASON = "Must be updated in sync with python3-cryptography."
diff --git a/meta/recipes-devtools/python/python3-cryptography/0001-pyproject.toml-remove-benchmark-disable-option.patch b/meta/recipes-devtools/python/python3-cryptography/0001-pyproject.toml-remove-benchmark-disable-option.patch
new file mode 100644
index 0000000000..f9c8d1393d
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-cryptography/0001-pyproject.toml-remove-benchmark-disable-option.patch
@@ -0,0 +1,43 @@
+From b7dd3ce1d75d1e6255e1aca82aa7f401d4246a75 Mon Sep 17 00:00:00 2001
+From: Mingli Yu <mingli.yu@windriver.com>
+Date: Tue, 17 May 2022 17:22:48 +0800
+Subject: [PATCH] pyproject.toml: remove --benchmark-disable option
+
+The new version introduced below change, so remove the option
+to avoid python3-pytest-benchmark rdepends to fix the gap.
+496703c8 Refs #7079 -- added basic scaffholding for benchmarks (#7087)
+
+Fixes:
+ # ./run-ptest
+ Free memory: 31.283 GB
+ ERROR: usage: pytest [options] [file_or_dir] [file_or_dir] [...]
+ pytest: error: unrecognized arguments: --benchmark-disable
+ inifile: /usr/lib/python3-cryptography/ptest/pyproject.toml
+ rootdir: /usr/lib/python3-cryptography/ptest
+
+Upstream-Status: Inappropriate [OE specific]
+
+Signed-off-by: Mingli Yu <mingli.yu@windriver.com>
+
+Refresh for 42.02
+Signed-off-by: Tim Orling <tim.orling@konsulko.com>
+---
+ pyproject.toml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/pyproject.toml b/pyproject.toml
+index c9a7979bd..dec4b7157 100644
+--- a/pyproject.toml
++++ b/pyproject.toml
+@@ -92,7 +92,7 @@ rust-version = ">=1.63.0"
+
+
+ [tool.pytest.ini_options]
+-addopts = "-r s --capture=no --strict-markers --benchmark-disable"
++addopts = "-r s --capture=no --strict-markers"
+ console_output_style = "progress-even-when-capture-no"
+ markers = [
+ "skip_fips: this test is not executed in FIPS mode",
+--
+2.34.1
+
diff --git a/meta/recipes-devtools/python/python3-cryptography/check-memfree.py b/meta/recipes-devtools/python/python3-cryptography/check-memfree.py
new file mode 100755
index 0000000000..ed680d8d5b
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-cryptography/check-memfree.py
@@ -0,0 +1,10 @@
+#!/usr/bin/env python3
+# https://stackoverflow.com/questions/22102999/get-total-physical-memory-in-python/28161352
+import sys
+meminfo = dict((i.split()[0].rstrip(':'),int(i.split()[1])) for i in open('/proc/meminfo').readlines())
+mem_free = meminfo['MemTotal']/1024./1024.
+if mem_free < 2.:
+ print("Insufficient free memory({:.3f}): requires > 2 GB".format(mem_free))
+ sys.exit(1)
+else:
+ print("Free memory: {:.3f} GB".format(mem_free))
diff --git a/meta/recipes-devtools/python/python3-cryptography/run-ptest b/meta/recipes-devtools/python/python3-cryptography/run-ptest
new file mode 100644
index 0000000000..fe191a5dc4
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-cryptography/run-ptest
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+if ./check-memfree.py; then
+ # Skip the bench test module, we don't yet have pytest3-benchmark in core
+ # and these are more benchmarks than unit tests.
+ pytest --automake -k 'not bench'
+else
+ echo "SKIP: crytography.not_enough_memory"
+fi
diff --git a/meta/recipes-devtools/python/python3-cryptography_42.0.5.bb b/meta/recipes-devtools/python/python3-cryptography_42.0.5.bb
new file mode 100644
index 0000000000..732f925d92
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-cryptography_42.0.5.bb
@@ -0,0 +1,67 @@
+SUMMARY = "Provides cryptographic recipes and primitives to python developers"
+HOMEPAGE = "https://cryptography.io/"
+SECTION = "devel/python"
+LICENSE = "Apache-2.0 | BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=8c3617db4fb6fae01f1d253ab91511e4 \
+ file://LICENSE.APACHE;md5=4e168cce331e5c827d4c2b68a6200e1b \
+ file://LICENSE.BSD;md5=5ae30ba4123bc4f2fa49aa0b0dce887b \
+ "
+LDSHARED += "-pthread"
+
+SRC_URI[sha256sum] = "6fe07eec95dfd477eb9530aef5bead34fec819b3aaf6c5bd6d20565da607bfe1"
+
+SRC_URI += "file://0001-pyproject.toml-remove-benchmark-disable-option.patch \
+ file://check-memfree.py \
+ file://run-ptest \
+ "
+
+require ${BPN}-crates.inc
+
+inherit pypi python_setuptools3_rust cargo-update-recipe-crates pkgconfig
+
+DEPENDS += " \
+ python3-cffi-native \
+"
+
+RDEPENDS:${PN} += " \
+ python3-cffi \
+"
+
+RDEPENDS:${PN}:append:class-target = " \
+ python3-numbers \
+ python3-threading \
+"
+
+RDEPENDS:${PN}-ptest += " \
+ python3-bcrypt \
+ python3-cryptography-vectors (= ${PV}) \
+ python3-hypothesis \
+ python3-iso8601 \
+ python3-mmap \
+ python3-pretend \
+ python3-psutil \
+ python3-pytest \
+ python3-unittest-automake-output \
+ python3-pytest-subtests \
+ python3-pytz \
+"
+
+inherit ptest
+
+do_install_ptest() {
+ install -D ${WORKDIR}/check-memfree.py ${D}${PTEST_PATH}/
+ install -d ${D}${PTEST_PATH}/tests
+ cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+ # remove test_x509.py as it needs benchmark and we don't
+ # want to introduce the benchmark dependency
+ rm -rf ${D}${PTEST_PATH}/tests/bench/test_x509.py
+ install -d ${D}${PTEST_PATH}/tests/hazmat
+ cp -rf ${S}/tests/hazmat/* ${D}${PTEST_PATH}/tests/hazmat/
+ cp -r ${S}/pyproject.toml ${D}${PTEST_PATH}/
+}
+
+FILES:${PN}-dbg += " \
+ ${PYTHON_SITEPACKAGES_DIR}/${SRCNAME}/hazmat/bindings/.debug \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-cython_3.0.10.bb b/meta/recipes-devtools/python/python3-cython_3.0.10.bb
new file mode 100644
index 0000000000..07638d7ad7
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-cython_3.0.10.bb
@@ -0,0 +1,37 @@
+inherit setuptools3
+require python-cython.inc
+
+RDEPENDS:${PN} += "\
+ python3-setuptools \
+"
+
+# running build_ext a second time during install fails, because Python
+# would then attempt to import cythonized modules built for the target
+# architecture.
+SETUPTOOLS_INSTALL_ARGS += "--skip-build"
+
+do_install:append() {
+ # rename scripts that would conflict with the Python 2 build of Cython
+ mv ${D}${bindir}/cython ${D}${bindir}/cython3
+ mv ${D}${bindir}/cythonize ${D}${bindir}/cythonize3
+ mv ${D}${bindir}/cygdb ${D}${bindir}/cygdb3
+}
+
+PACKAGESPLITFUNCS =+ "cython_fix_sources"
+
+cython_fix_sources () {
+ for f in ${PKGD}${TARGET_DBGSRC_DIR}/Cython/Compiler/FlowControl.c \
+ ${PKGD}${TARGET_DBGSRC_DIR}/Cython/Compiler/FusedNode.c \
+ ${PKGD}${TARGET_DBGSRC_DIR}/Cython/Compiler/Scanning.c \
+ ${PKGD}${TARGET_DBGSRC_DIR}/Cython/Compiler/Visitor.c \
+ ${PKGD}${TARGET_DBGSRC_DIR}/Cython/Plex/Actions.c \
+ ${PKGD}${TARGET_DBGSRC_DIR}/Cython/Plex/Scanners.c \
+ ${PKGD}${TARGET_DBGSRC_DIR}/Cython/Runtime/refnanny.c \
+ ${PKGD}${TARGET_DBGSRC_DIR}/Cython/Tempita/_tempita.c \
+ ${PKGD}${libdir}/${PYTHON_DIR}/site-packages/Cython*/SOURCES.txt; do
+ if [ -e $f ]; then
+ sed -i -e 's#${WORKDIR}/Cython-${PV}#${TARGET_DBGSRC_DIR}#g' $f
+ fi
+ done
+}
+
diff --git a/meta/recipes-devtools/python/python3-dbus_1.2.8.bb b/meta/recipes-devtools/python/python3-dbus_1.2.8.bb
deleted file mode 100644
index c9bf8df42d..0000000000
--- a/meta/recipes-devtools/python/python3-dbus_1.2.8.bb
+++ /dev/null
@@ -1,24 +0,0 @@
-SUMMARY = "Python bindings for the DBus inter-process communication system"
-SECTION = "devel/python"
-HOMEPAGE = "http://www.freedesktop.org/Software/dbus"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b03240518994df6d8c974675675e5ca4"
-DEPENDS = "expat dbus dbus-glib virtual/libintl"
-
-SRC_URI = "http://dbus.freedesktop.org/releases/dbus-python/dbus-python-${PV}.tar.gz \
-"
-
-SRC_URI[md5sum] = "7379db774c10904f27e7e2743d90fb43"
-SRC_URI[sha256sum] = "abf12bbb765e300bf8e2a1b2f32f85949eab06998dbda127952c31cb63957b6f"
-S = "${WORKDIR}/dbus-python-${PV}"
-
-inherit distutils3-base autotools pkgconfig
-
-# documentation needs python3-sphinx, which is not in oe-core or meta-python for now
-# change to use PACKAGECONFIG when python3-sphinx is added to oe-core
-EXTRA_OECONF += "--disable-documentation"
-
-
-RDEPENDS_${PN} = "python3-io python3-logging python3-stringold python3-threading python3-xml"
-
-FILES_${PN}-dev += "${libdir}/pkgconfig"
diff --git a/meta/recipes-devtools/python/python3-dbus_1.3.2.bb b/meta/recipes-devtools/python/python3-dbus_1.3.2.bb
new file mode 100644
index 0000000000..e0cf64c70e
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-dbus_1.3.2.bb
@@ -0,0 +1,23 @@
+SUMMARY = "Python bindings for the DBus inter-process communication system"
+SECTION = "devel/python"
+HOMEPAGE = "http://www.freedesktop.org/Software/dbus"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=97f58951300aa52a9f9e3a62bd5c846c"
+DEPENDS = "expat dbus glib-2.0 virtual/libintl"
+
+SRC_URI = "http://dbus.freedesktop.org/releases/dbus-python/dbus-python-${PV}.tar.gz"
+
+SRC_URI[sha256sum] = "ad67819308618b5069537be237f8e68ca1c7fcc95ee4a121fe6845b1418248f8"
+
+S = "${WORKDIR}/dbus-python-${PV}"
+
+inherit setuptools3-base meson pkgconfig
+
+# requires dbus-run-session
+EXTRA_OEMESON += "-Dtests=false"
+
+RDEPENDS:${PN} = "python3-io python3-logging python3-stringold python3-threading python3-xml"
+
+FILES:${PN}-dev += "${libdir}/pkgconfig"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-dbusmock_0.31.1.bb b/meta/recipes-devtools/python/python3-dbusmock_0.31.1.bb
new file mode 100644
index 0000000000..fc32c6bbb6
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-dbusmock_0.31.1.bb
@@ -0,0 +1,22 @@
+SUMMARY = "With this program/Python library you can easily create mock objects on D-Bus"
+HOMEPAGE = "https://pypi.org/project/python-dbusmock/"
+
+LICENSE = "GPL-3.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=e6a600fd5e1d9cbde2d983680233ad02"
+
+SRC_URI[sha256sum] = "b23b8e1b51fe2a9b13e617fff6b60b3ed8e536c080cf3498019d223678d5ea49"
+
+PYPI_PACKAGE = "python-dbusmock"
+
+inherit pypi python_setuptools_build_meta
+DEPENDS += "python3-setuptools-scm-native"
+
+RDEPENDS:${PN} += "\
+ python3-dbus \
+ python3-unittest \
+ python3-xml \
+ "
+
+RRECOMMENDS:${PN} = "${@bb.utils.contains('DISTRO_FEATURES', 'gobject-introspection-data', '${MLPREFIX}python3-pygobject', '', d)}"
+
+BBCLASSEXTEND = "native"
diff --git a/meta/recipes-devtools/python/python3-docutils_0.14.bb b/meta/recipes-devtools/python/python3-docutils_0.14.bb
deleted file mode 100644
index 81a449d646..0000000000
--- a/meta/recipes-devtools/python/python3-docutils_0.14.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-SUMMARY = "Text processing system for documentation"
-HOMEPAGE = "http://docutils.sourceforge.net"
-SECTION = "devel/python"
-LICENSE = "PSF & BSD-2-Clause & GPLv3"
-LIC_FILES_CHKSUM = "file://COPYING.txt;md5=35a23d42b615470583563132872c97d6"
-
-DEPENDS = "python3"
-
-SRC_URI = "${SOURCEFORGE_MIRROR}/docutils/docutils-${PV}.tar.gz"
-SRC_URI[md5sum] = "c53768d63db3873b7d452833553469de"
-SRC_URI[sha256sum] = "51e64ef2ebfb29cae1faa133b3710143496eca21c530f3f71424d77687764274"
-
-S = "${WORKDIR}/docutils-${PV}"
-
-inherit distutils3
-
-BBCLASSEXTEND = "native"
-
diff --git a/meta/recipes-devtools/python/python3-docutils_0.20.1.bb b/meta/recipes-devtools/python/python3-docutils_0.20.1.bb
new file mode 100644
index 0000000000..6038732cc4
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-docutils_0.20.1.bb
@@ -0,0 +1,20 @@
+SUMMARY = "Docutils is a modular system for processing documentation into useful formats"
+HOMEPAGE = "http://docutils.sourceforge.net"
+SECTION = "devel/python"
+LICENSE = "PSF-2.0 & BSD-2-Clause & GPL-3.0-only"
+LIC_FILES_CHKSUM = "file://COPYING.txt;md5=08f5f8aa6a1db2500c08a2bb558e45af"
+
+SRC_URI[sha256sum] = "f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b"
+
+inherit pypi setuptools3
+
+do_install:append() {
+ for f in rst2html rst2html4 rst2html5 rst2latex rst2man \
+ rst2odt rst2odt_prepstyles rst2pseudoxml rst2s5 rst2xetex rst2xml \
+ rstpep2html
+ do
+ mv ${D}${bindir}/$f.py ${D}${bindir}/$f;
+ done
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-dtc/0001-Revert-libfdt-overlay-make-overlay_get_target-public.patch b/meta/recipes-devtools/python/python3-dtc/0001-Revert-libfdt-overlay-make-overlay_get_target-public.patch
new file mode 100644
index 0000000000..a2df482e3a
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-dtc/0001-Revert-libfdt-overlay-make-overlay_get_target-public.patch
@@ -0,0 +1,132 @@
+From 4d4703e0199fb3556c37694e4d951785abca22fd Mon Sep 17 00:00:00 2001
+From: Bruce Ashfield <bruce.ashfield@gmail.com>
+Date: Wed, 19 Jan 2022 12:46:42 -0500
+Subject: [PATCH] Revert "libfdt: overlay: make overlay_get_target() public"
+
+This reverts commit 45f3d1a095dd3440578d5c6313eba555a791f3fb.
+
+Upstream-Status: Inappropriate [embedded specific]
+
+---
+ libfdt/fdt_overlay.c | 29 ++++++++++++++++++++++-------
+ libfdt/libfdt.h | 18 ------------------
+ libfdt/version.lds | 1 -
+ 3 files changed, 22 insertions(+), 26 deletions(-)
+
+diff --git a/libfdt/fdt_overlay.c b/libfdt/fdt_overlay.c
+index 5c0c398..d217e79 100644
+--- a/libfdt/fdt_overlay.c
++++ b/libfdt/fdt_overlay.c
+@@ -40,22 +40,37 @@ static uint32_t overlay_get_target_phandle(const void *fdto, int fragment)
+ return fdt32_to_cpu(*val);
+ }
+
+-int fdt_overlay_target_offset(const void *fdt, const void *fdto,
+- int fragment_offset, char const **pathp)
++/**
++ * overlay_get_target - retrieves the offset of a fragment's target
++ * @fdt: Base device tree blob
++ * @fdto: Device tree overlay blob
++ * @fragment: node offset of the fragment in the overlay
++ * @pathp: pointer which receives the path of the target (or NULL)
++ *
++ * overlay_get_target() retrieves the target offset in the base
++ * device tree of a fragment, no matter how the actual targeting is
++ * done (through a phandle or a path)
++ *
++ * returns:
++ * the targeted node offset in the base device tree
++ * Negative error code on error
++ */
++static int overlay_get_target(const void *fdt, const void *fdto,
++ int fragment, char const **pathp)
+ {
+ uint32_t phandle;
+ const char *path = NULL;
+ int path_len = 0, ret;
+
+ /* Try first to do a phandle based lookup */
+- phandle = overlay_get_target_phandle(fdto, fragment_offset);
++ phandle = overlay_get_target_phandle(fdto, fragment);
+ if (phandle == (uint32_t)-1)
+ return -FDT_ERR_BADPHANDLE;
+
+ /* no phandle, try path */
+ if (!phandle) {
+ /* And then a path based lookup */
+- path = fdt_getprop(fdto, fragment_offset, "target-path", &path_len);
++ path = fdt_getprop(fdto, fragment, "target-path", &path_len);
+ if (path)
+ ret = fdt_path_offset(fdt, path);
+ else
+@@ -621,7 +636,7 @@ static int overlay_merge(void *fdt, void *fdto)
+ if (overlay < 0)
+ return overlay;
+
+- target = fdt_overlay_target_offset(fdt, fdto, fragment, NULL);
++ target = overlay_get_target(fdt, fdto, fragment, NULL);
+ if (target < 0)
+ return target;
+
+@@ -764,7 +779,7 @@ static int overlay_symbol_update(void *fdt, void *fdto)
+ return -FDT_ERR_BADOVERLAY;
+
+ /* get the target of the fragment */
+- ret = fdt_overlay_target_offset(fdt, fdto, fragment, &target_path);
++ ret = overlay_get_target(fdt, fdto, fragment, &target_path);
+ if (ret < 0)
+ return ret;
+ target = ret;
+@@ -786,7 +801,7 @@ static int overlay_symbol_update(void *fdt, void *fdto)
+
+ if (!target_path) {
+ /* again in case setprop_placeholder changed it */
+- ret = fdt_overlay_target_offset(fdt, fdto, fragment, &target_path);
++ ret = overlay_get_target(fdt, fdto, fragment, &target_path);
+ if (ret < 0)
+ return ret;
+ target = ret;
+diff --git a/libfdt/libfdt.h b/libfdt/libfdt.h
+index a7f432c..7f117e8 100644
+--- a/libfdt/libfdt.h
++++ b/libfdt/libfdt.h
+@@ -2116,24 +2116,6 @@ int fdt_del_node(void *fdt, int nodeoffset);
+ */
+ int fdt_overlay_apply(void *fdt, void *fdto);
+
+-/**
+- * fdt_overlay_target_offset - retrieves the offset of a fragment's target
+- * @fdt: Base device tree blob
+- * @fdto: Device tree overlay blob
+- * @fragment_offset: node offset of the fragment in the overlay
+- * @pathp: pointer which receives the path of the target (or NULL)
+- *
+- * fdt_overlay_target_offset() retrieves the target offset in the base
+- * device tree of a fragment, no matter how the actual targeting is
+- * done (through a phandle or a path)
+- *
+- * returns:
+- * the targeted node offset in the base device tree
+- * Negative error code on error
+- */
+-int fdt_overlay_target_offset(const void *fdt, const void *fdto,
+- int fragment_offset, char const **pathp);
+-
+ /**********************************************************************/
+ /* Debugging / informational functions */
+ /**********************************************************************/
+diff --git a/libfdt/version.lds b/libfdt/version.lds
+index cbce5d4..7ab85f1 100644
+--- a/libfdt/version.lds
++++ b/libfdt/version.lds
+@@ -77,7 +77,6 @@ LIBFDT_1.2 {
+ fdt_appendprop_addrrange;
+ fdt_setprop_inplace_namelen_partial;
+ fdt_create_with_flags;
+- fdt_overlay_target_offset;
+ local:
+ *;
+ };
+--
+2.19.1
+
diff --git a/meta/recipes-devtools/python/python3-dtc_1.7.0.bb b/meta/recipes-devtools/python/python3-dtc_1.7.0.bb
new file mode 100644
index 0000000000..85e48d4694
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-dtc_1.7.0.bb
@@ -0,0 +1,25 @@
+SUMMARY = "Python Library for the Device Tree Compiler"
+HOMEPAGE = "https://devicetree.org/"
+DESCRIPTION = "A python library for the Device Tree Compiler, a tool used to manipulate Device Tree files which contain a data structure for describing hardware."
+SECTION = "bootloader"
+LICENSE = "GPL-2.0-only | BSD-2-Clause"
+
+DEPENDS = "flex-native bison-native swig-native python3-setuptools-scm-native libyaml dtc"
+
+SRC_URI = "git://git.kernel.org/pub/scm/utils/dtc/dtc.git;branch=master \
+ file://0001-Revert-libfdt-overlay-make-overlay_get_target-public.patch \
+ "
+
+UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>\d+(\.\d+)+)"
+
+LIC_FILES_CHKSUM = "file://pylibfdt/libfdt.i;beginline=1;endline=6;md5=afda088c974174a29108c8d80b5dce90"
+
+SRCREV = "039a99414e778332d8f9c04cbd3072e1dcc62798"
+
+S = "${WORKDIR}/git"
+
+PYPA_WHEEL = "${S}/dist/libfdt-1.6.2*.whl"
+
+inherit setuptools3 pkgconfig
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-dtschema_2024.4.bb b/meta/recipes-devtools/python/python3-dtschema_2024.4.bb
new file mode 100644
index 0000000000..9583cd57b9
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-dtschema_2024.4.bb
@@ -0,0 +1,20 @@
+SUMMARY = "Tooling for devicetree validation using YAML and jsonschema"
+HOMEPAGE = "https://github.com/devicetree-org/dt-schema"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=457495c8fa03540db4a576bf7869e811"
+
+inherit pypi python_setuptools_build_meta
+
+PYPI_PACKAGE = "dtschema"
+
+SRC_URI[sha256sum] = "18dd1d34b4a5e451291e5444e9ceb4a6febc605871cdaef22673b6f80aa4a131"
+
+DEPENDS += "python3-setuptools-scm-native"
+RDEPENDS:${PN} += "\
+ python3-dtc \
+ python3-jsonschema \
+ python3-rfc3987 \
+ python3-ruamel-yaml \
+ "
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-editables_0.5.bb b/meta/recipes-devtools/python/python3-editables_0.5.bb
new file mode 100644
index 0000000000..f3261183cb
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-editables_0.5.bb
@@ -0,0 +1,15 @@
+SUMMARY = "A Python library for creating editable wheels"
+HOMEPAGE = "https://github.com/pfmoore/editables"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=41bc1be47b7bb8240db3ef928c7cb0bf"
+
+SRC_URI[sha256sum] = "309627d9b5c4adc0e668d8c6fa7bac1ba7c8c5d415c2d27f60f081f8e80d1de2"
+
+inherit pypi python_setuptools_build_meta
+
+RDEPENDS:${PN} += "\
+ python3-io \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-flit-core_3.9.0.bb b/meta/recipes-devtools/python/python3-flit-core_3.9.0.bb
new file mode 100644
index 0000000000..b0bef4b6b6
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-flit-core_3.9.0.bb
@@ -0,0 +1,37 @@
+SUMMARY = "This provides a PEP 517 build backend for packages using Flit."
+DESCRIPTION = "This provides a PEP 517 build backend for packages using \
+Flit. The only public interface is the API specified by PEP 517, at \
+flit_core.buildapi."
+HOMEPAGE = "https://github.com/pypa/flit"
+BUGTRACKER = "https://github.com/pypa/flit/issues"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=41eb78fa8a872983a882c694a8305f08"
+
+SRC_URI[sha256sum] = "d75edf5eb324da20d53570a6a6f87f51e606eee8384925cd66a90611140844c7"
+
+inherit pypi python_flit_core
+
+# Need to install by hand as there's a dependency loop
+DEPENDS:remove:class-native = " python3-build-native python3-installer-native"
+DEPENDS:append:class-native = " unzip-native"
+
+# We need the full flit tarball
+PYPI_PACKAGE = "flit"
+PEP517_SOURCE_PATH = "${S}/flit_core"
+
+do_compile:class-native () {
+ python_flit_core_do_manual_build
+}
+
+do_install:class-native () {
+ python_pep517_do_bootstrap_install
+}
+
+PACKAGES =+ "${PN}-tests"
+
+FILES:${PN}-tests += "\
+ ${PYTHON_SITEPACKAGES_DIR}/flit_core/tests/* \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-git_2.1.11.bb b/meta/recipes-devtools/python/python3-git_2.1.11.bb
deleted file mode 100644
index ac320fa56b..0000000000
--- a/meta/recipes-devtools/python/python3-git_2.1.11.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-require python-git.inc
-inherit setuptools3
diff --git a/meta/recipes-devtools/python/python3-git_3.1.43.bb b/meta/recipes-devtools/python/python3-git_3.1.43.bb
new file mode 100644
index 0000000000..45c988117b
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-git_3.1.43.bb
@@ -0,0 +1,32 @@
+SUMMARY = "Python library used to interact with Git repositories"
+DESCRIPTION = "GitPython provides object model read and write access to \
+a git repository. Access repository information conveniently, alter the \
+index directly, handle remotes, or go down to low-level object database \
+access with big-files support."
+HOMEPAGE = "http://github.com/gitpython-developers/GitPython"
+SECTION = "devel/python"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=5279a7ab369ba336989dcf2a107e5c8e"
+
+PYPI_PACKAGE = "GitPython"
+
+inherit pypi python_setuptools_build_meta
+
+SRC_URI[sha256sum] = "35f314a9f878467f5453cc1fee295c3e18e52f1b99f10f6cf5b1682e968a9e7c"
+
+DEPENDS += " python3-gitdb"
+
+RDEPENDS:${PN} += " \
+ python3-datetime \
+ python3-gitdb \
+ python3-io \
+ python3-logging \
+ python3-math \
+ python3-netclient \
+ python3-stringold \
+ python3-unittest \
+ python3-unixadmin \
+ git \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-gitdb_2.0.5.bb b/meta/recipes-devtools/python/python3-gitdb_2.0.5.bb
deleted file mode 100644
index fe158327cb..0000000000
--- a/meta/recipes-devtools/python/python3-gitdb_2.0.5.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-inherit setuptools3
-require python-gitdb.inc
diff --git a/meta/recipes-devtools/python/python3-gitdb_4.0.11.bb b/meta/recipes-devtools/python/python3-gitdb_4.0.11.bb
new file mode 100644
index 0000000000..25e1a2df7e
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-gitdb_4.0.11.bb
@@ -0,0 +1,22 @@
+SUMMARY = "A pure-Python git object database"
+HOMEPAGE = "http://github.com/gitpython-developers/gitdb"
+SECTION = "devel/python"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=59e5ecb13339a936eedf83282eaf4528"
+
+DEPENDS = "python3-smmap"
+
+inherit pypi setuptools3
+
+PYPI_PACKAGE = "gitdb"
+
+SRC_URI[sha256sum] = "bf5421126136d6d0af55bc1e7c1af1c397a34f5b7bd79e776cd3e89785c2b04b"
+
+RDEPENDS:${PN} += "python3-compression \
+ python3-crypt \
+ python3-io \
+ python3-mmap \
+ python3-shell \
+ python3-smmap \
+"
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-hatch-fancy-pypi-readme_24.1.0.bb b/meta/recipes-devtools/python/python3-hatch-fancy-pypi-readme_24.1.0.bb
new file mode 100644
index 0000000000..1e5c67f832
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-hatch-fancy-pypi-readme_24.1.0.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Hatch plugin for fancy PyPI readmes "
+HOMEPAGE = "https://pypi.org/project/hatch-fancy-pypi-readme/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=ba5633c60bd3e243091013aa83b4d807"
+
+inherit pypi python_hatchling
+
+PYPI_PACKAGE = "hatch_fancy_pypi_readme"
+
+SRC_URI[sha256sum] = "44dd239f1a779b9dcf8ebc9401a611fd7f7e3e14578dcf22c265dfaf7c1514b8"
+
+BBCLASSEXTEND = "native nativesdk"
+
+UPSTREAM_CHECK_REGEX = "/hatch-fancy-pypi-readme/(?P<pver>(\d+[\.\-_]*)+)/"
diff --git a/meta/recipes-devtools/python/python3-hatch-vcs_0.4.0.bb b/meta/recipes-devtools/python/python3-hatch-vcs_0.4.0.bb
new file mode 100644
index 0000000000..2e49aba469
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-hatch-vcs_0.4.0.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Hatch plugin for versioning with your preferred VCS"
+HOMEPAGE = "https://pypi.org/project/hatch-vcs/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=26501cfd0bbddf830ee820e95551fa3d"
+
+inherit pypi python_hatchling
+
+PYPI_PACKAGE = "hatch_vcs"
+
+SRC_URI[sha256sum] = "093810748fe01db0d451fabcf2c1ac2688caefd232d4ede967090b1c1b07d9f7"
+
+BBCLASSEXTEND = "native nativesdk"
+
+UPSTREAM_CHECK_REGEX = "/hatch-vcs/(?P<pver>(\d+[\.\-_]*)+)/"
diff --git a/meta/recipes-devtools/python/python3-hatchling_1.24.1.bb b/meta/recipes-devtools/python/python3-hatchling_1.24.1.bb
new file mode 100644
index 0000000000..fc8d953281
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-hatchling_1.24.1.bb
@@ -0,0 +1,17 @@
+SUMMARY = "The extensible, standards compliant build backend used by Hatch"
+HOMEPAGE = "https://hatch.pypa.io/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=cbe2fd33fc9297692812fc94b7d27fd9"
+
+inherit pypi python_hatchling
+
+DEPENDS += "python3-pluggy-native python3-pathspec-native python3-packaging-native python3-editables-native python3-trove-classifiers-native"
+DEPENDS:remove:class-native = "python3-hatchling-native"
+
+SRC_URI[sha256sum] = "51f861891e98c4044eb455163a737e5d2328d7aa74890b182db2d80fee22a497"
+
+do_compile:prepend() {
+ export PYTHONPATH=src
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-hypothesis/run-ptest b/meta/recipes-devtools/python/python3-hypothesis/run-ptest
new file mode 100644
index 0000000000..54f6e7930f
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-hypothesis/run-ptest
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+# Upstream "fast" tests take about 5 minutes and currently do not run cleanly
+# (tests/cover and tests/pytest)
+# https://github.com/HypothesisWorks/hypothesis/tree/master/hypothesis-python/tests
+# https://github.com/HypothesisWorks/hypothesis/blob/master/hypothesis-python/scripts/basic-test.sh#L18
+#
+# Instead we run two test suites imported from examples/
+
+pytest --automake
diff --git a/meta/recipes-devtools/python/python3-hypothesis/test_binary_search.py b/meta/recipes-devtools/python/python3-hypothesis/test_binary_search.py
new file mode 100644
index 0000000000..21267c4ac2
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-hypothesis/test_binary_search.py
@@ -0,0 +1,135 @@
+# This file is part of Hypothesis, which may be found at
+# https://github.com/HypothesisWorks/hypothesis/
+#
+# Most of this work is copyright (C) 2013-2021 David R. MacIver
+# (david@drmaciver.com), but it contains contributions by others. See
+# CONTRIBUTING.rst for a full list of people who may hold copyright, and
+# consult the git log if you need to determine who owns an individual
+# contribution.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public License,
+# v. 2.0. If a copy of the MPL was not distributed with this file, You can
+# obtain one at https://mozilla.org/MPL/2.0/.
+#
+# END HEADER
+#
+# SPDX-License-Identifier: MPL-2.0
+
+"""This file demonstrates testing a binary search.
+
+It's a useful example because the result of the binary search is so clearly
+determined by the invariants it must satisfy, so we can simply test for those
+invariants.
+
+It also demonstrates the useful testing technique of testing how the answer
+should change (or not) in response to movements in the underlying data.
+"""
+
+from hypothesis import given, strategies as st
+
+
+def binary_search(ls, v):
+ """Take a list ls and a value v such that ls is sorted and v is comparable
+ with the elements of ls.
+
+ Return an index i such that 0 <= i <= len(v) with the properties:
+
+ 1. ls.insert(i, v) is sorted
+ 2. ls.insert(j, v) is not sorted for j < i
+ """
+ # Without this check we will get an index error on the next line when the
+ # list is empty.
+ if not ls:
+ return 0
+
+ # Without this check we will miss the case where the insertion point should
+ # be zero: The invariant we maintain in the next section is that lo is
+ # always strictly lower than the insertion point.
+ if v <= ls[0]:
+ return 0
+
+ # Invariant: There is no insertion point i with i <= lo
+ lo = 0
+
+ # Invariant: There is an insertion point i with i <= hi
+ hi = len(ls)
+ while lo + 1 < hi:
+ mid = (lo + hi) // 2
+ if v > ls[mid]:
+ # Inserting v anywhere below mid would result in an unsorted list
+ # because it's > the value at mid. Therefore mid is a valid new lo
+ lo = mid
+ # Uncommenting the following lines will cause this to return a valid
+ # insertion point which is not always minimal.
+ # elif v == ls[mid]:
+ # return mid
+ else:
+ # Either v == ls[mid] in which case mid is a valid insertion point
+ # or v < ls[mid], in which case all valid insertion points must be
+ # < hi. Either way, mid is a valid new hi.
+ hi = mid
+ assert lo + 1 == hi
+ # We now know that there is a valid insertion point <= hi and there is no
+ # valid insertion point < hi because hi - 1 is lo. Therefore hi is the
+ # answer we were seeking
+ return hi
+
+
+def is_sorted(ls):
+ """Is this list sorted?"""
+ for i in range(len(ls) - 1):
+ if ls[i] > ls[i + 1]:
+ return False
+ return True
+
+
+Values = st.integers()
+
+# We generate arbitrary lists and turn this into generating sorting lists
+# by just sorting them.
+SortedLists = st.lists(Values).map(sorted)
+
+# We could also do it this way, but that would be a bad idea:
+# SortedLists = st.lists(Values).filter(is_sorted)
+# The problem is that Hypothesis will only generate long sorted lists with very
+# low probability, so we are much better off post-processing values into the
+# form we want than filtering them out.
+
+
+@given(ls=SortedLists, v=Values)
+def test_insert_is_sorted(ls, v):
+ """We test the first invariant: binary_search should return an index such
+ that inserting the value provided at that index would result in a sorted
+ set."""
+ ls.insert(binary_search(ls, v), v)
+ assert is_sorted(ls)
+
+
+@given(ls=SortedLists, v=Values)
+def test_is_minimal(ls, v):
+ """We test the second invariant: binary_search should return an index such
+ that no smaller index is a valid insertion point for v."""
+ for i in range(binary_search(ls, v)):
+ ls2 = list(ls)
+ ls2.insert(i, v)
+ assert not is_sorted(ls2)
+
+
+@given(ls=SortedLists, v=Values)
+def test_inserts_into_same_place_twice(ls, v):
+ """In this we test a *consequence* of the second invariant: When we insert
+ a value into a list twice, the insertion point should be the same both
+ times. This is because we know that v is > the previous element and == the
+ next element.
+
+ In theory if the former passes, this should always pass. In practice,
+ failures are detected by this test with much higher probability because it
+ deliberately puts the data into a shape that is likely to trigger a
+ failure.
+
+ This is an instance of a good general category of test: Testing how the
+ function moves in responses to changes in the underlying data.
+ """
+ i = binary_search(ls, v)
+ ls.insert(i, v)
+ assert binary_search(ls, v) == i
diff --git a/meta/recipes-devtools/python/python3-hypothesis/test_rle.py b/meta/recipes-devtools/python/python3-hypothesis/test_rle.py
new file mode 100644
index 0000000000..4d618865ac
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-hypothesis/test_rle.py
@@ -0,0 +1,101 @@
+# This file is part of Hypothesis, which may be found at
+# https://github.com/HypothesisWorks/hypothesis/
+#
+# Most of this work is copyright (C) 2013-2021 David R. MacIver
+# (david@drmaciver.com), but it contains contributions by others. See
+# CONTRIBUTING.rst for a full list of people who may hold copyright, and
+# consult the git log if you need to determine who owns an individual
+# contribution.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public License,
+# v. 2.0. If a copy of the MPL was not distributed with this file, You can
+# obtain one at https://mozilla.org/MPL/2.0/.
+#
+# END HEADER
+#
+# SPDX-License-Identifier: MPL-2.0
+
+"""This example demonstrates testing a run length encoding scheme. That is, we
+take a sequence and represent it by a shorter sequence where each 'run' of
+consecutive equal elements is represented as a single element plus a count. So
+e.g.
+
+[1, 1, 1, 1, 2, 1] is represented as [[1, 4], [2, 1], [1, 1]]
+
+This demonstrates the useful decode(encode(x)) == x invariant that is often
+a fruitful source of testing with Hypothesis.
+
+It also has an example of testing invariants in response to changes in the
+underlying data.
+"""
+
+from hypothesis import assume, given, strategies as st
+
+
+def run_length_encode(seq):
+ """Encode a sequence as a new run-length encoded sequence."""
+ if not seq:
+ return []
+ # By starting off the count at zero we simplify the iteration logic
+ # slightly.
+ result = [[seq[0], 0]]
+ for s in seq:
+ if (
+ # If you uncomment this line this branch will be skipped and we'll
+ # always append a new run of length 1. Note which tests fail.
+ # False and
+ s
+ == result[-1][0]
+ # Try uncommenting this line and see what problems occur:
+ # and result[-1][-1] < 2
+ ):
+ result[-1][1] += 1
+ else:
+ result.append([s, 1])
+ return result
+
+
+def run_length_decode(seq):
+ """Take a previously encoded sequence and reconstruct the original from
+ it."""
+ result = []
+ for s, i in seq:
+ for _ in range(i):
+ result.append(s)
+ return result
+
+
+# We use lists of a type that should have a relatively high duplication rate,
+# otherwise we'd almost never get any runs.
+Lists = st.lists(st.integers(0, 10))
+
+
+@given(Lists)
+def test_decodes_to_starting_sequence(ls):
+ """If we encode a sequence and then decode the result, we should get the
+ original sequence back.
+
+ Otherwise we've done something very wrong.
+ """
+ assert run_length_decode(run_length_encode(ls)) == ls
+
+
+@given(Lists, st.data())
+def test_duplicating_an_element_does_not_increase_length(ls, data):
+ """The previous test could be passed by simply returning the input sequence
+ so we need something that tests the compression property of our encoding.
+
+ In this test we deliberately introduce or extend a run and assert
+ that this does not increase the length of our encoding, because they
+ should be part of the same run in the final result.
+ """
+ # We use assume to get a valid index into the list. We could also have used
+ # e.g. flatmap, but this is relatively straightforward and will tend to
+ # perform better.
+ assume(ls)
+ i = data.draw(st.integers(0, len(ls) - 1))
+ ls2 = list(ls)
+ # duplicating the value at i right next to it guarantees they are part of
+ # the same run in the resulting compression.
+ ls2.insert(i, ls2[i])
+ assert len(run_length_encode(ls2)) == len(run_length_encode(ls))
diff --git a/meta/recipes-devtools/python/python3-hypothesis_6.100.1.bb b/meta/recipes-devtools/python/python3-hypothesis_6.100.1.bb
new file mode 100644
index 0000000000..af7facfe7e
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-hypothesis_6.100.1.bb
@@ -0,0 +1,39 @@
+SUMMARY = "A library for property-based testing"
+HOMEPAGE = "https://github.com/HypothesisWorks/hypothesis/tree/master/hypothesis-python"
+LICENSE = "MPL-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=4ee62c16ebd0f4f99d906f36b7de8c3c"
+
+PYPI_PACKAGE = "hypothesis"
+
+inherit pypi setuptools3 ptest
+
+SRC_URI += " \
+ file://run-ptest \
+ file://test_binary_search.py \
+ file://test_rle.py \
+ "
+
+SRC_URI[sha256sum] = "ebff09d7fa4f1fb6a855a812baf17e578b4481b7b70ec6d96496210d1a4c6c35"
+
+RDEPENDS:${PN} += " \
+ python3-attrs \
+ python3-compression \
+ python3-core \
+ python3-json \
+ python3-pytest \
+ python3-sortedcontainers \
+ python3-statistics \
+ python3-unittest \
+ "
+
+RDEPENDS:${PN}-ptest += " \
+ python3-unittest-automake-output \
+ "
+
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}/examples
+ install -m 0755 ${WORKDIR}/test_binary_search.py ${D}${PTEST_PATH}/examples/
+ install -m 0755 ${WORKDIR}/test_rle.py ${D}${PTEST_PATH}/examples/
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-idna_3.7.bb b/meta/recipes-devtools/python/python3-idna_3.7.bb
new file mode 100644
index 0000000000..729aff1c46
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-idna_3.7.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Internationalised Domain Names in Applications"
+HOMEPAGE = "https://github.com/kjd/idna"
+LICENSE = "BSD-3-Clause & Python-2.0 & Unicode-TOU"
+LIC_FILES_CHKSUM = "file://LICENSE.md;md5=204c0612e40a4dd46012a78d02c80fb1"
+
+SRC_URI[sha256sum] = "028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"
+
+inherit pypi python_flit_core
+
+RDEPENDS:${PN}:class-target = "\
+ python3-codecs \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-imagesize_1.4.1.bb b/meta/recipes-devtools/python/python3-imagesize_1.4.1.bb
new file mode 100644
index 0000000000..4edac0a533
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-imagesize_1.4.1.bb
@@ -0,0 +1,13 @@
+SUMMARY = "Parses image files’ header and return image size."
+HOMEPAGE = "https://github.com/shibukawa/imagesize_py"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=0c128f0f7e8a02e1b83884c0b5a41cda"
+
+SRC_URI[sha256sum] = "69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"
+
+inherit setuptools3 pypi
+
+BBCLASSEXTEND = "native nativesdk"
+
+RDEPENDS:${PN} = "python3-xml"
diff --git a/meta/recipes-devtools/python/python3-importlib-metadata_7.1.0.bb b/meta/recipes-devtools/python/python3-importlib-metadata_7.1.0.bb
new file mode 100644
index 0000000000..fdb37cecef
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-importlib-metadata_7.1.0.bb
@@ -0,0 +1,20 @@
+SUMMARY = "Read metadata from Python packages"
+HOMEPAGE = "https://pypi.org/project/importlib-metadata/"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+inherit pypi python_setuptools_build_meta
+
+PYPI_PACKAGE = "importlib_metadata"
+UPSTREAM_CHECK_REGEX = "/importlib-metadata/(?P<pver>(\d+[\.\-_]*)+)/"
+
+SRC_URI[sha256sum] = "b78938b926ee8d5f020fc4772d487045805a55ddbad2ecf21c6d60938dc7fcd2"
+
+S = "${WORKDIR}/importlib_metadata-${PV}"
+
+DEPENDS += "python3-setuptools-scm-native python3-toml-native"
+RDEPENDS:${PN} += "python3-zipp python3-pathlib2"
+RDEPENDS:${PN}:append:class-target = " python3-misc"
+RDEPENDS:${PN}:append:class-nativesdk = " python3-misc"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-iniconfig_2.0.0.bb b/meta/recipes-devtools/python/python3-iniconfig_2.0.0.bb
new file mode 100644
index 0000000000..2abeec62f4
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-iniconfig_2.0.0.bb
@@ -0,0 +1,13 @@
+SUMMARY = "A small and simple INI-file parser module"
+HOMEPAGE = "https://pypi.org/project/iniconfig/"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=a6bb0320b04a0a503f12f69fea479de9"
+
+SRC_URI[sha256sum] = "2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"
+
+DEPENDS += "python3-hatch-vcs-native"
+
+inherit pypi python_hatchling
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-iniparse/0001-Add-python-3-compatibility.patch b/meta/recipes-devtools/python/python3-iniparse/0001-Add-python-3-compatibility.patch
deleted file mode 100644
index 44090a20d0..0000000000
--- a/meta/recipes-devtools/python/python3-iniparse/0001-Add-python-3-compatibility.patch
+++ /dev/null
@@ -1,552 +0,0 @@
-From 8a98e4d44a5e59439a4b6bd95368cc362412c995 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Fri, 24 Mar 2017 18:06:08 +0200
-Subject: [PATCH] Add python 3 compatibility.
-
-Taken from
-http://pkgs.fedoraproject.org/cgit/rpms/python-iniparse.git/tree/python-iniparse-python3-compat.patch
-
-Upstream-Status: Inappropriate [upstream is defunct]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- iniparse/__init__.py | 20 ++++++++++----------
- iniparse/compat.py | 30 ++++++++++++++++--------------
- iniparse/config.py | 16 ++++++++--------
- iniparse/configparser.py | 7 +++++++
- iniparse/ini.py | 20 ++++++++++++--------
- iniparse/utils.py | 4 ++--
- tests/__init__.py | 14 +++++++-------
- tests/test_compat.py | 23 +++++++++++++++--------
- tests/test_fuzz.py | 18 +++++++++---------
- tests/test_ini.py | 8 ++++----
- tests/test_misc.py | 4 ++--
- tests/test_tidy.py | 2 +-
- tests/test_unicode.py | 10 +++++-----
- 13 files changed, 98 insertions(+), 78 deletions(-)
- create mode 100644 iniparse/configparser.py
-
-diff --git a/iniparse/__init__.py b/iniparse/__init__.py
-index 8de756f..7193f92 100644
---- a/iniparse/__init__.py
-+++ b/iniparse/__init__.py
-@@ -3,17 +3,17 @@
- # Copyright (c) 2007 Tim Lauridsen <tla@rasmil.dk>
- # All Rights Reserved. See LICENSE-PSF & LICENSE for details.
-
--from ini import INIConfig, change_comment_syntax
--from config import BasicConfig, ConfigNamespace
--from compat import RawConfigParser, ConfigParser, SafeConfigParser
--from utils import tidy
-+from .ini import INIConfig, change_comment_syntax
-+from .config import BasicConfig, ConfigNamespace
-+from .compat import RawConfigParser, ConfigParser, SafeConfigParser
-+from .utils import tidy
-
--from ConfigParser import DuplicateSectionError, \
-- NoSectionError, NoOptionError, \
-- InterpolationMissingOptionError, \
-- InterpolationDepthError, \
-- InterpolationSyntaxError, \
-- DEFAULTSECT, MAX_INTERPOLATION_DEPTH
-+from .configparser import DuplicateSectionError, \
-+ NoSectionError, NoOptionError, \
-+ InterpolationMissingOptionError, \
-+ InterpolationDepthError, \
-+ InterpolationSyntaxError, \
-+ DEFAULTSECT, MAX_INTERPOLATION_DEPTH
-
- __all__ = [
- 'BasicConfig', 'ConfigNamespace',
-diff --git a/iniparse/compat.py b/iniparse/compat.py
-index db89ed8..f95c25c 100644
---- a/iniparse/compat.py
-+++ b/iniparse/compat.py
-@@ -12,19 +12,21 @@ The underlying INIConfig object can be accessed as cfg.data
- """
-
- import re
--from ConfigParser import DuplicateSectionError, \
-- NoSectionError, NoOptionError, \
-- InterpolationMissingOptionError, \
-- InterpolationDepthError, \
-- InterpolationSyntaxError, \
-- DEFAULTSECT, MAX_INTERPOLATION_DEPTH
-+from .configparser import DuplicateSectionError, \
-+ NoSectionError, NoOptionError, \
-+ InterpolationMissingOptionError, \
-+ InterpolationDepthError, \
-+ InterpolationSyntaxError, \
-+ DEFAULTSECT, MAX_INTERPOLATION_DEPTH
-
- # These are imported only for compatiability.
- # The code below does not reference them directly.
--from ConfigParser import Error, InterpolationError, \
-- MissingSectionHeaderError, ParsingError
-+from .configparser import Error, InterpolationError, \
-+ MissingSectionHeaderError, ParsingError
-
--import ini
-+import six
-+
-+from . import ini
-
- class RawConfigParser(object):
- def __init__(self, defaults=None, dict_type=dict):
-@@ -56,7 +58,7 @@ class RawConfigParser(object):
- # The default section is the only one that gets the case-insensitive
- # treatment - so it is special-cased here.
- if section.lower() == "default":
-- raise ValueError, 'Invalid section name: %s' % section
-+ raise ValueError('Invalid section name: %s' % section)
-
- if self.has_section(section):
- raise DuplicateSectionError(section)
-@@ -88,7 +90,7 @@ class RawConfigParser(object):
- filename may also be given.
- """
- files_read = []
-- if isinstance(filenames, basestring):
-+ if isinstance(filenames, six.string_types):
- filenames = [filenames]
- for filename in filenames:
- try:
-@@ -143,7 +145,7 @@ class RawConfigParser(object):
- def getboolean(self, section, option):
- v = self.get(section, option)
- if v.lower() not in self._boolean_states:
-- raise ValueError, 'Not a boolean: %s' % v
-+ raise ValueError('Not a boolean: %s' % v)
- return self._boolean_states[v.lower()]
-
- def has_option(self, section, option):
-@@ -234,7 +236,7 @@ class ConfigParser(RawConfigParser):
- if "%(" in value:
- try:
- value = value % vars
-- except KeyError, e:
-+ except KeyError as e:
- raise InterpolationMissingOptionError(
- option, section, rawval, e.args[0])
- else:
-@@ -283,7 +285,7 @@ class SafeConfigParser(ConfigParser):
- _badpercent_re = re.compile(r"%[^%]|%$")
-
- def set(self, section, option, value):
-- if not isinstance(value, basestring):
-+ if not isinstance(value, six.string_types):
- raise TypeError("option values must be strings")
- # check for bad percent signs:
- # first, replace all "good" interpolations
-diff --git a/iniparse/config.py b/iniparse/config.py
-index 5cfa2ea..3b28549 100644
---- a/iniparse/config.py
-+++ b/iniparse/config.py
-@@ -143,7 +143,7 @@ class BasicConfig(ConfigNamespace):
-
- >>> n.aaa = 42
- >>> del n.x
-- >>> print n
-+ >>> print(n)
- aaa = 42
- name.first = paramjit
- name.last = oberoi
-@@ -152,7 +152,7 @@ class BasicConfig(ConfigNamespace):
-
- >>> isinstance(n.name, ConfigNamespace)
- True
-- >>> print n.name
-+ >>> print(n.name)
- first = paramjit
- last = oberoi
- >>> sorted(list(n.name))
-@@ -160,7 +160,7 @@ class BasicConfig(ConfigNamespace):
-
- Finally, values can be read from a file as follows:
-
-- >>> from StringIO import StringIO
-+ >>> from six import StringIO
- >>> sio = StringIO('''
- ... # comment
- ... ui.height = 100
-@@ -171,7 +171,7 @@ class BasicConfig(ConfigNamespace):
- ... ''')
- >>> n = BasicConfig()
- >>> n._readfp(sio)
-- >>> print n
-+ >>> print(n)
- complexity = medium
- data.secret.password = goodness=gracious me
- have_python
-@@ -199,7 +199,7 @@ class BasicConfig(ConfigNamespace):
-
- def __str__(self, prefix=''):
- lines = []
-- keys = self._data.keys()
-+ keys = list(self._data.keys())
- keys.sort()
- for name in keys:
- value = self._data[name]
-@@ -258,7 +258,7 @@ def update_config(target, source):
- >>> n.ui.display_clock = True
- >>> n.ui.display_qlength = True
- >>> n.ui.width = 150
-- >>> print n
-+ >>> print(n)
- playlist.expand_playlist = True
- ui.display_clock = True
- ui.display_qlength = True
-@@ -267,7 +267,7 @@ def update_config(target, source):
- >>> from iniparse import ini
- >>> i = ini.INIConfig()
- >>> update_config(i, n)
-- >>> print i
-+ >>> print(i)
- [playlist]
- expand_playlist = True
- <BLANKLINE>
-@@ -277,7 +277,7 @@ def update_config(target, source):
- width = 150
-
- """
-- for name in source:
-+ for name in sorted(source):
- value = source[name]
- if isinstance(value, ConfigNamespace):
- if name in target:
-diff --git a/iniparse/configparser.py b/iniparse/configparser.py
-new file mode 100644
-index 0000000..c543d50
---- /dev/null
-+++ b/iniparse/configparser.py
-@@ -0,0 +1,7 @@
-+try:
-+ from ConfigParser import *
-+ # not all objects get imported with __all__
-+ from ConfigParser import Error, InterpolationMissingOptionError
-+except ImportError:
-+ from configparser import *
-+ from configparser import Error, InterpolationMissingOptionError
-diff --git a/iniparse/ini.py b/iniparse/ini.py
-index 408354d..052d9e9 100644
---- a/iniparse/ini.py
-+++ b/iniparse/ini.py
-@@ -7,7 +7,7 @@
-
- Example:
-
-- >>> from StringIO import StringIO
-+ >>> from six import StringIO
- >>> sio = StringIO('''# configure foo-application
- ... [foo]
- ... bar1 = qualia
-@@ -16,14 +16,14 @@ Example:
- ... special = 1''')
-
- >>> cfg = INIConfig(sio)
-- >>> print cfg.foo.bar1
-+ >>> print(cfg.foo.bar1)
- qualia
-- >>> print cfg['foo-ext'].special
-+ >>> print(cfg['foo-ext'].special)
- 1
- >>> cfg.foo.newopt = 'hi!'
- >>> cfg.baz.enabled = 0
-
-- >>> print cfg
-+ >>> print(cfg)
- # configure foo-application
- [foo]
- bar1 = qualia
-@@ -42,9 +42,11 @@ Example:
- # Backward-compatiable with ConfigParser
-
- import re
--from ConfigParser import DEFAULTSECT, ParsingError, MissingSectionHeaderError
-+from .configparser import DEFAULTSECT, ParsingError, MissingSectionHeaderError
-
--import config
-+import six
-+
-+from . import config
-
- class LineType(object):
- line = None
-@@ -278,6 +280,8 @@ class LineContainer(object):
- value = property(get_value, set_value)
-
- def __str__(self):
-+ for c in self.contents:
-+ pass#print(c.__str__())
- s = [x.__str__() for x in self.contents]
- return '\n'.join(s)
-
-@@ -465,7 +469,7 @@ class INIConfig(config.ConfigNamespace):
- self._sections = {}
- if defaults is None: defaults = {}
- self._defaults = INISection(LineContainer(), optionxformsource=self)
-- for name, value in defaults.iteritems():
-+ for name, value in defaults.items():
- self._defaults[name] = value
- if fp is not None:
- self._readfp(fp)
-@@ -551,7 +555,7 @@ class INIConfig(config.ConfigNamespace):
-
- for line in readline_iterator(fp):
- # Check for BOM on first line
-- if linecount == 0 and isinstance(line, unicode):
-+ if linecount == 0 and isinstance(line, six.text_type):
- if line[0] == u'\ufeff':
- line = line[1:]
- self._bom = True
-diff --git a/iniparse/utils.py b/iniparse/utils.py
-index 829fc28..f8b773a 100644
---- a/iniparse/utils.py
-+++ b/iniparse/utils.py
-@@ -1,5 +1,5 @@
--import compat
--from ini import LineContainer, EmptyLine
-+from . import compat
-+from .ini import LineContainer, EmptyLine
-
- def tidy(cfg):
- """Clean up blank lines.
-diff --git a/tests/__init__.py b/tests/__init__.py
-index f1fa321..88689fb 100644
---- a/tests/__init__.py
-+++ b/tests/__init__.py
-@@ -1,12 +1,12 @@
- import unittest, doctest
-
--import test_ini
--import test_misc
--import test_fuzz
--import test_compat
--import test_unicode
--import test_tidy
--import test_multiprocessing
-+from . import test_ini
-+from . import test_misc
-+from . import test_fuzz
-+from . import test_compat
-+from . import test_unicode
-+from . import test_tidy
-+from . import test_multiprocessing
- from iniparse import config
- from iniparse import ini
-
-diff --git a/tests/test_compat.py b/tests/test_compat.py
-index b8da3d5..b6dfb5c 100644
---- a/tests/test_compat.py
-+++ b/tests/test_compat.py
-@@ -1,9 +1,16 @@
- from iniparse import compat as ConfigParser
--import StringIO
-+from six import StringIO
-+try:
-+ import UserDict
-+except ImportError:
-+ import collections as UserDict
- import unittest
--import UserDict
-
--from test import test_support
-+import sys
-+if sys.version_info[0] < 3:
-+ from test import test_support
-+else:
-+ from test import support as test_support
-
- class SortedDict(UserDict.UserDict):
- def items(self):
-@@ -35,7 +42,7 @@ class TestCaseBase(unittest.TestCase):
-
- def fromstring(self, string, defaults=None):
- cf = self.newconfig(defaults)
-- sio = StringIO.StringIO(string)
-+ sio = StringIO(string)
- cf.readfp(sio)
- return cf
-
-@@ -161,7 +168,7 @@ class TestCaseBase(unittest.TestCase):
- "No Section!\n")
-
- def parse_error(self, exc, src):
-- sio = StringIO.StringIO(src)
-+ sio = StringIO(src)
- self.assertRaises(exc, self.cf.readfp, sio)
-
- def test_query_errors(self):
-@@ -181,7 +188,7 @@ class TestCaseBase(unittest.TestCase):
- def get_error(self, exc, section, option):
- try:
- self.cf.get(section, option)
-- except exc, e:
-+ except exc as e:
- return e
- else:
- self.fail("expected exception type %s.%s"
-@@ -227,7 +234,7 @@ class TestCaseBase(unittest.TestCase):
- "foo: another very\n"
- " long line"
- )
-- output = StringIO.StringIO()
-+ output = StringIO()
- cf.write(output)
- self.assertEqual(
- output.getvalue(),
-@@ -465,7 +472,7 @@ class SortedTestCase(RawConfigParserTestCase):
- "o1=4\n"
- "[a]\n"
- "k=v\n")
-- output = StringIO.StringIO()
-+ output = StringIO()
- self.cf.write(output)
- self.assertEquals(output.getvalue(),
- "[a]\n"
-diff --git a/tests/test_fuzz.py b/tests/test_fuzz.py
-index 5420dcc..b219500 100644
---- a/tests/test_fuzz.py
-+++ b/tests/test_fuzz.py
-@@ -1,9 +1,10 @@
- import re
- import os
- import random
-+import sys
- import unittest
--import ConfigParser
--from StringIO import StringIO
-+from six import StringIO
-+from six.moves import configparser
- from iniparse import compat, ini, tidy
-
- # TODO:
-@@ -96,24 +97,25 @@ class test_fuzz(unittest.TestCase):
- s = '\n'.join(good_lines)
- cc = compat.RawConfigParser()
- cc.readfp(StringIO(s))
-- cc_py = ConfigParser.RawConfigParser()
-+ cc_py = configparser.RawConfigParser()
- cc_py.readfp(StringIO(s))
- # compare the two configparsers
- self.assertEqualConfig(cc_py, cc)
- # check that tidy does not change semantics
- tidy(cc)
-- cc_tidy = ConfigParser.RawConfigParser()
-+ cc_tidy = configparser.RawConfigParser()
- cc_tidy.readfp(StringIO(str(cc.data)))
- self.assertEqualConfig(cc_py, cc_tidy)
- except AssertionError:
- fname = 'fuzz-test-iter-%d.ini' % fuzz_iter
-- print 'Fuzz test failed at iteration', fuzz_iter
-- print 'Writing out failing INI file as', fname
-+ print('Fuzz test failed at iteration', fuzz_iter)
-+ print('Writing out failing INI file as', fname)
- f = open(fname, 'w')
- f.write(s)
- f.close()
- raise
-
-+ @unittest.skipIf(sys.version_info[0] > 2, 'http://code.google.com/p/iniparse/issues/detail?id=22#c9')
- def assertEqualConfig(self, c1, c2):
- self.assertEqualSorted(c1.sections(), c2.sections())
- self.assertEqualSorted(c1.defaults().items(), c2.defaults().items())
-@@ -123,9 +125,7 @@ class test_fuzz(unittest.TestCase):
- self.assertEqual(c1.get(sec, opt), c2.get(sec, opt))
-
- def assertEqualSorted(self, l1, l2):
-- l1.sort()
-- l2.sort()
-- self.assertEqual(l1, l2)
-+ self.assertEqual(sorted(l1), sorted(l2))
-
- class suite(unittest.TestSuite):
- def __init__(self):
-diff --git a/tests/test_ini.py b/tests/test_ini.py
-index 6a76edb..07d4f4e 100644
---- a/tests/test_ini.py
-+++ b/tests/test_ini.py
-@@ -1,5 +1,5 @@
- import unittest
--from StringIO import StringIO
-+from six import StringIO
-
- from iniparse import ini
- from iniparse import compat
-@@ -196,13 +196,13 @@ but = also me
- self.assertEqual(p._data.find('section2').find('just').value, 'kidding')
-
- itr = p._data.finditer('section1')
-- v = itr.next()
-+ v = next(itr)
- self.assertEqual(v.find('help').value, 'yourself')
- self.assertEqual(v.find('but').value, 'also me')
-- v = itr.next()
-+ v = next(itr)
- self.assertEqual(v.find('help').value, 'me')
- self.assertEqual(v.find('I\'m').value, 'desperate')
-- self.assertRaises(StopIteration, itr.next)
-+ self.assertRaises(StopIteration, next, itr)
-
- self.assertRaises(KeyError, p._data.find, 'section')
- self.assertRaises(KeyError, p._data.find('section2').find, 'ahem')
-diff --git a/tests/test_misc.py b/tests/test_misc.py
-index 31cf4da..96ef035 100644
---- a/tests/test_misc.py
-+++ b/tests/test_misc.py
-@@ -1,9 +1,9 @@
- import re
- import unittest
- import pickle
--import ConfigParser
-+from six.moves import configparser
-+from six import StringIO
- from textwrap import dedent
--from StringIO import StringIO
- from iniparse import compat, ini
-
- class CaseSensitiveConfigParser(compat.ConfigParser):
-diff --git a/tests/test_tidy.py b/tests/test_tidy.py
-index 7304747..26b6cde 100644
---- a/tests/test_tidy.py
-+++ b/tests/test_tidy.py
-@@ -1,6 +1,6 @@
- import unittest
- from textwrap import dedent
--from StringIO import StringIO
-+from six import StringIO
-
- from iniparse import tidy,INIConfig
- from iniparse.ini import EmptyLine
-diff --git a/tests/test_unicode.py b/tests/test_unicode.py
-index a56fcab..14d4fbd 100644
---- a/tests/test_unicode.py
-+++ b/tests/test_unicode.py
-@@ -1,5 +1,5 @@
- import unittest
--from StringIO import StringIO
-+import six
- from iniparse import compat, ini
-
- class test_unicode(unittest.TestCase):
-@@ -17,14 +17,14 @@ baz = Marc-Andr\202
- """
-
- def basic_tests(self, s, strable):
-- f = StringIO(s)
-+ f = six.StringIO(s)
- i = ini.INIConfig(f)
-- self.assertEqual(unicode(i), s)
-- self.assertEqual(type(i.foo.bar), unicode)
-+ self.assertEqual(six.text_type(i), s)
-+ self.assertEqual(type(i.foo.bar), six.text_type)
- if strable:
- self.assertEqual(str(i), str(s))
- else:
-- self.assertRaises(UnicodeEncodeError, lambda: str(i))
-+ self.assertRaises(UnicodeEncodeError, lambda: six.text_type(i).encode('ascii'))
- return i
-
- def test_ascii(self):
---
-2.11.0
-
diff --git a/meta/recipes-devtools/python/python3-iniparse_0.4.bb b/meta/recipes-devtools/python/python3-iniparse_0.4.bb
deleted file mode 100644
index 4eba9ecd34..0000000000
--- a/meta/recipes-devtools/python/python3-iniparse_0.4.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-SUMMARY = "Accessing and Modifying INI files"
-HOMEPAGE = "https://pypi.python.org/pypi/iniparse/"
-LICENSE = "MIT & PSF"
-LIC_FILES_CHKSUM = "file://LICENSE-PSF;md5=1c78a5bb3584b353496d5f6f34edb4b2 \
- file://LICENSE;md5=52f28065af11d69382693b45b5a8eb54"
-
-SRC_URI = "file://0001-Add-python-3-compatibility.patch "
-
-SRC_URI[md5sum] = "5e573e9e9733d97623881ce9bbe5eca6"
-SRC_URI[sha256sum] = "abc1ee12d2cfb2506109072d6c21e40b6c75a3fe90a9c924327d80bc0d99c054"
-
-inherit pypi distutils3
-
-RDEPENDS_${PN} += "python3-core python3-six"
-DEPENDS += "python3-six"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-iniparse_0.5.bb b/meta/recipes-devtools/python/python3-iniparse_0.5.bb
new file mode 100644
index 0000000000..c18949014b
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-iniparse_0.5.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Accessing and Modifying INI files"
+HOMEPAGE = "https://pypi.org/project/iniparse/"
+LICENSE = "MIT & PSF-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE-PSF;md5=1c78a5bb3584b353496d5f6f34edb4b2 \
+ file://LICENSE;md5=52f28065af11d69382693b45b5a8eb54"
+
+SRC_URI[sha256sum] = "932e5239d526e7acb504017bb707be67019ac428a6932368e6851691093aa842"
+
+inherit pypi setuptools3
+
+RDEPENDS:${PN} += "python3-core python3-six"
+DEPENDS += "python3-six"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-installer/interpreter.patch b/meta/recipes-devtools/python/python3-installer/interpreter.patch
new file mode 100644
index 0000000000..7906769b90
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-installer/interpreter.patch
@@ -0,0 +1,71 @@
+From 74fe171fa4a25c120607e9f8450cbdfee675c959 Mon Sep 17 00:00:00 2001
+From: Ross Burton <ross.burton@arm.com>
+Date: Mon, 14 Mar 2022 14:39:22 +0000
+Subject: [PATCH] python3-installer: add installer module
+
+Let us override the hashbang directly (possibly upstreamable), and don't
+play games with hashbangs: for now assume that even hashbangs with spaces
+are simple (assume the spaces are only used to separate arguments) and
+we don't have long hashbangs.
+
+Upstream-Status: Inappropriate
+Signed-off-by: Ross Burton <ross.burton@arm.com>
+
+---
+ src/installer/__main__.py | 9 ++++++++-
+ src/installer/scripts.py | 15 +--------------
+ 2 files changed, 9 insertions(+), 15 deletions(-)
+
+diff --git a/src/installer/__main__.py b/src/installer/__main__.py
+index 51014b9..38de286 100644
+--- a/src/installer/__main__.py
++++ b/src/installer/__main__.py
+@@ -30,6 +30,13 @@ def _get_main_parser() -> argparse.ArgumentParser:
+ type=str,
+ help="override prefix to install packages to",
+ )
++ parser.add_argument(
++ "--interpreter",
++ "-i",
++ type=str,
++ default=sys.executable,
++ help=f"interpreter (defaults to {sys.executable})",
++ )
+ parser.add_argument(
+ "--compile-bytecode",
+ action="append",
+@@ -86,7 +93,7 @@ def _main(cli_args: Sequence[str], program: Optional[str] = None) -> None:
+ with WheelFile.open(args.wheel) as source:
+ destination = SchemeDictionaryDestination(
+ scheme_dict=_get_scheme_dict(source.distribution, prefix=args.prefix),
+- interpreter=sys.executable,
++ interpreter=args.interpreter,
+ script_kind=get_launcher_kind(),
+ bytecode_optimization_levels=bytecode_levels,
+ destdir=args.destdir,
+diff --git a/src/installer/scripts.py b/src/installer/scripts.py
+index 7e3c8fc..ba6ed5a 100644
+--- a/src/installer/scripts.py
++++ b/src/installer/scripts.py
+@@ -59,20 +59,7 @@ def _build_shebang(executable: str, forlauncher: bool) -> bytes:
+ https://bitbucket.org/pypa/distlib/src/58cd5c6/distlib/scripts.py#lines-124
+ """
+ executable_bytes = executable.encode("utf-8")
+- if forlauncher: # The launcher can just use the command as-is.
+- return b"#!" + executable_bytes
+- if _is_executable_simple(executable_bytes):
+- return b"#!" + executable_bytes
+-
+- # Shebang support for an executable with a space in it is under-specified
+- # and platform-dependent, so we use a clever hack to generate a script to
+- # run in ``/bin/sh`` that should work on all reasonably modern platforms.
+- # Read the following message to understand how the hack works:
+- # https://github.com/pradyunsg/installer/pull/4#issuecomment-623668717
+-
+- quoted = shlex.quote(executable).encode("utf-8")
+- # I don't understand a lick what this is trying to do.
+- return b"#!/bin/sh\n'''exec' " + quoted + b' "$0" "$@"\n' + b"' '''"
++ return b"#!" + executable_bytes
+
+
+ class InvalidScript(ValueError):
diff --git a/meta/recipes-devtools/python/python3-installer_0.7.0.bb b/meta/recipes-devtools/python/python3-installer_0.7.0.bb
new file mode 100644
index 0000000000..9429705b1f
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-installer_0.7.0.bb
@@ -0,0 +1,34 @@
+SUMMARY = "Library and tool for installing Python wheels"
+DESCRIPTION = "A low-level library for installing a Python package from a wheel distribution."
+HOMEPAGE = "https://installer.readthedocs.io/"
+BUGTRACKER = "https://github.com/pypa/installer/issues"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=5038641aec7a77451e31da828ebfae00"
+
+SRC_URI += "file://interpreter.patch"
+
+SRC_URI[sha256sum] = "a26d3e3116289bb08216e0d0f7d925fcef0b0194eedfa0c944bcaaa106c4b631"
+
+inherit pypi python_flit_core
+
+# Bootstrap the native build
+DEPENDS:remove:class-native = "python3-build-native python3-installer-native"
+
+RDEPENDS:${PN} += " \
+ python3-compile \
+ python3-compression \
+ python3-netclient \
+"
+
+INSTALL_WHEEL_COMPILE_BYTECODE:class-native = "--no-compile-bytecode"
+
+do_compile:class-native () {
+ python_flit_core_do_manual_build
+}
+
+do_install:prepend:class-native() {
+ export PYTHONPATH="${S}/src"
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-iso8601_2.1.0.bb b/meta/recipes-devtools/python/python3-iso8601_2.1.0.bb
new file mode 100644
index 0000000000..d7ab4a5a77
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-iso8601_2.1.0.bb
@@ -0,0 +1,15 @@
+SUMMARY = "Simple module to parse ISO 8601 dates"
+HOMEPAGE = "http://pyiso8601.readthedocs.org/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=aab31f2ef7ba214a5a341eaa47a7f367"
+
+SRC_URI[sha256sum] = "6b1d3829ee8921c4301998c909f7829fa9ed3cbdac0d3b16af2d743aed1ba8df"
+
+inherit pypi python_poetry_core
+
+RDEPENDS:${PN} += "\
+ python3-datetime \
+ python3-numbers \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-isodate_0.6.1.bb b/meta/recipes-devtools/python/python3-isodate_0.6.1.bb
new file mode 100644
index 0000000000..293fb08277
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-isodate_0.6.1.bb
@@ -0,0 +1,16 @@
+SUMMARY = "ISO 8601 date/time parser"
+HOMEPAGE = "https://github.com/gweis/isodate/"
+SECTION = "devel/python"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=e910b35b0ef4e1f665b9a75d6afb7709"
+
+SRC_URI[sha256sum] = "48c5881de7e8b0a0d648cb024c8062dc84e7b840ed81e864c7614fd3c127bde9"
+
+inherit pypi setuptools3
+
+RDEPENDS:${PN} += " \
+ python3-numbers \
+ python3-six \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-jinja2/run-ptest b/meta/recipes-devtools/python/python3-jinja2/run-ptest
new file mode 100644
index 0000000000..8d2017d39c
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-jinja2/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+pytest --automake
diff --git a/meta/recipes-devtools/python/python3-jinja2_3.1.3.bb b/meta/recipes-devtools/python/python3-jinja2_3.1.3.bb
new file mode 100644
index 0000000000..636fb35811
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-jinja2_3.1.3.bb
@@ -0,0 +1,48 @@
+SUMMARY = "Python Jinja2: A small but fast and easy to use stand-alone template engine written in pure python."
+HOMEPAGE = "https://pypi.org/project/Jinja2/"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=5dc88300786f1c214c1e9827a5229462"
+
+SRC_URI[sha256sum] = "ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90"
+
+PYPI_PACKAGE = "Jinja2"
+
+CVE_PRODUCT = "jinja2 jinja"
+
+CLEANBROKEN = "1"
+
+inherit pypi setuptools3 ptest
+
+SRC_URI += " \
+ file://run-ptest \
+"
+
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}/tests
+ cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+}
+
+RDEPENDS:${PN}-ptest += " \
+ python3-pytest \
+ python3-unittest-automake-output \
+ python3-toml \
+ python3-unixadmin \
+"
+
+RDEPENDS:${PN} += " \
+ python3-asyncio \
+ python3-crypt \
+ python3-io \
+ python3-json \
+ python3-markupsafe \
+ python3-math \
+ python3-netclient \
+ python3-numbers\
+ python3-pickle \
+ python3-pprint \
+ python3-shell \
+ python3-threading \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-jsonpointer/run-ptest b/meta/recipes-devtools/python/python3-jsonpointer/run-ptest
new file mode 100644
index 0000000000..7ebd69231f
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-jsonpointer/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+python3 -mputao.unittest tests.py
diff --git a/meta/recipes-devtools/python/python3-jsonpointer_2.4.bb b/meta/recipes-devtools/python/python3-jsonpointer_2.4.bb
new file mode 100644
index 0000000000..062fa5243f
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-jsonpointer_2.4.bb
@@ -0,0 +1,28 @@
+SUMMARY = "Resolve JSON Pointers in Python"
+HOMEPAGE = "https://github.com/stefankoegl/python-json-pointer"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=32b15c843b7a329130f4e266a281ebb3"
+
+inherit pypi ptest setuptools3
+
+SRC_URI[sha256sum] = "585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88"
+
+RDEPENDS:${PN} += " \
+ python3-json \
+"
+
+BBCLASSEXTEND = "native nativesdk"
+
+SRC_URI += " \
+ file://run-ptest \
+"
+
+RDEPENDS:${PN}-ptest += " \
+ python3-doctest \
+ python3-unittest \
+ python3-unittest-automake-output \
+"
+
+do_install_ptest() {
+ cp -f ${S}/tests.py ${D}${PTEST_PATH}/
+}
diff --git a/meta/recipes-devtools/python/python3-jsonschema-specifications_2023.12.1.bb b/meta/recipes-devtools/python/python3-jsonschema-specifications_2023.12.1.bb
new file mode 100644
index 0000000000..4ee0dd9b12
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-jsonschema-specifications_2023.12.1.bb
@@ -0,0 +1,16 @@
+SUMMARY = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry"
+DESCRIPTION = "JSON support files from the JSON Schema Specifications (metaschemas, \
+vocabularies, etc.), packaged for runtime access from Python as a referencing-based Schema Registry."
+HOMEPAGE = "https://pypi.org/project/jsonschema-specifications/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=93eb9740964b59e9ba30281255b044e2"
+
+SRC_URI[sha256sum] = "48a76787b3e70f5ed53f1160d2b81f586e4ca6d1548c5de7085d1682674764cc"
+
+inherit pypi python_hatchling
+
+PYPI_PACKAGE = "jsonschema_specifications"
+
+DEPENDS += "python3-hatch-vcs-native"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-jsonschema_4.21.1.bb b/meta/recipes-devtools/python/python3-jsonschema_4.21.1.bb
new file mode 100644
index 0000000000..381148f4bb
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-jsonschema_4.21.1.bb
@@ -0,0 +1,50 @@
+SUMMARY = "An implementation of JSON Schema validation for Python"
+HOMEPAGE = "https://github.com/python-jsonschema/jsonschema"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=7a60a81c146ec25599a3e1dabb8610a8 \
+ file://json/LICENSE;md5=9d4de43111d33570c8fe49b4cb0e01af"
+
+SRC_URI[sha256sum] = "85727c00279f5fa6bedbe6238d2aa6403bedd8b4864ab11207d07df3cc1b2ee5"
+
+inherit pypi python_hatchling
+
+PACKAGES =+ "${PN}-tests"
+FILES:${PN}-tests = "${libdir}/${PYTHON_DIR}/site-packages/jsonschema/tests"
+
+DEPENDS += "python3-hatch-fancy-pypi-readme-native python3-hatch-vcs-native "
+
+PACKAGECONFIG ??= "format"
+PACKAGECONFIG[format] = ",,,\
+ python3-idna \
+ python3-jsonpointer \
+ python3-webcolors \
+ python3-rfc3987 \
+ python3-rfc3339-validator \
+"
+PACKAGECONFIG[nongpl] = ",,,\
+ python3-idna \
+ python3-jsonpointer \
+ python3-webcolors \
+ python3-rfc3986-validator \
+ python3-rfc3339-validator \
+"
+
+RDEPENDS:${PN} += " \
+ python3-attrs \
+ python3-core \
+ python3-datetime \
+ python3-importlib-metadata \
+ python3-io \
+ python3-json \
+ python3-jsonschema-specifications \
+ python3-netclient \
+ python3-numbers \
+ python3-pprint \
+ python3-pyrsistent \
+ python3-referencing \
+ python3-zipp \
+"
+
+RDEPENDS:${PN}-tests = "${PN}"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-libarchive-c_5.1.bb b/meta/recipes-devtools/python/python3-libarchive-c_5.1.bb
new file mode 100644
index 0000000000..4e318e52f4
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-libarchive-c_5.1.bb
@@ -0,0 +1,21 @@
+SUMMARY = "Python interface to libarchive"
+DESCRIPTION = "A Python interface to libarchive. It uses the standard ctypes module to \
+ dynamically load and access the C library."
+HOMEPAGE = "https://github.com/Changaco/python-libarchive-c"
+LICENSE = "CC0-1.0"
+LIC_FILES_CHKSUM = "file://LICENSE.md;md5=bcab380227a83bc147350b40a81e6ffc"
+
+PYPI_PACKAGE = "libarchive-c"
+
+inherit pypi setuptools3
+
+SRC_URI[sha256sum] = "7bcce24ea6c0fa3bc62468476c6d2f6264156db2f04878a372027c10615a2721"
+
+RDEPENDS:${PN} += "\
+ libarchive \
+ python3-ctypes \
+ python3-mmap \
+ python3-logging \
+"
+
+BBCLASSEXTEND = "native"
diff --git a/meta/recipes-devtools/python/python3-license-expression/run-ptest b/meta/recipes-devtools/python/python3-license-expression/run-ptest
new file mode 100644
index 0000000000..8d2017d39c
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-license-expression/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+pytest --automake
diff --git a/meta/recipes-devtools/python/python3-license-expression_30.3.0.bb b/meta/recipes-devtools/python/python3-license-expression_30.3.0.bb
new file mode 100644
index 0000000000..f36336b592
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-license-expression_30.3.0.bb
@@ -0,0 +1,38 @@
+SUMMARY = "Utility library to parse, compare, simplify and normalize license expressions"
+HOMEPAGE = "https://github.com/nexB/license-expression"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://apache-2.0.LICENSE;md5=86d3f3a95c324c9479bd8986968f4327"
+
+SRC_URI[sha256sum] = "1295406f736b4f395ff069aec1cebfad53c0fcb3cf57df0f5ec58fc7b905aea5"
+
+inherit pypi ptest python_setuptools_build_meta
+
+DEPENDS += "python3-setuptools-scm-native"
+
+RDEPENDS:${PN} += "\
+ python3-booleanpy \
+ python3-core \
+ python3-json \
+ python3-stringold \
+ python3-logging \
+"
+
+BBCLASSEXTEND = "native nativesdk"
+
+SRC_URI += " \
+ file://run-ptest \
+"
+
+RDEPENDS:${PN}-ptest += " \
+ python3-pytest \
+ python3-unittest-automake-output \
+"
+
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}/tests
+ install -d ${D}${PTEST_PATH}/src
+ cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+ cp -rf ${S}/src/* ${D}${PTEST_PATH}/src/
+ cp -rf ${S}/setup.cfg ${D}${PTEST_PATH}/
+}
diff --git a/meta/recipes-devtools/python/python3-lxml_5.2.1.bb b/meta/recipes-devtools/python/python3-lxml_5.2.1.bb
new file mode 100644
index 0000000000..44a10505f3
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-lxml_5.2.1.bb
@@ -0,0 +1,42 @@
+SUMMARY = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API."
+DESCRIPTION = "lxml is a Pythonic, mature binding for the libxml2 and \
+libxslt libraries. It provides safe and convenient access to these \
+libraries using the ElementTree API. It extends the ElementTree API \
+significantly to offer support for XPath, RelaxNG, XML Schema, XSLT, \
+C14N and much more."
+HOMEPAGE = "https://lxml.de/"
+SECTION = "devel/python"
+LICENSE = "BSD-3-Clause & GPL-2.0-only & MIT & PSF-2.0"
+LIC_FILES_CHKSUM = "file://LICENSES.txt;md5=e4c045ebad958ead4b48008f70838403 \
+ file://doc/licenses/elementtree.txt;md5=eb34d036a6e3d56314ee49a6852ac891 \
+ file://doc/licenses/BSD.txt;md5=700a1fc17f4797d4f2d34970c8ee694b \
+ file://doc/licenses/GPL.txt;md5=94d55d512a9ba36caa9b7df079bae19f \
+ file://src/lxml/isoschematron/resources/rng/iso-schematron.rng;beginline=2;endline=7;md5=fc85684a8dd5fa272c086bceb0d99e10 \
+ file://src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_schematron_message.xsl;beginline=2;endline=24;md5=cc86b7b2bbc678e13f58ea403eb9929b \
+ file://src/lxml/isoschematron/resources/xsl/RNG2Schtrn.xsl;beginline=2;endline=7;md5=5b03236d293dc3784205542b409d2f53 \
+ "
+
+DEPENDS += "libxml2 libxslt"
+
+SRC_URI[sha256sum] = "3f7765e69bbce0906a7c74d5fe46d2c7a7596147318dbc08e4a2431f3060e306"
+
+SRC_URI += "${PYPI_SRC_URI}"
+inherit pkgconfig pypi setuptools3
+
+# {standard input}: Assembler messages:
+# {standard input}:1488805: Error: branch out of range
+DEBUG_OPTIMIZATION:remove:mips = " -Og"
+DEBUG_OPTIMIZATION:append:mips = " -O"
+BUILD_OPTIMIZATION:remove:mips = " -Og"
+BUILD_OPTIMIZATION:append:mips = " -O"
+
+DEBUG_OPTIMIZATION:remove:mipsel = " -Og"
+DEBUG_OPTIMIZATION:append:mipsel = " -O"
+BUILD_OPTIMIZATION:remove:mipsel = " -Og"
+BUILD_OPTIMIZATION:append:mipsel = " -O"
+
+BBCLASSEXTEND = "native nativesdk"
+
+RDEPENDS:${PN} += "libxml2 libxslt python3-compression"
+
+CLEANBROKEN = "1"
diff --git a/meta/recipes-devtools/python/python3-magic_0.4.27.bb b/meta/recipes-devtools/python/python3-magic_0.4.27.bb
new file mode 100644
index 0000000000..2e561e69d7
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-magic_0.4.27.bb
@@ -0,0 +1,22 @@
+SUMMARY = "File type identification using libmagic"
+DESCRIPTION = "This module uses ctypes to access the libmagic file type \
+ identification library. It makes use of the local magic database and supports \
+ both textual and MIME-type output."
+HOMEPAGE = "http://github.com/ahupp/python-magic"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=61495c152d794e6be5799a9edca149e3"
+
+PYPI_PACKAGE = "python-magic"
+
+inherit pypi setuptools3
+
+SRC_URI[sha256sum] = "c1ba14b08e4a5f5c31a302b7721239695b2f0f058d125bd5ce1ee36b9d9d3c3b"
+
+RDEPENDS:${PN} += "file \
+ python3-ctypes \
+ python3-io \
+ python3-logging \
+ python3-shell"
+
+BBCLASSEXTEND = "native"
diff --git a/meta/recipes-devtools/python/python3-mako_1.0.7.bb b/meta/recipes-devtools/python/python3-mako_1.0.7.bb
deleted file mode 100644
index 22ceeeb395..0000000000
--- a/meta/recipes-devtools/python/python3-mako_1.0.7.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-inherit setuptools3
-require python-mako.inc
diff --git a/meta/recipes-devtools/python/python3-mako_1.3.3.bb b/meta/recipes-devtools/python/python3-mako_1.3.3.bb
new file mode 100644
index 0000000000..7545cbef99
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-mako_1.3.3.bb
@@ -0,0 +1,20 @@
+SUMMARY = "Templating library for Python"
+HOMEPAGE = "http://www.makotemplates.org/"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=d0995d6f7ba3f186a03118f244e88f57"
+
+PYPI_PACKAGE = "Mako"
+
+inherit pypi python_setuptools_build_meta
+
+SRC_URI[sha256sum] = "e16c01d9ab9c11f7290eef1cfefc093fb5a45ee4a3da09e2fec2e4d1bae54e73"
+
+RDEPENDS:${PN} = "python3-html \
+ python3-markupsafe \
+ python3-netclient \
+ python3-pygments \
+ python3-threading \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-markdown_3.6.bb b/meta/recipes-devtools/python/python3-markdown_3.6.bb
new file mode 100644
index 0000000000..7c64837395
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-markdown_3.6.bb
@@ -0,0 +1,13 @@
+SUMMARY = "A Python implementation of John Gruber's Markdown."
+HOMEPAGE = "https://python-markdown.github.io/"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.md;md5=ec58cdf7cfed06a21f7a9362627a5480"
+
+inherit pypi python_setuptools_build_meta
+
+PYPI_PACKAGE = "Markdown"
+SRC_URI[sha256sum] = "ed4f41f6daecbeeb96e576ce414c41d2d876daa9a16cb35fa8ed8c2ddfad0224"
+
+BBCLASSEXTEND = "native nativesdk"
+
+RDEPENDS:${PN} += "python3-logging python3-setuptools"
diff --git a/meta/recipes-devtools/python/python3-markupsafe/run-ptest b/meta/recipes-devtools/python/python3-markupsafe/run-ptest
new file mode 100644
index 0000000000..8d2017d39c
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-markupsafe/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+pytest --automake
diff --git a/meta/recipes-devtools/python/python3-markupsafe_2.1.5.bb b/meta/recipes-devtools/python/python3-markupsafe_2.1.5.bb
new file mode 100644
index 0000000000..821332fe7c
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-markupsafe_2.1.5.bb
@@ -0,0 +1,27 @@
+SUMMARY = "Implements a XML/HTML/XHTML Markup safe string for Python"
+HOMEPAGE = "http://github.com/mitsuhiko/markupsafe"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=ffeffa59c90c9c4a033c7574f8f3fb75"
+
+SRC_URI[sha256sum] = "d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"
+
+PYPI_PACKAGE = "MarkupSafe"
+inherit pypi python_setuptools_build_meta ptest
+
+RDEPENDS:${PN} += "python3-stringold"
+
+BBCLASSEXTEND = "native nativesdk"
+
+SRC_URI += " \
+ file://run-ptest \
+"
+
+RDEPENDS:${PN}-ptest += " \
+ python3-pytest \
+ python3-unittest-automake-output \
+"
+
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}/tests
+ cp -f ${S}/tests/* ${D}${PTEST_PATH}/tests/
+}
diff --git a/meta/recipes-devtools/python/python3-maturin-crates.inc b/meta/recipes-devtools/python/python3-maturin-crates.inc
new file mode 100644
index 0000000000..3cb614d52a
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-maturin-crates.inc
@@ -0,0 +1,618 @@
+# Autogenerated with 'bitbake -c update_crates python3-maturin'
+
+# from Cargo.lock
+SRC_URI += " \
+ crate://crates.io/adler/1.0.2 \
+ crate://crates.io/ahash/0.8.6 \
+ crate://crates.io/aho-corasick/1.1.2 \
+ crate://crates.io/allocator-api2/0.2.16 \
+ crate://crates.io/anstream/0.3.2 \
+ crate://crates.io/anstream/0.6.4 \
+ crate://crates.io/anstyle/1.0.2 \
+ crate://crates.io/anstyle-parse/0.2.1 \
+ crate://crates.io/anstyle-query/1.0.0 \
+ crate://crates.io/anstyle-wincon/1.0.2 \
+ crate://crates.io/anstyle-wincon/3.0.1 \
+ crate://crates.io/anyhow/1.0.75 \
+ crate://crates.io/autocfg/1.1.0 \
+ crate://crates.io/base64/0.13.1 \
+ crate://crates.io/base64/0.21.5 \
+ crate://crates.io/bitflags/1.3.2 \
+ crate://crates.io/bitflags/2.4.1 \
+ crate://crates.io/block-buffer/0.10.4 \
+ crate://crates.io/bstr/1.8.0 \
+ crate://crates.io/byteorder/1.5.0 \
+ crate://crates.io/bytes/1.5.0 \
+ crate://crates.io/bytesize/1.3.0 \
+ crate://crates.io/bzip2/0.4.4 \
+ crate://crates.io/bzip2-sys/0.1.11+1.0.8 \
+ crate://crates.io/cab/0.4.1 \
+ crate://crates.io/camino/1.1.6 \
+ crate://crates.io/cargo-config2/0.1.16 \
+ crate://crates.io/cargo-options/0.7.2 \
+ crate://crates.io/cargo-platform/0.1.5 \
+ crate://crates.io/cargo-xwin/0.16.2 \
+ crate://crates.io/cargo-zigbuild/0.18.0 \
+ crate://crates.io/cargo_metadata/0.18.1 \
+ crate://crates.io/cbindgen/0.26.0 \
+ crate://crates.io/cc/1.0.83 \
+ crate://crates.io/cfb/0.9.0 \
+ crate://crates.io/cfg-if/1.0.0 \
+ crate://crates.io/charset/0.1.3 \
+ crate://crates.io/chumsky/0.9.3 \
+ crate://crates.io/clap/4.3.24 \
+ crate://crates.io/clap_builder/4.3.24 \
+ crate://crates.io/clap_complete/4.3.2 \
+ crate://crates.io/clap_complete_command/0.5.1 \
+ crate://crates.io/clap_complete_fig/4.3.1 \
+ crate://crates.io/clap_complete_nushell/0.1.11 \
+ crate://crates.io/clap_derive/4.3.12 \
+ crate://crates.io/clap_lex/0.5.0 \
+ crate://crates.io/cli-table/0.4.7 \
+ crate://crates.io/colorchoice/1.0.0 \
+ crate://crates.io/configparser/3.0.3 \
+ crate://crates.io/console/0.15.7 \
+ crate://crates.io/content_inspector/0.2.4 \
+ crate://crates.io/core-foundation/0.9.3 \
+ crate://crates.io/core-foundation-sys/0.8.4 \
+ crate://crates.io/cpufeatures/0.2.11 \
+ crate://crates.io/crc32fast/1.3.2 \
+ crate://crates.io/crossbeam-channel/0.5.8 \
+ crate://crates.io/crossbeam-deque/0.8.3 \
+ crate://crates.io/crossbeam-epoch/0.9.15 \
+ crate://crates.io/crossbeam-utils/0.8.16 \
+ crate://crates.io/crypto-common/0.1.6 \
+ crate://crates.io/data-encoding/2.5.0 \
+ crate://crates.io/deranged/0.3.9 \
+ crate://crates.io/dialoguer/0.11.0 \
+ crate://crates.io/diff/0.1.13 \
+ crate://crates.io/digest/0.10.7 \
+ crate://crates.io/dirs/5.0.1 \
+ crate://crates.io/dirs-sys/0.4.1 \
+ crate://crates.io/dissimilar/1.0.7 \
+ crate://crates.io/dunce/1.0.4 \
+ crate://crates.io/either/1.9.0 \
+ crate://crates.io/encode_unicode/0.3.6 \
+ crate://crates.io/encoding_rs/0.8.33 \
+ crate://crates.io/equivalent/1.0.1 \
+ crate://crates.io/errno/0.3.8 \
+ crate://crates.io/expect-test/1.4.1 \
+ crate://crates.io/fastrand/2.0.1 \
+ crate://crates.io/fat-macho/0.4.7 \
+ crate://crates.io/filetime/0.2.22 \
+ crate://crates.io/flate2/1.0.28 \
+ crate://crates.io/fnv/1.0.7 \
+ crate://crates.io/foreign-types/0.3.2 \
+ crate://crates.io/foreign-types-shared/0.1.1 \
+ crate://crates.io/form_urlencoded/1.2.1 \
+ crate://crates.io/fs-err/2.11.0 \
+ crate://crates.io/generic-array/0.14.7 \
+ crate://crates.io/getrandom/0.2.11 \
+ crate://crates.io/glob/0.3.1 \
+ crate://crates.io/globset/0.4.14 \
+ crate://crates.io/goblin/0.7.1 \
+ crate://crates.io/hashbrown/0.12.3 \
+ crate://crates.io/hashbrown/0.14.3 \
+ crate://crates.io/heck/0.4.1 \
+ crate://crates.io/hermit-abi/0.3.3 \
+ crate://crates.io/home/0.5.5 \
+ crate://crates.io/humantime/2.1.0 \
+ crate://crates.io/humantime-serde/1.1.1 \
+ crate://crates.io/idna/0.5.0 \
+ crate://crates.io/ignore/0.4.20 \
+ crate://crates.io/indexmap/1.9.3 \
+ crate://crates.io/indexmap/2.1.0 \
+ crate://crates.io/indicatif/0.17.7 \
+ crate://crates.io/indoc/2.0.4 \
+ crate://crates.io/instant/0.1.12 \
+ crate://crates.io/io-lifetimes/1.0.11 \
+ crate://crates.io/is-terminal/0.4.9 \
+ crate://crates.io/itertools/0.11.0 \
+ crate://crates.io/itertools/0.12.0 \
+ crate://crates.io/itoa/1.0.9 \
+ crate://crates.io/keyring/2.0.5 \
+ crate://crates.io/lazy_static/1.4.0 \
+ crate://crates.io/lddtree/0.3.3 \
+ crate://crates.io/libc/0.2.150 \
+ crate://crates.io/libredox/0.0.1 \
+ crate://crates.io/linux-keyutils/0.2.3 \
+ crate://crates.io/linux-raw-sys/0.3.8 \
+ crate://crates.io/linux-raw-sys/0.4.11 \
+ crate://crates.io/lock_api/0.4.11 \
+ crate://crates.io/log/0.4.20 \
+ crate://crates.io/lzxd/0.1.4 \
+ crate://crates.io/mailparse/0.14.0 \
+ crate://crates.io/matchers/0.1.0 \
+ crate://crates.io/memchr/2.6.4 \
+ crate://crates.io/memoffset/0.9.0 \
+ crate://crates.io/mime/0.3.17 \
+ crate://crates.io/mime_guess/2.0.4 \
+ crate://crates.io/minijinja/1.0.10 \
+ crate://crates.io/minimal-lexical/0.2.1 \
+ crate://crates.io/miniz_oxide/0.7.1 \
+ crate://crates.io/msi/0.7.0 \
+ crate://crates.io/multipart/0.18.0 \
+ crate://crates.io/native-tls/0.2.11 \
+ crate://crates.io/nom/7.1.3 \
+ crate://crates.io/normalize-line-endings/0.3.0 \
+ crate://crates.io/normpath/1.1.1 \
+ crate://crates.io/nu-ansi-term/0.46.0 \
+ crate://crates.io/number_prefix/0.4.0 \
+ crate://crates.io/once_cell/1.18.0 \
+ crate://crates.io/openssl/0.10.60 \
+ crate://crates.io/openssl-macros/0.1.1 \
+ crate://crates.io/openssl-probe/0.1.5 \
+ crate://crates.io/openssl-sys/0.9.96 \
+ crate://crates.io/option-ext/0.2.0 \
+ crate://crates.io/os_pipe/1.1.4 \
+ crate://crates.io/overload/0.1.1 \
+ crate://crates.io/parking_lot/0.12.1 \
+ crate://crates.io/parking_lot_core/0.9.9 \
+ crate://crates.io/paste/1.0.14 \
+ crate://crates.io/path-slash/0.2.1 \
+ crate://crates.io/pep440_rs/0.3.12 \
+ crate://crates.io/pep508_rs/0.2.3 \
+ crate://crates.io/percent-encoding/2.3.1 \
+ crate://crates.io/pin-project-lite/0.2.13 \
+ crate://crates.io/pkg-config/0.3.27 \
+ crate://crates.io/plain/0.2.3 \
+ crate://crates.io/platform-info/2.0.2 \
+ crate://crates.io/portable-atomic/1.5.1 \
+ crate://crates.io/powerfmt/0.2.0 \
+ crate://crates.io/ppv-lite86/0.2.17 \
+ crate://crates.io/pretty_assertions/1.4.0 \
+ crate://crates.io/proc-macro2/1.0.70 \
+ crate://crates.io/psm/0.1.21 \
+ crate://crates.io/pyproject-toml/0.8.1 \
+ crate://crates.io/python-pkginfo/0.6.0 \
+ crate://crates.io/quote/1.0.33 \
+ crate://crates.io/quoted_printable/0.4.8 \
+ crate://crates.io/rand/0.8.5 \
+ crate://crates.io/rand_chacha/0.3.1 \
+ crate://crates.io/rand_core/0.6.4 \
+ crate://crates.io/rayon/1.8.0 \
+ crate://crates.io/rayon-core/1.12.0 \
+ crate://crates.io/redox_syscall/0.3.5 \
+ crate://crates.io/redox_syscall/0.4.1 \
+ crate://crates.io/redox_users/0.4.4 \
+ crate://crates.io/regex/1.10.2 \
+ crate://crates.io/regex-automata/0.1.10 \
+ crate://crates.io/regex-automata/0.4.3 \
+ crate://crates.io/regex-syntax/0.6.29 \
+ crate://crates.io/regex-syntax/0.8.2 \
+ crate://crates.io/rfc2047-decoder/0.2.2 \
+ crate://crates.io/ring/0.17.6 \
+ crate://crates.io/rustc_version/0.4.0 \
+ crate://crates.io/rustix/0.37.27 \
+ crate://crates.io/rustix/0.38.21 \
+ crate://crates.io/rustls/0.21.9 \
+ crate://crates.io/rustls-pemfile/2.0.0 \
+ crate://crates.io/rustls-pki-types/1.0.0 \
+ crate://crates.io/rustls-webpki/0.101.7 \
+ crate://crates.io/rustversion/1.0.14 \
+ crate://crates.io/ryu/1.0.15 \
+ crate://crates.io/same-file/1.0.6 \
+ crate://crates.io/schannel/0.1.22 \
+ crate://crates.io/scopeguard/1.2.0 \
+ crate://crates.io/scroll/0.11.0 \
+ crate://crates.io/scroll_derive/0.11.1 \
+ crate://crates.io/sct/0.7.1 \
+ crate://crates.io/security-framework/2.9.2 \
+ crate://crates.io/security-framework-sys/2.9.1 \
+ crate://crates.io/semver/1.0.20 \
+ crate://crates.io/serde/1.0.193 \
+ crate://crates.io/serde_derive/1.0.193 \
+ crate://crates.io/serde_json/1.0.108 \
+ crate://crates.io/serde_spanned/0.6.4 \
+ crate://crates.io/sha2/0.10.8 \
+ crate://crates.io/sharded-slab/0.1.7 \
+ crate://crates.io/shell-words/1.1.0 \
+ crate://crates.io/shlex/1.2.0 \
+ crate://crates.io/similar/2.3.0 \
+ crate://crates.io/smallvec/1.11.2 \
+ crate://crates.io/smawk/0.3.2 \
+ crate://crates.io/snapbox/0.4.14 \
+ crate://crates.io/snapbox-macros/0.3.6 \
+ crate://crates.io/socks/0.3.4 \
+ crate://crates.io/spin/0.9.8 \
+ crate://crates.io/stacker/0.1.15 \
+ crate://crates.io/static_assertions/1.1.0 \
+ crate://crates.io/strsim/0.10.0 \
+ crate://crates.io/syn/1.0.109 \
+ crate://crates.io/syn/2.0.39 \
+ crate://crates.io/tar/0.4.40 \
+ crate://crates.io/target-lexicon/0.12.12 \
+ crate://crates.io/tempfile/3.8.1 \
+ crate://crates.io/termcolor/1.4.0 \
+ crate://crates.io/terminal_size/0.2.6 \
+ crate://crates.io/textwrap/0.16.0 \
+ crate://crates.io/thiserror/1.0.50 \
+ crate://crates.io/thiserror-impl/1.0.50 \
+ crate://crates.io/thread_local/1.1.7 \
+ crate://crates.io/time/0.3.30 \
+ crate://crates.io/time-core/0.1.2 \
+ crate://crates.io/time-macros/0.2.15 \
+ crate://crates.io/tinyvec/1.6.0 \
+ crate://crates.io/tinyvec_macros/0.1.1 \
+ crate://crates.io/toml/0.5.11 \
+ crate://crates.io/toml/0.8.8 \
+ crate://crates.io/toml_datetime/0.6.5 \
+ crate://crates.io/toml_edit/0.20.7 \
+ crate://crates.io/toml_edit/0.21.0 \
+ crate://crates.io/tracing/0.1.40 \
+ crate://crates.io/tracing-attributes/0.1.27 \
+ crate://crates.io/tracing-core/0.1.32 \
+ crate://crates.io/tracing-log/0.2.0 \
+ crate://crates.io/tracing-serde/0.1.3 \
+ crate://crates.io/tracing-subscriber/0.3.18 \
+ crate://crates.io/trycmd/0.14.19 \
+ crate://crates.io/twox-hash/1.6.3 \
+ crate://crates.io/typenum/1.17.0 \
+ crate://crates.io/unicase/2.7.0 \
+ crate://crates.io/unicode-bidi/0.3.13 \
+ crate://crates.io/unicode-ident/1.0.12 \
+ crate://crates.io/unicode-linebreak/0.1.5 \
+ crate://crates.io/unicode-normalization/0.1.22 \
+ crate://crates.io/unicode-width/0.1.11 \
+ crate://crates.io/untrusted/0.9.0 \
+ crate://crates.io/ureq/2.9.1 \
+ crate://crates.io/url/2.5.0 \
+ crate://crates.io/utf8parse/0.2.1 \
+ crate://crates.io/uuid/1.6.1 \
+ crate://crates.io/valuable/0.1.0 \
+ crate://crates.io/vcpkg/0.2.15 \
+ crate://crates.io/version_check/0.9.4 \
+ crate://crates.io/versions/5.0.1 \
+ crate://crates.io/wait-timeout/0.2.0 \
+ crate://crates.io/walkdir/2.4.0 \
+ crate://crates.io/wasi/0.11.0+wasi-snapshot-preview1 \
+ crate://crates.io/webpki-roots/0.25.3 \
+ crate://crates.io/which/5.0.0 \
+ crate://crates.io/wild/2.2.0 \
+ crate://crates.io/winapi/0.3.9 \
+ crate://crates.io/winapi-i686-pc-windows-gnu/0.4.0 \
+ crate://crates.io/winapi-util/0.1.6 \
+ crate://crates.io/winapi-x86_64-pc-windows-gnu/0.4.0 \
+ crate://crates.io/windows-sys/0.45.0 \
+ crate://crates.io/windows-sys/0.48.0 \
+ crate://crates.io/windows-sys/0.52.0 \
+ crate://crates.io/windows-targets/0.42.2 \
+ crate://crates.io/windows-targets/0.48.5 \
+ crate://crates.io/windows-targets/0.52.0 \
+ crate://crates.io/windows_aarch64_gnullvm/0.42.2 \
+ crate://crates.io/windows_aarch64_gnullvm/0.48.5 \
+ crate://crates.io/windows_aarch64_gnullvm/0.52.0 \
+ crate://crates.io/windows_aarch64_msvc/0.42.2 \
+ crate://crates.io/windows_aarch64_msvc/0.48.5 \
+ crate://crates.io/windows_aarch64_msvc/0.52.0 \
+ crate://crates.io/windows_i686_gnu/0.42.2 \
+ crate://crates.io/windows_i686_gnu/0.48.5 \
+ crate://crates.io/windows_i686_gnu/0.52.0 \
+ crate://crates.io/windows_i686_msvc/0.42.2 \
+ crate://crates.io/windows_i686_msvc/0.48.5 \
+ crate://crates.io/windows_i686_msvc/0.52.0 \
+ crate://crates.io/windows_x86_64_gnu/0.42.2 \
+ crate://crates.io/windows_x86_64_gnu/0.48.5 \
+ crate://crates.io/windows_x86_64_gnu/0.52.0 \
+ crate://crates.io/windows_x86_64_gnullvm/0.42.2 \
+ crate://crates.io/windows_x86_64_gnullvm/0.48.5 \
+ crate://crates.io/windows_x86_64_gnullvm/0.52.0 \
+ crate://crates.io/windows_x86_64_msvc/0.42.2 \
+ crate://crates.io/windows_x86_64_msvc/0.48.5 \
+ crate://crates.io/windows_x86_64_msvc/0.52.0 \
+ crate://crates.io/winnow/0.5.19 \
+ crate://crates.io/xattr/1.0.1 \
+ crate://crates.io/xwin/0.5.0 \
+ crate://crates.io/yansi/0.5.1 \
+ crate://crates.io/zerocopy/0.7.28 \
+ crate://crates.io/zerocopy-derive/0.7.28 \
+ crate://crates.io/zeroize/1.7.0 \
+ crate://crates.io/zip/0.6.6 \
+"
+
+SRC_URI[adler-1.0.2.sha256sum] = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+SRC_URI[ahash-0.8.6.sha256sum] = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a"
+SRC_URI[aho-corasick-1.1.2.sha256sum] = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
+SRC_URI[allocator-api2-0.2.16.sha256sum] = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5"
+SRC_URI[anstream-0.3.2.sha256sum] = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163"
+SRC_URI[anstream-0.6.4.sha256sum] = "2ab91ebe16eb252986481c5b62f6098f3b698a45e34b5b98200cf20dd2484a44"
+SRC_URI[anstyle-1.0.2.sha256sum] = "15c4c2c83f81532e5845a733998b6971faca23490340a418e9b72a3ec9de12ea"
+SRC_URI[anstyle-parse-0.2.1.sha256sum] = "938874ff5980b03a87c5524b3ae5b59cf99b1d6bc836848df7bc5ada9643c333"
+SRC_URI[anstyle-query-1.0.0.sha256sum] = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
+SRC_URI[anstyle-wincon-1.0.2.sha256sum] = "c677ab05e09154296dd37acecd46420c17b9713e8366facafa8fc0885167cf4c"
+SRC_URI[anstyle-wincon-3.0.1.sha256sum] = "f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628"
+SRC_URI[anyhow-1.0.75.sha256sum] = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
+SRC_URI[autocfg-1.1.0.sha256sum] = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+SRC_URI[base64-0.13.1.sha256sum] = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+SRC_URI[base64-0.21.5.sha256sum] = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9"
+SRC_URI[bitflags-1.3.2.sha256sum] = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+SRC_URI[bitflags-2.4.1.sha256sum] = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07"
+SRC_URI[block-buffer-0.10.4.sha256sum] = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+SRC_URI[bstr-1.8.0.sha256sum] = "542f33a8835a0884b006a0c3df3dadd99c0c3f296ed26c2fdc8028e01ad6230c"
+SRC_URI[byteorder-1.5.0.sha256sum] = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
+SRC_URI[bytes-1.5.0.sha256sum] = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
+SRC_URI[bytesize-1.3.0.sha256sum] = "a3e368af43e418a04d52505cf3dbc23dda4e3407ae2fa99fd0e4f308ce546acc"
+SRC_URI[bzip2-0.4.4.sha256sum] = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8"
+SRC_URI[bzip2-sys-0.1.11+1.0.8.sha256sum] = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc"
+SRC_URI[cab-0.4.1.sha256sum] = "ae6b4de23c7d39c0631fd3cc952d87951c86c75a13812d7247cb7a896e7b3551"
+SRC_URI[camino-1.1.6.sha256sum] = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c"
+SRC_URI[cargo-config2-0.1.16.sha256sum] = "7f387366785e82c7ec7ef5b845a7f61324fbf5d467d6a878469eac30c1c44b1b"
+SRC_URI[cargo-options-0.7.2.sha256sum] = "cad71bf996c8e5b9d28ef3472d7ee41f277edf4e38cd597f51ad0438d05d76ea"
+SRC_URI[cargo-platform-0.1.5.sha256sum] = "e34637b3140142bdf929fb439e8aa4ebad7651ebf7b1080b3930aa16ac1459ff"
+SRC_URI[cargo-xwin-0.16.2.sha256sum] = "02bb6bf59526935e47445f959a19c2168f151284dbf7e57f5577934334e9a61d"
+SRC_URI[cargo-zigbuild-0.18.0.sha256sum] = "edc9c2fe646a29983b5f7263bd789175f2aaad7ea42525affa40e2172be93286"
+SRC_URI[cargo_metadata-0.18.1.sha256sum] = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037"
+SRC_URI[cbindgen-0.26.0.sha256sum] = "da6bc11b07529f16944307272d5bd9b22530bc7d05751717c9d416586cedab49"
+SRC_URI[cc-1.0.83.sha256sum] = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+SRC_URI[cfb-0.9.0.sha256sum] = "b390793e912300f1aa713429f7fd0c391024e6c18b988962558bc4f96a349b1f"
+SRC_URI[cfg-if-1.0.0.sha256sum] = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+SRC_URI[charset-0.1.3.sha256sum] = "18e9079d1a12a2cc2bffb5db039c43661836ead4082120d5844f02555aca2d46"
+SRC_URI[chumsky-0.9.3.sha256sum] = "8eebd66744a15ded14960ab4ccdbfb51ad3b81f51f3f04a80adac98c985396c9"
+SRC_URI[clap-4.3.24.sha256sum] = "fb690e81c7840c0d7aade59f242ea3b41b9bc27bcd5997890e7702ae4b32e487"
+SRC_URI[clap_builder-4.3.24.sha256sum] = "5ed2e96bc16d8d740f6f48d663eddf4b8a0983e79210fd55479b7bcd0a69860e"
+SRC_URI[clap_complete-4.3.2.sha256sum] = "5fc443334c81a804575546c5a8a79b4913b50e28d69232903604cada1de817ce"
+SRC_URI[clap_complete_command-0.5.1.sha256sum] = "183495371ea78d4c9ff638bfc6497d46fed2396e4f9c50aebc1278a4a9919a3d"
+SRC_URI[clap_complete_fig-4.3.1.sha256sum] = "99fee1d30a51305a6c2ed3fc5709be3c8af626c9c958e04dd9ae94e27bcbce9f"
+SRC_URI[clap_complete_nushell-0.1.11.sha256sum] = "5d02bc8b1a18ee47c4d2eec3fb5ac034dc68ebea6125b1509e9ccdffcddce66e"
+SRC_URI[clap_derive-4.3.12.sha256sum] = "54a9bb5758fc5dfe728d1019941681eccaf0cf8a4189b692a0ee2f2ecf90a050"
+SRC_URI[clap_lex-0.5.0.sha256sum] = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b"
+SRC_URI[cli-table-0.4.7.sha256sum] = "adfbb116d9e2c4be7011360d0c0bee565712c11e969c9609b25b619366dc379d"
+SRC_URI[colorchoice-1.0.0.sha256sum] = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
+SRC_URI[configparser-3.0.3.sha256sum] = "e0e56e414a2a52ab2a104f85cd40933c2fbc278b83637facf646ecf451b49237"
+SRC_URI[console-0.15.7.sha256sum] = "c926e00cc70edefdc64d3a5ff31cc65bb97a3460097762bd23afb4d8145fccf8"
+SRC_URI[content_inspector-0.2.4.sha256sum] = "b7bda66e858c683005a53a9a60c69a4aca7eeaa45d124526e389f7aec8e62f38"
+SRC_URI[core-foundation-0.9.3.sha256sum] = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+SRC_URI[core-foundation-sys-0.8.4.sha256sum] = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+SRC_URI[cpufeatures-0.2.11.sha256sum] = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0"
+SRC_URI[crc32fast-1.3.2.sha256sum] = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+SRC_URI[crossbeam-channel-0.5.8.sha256sum] = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
+SRC_URI[crossbeam-deque-0.8.3.sha256sum] = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
+SRC_URI[crossbeam-epoch-0.9.15.sha256sum] = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
+SRC_URI[crossbeam-utils-0.8.16.sha256sum] = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
+SRC_URI[crypto-common-0.1.6.sha256sum] = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+SRC_URI[data-encoding-2.5.0.sha256sum] = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5"
+SRC_URI[deranged-0.3.9.sha256sum] = "0f32d04922c60427da6f9fef14d042d9edddef64cb9d4ce0d64d0685fbeb1fd3"
+SRC_URI[dialoguer-0.11.0.sha256sum] = "658bce805d770f407bc62102fca7c2c64ceef2fbcb2b8bd19d2765ce093980de"
+SRC_URI[diff-0.1.13.sha256sum] = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8"
+SRC_URI[digest-0.10.7.sha256sum] = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+SRC_URI[dirs-5.0.1.sha256sum] = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225"
+SRC_URI[dirs-sys-0.4.1.sha256sum] = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c"
+SRC_URI[dissimilar-1.0.7.sha256sum] = "86e3bdc80eee6e16b2b6b0f87fbc98c04bee3455e35174c0de1a125d0688c632"
+SRC_URI[dunce-1.0.4.sha256sum] = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b"
+SRC_URI[either-1.9.0.sha256sum] = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
+SRC_URI[encode_unicode-0.3.6.sha256sum] = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
+SRC_URI[encoding_rs-0.8.33.sha256sum] = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1"
+SRC_URI[equivalent-1.0.1.sha256sum] = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+SRC_URI[errno-0.3.8.sha256sum] = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245"
+SRC_URI[expect-test-1.4.1.sha256sum] = "30d9eafeadd538e68fb28016364c9732d78e420b9ff8853fa5e4058861e9f8d3"
+SRC_URI[fastrand-2.0.1.sha256sum] = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5"
+SRC_URI[fat-macho-0.4.7.sha256sum] = "63fa117c7dcabeb8c83d5c229764cfa46518545d2dba5a9a08912014711f997b"
+SRC_URI[filetime-0.2.22.sha256sum] = "d4029edd3e734da6fe05b6cd7bd2960760a616bd2ddd0d59a0124746d6272af0"
+SRC_URI[flate2-1.0.28.sha256sum] = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e"
+SRC_URI[fnv-1.0.7.sha256sum] = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+SRC_URI[foreign-types-0.3.2.sha256sum] = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+SRC_URI[foreign-types-shared-0.1.1.sha256sum] = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+SRC_URI[form_urlencoded-1.2.1.sha256sum] = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
+SRC_URI[fs-err-2.11.0.sha256sum] = "88a41f105fe1d5b6b34b2055e3dc59bb79b46b48b2040b9e6c7b4b5de097aa41"
+SRC_URI[generic-array-0.14.7.sha256sum] = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+SRC_URI[getrandom-0.2.11.sha256sum] = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f"
+SRC_URI[glob-0.3.1.sha256sum] = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+SRC_URI[globset-0.4.14.sha256sum] = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1"
+SRC_URI[goblin-0.7.1.sha256sum] = "f27c1b4369c2cd341b5de549380158b105a04c331be5db9110eef7b6d2742134"
+SRC_URI[hashbrown-0.12.3.sha256sum] = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+SRC_URI[hashbrown-0.14.3.sha256sum] = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
+SRC_URI[heck-0.4.1.sha256sum] = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+SRC_URI[hermit-abi-0.3.3.sha256sum] = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"
+SRC_URI[home-0.5.5.sha256sum] = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb"
+SRC_URI[humantime-2.1.0.sha256sum] = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+SRC_URI[humantime-serde-1.1.1.sha256sum] = "57a3db5ea5923d99402c94e9feb261dc5ee9b4efa158b0315f788cf549cc200c"
+SRC_URI[idna-0.5.0.sha256sum] = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6"
+SRC_URI[ignore-0.4.20.sha256sum] = "dbe7873dab538a9a44ad79ede1faf5f30d49f9a5c883ddbab48bce81b64b7492"
+SRC_URI[indexmap-1.9.3.sha256sum] = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+SRC_URI[indexmap-2.1.0.sha256sum] = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f"
+SRC_URI[indicatif-0.17.7.sha256sum] = "fb28741c9db9a713d93deb3bb9515c20788cef5815265bee4980e87bde7e0f25"
+SRC_URI[indoc-2.0.4.sha256sum] = "1e186cfbae8084e513daff4240b4797e342f988cecda4fb6c939150f96315fd8"
+SRC_URI[instant-0.1.12.sha256sum] = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+SRC_URI[io-lifetimes-1.0.11.sha256sum] = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
+SRC_URI[is-terminal-0.4.9.sha256sum] = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
+SRC_URI[itertools-0.11.0.sha256sum] = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57"
+SRC_URI[itertools-0.12.0.sha256sum] = "25db6b064527c5d482d0423354fcd07a89a2dfe07b67892e62411946db7f07b0"
+SRC_URI[itoa-1.0.9.sha256sum] = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
+SRC_URI[keyring-2.0.5.sha256sum] = "9549a129bd08149e0a71b2d1ce2729780d47127991bfd0a78cc1df697ec72492"
+SRC_URI[lazy_static-1.4.0.sha256sum] = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+SRC_URI[lddtree-0.3.3.sha256sum] = "2f5bfec46830ad3a95199ae6804dfe9f51fdad43d7a95fbb6c185efa9824c295"
+SRC_URI[libc-0.2.150.sha256sum] = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c"
+SRC_URI[libredox-0.0.1.sha256sum] = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8"
+SRC_URI[linux-keyutils-0.2.3.sha256sum] = "3f27bb67f6dd1d0bb5ab582868e4f65052e58da6401188a08f0da09cf512b84b"
+SRC_URI[linux-raw-sys-0.3.8.sha256sum] = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
+SRC_URI[linux-raw-sys-0.4.11.sha256sum] = "969488b55f8ac402214f3f5fd243ebb7206cf82de60d3172994707a4bcc2b829"
+SRC_URI[lock_api-0.4.11.sha256sum] = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45"
+SRC_URI[log-0.4.20.sha256sum] = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
+SRC_URI[lzxd-0.1.4.sha256sum] = "784462f20dddd9dfdb45de963fa4ad4a288cb10a7889ac5d2c34fb6481c6b213"
+SRC_URI[mailparse-0.14.0.sha256sum] = "6b56570f5f8c0047260d1c8b5b331f62eb9c660b9dd4071a8c46f8c7d3f280aa"
+SRC_URI[matchers-0.1.0.sha256sum] = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
+SRC_URI[memchr-2.6.4.sha256sum] = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
+SRC_URI[memoffset-0.9.0.sha256sum] = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
+SRC_URI[mime-0.3.17.sha256sum] = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+SRC_URI[mime_guess-2.0.4.sha256sum] = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef"
+SRC_URI[minijinja-1.0.10.sha256sum] = "208758577ef2c86cf5dd3e85730d161413ec3284e2d73b2ef65d9a24d9971bcb"
+SRC_URI[minimal-lexical-0.2.1.sha256sum] = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+SRC_URI[miniz_oxide-0.7.1.sha256sum] = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+SRC_URI[msi-0.7.0.sha256sum] = "226b2404f03d2cf47375b9715c8adfae4e388bb2377cff908e8a40f31e421514"
+SRC_URI[multipart-0.18.0.sha256sum] = "00dec633863867f29cb39df64a397cdf4a6354708ddd7759f70c7fb51c5f9182"
+SRC_URI[native-tls-0.2.11.sha256sum] = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e"
+SRC_URI[nom-7.1.3.sha256sum] = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+SRC_URI[normalize-line-endings-0.3.0.sha256sum] = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be"
+SRC_URI[normpath-1.1.1.sha256sum] = "ec60c60a693226186f5d6edf073232bfb6464ed97eb22cf3b01c1e8198fd97f5"
+SRC_URI[nu-ansi-term-0.46.0.sha256sum] = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
+SRC_URI[number_prefix-0.4.0.sha256sum] = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3"
+SRC_URI[once_cell-1.18.0.sha256sum] = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+SRC_URI[openssl-0.10.60.sha256sum] = "79a4c6c3a2b158f7f8f2a2fc5a969fa3a068df6fc9dbb4a43845436e3af7c800"
+SRC_URI[openssl-macros-0.1.1.sha256sum] = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
+SRC_URI[openssl-probe-0.1.5.sha256sum] = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+SRC_URI[openssl-sys-0.9.96.sha256sum] = "3812c071ba60da8b5677cc12bcb1d42989a65553772897a7e0355545a819838f"
+SRC_URI[option-ext-0.2.0.sha256sum] = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
+SRC_URI[os_pipe-1.1.4.sha256sum] = "0ae859aa07428ca9a929b936690f8b12dc5f11dd8c6992a18ca93919f28bc177"
+SRC_URI[overload-0.1.1.sha256sum] = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
+SRC_URI[parking_lot-0.12.1.sha256sum] = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+SRC_URI[parking_lot_core-0.9.9.sha256sum] = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e"
+SRC_URI[paste-1.0.14.sha256sum] = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c"
+SRC_URI[path-slash-0.2.1.sha256sum] = "1e91099d4268b0e11973f036e885d652fb0b21fedcf69738c627f94db6a44f42"
+SRC_URI[pep440_rs-0.3.12.sha256sum] = "887f66cc62717ea72caac4f1eb4e6f392224da3ffff3f40ec13ab427802746d6"
+SRC_URI[pep508_rs-0.2.3.sha256sum] = "e4516b53d9ea6112ebb38b4af08d5707d30b994fb7f98ff133c5dcf7ed8fa854"
+SRC_URI[percent-encoding-2.3.1.sha256sum] = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
+SRC_URI[pin-project-lite-0.2.13.sha256sum] = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
+SRC_URI[pkg-config-0.3.27.sha256sum] = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
+SRC_URI[plain-0.2.3.sha256sum] = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6"
+SRC_URI[platform-info-2.0.2.sha256sum] = "d6259c4860e53bf665016f1b2f46a8859cadfa717581dc9d597ae4069de6300f"
+SRC_URI[portable-atomic-1.5.1.sha256sum] = "3bccab0e7fd7cc19f820a1c8c91720af652d0c88dc9664dd72aef2614f04af3b"
+SRC_URI[powerfmt-0.2.0.sha256sum] = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
+SRC_URI[ppv-lite86-0.2.17.sha256sum] = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+SRC_URI[pretty_assertions-1.4.0.sha256sum] = "af7cee1a6c8a5b9208b3cb1061f10c0cb689087b3d8ce85fb9d2dd7a29b6ba66"
+SRC_URI[proc-macro2-1.0.70.sha256sum] = "39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b"
+SRC_URI[psm-0.1.21.sha256sum] = "5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874"
+SRC_URI[pyproject-toml-0.8.1.sha256sum] = "46d4a5e69187f23a29f8aa0ea57491d104ba541bc55f76552c2a74962aa20e04"
+SRC_URI[python-pkginfo-0.6.0.sha256sum] = "037469c164f08c891bf6d69ca02f1d56210011451e229618669777df82124cfa"
+SRC_URI[quote-1.0.33.sha256sum] = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
+SRC_URI[quoted_printable-0.4.8.sha256sum] = "5a3866219251662ec3b26fc217e3e05bf9c4f84325234dfb96bf0bf840889e49"
+SRC_URI[rand-0.8.5.sha256sum] = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+SRC_URI[rand_chacha-0.3.1.sha256sum] = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+SRC_URI[rand_core-0.6.4.sha256sum] = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+SRC_URI[rayon-1.8.0.sha256sum] = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1"
+SRC_URI[rayon-core-1.12.0.sha256sum] = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed"
+SRC_URI[redox_syscall-0.3.5.sha256sum] = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+SRC_URI[redox_syscall-0.4.1.sha256sum] = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
+SRC_URI[redox_users-0.4.4.sha256sum] = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4"
+SRC_URI[regex-1.10.2.sha256sum] = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343"
+SRC_URI[regex-automata-0.1.10.sha256sum] = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
+SRC_URI[regex-automata-0.4.3.sha256sum] = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f"
+SRC_URI[regex-syntax-0.6.29.sha256sum] = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
+SRC_URI[regex-syntax-0.8.2.sha256sum] = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
+SRC_URI[rfc2047-decoder-0.2.2.sha256sum] = "61fc4b4e52897c3e30b12b7e9b04461215b647fbe66f6def60dd8edbce14ec2e"
+SRC_URI[ring-0.17.6.sha256sum] = "684d5e6e18f669ccebf64a92236bb7db9a34f07be010e3627368182027180866"
+SRC_URI[rustc_version-0.4.0.sha256sum] = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+SRC_URI[rustix-0.37.27.sha256sum] = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2"
+SRC_URI[rustix-0.38.21.sha256sum] = "2b426b0506e5d50a7d8dafcf2e81471400deb602392c7dd110815afb4eaf02a3"
+SRC_URI[rustls-0.21.9.sha256sum] = "629648aced5775d558af50b2b4c7b02983a04b312126d45eeead26e7caa498b9"
+SRC_URI[rustls-pemfile-2.0.0.sha256sum] = "35e4980fa29e4c4b212ffb3db068a564cbf560e51d3944b7c88bd8bf5bec64f4"
+SRC_URI[rustls-pki-types-1.0.0.sha256sum] = "eb0a1f9b9efec70d32e6d6aa3e58ebd88c3754ec98dfe9145c63cf54cc829b83"
+SRC_URI[rustls-webpki-0.101.7.sha256sum] = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765"
+SRC_URI[rustversion-1.0.14.sha256sum] = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4"
+SRC_URI[ryu-1.0.15.sha256sum] = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
+SRC_URI[same-file-1.0.6.sha256sum] = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+SRC_URI[schannel-0.1.22.sha256sum] = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88"
+SRC_URI[scopeguard-1.2.0.sha256sum] = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+SRC_URI[scroll-0.11.0.sha256sum] = "04c565b551bafbef4157586fa379538366e4385d42082f255bfd96e4fe8519da"
+SRC_URI[scroll_derive-0.11.1.sha256sum] = "1db149f81d46d2deba7cd3c50772474707729550221e69588478ebf9ada425ae"
+SRC_URI[sct-0.7.1.sha256sum] = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414"
+SRC_URI[security-framework-2.9.2.sha256sum] = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de"
+SRC_URI[security-framework-sys-2.9.1.sha256sum] = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a"
+SRC_URI[semver-1.0.20.sha256sum] = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090"
+SRC_URI[serde-1.0.193.sha256sum] = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89"
+SRC_URI[serde_derive-1.0.193.sha256sum] = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3"
+SRC_URI[serde_json-1.0.108.sha256sum] = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b"
+SRC_URI[serde_spanned-0.6.4.sha256sum] = "12022b835073e5b11e90a14f86838ceb1c8fb0325b72416845c487ac0fa95e80"
+SRC_URI[sha2-0.10.8.sha256sum] = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8"
+SRC_URI[sharded-slab-0.1.7.sha256sum] = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6"
+SRC_URI[shell-words-1.1.0.sha256sum] = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde"
+SRC_URI[shlex-1.2.0.sha256sum] = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380"
+SRC_URI[similar-2.3.0.sha256sum] = "2aeaf503862c419d66959f5d7ca015337d864e9c49485d771b732e2a20453597"
+SRC_URI[smallvec-1.11.2.sha256sum] = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970"
+SRC_URI[smawk-0.3.2.sha256sum] = "b7c388c1b5e93756d0c740965c41e8822f866621d41acbdf6336a6a168f8840c"
+SRC_URI[snapbox-0.4.14.sha256sum] = "4b377c0b6e4715c116473d8e40d51e3fa5b0a2297ca9b2a931ba800667b259ed"
+SRC_URI[snapbox-macros-0.3.6.sha256sum] = "ed1559baff8a696add3322b9be3e940d433e7bb4e38d79017205fd37ff28b28e"
+SRC_URI[socks-0.3.4.sha256sum] = "f0c3dbbd9ae980613c6dd8e28a9407b50509d3803b57624d5dfe8315218cd58b"
+SRC_URI[spin-0.9.8.sha256sum] = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
+SRC_URI[stacker-0.1.15.sha256sum] = "c886bd4480155fd3ef527d45e9ac8dd7118a898a46530b7b94c3e21866259fce"
+SRC_URI[static_assertions-1.1.0.sha256sum] = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+SRC_URI[strsim-0.10.0.sha256sum] = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+SRC_URI[syn-1.0.109.sha256sum] = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+SRC_URI[syn-2.0.39.sha256sum] = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a"
+SRC_URI[tar-0.4.40.sha256sum] = "b16afcea1f22891c49a00c751c7b63b2233284064f11a200fc624137c51e2ddb"
+SRC_URI[target-lexicon-0.12.12.sha256sum] = "14c39fd04924ca3a864207c66fc2cd7d22d7c016007f9ce846cbb9326331930a"
+SRC_URI[tempfile-3.8.1.sha256sum] = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5"
+SRC_URI[termcolor-1.4.0.sha256sum] = "ff1bc3d3f05aff0403e8ac0d92ced918ec05b666a43f83297ccef5bea8a3d449"
+SRC_URI[terminal_size-0.2.6.sha256sum] = "8e6bf6f19e9f8ed8d4048dc22981458ebcf406d67e94cd422e5ecd73d63b3237"
+SRC_URI[textwrap-0.16.0.sha256sum] = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d"
+SRC_URI[thiserror-1.0.50.sha256sum] = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2"
+SRC_URI[thiserror-impl-1.0.50.sha256sum] = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8"
+SRC_URI[thread_local-1.1.7.sha256sum] = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152"
+SRC_URI[time-0.3.30.sha256sum] = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5"
+SRC_URI[time-core-0.1.2.sha256sum] = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
+SRC_URI[time-macros-0.2.15.sha256sum] = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20"
+SRC_URI[tinyvec-1.6.0.sha256sum] = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+SRC_URI[tinyvec_macros-0.1.1.sha256sum] = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+SRC_URI[toml-0.5.11.sha256sum] = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
+SRC_URI[toml-0.8.8.sha256sum] = "a1a195ec8c9da26928f773888e0742ca3ca1040c6cd859c919c9f59c1954ab35"
+SRC_URI[toml_datetime-0.6.5.sha256sum] = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1"
+SRC_URI[toml_edit-0.20.7.sha256sum] = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81"
+SRC_URI[toml_edit-0.21.0.sha256sum] = "d34d383cd00a163b4a5b85053df514d45bc330f6de7737edfe0a93311d1eaa03"
+SRC_URI[tracing-0.1.40.sha256sum] = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
+SRC_URI[tracing-attributes-0.1.27.sha256sum] = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
+SRC_URI[tracing-core-0.1.32.sha256sum] = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
+SRC_URI[tracing-log-0.2.0.sha256sum] = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3"
+SRC_URI[tracing-serde-0.1.3.sha256sum] = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1"
+SRC_URI[tracing-subscriber-0.3.18.sha256sum] = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b"
+SRC_URI[trycmd-0.14.19.sha256sum] = "ed009372a42fb103e6f8767b9222925485e03cca032b700d203e2c5b67bee4fb"
+SRC_URI[twox-hash-1.6.3.sha256sum] = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675"
+SRC_URI[typenum-1.17.0.sha256sum] = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
+SRC_URI[unicase-2.7.0.sha256sum] = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89"
+SRC_URI[unicode-bidi-0.3.13.sha256sum] = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+SRC_URI[unicode-ident-1.0.12.sha256sum] = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+SRC_URI[unicode-linebreak-0.1.5.sha256sum] = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f"
+SRC_URI[unicode-normalization-0.1.22.sha256sum] = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+SRC_URI[unicode-width-0.1.11.sha256sum] = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85"
+SRC_URI[untrusted-0.9.0.sha256sum] = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
+SRC_URI[ureq-2.9.1.sha256sum] = "f8cdd25c339e200129fe4de81451814e5228c9b771d57378817d6117cc2b3f97"
+SRC_URI[url-2.5.0.sha256sum] = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633"
+SRC_URI[utf8parse-0.2.1.sha256sum] = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+SRC_URI[uuid-1.6.1.sha256sum] = "5e395fcf16a7a3d8127ec99782007af141946b4795001f876d54fb0d55978560"
+SRC_URI[valuable-0.1.0.sha256sum] = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
+SRC_URI[vcpkg-0.2.15.sha256sum] = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+SRC_URI[version_check-0.9.4.sha256sum] = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+SRC_URI[versions-5.0.1.sha256sum] = "c73a36bc44e3039f51fbee93e39f41225f6b17b380eb70cc2aab942df06b34dd"
+SRC_URI[wait-timeout-0.2.0.sha256sum] = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6"
+SRC_URI[walkdir-2.4.0.sha256sum] = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee"
+SRC_URI[wasi-0.11.0+wasi-snapshot-preview1.sha256sum] = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+SRC_URI[webpki-roots-0.25.3.sha256sum] = "1778a42e8b3b90bff8d0f5032bf22250792889a5cdc752aa0020c84abe3aaf10"
+SRC_URI[which-5.0.0.sha256sum] = "9bf3ea8596f3a0dd5980b46430f2058dfe2c36a27ccfbb1845d6fbfcd9ba6e14"
+SRC_URI[wild-2.2.0.sha256sum] = "10d01931a94d5a115a53f95292f51d316856b68a035618eb831bbba593a30b67"
+SRC_URI[winapi-0.3.9.sha256sum] = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+SRC_URI[winapi-i686-pc-windows-gnu-0.4.0.sha256sum] = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+SRC_URI[winapi-util-0.1.6.sha256sum] = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596"
+SRC_URI[winapi-x86_64-pc-windows-gnu-0.4.0.sha256sum] = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+SRC_URI[windows-sys-0.45.0.sha256sum] = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+SRC_URI[windows-sys-0.48.0.sha256sum] = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+SRC_URI[windows-sys-0.52.0.sha256sum] = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
+SRC_URI[windows-targets-0.42.2.sha256sum] = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+SRC_URI[windows-targets-0.48.5.sha256sum] = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+SRC_URI[windows-targets-0.52.0.sha256sum] = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd"
+SRC_URI[windows_aarch64_gnullvm-0.42.2.sha256sum] = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+SRC_URI[windows_aarch64_gnullvm-0.48.5.sha256sum] = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+SRC_URI[windows_aarch64_gnullvm-0.52.0.sha256sum] = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea"
+SRC_URI[windows_aarch64_msvc-0.42.2.sha256sum] = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+SRC_URI[windows_aarch64_msvc-0.48.5.sha256sum] = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+SRC_URI[windows_aarch64_msvc-0.52.0.sha256sum] = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef"
+SRC_URI[windows_i686_gnu-0.42.2.sha256sum] = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+SRC_URI[windows_i686_gnu-0.48.5.sha256sum] = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+SRC_URI[windows_i686_gnu-0.52.0.sha256sum] = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313"
+SRC_URI[windows_i686_msvc-0.42.2.sha256sum] = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+SRC_URI[windows_i686_msvc-0.48.5.sha256sum] = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+SRC_URI[windows_i686_msvc-0.52.0.sha256sum] = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a"
+SRC_URI[windows_x86_64_gnu-0.42.2.sha256sum] = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+SRC_URI[windows_x86_64_gnu-0.48.5.sha256sum] = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+SRC_URI[windows_x86_64_gnu-0.52.0.sha256sum] = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd"
+SRC_URI[windows_x86_64_gnullvm-0.42.2.sha256sum] = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+SRC_URI[windows_x86_64_gnullvm-0.48.5.sha256sum] = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+SRC_URI[windows_x86_64_gnullvm-0.52.0.sha256sum] = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e"
+SRC_URI[windows_x86_64_msvc-0.42.2.sha256sum] = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+SRC_URI[windows_x86_64_msvc-0.48.5.sha256sum] = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+SRC_URI[windows_x86_64_msvc-0.52.0.sha256sum] = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04"
+SRC_URI[winnow-0.5.19.sha256sum] = "829846f3e3db426d4cee4510841b71a8e58aa2a76b1132579487ae430ccd9c7b"
+SRC_URI[xattr-1.0.1.sha256sum] = "f4686009f71ff3e5c4dbcf1a282d0a44db3f021ba69350cd42086b3e5f1c6985"
+SRC_URI[xwin-0.5.0.sha256sum] = "c43e0202f5457b48558096cb7b36d0e473f267551a89c82ed72d73b01dfd4007"
+SRC_URI[yansi-0.5.1.sha256sum] = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec"
+SRC_URI[zerocopy-0.7.28.sha256sum] = "7d6f15f7ade05d2a4935e34a457b936c23dc70a05cc1d97133dc99e7a3fe0f0e"
+SRC_URI[zerocopy-derive-0.7.28.sha256sum] = "dbbad221e3f78500350ecbd7dfa4e63ef945c05f4c61cb7f4d3f84cd0bba649b"
+SRC_URI[zeroize-1.7.0.sha256sum] = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d"
+SRC_URI[zip-0.6.6.sha256sum] = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261"
diff --git a/meta/recipes-devtools/python/python3-maturin/0001-Add-32-bit-RISC-V-support.patch b/meta/recipes-devtools/python/python3-maturin/0001-Add-32-bit-RISC-V-support.patch
new file mode 100644
index 0000000000..a0ef0c9e22
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-maturin/0001-Add-32-bit-RISC-V-support.patch
@@ -0,0 +1,102 @@
+From a945706bd610c5400fc85a248d5e0c96ebd2e953 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 27 Feb 2024 10:38:49 -0800
+Subject: [PATCH] Add 32-bit RISC-V support
+
+Tested with qemuriscv32 and it builds fine with all tests passed on a
+qemu machine.
+
+Upstream-Status: Submitted [https://github.com/PyO3/maturin/pull/1969]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/target.rs | 11 ++++++++++-
+ 1 file changed, 10 insertions(+), 1 deletion(-)
+
+diff --git a/src/target.rs b/src/target.rs
+index fbb93531..33fa9273 100644
+--- a/src/target.rs
++++ b/src/target.rs
+@@ -69,6 +69,7 @@ pub enum Arch {
+ X86_64,
+ S390X,
+ Wasm32,
++ Riscv32,
+ Riscv64,
+ Mips64el,
+ Mips64,
+@@ -91,6 +92,7 @@ impl fmt::Display for Arch {
+ Arch::X86_64 => write!(f, "x86_64"),
+ Arch::S390X => write!(f, "s390x"),
+ Arch::Wasm32 => write!(f, "wasm32"),
++ Arch::Riscv32 => write!(f, "riscv32"),
+ Arch::Riscv64 => write!(f, "riscv64"),
+ Arch::Mips64el => write!(f, "mips64el"),
+ Arch::Mips64 => write!(f, "mips64"),
+@@ -115,7 +117,7 @@ impl Arch {
+ Arch::Powerpc | Arch::Powerpc64Le | Arch::Powerpc64 => "powerpc",
+ Arch::X86 => "i386",
+ Arch::X86_64 => "amd64",
+- Arch::Riscv64 => "riscv",
++ Arch::Riscv32 | Arch::Riscv64 => "riscv",
+ Arch::Mips64el | Arch::Mips64 | Arch::Mipsel | Arch::Mips => "mips",
+ // sparc64 is unsupported since FreeBSD 13.0
+ Arch::Sparc64 => "sparc64",
+@@ -139,6 +141,7 @@ fn get_supported_architectures(os: &Os) -> Vec<Arch> {
+ Arch::S390X,
+ Arch::X86,
+ Arch::X86_64,
++ Arch::Riscv32,
+ Arch::Riscv64,
+ Arch::Mips64el,
+ Arch::Mips64,
+@@ -158,6 +161,7 @@ fn get_supported_architectures(os: &Os) -> Vec<Arch> {
+ Arch::Powerpc64Le,
+ Arch::X86,
+ Arch::X86_64,
++ Arch::Riscv32,
+ Arch::Riscv64,
+ Arch::Mips64el,
+ Arch::Mipsel,
+@@ -171,6 +175,7 @@ fn get_supported_architectures(os: &Os) -> Vec<Arch> {
+ Arch::Powerpc,
+ Arch::Powerpc64,
+ Arch::Powerpc64Le,
++ Arch::Riscv32,
+ Arch::Riscv64,
+ Arch::Sparc64,
+ ],
+@@ -255,6 +260,7 @@ impl Target {
+ Architecture::Powerpc64le => Arch::Powerpc64Le,
+ Architecture::S390x => Arch::S390X,
+ Architecture::Wasm32 => Arch::Wasm32,
++ Architecture::Riscv32(_) => Arch::Riscv32,
+ Architecture::Riscv64(_) => Arch::Riscv64,
+ Architecture::Mips64(mips64_arch) => match mips64_arch {
+ Mips64Architecture::Mips64el => Arch::Mips64el,
+@@ -343,6 +349,7 @@ impl Target {
+ Arch::X86_64 => "x86_64",
+ Arch::S390X => "s390x",
+ Arch::Wasm32 => "wasm32",
++ Arch::Riscv32 => "riscv32",
+ Arch::Riscv64 => "riscv64",
+ // It's kinda surprising that Python doesn't include the `el` suffix
+ Arch::Mips64el | Arch::Mips64 => "mips64",
+@@ -388,6 +395,7 @@ impl Target {
+ }
+ Arch::Armv6L
+ | Arch::Wasm32
++ | Arch::Riscv32
+ | Arch::Riscv64
+ | Arch::Mips64el
+ | Arch::Mips64
+@@ -418,6 +426,7 @@ impl Target {
+ | Arch::Wasm32
+ | Arch::Mipsel
+ | Arch::Mips
++ | Arch::Riscv32
+ | Arch::Powerpc => 32,
+ }
+ }
+--
+2.44.0
+
diff --git a/meta/recipes-devtools/python/python3-maturin_1.4.0.bb b/meta/recipes-devtools/python/python3-maturin_1.4.0.bb
new file mode 100644
index 0000000000..ed19ee647a
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-maturin_1.4.0.bb
@@ -0,0 +1,43 @@
+SUMMARY = "Build and publish crates with pyo3, rust-cpython, cffi bindings and rust binaries as python packages"
+HOMEPAGE = "https://github.com/pyo3/maturin"
+SECTION = "devel/python"
+LICENSE = "MIT | Apache-2.0"
+LIC_FILES_CHKSUM = "file://license-apache;md5=1836efb2eb779966696f473ee8540542 \
+ file://license-mit;md5=85fd3b67069cff784d98ebfc7d5c0797"
+
+SRC_URI += "file://0001-Add-32-bit-RISC-V-support.patch"
+SRC_URI[sha256sum] = "ed12e1768094a7adeafc3a74ebdb8dc2201fa64c4e7e31f14cfc70378bf93790"
+
+S = "${WORKDIR}/maturin-${PV}"
+
+CFLAGS:append = " -fdebug-prefix-map=${CARGO_HOME}=${TARGET_DBGSRC_DIR}/cargo_home"
+
+DEPENDS += "\
+ python3-setuptools-rust-native \
+ python3-semantic-version-native \
+ python3-setuptools-rust \
+"
+
+require ${BPN}-crates.inc
+
+inherit pypi cargo-update-recipe-crates python_pyo3 python_setuptools_build_meta
+
+do_configure() {
+ python_pyo3_do_configure
+ cargo_common_do_configure
+ python_pep517_do_configure
+}
+
+RDEPENDS:${PN} += "\
+ cargo \
+ python3-json \
+ rust \
+"
+
+RRECOMMENDS:${PN} += "\
+ python3-ensurepip \
+ python3-pip \
+ python3-venv \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-meson-python_0.15.0.bb b/meta/recipes-devtools/python/python3-meson-python_0.15.0.bb
new file mode 100644
index 0000000000..ad3cfe17d9
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-meson-python_0.15.0.bb
@@ -0,0 +1,27 @@
+SUMMARY = "Meson Python build backend (PEP 517)"
+HOMEPAGE = "https://github.com/mesonbuild/meson-python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=d580b27e67cc0892a5b005b0be114b60"
+
+DEPENDS = " \
+ meson-native \
+ ninja-native \
+ patchelf-native \
+ python3-pyproject-metadata-native \
+"
+
+PYPI_PACKAGE = "meson_python"
+
+inherit pypi python_mesonpy
+SRC_URI[sha256sum] = "fddb73eecd49e89c1c41c87937cd89c2d0b65a1c63ba28238681d4bd9484d26f"
+
+DEPENDS:remove:class-native = "python3-meson-python-native"
+
+RDEPENDS:${PN} = " \
+ meson \
+ ninja \
+ patchelf \
+ python3-pyproject-metadata \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-more-itertools/run-ptest b/meta/recipes-devtools/python/python3-more-itertools/run-ptest
new file mode 100644
index 0000000000..8d2017d39c
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-more-itertools/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+pytest --automake
diff --git a/meta/recipes-devtools/python/python3-more-itertools_10.2.0.bb b/meta/recipes-devtools/python/python3-more-itertools_10.2.0.bb
new file mode 100644
index 0000000000..e1e1f5e18f
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-more-itertools_10.2.0.bb
@@ -0,0 +1,29 @@
+SUMMARY = "More routines for operating on iterables, beyond itertools"
+HOMEPAGE = "https://github.com/erikrose/more-itertools"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3396ea30f9d21389d7857719816f83b5"
+
+SRC_URI[sha256sum] = "8fccb480c43d3e99a00087634c06dd02b0d50fbf088b380de5a41a015ec239e1"
+
+inherit pypi python_flit_core ptest
+
+SRC_URI += " \
+ file://run-ptest \
+"
+
+RDEPENDS:${PN} += " \
+ python3-asyncio \
+ "
+
+RDEPENDS:${PN}-ptest += " \
+ python3-statistics \
+ python3-pytest \
+ python3-unittest-automake-output \
+ "
+
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}/tests
+ cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-ndg-httpsclient_0.5.1.bb b/meta/recipes-devtools/python/python3-ndg-httpsclient_0.5.1.bb
new file mode 100644
index 0000000000..68d8668a41
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-ndg-httpsclient_0.5.1.bb
@@ -0,0 +1,31 @@
+SUMMARY = "Provides enhanced HTTPS support for httplib and urllib2 using PyOpenSSL"
+HOMEPAGE = "https://github.com/cedadev/ndg_httpsclient/"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://MANIFEST.in;md5=ce22c0cd986d2de3f7073cd6b5523ae0"
+
+SRC_URI[md5sum] = "b0fc8ea38f87d2c1ab1ed79a95c078f9"
+SRC_URI[sha256sum] = "d72faed0376ab039736c2ba12e30695e2788c4aa569c9c3e3d72131de2592210"
+
+inherit pypi setuptools3 update-alternatives
+
+PYPI_PACKAGE = "ndg_httpsclient"
+
+DEPENDS += " \
+ python3-pyopenssl \
+ python3-pyasn1 \
+"
+
+RDEPENDS:${PN} += " \
+ python3-datetime \
+ python3-logging \
+ python3-pyopenssl \
+ python3-pyasn1 \
+"
+
+BBCLASSEXTEND = "native nativesdk"
+
+UPSTREAM_CHECK_REGEX = ""
+
+ALTERNATIVE:${PN} = "ndg_httpclient"
+ALTERNATIVE_LINK_NAME[ndg_httpclient] = "${bindir}/ndg_httpclient"
+ALTERNATIVE_PRIORITY = "30"
diff --git a/meta/recipes-devtools/python/python3-nose_1.3.7.bb b/meta/recipes-devtools/python/python3-nose_1.3.7.bb
deleted file mode 100644
index 8bc1f49835..0000000000
--- a/meta/recipes-devtools/python/python3-nose_1.3.7.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-inherit setuptools3
-require python-nose.inc
-
-do_install_append() {
- mv ${D}${bindir}/nosetests ${D}${bindir}/nosetests3
-}
diff --git a/meta/recipes-devtools/python/python3-numpy/0001-Don-t-search-usr-and-so-on-for-libraries-by-default-.patch b/meta/recipes-devtools/python/python3-numpy/0001-Don-t-search-usr-and-so-on-for-libraries-by-default-.patch
new file mode 100644
index 0000000000..bbe309c556
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-numpy/0001-Don-t-search-usr-and-so-on-for-libraries-by-default-.patch
@@ -0,0 +1,70 @@
+From 46eea664cf89d0602e7ff16d587c37c045b125b7 Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex.kanavin@gmail.com>
+Date: Thu, 10 Dec 2015 13:20:30 +0200
+Subject: [PATCH] Don't search /usr and so on for libraries by default to
+
+ avoid host contamination.
+
+Upstream-Status: Inappropriate (As the code stands, this is a hack)
+Signed-off-by: Ross Burton <ross.burton@intel.com>
+Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
+
+---
+ numpy/distutils/system_info.py | 42 +++++-----------------------------
+ 1 file changed, 6 insertions(+), 36 deletions(-)
+
+diff --git a/numpy/distutils/system_info.py b/numpy/distutils/system_info.py
+index feb28f6..a48d6d1 100644
+--- a/numpy/distutils/system_info.py
++++ b/numpy/distutils/system_info.py
+@@ -327,44 +327,14 @@ def add_system_root(library_root):
+ add_system_root(os.path.join(conda_dir, 'Library'))
+
+ else:
+- default_lib_dirs = libpaths(['/usr/local/lib', '/opt/lib', '/usr/lib',
+- '/opt/local/lib', '/sw/lib'], platform_bits)
+ default_runtime_dirs = []
+- default_include_dirs = ['/usr/local/include',
+- '/opt/include',
+- # path of umfpack under macports
+- '/opt/local/include/ufsparse',
+- '/opt/local/include', '/sw/include',
+- '/usr/include/suitesparse']
+- default_src_dirs = ['.', '/usr/local/src', '/opt/src', '/sw/src']
+-
+- default_x11_lib_dirs = libpaths(['/usr/X11R6/lib', '/usr/X11/lib',
+- '/usr/lib'], platform_bits)
+- default_x11_include_dirs = ['/usr/X11R6/include', '/usr/X11/include']
+-
+- if os.path.exists('/usr/lib/X11'):
+- globbed_x11_dir = glob('/usr/lib/*/libX11.so')
+- if globbed_x11_dir:
+- x11_so_dir = os.path.split(globbed_x11_dir[0])[0]
+- default_x11_lib_dirs.extend([x11_so_dir, '/usr/lib/X11'])
+- default_x11_include_dirs.extend(['/usr/lib/X11/include',
+- '/usr/include/X11'])
+-
+- with open(os.devnull, 'w') as tmp:
+- try:
+- p = subprocess.Popen(["gcc", "-print-multiarch"], stdout=subprocess.PIPE,
+- stderr=tmp)
+- except (OSError, DistutilsError):
+- # OSError if gcc is not installed, or SandboxViolation (DistutilsError
+- # subclass) if an old setuptools bug is triggered (see gh-3160).
+- pass
+- else:
+- triplet = str(p.communicate()[0].decode().strip())
+- if p.returncode == 0:
+- # gcc supports the "-print-multiarch" option
+- default_x11_lib_dirs += [os.path.join("/usr/lib/", triplet)]
+- default_lib_dirs += [os.path.join("/usr/lib/", triplet)]
+
++ default_lib_dirs = libpaths(['/deadir/lib'], platform_bits)
++ default_include_dirs = ['/deaddir/include']
++ default_src_dirs = ['.', '/deaddir/src']
++
++ default_x11_lib_dirs = libpaths(['/deaddir/lib'], platform_bits)
++ default_x11_include_dirs = ['/deaddir/include']
+
+ if os.path.join(sys.prefix, 'lib') not in default_lib_dirs:
+ default_lib_dirs.insert(0, os.path.join(sys.prefix, 'lib'))
diff --git a/meta/recipes-devtools/python/python3-numpy/0001-numpy-core-Define-RISCV-32-support.patch b/meta/recipes-devtools/python/python3-numpy/0001-numpy-core-Define-RISCV-32-support.patch
new file mode 100644
index 0000000000..676bdbb3af
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-numpy/0001-numpy-core-Define-RISCV-32-support.patch
@@ -0,0 +1,50 @@
+From eb6d6579150bf4684603ce377c51e90ad3bb8109 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 15 Nov 2020 15:32:39 -0800
+Subject: [PATCH] numpy/core: Define RISCV-32 support
+
+Helps compile on riscv32
+
+Upstream-Status: Submitted [https://github.com/numpy/numpy/pull/17780]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ numpy/core/include/numpy/npy_cpu.h | 3 +++
+ numpy/core/include/numpy/npy_endian.h | 1 +
+ 2 files changed, 4 insertions(+)
+
+diff --git a/numpy/core/include/numpy/npy_cpu.h b/numpy/core/include/numpy/npy_cpu.h
+index 78d229e..04be511 100644
+--- a/numpy/core/include/numpy/npy_cpu.h
++++ b/numpy/core/include/numpy/npy_cpu.h
+@@ -19,6 +19,7 @@
+ * NPY_CPU_ARCEB
+ * NPY_CPU_RISCV64
+ * NPY_CPU_LOONGARCH
++ * NPY_CPU_RISCV32
+ * NPY_CPU_WASM
+ */
+ #ifndef NUMPY_CORE_INCLUDE_NUMPY_NPY_CPU_H_
+@@ -104,6 +105,8 @@
+ #define NPY_CPU_ARCEB
+ #elif defined(__riscv) && defined(__riscv_xlen) && __riscv_xlen == 64
+ #define NPY_CPU_RISCV64
++#elif defined(__riscv) && defined(__riscv_xlen) && __riscv_xlen == 32
++ #define NPY_CPU_RISCV32
+ #elif defined(__loongarch__)
+ #define NPY_CPU_LOONGARCH
+ #elif defined(__EMSCRIPTEN__)
+diff --git a/numpy/core/include/numpy/npy_endian.h b/numpy/core/include/numpy/npy_endian.h
+index 5e58a7f..0926212 100644
+--- a/numpy/core/include/numpy/npy_endian.h
++++ b/numpy/core/include/numpy/npy_endian.h
+@@ -49,6 +49,7 @@
+ || defined(NPY_CPU_PPC64LE) \
+ || defined(NPY_CPU_ARCEL) \
+ || defined(NPY_CPU_RISCV64) \
++ || defined(NPY_CPU_RISCV32) \
+ || defined(NPY_CPU_LOONGARCH) \
+ || defined(NPY_CPU_WASM)
+ #define NPY_BYTE_ORDER NPY_LITTLE_ENDIAN
+--
+2.20.1
+
diff --git a/meta/recipes-devtools/python/python3-numpy/fix_reproducibility.patch b/meta/recipes-devtools/python/python3-numpy/fix_reproducibility.patch
new file mode 100644
index 0000000000..d952aed00c
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-numpy/fix_reproducibility.patch
@@ -0,0 +1,33 @@
+This regex decides whether to use O3 opimisation on numpy or not.
+
+It includes "od", which happens to be a substring of "reproducible"
+but not "qemux86-world".
+
+The regex will run against all compiler options including things like:
+
+-fmacro-prefix-map=/XXX/build/tmp/work/core2-64-poky-linux/python3-numpy/1.26.0/numpy-1.26.0=/usr/src/debug/python3-numpy/1.26.0-r0
+
+i.e. including build paths.
+
+Reduce the regex to something deterministic for our builds, assuming
+nobody builds in /home/debug:full/
+
+The autobuilder race depended upon whether qemux86-world or the
+reproducible target ran first and won the race to populate sstate.
+
+Upstream-Status: Inappropriate [upstream have dropped distutils and switched to meson]
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+
+Index: numpy-1.26.0/numpy/distutils/ccompiler_opt.py
+===================================================================
+--- numpy-1.26.0.orig/numpy/distutils/ccompiler_opt.py
++++ numpy-1.26.0/numpy/distutils/ccompiler_opt.py
+@@ -990,7 +990,7 @@ class _CCompiler:
+ ("cc_is_nocc", "", ""),
+ )
+ detect_args = (
+- ("cc_has_debug", ".*(O0|Od|ggdb|coverage|debug:full).*", ""),
++ ("cc_has_debug", ".*debug:full.*", ""),
+ ("cc_has_native",
+ ".*(-march=native|-xHost|/QxHost|-mcpu=a64fx).*", ""),
+ # in case if the class run with -DNPY_DISABLE_OPTIMIZATION
diff --git a/meta/recipes-devtools/python/python3-numpy/run-ptest b/meta/recipes-devtools/python/python3-numpy/run-ptest
new file mode 100644
index 0000000000..9a1c72aeb1
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-numpy/run-ptest
@@ -0,0 +1,5 @@
+#!/usr/bin/env python3
+
+import numpy
+numpy.test(label='full', verbose=2)
+
diff --git a/meta/recipes-devtools/python/python3-numpy_1.26.4.bb b/meta/recipes-devtools/python/python3-numpy_1.26.4.bb
new file mode 100644
index 0000000000..ccd08147af
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-numpy_1.26.4.bb
@@ -0,0 +1,64 @@
+SUMMARY = "A sophisticated Numeric Processing Package for Python"
+HOMEPAGE = "https://numpy.org/"
+DESCRIPTION = "NumPy is the fundamental package needed for scientific computing with Python."
+SECTION = "devel/python"
+LICENSE = "BSD-3-Clause & BSD-2-Clause & PSF-2.0 & Apache-2.0 & MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=a752eb20459cf74a9d84ee4825e8317c"
+
+SRCNAME = "numpy"
+
+SRC_URI = "${GITHUB_BASE_URI}/download/v${PV}/${SRCNAME}-${PV}.tar.gz \
+ file://0001-Don-t-search-usr-and-so-on-for-libraries-by-default-.patch \
+ file://0001-numpy-core-Define-RISCV-32-support.patch \
+ file://fix_reproducibility.patch \
+ file://run-ptest \
+ "
+SRC_URI[sha256sum] = "2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"
+
+GITHUB_BASE_URI = "https://github.com/numpy/numpy/releases"
+UPSTREAM_CHECK_REGEX = "releases/tag/v?(?P<pver>\d+(\.\d+)+)$"
+
+DEPENDS += "python3-cython-native"
+
+inherit ptest setuptools3 github-releases
+
+S = "${WORKDIR}/numpy-${PV}"
+
+CLEANBROKEN = "1"
+
+do_compile:prepend() {
+ export NPY_DISABLE_SVML=1
+}
+
+FILES:${PN}-staticdev += "${PYTHON_SITEPACKAGES_DIR}/numpy/core/lib/*.a ${PYTHON_SITEPACKAGES_DIR}/numpy/random/lib/*.a"
+
+# install what is needed for numpy.test()
+RDEPENDS:${PN} = "python3-unittest \
+ python3-difflib \
+ python3-pprint \
+ python3-pickle \
+ python3-shell \
+ python3-doctest \
+ python3-datetime \
+ python3-misc \
+ python3-mmap \
+ python3-netclient \
+ python3-numbers \
+ python3-pydoc \
+ python3-pkgutil \
+ python3-email \
+ python3-compression \
+ python3-ctypes \
+ python3-threading \
+ python3-multiprocessing \
+ python3-json \
+"
+RDEPENDS:${PN}-ptest += "python3-pytest \
+ python3-hypothesis \
+ python3-sortedcontainers \
+ python3-resource \
+ python3-typing-extensions \
+ ldd \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-packaging_24.0.bb b/meta/recipes-devtools/python/python3-packaging_24.0.bb
new file mode 100644
index 0000000000..0942eeb15e
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-packaging_24.0.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Core utilities for Python packages"
+HOMEPAGE = "https://github.com/pypa/packaging"
+LICENSE = "Apache-2.0 | BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=faadaedca9251a90b205c9167578ce91"
+
+SRC_URI[sha256sum] = "eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"
+
+inherit pypi python_flit_core
+
+BBCLASSEXTEND = "native nativesdk"
+
+# Bootstrap the native build
+DEPENDS:remove:class-native = "python3-build-native"
+RDEPENDS:${PN} += "python3-profile"
+
+do_compile:class-native () {
+ python_flit_core_do_manual_build
+}
diff --git a/meta/recipes-devtools/python/python3-pathlib2_2.3.7.bb b/meta/recipes-devtools/python/python3-pathlib2_2.3.7.bb
new file mode 100644
index 0000000000..d4de40893a
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pathlib2_2.3.7.bb
@@ -0,0 +1,12 @@
+SUMMARY = "Object-oriented filesystem paths"
+HOMEPAGE = "https://github.com/mcmtroffaes/pathlib2"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=2dc08586cce3ab91bfa091b655c0e440"
+
+SRC_URI[sha256sum] = "7a4329d67beff9a712e1d3ae147e4e3e108b0bfd284ffdea03a635126c76b3c0"
+
+inherit pypi setuptools3
+
+RDEPENDS:${PN} += "python3-six python3-ctypes"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-pathspec_0.12.1.bb b/meta/recipes-devtools/python/python3-pathspec_0.12.1.bb
new file mode 100644
index 0000000000..b61f673397
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pathspec_0.12.1.bb
@@ -0,0 +1,13 @@
+SUMMARY = "Utility library for gitignore style pattern matching of file paths."
+HOMEPAGE = "https://github.com/cpburnz/python-path-specification"
+SECTION = "devel/python"
+LICENSE = "MPL-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=815ca599c9df247a0c7f619bab123dad"
+
+SRC_URI[sha256sum] = "a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native nativesdk"
+
+RDEPENDS:${PN} += "python3-profile"
diff --git a/meta/recipes-devtools/python/python3-pbr/0001-change-shebang-to-python3.patch b/meta/recipes-devtools/python/python3-pbr/0001-change-shebang-to-python3.patch
new file mode 100644
index 0000000000..688da6b204
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pbr/0001-change-shebang-to-python3.patch
@@ -0,0 +1,42 @@
+From 09bd8368bf0d5385663a10eeb890131481681bdd Mon Sep 17 00:00:00 2001
+From: Changqing Li <changqing.li@windriver.com>
+Date: Thu, 23 Apr 2020 09:28:58 +0000
+Subject: [PATCH] change shebang to python3
+
+Upstream-Status: Pending
+
+Signed-off-by: Changqing Li <changqing.li@windriver.com>
+---
+ pbr/tests/test_integration.py | 2 +-
+ pbr/tests/test_packaging.py | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/pbr/tests/test_integration.py b/pbr/tests/test_integration.py
+index 8e96f21..b07cbe3 100644
+--- a/pbr/tests/test_integration.py
++++ b/pbr/tests/test_integration.py
+@@ -150,7 +150,7 @@ class TestInstallWithoutPbr(base.BaseTestCase):
+ pkgs = {
+ 'pkgTest': {
+ 'setup.py': textwrap.dedent("""\
+- #!/usr/bin/env python
++ #!/usr/bin/env python3
+ import setuptools
+ setuptools.setup(
+ name = 'pkgTest',
+diff --git a/pbr/tests/test_packaging.py b/pbr/tests/test_packaging.py
+index 07be547..f6a9412 100644
+--- a/pbr/tests/test_packaging.py
++++ b/pbr/tests/test_packaging.py
+@@ -206,7 +206,7 @@ class CreatePackages(fixtures.Fixture):
+
+ defaults = {
+ 'setup.py': textwrap.dedent(six.u("""\
+- #!/usr/bin/env python
++ #!/usr/bin/env python3
+ import setuptools
+ setuptools.setup(
+ setup_requires=['pbr'],
+--
+2.24.1
+
diff --git a/meta/recipes-devtools/python/python3-pbr_5.1.2.bb b/meta/recipes-devtools/python/python3-pbr_5.1.2.bb
deleted file mode 100644
index 7ba1d03535..0000000000
--- a/meta/recipes-devtools/python/python3-pbr_5.1.2.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-inherit setuptools3
-require python-pbr.inc
-SRC_URI[md5sum] = "bea55678345bd77b4ff5b2ebb729fd6d"
-SRC_URI[sha256sum] = "d717573351cfe09f49df61906cd272abaa759b3e91744396b804965ff7bff38b"
-
diff --git a/meta/recipes-devtools/python/python3-pbr_6.0.0.bb b/meta/recipes-devtools/python/python3-pbr_6.0.0.bb
new file mode 100644
index 0000000000..6c8171196a
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pbr_6.0.0.bb
@@ -0,0 +1,4 @@
+inherit setuptools3
+require python-pbr.inc
+
+SRC_URI[sha256sum] = "d1377122a5a00e2f940ee482999518efe16d745d423a670c27773dfbc3c9a7d9"
diff --git a/meta/recipes-devtools/python/python3-pip/no_shebang_mangling.patch b/meta/recipes-devtools/python/python3-pip/no_shebang_mangling.patch
new file mode 100644
index 0000000000..99fa14ee03
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pip/no_shebang_mangling.patch
@@ -0,0 +1,36 @@
+From 2aa82aeb0783c5fa7777b32bfe1dd3da9ae8fc6e Mon Sep 17 00:00:00 2001
+From: Richard Purdie <richard.purdie@linuxfoundation.org>
+Date: Wed, 23 Feb 2022 12:27:06 +0000
+Subject: [PATCH] python3-pip: Don't change shebang
+
+Patch pip to disable shebang mangling and also force the python executable
+to be python3 from the environment when building anything for the target
+(or nativesdk). This avoids incorrect interpreter paths in the target scripts.
+
+Upstream-Status: Inappropriate [OE specific config]
+---
+ src/pip/_vendor/distlib/scripts.py | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/pip/_vendor/distlib/scripts.py b/src/pip/_vendor/distlib/scripts.py
+index cfa45d2..313f499 100644
+--- a/src/pip/_vendor/distlib/scripts.py
++++ b/src/pip/_vendor/distlib/scripts.py
+@@ -144,6 +144,8 @@ class ScriptMaker(object):
+ See also: http://www.in-ulm.de/~mascheck/various/shebang/#length
+ https://hg.mozilla.org/mozilla-central/file/tip/mach
+ """
++ if '_PYTHON_SYSCONFIGDATA_NAME' in os.environ:
++ return b'#!/usr/bin/env python3'
+ if os.name != 'posix':
+ simple_shebang = True
+ else:
+@@ -362,7 +364,7 @@ class ScriptMaker(object):
+ return
+
+ match = FIRST_LINE_RE.match(first_line.replace(b'\r\n', b'\n'))
+- if match:
++ if False:
+ adjust = True
+ post_interp = match.group(1) or b''
+
diff --git a/meta/recipes-devtools/python/python3-pip_19.0.2.bb b/meta/recipes-devtools/python/python3-pip_19.0.2.bb
deleted file mode 100644
index d81a60caa2..0000000000
--- a/meta/recipes-devtools/python/python3-pip_19.0.2.bb
+++ /dev/null
@@ -1,30 +0,0 @@
-SUMMARY = "The PyPA recommended tool for installing Python packages"
-HOMEPAGE = "https://pypi.python.org/pypi/pip"
-SECTION = "devel/python"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=8ba06d529c955048e5ddd7c45459eb2e"
-
-DEPENDS += "python3 python3-setuptools-native"
-
-SRC_URI[md5sum] = "526fd9ec1e6ea956b3571ebfb42cf83c"
-SRC_URI[sha256sum] = "f851133f8b58283fa50d8c78675eb88d4ff4cde29b6c41205cd938b06338e0e5"
-
-inherit pypi distutils3
-
-do_install_append() {
- # Install as pip3 and leave pip2 as default
- rm ${D}/${bindir}/pip
-}
-
-RDEPENDS_${PN} = "\
- python3-compile \
- python3-io \
- python3-html \
- python3-json \
- python3-netserver \
- python3-setuptools \
- python3-unixadmin \
- python3-xmlrpc \
-"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-pip_24.0.bb b/meta/recipes-devtools/python/python3-pip_24.0.bb
new file mode 100644
index 0000000000..be4a29500a
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pip_24.0.bb
@@ -0,0 +1,60 @@
+SUMMARY = "The PyPA recommended tool for installing Python packages"
+HOMEPAGE = "https://pypi.org/project/pip"
+SECTION = "devel/python"
+LICENSE = "MIT & Apache-2.0 & MPL-2.0 & LGPL-2.1-only & BSD-3-Clause & PSF-2.0 & BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=63ec52baf95163b597008bb46db68030 \
+ file://src/pip/_vendor/cachecontrol/LICENSE.txt;md5=6572692148079ebbbd800be4b9f36c6d \
+ file://src/pip/_vendor/certifi/LICENSE;md5=3c2b7404369c587c3559afb604fce2f2 \
+ file://src/pip/_vendor/chardet/LICENSE;md5=4fbd65380cdd255951079008b364516c \
+ file://src/pip/_vendor/colorama/LICENSE.txt;md5=b4936429a56a652b84c5c01280dcaa26 \
+ file://src/pip/_vendor/distlib/LICENSE.txt;md5=f6a11430d5cd6e2cd3832ee94f22ddfc \
+ file://src/pip/_vendor/distro/LICENSE;md5=d2794c0df5b907fdace235a619d80314 \
+ file://src/pip/_vendor/idna/LICENSE.md;md5=239668a7c6066d9e0c5382e9c8c6c0e1 \
+ file://src/pip/_vendor/msgpack/COPYING;md5=cd9523181d9d4fbf7ffca52eaa2a5751 \
+ file://src/pip/_vendor/packaging/LICENSE;md5=faadaedca9251a90b205c9167578ce91 \
+ file://src/pip/_vendor/packaging/LICENSE.APACHE;md5=2ee41112a44fe7014dce33e26468ba93 \
+ file://src/pip/_vendor/pkg_resources/LICENSE;md5=141643e11c48898150daa83802dbc65f \
+ file://src/pip/_vendor/platformdirs/LICENSE;md5=ea4f5a41454746a9ed111e3d8723d17a \
+ file://src/pip/_vendor/pygments/LICENSE;md5=36a13c90514e2899f1eba7f41c3ee592 \
+ file://src/pip/_vendor/pyparsing/LICENSE;md5=657a566233888513e1f07ba13e2f47f1 \
+ file://src/pip/_vendor/pyproject_hooks/LICENSE;md5=aad69c93f605003e3342b174d9b0708c \
+ file://src/pip/_vendor/requests/LICENSE;md5=34400b68072d710fecd0a2940a0d1658 \
+ file://src/pip/_vendor/resolvelib/LICENSE;md5=78e1c0248051c32a38a7f820c30bd7a5 \
+ file://src/pip/_vendor/rich/LICENSE;md5=b5f0b94fbc94f5ad9ae4efcf8a778303 \
+ file://src/pip/_vendor/six.LICENSE;md5=43cfc9e4ac0e377acfb9b76f56b8415d \
+ file://src/pip/_vendor/tenacity/LICENSE;md5=175792518e4ac015ab6696d16c4f607e \
+ file://src/pip/_vendor/tomli/LICENSE;md5=aaaaf0879d17df0110d1aa8c8c9f46f5 \
+ file://src/pip/_vendor/typing_extensions.LICENSE;md5=fcf6b249c2641540219a727f35d8d2c2 \
+ file://src/pip/_vendor/urllib3/LICENSE.txt;md5=c2823cb995439c984fd62a973d79815c \
+ file://src/pip/_vendor/webencodings/LICENSE;md5=81fb24cd7823cce23b69f721993dce4d \
+ "
+
+inherit pypi python_setuptools_build_meta
+
+SRC_URI += "file://no_shebang_mangling.patch"
+
+SRC_URI[sha256sum] = "ea9bd1a847e8c5774a5777bb398c19e80bcd4e2aa16a4b301b718fe6f593aba2"
+
+do_install:append() {
+ rm -f ${D}/${bindir}/pip
+}
+
+RDEPENDS:${PN} = "\
+ python3-compile \
+ python3-io \
+ python3-html \
+ python3-json \
+ python3-multiprocessing \
+ python3-netserver \
+ python3-setuptools \
+ python3-unixadmin \
+ python3-xmlrpc \
+ python3-pickle \
+ python3-image \
+"
+
+BBCLASSEXTEND = "native nativesdk"
+
+# This used to use the bootstrap install which didn't compile. Until we bump the
+# tmpdir version we can't compile the native otherwise the sysroot unpack fails
+INSTALL_WHEEL_COMPILE_BYTECODE:class-native = "--no-compile-bytecode"
diff --git a/meta/recipes-devtools/python/python3-pluggy/run-ptest b/meta/recipes-devtools/python/python3-pluggy/run-ptest
new file mode 100644
index 0000000000..8d2017d39c
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pluggy/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+pytest --automake
diff --git a/meta/recipes-devtools/python/python3-pluggy_1.5.0.bb b/meta/recipes-devtools/python/python3-pluggy_1.5.0.bb
new file mode 100644
index 0000000000..9822cd59f3
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pluggy_1.5.0.bb
@@ -0,0 +1,29 @@
+SUMMARY = "Plugin and hook calling mechanisms for python"
+HOMEPAGE = "https://github.com/pytest-dev/pluggy"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=1c8206d16fd5cc02fa9b0bb98955e5c2"
+
+SRC_URI[sha256sum] = "2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"
+
+DEPENDS += "python3-setuptools-scm-native"
+RDEPENDS:${PN} += "python3-importlib-metadata \
+ python3-more-itertools \
+"
+
+inherit pypi ptest python_setuptools_build_meta
+
+SRC_URI += " \
+ file://run-ptest \
+"
+
+RDEPENDS:${PN}-ptest += " \
+ python3-pytest \
+ python3-unittest-automake-output \
+"
+
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}/testing
+ cp -rf ${S}/testing/* ${D}${PTEST_PATH}/testing/
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-ply_3.11.bb b/meta/recipes-devtools/python/python3-ply_3.11.bb
new file mode 100644
index 0000000000..a05bd6702d
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-ply_3.11.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Python Lex and Yacc"
+DESCRIPTION = "Python ply: PLY is yet another implementation of lex and yacc for Python"
+HOMEPAGE = "https://pypi.python.org/pypi/ply"
+SECTION = "devel/python"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://README.md;beginline=5;endline=32;md5=f5ee5c355c0e6719c787a71b8f0fa96c"
+
+SRC_URI[md5sum] = "6465f602e656455affcd7c5734c638f8"
+SRC_URI[sha256sum] = "00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3"
+
+inherit pypi setuptools3
+
+RDEPENDS:${PN}:class-target += "\
+ python3-netclient \
+ python3-shell \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-poetry-core_1.9.0.bb b/meta/recipes-devtools/python/python3-poetry-core_1.9.0.bb
new file mode 100644
index 0000000000..540fdffaed
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-poetry-core_1.9.0.bb
@@ -0,0 +1,42 @@
+SUMMARY = "Poetry PEP 517 Build Backend"
+DESCRIPTION = "Poetry PEP 517 Build Backend"
+HOMEPAGE = "https://github.com/python-poetry/poetry-core"
+BUGTRACKER = "https://github.com/python-poetry/poetry-core"
+CHANGELOG = "https://github.com/python-poetry/poetry-core/blob/master/CHANGELOG.md"
+
+LICENSE = "Apache-2.0 & BSD-2-Clause & BSD-3-Clause & MIT"
+LIC_FILES_CHKSUM = "\
+ file://LICENSE;md5=78c39cfd009863ae44237a7ab1f9cedc \
+ file://src/poetry/core/_vendor/fastjsonschema/LICENSE;md5=18950e8362b69c0c617b42b8bd8e7532 \
+ file://src/poetry/core/_vendor/lark/LICENSE;md5=fcfbf1e2ecc0f37acbb5871aa0267500 \
+ file://src/poetry/core/_vendor/packaging/LICENSE;md5=faadaedca9251a90b205c9167578ce91 \
+ file://src/poetry/core/_vendor/packaging/LICENSE.APACHE;md5=2ee41112a44fe7014dce33e26468ba93 \
+ file://src/poetry/core/_vendor/packaging/LICENSE.BSD;md5=7bef9bf4a8e4263634d0597e7ba100b8 \
+ file://src/poetry/core/_vendor/tomli/LICENSE;md5=aaaaf0879d17df0110d1aa8c8c9f46f5 \
+"
+
+SRC_URI[sha256sum] = "fa7a4001eae8aa572ee84f35feb510b321bd652e5cf9293249d62853e1f935a2"
+
+inherit python_poetry_core pypi
+
+PYPI_PACKAGE = "poetry_core"
+
+RDEPENDS:${PN}:append:class-target = "\
+ python3-compression \
+ python3-core \
+ python3-crypt \
+ python3-io \
+ python3-json \
+ python3-logging \
+ python3-netclient \
+ python3-pathlib2 \
+ python3-pprint \
+ python3-shell \
+"
+
+RDEPENDS:${PN} += "\
+ python3-pip \
+ python3-six \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-pretend_1.0.9.bb b/meta/recipes-devtools/python/python3-pretend_1.0.9.bb
new file mode 100644
index 0000000000..21d14a03b8
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pretend_1.0.9.bb
@@ -0,0 +1,11 @@
+SUMMARY = "A library for stubbing in Python"
+HOMEPAGE = "https://github.com/alex/pretend"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=411780c0b7fa756753e94affeee5bc99"
+
+SRC_URI[md5sum] = "ad53883ede48aeac7ae584f0de0240e8"
+SRC_URI[sha256sum] = "c90eb810cde8ebb06dafcb8796f9a95228ce796531bc806e794c2f4649aa1b10"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-psutil_5.9.8.bb b/meta/recipes-devtools/python/python3-psutil_5.9.8.bb
new file mode 100644
index 0000000000..1a394eda33
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-psutil_5.9.8.bb
@@ -0,0 +1,41 @@
+SUMMARY = "A cross-platform process and system utilities module for Python"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=a9c72113a843d0d732a0ac1c200d81b1"
+HOMEPAGE = "https://pypi.org/project/psutil/"
+
+SRC_URI[sha256sum] = "6be126e3225486dff286a8fb9a06246a5253f4c7c53b475ea5f5ac934e64194c"
+
+inherit pypi setuptools3
+
+PACKAGES =+ "${PN}-tests"
+
+FILES:${PN}-tests += " \
+ ${PYTHON_SITEPACKAGES_DIR}/psutil/test* \
+ ${PYTHON_SITEPACKAGES_DIR}/psutil/__pycache__/test* \
+"
+
+
+RDEPENDS:${PN} += " \
+ python3-shell \
+ python3-threading \
+ python3-xml \
+ python3-netclient \
+ python3-ctypes \
+ python3-resource \
+"
+
+RDEPENDS:${PN}-tests += " \
+ ${PN} \
+ python3 \
+ coreutils \
+ procps \
+ binutils \
+ gcc \
+ gcc-symlinks \
+ libstdc++ \
+ libstdc++-dev \
+"
+
+INSANE_SKIP:${PN}-tests += "dev-deps"
+
+BBCLASSEXTEND = "native"
diff --git a/meta/recipes-devtools/python/python3-py_1.11.0.bb b/meta/recipes-devtools/python/python3-py_1.11.0.bb
new file mode 100644
index 0000000000..31d5a377a7
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-py_1.11.0.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Library with cross-python path, ini-parsing, io, code, log facilities"
+HOMEPAGE = "http://py.readthedocs.io/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=a6bb0320b04a0a503f12f69fea479de9"
+
+SRC_URI[sha256sum] = "51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"
+
+DEPENDS += "python3-setuptools-scm-native"
+
+inherit pypi python_setuptools_build_meta
+
+BBCLASSEXTEND = "native nativesdk"
+
+RDEPENDS:${PN} += "python3-netclient"
diff --git a/meta/recipes-devtools/python/python3-pyasn1/run-ptest b/meta/recipes-devtools/python/python3-pyasn1/run-ptest
new file mode 100644
index 0000000000..8d2017d39c
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pyasn1/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+pytest --automake
diff --git a/meta/recipes-devtools/python/python3-pyasn1_0.6.0.bb b/meta/recipes-devtools/python/python3-pyasn1_0.6.0.bb
new file mode 100644
index 0000000000..0519ba5edb
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pyasn1_0.6.0.bb
@@ -0,0 +1,3 @@
+inherit pypi setuptools3
+require python-pyasn1.inc
+
diff --git a/meta/recipes-devtools/python/python3-pycairo_1.15.6.bb b/meta/recipes-devtools/python/python3-pycairo_1.15.6.bb
deleted file mode 100644
index 5c3e1e6f03..0000000000
--- a/meta/recipes-devtools/python/python3-pycairo_1.15.6.bb
+++ /dev/null
@@ -1,31 +0,0 @@
-SUMMARY = "Python bindings for the Cairo canvas library"
-HOMEPAGE = "http://cairographics.org/pycairo"
-BUGTRACKER = "http://bugs.freedesktop.org"
-SECTION = "python-devel"
-LICENSE = "LGPLv2.1 & MPLv1.1"
-LIC_FILES_CHKSUM = "file://COPYING;md5=f2e071ab72978431b294a0d696327421 \
- file://COPYING-LGPL-2.1;md5=fad9b3332be894bab9bc501572864b29 \
- file://COPYING-MPL-1.1;md5=bfe1f75d606912a4111c90743d6c7325"
-
-# cairo >= 1.14
-DEPENDS = "cairo"
-
-SRC_URI = "https://github.com/pygobject/pycairo/releases/download/v${PV}/pycairo-${PV}.tar.gz"
-UPSTREAM_CHECK_URI = "https://github.com/pygobject/pycairo/releases/"
-
-SRC_URI[md5sum] = "3ff210c34e7b052590e15fd0fb147766"
-SRC_URI[sha256sum] = "ad150ea637860836b66705e0513b8e59494538f0b80497ad3462051368755016"
-
-S = "${WORKDIR}/pycairo-${PV}"
-
-inherit setuptools3 pkgconfig
-
-CFLAGS += "-fPIC"
-
-BBCLASSEXTEND = "native"
-
-do_install_append() {
- install -d ${D}${includedir}/pycairo/
- install -m 0644 ${D}${datadir}/include/pycairo/py3cairo.h ${D}${includedir}/pycairo/
-}
-FILES_${PN} += "${datadir}/include/pycairo/py3cairo.h"
diff --git a/meta/recipes-devtools/python/python3-pycairo_1.26.0.bb b/meta/recipes-devtools/python/python3-pycairo_1.26.0.bb
new file mode 100644
index 0000000000..ea8b81be76
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pycairo_1.26.0.bb
@@ -0,0 +1,26 @@
+SUMMARY = "Python bindings for the Cairo canvas library"
+HOMEPAGE = "http://cairographics.org/pycairo"
+BUGTRACKER = "http://bugs.freedesktop.org"
+SECTION = "python-devel"
+LICENSE = "LGPL-2.1-only & MPL-1.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=f3713ca2c28d9312ad718520b6dc3eee \
+ file://COPYING-LGPL-2.1;md5=fad9b3332be894bab9bc501572864b29 \
+ file://COPYING-MPL-1.1;md5=bfe1f75d606912a4111c90743d6c7325"
+
+# cairo >= 1.14
+DEPENDS = "cairo python3"
+
+SRC_URI = "${GITHUB_BASE_URI}/download/v${PV}/pycairo-${PV}.tar.gz"
+GITHUB_BASE_URI = "https://github.com/pygobject/pycairo/releases/"
+
+SRC_URI[sha256sum] = "2dddd0a874fbddb21e14acd9b955881ee1dc6e63b9c549a192d613a907f9cbeb"
+
+S = "${WORKDIR}/pycairo-${PV}"
+
+inherit meson pkgconfig python3targetconfig github-releases
+
+CFLAGS += "-fPIC"
+
+BBCLASSEXTEND = "native"
+
+FILES:${PN} = "${PYTHON_SITEPACKAGES_DIR}/*"
diff --git a/meta/recipes-devtools/python/python3-pycparser_2.22.bb b/meta/recipes-devtools/python/python3-pycparser_2.22.bb
new file mode 100644
index 0000000000..9a5abc42bd
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pycparser_2.22.bb
@@ -0,0 +1,21 @@
+SUMMARY = "Parser of the C language, written in pure Python"
+HOMEPAGE = "https://github.com/eliben/pycparser"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=9761c3ffee7ba99c60dca0408fd3262b"
+
+SRC_URI[sha256sum] = "491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native nativesdk"
+
+RDEPENDS:${PN}:class-target += "\
+ python3-netclient \
+ python3-ply \
+ python3-pprint \
+ "
+
+RSUGGESTS:${PN}:class-target += "\
+ cpp \
+ cpp-symlinks \
+ "
diff --git a/meta/recipes-devtools/python/python3-pycryptodome_3.20.0.bb b/meta/recipes-devtools/python/python3-pycryptodome_3.20.0.bb
new file mode 100644
index 0000000000..d24fa58d43
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pycryptodome_3.20.0.bb
@@ -0,0 +1,5 @@
+require python-pycryptodome.inc
+inherit setuptools3
+
+SRC_URI[sha256sum] = "09609209ed7de61c2b560cc5c8c4fbf892f8b15b1faf7e4cbffac97db1fffda7"
+
diff --git a/meta/recipes-devtools/python/python3-pycryptodomex_3.20.0.bb b/meta/recipes-devtools/python/python3-pycryptodomex_3.20.0.bb
new file mode 100644
index 0000000000..2673ea8326
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pycryptodomex_3.20.0.bb
@@ -0,0 +1,9 @@
+require python-pycryptodome.inc
+inherit setuptools3
+
+SRC_URI[sha256sum] = "7a710b79baddd65b806402e14766c721aee8fb83381769c27920f26476276c1e"
+
+FILES:${PN}-tests = " \
+ ${PYTHON_SITEPACKAGES_DIR}/Cryptodome/SelfTest/ \
+ ${PYTHON_SITEPACKAGES_DIR}/Cryptodome/SelfTest/__pycache__/ \
+"
diff --git a/meta/recipes-devtools/python/python3-pyelftools_0.31.bb b/meta/recipes-devtools/python/python3-pyelftools_0.31.bb
new file mode 100644
index 0000000000..551fed6876
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pyelftools_0.31.bb
@@ -0,0 +1,15 @@
+SUMMARY = "pyelftools is a pure-Python library for parsing and analyzing ELF files and DWARF debugging information"
+HOMEPAGE = "https://github.com/eliben/pyelftools"
+SECTION = "devel/python"
+LICENSE = "PD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=5ce2a2b07fca326bc7c146d10105ccfc"
+
+SRC_URI[sha256sum] = "c774416b10310156879443b81187d182d8d9ee499660380e645918b50bc88f99"
+
+PYPI_PACKAGE = "pyelftools"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native"
+
+RDEPENDS:${PN} += "python3-debugger python3-pprint"
diff --git a/meta/recipes-devtools/python/python3-pygments_2.17.2.bb b/meta/recipes-devtools/python/python3-pygments_2.17.2.bb
new file mode 100644
index 0000000000..8b98064b78
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pygments_2.17.2.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Pygments is a syntax highlighting package written in Python."
+DESCRIPTION = "Pygments is a syntax highlighting package written in Python."
+HOMEPAGE = "http://pygments.org/"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=36a13c90514e2899f1eba7f41c3ee592"
+
+inherit python_hatchling
+SRC_URI[sha256sum] = "da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"
+
+UPSTREAM_CHECK_PYPI_PACKAGE = "Pygments"
+inherit pypi
+
+BBCLASSEXTEND = "native nativesdk"
+
diff --git a/meta/recipes-devtools/python/python3-pygobject_3.28.3.bb b/meta/recipes-devtools/python/python3-pygobject_3.28.3.bb
deleted file mode 100644
index 313af227b6..0000000000
--- a/meta/recipes-devtools/python/python3-pygobject_3.28.3.bb
+++ /dev/null
@@ -1,29 +0,0 @@
-SUMMARY = "Python GObject bindings"
-SECTION = "devel/python"
-LICENSE = "LGPLv2.1"
-LIC_FILES_CHKSUM = "file://COPYING;md5=a916467b91076e631dd8edb7424769c7"
-
-inherit gnomebase distutils3-base gobject-introspection upstream-version-is-even
-
-DEPENDS += "python3 glib-2.0"
-
-SRCNAME="pygobject"
-SRC_URI = " \
- http://ftp.gnome.org/pub/GNOME/sources/${SRCNAME}/${@gnome_verdir("${PV}")}/${SRCNAME}-${PV}.tar.xz \
-"
-
-SRC_URI[md5sum] = "3bac63c86bb963aa401f97859464aa90"
-SRC_URI[sha256sum] = "3dd3e21015d06e00482ea665fc1733b77e754a6ab656a5db5d7f7bfaf31ad0b0"
-
-S = "${WORKDIR}/${SRCNAME}-${PV}"
-
-PACKAGECONFIG ??= "${@bb.utils.contains_any('DISTRO_FEATURES', [ 'directfb', 'wayland', 'x11' ], 'cairo', '', d)}"
-
-# python3-pycairo is checked on configuration -> DEPENDS
-# we don't link against python3-pycairo -> RDEPENDS
-PACKAGECONFIG[cairo] = "--enable-cairo,--disable-cairo,cairo python3-pycairo, python3-pycairo"
-
-RDEPENDS_${PN} += "python3-setuptools"
-
-BBCLASSEXTEND = "native"
-PACKAGECONFIG_class-native = ""
diff --git a/meta/recipes-devtools/python/python3-pygobject_3.48.2.bb b/meta/recipes-devtools/python/python3-pygobject_3.48.2.bb
new file mode 100644
index 0000000000..3d83a8a1c2
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pygobject_3.48.2.bb
@@ -0,0 +1,39 @@
+SUMMARY = "Python GObject bindings"
+HOMEPAGE = "https://gitlab.gnome.org/GNOME/pygobject"
+DESCRIPTION = "PyGObject is a Python package which provides bindings for GObject based libraries such as GTK, GStreamer, WebKitGTK, GLib, GIO and many more."
+SECTION = "devel/python"
+LICENSE = "LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=a916467b91076e631dd8edb7424769c7"
+
+GIR_MESON_OPTION = ""
+
+inherit gnomebase setuptools3-base gobject-introspection upstream-version-is-even
+
+python() {
+ if d.getVar('CLASSOVERRIDE') == "class-target" and not bb.utils.to_boolean(d.getVar("GI_DATA_ENABLED")):
+ raise bb.parse.SkipRecipe("GI not available")
+}
+
+DEPENDS += "python3 glib-2.0"
+
+SRCNAME="pygobject"
+
+SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/${SRCNAME}/${@gnome_verdir("${PV}")}/${SRCNAME}-${PV}.tar.xz"
+SRC_URI[sha256sum] = "0794aeb4a9be31a092ac20621b5f54ec280f9185943d328b105cdae6298ad1a7"
+
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+PACKAGECONFIG ??= "${@bb.utils.contains_any('DISTRO_FEATURES', [ 'directfb', 'wayland', 'x11' ], 'cairo', '', d)}"
+
+RDEPENDS:${PN} += " \
+ python3-io \
+ python3-pkgutil \
+"
+
+# python3-pycairo is checked on configuration -> DEPENDS
+# we don't link against python3-pycairo -> RDEPENDS
+PACKAGECONFIG[cairo] = "-Dpycairo=enabled,-Dpycairo=disabled, cairo python3-pycairo, python3-pycairo"
+PACKAGECONFIG[tests] = "-Dtests=true,-Dtests=false,"
+
+BBCLASSEXTEND = "native"
+PACKAGECONFIG:class-native = ""
diff --git a/meta/recipes-devtools/python/python3-pyopenssl_24.1.0.bb b/meta/recipes-devtools/python/python3-pyopenssl_24.1.0.bb
new file mode 100644
index 0000000000..e714ad838e
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pyopenssl_24.1.0.bb
@@ -0,0 +1,23 @@
+SUMMARY = "Simple Python wrapper around the OpenSSL library"
+HOMEPAGE = "https://pyopenssl.org/"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+DEPENDS += "openssl python3-cryptography"
+
+SRC_URI[sha256sum] = "cabed4bfaa5df9f1a16c0ef64a0cb65318b5cd077a7eda7d6970131ca2f41a6f"
+
+PYPI_PACKAGE = "pyOpenSSL"
+inherit pypi setuptools3
+
+PACKAGES =+ "${PN}-tests"
+FILES:${PN}-tests = "${libdir}/${PYTHON_DIR}/site-packages/OpenSSL/test"
+
+RDEPENDS:${PN}:class-target = " \
+ python3-cryptography \
+ python3-six \
+ python3-threading \
+"
+RDEPENDS:${PN}-tests = "${PN}"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-pyparsing_3.1.2.bb b/meta/recipes-devtools/python/python3-pyparsing_3.1.2.bb
new file mode 100644
index 0000000000..64210ade53
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pyparsing_3.1.2.bb
@@ -0,0 +1,30 @@
+SUMMARY = "Python parsing module"
+DESCRIPTION = "The pyparsing module is an alternative approach to creating \
+and executing simple grammars, vs. the traditional lex/yacc approach, or \
+the use of regular expressions. The pyparsing module provides a library of \
+classes that client code uses to construct the grammar directly in Python \
+code."
+HOMEPAGE = "https://github.com/pyparsing/pyparsing/"
+BUGTRACKER = "https://github.com/pyparsing/pyparsing/issues"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=657a566233888513e1f07ba13e2f47f1"
+
+SRC_URI[sha256sum] = "a1bac0ce561155ecc3ed78ca94d3c9378656ad4c94c1270de543f621420f94ad"
+
+UPSTREAM_CHECK_REGEX = "pyparsing-(?P<pver>.*)\.tar"
+
+inherit pypi python_flit_core
+
+RDEPENDS:${PN} += " \
+ python3-datetime \
+ python3-debugger \
+ python3-html \
+ python3-json \
+ python3-netclient \
+ python3-pprint \
+ python3-stringold \
+ python3-threading \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-pyproject-hooks_1.0.0.bb b/meta/recipes-devtools/python/python3-pyproject-hooks_1.0.0.bb
new file mode 100644
index 0000000000..9d08e7acc4
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pyproject-hooks_1.0.0.bb
@@ -0,0 +1,26 @@
+SUMMARY = "A low-level library for calling build-backends in pyproject.toml-based projects"
+HOMEPAGE = "https://github.com/pypa/pyproject-hooks"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=aad69c93f605003e3342b174d9b0708c"
+
+SRC_URI[sha256sum] = "f271b298b97f5955d53fb12b72c1fb1948c22c1a6b70b315c54cedaca0264ef5"
+
+inherit pypi python_flit_core
+
+PYPI_PACKAGE = "pyproject_hooks"
+
+BBCLASSEXTEND = "native nativesdk"
+
+# Bootstrap the native build
+DEPENDS:remove:class-native = "python3-build-native"
+
+RDEPENDS:${PN} += " \
+ python3-io \
+ python3-json \
+"
+
+do_compile:class-native () {
+ python_flit_core_do_manual_build
+}
+
+UPSTREAM_CHECK_PYPI_PACKAGE = "${PYPI_PACKAGE}"
diff --git a/meta/recipes-devtools/python/python3-pyproject-metadata_0.7.1.bb b/meta/recipes-devtools/python/python3-pyproject-metadata_0.7.1.bb
new file mode 100644
index 0000000000..8b9549f3d0
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pyproject-metadata_0.7.1.bb
@@ -0,0 +1,27 @@
+SUMMARY = "PEP 621 metadata parsing"
+DESCRIPTION = "Dataclass for PEP 621 metadata with support for core \
+metadata generation \
+\
+This project does not implement the parsing of pyproject.toml containing \
+PEP 621 metadata.\
+\
+Instead, given a Python data structure representing PEP 621 metadata \
+(already parsed), it will validate this input and generate a \
+PEP 643-compliant metadata file (e.g. PKG-INFO)."
+HOMEPAGE = "https://github.com/FFY00/python-pyproject-metadata"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=310439af287b0fb4780b2ad6907c256c"
+
+PYPI_PACKAGE = "pyproject-metadata"
+
+inherit pypi python_setuptools_build_meta
+
+SRC_URI[sha256sum] = "0a94f18b108b9b21f3a26a3d541f056c34edcb17dc872a144a15618fed7aef67"
+
+RDEPENDS:${PN} += " \
+ python3-logging \
+ python3-packaging \
+ python3-profile \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-pyrsistent_0.20.0.bb b/meta/recipes-devtools/python/python3-pyrsistent_0.20.0.bb
new file mode 100644
index 0000000000..7de70942a9
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pyrsistent_0.20.0.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Persistent/Immutable/Functional data structures for Python"
+HOMEPAGE = "https://github.com/tobgu/pyrsistent"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.mit;md5=f798dc4222a29fea881fa998cdf4a8c8"
+
+SRC_URI[sha256sum] = "4c48f78f62ab596c679086084d0dd13254ae4f3d6c72a83ffdf5ebdef8f265a4"
+
+inherit pypi python_setuptools_build_meta
+
+RDEPENDS:${PN} += " \
+ python3-numbers \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-pysocks_1.7.1.bb b/meta/recipes-devtools/python/python3-pysocks_1.7.1.bb
new file mode 100644
index 0000000000..7f2c217f19
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pysocks_1.7.1.bb
@@ -0,0 +1,20 @@
+SUMMARY = "A Python SOCKS client module"
+HOMEPAGE = "http://python-requests.org"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=1d457bcffb9661b45f799d4efee72f16"
+
+SRC_URI[md5sum] = "89b1a6865c61bae67a32417517612ee6"
+SRC_URI[sha256sum] = "3f8804571ebe159c380ac6de37643bb4685970655d3bba243530d6558b799aa0"
+
+PYPI_PACKAGE = "PySocks"
+inherit pypi setuptools3
+
+RDEPENDS:${PN}:class-target += "\
+ python3-email \
+ python3-io \
+ python3-logging \
+ python3-netclient \
+ python3-shell \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-pytest-runner_6.0.1.bb b/meta/recipes-devtools/python/python3-pytest-runner_6.0.1.bb
new file mode 100644
index 0000000000..cce9ce33e2
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pytest-runner_6.0.1.bb
@@ -0,0 +1,16 @@
+SUMMARY = "Invoke py.test as distutils command with dependency resolution"
+HOMEPAGE = "https://pypi.org/project/pytest-runner/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=7a7126e068206290f3fe9f8d6c713ea6"
+
+SRC_URI[sha256sum] = "70d4739585a7008f37bf4933c013fdb327b8878a5a69fcbb3316c88882f0f49b"
+
+inherit pypi python_setuptools_build_meta
+
+DEPENDS += " \
+ python3-setuptools-scm-native"
+
+RDEPENDS:${PN} = "python3-py python3-setuptools python3-debugger python3-json \
+ python3-io"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-pytest-subtests_0.12.1.bb b/meta/recipes-devtools/python/python3-pytest-subtests_0.12.1.bb
new file mode 100644
index 0000000000..0590be705f
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pytest-subtests_0.12.1.bb
@@ -0,0 +1,20 @@
+SUMMARY = "unittest subTest() support and subtests fixture."
+DESCRIPTION = "Adds support for TestCase.subTest.\
+New subtests fixture, providing similar functionality for pure pytest tests."
+HOMEPAGE = "https://github.com/pytest-dev/pytest-subtests"
+BUGTRACKER = "https://github.com/pytest-dev/pytest-subtests/issues"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=242b4e17fa287dcf7aef372f6bc3dcb1"
+
+SRC_URI[sha256sum] = "d6605dcb88647e0b7c1889d027f8ef1c17d7a2c60927ebfdc09c7b0d8120476d"
+
+inherit pypi python_setuptools_build_meta
+
+DEPENDS += "python3-setuptools-scm-native"
+
+RDEPENDS:${PN} += " \
+ python3-pytest \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-pytest_8.1.1.bb b/meta/recipes-devtools/python/python3-pytest_8.1.1.bb
new file mode 100644
index 0000000000..b1cf23fbc4
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pytest_8.1.1.bb
@@ -0,0 +1,41 @@
+SUMMARY = "Simple powerful testing with python"
+HOMEPAGE = "https://pypi.org/project/pytest/"
+DESCRIPTION = "The pytest framework makes it easy to write small tests, yet scales to support complex functional testing for applications and libraries."
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=bd27e41b6550fe0fc45356d1d81ee37c"
+
+SRC_URI[sha256sum] = "ac978141a75948948817d360297b7aae0fcb9d6ff6bc9ec6d514b85d5a65c044"
+
+DEPENDS += "python3-setuptools-scm-native"
+
+inherit update-alternatives pypi python_setuptools_build_meta
+
+RDEPENDS:${PN} += " \
+ python3-atomicwrites \
+ python3-attrs \
+ python3-debugger \
+ python3-doctest \
+ python3-importlib-metadata \
+ python3-iniconfig \
+ python3-json \
+ python3-more-itertools \
+ python3-packaging \
+ python3-pathlib2 \
+ python3-pluggy \
+ python3-py \
+ python3-setuptools \
+ python3-six \
+ python3-tomllib \
+ python3-wcwidth \
+"
+
+ALTERNATIVE:${PN} += "py.test pytest"
+
+NATIVE_LINK_NAME[pytest] = "${bindir}/pytest"
+ALTERNATIVE_TARGET[pytest] = "${bindir}/pytest"
+
+ALTERNATIVE_LINK_NAME[py.test] = "${bindir}/py.test"
+ALTERNATIVE_TARGET[py.test] = "${bindir}/py.test"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-pytz/run-ptest b/meta/recipes-devtools/python/python3-pytz/run-ptest
new file mode 100644
index 0000000000..8d2017d39c
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pytz/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+pytest --automake
diff --git a/meta/recipes-devtools/python/python3-pytz_2024.1.bb b/meta/recipes-devtools/python/python3-pytz_2024.1.bb
new file mode 100644
index 0000000000..158e800fed
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pytz_2024.1.bb
@@ -0,0 +1,36 @@
+SUMMARY = "World timezone definitions, modern and historical"
+HOMEPAGE = "http://pythonhosted.org/pytz"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=1a67fc46c1b596cce5d21209bbe75999"
+
+inherit pypi setuptools3 ptest
+
+SRC_URI[sha256sum] = "2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812"
+
+RDEPENDS:${PN}:class-target += "\
+ python3-datetime \
+ python3-doctest \
+ python3-io \
+ python3-pickle \
+ python3-pprint \
+ python3-threading \
+"
+
+BBCLASSEXTEND = "native nativesdk"
+
+SRC_URI += " \
+ file://run-ptest \
+"
+
+RDEPENDS:${PN}-ptest += " \
+ python3-pytest \
+ python3-unittest-automake-output \
+"
+
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}/pytz
+ install -d ${D}${PTEST_PATH}/pytz/tests
+ cp -rf ${S}/pytz/tests/* ${D}${PTEST_PATH}/pytz/tests/
+ cp -f ${S}/README.rst ${D}${PTEST_PATH}/
+
+}
diff --git a/meta/recipes-devtools/python/python3-pyyaml/0001-Fix-builds-with-Cython-3.patch b/meta/recipes-devtools/python/python3-pyyaml/0001-Fix-builds-with-Cython-3.patch
new file mode 100644
index 0000000000..a87d588b6a
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pyyaml/0001-Fix-builds-with-Cython-3.patch
@@ -0,0 +1,54 @@
+From 9cc23db56add79357b8f8257fe6fc0d6879d4579 Mon Sep 17 00:00:00 2001
+From: "Andrew J. Hesford" <ajh@sideband.org>
+Date: Fri, 21 Jul 2023 09:50:00 -0400
+Subject: [PATCH] Fix builds with Cython 3
+
+This is a *de minimis* fix for building with Cython 3. Recent Cython<3
+releases provided `Cython.Distutils.build_ext` as an alias to
+`Cython.Distutils.old_build_ext.old_build_ext`; Cython 3 drops this
+alias and instead uses a wholly new `Cython.Distutils.build_ext` that
+does not provide the `cython_sources` function used in `setup.py`.
+
+Explicitly importing `old_build_ext` preserves the existing behavior for
+recent Cython<3 and uses the correct behavior for Cython 3. Should the
+import fail (*e.g.*, because the version of Cython available predates
+the availability of `old_build_ext`), the import falls back to just
+`Cython.Distutils.build_ext`.
+
+Signed-off-by: Andrew J. Hesford <ajh@sideband.org>
+Upstream-Status: Denied [https://github.com/yaml/pyyaml/pull/731]
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+---
+ pyproject.toml | 2 +-
+ setup.py | 6 +++++-
+ 2 files changed, 6 insertions(+), 2 deletions(-)
+
+diff --git a/pyproject.toml b/pyproject.toml
+index 4bc04c0..2bf5ec8 100644
+--- a/pyproject.toml
++++ b/pyproject.toml
+@@ -1,3 +1,3 @@
+ [build-system]
+-requires = ["setuptools", "wheel", "Cython<3.0"]
++requires = ["setuptools", "wheel", "Cython"]
+ build-backend = "setuptools.build_meta"
+diff --git a/setup.py b/setup.py
+index 65b0ea0..4461580 100644
+--- a/setup.py
++++ b/setup.py
+@@ -82,7 +82,11 @@ if 'sdist' in sys.argv or os.environ.get('PYYAML_FORCE_CYTHON') == '1':
+ with_cython = True
+ try:
+ from Cython.Distutils.extension import Extension as _Extension
+- from Cython.Distutils import build_ext as _build_ext
++ try:
++ from Cython.Distutils.old_build_ext import old_build_ext as _build_ext
++ except ImportError:
++ from Cython.Distutils import build_ext as _build_ext
++
+ with_cython = True
+ except ImportError:
+ if with_cython:
+--
+2.39.2
+
diff --git a/meta/recipes-devtools/python/python3-pyyaml/run-ptest b/meta/recipes-devtools/python/python3-pyyaml/run-ptest
new file mode 100644
index 0000000000..8d2017d39c
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pyyaml/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+pytest --automake
diff --git a/meta/recipes-devtools/python/python3-pyyaml_6.0.1.bb b/meta/recipes-devtools/python/python3-pyyaml_6.0.1.bb
new file mode 100644
index 0000000000..3388312557
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pyyaml_6.0.1.bb
@@ -0,0 +1,40 @@
+SUMMARY = "Python support for YAML"
+DEPENDS += "libyaml python3-cython-native"
+HOMEPAGE = "https://pyyaml.org/"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=6d8242660a8371add5fe547adf083079"
+
+PYPI_PACKAGE = "PyYAML"
+
+inherit pypi python_setuptools_build_meta
+
+SRC_URI += "file://0001-Fix-builds-with-Cython-3.patch"
+SRC_URI[sha256sum] = "bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"
+
+PACKAGECONFIG ?= "libyaml"
+PACKAGECONFIG[libyaml] = "--with-libyaml,--without-libyaml,libyaml"
+
+RDEPENDS:${PN} += "\
+ python3-datetime \
+ python3-netclient \
+"
+
+inherit ptest
+SRC_URI += "\
+ https://raw.githubusercontent.com/yaml/pyyaml/a98fd6088e81d7aca571220c966bbfe2ac43c335/tests/test_dump_load.py;name=test \
+ file://run-ptest \
+"
+SRC_URI[test.sha256sum] = "b6a8a2825d89fdc8aee226560f66b8196e872012a0ea7118cbef1a832359434a"
+
+RDEPENDS:${PN}-ptest += " \
+ python3-pytest \
+ python3-unittest-automake-output \
+"
+
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}/tests
+ cp -rf ${WORKDIR}/test_dump_load.py ${D}${PTEST_PATH}/tests/
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-rdflib_7.0.0.bb b/meta/recipes-devtools/python/python3-rdflib_7.0.0.bb
new file mode 100644
index 0000000000..4057c1dbbc
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-rdflib_7.0.0.bb
@@ -0,0 +1,21 @@
+SUMMARY = "RDFLib is a pure Python package for working with RDF"
+HOMEPAGE = "https://github.com/RDFLib/rdflib"
+SECTION = "devel/python"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=37d489c0cefe52a17e1d5007e196464a"
+
+SRC_URI[sha256sum] = "9995eb8569428059b8c1affd26b25eac510d64f5043d9ce8c84e0d0036e995ae"
+
+inherit pypi python_poetry_core
+
+RDEPENDS:${PN} += " \
+ python3-isodate \
+ python3-pyparsing \
+ python3-logging \
+ python3-numbers \
+ python3-xml \
+ python3-compression \
+ python3-core \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-referencing_0.34.0.bb b/meta/recipes-devtools/python/python3-referencing_0.34.0.bb
new file mode 100644
index 0000000000..6fbd10d9cf
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-referencing_0.34.0.bb
@@ -0,0 +1,14 @@
+SUMMARY = "An implementation-agnostic implementation of JSON reference resolution."
+HOMEPAGE = "https://github.com/python-jsonschema/referencing"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=93eb9740964b59e9ba30281255b044e2"
+
+SRC_URI[sha256sum] = "5773bd84ef41799a5a8ca72dc34590c041eb01bf9aa02632b4a973fb0181a844"
+
+inherit pypi python_hatchling
+
+DEPENDS += "python3-hatch-vcs-native"
+
+RDEPENDS:${PN} += "python3-rpds-py"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-requests_2.31.0.bb b/meta/recipes-devtools/python/python3-requests_2.31.0.bb
new file mode 100644
index 0000000000..df48cd54c3
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-requests_2.31.0.bb
@@ -0,0 +1,26 @@
+SUMMARY = "Python HTTP for Humans."
+HOMEPAGE = "http://python-requests.org"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=34400b68072d710fecd0a2940a0d1658"
+
+SRC_URI[sha256sum] = "942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"
+
+inherit pypi setuptools3
+
+RDEPENDS:${PN} += " \
+ python3-email \
+ python3-json \
+ python3-ndg-httpsclient \
+ python3-netserver \
+ python3-pyasn1 \
+ python3-pyopenssl \
+ python3-pysocks \
+ python3-urllib3 \
+ python3-chardet \
+ python3-idna \
+ python3-compression \
+"
+
+CVE_PRODUCT = "requests"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-rfc3339-validator_0.1.4.bb b/meta/recipes-devtools/python/python3-rfc3339-validator_0.1.4.bb
new file mode 100644
index 0000000000..e809c2280d
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-rfc3339-validator_0.1.4.bb
@@ -0,0 +1,21 @@
+SUMMARY = "A pure python RFC3339 validator"
+HOMEPAGE = "https://github.com/naimetti/rfc3339-validator"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=a21b13b5a996f08f7e0b088aa38ce9c6"
+
+FILESEXTRAPATHS:prepend := "${THISDIR}/python-rfc3339-validator:"
+
+SRC_URI[sha256sum] = "138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b"
+
+PYPI_PACKAGE = "rfc3339_validator"
+UPSTREAM_CHECK_REGEX = "/rfc3339-validator/(?P<pver>(\d+[\.\-_]*)+)/"
+
+inherit pypi setuptools3
+
+RDEPENDS:${PN} += "\
+ python3-core \
+ python3-datetime \
+ python3-six \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-rfc3986-validator_0.1.1.bb b/meta/recipes-devtools/python/python3-rfc3986-validator_0.1.1.bb
new file mode 100644
index 0000000000..e374979cb4
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-rfc3986-validator_0.1.1.bb
@@ -0,0 +1,24 @@
+SUMMARY = "Pure python rfc3986 validator"
+HOMEPAGE = "https://github.com/naimetti/rfc3986-validator"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=a21b13b5a996f08f7e0b088aa38ce9c6"
+
+FILESEXTRAPATHS:prepend := "${THISDIR}/python-rfc3986-validator:"
+
+SRC_URI[md5sum] = "47f7657b790aaf6011a1ab3d86c6be95"
+SRC_URI[sha256sum] = "3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055"
+
+PYPI_PACKAGE = "rfc3986_validator"
+UPSTREAM_CHECK_REGEX = "/rfc3986-validator/(?P<pver>(\d+[\.\-_]*)+)/"
+
+inherit pypi setuptools3
+
+SRC_URI += "\
+ file://0001-setup.py-move-pytest-runner-to-test_requirements.patch \
+"
+
+RDEPENDS:${PN} += "\
+ python3-core \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-rfc3987_1.3.8.bb b/meta/recipes-devtools/python/python3-rfc3987_1.3.8.bb
new file mode 100644
index 0000000000..316dc544de
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-rfc3987_1.3.8.bb
@@ -0,0 +1,11 @@
+SUMMARY = "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)"
+HOMEPAGE = "https://pypi.org/project/rfc3987/"
+LICENSE = "GPL-3.0-or-later"
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=9;md5=2b723edf67b2f3088bc5e339b1ceda2d"
+
+SRC_URI[md5sum] = "b6c4028acdc788a9ba697e1c1d6b896c"
+SRC_URI[sha256sum] = "d3c4d257a560d544e9826b38bc81db676890c79ab9d7ac92b39c7a253d5ca733"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-rpds-py-crates.inc b/meta/recipes-devtools/python/python3-rpds-py-crates.inc
new file mode 100644
index 0000000000..b9048bde51
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-rpds-py-crates.inc
@@ -0,0 +1,80 @@
+# Autogenerated with 'bitbake -c update_crates python3-rpds-py'
+
+# from Cargo.lock
+SRC_URI += " \
+ crate://crates.io/archery/1.1.0 \
+ crate://crates.io/autocfg/1.1.0 \
+ crate://crates.io/bitflags/1.3.2 \
+ crate://crates.io/cfg-if/1.0.0 \
+ crate://crates.io/heck/0.4.1 \
+ crate://crates.io/indoc/2.0.4 \
+ crate://crates.io/libc/0.2.147 \
+ crate://crates.io/lock_api/0.4.10 \
+ crate://crates.io/memoffset/0.9.0 \
+ crate://crates.io/once_cell/1.18.0 \
+ crate://crates.io/parking_lot/0.12.1 \
+ crate://crates.io/parking_lot_core/0.9.8 \
+ crate://crates.io/proc-macro2/1.0.66 \
+ crate://crates.io/pyo3/0.20.2 \
+ crate://crates.io/pyo3-build-config/0.20.2 \
+ crate://crates.io/pyo3-ffi/0.20.2 \
+ crate://crates.io/pyo3-macros/0.20.2 \
+ crate://crates.io/pyo3-macros-backend/0.20.2 \
+ crate://crates.io/quote/1.0.31 \
+ crate://crates.io/redox_syscall/0.3.5 \
+ crate://crates.io/rpds/1.1.0 \
+ crate://crates.io/scopeguard/1.1.0 \
+ crate://crates.io/smallvec/1.11.0 \
+ crate://crates.io/static_assertions/1.1.0 \
+ crate://crates.io/syn/2.0.32 \
+ crate://crates.io/target-lexicon/0.12.9 \
+ crate://crates.io/triomphe/0.1.9 \
+ crate://crates.io/unicode-ident/1.0.11 \
+ crate://crates.io/unindent/0.2.3 \
+ crate://crates.io/windows-targets/0.48.1 \
+ crate://crates.io/windows_aarch64_gnullvm/0.48.0 \
+ crate://crates.io/windows_aarch64_msvc/0.48.0 \
+ crate://crates.io/windows_i686_gnu/0.48.0 \
+ crate://crates.io/windows_i686_msvc/0.48.0 \
+ crate://crates.io/windows_x86_64_gnu/0.48.0 \
+ crate://crates.io/windows_x86_64_gnullvm/0.48.0 \
+ crate://crates.io/windows_x86_64_msvc/0.48.0 \
+"
+
+SRC_URI[archery-1.1.0.sha256sum] = "487955f60962765486ce000015a3492ca45c34a2ebbf12bc0aa2b5110ca6e7d2"
+SRC_URI[autocfg-1.1.0.sha256sum] = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+SRC_URI[bitflags-1.3.2.sha256sum] = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+SRC_URI[cfg-if-1.0.0.sha256sum] = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+SRC_URI[heck-0.4.1.sha256sum] = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+SRC_URI[indoc-2.0.4.sha256sum] = "1e186cfbae8084e513daff4240b4797e342f988cecda4fb6c939150f96315fd8"
+SRC_URI[libc-0.2.147.sha256sum] = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
+SRC_URI[lock_api-0.4.10.sha256sum] = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16"
+SRC_URI[memoffset-0.9.0.sha256sum] = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
+SRC_URI[once_cell-1.18.0.sha256sum] = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+SRC_URI[parking_lot-0.12.1.sha256sum] = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+SRC_URI[parking_lot_core-0.9.8.sha256sum] = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447"
+SRC_URI[proc-macro2-1.0.66.sha256sum] = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9"
+SRC_URI[pyo3-0.20.2.sha256sum] = "9a89dc7a5850d0e983be1ec2a463a171d20990487c3cfcd68b5363f1ee3d6fe0"
+SRC_URI[pyo3-build-config-0.20.2.sha256sum] = "07426f0d8fe5a601f26293f300afd1a7b1ed5e78b2a705870c5f30893c5163be"
+SRC_URI[pyo3-ffi-0.20.2.sha256sum] = "dbb7dec17e17766b46bca4f1a4215a85006b4c2ecde122076c562dd058da6cf1"
+SRC_URI[pyo3-macros-0.20.2.sha256sum] = "05f738b4e40d50b5711957f142878cfa0f28e054aa0ebdfc3fd137a843f74ed3"
+SRC_URI[pyo3-macros-backend-0.20.2.sha256sum] = "0fc910d4851847827daf9d6cdd4a823fbdaab5b8818325c5e97a86da79e8881f"
+SRC_URI[quote-1.0.31.sha256sum] = "5fe8a65d69dd0808184ebb5f836ab526bb259db23c657efa38711b1072ee47f0"
+SRC_URI[redox_syscall-0.3.5.sha256sum] = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+SRC_URI[rpds-1.1.0.sha256sum] = "a0e15515d3ce3313324d842629ea4905c25a13f81953eadb88f85516f59290a4"
+SRC_URI[scopeguard-1.1.0.sha256sum] = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+SRC_URI[smallvec-1.11.0.sha256sum] = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9"
+SRC_URI[static_assertions-1.1.0.sha256sum] = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+SRC_URI[syn-2.0.32.sha256sum] = "239814284fd6f1a4ffe4ca893952cdd93c224b6a1571c9a9eadd670295c0c9e2"
+SRC_URI[target-lexicon-0.12.9.sha256sum] = "df8e77cb757a61f51b947ec4a7e3646efd825b73561db1c232a8ccb639e611a0"
+SRC_URI[triomphe-0.1.9.sha256sum] = "0eee8098afad3fb0c54a9007aab6804558410503ad676d4633f9c2559a00ac0f"
+SRC_URI[unicode-ident-1.0.11.sha256sum] = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c"
+SRC_URI[unindent-0.2.3.sha256sum] = "c7de7d73e1754487cb58364ee906a499937a0dfabd86bcb980fa99ec8c8fa2ce"
+SRC_URI[windows-targets-0.48.1.sha256sum] = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f"
+SRC_URI[windows_aarch64_gnullvm-0.48.0.sha256sum] = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
+SRC_URI[windows_aarch64_msvc-0.48.0.sha256sum] = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
+SRC_URI[windows_i686_gnu-0.48.0.sha256sum] = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
+SRC_URI[windows_i686_msvc-0.48.0.sha256sum] = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
+SRC_URI[windows_x86_64_gnu-0.48.0.sha256sum] = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
+SRC_URI[windows_x86_64_gnullvm-0.48.0.sha256sum] = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
+SRC_URI[windows_x86_64_msvc-0.48.0.sha256sum] = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
diff --git a/meta/recipes-devtools/python/python3-rpds-py_0.18.0.bb b/meta/recipes-devtools/python/python3-rpds-py_0.18.0.bb
new file mode 100644
index 0000000000..cece2cb8cc
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-rpds-py_0.18.0.bb
@@ -0,0 +1,15 @@
+SUMMARY = "Python bindings to the Rust rpds crate for persistent data structures."
+HOMEPAGE = "https://pypi.org/project/rpds-py/"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=7767fa537c4596c54141f32882c4a984"
+
+SRC_URI[sha256sum] = "42821446ee7a76f5d9f71f9e33a4fb2ffd724bb3e7f93386150b61a43115788d"
+
+require ${BPN}-crates.inc
+
+inherit pypi cargo-update-recipe-crates python_maturin
+
+PYPI_PACKAGE = "rpds_py"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-ruamel-yaml_0.18.6.bb b/meta/recipes-devtools/python/python3-ruamel-yaml_0.18.6.bb
new file mode 100644
index 0000000000..197bf91d6c
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-ruamel-yaml_0.18.6.bb
@@ -0,0 +1,23 @@
+SUMMARY = "YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order."
+HOMEPAGE = "https://pypi.org/project/ruamel.yaml/"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=30cbbccd94bf3a2b0285ec35671a1938"
+
+PYPI_PACKAGE = "ruamel.yaml"
+
+inherit pypi setuptools3
+
+SRC_URI[sha256sum] = "8b27e6a217e786c6fbe5634d8f3f11bc63e0f80f6a5890f28863d9c45aac311b"
+
+RDEPENDS:${PN} += "\
+ python3-shell \
+ python3-datetime \
+ python3-netclient \
+"
+
+do_install:prepend() {
+ export RUAMEL_NO_PIP_INSTALL_CHECK=1
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-scons/0001-Fix-man-page-installation.patch b/meta/recipes-devtools/python/python3-scons/0001-Fix-man-page-installation.patch
new file mode 100644
index 0000000000..6dffe64809
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-scons/0001-Fix-man-page-installation.patch
@@ -0,0 +1,29 @@
+From 8b482e618047e94833545dce3a26924ef4f075db Mon Sep 17 00:00:00 2001
+From: Tim Orling <ticotimo@gmail.com>
+Date: Sat, 22 May 2021 11:20:46 -0700
+Subject: [PATCH] Fix man page installation
+
+Fixes:
+ error: can't copy 'build/doc/man/scons.1': doesn't exist or not a regular file
+
+Upstream-Status: Inappropriate [oe specific]
+
+Signed-off-by: Tim Orling <ticotimo@gmail.com>
+
+---
+ MANIFEST.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/MANIFEST.in b/MANIFEST.in
+index 04ec000..937f6f3 100644
+--- a/MANIFEST.in
++++ b/MANIFEST.in
+@@ -4,7 +4,7 @@ recursive-include SCons/Tool/docbook *
+ include LICENSE
+
+ include scons.1 sconsign.1 scons-time.1
+-recursive-include build/doc/man *.1
++#recursive-include build/doc/man *.1
+
+
+
diff --git a/meta/recipes-devtools/python/python3-scons_4.7.0.bb b/meta/recipes-devtools/python/python3-scons_4.7.0.bb
new file mode 100644
index 0000000000..bba6c799d4
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-scons_4.7.0.bb
@@ -0,0 +1,36 @@
+SUMMARY = "Software Construction tool (make/autotools replacement)"
+HOMEPAGE = "https://github.com/SCons/scons"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=d903b0b8027f461402bac9b5169b36f7"
+
+SRC_URI += " file://0001-Fix-man-page-installation.patch"
+SRC_URI[sha256sum] = "d8b617f6610a73e46509de70dcf82f76861b79762ff602d546f4e80918ec81f3"
+
+PYPI_PACKAGE = "SCons"
+
+inherit pypi setuptools3
+
+RDEPENDS:${PN}:class-target = "\
+ python3-core \
+ python3-compression \
+ python3-fcntl \
+ python3-importlib-metadata \
+ python3-io \
+ python3-json \
+ python3-shell \
+ python3-pickle \
+ python3-pkg-resources \
+ python3-pprint \
+ "
+
+do_install:append() {
+ install -d ${D}${mandir}/man1
+ mv ${D}${prefix}/scons*.1 ${D}${mandir}/man1/
+}
+
+do_install:append:class-native() {
+ create_wrapper ${D}${bindir}/scons SCONS_LIB_DIR='${STAGING_DIR_HOST}/${PYTHON_SITEPACKAGES_DIR}' PYTHONNOUSERSITE='1'
+}
+
+BBCLASSEXTEND = "native"
diff --git a/meta/recipes-devtools/python/python3-semantic-version_2.10.0.bb b/meta/recipes-devtools/python/python3-semantic-version_2.10.0.bb
new file mode 100644
index 0000000000..27e3f534b8
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-semantic-version_2.10.0.bb
@@ -0,0 +1,18 @@
+SUMMARY = "A library implementing the 'SemVer' scheme."
+DESCRIPTION = "Semantic version comparison for Python (see http://semver.org/)"
+HOMEPAGE = "https://github.com/rbarrois/python-semanticversion"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=4fb31e3c1c7eeb8b5e8c07657cdd54e2"
+
+SRC_URI[sha256sum] = "bdabb6d336998cbb378d4b9db3a4b56a1e3235701dc05ea2690d9a997ed5041c"
+
+PYPI_PACKAGE = "semantic_version"
+inherit pypi setuptools3
+
+RDEPENDS:${PN} += " \
+ python3-pkg-resources \
+"
+
+BBCLASSEXTEND = "native nativesdk"
+
+UPSTREAM_CHECK_REGEX = "/semantic-version/(?P<pver>(\d+[\.\-_]*)+)/"
diff --git a/meta/recipes-devtools/python/python3-setuptools-rust_1.9.0.bb b/meta/recipes-devtools/python/python3-setuptools-rust_1.9.0.bb
new file mode 100644
index 0000000000..8eb2513d69
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-setuptools-rust_1.9.0.bb
@@ -0,0 +1,35 @@
+SUMMARY = "Setuptools Rust extension plugin"
+DESCRIPTION = "setuptools-rust is a plugin for setuptools to build Rust \
+Python extensions implemented with PyO3 or rust-cpython.\
+\
+Compile and distribute Python extensions written in Rust as easily as if they were written in C."
+HOMEPAGE = "https://github.com/PyO3/setuptools-rust"
+BUGTRACKER = "https://github.com/PyO3/setuptools-rust/issues"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=011cd92e702dd9e6b1a26157b6fd53f5"
+
+SRC_URI = "${PYPI_SRC_URI} \
+ https://files.pythonhosted.org/packages/67/08/e1aa2c582c62ac76e4d60f8e454bd3bba933781a06a88b4e38797445822a/setuptools-rust-${PV}.tar.gz \
+ "
+SRC_URI[sha256sum] = "704df0948f2e4cc60c2596ad6e840ea679f4f43e58ed4ad0c1857807240eab96"
+
+inherit cargo pypi python_setuptools_build_meta
+
+DEPENDS += "python3-setuptools-scm-native python3-wheel-native"
+# remove when https://github.com/PyO3/setuptools-rust/commit/7ced8d2a8f36e1b4fc41b5544636defb7bd44bdf
+# is included
+DEPENDS += "python3-semantic-version-native"
+
+RDEPENDS:${PN} += " \
+ python3-json \
+ python3-semantic-version \
+ python3-setuptools \
+ python3-setuptools-scm \
+ python3-shell \
+ python3-toml \
+ python3-typing-extensions \
+ python3-wheel \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-setuptools-scm_8.0.4.bb b/meta/recipes-devtools/python/python3-setuptools-scm_8.0.4.bb
new file mode 100644
index 0000000000..64b5050c3b
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-setuptools-scm_8.0.4.bb
@@ -0,0 +1,31 @@
+SUMMARY = "the blessed package to manage your versions by scm tags"
+HOMEPAGE = "https://pypi.org/project/setuptools-scm/"
+DESCRIPTION = "setuptools_scm handles managing your Python package \
+versions in SCM metadata instead of declaring them as the version \
+argument or in a SCM managed file."
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=838c366f69b72c5df05c96dff79b35f2"
+
+SRC_URI[sha256sum] = "b5f43ff6800669595193fd09891564ee9d1d7dcb196cab4b2506d53a2e1c95c7"
+
+inherit pypi python_setuptools_build_meta
+
+UPSTREAM_CHECK_REGEX = "scm-(?P<pver>.*)\.tar"
+
+DEPENDS += "python3-tomli-native python3-packaging-native python3-typing-extensions-native"
+
+RDEPENDS:${PN} = "\
+ python3-packaging \
+ python3-pip \
+ python3-pyparsing \
+ python3-setuptools \
+ python3-tomli \
+ python3-typing-extensions \
+"
+
+RDEPENDS:${PN}:append:class-target = " \
+ python3-debugger \
+ python3-json \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-setuptools/0001-_distutils-sysconfig.py-make-it-possible-to-substite.patch b/meta/recipes-devtools/python/python3-setuptools/0001-_distutils-sysconfig.py-make-it-possible-to-substite.patch
new file mode 100644
index 0000000000..0f6c9d250d
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-setuptools/0001-_distutils-sysconfig.py-make-it-possible-to-substite.patch
@@ -0,0 +1,58 @@
+From d393759315b189a738e4b6a2ce31dc18dbbfae29 Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex@linutronix.de>
+Date: Wed, 11 May 2022 21:41:14 +0200
+Subject: [PATCH] _distutils/sysconfig.py: make it possible to substite the
+ prefix to target sysroot
+
+This is done by probing STAGING_INCDIR/STAGING_LIBDIRenv vars:
+not the most elegant solution, but distutils/sysconfig has been
+tweaked to do this for many, many year, and so it's easiest
+to replicate here as well, the original is
+meta/recipes-devtools/python/python3/12-distutils-prefix-is-inside-staging-area.patch
+
+I'm not sure exactly why setuptools now needs a copy, and what
+would happen to this module in light of distutils deprecation.
+
+Upstream-Status: Inappropriate [oe-core specific]
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+---
+ setuptools/_distutils/sysconfig.py | 12 ++++++++++--
+ 1 file changed, 10 insertions(+), 2 deletions(-)
+
+diff --git a/setuptools/_distutils/sysconfig.py b/setuptools/_distutils/sysconfig.py
+index a40a723..14f35e7 100644
+--- a/setuptools/_distutils/sysconfig.py
++++ b/setuptools/_distutils/sysconfig.py
+@@ -119,6 +119,8 @@ def get_python_inc(plat_specific=0, prefix=None):
+ sys.base_exec_prefix -- i.e., ignore 'plat_specific'.
+ """
+ default_prefix = BASE_EXEC_PREFIX if plat_specific else BASE_PREFIX
++ if os.environ.get('STAGING_INCDIR', ""):
++ default_prefix = os.environ['STAGING_INCDIR'].rstrip('include')
+ resolved_prefix = prefix if prefix is not None else default_prefix
+ try:
+ getter = globals()[f'_get_python_inc_{os.name}']
+@@ -238,7 +240,13 @@ def get_python_lib(plat_specific=0, standard_lib=0, prefix=None):
+
+ early_prefix = prefix
+
+- 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)
++ elif prefix is None:
+ if standard_lib:
+ prefix = plat_specific and BASE_EXEC_PREFIX or BASE_PREFIX
+ else:
+@@ -253,7 +261,7 @@ def get_python_lib(plat_specific=0, standard_lib=0, prefix=None):
+ # Pure Python
+ libdir = "lib"
+ implementation = 'pypy' if IS_PYPY else 'python'
+- libpython = os.path.join(prefix, libdir, implementation + get_python_version())
++ libpython = os.path.join(prefix, lib_basename, implementation + get_python_version())
+ return _posix_lib(standard_lib, libpython, early_prefix, prefix)
+ elif os.name == "nt":
+ if standard_lib:
diff --git a/meta/recipes-devtools/python/files/0001-conditionally-do-not-fetch-code-by-easy_install.patch b/meta/recipes-devtools/python/python3-setuptools/0001-conditionally-do-not-fetch-code-by-easy_install.patch
index 169d1b155b..e227c2889c 100644
--- a/meta/recipes-devtools/python/files/0001-conditionally-do-not-fetch-code-by-easy_install.patch
+++ b/meta/recipes-devtools/python/python3-setuptools/0001-conditionally-do-not-fetch-code-by-easy_install.patch
@@ -1,4 +1,4 @@
-From 5bba4f57f048016aa92ce5909e9e372db619554e Mon Sep 17 00:00:00 2001
+From 80fe63816eb3bfd1f5b6d354e1f2442805cff4e0 Mon Sep 17 00:00:00 2001
From: Hongxu Jia <hongxu.jia@windriver.com>
Date: Tue, 17 Jul 2018 10:13:38 +0800
Subject: [PATCH] conditionally do not fetch code by easy_install
@@ -9,17 +9,16 @@ internet by easy_install.
Upstream-Status: Inappropriate [oe specific]
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
-
---
setuptools/command/easy_install.py | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/setuptools/command/easy_install.py b/setuptools/command/easy_install.py
-index 05508ce..945e118 100755
+index 858fb20..62bd853 100644
--- a/setuptools/command/easy_install.py
+++ b/setuptools/command/easy_install.py
-@@ -640,6 +640,11 @@ class easy_install(Command):
- os.path.exists(tmpdir) and rmtree(rmtree_safe(tmpdir))
+@@ -672,6 +672,11 @@ class easy_install(Command):
+ os.path.exists(tmpdir) and _rmtree(tmpdir)
def easy_install(self, spec, deps=False):
+ if os.environ.get('NO_FETCH_BUILD', None):
@@ -27,6 +26,6 @@ index 05508ce..945e118 100755
+ "Please add its native recipe to DEPENDS." % spec)
+ return None
+
- if not self.editable:
- self.install_site_py()
-
+ with self._tmpdir() as tmpdir:
+ if not isinstance(spec, Requirement):
+ if URL_SCHEME(spec):
diff --git a/meta/recipes-devtools/python/python3-setuptools_40.8.0.bb b/meta/recipes-devtools/python/python3-setuptools_40.8.0.bb
deleted file mode 100644
index 0dc1ed8622..0000000000
--- a/meta/recipes-devtools/python/python3-setuptools_40.8.0.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require python-setuptools.inc
-inherit setuptools3
-
-do_install_append() {
- mv ${D}${bindir}/easy_install ${D}${bindir}/easy3_install
-}
diff --git a/meta/recipes-devtools/python/python3-setuptools_69.5.1.bb b/meta/recipes-devtools/python/python3-setuptools_69.5.1.bb
new file mode 100644
index 0000000000..8261b09d16
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-setuptools_69.5.1.bb
@@ -0,0 +1,55 @@
+SUMMARY = "Download, build, install, upgrade, and uninstall Python packages"
+HOMEPAGE = "https://pypi.org/project/setuptools"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=141643e11c48898150daa83802dbc65f"
+
+inherit pypi python_setuptools_build_meta
+
+SRC_URI:append:class-native = " file://0001-conditionally-do-not-fetch-code-by-easy_install.patch"
+
+SRC_URI += " \
+ file://0001-_distutils-sysconfig.py-make-it-possible-to-substite.patch"
+
+SRC_URI[sha256sum] = "6c1fccdac05a97e598fb0ae3bbed5904ccb317337a51139dcd51453611bbb987"
+
+DEPENDS += "python3"
+
+RDEPENDS:${PN} = "\
+ python3-2to3 \
+ python3-compile \
+ python3-compression \
+ python3-ctypes \
+ python3-email \
+ python3-html \
+ python3-json \
+ python3-netserver \
+ python3-numbers \
+ python3-pickle \
+ python3-pkg-resources \
+ python3-pkgutil \
+ python3-plistlib \
+ python3-shell \
+ python3-stringold \
+ python3-threading \
+ python3-unittest \
+ python3-xml \
+"
+
+BBCLASSEXTEND = "native nativesdk"
+
+# The pkg-resources module can be used by itself, without the package downloader
+# and easy_install. Ship it in a separate package so that it can be used by
+# minimal distributions.
+PACKAGES =+ "python3-pkg-resources "
+FILES:python3-pkg-resources = "${PYTHON_SITEPACKAGES_DIR}/pkg_resources/*"
+RDEPENDS:python3-pkg-resources = "\
+ python3-compression \
+ python3-email \
+ python3-plistlib \
+ python3-pprint \
+"
+
+# This used to use the bootstrap install which didn't compile. Until we bump the
+# tmpdir version we can't compile the native otherwise the sysroot unpack fails
+INSTALL_WHEEL_COMPILE_BYTECODE:class-native = "--no-compile-bytecode"
diff --git a/meta/recipes-devtools/python/python3-six_1.12.0.bb b/meta/recipes-devtools/python/python3-six_1.12.0.bb
deleted file mode 100644
index 8795313bec..0000000000
--- a/meta/recipes-devtools/python/python3-six_1.12.0.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-inherit setuptools3
-require python-six.inc
diff --git a/meta/recipes-devtools/python/python3-six_1.16.0.bb b/meta/recipes-devtools/python/python3-six_1.16.0.bb
new file mode 100644
index 0000000000..1ba48d4f47
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-six_1.16.0.bb
@@ -0,0 +1,4 @@
+inherit setuptools3
+require python-six.inc
+
+SRC_URI[sha256sum] = "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"
diff --git a/meta/recipes-devtools/python/python3-smartypants/0001-Change-hash-bang-to-python3.patch b/meta/recipes-devtools/python/python3-smartypants/0001-Change-hash-bang-to-python3.patch
new file mode 100644
index 0000000000..aab16eaab4
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-smartypants/0001-Change-hash-bang-to-python3.patch
@@ -0,0 +1,47 @@
+From e299bcb05405ff49450307bf3002c1fac14a866c Mon Sep 17 00:00:00 2001
+From: Tim Orling <tim.orling@konsulko.com>
+Date: Sun, 20 Feb 2022 18:55:50 -0800
+Subject: [PATCH] Change hash bang to python3
+
+In setup.py, smartypants and smartypants.py set hash bang to python3.
+
+Upstream-Status: Inappropriate [oe-core specific]
+
+Signed-off-by: Tim Orling <tim.orling@konsulko.com>
+
+---
+ setup.py | 2 +-
+ smartypants | 2 +-
+ smartypants.py | 2 +-
+ 3 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/setup.py b/setup.py
+index ff1ea76..96a8b73 100755
+--- a/setup.py
++++ b/setup.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python3
+ # Copyright (C) 2013, 2014 by Yu-Jie Lin
+ # For detail license information, See COPYING
+
+diff --git a/smartypants b/smartypants
+index 189adf5..0cca568 100755
+--- a/smartypants
++++ b/smartypants
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python3
+ # Copyright (c) 2013, 2014 Yu-Jie Lin
+ # Licensed under the BSD License, for detailed license information, see COPYING
+
+diff --git a/smartypants.py b/smartypants.py
+index a70575b..e53bd87 100755
+--- a/smartypants.py
++++ b/smartypants.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/python
++#!/usr/bin/env python3
+ # -*- coding: utf-8 -*-
+ # Copyright (c) 2013, 2014, 2016 Yu-Jie Lin
+ # Copyright (c) 2004, 2005, 2007, 2013 Chad Miller
diff --git a/meta/recipes-devtools/python/python3-smartypants_2.0.0.bb b/meta/recipes-devtools/python/python3-smartypants_2.0.0.bb
new file mode 100644
index 0000000000..d089a89b95
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-smartypants_2.0.0.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Translator of plain ASCII punctuation characters into 'smart' typographic punctuation HTML entities"
+HOMEPAGE = "https://pythonhosted.org/smartypants/"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=977036977591ac666c728921ecc54c4f"
+
+inherit pypi setuptools3
+
+PYPI_PACKAGE = "smartypants"
+SRC_URI += "file://0001-Change-hash-bang-to-python3.patch"
+SRC_URI[sha256sum] = "7812353a32022699a1aa8cd5626e01c94a946dcaeedaee2d0b382bae4c4cbf36"
+
+BBCLASSEXTEND = "native nativesdk"
+
+UPSTREAM_CHECK_REGEX = "/${PYPI_PACKAGE}/(?P<pver>(?!2\.0\.1)(\d+[\.\-_]*)+)/"
diff --git a/meta/recipes-devtools/python/python3-smmap_2.0.5.bb b/meta/recipes-devtools/python/python3-smmap_2.0.5.bb
deleted file mode 100644
index e87b8df8c5..0000000000
--- a/meta/recipes-devtools/python/python3-smmap_2.0.5.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-inherit setuptools3
-require python-smmap.inc
diff --git a/meta/recipes-devtools/python/python-smmap.inc b/meta/recipes-devtools/python/python3-smmap_6.0.0.bb
index 1a2259e4b8..6abed1205f 100644
--- a/meta/recipes-devtools/python/python-smmap.inc
+++ b/meta/recipes-devtools/python/python3-smmap_6.0.0.bb
@@ -4,17 +4,16 @@ help unifying memory mapped access on 32 and 64 bit systems and to help \
managing resources more efficiently."
HOMEPAGE = "http://github.com/gitpython-developers/GitPython"
SECTION = "devel/python"
-LICENSE = "BSD"
+LICENSE = "BSD-3-Clause"
LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=e910b35b0ef4e1f665b9a75d6afb7709"
-inherit pypi
+inherit pypi setuptools3
-PYPI_PACKAGE = "smmap2"
+PYPI_PACKAGE = "smmap"
-SRC_URI[md5sum] = "1c59a985be5aa645c4c5a4e063a40dd5"
-SRC_URI[sha256sum] = "29a9ffa0497e7f2be94ca0ed1ca1aa3cd4cf25a1f6b4f5f87f74b46ed91d609a"
+SRC_URI[sha256sum] = "8d79028ea6cc131da5eab099a5d95a998d43c6779956fffe3b455040911076da"
-RDEPENDS_${PN} += "${PYTHON_PN}-codecs \
- ${PYTHON_PN}-mmap \
+RDEPENDS:${PN} += "python3-codecs \
+ python3-mmap \
"
BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-snowballstemmer_2.2.0.bb b/meta/recipes-devtools/python/python3-snowballstemmer_2.2.0.bb
new file mode 100644
index 0000000000..ff120a3fc4
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-snowballstemmer_2.2.0.bb
@@ -0,0 +1,13 @@
+SUMMARY = "Snowball compiler and stemming algorithms"
+HOMEPAGE = "https://github.com/snowballstem/snowball"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=19139aaf3c8c8fa1ca6edd59c072fb9f"
+
+SRC_URI[sha256sum] = "09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"
+
+PYPI_PACKAGE = "snowballstemmer"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-sortedcontainers_2.4.0.bb b/meta/recipes-devtools/python/python3-sortedcontainers_2.4.0.bb
new file mode 100644
index 0000000000..0755d3e177
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-sortedcontainers_2.4.0.bb
@@ -0,0 +1,9 @@
+SUMMARY = "Sorted Containers is an Apache2 licensed sorted collections library, written in pure-Python, and fast as C-extensions."
+HOMEPAGE = "http://www.grantjenks.com/docs/sortedcontainers/"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=7c7c6a1a12ec816da16c1839137d53ae"
+
+inherit pypi setuptools3
+SRC_URI[sha256sum] = "25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-spdx-tools_0.8.2.bb b/meta/recipes-devtools/python/python3-spdx-tools_0.8.2.bb
new file mode 100644
index 0000000000..53263ca032
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-spdx-tools_0.8.2.bb
@@ -0,0 +1,28 @@
+SUMMARY = "Python tool to parse, validate and convert spdx files"
+HOMEPAGE = "https://github.com/spdx/tools-python"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=dc7f21ccff0f672f2a7cd6f412ae627d"
+
+SRC_URI[sha256sum] = "aea4ac9c2c375e7f439b1cef5ff32ef34914c083de0f61e08ed67cd3d9deb2a9"
+
+BBCLASSEXTEND = "native nativesdk"
+
+inherit setuptools3 pypi
+
+# Dependency required for pyspdxtools : python3-click
+# Dependencies required for conversion to spdx3 : python3-semantic-version, python3-ply
+RDEPENDS:${PN} += "\
+ python3-core \
+ python3-beartype \
+ python3-click \
+ python3-datetime \
+ python3-json \
+ python3-license-expression \
+ python3-ply \
+ python3-pyyaml \
+ python3-rdflib \
+ python3-semantic-version \
+ python3-uritools \
+ python3-xmltodict \
+ "
diff --git a/meta/recipes-devtools/python/python3-sphinx-rtd-theme_2.0.0.bb b/meta/recipes-devtools/python/python3-sphinx-rtd-theme_2.0.0.bb
new file mode 100644
index 0000000000..22b4d96444
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-sphinx-rtd-theme_2.0.0.bb
@@ -0,0 +1,26 @@
+SUMMARY = "Sphinx Theme reader"
+HOMEPAGE = "https://github.com/readthedocs/sphinx_rtd_theme"
+SECTION = "devel/python"
+LICENSE = "MIT & OFL-1.1"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=a1db7d4ef426c2935227264e1d4ae8f9 \
+ file://OFL-License.txt;md5=4534c22e0147eadb6828bd9fe86d4868 \
+ file://Apache-License-2.0.txt;md5=8a75796f0ef19c3f601d69857f5a9a5b"
+
+RDEPENDS:${PN} += " \
+ python3-compile \
+ python3-sphinx \
+ python3-sphinxcontrib-jquery \
+"
+
+PYPI_PACKAGE = "sphinx_rtd_theme"
+
+SRC_URI[sha256sum] = "bd5d7b80622406762073a04ef8fadc5f9151261563d47027de09910ce03afe6b"
+UPSTREAM_CHECK_REGEX ?= "/sphinx-rtd-theme/(?P<pver>(\d+[\.\-_]*)+)/"
+
+inherit setuptools3 pypi
+
+#Fake out the setup scipt
+export CI = "True"
+export TOX_ENV_NAME = "True"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-sphinx_7.2.6.bb b/meta/recipes-devtools/python/python3-sphinx_7.2.6.bb
new file mode 100644
index 0000000000..f4ed0720ff
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-sphinx_7.2.6.bb
@@ -0,0 +1,35 @@
+SUMMARY = "Python documentation generator"
+HOMEPAGE = "http://sphinx-doc.org/"
+SECTION = "devel/python"
+LICENSE = "BSD-2-Clause & MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=5eb6ac1b115a1ed24a12d9f15b633993"
+
+SRC_URI[sha256sum] = "9a5160e1ea90688d5963ba09a2dcd8bdd526620edbb65c328728f1b2228d5ab5"
+
+inherit python_flit_core pypi
+UPSTREAM_CHECK_REGEX = "/Sphinx/(?P<pver>(\d+[\.\-_]*)+)/"
+
+do_install:append () {
+ # The cache format of "{None, 'en', 'ja'}" doesn't seem to be consistent (dict ordering?)
+ rm ${D}${libdir}/${PYTHON_DIR}/site-packages/sphinx/writers/__pycache__/*latex*
+}
+
+RDEPENDS:${PN} = "\
+ python3-alabaster \
+ python3-babel \
+ python3-docutils \
+ python3-imagesize \
+ python3-jinja2 \
+ python3-packaging \
+ python3-pygments \
+ python3-requests \
+ python3-snowballstemmer \
+ python3-sphinxcontrib-applehelp \
+ python3-sphinxcontrib-devhelp \
+ python3-sphinxcontrib-htmlhelp \
+ python3-sphinxcontrib-jsmath \
+ python3-sphinxcontrib-qthelp \
+ python3-sphinxcontrib-serializinghtml \
+ "
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-sphinxcontrib-applehelp_1.0.8.bb b/meta/recipes-devtools/python/python3-sphinxcontrib-applehelp_1.0.8.bb
new file mode 100644
index 0000000000..67dd299b72
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-sphinxcontrib-applehelp_1.0.8.bb
@@ -0,0 +1,12 @@
+SUMMARY = "sphinxcontrib-applehelp is a sphinx extension which outputs Apple help books"
+HOMEPAGE = "https://www.sphinx-doc.org"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=c7715857042d4c8c0105999ca0c072c5"
+
+SRC_URI[sha256sum] = "c40a4f96f3776c4393d933412053962fac2b84f4c99a7982ba42e09576a70619"
+
+PYPI_PACKAGE = "sphinxcontrib_applehelp"
+
+inherit pypi python_flit_core
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-sphinxcontrib-devhelp_1.0.6.bb b/meta/recipes-devtools/python/python3-sphinxcontrib-devhelp_1.0.6.bb
new file mode 100644
index 0000000000..31f77a0a14
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-sphinxcontrib-devhelp_1.0.6.bb
@@ -0,0 +1,12 @@
+SUMMARY = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document."
+HOMEPAGE = "https://www.sphinx-doc.org"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=fd30d9972a142c857a80c9f312e92b93"
+
+SRC_URI[sha256sum] = "9893fd3f90506bc4b97bdb977ceb8fbd823989f4316b28c3841ec128544372d3"
+
+PYPI_PACKAGE = "sphinxcontrib_devhelp"
+
+inherit pypi python_flit_core
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-sphinxcontrib-htmlhelp_2.0.5.bb b/meta/recipes-devtools/python/python3-sphinxcontrib-htmlhelp_2.0.5.bb
new file mode 100644
index 0000000000..e30c61c398
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-sphinxcontrib-htmlhelp_2.0.5.bb
@@ -0,0 +1,12 @@
+SUMMARY = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files"
+HOMEPAGE = "https://www.sphinx-doc.org"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=24dce5ef6a13563241c24bc366f48886"
+
+SRC_URI[sha256sum] = "0dc87637d5de53dd5eec3a6a01753b1ccf99494bd756aafecd74b4fa9e729015"
+
+PYPI_PACKAGE = "sphinxcontrib_htmlhelp"
+
+inherit pypi python_flit_core
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-sphinxcontrib-jquery_4.1.bb b/meta/recipes-devtools/python/python3-sphinxcontrib-jquery_4.1.bb
new file mode 100644
index 0000000000..5f915663c2
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-sphinxcontrib-jquery_4.1.bb
@@ -0,0 +1,12 @@
+SUMMARY = "Extension to include jQuery on newer Sphinx releases"
+HOMEPAGE = "https://pypi.org/project/sphinxcontrib-jquery/"
+LICENSE = "0BSD"
+LIC_FILES_CHKSUM = "file://LICENCE;md5=926e8b7e89e3ebb2a2d1dfaf0873f241"
+
+SRC_URI[sha256sum] = "1620739f04e36a2c779f1a131a2dfd49b2fd07351bf1968ced074365933abc7a"
+
+PYPI_PACKAGE = "sphinxcontrib-jquery"
+
+inherit pypi python_flit_core
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-sphinxcontrib-jsmath_1.0.1.bb b/meta/recipes-devtools/python/python3-sphinxcontrib-jsmath_1.0.1.bb
new file mode 100644
index 0000000000..7c11cfeec5
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-sphinxcontrib-jsmath_1.0.1.bb
@@ -0,0 +1,12 @@
+SUMMARY = "A sphinx extension which renders display math in HTML via JavaScript"
+HOMEPAGE = "https://www.sphinx-doc.org"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=f0064c10bd544bcffccbc67a41c108d3"
+
+SRC_URI[sha256sum] = "a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"
+
+PYPI_PACKAGE = "sphinxcontrib-jsmath"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-sphinxcontrib-qthelp_1.0.7.bb b/meta/recipes-devtools/python/python3-sphinxcontrib-qthelp_1.0.7.bb
new file mode 100644
index 0000000000..2225ec521e
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-sphinxcontrib-qthelp_1.0.7.bb
@@ -0,0 +1,12 @@
+SUMMARY = "Is a sphinx extension which outputs QtHelp document."
+HOMEPAGE = "http://babel.edgewall.org/"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=f7a83b72ea86d04827575ec0b63430eb"
+
+SRC_URI[sha256sum] = "053dedc38823a80a7209a80860b16b722e9e0209e32fea98c90e4e6624588ed6"
+
+PYPI_PACKAGE = "sphinxcontrib_qthelp"
+
+inherit pypi python_flit_core
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-sphinxcontrib-serializinghtml_1.1.10.bb b/meta/recipes-devtools/python/python3-sphinxcontrib-serializinghtml_1.1.10.bb
new file mode 100644
index 0000000000..49be5200f0
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-sphinxcontrib-serializinghtml_1.1.10.bb
@@ -0,0 +1,12 @@
+SUMMARY = 'sphinxcontrib-serializinghtml is a sphinx extension which outputs "serialized" HTML files (json and pickle).'
+HOMEPAGE = "https://www.sphinx-doc.org"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=32a84ac5cd3bbd10c4d479233ad588b6"
+
+SRC_URI[sha256sum] = "93f3f5dc458b91b192fe10c397e324f262cf163d79f3282c158e8436a2c4511f"
+
+PYPI_PACKAGE = "sphinxcontrib_serializinghtml"
+
+inherit pypi python_flit_core
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-subunit_1.3.0.bb b/meta/recipes-devtools/python/python3-subunit_1.3.0.bb
deleted file mode 100644
index 2ece4451df..0000000000
--- a/meta/recipes-devtools/python/python3-subunit_1.3.0.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-inherit setuptools3
-require python-subunit.inc
diff --git a/meta/recipes-devtools/python/python3-subunit_1.4.4.bb b/meta/recipes-devtools/python/python3-subunit_1.4.4.bb
new file mode 100644
index 0000000000..11be10bab6
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-subunit_1.4.4.bb
@@ -0,0 +1,15 @@
+SUMMARY = "Python implementation of subunit test streaming protocol"
+HOMEPAGE = "https://pypi.org/project/python-subunit/"
+SECTION = "devel/python"
+LICENSE = "Apache-2.0 | BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;beginline=1;endline=20;md5=b1121e68d06c8d9ea544fcd895df0d39"
+
+PYPI_PACKAGE = "python-subunit"
+
+SRC_URI[sha256sum] = "1079363131aa1d3f45259237265bc2e61a77e35f20edfb6e3d1d2558a2cdea34"
+
+inherit pypi setuptools3
+
+RDEPENDS:${PN} = " python3-testtools python3-iso8601"
+
+BBCLASSEXTEND = "nativesdk"
diff --git a/meta/recipes-devtools/python/python3-testtools_2.3.0.bb b/meta/recipes-devtools/python/python3-testtools_2.3.0.bb
deleted file mode 100644
index 896ecee65c..0000000000
--- a/meta/recipes-devtools/python/python3-testtools_2.3.0.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-inherit setuptools3
-require python-testtools.inc
diff --git a/meta/recipes-devtools/python/python3-testtools_2.7.1.bb b/meta/recipes-devtools/python/python3-testtools_2.7.1.bb
new file mode 100644
index 0000000000..cc7e055632
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-testtools_2.7.1.bb
@@ -0,0 +1,20 @@
+SUMMARY = "Extensions to the Python standard library unit testing framework"
+HOMEPAGE = "https://pypi.org/project/testtools/"
+SECTION = "devel/python"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=e2c9d3e8ba7141c83bfef190e0b9379a"
+
+DEPENDS += "python3-hatch-vcs-native"
+
+inherit pypi python_hatchling
+
+SRC_URI[sha256sum] = "df6de96010e29ee21f637a147eabf30d50b25e3841dd1d68f93ee89ce77e366c"
+
+RDEPENDS:${PN} += "\
+ python3-doctest \
+ python3-extras \
+ python3-six \
+ "
+
+BBCLASSEXTEND = "nativesdk"
+
diff --git a/meta/recipes-devtools/python/python3-toml_0.10.2.bb b/meta/recipes-devtools/python/python3-toml_0.10.2.bb
new file mode 100644
index 0000000000..649464b961
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-toml_0.10.2.bb
@@ -0,0 +1,15 @@
+SUMMARY = "Python Library for Tom's Obvious, Minimal Language"
+HOMEPAGE = "https://github.com/uiri/toml"
+LICENSE = "MIT"
+SECTION = "devel/python"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=16c77b2b1050d2f03cb9c2ed0edaf4f0"
+
+SRC_URI[sha256sum] = "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native nativesdk"
+
+RDEPENDS:${PN} += " \
+ python3-misc \
+"
diff --git a/meta/recipes-devtools/python/python3-tomli_2.0.1.bb b/meta/recipes-devtools/python/python3-tomli_2.0.1.bb
new file mode 100644
index 0000000000..9401ed897f
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-tomli_2.0.1.bb
@@ -0,0 +1,18 @@
+SUMMARY = "A lil' TOML parser"
+DESCRIPTION = "Tomli is a Python library for parsing TOML. Tomli is fully \
+compatible with TOML v1.0.0."
+HOMEPAGE = "https://github.com/hukkin/tomli"
+BUGTRACKER = "https://github.com/hukkin/tomli/issues"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=aaaaf0879d17df0110d1aa8c8c9f46f5"
+
+inherit pypi python_flit_core
+
+SRC_URI[sha256sum] = "de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"
+
+BBCLASSEXTEND = "native nativesdk"
+
+RDEPENDS:${PN} += " \
+ python3-datetime \
+ python3-stringold \
+"
diff --git a/meta/recipes-devtools/python/python3-trove-classifiers/run-ptest b/meta/recipes-devtools/python/python3-trove-classifiers/run-ptest
new file mode 100644
index 0000000000..8d2017d39c
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-trove-classifiers/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+pytest --automake
diff --git a/meta/recipes-devtools/python/python3-trove-classifiers_2024.4.10.bb b/meta/recipes-devtools/python/python3-trove-classifiers_2024.4.10.bb
new file mode 100644
index 0000000000..357b428983
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-trove-classifiers_2024.4.10.bb
@@ -0,0 +1,26 @@
+SUMMARY = "Canonical source for classifiers on PyPI (pypi.org)."
+HOMEPAGE = "https://github.com/pypa/trove-classifiers"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327"
+
+SRC_URI[sha256sum] = "49f40bb6a746b72a1cba4f8d55ee8252169cda0f70802e3fd24f04b7fb25a492"
+
+inherit pypi python_setuptools_build_meta ptest
+
+DEPENDS += " python3-calver-native"
+
+SRC_URI += " \
+ file://run-ptest \
+"
+
+RDEPENDS:${PN}-ptest += " \
+ python3-pytest \
+ python3-unittest-automake-output \
+"
+
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}/tests
+ cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-typing-extensions_4.11.0.bb b/meta/recipes-devtools/python/python3-typing-extensions_4.11.0.bb
new file mode 100644
index 0000000000..ad45b669ec
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-typing-extensions_4.11.0.bb
@@ -0,0 +1,24 @@
+SUMMARY = "Backported and Experimental Type Hints for Python 3.7+"
+DESCRIPTION = "The typing_extensions module serves two related purposes:\
+\
+* Enable use of new type system features on older Python versions. For \
+ example, typing.TypeGuard is new in Python 3.10, but typing_extensions \
+ allows users on previous Python versions to use it too.\
+* Enable experimentation with new type system PEPs before they are accepted \
+ and added to the typing module."
+HOMEPAGE = "https://github.com/python/typing_extensions"
+BUGTRACKER = "https://github.com/python/typing_extensions/issues"
+SECTIONS = "libs"
+LICENSE = "PSF-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=fcf6b249c2641540219a727f35d8d2c2"
+
+# The name on PyPi is slightly different.
+PYPI_PACKAGE = "typing_extensions"
+
+SRC_URI[sha256sum] = "83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0"
+
+inherit pypi python_flit_core
+
+UPSTREAM_CHECK_REGEX = "/typing-extensions/(?P<pver>(\d+[\.\-_]*)+)/"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-typogrify_2.0.7.bb b/meta/recipes-devtools/python/python3-typogrify_2.0.7.bb
new file mode 100644
index 0000000000..8ba2788c9b
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-typogrify_2.0.7.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Filters to enhance web typography, including support for Django & Jinja templates"
+HOMEPAGE = "https://github.com/mintchaos/typogrify"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=12bc792d6f5415dbf421f3fd183c6dd2"
+
+inherit pypi setuptools3
+
+PYPI_PACKAGE = "typogrify"
+SRC_URI[sha256sum] = "8be4668cda434163ce229d87ca273a11922cb1614cb359970b7dc96eed13cb38"
+
+BBCLASSEXTEND = "native nativesdk"
+
+RDEPENDS:${PN} += "python3-smartypants"
+
diff --git a/meta/recipes-devtools/python/python3-unittest-automake-output_0.2.bb b/meta/recipes-devtools/python/python3-unittest-automake-output_0.2.bb
new file mode 100644
index 0000000000..1fc6180d0e
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-unittest-automake-output_0.2.bb
@@ -0,0 +1,13 @@
+SUMMARY = "Modules to make unittest and pytest look like Automake output, for ptest"
+HOMEPAGE = "https://gitlab.com/rossburton/python-unittest-automake-output"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=f6f16008d9fb7349f06609329f1ab93b"
+
+SRC_URI = "git://gitlab.com/rossburton/python-unittest-automake-output;protocol=https;branch=main"
+SRCREV = "aebdfb188e368c690ea55cf6c9c9ffa1a52def65"
+
+S = "${WORKDIR}/git"
+
+inherit python_flit_core
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-uritools_4.0.2.bb b/meta/recipes-devtools/python/python3-uritools_4.0.2.bb
new file mode 100644
index 0000000000..5ffedccb85
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-uritools_4.0.2.bb
@@ -0,0 +1,11 @@
+SUMMARY = "URI parsing, classification and composition"
+HOMEPAGE = "https://github.com/tkem/uritools/"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=1ec55353c80c662e4255f8889a0ca558"
+
+SRC_URI[sha256sum] = "04df2b787d0eb76200e8319382a03562fbfe4741fd66c15506b08d3b8211d573"
+
+inherit setuptools3 pypi
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-urllib3_2.2.1.bb b/meta/recipes-devtools/python/python3-urllib3_2.2.1.bb
new file mode 100644
index 0000000000..fc1828b4ee
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-urllib3_2.2.1.bb
@@ -0,0 +1,24 @@
+SUMMARY = "Python HTTP library with thread-safe connection pooling, file post support, sanity friendly, and more"
+HOMEPAGE = "https://github.com/shazow/urllib3"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=52d273a3054ced561275d4d15260ecda"
+
+SRC_URI[sha256sum] = "d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19"
+
+inherit pypi python_hatchling
+
+RDEPENDS:${PN} += "\
+ python3-certifi \
+ python3-cryptography \
+ python3-email \
+ python3-idna \
+ python3-json \
+ python3-netclient \
+ python3-pyopenssl \
+ python3-threading \
+ python3-logging \
+"
+
+CVE_PRODUCT = "urllib3"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-vcversioner_2.16.0.0.bb b/meta/recipes-devtools/python/python3-vcversioner_2.16.0.0.bb
new file mode 100644
index 0000000000..149078c51b
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-vcversioner_2.16.0.0.bb
@@ -0,0 +1,12 @@
+SUMMARY = "Python vcversioner, automagically update the project's version"
+HOMEPAGE = "https://github.com/habnabit/vcversioner"
+
+LICENSE = "ISC"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=827a7a91a8d20d3c666b665cd96db8e3"
+
+SRC_URI[md5sum] = "aab6ef5e0cf8614a1b1140ed5b7f107d"
+SRC_URI[sha256sum] = "dae60c17a479781f44a4010701833f1829140b1eeccd258762a74974aa06e19b"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native"
diff --git a/meta/recipes-devtools/python/python3-wcwidth/run-ptest b/meta/recipes-devtools/python/python3-wcwidth/run-ptest
new file mode 100644
index 0000000000..8d2017d39c
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-wcwidth/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+pytest --automake
diff --git a/meta/recipes-devtools/python/python3-wcwidth_0.2.13.bb b/meta/recipes-devtools/python/python3-wcwidth_0.2.13.bb
new file mode 100644
index 0000000000..4a9bf75323
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-wcwidth_0.2.13.bb
@@ -0,0 +1,27 @@
+SUMMARY = "Library for building powerful interactive command lines in Python"
+DESCRIPTION = "Measures the displayed width of unicode strings in a terminal"
+HOMEPAGE = "https://github.com/jquast/wcwidth"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=b15979c39a2543892fca8cd86b4b52cb"
+
+SRC_URI[sha256sum] = "72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"
+
+inherit pypi setuptools3 ptest
+
+SRC_URI += " \
+ file://run-ptest \
+"
+
+RDEPENDS:${PN}-ptest += " \
+ python3-pytest \
+ python3-unittest-automake-output \
+"
+
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}/tests
+ cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+ install -d ${D}${PTEST_PATH}/bin
+ cp -rf ${S}/bin/* ${D}${PTEST_PATH}/bin/
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-webcolors/run-ptest b/meta/recipes-devtools/python/python3-webcolors/run-ptest
new file mode 100644
index 0000000000..8d2017d39c
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-webcolors/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+pytest --automake
diff --git a/meta/recipes-devtools/python/python3-webcolors_1.13.bb b/meta/recipes-devtools/python/python3-webcolors_1.13.bb
new file mode 100644
index 0000000000..cea2a971d3
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-webcolors_1.13.bb
@@ -0,0 +1,28 @@
+SUMMARY = "Simple Python module for working with HTML/CSS color definitions."
+HOMEPAGE = "https://pypi.org/project/webcolors/"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=702b1ef12cf66832a88f24c8f2ee9c19"
+
+SRC_URI[sha256sum] = "c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a"
+
+inherit pypi python_setuptools_build_meta ptest
+
+RDEPENDS:${PN}:class-target = "\
+ python3-stringold \
+"
+
+SRC_URI += " \
+ file://run-ptest \
+"
+
+RDEPENDS:${PN}-ptest += " \
+ python3-pytest \
+ python3-unittest-automake-output \
+"
+
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}/tests
+ cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-websockets_12.0.bb b/meta/recipes-devtools/python/python3-websockets_12.0.bb
new file mode 100644
index 0000000000..f89c3b629e
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-websockets_12.0.bb
@@ -0,0 +1,16 @@
+SUMMARY = "An implementation of the WebSocket Protocol (RFC 6455)"
+HOMEPAGE = "https://github.com/aaugustin/websockets"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=51924a6af4495b8cfaee1b1da869b6f4"
+
+inherit pypi setuptools3
+
+SRC_URI[sha256sum] = "81df9cbcbb6c260de1e007e58c011bfebe2dafc8435107b0537f393dd38c8b1b"
+
+BBCLASSEXTEND = "native nativesdk"
+
+RDEPENDS:${PN} = " \
+ python3-asyncio \
+ python3-profile \
+"
diff --git a/meta/recipes-devtools/python/python3-wheel_0.43.0.bb b/meta/recipes-devtools/python/python3-wheel_0.43.0.bb
new file mode 100644
index 0000000000..ba309ae5fc
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-wheel_0.43.0.bb
@@ -0,0 +1,15 @@
+SUMMARY = "The official binary distribution format for Python "
+HOMEPAGE = "https://github.com/pypa/wheel"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=7ffb0db04527cfe380e4f2726bd05ebf"
+
+SRC_URI[sha256sum] = "465ef92c69fa5c5da2d1cf8ac40559a8c940886afcef87dcf14b9470862f1d85"
+
+inherit python_flit_core pypi
+
+BBCLASSEXTEND = "native nativesdk"
+
+# This used to use the bootstrap install which didn't compile. Until we bump the
+# tmpdir version we can't compile the native otherwise the sysroot unpack fails
+INSTALL_WHEEL_COMPILE_BYTECODE:class-native = "--no-compile-bytecode"
diff --git a/meta/recipes-devtools/python/python3-xmltodict/run-ptest b/meta/recipes-devtools/python/python3-xmltodict/run-ptest
new file mode 100644
index 0000000000..3385d68939
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-xmltodict/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+pytest -o log_cli=true -o log_cli_level=INFO | sed -e 's/\[...%\]//g'| sed -e 's/PASSED/PASS/g'| sed -e 's/FAILED/FAIL/g'|sed -e 's/SKIPED/SKIP/g'| awk '{if ($NF=="PASS" || $NF=="FAIL" || $NF=="SKIP" || $NF=="XFAIL" || $NF=="XPASS"){printf "%s: %s\n", $NF, $0}else{print}}'| awk '{if ($NF=="PASS" || $NF=="FAIL" || $NF=="SKIP" || $NF=="XFAIL" || $NF=="XPASS") {$NF="";print $0}else{print}}'
diff --git a/meta/recipes-devtools/python/python3-xmltodict_0.13.0.bb b/meta/recipes-devtools/python/python3-xmltodict_0.13.0.bb
new file mode 100644
index 0000000000..e8e275647c
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-xmltodict_0.13.0.bb
@@ -0,0 +1,31 @@
+SUMMARY = "Makes working with XML feel like you are working with JSON"
+HOMEPAGE = "https://github.com/martinblech/xmltodict"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=01441d50dc74476db58a41ac10cb9fa2"
+
+SRC_URI[sha256sum] = "341595a488e3e01a85a9d8911d8912fd922ede5fecc4dce437eb4b6c8d037e56"
+
+PYPI_PACKAGE = "xmltodict"
+
+BBCLASSEXTEND = "native nativesdk"
+
+inherit pypi setuptools3 ptest
+
+SRC_URI += " \
+ file://run-ptest \
+"
+
+RDEPENDS:${PN} += " \
+ python3-core \
+ python3-xml \
+ python3-io \
+"
+
+RDEPENDS:${PN}-ptest += " \
+ python3-pytest \
+"
+
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}/tests
+ cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+}
diff --git a/meta/recipes-devtools/python/python3-yamllint_1.35.1.bb b/meta/recipes-devtools/python/python3-yamllint_1.35.1.bb
new file mode 100644
index 0000000000..53188b0262
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-yamllint_1.35.1.bb
@@ -0,0 +1,15 @@
+SUMMARY = "A linter for YAML files."
+HOMEPAGE = "https://github.com/adrienverge/yamllint"
+LICENSE = "GPL-3.0-only"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=1ebbd3e34237af26da5dc08a4e440464"
+
+inherit pypi setuptools3
+
+PYPI_PACKAGE = "yamllint"
+
+SRC_URI[sha256sum] = "7a003809f88324fd2c877734f2d575ee7881dd9043360657cc8049c809eba6cd"
+
+DEPENDS += "python3-setuptools-scm-native"
+RDEPENDS:${PN} += "python3-pathspec python3-pyyaml"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-zipp_3.18.1.bb b/meta/recipes-devtools/python/python3-zipp_3.18.1.bb
new file mode 100644
index 0000000000..e43432469d
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-zipp_3.18.1.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Backport of pathlib-compatible object wrapper for zip files"
+HOMEPAGE = "https://github.com/jaraco/zipp"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=141643e11c48898150daa83802dbc65f"
+
+SRC_URI[sha256sum] = "2884ed22e7d8961de1c9a05142eb69a247f120291bc0206a00a7642f09b5b715"
+
+DEPENDS += "python3-setuptools-scm-native"
+
+inherit pypi python_setuptools_build_meta
+
+DEPENDS += "python3-toml-native"
+
+RDEPENDS:${PN} += "python3-compression \
+ python3-math \
+ python3-more-itertools"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3/0001-Avoid-shebang-overflow-on-python-config.py.patch b/meta/recipes-devtools/python/python3/0001-Avoid-shebang-overflow-on-python-config.py.patch
new file mode 100644
index 0000000000..0d807db39f
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/0001-Avoid-shebang-overflow-on-python-config.py.patch
@@ -0,0 +1,30 @@
+From 365399f17d35719d828ddd49182dcb401fb7791c Mon Sep 17 00:00:00 2001
+From: Paulo Neves <ptsneves@gmail.com>
+Date: Tue, 7 Jun 2022 16:16:41 +0200
+Subject: [PATCH] Avoid shebang overflow on python-config.py
+
+The whole native path may be too big, leading to shebang
+overflow. Let's just use the env shebang.
+
+Denial reason: [1]
+
+Upstream-Status: Denied [distribution]
+
+[1] https://github.com/python/cpython/pull/93760#pullrequestreview-1005365737
+---
+ Makefile.pre.in | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/Makefile.pre.in b/Makefile.pre.in
+index 77bf09a..6353c57 100644
+--- a/Makefile.pre.in
++++ b/Makefile.pre.in
+@@ -2339,6 +2339,8 @@ python-config: $(srcdir)/Misc/python-config.in Misc/python-config.sh
+ @ # Substitution happens here, as the completely-expanded BINDIR
+ @ # is not available in configure
+ sed -e "s,@EXENAME@,$(EXENAME)," < $(srcdir)/Misc/python-config.in >python-config.py
++ @ # Otherwise we might get huge shebangs with native paths
++ sed -i -e '1s|^#!.*|#!/usr/bin/env python3|' 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
+ @ # On Darwin, always use the python version of the script, the shell
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
deleted file mode 100644
index 09f279ba1d..0000000000
--- a/meta/recipes-devtools/python/python3/0001-Do-not-add-usr-lib-termcap-to-linker-flags-to-avoid-.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From 23294c6ba6896115828293fdb7e67b47b38ba675 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
- contamination
-
-Upstream-Status: Inappropriate [oe-core specific]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
-
----
- setup.py | 1 -
- 1 file changed, 1 deletion(-)
-
-diff --git a/setup.py b/setup.py
-index b4357e3..fbec00d 100644
---- a/setup.py
-+++ b/setup.py
-@@ -856,7 +856,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) )
- 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
deleted file mode 100644
index 83fd52d87f..0000000000
--- a/meta/recipes-devtools/python/python3/0001-Do-not-use-the-shell-version-of-python-config-that-w.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From 148861fa16f2aaacd518770f337ea54b5182f981 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
- introduced in 3.4
-
-Revert instead to the original python version: it has our tweaks and
-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
---- a/Makefile.pre.in
-+++ b/Makefile.pre.in
-@@ -1431,12 +1431,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
-- @ # On Darwin, always use the python version of the script, the shell
-- @ # version doesn't use the compiler customizations that are provided
-- @ # in python (_osx_support.py).
-- @if test `uname -s` = Darwin; then \
-- cp python-config.py python-config; \
-- fi
-+ @ # In OpenEmbedded, always use the python version of the script, the shell
-+ @ # version is broken in multiple ways, and doesn't return correct directories
-+ cp python-config.py python-config
-
-
- # Install the include files
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..026150f0e2
--- /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 f8a664cf1fc73e381d57d6927207286059744837 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 1d97994..fa8821b 100644
+--- a/Lib/pty.py
++++ b/Lib/pty.py
+@@ -178,7 +178,10 @@ def _copy(master_fd, master_read=_read, stdin_read=_read):
+ i_buf = i_buf[n:]
+
+ if stdin_avail and STDIN_FILENO in rfds:
+- data = stdin_read(STDIN_FILENO)
++ try:
++ data = stdin_read(STDIN_FILENO)
++ except OSError:
++ data = b""
+ if not data:
+ stdin_avail = False
+ else:
diff --git a/meta/recipes-devtools/python/python3/0001-Lib-sysconfig.py-fix-another-place-where-lib-is-hard.patch b/meta/recipes-devtools/python/python3/0001-Lib-sysconfig.py-fix-another-place-where-lib-is-hard.patch
deleted file mode 100644
index b97583682a..0000000000
--- a/meta/recipes-devtools/python/python3/0001-Lib-sysconfig.py-fix-another-place-where-lib-is-hard.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From a21f4f8fa5e5c0601898740b4ac08ec84f41e190 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Thu, 18 Apr 2019 17:11:06 +0200
-Subject: [PATCH] Lib/sysconfig.py: fix another place where 'lib' is hardcoded
- as the library path
-
-Upstream-Status: Inappropriate [oe-core specific]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- Lib/sysconfig.py | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py
-index d15cec8..87fa5e6 100644
---- a/Lib/sysconfig.py
-+++ b/Lib/sysconfig.py
-@@ -20,10 +20,10 @@ __all__ = [
-
- _INSTALL_SCHEMES = {
- 'posix_prefix': {
-- 'stdlib': '{installed_base}/lib/python{py_version_short}',
-- 'platstdlib': '{platbase}/lib/python{py_version_short}',
-- 'purelib': '{base}/lib/python{py_version_short}/site-packages',
-- 'platlib': '{platbase}/lib/python{py_version_short}/site-packages',
-+ 'stdlib': '{LIBDEST}',
-+ 'platstdlib': '{LIBDEST}',
-+ 'purelib': '{LIBDEST}/site-packages',
-+ 'platlib': '{LIBDEST}/site-packages',
- 'include':
- '{installed_base}/include/python{py_version_short}{abiflags}',
- 'platinclude':
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..680254fab9
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/0001-Lib-sysconfig.py-use-prefix-value-from-build-configu.patch
@@ -0,0 +1,32 @@
+From 71c194077bb907bfe423d3f3275f33a6c8ca0e74 Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex@linutronix.de>
+Date: Fri, 17 Nov 2023 14:26:32 +0100
+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 79c0510..91ebcb6 100644
+--- a/Lib/sysconfig.py
++++ b/Lib/sysconfig.py
+@@ -668,6 +668,11 @@ def _init_config_vars():
+ _CONFIG_VARS['VPATH'] = sys._vpath
+ 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']
+ if _HAS_USER_BASE:
+ # Setting 'userbase' is done below the call to the
+ # init function to enable using 'get_config_var' in
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..ee33128fa1 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,4 +1,4 @@
-From cf6a9100902484e4d028ee88742dd2487b014a98 Mon Sep 17 00:00:00 2001
+From 38278339832a57dbf5fa3ef21accaa03e2c814d7 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
@@ -10,16 +10,16 @@ Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/Makefile.pre.in b/Makefile.pre.in
-index a3a02a7..d5503dd 100644
+index dd5e69f..381feb0 100644
--- a/Makefile.pre.in
+++ b/Makefile.pre.in
-@@ -507,8 +507,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:
+@@ -658,8 +658,7 @@ profile-run-stamp:
+ # enabled.
+ $(MAKE) profile-gen-stamp
+ # Next, run the profile task to generate the profile information.
- @ # FIXME: can't run for a cross build
- $(LLVM_PROF_FILE) $(RUNSHARED) ./$(BUILDPYTHON) $(PROFILE_TASK) || true
+ ./pgo-wrapper ./python -m test.regrtest --pgo test_grammar test_opcodes test_dict test_builtin test_exceptions test_types test_support || true
-
- build_all_merge_profile:
$(LLVM_PROF_MERGER)
+ # Remove profile generation binary since we are done with it.
+ $(MAKE) clean-retain-profile
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..197daa71a5
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/0001-Skip-failing-tests-due-to-load-variability-on-YP-AB.patch
@@ -0,0 +1,72 @@
+From 3471e3478e0760c42e04f8046cee2367ab5706d2 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>
+
+Skip two additional tests due to suspected load variability failures.
+
+[YOCTO #15131]
+[YOCTO #15177]
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ Lib/test/_test_multiprocessing.py | 3 +++
+ Lib/test/test_time.py | 2 ++
+ 2 files changed, 5 insertions(+)
+
+diff --git a/Lib/test/_test_multiprocessing.py b/Lib/test/_test_multiprocessing.py
+index e42c7ab..dff5227 100644
+--- a/Lib/test/_test_multiprocessing.py
++++ b/Lib/test/_test_multiprocessing.py
+@@ -682,6 +682,7 @@ class _TestProcess(BaseTestCase):
+ close_queue(q)
+
+ @support.requires_resource('walltime')
++ @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))
+@@ -2066,6 +2067,7 @@ class _TestBarrier(BaseTestCase):
+ except threading.BrokenBarrierError:
+ results.append(True)
+
++ @unittest.skip('timing related test, dependent on load')
+ def test_timeout(self):
+ """
+ Test wait(timeout)
+@@ -5024,6 +5026,7 @@ class TestWait(unittest.TestCase):
+ time.sleep(period)
+
+ @support.requires_resource('walltime')
++ @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 02cc3f4..51a4548 100644
+--- a/Lib/test/test_time.py
++++ b/Lib/test/test_time.py
+@@ -492,6 +492,7 @@ class TimeTestCase(unittest.TestCase):
+ @unittest.skipIf(
+ support.is_wasi, "process_time not available on WASI"
+ )
++ @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()
+@@ -505,6 +506,7 @@ class TimeTestCase(unittest.TestCase):
+ self.assertTrue(info.monotonic)
+ self.assertFalse(info.adjustable)
+
++ @unittest.skip('timing related test, dependent on load')
+ def test_thread_time(self):
+ if not hasattr(time, 'thread_time'):
+ if sys.platform.startswith(('linux', 'win')):
diff --git a/meta/recipes-devtools/python/python3/0001-Update-test_sysconfig-for-posix_user-purelib.patch b/meta/recipes-devtools/python/python3/0001-Update-test_sysconfig-for-posix_user-purelib.patch
new file mode 100644
index 0000000000..b6c6ac5a28
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/0001-Update-test_sysconfig-for-posix_user-purelib.patch
@@ -0,0 +1,37 @@
+From 37d058e841ba3bd89b5746cc5381afb014b11581 Mon Sep 17 00:00:00 2001
+From: Wentao Zhang <wentao.zhang@windriver.com>
+Date: Mon, 20 Mar 2023 13:39:52 +0800
+Subject: [PATCH] Update test_sysconfig for posix_user purelib
+
+Steps to trigger the failed test:
+Edit local.conf to add something as follows:
+ BASELIB = "lib64"
+ IMAGE_INSTALL:append = " python3-tests".
+bitbake core-image-sato
+runqemu qemux86-64 nographic slirp
+Reproducer:
+ $python3 -m test test_sysconfig
+
+Update test_sysconfig.test_user_similar() for the posix_user scheme:
+"purelib" doesn't use sys.platlibdir.
+
+Upstream-Status: Inappropriate [oe-core specific]
+Signed-off-by: Wentao Zhang <wentao.zhang@windriver.com>
+
+---
+ Lib/test/test_sysconfig.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Lib/test/test_sysconfig.py b/Lib/test/test_sysconfig.py
+index b6dbf3d..5672590 100644
+--- a/Lib/test/test_sysconfig.py
++++ b/Lib/test/test_sysconfig.py
+@@ -372,7 +372,7 @@ class TestSysConfig(unittest.TestCase):
+ expected = os.path.normpath(global_path.replace(base, user, 1))
+ # bpo-44860: platlib of posix_user doesn't use sys.platlibdir,
+ # whereas posix_prefix does.
+- if name == 'platlib':
++ if name == 'platlib' or name == 'purelib':
+ # Replace "/lib64/python3.11/site-packages" suffix
+ # with "/lib/python3.11/site-packages".
+ py_version_short = sysconfig.get_python_version()
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
deleted file mode 100644
index 8083345a4e..0000000000
--- a/meta/recipes-devtools/python/python3/0001-distutils-sysconfig-append-STAGING_LIBDIR-python-sys.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From 4865615a2bc2b78c739e4c33f536712c7f9af061 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
- STAGING_LIBDIR/python-sysconfigdata to sys.path
-
-So that target configuration can be used when running native python
-
-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(+)
-
-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
---- a/Lib/sysconfig.py
-+++ b/Lib/sysconfig.py
-@@ -412,6 +412,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()
-+ 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
- vars.update(build_time_vars)
diff --git a/meta/recipes-devtools/python/python3/0001-gh-114492-Initialize-struct-termios-before-calling-t.patch b/meta/recipes-devtools/python/python3/0001-gh-114492-Initialize-struct-termios-before-calling-t.patch
new file mode 100644
index 0000000000..8406ef30a2
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/0001-gh-114492-Initialize-struct-termios-before-calling-t.patch
@@ -0,0 +1,26 @@
+From 439aa02f42d6e6715c172076261757fcb89a936a Mon Sep 17 00:00:00 2001
+From: "Miss Islington (bot)"
+ <31488909+miss-islington@users.noreply.github.com>
+Date: Tue, 23 Jan 2024 23:02:02 +0100
+Subject: [PATCH] gh-114492: Initialize struct termios before calling
+ tcgetattr() (GH-114495) (GH-114502)
+
+On Alpine Linux it could leave some field non-initialized.
+(cherry picked from commit d22c066b802592932f9eb18434782299e80ca42e)
+
+Upstream-Status: Backport [https://github.com/python/cpython/commit/386c72d9928c51aa2c855ce592bd8022da3b407f]
+Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ .../next/Library/2024-01-23-21-20-40.gh-issue-114492.vKxl5o.rst | 2 ++
+ 1 file changed, 2 insertions(+)
+ create mode 100644 Misc/NEWS.d/next/Library/2024-01-23-21-20-40.gh-issue-114492.vKxl5o.rst
+
+diff --git a/Misc/NEWS.d/next/Library/2024-01-23-21-20-40.gh-issue-114492.vKxl5o.rst b/Misc/NEWS.d/next/Library/2024-01-23-21-20-40.gh-issue-114492.vKxl5o.rst
+new file mode 100644
+index 0000000..8df8299
+--- /dev/null
++++ b/Misc/NEWS.d/next/Library/2024-01-23-21-20-40.gh-issue-114492.vKxl5o.rst
+@@ -0,0 +1,2 @@
++Make the result of :func:`termios.tcgetattr` reproducible on Alpine Linux.
++Previously it could leave a random garbage in some fields.
diff --git a/meta/recipes-devtools/python/python3/0001-main.c-if-OEPYTHON3HOME-is-set-use-instead-of-PYTHON.patch b/meta/recipes-devtools/python/python3/0001-main.c-if-OEPYTHON3HOME-is-set-use-instead-of-PYTHON.patch
deleted file mode 100644
index 06eb2bd35b..0000000000
--- a/meta/recipes-devtools/python/python3/0001-main.c-if-OEPYTHON3HOME-is-set-use-instead-of-PYTHON.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-From ffe7797637f08cd6ee4c82e2d67462c5e194d30a Mon Sep 17 00:00:00 2001
-From: Jaewon Lee <jaewon.lee@xilinx.com>
-Date: Thu, 25 Apr 2019 15:34:26 -0700
-Subject: [PATCH] main.c: if OEPYTHON3HOME is set use instead of PYTHONHOME
-
-There is one variable PYTHONHOME to determine where libraries are coming
-from for both python2 and python3. This becomes an issue if only one has
-libraries in the specified PYTHONHOME path, but they are using the same
-PYTHONHOME. Creating another variable OEPYTHON3HOME to allow for a way
-to set a different path for python3
-
-Signed-off-by: Jaewon Lee <jaewon.lee@xilinx.com>
----
- Modules/main.c | 17 +++++++++++++----
- 1 file changed, 13 insertions(+), 4 deletions(-)
-
-diff --git a/Modules/main.c b/Modules/main.c
-index a745381..b553e30 100644
---- a/Modules/main.c
-+++ b/Modules/main.c
-@@ -1855,10 +1855,19 @@ config_init_home(_PyCoreConfig *config)
- }
- return _Py_INIT_OK();
- }
--
-- int res = config_get_env_var_dup(&home, L"PYTHONHOME", "PYTHONHOME");
-- if (res < 0) {
-- return DECODE_LOCALE_ERR("PYTHONHOME", res);
-+ int res;
-+ const char *oepython3home = config_get_env_var("OEPYTHON3HOME");
-+ if (oepython3home) {
-+ res = config_get_env_var_dup(&home, L"OEPYTHON3HOME", "OEPYTHON3HOME");
-+ if (res < 0) {
-+ return DECODE_LOCALE_ERR("OEPYTHON3HOME", res);
-+ }
-+ }
-+ else {
-+ res = config_get_env_var_dup(&home, L"PYTHONHOME", "PYTHONHOME");
-+ if (res < 0) {
-+ return DECODE_LOCALE_ERR("PYTHONHOME", res);
-+ }
- }
- config->home = home;
- return _Py_INIT_OK();
---
-2.7.4
-
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..bbeabe4389 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 ababc7b1db8c406910766e11cdd04cbef7a706c9 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
@@ -14,7 +14,7 @@ x86_64-wrs-linux-gcc: error: unrecognized command line option '-fp-model'
Here use cc_basename to replace CC for checking compiler to avoid such
kind of issue.
-Upstream-Status: Pending
+Upstream-Status: Submitted [https://github.com/python/cpython/pull/96399]
Signed-off-by: Li Zhou <li.zhou@windriver.com>
@@ -26,27 +26,27 @@ Signed-off-by: Changqing Li <changqing.li@windriver.com>
1 file changed, 10 insertions(+), 9 deletions(-)
diff --git a/configure.ac b/configure.ac
-index a7de901..4a3681f 100644
+index 384718d..5a1d58b 100644
--- a/configure.ac
+++ b/configure.ac
-@@ -54,6 +54,7 @@ AC_CONFIG_HEADER(pyconfig.h)
+@@ -137,6 +137,7 @@ AC_CONFIG_HEADERS([pyconfig.h])
AC_CANONICAL_HOST
- AC_SUBST(build)
- AC_SUBST(host)
+ AC_SUBST([build])
+ AC_SUBST([host])
+LT_INIT
- # 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)
+ AS_VAR_IF([cross_compiling], [maybe],
+ [AC_MSG_ERROR([Cross compiling required --host=HOST-TUPLE and --build=ARCH])]
+@@ -896,7 +897,7 @@ AC_SUBST([CXX])
preset_cxx="$CXX"
if test -z "$CXX"
then
- case "$CC" in
+ case "$cc_basename" in
- 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
+ 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]) ;;
+@@ -1328,7 +1329,7 @@ rmdir CaseSensitiveTestDir
case $ac_sys_system in
hp*|HP*)
@@ -55,16 +55,16 @@ index a7de901..4a3681f 100644
cc|*/cc) CC="$CC -Ae";;
esac;;
esac
-@@ -1336,7 +1337,7 @@ else
- fi],
- [AC_MSG_RESULT(no)])
+@@ -1854,7 +1855,7 @@ esac
+ ],
+ [AC_MSG_RESULT([no])])
if test "$Py_LTO" = 'true' ; then
- case $CC in
+ case $cc_basename in
*clang*)
- AC_SUBST(LLVM_AR)
- AC_PATH_TARGET_TOOL(LLVM_AR, llvm-ar, '', ${llvm_path})
-@@ -1426,7 +1427,7 @@ then
+ LDFLAGS_NOLTO="-fno-lto"
+ dnl Clang linker requires -flto in order to link objects with LTO information.
+@@ -1983,7 +1984,7 @@ then
fi
fi
LLVM_PROF_ERR=no
@@ -73,34 +73,34 @@ 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
+@@ -2147,7 +2148,7 @@ AC_MSG_RESULT([$BOLT_APPLY_FLAGS])
+ # 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
+ ;;
+@@ -2419,7 +2420,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?
-- case "$CC" in
-+ case "$cc_basename" in
- *icc*)
- ac_cv_disable_unused_result_warning=no
+- AS_CASE([$CC],
++ AS_CASE([$cc_basename],
+ [*icc*], [ac_cv_disable_unused_result_warning=no]
+ [PY_CHECK_CC_WARNING([disable], [unused-result])])
+ AS_VAR_IF([ac_cv_disable_unused_result_warning], [yes],
+@@ -2665,7 +2666,7 @@ yes)
;;
-@@ -1965,7 +1966,7 @@ yes)
esac
- # ICC needs -fp-model strict or floats behave badly
-case "$CC" in
+case "$cc_basename" in
- *icc*)
- CFLAGS_NODIST="$CFLAGS_NODIST -fp-model strict"
+ *mpicc*)
+ CFLAGS_NODIST="$CFLAGS_NODIST"
;;
-@@ -2727,7 +2728,7 @@ then
+@@ -3482,7 +3483,7 @@ then
then
LINKFORSHARED="-Wl,--export-dynamic"
fi;;
@@ -109,12 +109,12 @@ 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
+@@ -6803,7 +6804,7 @@ if test "$ac_cv_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
- case $CC in
+ case $cc_basename in
*gcc*)
- AC_MSG_CHECKING(for gcc ipa-pure-const bug)
+ AC_MSG_CHECKING([for gcc ipa-pure-const bug])
saved_cflags="$CFLAGS"
diff --git a/meta/recipes-devtools/python/python3/0001-skip-no_stdout_fileno-test-due-to-load-variability.patch b/meta/recipes-devtools/python/python3/0001-skip-no_stdout_fileno-test-due-to-load-variability.patch
new file mode 100644
index 0000000000..2d7bca6a77
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/0001-skip-no_stdout_fileno-test-due-to-load-variability.patch
@@ -0,0 +1,29 @@
+From 217cea231462e7703e8c9ea39c0a6833f799a420 Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Fri, 15 Sep 2023 08:48:33 -0400
+Subject: [PATCH] skip no_stdout_fileno test due to load variability
+
+Skip test_input_no_stdout_fileno so that it doesn't fail on systems
+under heavy load.
+
+Upstream-Status: Inappropriate [OE-Specific]
+
+[YOCTO #15210]
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ Lib/test/test_builtin.py | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py
+index 4d03c46..b329b7a 100644
+--- a/Lib/test/test_builtin.py
++++ b/Lib/test/test_builtin.py
+@@ -2326,6 +2326,7 @@ class PtyTests(unittest.TestCase):
+ # Check stdin/stdout error handler is used when invoking PyOS_Readline()
+ self.check_input_tty("prompté", b"quux\xe9", "ascii")
+
++ @unittest.skip("Test may fail under heavy load")
+ def test_input_no_stdout_fileno(self):
+ # Issue #24402: If stdin is the original terminal but stdout.fileno()
+ # fails, do not use the original stdout file descriptor
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..fc52fdac26
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/0001-sysconfig.py-use-platlibdir-also-for-purelib.patch
@@ -0,0 +1,28 @@
+From a5d429a0e1a4809c1ded7be7e45dcabeb82c53d8 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 122d441..79c0510 100644
+--- a/Lib/sysconfig.py
++++ b/Lib/sysconfig.py
+@@ -28,7 +28,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..b4fe946cba
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/0001-test_ctypes.test_find-skip-without-tools-sdk.patch
@@ -0,0 +1,34 @@
+From b64c131a576a4b4f821514e711ab91b1394fb4ff 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.orling@intel.com>
+
+---
+ Lib/test/test_ctypes/test_find.py | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/Lib/test/test_ctypes/test_find.py b/Lib/test/test_ctypes/test_find.py
+index 1ff9d01..59def26 100644
+--- a/Lib/test/test_ctypes/test_find.py
++++ b/Lib/test/test_ctypes/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..410a9fc7f1
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/0001-test_locale.py-correct-the-test-output-format.patch
@@ -0,0 +1,46 @@
+From ef5728f0af14da5c9f80b0f038fe5bf6d44cb0e9 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 b0d7998..cb12153 100644
+--- a/Lib/test/test_locale.py
++++ b/Lib/test/test_locale.py
+@@ -557,7 +557,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/0001-test_storlines-skip-due-to-load-variability.patch b/meta/recipes-devtools/python/python3/0001-test_storlines-skip-due-to-load-variability.patch
new file mode 100644
index 0000000000..0d0eb08459
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/0001-test_storlines-skip-due-to-load-variability.patch
@@ -0,0 +1,30 @@
+From dc69a1afdb3ba619705ff71e14f19ed3142e422f Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Fri, 6 Oct 2023 10:59:44 -0400
+Subject: [PATCH] test_storlines: skip due to load variability
+
+This is yet another test that intermittently fails on the Yocto AB when
+a worker is under heavy load, so skip it during testing.
+
+Upstream-Status: Inappropriate [OE-Specific]
+
+[YOCTO #14933]
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+
+---
+ Lib/test/test_ftplib.py | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/Lib/test/test_ftplib.py b/Lib/test/test_ftplib.py
+index 2f191ea..dc29346 100644
+--- a/Lib/test/test_ftplib.py
++++ b/Lib/test/test_ftplib.py
+@@ -626,6 +626,7 @@ class TestFTPClass(TestCase):
+ self.client.storbinary('stor', f, rest=r)
+ self.assertEqual(self.server.handler_instance.rest, str(r))
+
++ @unittest.skip('timing related test, dependent on load')
+ def test_storlines(self):
+ data = RETR_DATA.replace('\r\n', '\n').encode(self.client.encoding)
+ f = io.BytesIO(data)
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/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..0661249bfd
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/0020-configure.ac-setup.py-do-not-add-a-curses-include-pa.patch
@@ -0,0 +1,33 @@
+From d0205c60d08f51d84bd8ddc07a57e8c71710fdad Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex@linutronix.de>
+Date: Fri, 17 Nov 2023 14:16:40 +0100
+Subject: [PATCH] configure.ac: 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 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index c49cd4f..affdedf 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -6508,12 +6508,6 @@ AS_VAR_IF([have_panel], [no], [
+ AC_MSG_RESULT([$have_panel (CFLAGS: $PANEL_CFLAGS, LIBS: $PANEL_LIBS)])
+ ])
+
+-# first curses header check
+-ac_save_cppflags="$CPPFLAGS"
+-if test "$cross_compiling" = no; then
+- CPPFLAGS="$CPPFLAGS -I/usr/include/ncursesw"
+-fi
+-
+ # On Solaris, term.h requires curses.h
+ AC_CHECK_HEADERS([term.h], [], [], [
+ #ifdef HAVE_CURSES_H
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
deleted file mode 100644
index dcc0932c7f..0000000000
--- a/meta/recipes-devtools/python/python3/12-distutils-prefix-is-inside-staging-area.patch
+++ /dev/null
@@ -1,54 +0,0 @@
-From 1397979ee445ff6826aa5469511e003539f77bb2 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
-
-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>
-
----
- Lib/distutils/sysconfig.py | 10 ++++++++--
- 1 file changed, 8 insertions(+), 2 deletions(-)
-
-diff --git a/Lib/distutils/sysconfig.py b/Lib/distutils/sysconfig.py
-index 6b8c129..3ca7f79 100644
---- a/Lib/distutils/sysconfig.py
-+++ b/Lib/distutils/sysconfig.py
-@@ -84,7 +84,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'] != "":
-+ 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):
- 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'] != "":
-+ prefix = os.environ['STAGING_LIBDIR'].rstrip(lib_basename)
-+
- if 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())
- 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
deleted file mode 100644
index 24e67b4ca1..0000000000
--- a/meta/recipes-devtools/python/python3/avoid_warning_about_tkinter.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From fead48c8b501a8d7c3db21df2e599f90f38f11d3 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
- integrated in yocto so we skip the check for this module. Avoid a warning by
- not adding this module to missing variable.
-
-Upstream-Status: Inappropriate [distribution]
-
-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(-)
-
-diff --git a/setup.py b/setup.py
-index fbec00d..b7a36a6 100644
---- a/setup.py
-+++ b/setup.py
-@@ -1623,10 +1623,12 @@ class PyBuildExt(build_ext):
- self.extensions.extend(exts)
-
- # 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"])
diff --git a/meta/recipes-devtools/python/python3/cgi_py.patch b/meta/recipes-devtools/python/python3/cgi_py.patch
index 6c4ba54320..8262c88e73 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 a56778372fe8dc7c42f5ffd911d89498c22dd064 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 8787567..ebe8652 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..2c4aef0511
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/crosspythonpath.patch
@@ -0,0 +1,34 @@
+From 5b66463c10fec1440e977d5a21a0167862d6d79c 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 cb9e198..d81c19a 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -165,7 +165,7 @@ AC_ARG_WITH([build-python],
+ dnl Build Python interpreter is used for regeneration and freezing.
+ ac_cv_prog_PYTHON_FOR_REGEN=$with_build_python
+ PYTHON_FOR_FREEZE="$with_build_python"
+- 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) '$with_build_python
++ 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) '$with_build_python
+ AC_MSG_RESULT([$with_build_python])
+ ], [
+ AS_VAR_IF([cross_compiling], [yes],
diff --git a/meta/recipes-devtools/python/python3/deterministic_imports.patch b/meta/recipes-devtools/python/python3/deterministic_imports.patch
new file mode 100644
index 0000000000..104df94964
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/deterministic_imports.patch
@@ -0,0 +1,40 @@
+From 039d5e652796b55f1132afa568c7432b6ed89afd Mon Sep 17 00:00:00 2001
+From: Richard Purdie <richard.purdie@linuxfoundation.org>
+Date: Fri, 27 May 2022 17:05:44 +0100
+Subject: [PATCH] python3: Ensure stale empty python module directories don't
+
+There are two issues here. Firstly, the modules are accessed in on disk order. This
+means behaviour seen on one system might not reproduce on another and is a real headache.
+
+Secondly, empty directories left behind by previous modules might be looked at. This
+has caused a long string of different issues for us.
+
+As a result, patch this to a behaviour which works for us.
+
+Upstream-Status: Pending [need to talk to upstream to see if they'll take one or both fixes]
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+
+---
+ Lib/importlib/metadata/__init__.py | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+diff --git a/Lib/importlib/metadata/__init__.py b/Lib/importlib/metadata/__init__.py
+index 82e0ce1..969cac4 100644
+--- a/Lib/importlib/metadata/__init__.py
++++ b/Lib/importlib/metadata/__init__.py
+@@ -710,7 +710,14 @@ class Lookup:
+ self.infos = FreezableDefaultDict(list)
+ self.eggs = FreezableDefaultDict(list)
+
+- for child in path.children():
++ for child in sorted(path.children()):
++ childpath = pathlib.Path(path.root, child)
++ try:
++ if childpath.is_dir() and not any(childpath.iterdir()):
++ # Empty directories aren't interesting
++ continue
++ except PermissionError:
++ continue
+ low = child.lower()
+ if low.endswith((".dist-info", ".egg-info")):
+ # rpartition is faster than splitext and suitable for this purpose.
diff --git a/meta/recipes-devtools/python/python3/get_module_deps3.py b/meta/recipes-devtools/python/python3/get_module_deps3.py
index fd12baad84..8e432b49af 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,16 +23,16 @@ 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}')
+ dep_path = dep_path.replace('/usr/bin','${bindir}')
# Handle multilib, is there a better way?
if '/usr/lib32' in dep_path:
@@ -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 hasattr(m, '__file__') and 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..c1b20703e6
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/makerace.patch
@@ -0,0 +1,31 @@
+From 9f827c29adbe656af3c8fc963fdd8f47aec0c442 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 381feb0..77bf09a 100644
+--- a/Makefile.pre.in
++++ b/Makefile.pre.in
+@@ -2250,7 +2250,7 @@ COMPILEALL_OPTS=-j0
+ TEST_MODULES=@TEST_MODULES@
+
+ .PHONY: libinstall
+-libinstall: all $(srcdir)/Modules/xxmodule.c
++libinstall: 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
deleted file mode 100644
index f23b8b7df0..0000000000
--- a/meta/recipes-devtools/python/python3/python-config.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-python-config: Revert to using distutils.sysconfig
-
-The newer sysconfig module shares some code with distutils.sysconfig, but the same modifications as in
-
-12-distutils-prefix-is-inside-staging-area.patch makes distutils.sysconfig
-
-affect the native runtime as well as cross building. Use the old, patched
-implementation which returns paths in the staging directory and for the target,
-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 @@
- import getopt
- import os
- import sys
--import sysconfig
-+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:
-
- for opt in opt_flags:
- if opt == '--prefix':
-- print(sysconfig.get_config_var('prefix'))
-+ print(sysconfig.PREFIX)
-
- elif opt == '--exec-prefix':
-- print(sysconfig.get_config_var('exec_prefix'))
-+ print(sysconfig.EXEC_PREFIX)
-
- elif opt in ('--includes', '--cflags'):
-- flags = ['-I' + sysconfig.get_path('include'),
-- '-I' + sysconfig.get_path('platinclude')]
-+ flags = ['-I' + sysconfig.get_python_inc(),
-+ '-I' + sysconfig.get_python_inc(plat_specific=True)]
- if opt == '--cflags':
- flags.extend(getvar('CFLAGS').split())
- print(' '.join(flags))
diff --git a/meta/recipes-devtools/python/python3/python3-manifest.json b/meta/recipes-devtools/python/python3/python3-manifest.json
index 0a4ab2cbe4..46092d4004 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",
@@ -152,6 +152,23 @@
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/wave.*.pyc"
]
},
+ "cgitb": {
+ "summary": "Special exception handler for Python scripts",
+ "rdepends": [
+ "core",
+ "crypt",
+ "html",
+ "io",
+ "math",
+ "pydoc"
+ ],
+ "files": [
+ "${libdir}/python${PYTHON_MAJMIN}/cgitb.py"
+ ],
+ "cached": [
+ "${libdir}/python${PYTHON_MAJMIN}/__pycache__/cgitb.*.pyc"
+ ]
+ },
"codecs": {
"summary": "Python codec",
"rdepends": [
@@ -172,47 +189,39 @@
],
"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"
+ "${libdir}/python${PYTHON_MAJMIN}/zipfile",
+ "${libdir}/python${PYTHON_MAJMIN}/zipfile/_path"
],
"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"
+ "${libdir}/python${PYTHON_MAJMIN}/__pycache__/tarfile.*.pyc"
]
},
"core": {
"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 +229,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 +238,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",
@@ -238,12 +249,14 @@
"${libdir}/python${PYTHON_MAJMIN}/copy.py",
"${libdir}/python${PYTHON_MAJMIN}/copyreg.py",
"${libdir}/python${PYTHON_MAJMIN}/csv.py",
+ "${libdir}/python${PYTHON_MAJMIN}/dataclasses.py",
"${libdir}/python${PYTHON_MAJMIN}/dis.py",
"${libdir}/python${PYTHON_MAJMIN}/encodings",
"${libdir}/python${PYTHON_MAJMIN}/encodings/aliases.py",
"${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",
@@ -251,6 +264,7 @@
"${libdir}/python${PYTHON_MAJMIN}/heapq.py",
"${libdir}/python${PYTHON_MAJMIN}/imp.py",
"${libdir}/python${PYTHON_MAJMIN}/importlib",
+ "${libdir}/python${PYTHON_MAJMIN}/importlib/_abc.py",
"${libdir}/python${PYTHON_MAJMIN}/importlib/_bootstrap.py",
"${libdir}/python${PYTHON_MAJMIN}/importlib/_bootstrap_external.py",
"${libdir}/python${PYTHON_MAJMIN}/importlib/abc.py",
@@ -258,19 +272,24 @@
"${libdir}/python${PYTHON_MAJMIN}/importlib/util.py",
"${libdir}/python${PYTHON_MAJMIN}/inspect.py",
"${libdir}/python${PYTHON_MAJMIN}/io.py",
+ "${libdir}/python${PYTHON_MAJMIN}/ipaddress.py",
"${libdir}/python${PYTHON_MAJMIN}/keyword.py",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/__pycache__/_struct.*.so",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/__pycache__/binascii.*.so",
"${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/_typing.*.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 +297,30 @@
"${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}/re",
+ "${libdir}/python${PYTHON_MAJMIN}/re/_casefix.py",
+ "${libdir}/python${PYTHON_MAJMIN}/re/_compiler.py",
+ "${libdir}/python${PYTHON_MAJMIN}/re/_constants.py",
+ "${libdir}/python${PYTHON_MAJMIN}/re/_parser.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 +339,28 @@
"${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",
+ "${libdir}/python${PYTHON_MAJMIN}/zipimport.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",
@@ -332,8 +369,10 @@
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/copy.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/copyreg.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/csv.*.pyc",
+ "${libdir}/python${PYTHON_MAJMIN}/__pycache__/dataclasses.*.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",
@@ -342,19 +381,26 @@
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/imp.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/inspect.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/io.*.pyc",
+ "${libdir}/python${PYTHON_MAJMIN}/__pycache__/ipaddress.*.pyc",
"${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 +418,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__",
@@ -381,9 +428,17 @@
"${libdir}/python${PYTHON_MAJMIN}/encodings/__pycache__/latin_1.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/encodings/__pycache__/utf_8.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/importlib/__pycache__",
+ "${libdir}/python${PYTHON_MAJMIN}/importlib/__pycache__/_abc.*.pyc",
"${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}/re/__pycache__",
+ "${libdir}/python${PYTHON_MAJMIN}/re/__pycache__/_casefix.*.pyc",
+ "${libdir}/python${PYTHON_MAJMIN}/re/__pycache__/_compiler.*.pyc",
+ "${libdir}/python${PYTHON_MAJMIN}/re/__pycache__/_constants.*.pyc",
+ "${libdir}/python${PYTHON_MAJMIN}/re/__pycache__/_parser.*.pyc",
+ "${libdir}/python${PYTHON_MAJMIN}/urllib/__pycache__",
+ "${libdir}/python${PYTHON_MAJMIN}/urllib/__pycache__/parse.*.pyc"
]
},
"crypt": {
@@ -399,11 +454,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/_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"
+ "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_sha1.*.so",
+ "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_sha2.*.so",
+ "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_sha3.*.so"
],
"cached": [
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/crypt.*.pyc",
@@ -413,7 +467,10 @@
"ctypes": {
"summary": "Python C types support",
"rdepends": [
- "core"
+ "core",
+ "crypt",
+ "io",
+ "math"
],
"files": [
"${libdir}/python${PYTHON_MAJMIN}/ctypes",
@@ -484,7 +541,7 @@
"files": [
"${base_libdir}/*.a",
"${base_libdir}/*.o",
- "${bindir}/python*-config",
+ "${bindir}/python*-config*",
"${datadir}/aclocal",
"${datadir}/pkgconfig",
"${includedir}",
@@ -511,35 +568,12 @@
"${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"
- ],
- "rdepends": [
- "distutils"
- ],
- "summary": "Python distribution utilities (static libraries)"
- },
- "distutils": {
- "summary": "Python Distribution Utilities",
- "rdepends": [
- "core"
- ],
- "files": [
- "${libdir}/python${PYTHON_MAJMIN}/distutils"
- ],
- "cached": []
- },
"doctest": {
"summary": "Python framework for running examples in docstrings",
"rdepends": [
"core",
"debugger",
"difflib",
- "logging",
"pprint",
"shell",
"stringold",
@@ -560,7 +594,9 @@
"datetime",
"io",
"math",
- "netclient"
+ "mime",
+ "netclient",
+ "stringold"
],
"files": [
"${libdir}/python${PYTHON_MAJMIN}/email",
@@ -570,6 +606,16 @@
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/imaplib.*.pyc"
]
},
+ "ensurepip": {
+ "summary": "Support for bootstrapping the pip installer",
+ "rdepends": [
+ "core"
+ ],
+ "files": [
+ "${libdir}/python${PYTHON_MAJMIN}/ensurepip/"
+ ],
+ "cached": []
+ },
"fcntl": {
"summary": "Python's fcntl interface",
"rdepends": [
@@ -596,12 +642,9 @@
"core"
],
"files": [
- "${libdir}/python${PYTHON_MAJMIN}/formatter.py",
"${libdir}/python${PYTHON_MAJMIN}/html"
],
- "cached": [
- "${libdir}/python${PYTHON_MAJMIN}/__pycache__/formatter.*.pyc"
- ]
+ "cached": []
},
"idle": {
"summary": "Python Integrated Development Environment",
@@ -631,17 +674,14 @@
"io": {
"summary": "Python low-level I/O",
"rdepends": [
- "compression",
"core",
"crypt",
"math",
"netclient",
- "shell",
- "unixadmin"
+ "shell"
],
"files": [
"${libdir}/python${PYTHON_MAJMIN}/_pyio.py",
- "${libdir}/python${PYTHON_MAJMIN}/ipaddress.py",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_socket.*.so",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_ssl.*.so",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/termios.*.so",
@@ -652,7 +692,6 @@
],
"cached": [
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/_pyio.*.pyc",
- "${libdir}/python${PYTHON_MAJMIN}/__pycache__/ipaddress.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/pipes.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/socket.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/ssl.*.pyc",
@@ -674,7 +713,11 @@
"summary": "Python logging support",
"rdepends": [
"core",
- "stringold"
+ "io",
+ "netserver",
+ "pickle",
+ "stringold",
+ "threading"
],
"files": [
"${libdir}/python${PYTHON_MAJMIN}/logging"
@@ -688,7 +731,6 @@
"crypt",
"datetime",
"email",
- "fcntl",
"io",
"math",
"mime",
@@ -759,9 +801,9 @@
"db",
"debugger",
"difflib",
- "distutils",
"doctest",
"email",
+ "ensurepip",
"fcntl",
"html",
"idle",
@@ -784,21 +826,21 @@
"profile",
"pydoc",
"resource",
- "runpy",
"shell",
- "smtpd",
"sqlite3",
+ "statistics",
"stringold",
"syslog",
"terminal",
"threading",
"tkinter",
- "typing",
+ "tomllib",
"unittest",
"unixadmin",
"venv",
"xml",
- "xmlrpc"
+ "xmlrpc",
+ "zoneinfo"
],
"summary": "All Python modules"
},
@@ -806,11 +848,18 @@
"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 +886,10 @@
"${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 +899,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 +908,6 @@
"netserver": {
"summary": "Python Internet Protocol servers",
"rdepends": [
- "compression",
"core",
"crypt",
"datetime",
@@ -868,9 +917,7 @@
"math",
"mime",
"netclient",
- "shell",
- "stringold",
- "unixadmin"
+ "stringold"
],
"files": [
"${libdir}/python${PYTHON_MAJMIN}/cgi.py",
@@ -927,12 +974,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",
@@ -980,9 +1023,7 @@
"pydoc": {
"summary": "Python interactive help support",
"rdepends": [
- "core",
- "netclient",
- "pkgutil"
+ "core"
],
"files": [
"${bindir}/pydoc*",
@@ -1003,65 +1044,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"
- ]
- },
- "smtpd": {
- "summary": "Python Simple Mail Transport Daemon",
- "rdepends": [
- "core",
- "crypt",
- "datetime",
- "email",
- "io",
- "math",
- "mime",
- "netclient",
- "stringold"
- ],
- "files": [
- "${bindir}/smtpd.py",
- "${libdir}/python${PYTHON_MAJMIN}/asynchat.py",
- "${libdir}/python${PYTHON_MAJMIN}/asyncore.py",
- "${libdir}/python${PYTHON_MAJMIN}/smtpd.py"
- ],
- "cached": [
- "${libdir}/python${PYTHON_MAJMIN}/__pycache__/asynchat.*.pyc",
- "${libdir}/python${PYTHON_MAJMIN}/__pycache__/asyncore.*.pyc",
- "${libdir}/python${PYTHON_MAJMIN}/__pycache__/smtpd.*.pyc"
+ "${libdir}/python${PYTHON_MAJMIN}/__pycache__/shlex.*.pyc"
]
},
"sqlite3": {
@@ -1076,6 +1073,22 @@
],
"cached": []
},
+ "statistics": {
+ "summary": "Basic statistics module",
+ "rdepends": [
+ "core",
+ "crypt",
+ "math",
+ "numbers"
+ ],
+ "files": [
+ "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_statistics.*.so",
+ "${libdir}/python${PYTHON_MAJMIN}/statistics.py"
+ ],
+ "cached": [
+ "${libdir}/python${PYTHON_MAJMIN}/__pycache__/statistics.*.pyc"
+ ]
+ },
"stringold": {
"summary": "Python string APIs [deprecated]",
"rdepends": [
@@ -1119,13 +1132,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"
]
@@ -1141,26 +1152,39 @@
],
"cached": []
},
- "typing": {
- "summary": "Python typing support",
+ "tomllib": {
+ "summary": "Provides an interface for parsing TOML",
"rdepends": [
"core"
],
"files": [
- "${libdir}/python${PYTHON_MAJMIN}/typing.py"
+ "${libdir}/python${PYTHON_MAJMIN}/tomllib/"
+ ],
+ "cached": []
+ },
+ "turtle": {
+ "summary": "Turtle graphics is a popular way for introducing programming to kids.",
+ "rdepends": [
+ "tkinter"
+ ],
+ "files": [
+ "${libdir}/python${PYTHON_MAJMIN}/turtle.py"
],
"cached": [
- "${libdir}/python${PYTHON_MAJMIN}/__pycache__/typing.*.pyc"
+ "${libdir}/python${PYTHON_MAJMIN}/__pycache__/turtle.*.pyc"
]
- },
+ },
"unittest": {
"summary": "Python unit testing framework",
"rdepends": [
+ "asyncio",
"core",
"difflib",
+ "io",
"logging",
+ "netclient",
+ "numbers",
"pprint",
- "shell",
"stringold"
],
"files": [
@@ -1178,7 +1202,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 +1211,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 +1236,20 @@
"xmlrpc": {
"summary": "Python XML-RPC support",
"rdepends": [
+ "compression",
"core",
+ "crypt",
+ "datetime",
+ "email",
+ "html",
+ "io",
+ "math",
+ "mime",
+ "netclient",
+ "netserver",
+ "numbers",
+ "pydoc",
+ "stringold",
"xml"
],
"files": [
@@ -1224,5 +1257,30 @@
"${libdir}/python${PYTHON_MAJMIN}/xmlrpc/__pycache__"
],
"cached": []
+ },
+ "zipapp": {
+ "summary": "Tools to manage the creation of zip files containing Python code",
+ "rdepends": [
+ "compression",
+ "core"
+ ],
+ "files": [
+ "${libdir}/python${PYTHON_MAJMIN}/zipapp.py"
+ ],
+ "cached": [
+ "${libdir}/python${PYTHON_MAJMIN}/__pycache__/zipapp.*.pyc"
+ ]
+ },
+ "zoneinfo": {
+ "summary": "IANA time zone support",
+ "rdepends": [
+ "core",
+ "datetime"
+ ],
+ "files": [
+ "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_zoneinfo.*.so",
+ "${libdir}/python${PYTHON_MAJMIN}/zoneinfo"
+ ],
+ "cached": []
}
}
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 3e45d3918c..d1c26c11e2 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 -u -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'
+SKIPPED_TESTS=
+{ SETUPTOOLS_USE_DISTUTILS=nonlocal python3 -m test $SKIPPED_TESTS -v -j 4 || echo "FAIL: python3" ; } | 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'
diff --git a/meta/recipes-devtools/python/python3_3.12.3.bb b/meta/recipes-devtools/python/python3_3.12.3.bb
new file mode 100644
index 0000000000..b49a58a101
--- /dev/null
+++ b/meta/recipes-devtools/python/python3_3.12.3.bb
@@ -0,0 +1,470 @@
+SUMMARY = "The Python Programming Language"
+HOMEPAGE = "http://www.python.org"
+DESCRIPTION = "Python is a programming language that lets you work more quickly and integrate your systems more effectively."
+LICENSE = "PSF-2.0"
+SECTION = "devel/python"
+
+LIC_FILES_CHKSUM = "file://LICENSE;md5=fcf6b249c2641540219a727f35d8d2c2"
+
+SRC_URI = "http://www.python.org/ftp/python/${PV}/Python-${PV}.tar.xz \
+ file://run-ptest \
+ file://create_manifest3.py \
+ file://get_module_deps3.py \
+ file://python3-manifest.json \
+ file://check_build_completeness.py \
+ file://reformat_sysconfig.py \
+ file://cgi_py.patch \
+ file://0001-Makefile.pre-use-qemu-wrapper-when-gathering-profile.patch \
+ file://0001-python3-use-cc_basename-to-replace-CC-for-checking-c.patch \
+ file://crosspythonpath.patch \
+ file://0001-test_locale.py-correct-the-test-output-format.patch \
+ file://0020-configure.ac-setup.py-do-not-add-a-curses-include-pa.patch \
+ file://0001-Skip-failing-tests-due-to-load-variability-on-YP-AB.patch \
+ file://0001-test_ctypes.test_find-skip-without-tools-sdk.patch \
+ file://makerace.patch \
+ file://0001-sysconfig.py-use-platlibdir-also-for-purelib.patch \
+ file://0001-Lib-pty.py-handle-stdin-I-O-errors-same-way-as-maste.patch \
+ file://deterministic_imports.patch \
+ file://0001-Avoid-shebang-overflow-on-python-config.py.patch \
+ file://0001-Update-test_sysconfig-for-posix_user-purelib.patch \
+ file://0001-skip-no_stdout_fileno-test-due-to-load-variability.patch \
+ file://0001-test_storlines-skip-due-to-load-variability.patch \
+ file://0001-gh-114492-Initialize-struct-termios-before-calling-t.patch \
+ "
+
+SRC_URI:append:class-native = " \
+ file://0001-Lib-sysconfig.py-use-prefix-value-from-build-configu.patch \
+ "
+
+SRC_URI[sha256sum] = "56bfef1fdfc1221ce6720e43a661e3eb41785dd914ce99698d8c7896af4bdaa1"
+
+# exclude pre-releases for both python 2.x and 3.x
+UPSTREAM_CHECK_REGEX = "[Pp]ython-(?P<pver>\d+(\.\d+)+).tar"
+
+CVE_PRODUCT = "python cpython"
+
+CVE_STATUS[CVE-2007-4559] = "disputed: Upstream consider this expected behaviour"
+CVE_STATUS[CVE-2019-18348] = "not-applicable-config: This is not exploitable when glibc has CVE-2016-10739 fixed"
+CVE_STATUS[CVE-2020-15523] = "not-applicable-platform: Issue only applies on Windows"
+CVE_STATUS[CVE-2022-26488] = "not-applicable-platform: Issue only applies on Windows"
+# The module will be removed in the future and flaws documented.
+CVE_STATUS[CVE-2015-20107] = "upstream-wontfix: The mailcap module is insecure by design, so this can't be fixed in a meaningful way"
+CVE_STATUS[CVE-2023-36632] = "disputed: Not an issue, in fact expected behaviour"
+
+PYTHON_MAJMIN = "3.12"
+
+S = "${WORKDIR}/Python-${PV}"
+
+BBCLASSEXTEND = "native nativesdk"
+
+inherit autotools pkgconfig qemu ptest multilib_header update-alternatives
+
+MULTILIB_SUFFIX = "${@d.getVar('base_libdir',1).split('/')[-1]}"
+
+ALTERNATIVE:${PN}-dev = "python3-config"
+ALTERNATIVE_LINK_NAME[python3-config] = "${bindir}/python${PYTHON_MAJMIN}-config"
+ALTERNATIVE_TARGET[python3-config] = "${bindir}/python${PYTHON_MAJMIN}-config-${MULTILIB_SUFFIX}"
+
+
+DEPENDS = "bzip2-replacement-native expat libffi bzip2 openssl sqlite3 zlib virtual/libintl xz virtual/crypt util-linux-libuuid libtirpc libnsl2 autoconf-archive-native ncurses"
+DEPENDS:append:class-target = " python3-native"
+DEPENDS:append:class-nativesdk = " python3-native"
+
+EXTRA_OECONF = " --without-ensurepip --enable-shared --with-platlibdir=${baselib} --with-system-expat"
+EXTRA_OECONF:append:class-native = " --bindir=${bindir}/${PN}"
+EXTRA_OECONF:append:class-target = " --with-build-python=nativepython3"
+EXTRA_OECONF:append:class-nativesdk = " --with-build-python=nativepython3"
+
+export CROSSPYTHONPATH="${STAGING_LIBDIR_NATIVE}/python${PYTHON_MAJMIN}/lib-dynload/"
+
+EXTRANATIVEPATH += "python3-native"
+
+# LTO will be enabled via packageconfig depending upong distro features
+LTO:class-target = ""
+
+CACHED_CONFIGUREVARS = " \
+ ac_cv_file__dev_ptmx=yes \
+ ac_cv_file__dev_ptc=no \
+ ac_cv_working_tzset=yes \
+"
+# set thread stack size to 2MB on musl for interpreter and stdlib C extensions
+# so it does not run into stack limits due to musl's small thread stack
+# This is only needed to build interpreter and not the subsequent modules
+# Thats why CFLAGS_NODIST is modified instead of CFLAGS
+CACHED_CONFIGUREVARS:append:libc-musl = "\
+ CFLAGS_NODIST='${CFLAGS} -DTHREAD_STACK_SIZE=0x200000' \
+"
+
+# PGO currently causes builds to not be reproducible so disable by default, see YOCTO #13407
+PACKAGECONFIG ??= "editline gdbm ${@bb.utils.filter('DISTRO_FEATURES', 'lto', d)}"
+PACKAGECONFIG[readline] = "--with-readline=readline,,readline,,,editline"
+PACKAGECONFIG[editline] = "--with-readline=editline,,libedit,,,readline"
+# Use profile guided optimisation by running PyBench inside qemu-user
+PACKAGECONFIG[pgo] = "--enable-optimizations,,qemu-native"
+PACKAGECONFIG[tk] = ",,tk"
+PACKAGECONFIG[tcl] = ",,tcl"
+PACKAGECONFIG[gdbm] = ",,gdbm"
+PACKAGECONFIG[lto] = "--with-lto,--without-lto"
+
+do_configure:prepend () {
+ mkdir -p ${B}/Modules
+ cat > ${B}/Modules/Setup.local << EOF
+*disabled*
+${@bb.utils.contains('PACKAGECONFIG', 'gdbm', '', '_gdbm _dbm', d)}
+${@bb.utils.contains_any('PACKAGECONFIG', 'readline editline', '', 'readline', d)}
+${@bb.utils.contains('PACKAGECONFIG', 'tk', '', '_tkinter', d)}
+EOF
+}
+
+CPPFLAGS:append = " -I${STAGING_INCDIR}/ncursesw -I${STAGING_INCDIR}/uuid"
+
+# COMPILEALL_OPTS= ensures that .pyc are not compiled 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/
+
+EXTRA_OEMAKE = '\
+ STAGING_LIBDIR=${STAGING_LIBDIR} \
+ STAGING_INCDIR=${STAGING_INCDIR} \
+ LIB=${baselib} \
+ COMPILEALL_OPTS= \
+'
+
+# Generate a Profile Guided Optimisation wrapper script that uses qemu-user for
+# all cross builds.
+write_pgo_wrapper:class-native = ":"
+write_pgo_wrapper() {
+ if ${@bb.utils.contains('PACKAGECONFIG', 'pgo', 'true', 'false', d)}; then
+ cat >pgo-wrapper <<EOF
+#!/bin/sh
+cd ${B}
+${@qemu_wrapper_cmdline(d, '${STAGING_DIR_TARGET}', ['${B}', '${STAGING_DIR_TARGET}/${base_libdir}'])} "\$@"
+EOF
+ chmod +x pgo-wrapper
+ fi
+}
+
+do_compile:prepend() {
+ write_pgo_wrapper
+}
+
+do_install:prepend() {
+ ${WORKDIR}/check_build_completeness.py ${T}/log.do_compile
+}
+
+do_install:append:class-target() {
+ oe_multilib_header python${PYTHON_MAJMIN}/pyconfig.h
+}
+
+do_install:append:class-native() {
+ # Make sure we use /usr/bin/env python
+ for PYTHSCRIPT in `grep -rIl ${bindir}/${PN}/python ${D}${bindir}/${PN}`; do
+ sed -i -e '1s|^#!.*|#!/usr/bin/env python3|' $PYTHSCRIPT
+ done
+ # Add a symlink to the native Python so that scripts can just invoke
+ # "nativepython" and get the right one without needing absolute paths
+ # (these often end up too long for the #! parser in the kernel as the
+ # buffer is 128 bytes long).
+ ln -s python3-native/python3 ${D}${bindir}/nativepython3
+
+ # Remove the opt-1.pyc and opt-2.pyc files. There are over 3,000 of them
+ # and the overhead in each recipe-sysroot-native isn't worth it, particularly
+ # when they're only used for python called with -O or -OO.
+ #find ${D} -name *opt-*.pyc -delete
+ # Remove all pyc files. There are a ton of them and it is probably faster to let
+ # python create the ones it wants at runtime rather than manage in the sstate
+ # tarballs and sysroot creation.
+ find ${D} -name *.pyc -delete
+
+ # Nothing should be looking into ${B} for python3-native
+ sed -i -e 's:${B}:/build/path/unavailable/:g' \
+ ${D}/${libdir}/python${PYTHON_MAJMIN}/config-${PYTHON_MAJMIN}${PYTHON_ABI}*/Makefile
+
+ # disable the lookup in user's site-packages globally
+ sed -i 's#ENABLE_USER_SITE = None#ENABLE_USER_SITE = False#' ${D}${libdir}/python${PYTHON_MAJMIN}/site.py
+
+ # python3-config needs to be in /usr/bin and not in a subdir of it to work properly
+ mv ${D}/${bindir}/${PN}/python*config ${D}/${bindir}/
+}
+
+do_install:append() {
+ for c in ${D}/${libdir}/python${PYTHON_MAJMIN}/_sysconfigdata*.py; do
+ python3 ${WORKDIR}/reformat_sysconfig.py $c
+ done
+ rm -f ${D}${libdir}/python${PYTHON_MAJMIN}/__pycache__/_sysconfigdata*.cpython*
+
+ mkdir -p ${D}${libdir}/python-sysconfigdata
+ sysconfigfile=`find ${D} -name _sysconfig*.py`
+ sed -i \
+ -e "s,^ 'LIBDIR'.*, 'LIBDIR': '${STAGING_LIBDIR}'\,,g" \
+ -e "s,^ 'INCLUDEDIR'.*, 'INCLUDEDIR': '${STAGING_INCDIR}'\,,g" \
+ -e "s,^ 'CONFINCLUDEDIR'.*, 'CONFINCLUDEDIR': '${STAGING_INCDIR}'\,,g" \
+ -e "s,^ 'INCLUDEPY'.*, 'INCLUDEPY': '${STAGING_INCDIR}/python${PYTHON_MAJMIN}'\,,g" \
+ -e "s,^ 'CONFINCLUDEPY'.*, 'CONFINCLUDEPY': '${STAGING_INCDIR}/python${PYTHON_MAJMIN}'\,,g" \
+ -e "s,${B},/build/path/unavailable/,g" \
+ $sysconfigfile
+ cp $sysconfigfile ${D}${libdir}/python-sysconfigdata/_sysconfigdata.py
+
+
+ # Unfortunately the following pyc files are non-deterministc due to 'frozenset'
+ # being written without strict ordering, even with PYTHONHASHSEED = 0
+ # Upstream is discussing ways to solve the issue properly, until then let's
+ # just not install the problematic files.
+ # More info: http://benno.id.au/blog/2013/01/15/python-determinism
+ rm -f ${D}${libdir}/python${PYTHON_MAJMIN}/test/__pycache__/test_range.cpython*
+ rm -f ${D}${libdir}/python${PYTHON_MAJMIN}/test/__pycache__/test_xml_etree.cpython*
+
+ # Similar to the above, we're getting reproducibility issues with
+ # /usr/lib/python3.10/__pycache__/traceback.cpython-310.pyc
+ # so remove it too
+ rm -f ${D}${libdir}/python${PYTHON_MAJMIN}/__pycache__/traceback.cpython*
+
+ # Remove the opt-1.pyc and opt-2.pyc files. They effectively waste space on embedded
+ # style targets as they're only used when python is called with the -O or -OO options
+ # which is rare.
+ find ${D} -name *opt-*.pyc -delete
+}
+
+do_install:append:class-nativesdk () {
+ # Make sure we use /usr/bin/env python
+ for PYTHSCRIPT in `grep -rIl ${bindir}/python ${D}${bindir}`; do
+ sed -i -e '1s|^#!.*|#!/usr/bin/env python3|' $PYTHSCRIPT
+ done
+ create_wrapper ${D}${bindir}/python${PYTHON_MAJMIN} TERMINFO_DIRS='${sysconfdir}/terminfo:/etc/terminfo:/usr/share/terminfo:/usr/share/misc/terminfo:/lib/terminfo' PYTHONNOUSERSITE='1'
+}
+
+do_install_ptest:append:class-target:libc-musl () {
+ sed -i -e 's|SKIPPED_TESTS=|SKIPPED_TESTS="-x test__locale -x test_c_locale_coercion -x test_locale -x test_os test_re -x test__xxsubinterpreters -x test_threading"|' ${D}${PTEST_PATH}/run-ptest
+}
+
+SYSROOT_PREPROCESS_FUNCS:append:class-target = " provide_target_config_script"
+SYSROOT_PREPROCESS_FUNCS:append:class-nativesdk = " provide_target_config_script"
+
+# This is installed into /usr/python-target-config/ and not /usr/bin
+# because adding target sysroot's /usr/bin/ to PATH has unwanted side effects
+# in components erroneously picking up other target executables from it
+provide_target_config_script() {
+ install -d ${SYSROOT_DESTDIR}${prefix}/python-target-config/
+ install ${D}/${bindir}/python3-config ${SYSROOT_DESTDIR}/${prefix}/python-target-config/
+ install ${D}/${bindir}/python${PYTHON_MAJMIN}-config ${SYSROOT_DESTDIR}/${prefix}/python-target-config/
+}
+SYSROOT_DIRS += "${prefix}/python-target-config/"
+
+SSTATE_SCAN_FILES += "Makefile _sysconfigdata.py"
+SSTATE_HASHEQUIV_FILEMAP = " \
+ populate_sysroot:*/lib*/python3*/_sysconfigdata*.py:${TMPDIR} \
+ populate_sysroot:*/lib*/python3*/_sysconfigdata*.py:${COREBASE} \
+ populate_sysroot:*/lib*/python3*/config-*/Makefile:${TMPDIR} \
+ populate_sysroot:*/lib*/python3*/config-*/Makefile:${COREBASE} \
+ populate_sysroot:*/lib*/python-sysconfigdata/_sysconfigdata.py:${TMPDIR} \
+ populate_sysroot:*/lib*/python-sysconfigdata/_sysconfigdata.py:${COREBASE} \
+ "
+PACKAGE_PREPROCESS_FUNCS += "py_package_preprocess"
+
+py_package_preprocess () {
+ # Remove references to buildmachine paths in target Makefile and _sysconfigdata
+ sed -i -e 's:--sysroot=${STAGING_DIR_TARGET}::g' -e s:'--with-libtool-sysroot=${STAGING_DIR_TARGET}'::g \
+ -e 's|${DEBUG_PREFIX_MAP}||g' \
+ -e 's:${HOSTTOOLS_DIR}/::g' \
+ -e 's:${RECIPE_SYSROOT_NATIVE}::g' \
+ -e 's:${RECIPE_SYSROOT}::g' \
+ -e 's:${BASE_WORKDIR}/${MULTIMACH_TARGET_SYS}::g' \
+ ${PKGD}/${libdir}/python${PYTHON_MAJMIN}/config-${PYTHON_MAJMIN}${PYTHON_ABI}*/Makefile \
+ ${PKGD}/${libdir}/python${PYTHON_MAJMIN}/_sysconfigdata*.py \
+ ${PKGD}/${bindir}/python${PYTHON_MAJMIN}-config
+
+ # Reformat _sysconfigdata after modifying it so that it remains
+ # reproducible
+ for c in ${PKGD}/${libdir}/python${PYTHON_MAJMIN}/_sysconfigdata*.py; do
+ python3 ${WORKDIR}/reformat_sysconfig.py $c
+ done
+
+ # Recompile _sysconfigdata after modifying it
+ cd ${PKGD}
+ sysconfigfile=`find . -name _sysconfigdata_*.py`
+ ${STAGING_BINDIR_NATIVE}/python3-native/python3 \
+ -c "from py_compile import compile; compile('$sysconfigfile')"
+ ${STAGING_BINDIR_NATIVE}/python3-native/python3 \
+ -c "from py_compile import compile; compile('$sysconfigfile', optimize=1)"
+ ${STAGING_BINDIR_NATIVE}/python3-native/python3 \
+ -c "from py_compile import compile; compile('$sysconfigfile', optimize=2)"
+ cd -
+
+ mv ${PKGD}/${bindir}/python${PYTHON_MAJMIN}-config ${PKGD}/${bindir}/python${PYTHON_MAJMIN}-config-${MULTILIB_SUFFIX}
+
+ #Remove the unneeded copy of target sysconfig data
+ rm -rf ${PKGD}/${libdir}/python-sysconfigdata
+}
+
+# We want bytecode precompiled .py files (.pyc's) by default
+# but the user may set it on their own conf
+INCLUDE_PYCS ?= "1"
+
+python(){
+ import collections, json
+
+ filename = os.path.join(d.getVar('THISDIR'), 'python3', 'python3-manifest.json')
+ # This python changes the datastore based on the contents of a file, so mark
+ # that dependency.
+ bb.parse.mark_dependency(d, filename)
+
+ with open(filename) as manifest_file:
+ manifest_str = manifest_file.read()
+ json_start = manifest_str.find('# EOC') + 6
+ manifest_file.seek(json_start)
+ manifest_str = manifest_file.read()
+ python_manifest = json.loads(manifest_str, object_pairs_hook=collections.OrderedDict)
+
+ # First set RPROVIDES for -native case
+ # Hardcoded since it cant be python3-native-foo, should be python3-foo-native
+ pn = 'python3'
+ rprovides = (d.getVar('RPROVIDES') or "").split()
+
+ # ${PN}-misc-native is not in the manifest
+ rprovides.append(pn + '-misc-native')
+
+ for key in python_manifest:
+ pypackage = pn + '-' + key + '-native'
+ if pypackage not in rprovides:
+ rprovides.append(pypackage)
+
+ d.setVar('RPROVIDES:class-native', ' '.join(rprovides))
+
+ # Then work on the target
+ include_pycs = d.getVar('INCLUDE_PYCS')
+
+ packages = d.getVar('PACKAGES').split()
+ pn = d.getVar('PN')
+
+ newpackages=[]
+ for key in python_manifest:
+ pypackage = pn + '-' + key
+
+ if pypackage not in packages:
+ # We need to prepend, otherwise python-misc gets everything
+ # so we use a new variable
+ newpackages.append(pypackage)
+
+ # "Build" python's manifest FILES, RDEPENDS and SUMMARY
+ d.setVar('FILES:' + pypackage, '')
+ for value in python_manifest[key]['files']:
+ d.appendVar('FILES:' + pypackage, ' ' + value)
+
+ # Add cached files
+ if include_pycs == '1':
+ for value in python_manifest[key]['cached']:
+ d.appendVar('FILES:' + pypackage, ' ' + value)
+
+ for value in python_manifest[key]['rdepends']:
+ # Make it work with or without $PN
+ if '${PN}' in value:
+ value=value.split('-', 1)[1]
+ d.appendVar('RDEPENDS:' + pypackage, ' ' + pn + '-' + value)
+
+ for value in python_manifest[key].get('rrecommends', ()):
+ if '${PN}' in value:
+ value=value.split('-', 1)[1]
+ d.appendVar('RRECOMMENDS:' + pypackage, ' ' + pn + '-' + value)
+
+ d.setVar('SUMMARY:' + pypackage, python_manifest[key]['summary'])
+
+ # Prepending so to avoid python-misc getting everything
+ packages = newpackages + packages
+ d.setVar('PACKAGES', ' '.join(packages))
+ d.setVar('ALLOW_EMPTY:${PN}-modules', '1')
+ d.setVar('ALLOW_EMPTY:${PN}-pkgutil', '1')
+
+ if "pgo" in d.getVar("PACKAGECONFIG").split() and not bb.utils.contains('MACHINE_FEATURES', 'qemu-usermode', True, False, d):
+ bb.fatal("pgo cannot be enabled as there is no qemu-usermode support for this architecture/machine")
+}
+
+# Files needed to create a new manifest
+
+do_create_manifest() {
+ # This task should be run with every new release of Python.
+ # We must ensure that PACKAGECONFIG enables everything when creating
+ # a new manifest, this is to base our new manifest on a complete
+ # native python build, containing all dependencies, otherwise the task
+ # wont be able to find the required files.
+ # e.g. BerkeleyDB is an optional build dependency so it may or may not
+ # be present, we must ensure it is.
+
+ cd ${WORKDIR}
+ # This needs to be executed by python-native and NOT by HOST's python
+ nativepython3 create_manifest3.py ${PYTHON_MAJMIN}
+ cp python3-manifest.json.new ${THISDIR}/python3/python3-manifest.json
+}
+
+# bitbake python -c create_manifest
+# Make sure we have native python ready when we create a new manifest
+addtask do_create_manifest after do_patch do_prepare_recipe_sysroot
+
+# manual dependency additions
+RRECOMMENDS:${PN}-core:append:class-nativesdk = " nativesdk-python3-modules"
+RRECOMMENDS:${PN}-crypt:append:class-target = " ${MLPREFIX}openssl ${MLPREFIX}ca-certificates"
+RRECOMMENDS:${PN}-crypt:append:class-nativesdk = " ${MLPREFIX}openssl ${MLPREFIX}ca-certificates"
+
+# For historical reasons PN is empty and provided by python3-modules
+FILES:${PN} = ""
+RPROVIDES:${PN}-modules = "${PN}"
+
+FILES:${PN}-pydoc += "${bindir}/pydoc${PYTHON_MAJMIN} ${bindir}/pydoc3"
+FILES:${PN}-idle += "${bindir}/idle3 ${bindir}/idle${PYTHON_MAJMIN}"
+
+# provide python-pyvenv from python3-venv
+RPROVIDES:${PN}-venv += "${MLPREFIX}python3-pyvenv"
+
+# package libpython3
+PACKAGES =+ "libpython3 libpython3-staticdev"
+FILES:libpython3 = "${libdir}/libpython*.so.*"
+FILES:libpython3-staticdev += "${libdir}/python${PYTHON_MAJMIN}/config-${PYTHON_MAJMIN}-*/libpython${PYTHON_MAJMIN}.a"
+INSANE_SKIP:${PN}-dev += "dev-elf"
+INSANE_SKIP:${PN}-ptest = "dev-deps"
+
+# catch all the rest (unsorted)
+PACKAGES += "${PN}-misc"
+RDEPENDS:${PN}-misc += "\
+ ${PN}-audio \
+ ${PN}-codecs \
+ ${PN}-core \
+ ${PN}-email \
+ ${PN}-numbers \
+ ${PN}-pickle \
+ ${PN}-pydoc \
+"
+RDEPENDS:${PN}-modules:append:class-target = " ${MLPREFIX}python3-misc"
+RDEPENDS:${PN}-modules:append:class-nativesdk = " ${MLPREFIX}python3-misc"
+RDEPENDS:${PN}-modules:append:class-target = " ${@bb.utils.contains('PACKAGECONFIG', 'gdbm', '${MLPREFIX}python3-gdbm', '', d)}"
+FILES:${PN}-misc = "${libdir}/python${PYTHON_MAJMIN} ${libdir}/python${PYTHON_MAJMIN}/lib-dynload"
+
+# catch manpage
+PACKAGES += "${PN}-man"
+FILES:${PN}-man = "${datadir}/man"
+
+# See https://bugs.python.org/issue18748 and https://bugs.python.org/issue37395
+RDEPENDS:libpython3:append:libc-glibc = " libgcc"
+RDEPENDS:${PN}-ctypes:append:libc-glibc = " ${MLPREFIX}ldconfig"
+RDEPENDS:${PN}-ptest = "${PN}-modules ${PN}-tests ${PN}-dev ${PN}-cgitb ${PN}-zipapp unzip bzip2 libgcc tzdata coreutils sed gcc g++ binutils \
+ locale-base-fr-fr locale-base-en-us locale-base-de-de"
+RDEPENDS:${PN}-ptest:append:libc-glibc = " locale-base-tr-tr"
+RDEPENDS:${PN}-tkinter += "${@bb.utils.contains('PACKAGECONFIG', 'tk', '${MLPREFIX}tk ${MLPREFIX}tk-lib', '', d)}"
+RDEPENDS:${PN}-idle += "${@bb.utils.contains('PACKAGECONFIG', 'tk', '${PN}-tkinter ${MLPREFIX}tcl', '', d)}"
+DEV_PKG_DEPENDENCY = ""
+RDEPENDS:${PN}-pydoc += "${PN}-io"
+
+RDEPENDS:${PN}-tests:append:class-target = " ${MLPREFIX}bash"
+RDEPENDS:${PN}-tests:append:class-nativesdk = " ${MLPREFIX}bash"
+
+# Python's tests contain large numbers of files we don't need in the recipe sysroots
+SYSROOT_PREPROCESS_FUNCS += " py3_sysroot_cleanup"
+py3_sysroot_cleanup () {
+ rm -rf ${SYSROOT_DESTDIR}${libdir}/python${PYTHON_MAJMIN}/test
+}
diff --git a/meta/recipes-devtools/python/python3_3.7.2.bb b/meta/recipes-devtools/python/python3_3.7.2.bb
deleted file mode 100644
index 7ef7cb5998..0000000000
--- a/meta/recipes-devtools/python/python3_3.7.2.bb
+++ /dev/null
@@ -1,299 +0,0 @@
-SUMMARY = "The Python Programming Language"
-HOMEPAGE = "http://www.python.org"
-LICENSE = "PSFv2"
-SECTION = "devel/python"
-
-LIC_FILES_CHKSUM = "file://LICENSE;md5=f257cc14f81685691652a3d3e1b5d754"
-
-SRC_URI = "http://www.python.org/ftp/python/${PV}/Python-${PV}.tar.xz \
- file://run-ptest \
- file://create_manifest3.py \
- file://get_module_deps3.py \
- file://python3-manifest.json \
- file://check_build_completeness.py \
- file://cgi_py.patch \
- file://0001-Do-not-add-usr-lib-termcap-to-linker-flags-to-avoid-.patch \
- ${@bb.utils.contains('PACKAGECONFIG', 'tk', '', 'file://avoid_warning_about_tkinter.patch', d)} \
- file://0001-Do-not-use-the-shell-version-of-python-config-that-w.patch \
- file://python-config.patch \
- file://0001-Makefile.pre-use-qemu-wrapper-when-gathering-profile.patch \
- file://0001-Do-not-hardcode-lib-as-location-for-site-packages-an.patch \
- file://0001-python3-use-cc_basename-to-replace-CC-for-checking-c.patch \
- file://0002-Don-t-do-runtime-test-to-get-float-byte-order.patch \
- file://0003-setup.py-pass-missing-libraries-to-Extension-for-mul.patch \
- file://0001-Lib-sysconfig.py-fix-another-place-where-lib-is-hard.patch \
- "
-
-SRC_URI_append_class-native = " \
- file://0001-distutils-sysconfig-append-STAGING_LIBDIR-python-sys.patch \
- file://12-distutils-prefix-is-inside-staging-area.patch \
- "
-SRC_URI_append_class-nativesdk = " \
- file://0001-main.c-if-OEPYTHON3HOME-is-set-use-instead-of-PYTHON.patch \
- "
-
-SRC_URI[md5sum] = "df6ec36011808205beda239c72f947cb"
-SRC_URI[sha256sum] = "d83fe8ce51b1bb48bbcf0550fd265b9a75cdfdfa93f916f9e700aef8444bf1bb"
-
-# exclude pre-releases for both python 2.x and 3.x
-UPSTREAM_CHECK_REGEX = "[Pp]ython-(?P<pver>\d+(\.\d+)+).tar"
-
-CVE_PRODUCT = "python"
-
-PYTHON_MAJMIN = "3.7"
-PYTHON_BINABI = "${PYTHON_MAJMIN}m"
-
-S = "${WORKDIR}/Python-${PV}"
-
-BBCLASSEXTEND = "native nativesdk"
-
-inherit autotools pkgconfig qemu ptest multilib_header update-alternatives
-
-MULTILIB_SUFFIX = "${@d.getVar('base_libdir',1).split('/')[-1]}"
-
-ALTERNATIVE_${PN}-dev = "python-config"
-ALTERNATIVE_LINK_NAME[python-config] = "${bindir}/python${PYTHON_BINABI}-config"
-ALTERNATIVE_TARGET[python-config] = "${bindir}/python${PYTHON_BINABI}-config-${MULTILIB_SUFFIX}"
-
-
-DEPENDS = "bzip2-replacement-native libffi bzip2 gdbm openssl sqlite3 zlib virtual/libintl xz virtual/crypt util-linux libtirpc libnsl2"
-DEPENDS_append_class-target = " python3-native"
-DEPENDS_append_class-nativesdk = " python3-native"
-
-EXTRA_OECONF = " --without-ensurepip --enable-shared"
-EXTRA_OECONF_append_class-native = " --bindir=${bindir}/${PN}"
-
-
-EXTRANATIVEPATH += "python3-native"
-
-CACHED_CONFIGUREVARS = " \
- ac_cv_file__dev_ptmx=yes \
- ac_cv_file__dev_ptc=no \
- ac_cv_working_tzset=yes \
-"
-
-PACKAGECONFIG_class-target ??= "readline ${@bb.utils.contains('MACHINE_FEATURES', 'qemu-usermode', 'pgo', '', d)}"
-PACKAGECONFIG_class-native ??= "readline"
-PACKAGECONFIG_class-nativesdk ??= "readline"
-PACKAGECONFIG[readline] = ",,readline"
-# Use profile guided optimisation by running PyBench inside qemu-user
-PACKAGECONFIG[pgo] = "--enable-optimizations,,qemu-native"
-PACKAGECONFIG[tk] = ",,tk"
-
-CPPFLAGS_append = " -I${STAGING_INCDIR}/ncursesw -I${STAGING_INCDIR}/uuid"
-
-EXTRA_OEMAKE = '\
- STAGING_LIBDIR=${STAGING_LIBDIR} \
- STAGING_INCDIR=${STAGING_INCDIR} \
- LIB=${baselib} \
-'
-
-do_compile_prepend_class-target() {
- if ${@bb.utils.contains('PACKAGECONFIG', 'pgo', 'true', 'false', d)}; then
- qemu_binary="${@qemu_wrapper_cmdline(d, '${STAGING_DIR_TARGET}', ['${B}', '${STAGING_DIR_TARGET}/${base_libdir}'])}"
- cat >pgo-wrapper <<EOF
-#!/bin/sh
-cd ${B}
-$qemu_binary "\$@"
-EOF
- chmod +x pgo-wrapper
- fi
-}
-
-do_install_prepend() {
- ${WORKDIR}/check_build_completeness.py ${T}/log.do_compile
-}
-
-do_install_append_class-target() {
- oe_multilib_header python${PYTHON_BINABI}/pyconfig.h
-}
-
-do_install_append_class-native() {
- # Make sure we use /usr/bin/env python
- for PYTHSCRIPT in `grep -rIl ${bindir}/${PN}/python ${D}${bindir}/${PN}`; do
- sed -i -e '1s|^#!.*|#!/usr/bin/env python3|' $PYTHSCRIPT
- done
- # Add a symlink to the native Python so that scripts can just invoke
- # "nativepython" and get the right one without needing absolute paths
- # (these often end up too long for the #! parser in the kernel as the
- # buffer is 128 bytes long).
- ln -s python3-native/python3 ${D}${bindir}/nativepython3
-}
-
-do_install_append() {
- mkdir -p ${D}${libdir}/python-sysconfigdata
- sysconfigfile=`find ${D} -name _sysconfig*.py`
- cp $sysconfigfile ${D}${libdir}/python-sysconfigdata/_sysconfigdata.py
-
- sed -i \
- -e "s,^ 'LIBDIR'.*, 'LIBDIR': '${STAGING_LIBDIR}'\,,g" \
- -e "s,^ 'INCLUDEDIR'.*, 'INCLUDEDIR': '${STAGING_INCDIR}'\,,g" \
- -e "s,^ 'CONFINCLUDEDIR'.*, 'CONFINCLUDEDIR': '${STAGING_INCDIR}'\,,g" \
- -e "/^ 'INCLDIRSTOMAKE'/{N; s,/usr/include,${STAGING_INCDIR},g}" \
- -e "/^ 'INCLUDEPY'/s,/usr/include,${STAGING_INCDIR},g" \
- ${D}${libdir}/python-sysconfigdata/_sysconfigdata.py
-}
-
-do_install_append_class-nativesdk () {
- create_wrapper ${D}${bindir}/python${PYTHON_MAJMIN} OEPYTHON3HOME='${prefix}' TERMINFO_DIRS='${sysconfdir}/terminfo:/etc/terminfo:/usr/share/terminfo:/usr/share/misc/terminfo:/lib/terminfo' PYTHONNOUSERSITE='1'
-}
-
-SSTATE_SCAN_FILES += "Makefile _sysconfigdata.py"
-PACKAGE_PREPROCESS_FUNCS += "py_package_preprocess"
-
-py_package_preprocess () {
- # Remove references to buildmachine paths in target Makefile and _sysconfigdata
- sed -i -e 's:--sysroot=${STAGING_DIR_TARGET}::g' -e s:'--with-libtool-sysroot=${STAGING_DIR_TARGET}'::g \
- -e 's|${DEBUG_PREFIX_MAP}||g' \
- -e 's:${HOSTTOOLS_DIR}/::g' \
- -e 's:${RECIPE_SYSROOT_NATIVE}::g' \
- -e 's:${RECIPE_SYSROOT}::g' \
- -e 's:${BASE_WORKDIR}/${MULTIMACH_TARGET_SYS}::g' \
- ${PKGD}/${prefix}/lib/python${PYTHON_MAJMIN}/config-${PYTHON_MAJMIN}${PYTHON_ABI}*/Makefile \
- ${PKGD}/${libdir}/python${PYTHON_MAJMIN}/_sysconfigdata*.py \
- ${PKGD}/${bindir}/python${PYTHON_BINABI}-config
-
- # Recompile _sysconfigdata after modifying it
- cd ${PKGD}
- sysconfigfile=`find . -name _sysconfigdata_*.py`
- ${STAGING_BINDIR_NATIVE}/python3-native/python3 \
- -c "from py_compile import compile; compile('$sysconfigfile')"
- ${STAGING_BINDIR_NATIVE}/python3-native/python3 \
- -c "from py_compile import compile; compile('$sysconfigfile', optimize=1)"
- ${STAGING_BINDIR_NATIVE}/python3-native/python3 \
- -c "from py_compile import compile; compile('$sysconfigfile', optimize=2)"
- cd -
-
- mv ${PKGD}/${bindir}/python${PYTHON_BINABI}-config ${PKGD}/${bindir}/python${PYTHON_BINABI}-config-${MULTILIB_SUFFIX}
-
- #Remove the unneeded copy of target sysconfig data
- rm -rf ${PKGD}/${libdir}/python-sysconfigdata
-}
-
-# We want bytecode precompiled .py files (.pyc's) by default
-# but the user may set it on their own conf
-INCLUDE_PYCS ?= "1"
-
-python(){
- import collections, json
-
- filename = os.path.join(d.getVar('THISDIR'), 'python3', 'python3-manifest.json')
- # This python changes the datastore based on the contents of a file, so mark
- # that dependency.
- bb.parse.mark_dependency(d, filename)
-
- with open(filename) as manifest_file:
- manifest_str = manifest_file.read()
- json_start = manifest_str.find('# EOC') + 6
- manifest_file.seek(json_start)
- manifest_str = manifest_file.read()
- python_manifest = json.loads(manifest_str, object_pairs_hook=collections.OrderedDict)
-
- # First set RPROVIDES for -native case
- # Hardcoded since it cant be python3-native-foo, should be python3-foo-native
- pn = 'python3'
- rprovides = d.getVar('RPROVIDES').split()
-
- for key in python_manifest:
- pypackage = pn + '-' + key + '-native'
- if pypackage not in rprovides:
- rprovides.append(pypackage)
-
- d.setVar('RPROVIDES_class-native', ' '.join(rprovides))
-
- # Then work on the target
- include_pycs = d.getVar('INCLUDE_PYCS')
-
- packages = d.getVar('PACKAGES').split()
- pn = d.getVar('PN')
-
- newpackages=[]
- for key in python_manifest:
- pypackage= pn + '-' + key
-
- if pypackage not in packages:
- # We need to prepend, otherwise python-misc gets everything
- # so we use a new variable
- newpackages.append(pypackage)
-
- # "Build" python's manifest FILES, RDEPENDS and SUMMARY
- d.setVar('FILES_' + pypackage, '')
- for value in python_manifest[key]['files']:
- d.appendVar('FILES_' + pypackage, ' ' + value)
-
- # Add cached files
- if include_pycs == '1':
- for value in python_manifest[key]['cached']:
- d.appendVar('FILES_' + pypackage, ' ' + value)
-
- for value in python_manifest[key]['rdepends']:
- # Make it work with or without $PN
- if '${PN}' in value:
- value=value.split('-')[1]
- d.appendVar('RDEPENDS_' + pypackage, ' ' + pn + '-' + value)
- d.setVar('SUMMARY_' + pypackage, python_manifest[key]['summary'])
-
- # Prepending so to avoid python-misc getting everything
- packages = newpackages + packages
- d.setVar('PACKAGES', ' '.join(packages))
- d.setVar('ALLOW_EMPTY_${PN}-modules', '1')
-}
-
-# Files needed to create a new manifest
-
-do_create_manifest() {
- # This task should be run with every new release of Python.
- # We must ensure that PACKAGECONFIG enables everything when creating
- # a new manifest, this is to base our new manifest on a complete
- # native python build, containing all dependencies, otherwise the task
- # wont be able to find the required files.
- # e.g. BerkeleyDB is an optional build dependency so it may or may not
- # be present, we must ensure it is.
-
- cd ${WORKDIR}
- # This needs to be executed by python-native and NOT by HOST's python
- nativepython3 create_manifest3.py ${PYTHON_MAJMIN}
- cp python3-manifest.json.new ${THISDIR}/python3/python3-manifest.json
-}
-
-# bitbake python -c create_manifest
-addtask do_create_manifest
-
-# Make sure we have native python ready when we create a new manifest
-do_create_manifest[depends] += "${PN}:do_prepare_recipe_sysroot"
-do_create_manifest[depends] += "${PN}:do_patch"
-
-# manual dependency additions
-RPROVIDES_${PN}-modules = "${PN}"
-RRECOMMENDS_${PN}-core_append_class-nativesdk = " nativesdk-python3-modules"
-RRECOMMENDS_${PN}-crypt_append_class-target = " openssl ca-certificates"
-RRECOMMENDS_${PN}-crypt_append_class-nativesdk = " openssl ca-certificates"
-
-FILES_${PN}-pydoc += "${bindir}/pydoc${PYTHON_MAJMIN} ${bindir}/pydoc3"
-FILES_${PN}-idle += "${bindir}/idle3 ${bindir}/idle${PYTHON_MAJMIN}"
-
-# provide python-pyvenv from python3-venv
-RPROVIDES_${PN}-venv += "python3-pyvenv"
-
-# package libpython3
-PACKAGES =+ "libpython3 libpython3-staticdev"
-FILES_libpython3 = "${libdir}/libpython*.so.*"
-FILES_libpython3-staticdev += "${prefix}/lib/python${PYTHON_MAJMIN}/config-${PYTHON_BINABI}-*/libpython${PYTHON_BINABI}.a"
-INSANE_SKIP_${PN}-dev += "dev-elf"
-
-# catch all the rest (unsorted)
-PACKAGES += "${PN}-misc"
-RDEPENDS_${PN}-misc += "python3-core python3-email python3-codecs"
-RDEPENDS_${PN}-modules_append_class-target = " python3-misc"
-RDEPENDS_${PN}-modules_append_class-nativesdk = " python3-misc"
-FILES_${PN}-misc = "${libdir}/python${PYTHON_MAJMIN} ${libdir}/python${PYTHON_MAJMIN}/lib-dynload"
-
-# catch manpage
-PACKAGES += "${PN}-man"
-FILES_${PN}-man = "${datadir}/man"
-
-RDEPENDS_${PN}-ptest = "${PN}-modules ${PN}-tests unzip bzip2 libgcc tzdata-europe coreutils sed"
-RDEPENDS_${PN}-ptest_append_libc-glibc = " locale-base-tr-tr.iso-8859-9"
-RDEPENDS_${PN}-tkinter += "${@bb.utils.contains('PACKAGECONFIG', 'tk', 'tk', '', d)}"
-RDEPENDS_${PN}-dev = ""
-
diff --git a/meta/recipes-devtools/python/python_2.7.16.bb b/meta/recipes-devtools/python/python_2.7.16.bb
deleted file mode 100644
index d70342fe3a..0000000000
--- a/meta/recipes-devtools/python/python_2.7.16.bb
+++ /dev/null
@@ -1,271 +0,0 @@
-require python.inc
-
-DEPENDS = "python-native libffi bzip2 gdbm openssl \
- readline sqlite3 zlib virtual/crypt"
-
-DISTRO_SRC_URI ?= "file://sitecustomize.py"
-DISTRO_SRC_URI_linuxstdbase = ""
-SRC_URI += " \
- file://01-use-proper-tools-for-cross-build.patch \
- file://03-fix-tkinter-detection.patch \
- file://06-avoid_usr_lib_termcap_path_in_linking.patch \
- ${DISTRO_SRC_URI} \
- file://multilib.patch \
- file://cgi_py.patch \
- file://setup_py_skip_cross_import_check.patch \
- file://add-md5module-support.patch \
- file://host_include_contamination.patch \
- file://fix_for_using_different_libdir.patch \
- file://setuptweaks.patch \
- file://check-if-target-is-64b-not-host.patch \
- file://search_db_h_in_inc_dirs_and_avoid_warning.patch \
- ${@bb.utils.contains('PACKAGECONFIG', 'tk', '', 'file://avoid_warning_about_tkinter.patch', d)} \
- file://avoid_warning_for_sunos_specific_module.patch \
- file://python-2.7.3-remove-bsdb-rpath.patch \
- file://run-ptest \
- file://parallel-makeinst-create-bindir.patch \
- file://use_sysroot_ncurses_instead_of_host.patch \
- file://add-CROSSPYTHONPATH-for-PYTHON_FOR_BUILD.patch \
- file://pass-missing-libraries-to-Extension-for-mul.patch \
- file://support_SOURCE_DATE_EPOCH_in_py_compile_2.7.patch \
- file://float-endian.patch \
- file://0001-python2-use-cc_basename-to-replace-CC-for-checking-c.patch \
- file://bpo-35907-cve-2019-9948.patch \
- file://bpo-35907-cve-2019-9948-fix.patch \
- file://bpo-36216-cve-2019-9636.patch \
- file://bpo-36216-cve-2019-9636-fix.patch \
-"
-
-S = "${WORKDIR}/Python-${PV}"
-
-inherit autotools multilib_header python-dir pythonnative ptest
-
-CONFIGUREOPTS += " --with-system-ffi "
-
-EXTRA_OECONF += "ac_cv_file__dev_ptmx=yes ac_cv_file__dev_ptc=no ac_cv_working_tzset=yes"
-
-PACKAGECONFIG ??= "bdb"
-PACKAGECONFIG[bdb] = ",,db"
-PACKAGECONFIG[tk] = ",,tk"
-
-do_configure_append() {
- rm -f ${S}/Makefile.orig
- autoreconf -Wcross --verbose --install --force --exclude=autopoint ../Python-${PV}/Modules/_ctypes/libffi
-}
-
-do_compile() {
- # regenerate platform specific files, because they depend on system headers
- cd ${S}/Lib/plat-linux2
- include=${STAGING_INCDIR} ${STAGING_BINDIR_NATIVE}/python-native/python \
- ${S}/Tools/scripts/h2py.py -i '(u_long)' \
- ${STAGING_INCDIR}/dlfcn.h \
- ${STAGING_INCDIR}/linux/cdrom.h \
- ${STAGING_INCDIR}/netinet/in.h \
- ${STAGING_INCDIR}/sys/types.h
- sed -e 's,${STAGING_DIR_HOST},,g' -i *.py
- cd -
-
- # remove any bogus LD_LIBRARY_PATH
- sed -i -e s,RUNSHARED=.*,RUNSHARED=, Makefile
-
- if [ ! -f Makefile.orig ]; then
- install -m 0644 Makefile Makefile.orig
- fi
- sed -i -e 's#^LDFLAGS=.*#LDFLAGS=${LDFLAGS} -L. -L${STAGING_LIBDIR}#g' \
- -e 's,libdir=${libdir},libdir=${STAGING_LIBDIR},g' \
- -e 's,libexecdir=${libexecdir},libexecdir=${STAGING_DIR_HOST}${libexecdir},g' \
- -e 's,^LIBDIR=.*,LIBDIR=${STAGING_LIBDIR},g' \
- -e 's,includedir=${includedir},includedir=${STAGING_INCDIR},g' \
- -e 's,^INCLUDEDIR=.*,INCLUDE=${STAGING_INCDIR},g' \
- -e 's,^CONFINCLUDEDIR=.*,CONFINCLUDE=${STAGING_INCDIR},g' \
- Makefile
- # save copy of it now, because if we do it in do_install and
- # then call do_install twice we get Makefile.orig == Makefile.sysroot
- install -m 0644 Makefile Makefile.sysroot
-
- export CROSS_COMPILE="${TARGET_PREFIX}"
- export PYTHONBUILDDIR="${B}"
-
- oe_runmake HOSTPGEN=${STAGING_BINDIR_NATIVE}/python-native/pgen \
- HOSTPYTHON=${STAGING_BINDIR_NATIVE}/python-native/python \
- STAGING_LIBDIR=${STAGING_LIBDIR} \
- STAGING_INCDIR=${STAGING_INCDIR} \
- STAGING_BASELIBDIR=${STAGING_BASELIBDIR} \
- OPT="${CFLAGS}"
-}
-
-do_install() {
- # make install needs the original Makefile, or otherwise the inclues would
- # go to ${D}${STAGING...}/...
- install -m 0644 Makefile.orig Makefile
-
- export CROSS_COMPILE="${TARGET_PREFIX}"
- export PYTHONBUILDDIR="${B}"
-
- # After swizzling the makefile, we need to run the build again.
- # install can race with the build so we have to run this first, then install
- oe_runmake HOSTPGEN=${STAGING_BINDIR_NATIVE}/python-native/pgen \
- HOSTPYTHON=${STAGING_BINDIR_NATIVE}/python-native/python \
- CROSSPYTHONPATH=${STAGING_LIBDIR_NATIVE}/python${PYTHON_MAJMIN}/lib-dynload/ \
- STAGING_LIBDIR=${STAGING_LIBDIR} \
- STAGING_INCDIR=${STAGING_INCDIR} \
- STAGING_BASELIBDIR=${STAGING_BASELIBDIR} \
- DESTDIR=${D} LIBDIR=${libdir}
-
- oe_runmake HOSTPGEN=${STAGING_BINDIR_NATIVE}/python-native/pgen \
- HOSTPYTHON=${STAGING_BINDIR_NATIVE}/python-native/python \
- CROSSPYTHONPATH=${STAGING_LIBDIR_NATIVE}/python${PYTHON_MAJMIN}/lib-dynload/ \
- STAGING_LIBDIR=${STAGING_LIBDIR} \
- STAGING_INCDIR=${STAGING_INCDIR} \
- STAGING_BASELIBDIR=${STAGING_BASELIBDIR} \
- DESTDIR=${D} LIBDIR=${libdir} install
-
- install -m 0644 Makefile.sysroot ${D}/${libdir}/python${PYTHON_MAJMIN}/config/Makefile
-
- if [ -e ${WORKDIR}/sitecustomize.py ]; then
- install -m 0644 ${WORKDIR}/sitecustomize.py ${D}/${libdir}/python${PYTHON_MAJMIN}
- fi
-
- oe_multilib_header python${PYTHON_MAJMIN}/pyconfig.h
-
- if [ -z "${@bb.utils.filter('PACKAGECONFIG', 'bdb', d)}" ]; then
- rm -rf ${D}/${libdir}/python${PYTHON_MAJMIN}/bsddb
- fi
-
- # Python 3.x version of 2to3 is now the default
- mv ${D}/${bindir}/2to3 ${D}/${bindir}/2to3-${PYTHON_MAJMIN}
-}
-
-do_install_append_class-nativesdk () {
- create_wrapper ${D}${bindir}/python2.7 PYTHONHOME='${prefix}' TERMINFO_DIRS='${sysconfdir}/terminfo:/etc/terminfo:/usr/share/terminfo:/usr/share/misc/terminfo:/lib/terminfo' PYTHONNOUSERSITE='1'
-}
-
-SSTATE_SCAN_FILES += "Makefile"
-PACKAGE_PREPROCESS_FUNCS += "py_package_preprocess"
-
-py_package_preprocess () {
- # copy back the old Makefile to fix target package
- install -m 0644 ${B}/Makefile.orig ${PKGD}/${libdir}/python${PYTHON_MAJMIN}/config/Makefile
-
- # Remove references to buildmachine paths in target Makefile and _sysconfigdata
- sed -i -e 's:--sysroot=${STAGING_DIR_TARGET}::g' -e s:'--with-libtool-sysroot=${STAGING_DIR_TARGET}'::g \
- -e 's|${DEBUG_PREFIX_MAP}||g' \
- -e 's:${HOSTTOOLS_DIR}/::g' \
- -e 's:${RECIPE_SYSROOT_NATIVE}::g' \
- -e 's:${RECIPE_SYSROOT}::g' \
- -e 's:${BASE_WORKDIR}/${MULTIMACH_TARGET_SYS}::g' \
- ${PKGD}/${libdir}/python${PYTHON_MAJMIN}/config/Makefile \
- ${PKGD}/${libdir}/python${PYTHON_MAJMIN}/_sysconfigdata.py
- (cd ${PKGD}; python -m py_compile ./${libdir}/python${PYTHON_MAJMIN}/_sysconfigdata.py)
-}
-
-PACKAGES_remove = "${PN}"
-
-# manual dependency additions
-RPROVIDES_${PN}-core = "${PN}"
-RRECOMMENDS_${PN}-core_append_class-nativesdk = " nativesdk-python-modules"
-RRECOMMENDS_${PN}-crypt = "openssl"
-
-# package libpython2
-PACKAGES =+ "lib${BPN}2"
-FILES_lib${BPN}2 = "${libdir}/libpython*.so.*"
-
-# catch all the rest (unsorted)
-PACKAGES += "${PN}-misc"
-FILES_${PN}-misc = "${libdir}/python${PYTHON_MAJMIN}"
-RDEPENDS_${PN}-modules += "${PN}-misc"
-
-# ptest
-RDEPENDS_${PN}-ptest = "${PN}-modules ${PN}-tests unzip tzdata-europe coreutils sed"
-RDEPENDS_${PN}-tkinter += "${@bb.utils.contains('PACKAGECONFIG', 'tk', 'tk', '', d)}"
-# catch manpage
-PACKAGES += "${PN}-man"
-FILES_${PN}-man = "${datadir}/man"
-
-# Nasty but if bdb isn't enabled the package won't be generated
-RDEPENDS_${PN}-modules_remove = "${@bb.utils.contains('PACKAGECONFIG', 'bdb', '', '${PN}-bsddb', d)}"
-
-RDEPENDS_${PN}-dev = ""
-
-BBCLASSEXTEND = "nativesdk"
-
-# We want bytecode precompiled .py files (.pyc's) by default
-# but the user may set it on their own conf
-
-INCLUDE_PYCS ?= "1"
-
-python(){
- import collections, json
-
- filename = os.path.join(d.getVar('THISDIR'), 'python', 'python2-manifest.json')
- # This python changes the datastore based on the contents of a file, so mark
- # that dependency.
- bb.parse.mark_dependency(d, filename)
-
- with open(filename) as manifest_file:
- manifest_str = manifest_file.read()
- json_start = manifest_str.find('# EOC') + 6
- manifest_file.seek(json_start)
- manifest_str = manifest_file.read()
- python_manifest = json.loads(manifest_str, object_pairs_hook=collections.OrderedDict)
-
- include_pycs = d.getVar('INCLUDE_PYCS')
-
- packages = d.getVar('PACKAGES').split()
- pn = d.getVar('PN')
-
- newpackages=[]
-
- for key in python_manifest:
- pypackage= pn + '-' + key
-
- if pypackage not in packages:
- # We need to prepend, otherwise python-misc gets everything
- # so we use a new variable
- newpackages.append(pypackage)
-
- # "Build" python's manifest FILES, RDEPENDS and SUMMARY
- d.setVar('FILES_' + pypackage, '')
- for value in python_manifest[key]['files']:
- d.appendVar('FILES_' + pypackage, ' ' + value)
- if include_pycs == '1':
- if value.endswith('.py'):
- d.appendVar('FILES_' + pypackage, ' ' + value + 'c')
-
- for value in python_manifest[key]['rdepends']:
- # Make it work with or without $PN
- if '${PN}' in value:
- value=value.split('-')[1]
- d.appendVar('RDEPENDS_' + pypackage, ' ' + pn + '-' + value)
- d.setVar('SUMMARY_' + pypackage, python_manifest[key]['summary'])
-
- # Prepending so to avoid python-misc getting everything
- packages = newpackages + packages
- d.setVar('PACKAGES', ' '.join(packages))
- d.setVar('ALLOW_EMPTY_${PN}-modules', '1')
-}
-
-# Files needed to create a new manifest
-SRC_URI += "file://create_manifest2.py file://get_module_deps2.py file://python2-manifest.json"
-
-do_create_manifest() {
- # This task should be run with every new release of Python.
- # We must ensure that PACKAGECONFIG enables everything when creating
- # a new manifest, this is to base our new manifest on a complete
- # native python build, containing all dependencies, otherwise the task
- # wont be able to find the required files.
- # e.g. BerkeleyDB is an optional build dependency so it may or may not
- # be present, we must ensure it is.
-
- cd ${WORKDIR}
- # This needs to be executed by python-native and NOT by HOST's python
- nativepython create_manifest2.py
- cp python2-manifest.json.new ${THISDIR}/python/python2-manifest.json
-}
-
-# bitbake python -c create_manifest
-addtask do_create_manifest
-
-# Make sure we have native python ready when we create a new manifest
-do_create_manifest[depends] += "python:do_prepare_recipe_sysroot"
-do_create_manifest[depends] += "python:do_patch"