From 8c22ff0d8b70d9b12f0487ef696a7e915b9e3173 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Fri, 7 Nov 2025 13:31:53 +0000 Subject: The poky repository master branch is no longer being updated. You can either: a) switch to individual clones of bitbake, openembedded-core, meta-yocto and yocto-docs b) use the new bitbake-setup You can find information about either approach in our documentation: https://docs.yoctoproject.org/ Note that "poky" the distro setting is still available in meta-yocto as before and we continue to use and maintain that. Long live Poky! Some further information on the background of this change can be found in: https://lists.openembedded.org/g/openembedded-architecture/message/2179 Signed-off-by: Richard Purdie --- ...void-shebang-overflow-on-python-config.py.patch | 30 - ...ta-for-OpenSSL-3.4-and-add-it-to-multissl.patch | 1452 -------------------- ...handle-stdin-I-O-errors-same-way-as-maste.patch | 46 - ...ig.py-use-prefix-value-from-build-configu.patch | 31 - ...e-use-qemu-wrapper-when-gathering-profile.patch | 33 - ...ng-tests-due-to-load-variability-on-YP-AB.patch | 72 - ...ate-test_sysconfig-for-posix_user-purelib.patch | 36 - ...tdout_fileno-test-due-to-load-variability.patch | 29 - ...config.py-use-platlibdir-also-for-purelib.patch | 27 - ...est_active_children-skip-problematic-test.patch | 27 - ...t_ctypes.test_find-skip-without-tools-sdk.patch | 33 - .../0001-test_deadlock-skip-problematic-test.patch | 27 - ..._locale.py-correct-the-test-output-format.patch | 45 - ...1-test_readline-skip-limited-history-test.patch | 46 - .../0001-test_shutdown-skip-problematic-test.patch | 43 - ...st_storlines-skip-due-to-load-variability.patch | 29 - .../python/python3/check_build_completeness.py | 17 - .../python/python3/create_manifest3.py | 444 ------ .../python/python3/get_module_deps3.py | 174 --- .../recipes-devtools/python/python3/makerace.patch | 31 - .../python/python3/python3-manifest.json | 1215 ---------------- .../python/python3/reformat_sysconfig.py | 21 - meta/recipes-devtools/python/python3/run-ptest | 3 - .../python/python3/valid-dists.patch | 164 --- 24 files changed, 4075 deletions(-) delete mode 100644 meta/recipes-devtools/python/python3/0001-Avoid-shebang-overflow-on-python-config.py.patch delete mode 100644 meta/recipes-devtools/python/python3/0001-Generate-data-for-OpenSSL-3.4-and-add-it-to-multissl.patch delete mode 100644 meta/recipes-devtools/python/python3/0001-Lib-pty.py-handle-stdin-I-O-errors-same-way-as-maste.patch delete mode 100644 meta/recipes-devtools/python/python3/0001-Lib-sysconfig.py-use-prefix-value-from-build-configu.patch delete mode 100644 meta/recipes-devtools/python/python3/0001-Makefile.pre-use-qemu-wrapper-when-gathering-profile.patch delete mode 100644 meta/recipes-devtools/python/python3/0001-Skip-failing-tests-due-to-load-variability-on-YP-AB.patch delete mode 100644 meta/recipes-devtools/python/python3/0001-Update-test_sysconfig-for-posix_user-purelib.patch delete mode 100644 meta/recipes-devtools/python/python3/0001-skip-no_stdout_fileno-test-due-to-load-variability.patch delete mode 100644 meta/recipes-devtools/python/python3/0001-sysconfig.py-use-platlibdir-also-for-purelib.patch delete mode 100644 meta/recipes-devtools/python/python3/0001-test_active_children-skip-problematic-test.patch delete mode 100644 meta/recipes-devtools/python/python3/0001-test_ctypes.test_find-skip-without-tools-sdk.patch delete mode 100644 meta/recipes-devtools/python/python3/0001-test_deadlock-skip-problematic-test.patch delete mode 100644 meta/recipes-devtools/python/python3/0001-test_locale.py-correct-the-test-output-format.patch delete mode 100644 meta/recipes-devtools/python/python3/0001-test_readline-skip-limited-history-test.patch delete mode 100644 meta/recipes-devtools/python/python3/0001-test_shutdown-skip-problematic-test.patch delete mode 100644 meta/recipes-devtools/python/python3/0001-test_storlines-skip-due-to-load-variability.patch delete mode 100755 meta/recipes-devtools/python/python3/check_build_completeness.py delete mode 100644 meta/recipes-devtools/python/python3/create_manifest3.py delete mode 100644 meta/recipes-devtools/python/python3/get_module_deps3.py delete mode 100644 meta/recipes-devtools/python/python3/makerace.patch delete mode 100644 meta/recipes-devtools/python/python3/python3-manifest.json delete mode 100644 meta/recipes-devtools/python/python3/reformat_sysconfig.py delete mode 100644 meta/recipes-devtools/python/python3/run-ptest delete mode 100644 meta/recipes-devtools/python/python3/valid-dists.patch (limited to 'meta/recipes-devtools/python/python3') 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 deleted file mode 100644 index eaf5ea5049..0000000000 --- a/meta/recipes-devtools/python/python3/0001-Avoid-shebang-overflow-on-python-config.py.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 6b111a328c1c57b1580d63894b2b5d337316f6d4 Mon Sep 17 00:00:00 2001 -From: Paulo Neves -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 9ec3a71..f7d5382 100644 ---- a/Makefile.pre.in -+++ b/Makefile.pre.in -@@ -2585,6 +2585,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-Generate-data-for-OpenSSL-3.4-and-add-it-to-multissl.patch b/meta/recipes-devtools/python/python3/0001-Generate-data-for-OpenSSL-3.4-and-add-it-to-multissl.patch deleted file mode 100644 index 327124e4e3..0000000000 --- a/meta/recipes-devtools/python/python3/0001-Generate-data-for-OpenSSL-3.4-and-add-it-to-multissl.patch +++ /dev/null @@ -1,1452 +0,0 @@ -From db5c5763f3e3172f1dd011355b41469770dafc0f Mon Sep 17 00:00:00 2001 -From: Petr Viktorin -Date: Thu, 28 Nov 2024 13:29:27 +0100 -Subject: [PATCH] gh-127330: Update for OpenSSL 3.4 & document+improve the - update process (GH-127331) - -- Add `git describe` output to headers generated by `make_ssl_data.py` - - This info is more important than the date when the file was generated. - It does mean that the tool now requires a Git checkout of OpenSSL, - not for example a release tarball. - -- Regenerate the older file to add the info. - To the other older file, add a note about manual edits. - -- Add notes on how to add a new OpenSSL version - -- Add 3.4 error messages and multissl tests - -Upstream-Status: Submitted [https://github.com/python/cpython/commit/db5c5763f3e3172f1dd011355b41469770dafc0f] -Signed-off-by: Peter Marko ---- - Modules/_ssl.c | 2 +- - Modules/_ssl_data_111.h | 4 +- - Modules/_ssl_data_300.h | 5 +- - Modules/{_ssl_data_31.h => _ssl_data_34.h} | 674 ++++++++++++++++++++- - Tools/c-analyzer/cpython/_parser.py | 4 +- - Tools/ssl/make_ssl_data.py | 34 +- - Tools/ssl/multissltests.py | 1 + - 7 files changed, 714 insertions(+), 10 deletions(-) - rename Modules/{_ssl_data_31.h => _ssl_data_34.h} (92%) - -diff --git a/Modules/_ssl.c b/Modules/_ssl.c -index b6b5ebf094c..e5b8bf21002 100644 ---- a/Modules/_ssl.c -+++ b/Modules/_ssl.c -@@ -121,7 +121,7 @@ static void _PySSLFixErrno(void) { - - /* Include generated data (error codes) */ - #if (OPENSSL_VERSION_NUMBER >= 0x30100000L) --#include "_ssl_data_31.h" -+#include "_ssl_data_34.h" - #elif (OPENSSL_VERSION_NUMBER >= 0x30000000L) - #include "_ssl_data_300.h" - #elif (OPENSSL_VERSION_NUMBER >= 0x10101000L) -diff --git a/Modules/_ssl_data_111.h b/Modules/_ssl_data_111.h -index 093c786e6a2..061fac2bd58 100644 ---- a/Modules/_ssl_data_111.h -+++ b/Modules/_ssl_data_111.h -@@ -1,4 +1,6 @@ --/* File generated by Tools/ssl/make_ssl_data.py *//* Generated on 2023-06-01T02:58:04.081473 */ -+/* File generated by Tools/ssl/make_ssl_data.py */ -+/* Generated on 2024-11-27T12:48:46.194048+00:00 */ -+/* Generated from Git commit OpenSSL_1_1_1w-0-ge04bd3433f */ - static struct py_ssl_library_code library_codes[] = { - #ifdef ERR_LIB_ASN1 - {"ASN1", ERR_LIB_ASN1}, -diff --git a/Modules/_ssl_data_300.h b/Modules/_ssl_data_300.h -index dc66731f6b6..b687ce43c77 100644 ---- a/Modules/_ssl_data_300.h -+++ b/Modules/_ssl_data_300.h -@@ -1,4 +1,7 @@ --/* File generated by Tools/ssl/make_ssl_data.py *//* Generated on 2023-06-01T03:03:52.163218 */ -+/* File generated by Tools/ssl/make_ssl_data.py */ -+/* Generated on 2023-06-01T03:03:52.163218 */ -+/* Manually edited to add definitions from 1.1.1 (GH-105174) */ -+ - static struct py_ssl_library_code library_codes[] = { - #ifdef ERR_LIB_ASN1 - {"ASN1", ERR_LIB_ASN1}, -diff --git a/Modules/_ssl_data_31.h b/Modules/_ssl_data_34.h -similarity index 92% -rename from Modules/_ssl_data_31.h -rename to Modules/_ssl_data_34.h -index c589c501f4e..d4af3e1c1fa 100644 ---- a/Modules/_ssl_data_31.h -+++ b/Modules/_ssl_data_34.h -@@ -1,4 +1,6 @@ --/* File generated by Tools/ssl/make_ssl_data.py *//* Generated on 2023-06-01T03:04:00.275280 */ -+/* File generated by Tools/ssl/make_ssl_data.py */ -+/* Generated on 2024-11-27T12:35:52.276767+00:00 */ -+/* Generated from Git commit openssl-3.4.0-0-g98acb6b028 */ - static struct py_ssl_library_code library_codes[] = { - #ifdef ERR_LIB_ASN1 - {"ASN1", ERR_LIB_ASN1}, -@@ -300,6 +302,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"FIRST_NUM_TOO_LARGE", 13, 122}, - #endif -+ #ifdef ASN1_R_GENERALIZEDTIME_IS_TOO_SHORT -+ {"GENERALIZEDTIME_IS_TOO_SHORT", ERR_LIB_ASN1, ASN1_R_GENERALIZEDTIME_IS_TOO_SHORT}, -+ #else -+ {"GENERALIZEDTIME_IS_TOO_SHORT", 13, 232}, -+ #endif - #ifdef ASN1_R_HEADER_TOO_LONG - {"HEADER_TOO_LONG", ERR_LIB_ASN1, ASN1_R_HEADER_TOO_LONG}, - #else -@@ -730,6 +737,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"UNSUPPORTED_TYPE", 13, 196}, - #endif -+ #ifdef ASN1_R_UTCTIME_IS_TOO_SHORT -+ {"UTCTIME_IS_TOO_SHORT", ERR_LIB_ASN1, ASN1_R_UTCTIME_IS_TOO_SHORT}, -+ #else -+ {"UTCTIME_IS_TOO_SHORT", 13, 233}, -+ #endif - #ifdef ASN1_R_WRONG_INTEGER_TYPE - {"WRONG_INTEGER_TYPE", ERR_LIB_ASN1, ASN1_R_WRONG_INTEGER_TYPE}, - #else -@@ -845,6 +857,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"LISTEN_V6_ONLY", 32, 136}, - #endif -+ #ifdef BIO_R_LOCAL_ADDR_NOT_AVAILABLE -+ {"LOCAL_ADDR_NOT_AVAILABLE", ERR_LIB_BIO, BIO_R_LOCAL_ADDR_NOT_AVAILABLE}, -+ #else -+ {"LOCAL_ADDR_NOT_AVAILABLE", 32, 111}, -+ #endif - #ifdef BIO_R_LOOKUP_RETURNED_NOTHING - {"LOOKUP_RETURNED_NOTHING", ERR_LIB_BIO, BIO_R_LOOKUP_RETURNED_NOTHING}, - #else -@@ -860,6 +877,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"NBIO_CONNECT_ERROR", 32, 110}, - #endif -+ #ifdef BIO_R_NON_FATAL -+ {"NON_FATAL", ERR_LIB_BIO, BIO_R_NON_FATAL}, -+ #else -+ {"NON_FATAL", 32, 112}, -+ #endif - #ifdef BIO_R_NO_ACCEPT_ADDR_OR_SERVICE_SPECIFIED - {"NO_ACCEPT_ADDR_OR_SERVICE_SPECIFIED", ERR_LIB_BIO, BIO_R_NO_ACCEPT_ADDR_OR_SERVICE_SPECIFIED}, - #else -@@ -880,6 +902,26 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"NO_SUCH_FILE", 32, 128}, - #endif -+ #ifdef BIO_R_PEER_ADDR_NOT_AVAILABLE -+ {"PEER_ADDR_NOT_AVAILABLE", ERR_LIB_BIO, BIO_R_PEER_ADDR_NOT_AVAILABLE}, -+ #else -+ {"PEER_ADDR_NOT_AVAILABLE", 32, 114}, -+ #endif -+ #ifdef BIO_R_PORT_MISMATCH -+ {"PORT_MISMATCH", ERR_LIB_BIO, BIO_R_PORT_MISMATCH}, -+ #else -+ {"PORT_MISMATCH", 32, 150}, -+ #endif -+ #ifdef BIO_R_TFO_DISABLED -+ {"TFO_DISABLED", ERR_LIB_BIO, BIO_R_TFO_DISABLED}, -+ #else -+ {"TFO_DISABLED", 32, 106}, -+ #endif -+ #ifdef BIO_R_TFO_NO_KERNEL_SUPPORT -+ {"TFO_NO_KERNEL_SUPPORT", ERR_LIB_BIO, BIO_R_TFO_NO_KERNEL_SUPPORT}, -+ #else -+ {"TFO_NO_KERNEL_SUPPORT", 32, 108}, -+ #endif - #ifdef BIO_R_TRANSFER_ERROR - {"TRANSFER_ERROR", ERR_LIB_BIO, BIO_R_TRANSFER_ERROR}, - #else -@@ -920,6 +962,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"UNABLE_TO_REUSEADDR", 32, 139}, - #endif -+ #ifdef BIO_R_UNABLE_TO_TFO -+ {"UNABLE_TO_TFO", ERR_LIB_BIO, BIO_R_UNABLE_TO_TFO}, -+ #else -+ {"UNABLE_TO_TFO", 32, 109}, -+ #endif - #ifdef BIO_R_UNAVAILABLE_IP_FAMILY - {"UNAVAILABLE_IP_FAMILY", ERR_LIB_BIO, BIO_R_UNAVAILABLE_IP_FAMILY}, - #else -@@ -1230,6 +1277,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"ERROR_VALIDATING_SIGNATURE", 58, 171}, - #endif -+ #ifdef CMP_R_EXPECTED_POLLREQ -+ {"EXPECTED_POLLREQ", ERR_LIB_CMP, CMP_R_EXPECTED_POLLREQ}, -+ #else -+ {"EXPECTED_POLLREQ", 58, 104}, -+ #endif - #ifdef CMP_R_FAILED_BUILDING_OWN_CHAIN - {"FAILED_BUILDING_OWN_CHAIN", ERR_LIB_CMP, CMP_R_FAILED_BUILDING_OWN_CHAIN}, - #else -@@ -1250,16 +1302,51 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"FAIL_INFO_OUT_OF_RANGE", 58, 129}, - #endif -+ #ifdef CMP_R_GENERATE_CERTREQTEMPLATE -+ {"GENERATE_CERTREQTEMPLATE", ERR_LIB_CMP, CMP_R_GENERATE_CERTREQTEMPLATE}, -+ #else -+ {"GENERATE_CERTREQTEMPLATE", 58, 197}, -+ #endif -+ #ifdef CMP_R_GENERATE_CRLSTATUS -+ {"GENERATE_CRLSTATUS", ERR_LIB_CMP, CMP_R_GENERATE_CRLSTATUS}, -+ #else -+ {"GENERATE_CRLSTATUS", 58, 198}, -+ #endif -+ #ifdef CMP_R_GETTING_GENP -+ {"GETTING_GENP", ERR_LIB_CMP, CMP_R_GETTING_GENP}, -+ #else -+ {"GETTING_GENP", 58, 192}, -+ #endif -+ #ifdef CMP_R_GET_ITAV -+ {"GET_ITAV", ERR_LIB_CMP, CMP_R_GET_ITAV}, -+ #else -+ {"GET_ITAV", 58, 199}, -+ #endif - #ifdef CMP_R_INVALID_ARGS - {"INVALID_ARGS", ERR_LIB_CMP, CMP_R_INVALID_ARGS}, - #else - {"INVALID_ARGS", 58, 100}, - #endif -+ #ifdef CMP_R_INVALID_GENP -+ {"INVALID_GENP", ERR_LIB_CMP, CMP_R_INVALID_GENP}, -+ #else -+ {"INVALID_GENP", 58, 193}, -+ #endif -+ #ifdef CMP_R_INVALID_KEYSPEC -+ {"INVALID_KEYSPEC", ERR_LIB_CMP, CMP_R_INVALID_KEYSPEC}, -+ #else -+ {"INVALID_KEYSPEC", 58, 202}, -+ #endif - #ifdef CMP_R_INVALID_OPTION - {"INVALID_OPTION", ERR_LIB_CMP, CMP_R_INVALID_OPTION}, - #else - {"INVALID_OPTION", 58, 174}, - #endif -+ #ifdef CMP_R_INVALID_ROOTCAKEYUPDATE -+ {"INVALID_ROOTCAKEYUPDATE", ERR_LIB_CMP, CMP_R_INVALID_ROOTCAKEYUPDATE}, -+ #else -+ {"INVALID_ROOTCAKEYUPDATE", 58, 195}, -+ #endif - #ifdef CMP_R_MISSING_CERTID - {"MISSING_CERTID", ERR_LIB_CMP, CMP_R_MISSING_CERTID}, - #else -@@ -1425,6 +1512,21 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"TRANSFER_ERROR", 58, 159}, - #endif -+ #ifdef CMP_R_UNCLEAN_CTX -+ {"UNCLEAN_CTX", ERR_LIB_CMP, CMP_R_UNCLEAN_CTX}, -+ #else -+ {"UNCLEAN_CTX", 58, 191}, -+ #endif -+ #ifdef CMP_R_UNEXPECTED_CERTPROFILE -+ {"UNEXPECTED_CERTPROFILE", ERR_LIB_CMP, CMP_R_UNEXPECTED_CERTPROFILE}, -+ #else -+ {"UNEXPECTED_CERTPROFILE", 58, 196}, -+ #endif -+ #ifdef CMP_R_UNEXPECTED_CRLSTATUSLIST -+ {"UNEXPECTED_CRLSTATUSLIST", ERR_LIB_CMP, CMP_R_UNEXPECTED_CRLSTATUSLIST}, -+ #else -+ {"UNEXPECTED_CRLSTATUSLIST", 58, 201}, -+ #endif - #ifdef CMP_R_UNEXPECTED_PKIBODY - {"UNEXPECTED_PKIBODY", ERR_LIB_CMP, CMP_R_UNEXPECTED_PKIBODY}, - #else -@@ -1435,11 +1537,21 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"UNEXPECTED_PKISTATUS", 58, 185}, - #endif -+ #ifdef CMP_R_UNEXPECTED_POLLREQ -+ {"UNEXPECTED_POLLREQ", ERR_LIB_CMP, CMP_R_UNEXPECTED_POLLREQ}, -+ #else -+ {"UNEXPECTED_POLLREQ", 58, 105}, -+ #endif - #ifdef CMP_R_UNEXPECTED_PVNO - {"UNEXPECTED_PVNO", ERR_LIB_CMP, CMP_R_UNEXPECTED_PVNO}, - #else - {"UNEXPECTED_PVNO", 58, 153}, - #endif -+ #ifdef CMP_R_UNEXPECTED_SENDER -+ {"UNEXPECTED_SENDER", ERR_LIB_CMP, CMP_R_UNEXPECTED_SENDER}, -+ #else -+ {"UNEXPECTED_SENDER", 58, 106}, -+ #endif - #ifdef CMP_R_UNKNOWN_ALGORITHM_ID - {"UNKNOWN_ALGORITHM_ID", ERR_LIB_CMP, CMP_R_UNKNOWN_ALGORITHM_ID}, - #else -@@ -1450,6 +1562,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"UNKNOWN_CERT_TYPE", 58, 135}, - #endif -+ #ifdef CMP_R_UNKNOWN_CRL_ISSUER -+ {"UNKNOWN_CRL_ISSUER", ERR_LIB_CMP, CMP_R_UNKNOWN_CRL_ISSUER}, -+ #else -+ {"UNKNOWN_CRL_ISSUER", 58, 200}, -+ #endif - #ifdef CMP_R_UNKNOWN_PKISTATUS - {"UNKNOWN_PKISTATUS", ERR_LIB_CMP, CMP_R_UNKNOWN_PKISTATUS}, - #else -@@ -1465,6 +1582,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"UNSUPPORTED_KEY_TYPE", 58, 137}, - #endif -+ #ifdef CMP_R_UNSUPPORTED_PKIBODY -+ {"UNSUPPORTED_PKIBODY", ERR_LIB_CMP, CMP_R_UNSUPPORTED_PKIBODY}, -+ #else -+ {"UNSUPPORTED_PKIBODY", 58, 101}, -+ #endif - #ifdef CMP_R_UNSUPPORTED_PROTECTION_ALG_DHBASEDMAC - {"UNSUPPORTED_PROTECTION_ALG_DHBASEDMAC", ERR_LIB_CMP, CMP_R_UNSUPPORTED_PROTECTION_ALG_DHBASEDMAC}, - #else -@@ -1825,6 +1947,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"NO_SIGNERS", 46, 135}, - #endif -+ #ifdef CMS_R_OPERATION_UNSUPPORTED -+ {"OPERATION_UNSUPPORTED", ERR_LIB_CMS, CMS_R_OPERATION_UNSUPPORTED}, -+ #else -+ {"OPERATION_UNSUPPORTED", 46, 182}, -+ #endif - #ifdef CMS_R_PEER_KEY_ERROR - {"PEER_KEY_ERROR", ERR_LIB_CMS, CMS_R_PEER_KEY_ERROR}, - #else -@@ -1960,6 +2087,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"UNSUPPORTED_RECIPIENT_TYPE", 46, 154}, - #endif -+ #ifdef CMS_R_UNSUPPORTED_SIGNATURE_ALGORITHM -+ {"UNSUPPORTED_SIGNATURE_ALGORITHM", ERR_LIB_CMS, CMS_R_UNSUPPORTED_SIGNATURE_ALGORITHM}, -+ #else -+ {"UNSUPPORTED_SIGNATURE_ALGORITHM", 46, 195}, -+ #endif - #ifdef CMS_R_UNSUPPORTED_TYPE - {"UNSUPPORTED_TYPE", ERR_LIB_CMS, CMS_R_UNSUPPORTED_TYPE}, - #else -@@ -1985,6 +2117,31 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"WRAP_ERROR", 46, 159}, - #endif -+ #ifdef COMP_R_BROTLI_DECODE_ERROR -+ {"BROTLI_DECODE_ERROR", ERR_LIB_COMP, COMP_R_BROTLI_DECODE_ERROR}, -+ #else -+ {"BROTLI_DECODE_ERROR", 41, 102}, -+ #endif -+ #ifdef COMP_R_BROTLI_DEFLATE_ERROR -+ {"BROTLI_DEFLATE_ERROR", ERR_LIB_COMP, COMP_R_BROTLI_DEFLATE_ERROR}, -+ #else -+ {"BROTLI_DEFLATE_ERROR", 41, 103}, -+ #endif -+ #ifdef COMP_R_BROTLI_ENCODE_ERROR -+ {"BROTLI_ENCODE_ERROR", ERR_LIB_COMP, COMP_R_BROTLI_ENCODE_ERROR}, -+ #else -+ {"BROTLI_ENCODE_ERROR", 41, 106}, -+ #endif -+ #ifdef COMP_R_BROTLI_INFLATE_ERROR -+ {"BROTLI_INFLATE_ERROR", ERR_LIB_COMP, COMP_R_BROTLI_INFLATE_ERROR}, -+ #else -+ {"BROTLI_INFLATE_ERROR", 41, 104}, -+ #endif -+ #ifdef COMP_R_BROTLI_NOT_SUPPORTED -+ {"BROTLI_NOT_SUPPORTED", ERR_LIB_COMP, COMP_R_BROTLI_NOT_SUPPORTED}, -+ #else -+ {"BROTLI_NOT_SUPPORTED", 41, 105}, -+ #endif - #ifdef COMP_R_ZLIB_DEFLATE_ERROR - {"ZLIB_DEFLATE_ERROR", ERR_LIB_COMP, COMP_R_ZLIB_DEFLATE_ERROR}, - #else -@@ -2000,6 +2157,26 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"ZLIB_NOT_SUPPORTED", 41, 101}, - #endif -+ #ifdef COMP_R_ZSTD_COMPRESS_ERROR -+ {"ZSTD_COMPRESS_ERROR", ERR_LIB_COMP, COMP_R_ZSTD_COMPRESS_ERROR}, -+ #else -+ {"ZSTD_COMPRESS_ERROR", 41, 107}, -+ #endif -+ #ifdef COMP_R_ZSTD_DECODE_ERROR -+ {"ZSTD_DECODE_ERROR", ERR_LIB_COMP, COMP_R_ZSTD_DECODE_ERROR}, -+ #else -+ {"ZSTD_DECODE_ERROR", 41, 108}, -+ #endif -+ #ifdef COMP_R_ZSTD_DECOMPRESS_ERROR -+ {"ZSTD_DECOMPRESS_ERROR", ERR_LIB_COMP, COMP_R_ZSTD_DECOMPRESS_ERROR}, -+ #else -+ {"ZSTD_DECOMPRESS_ERROR", 41, 109}, -+ #endif -+ #ifdef COMP_R_ZSTD_NOT_SUPPORTED -+ {"ZSTD_NOT_SUPPORTED", ERR_LIB_COMP, COMP_R_ZSTD_NOT_SUPPORTED}, -+ #else -+ {"ZSTD_NOT_SUPPORTED", 41, 110}, -+ #endif - #ifdef CONF_R_ERROR_LOADING_DSO - {"ERROR_LOADING_DSO", ERR_LIB_CONF, CONF_R_ERROR_LOADING_DSO}, - #else -@@ -2085,6 +2262,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"RECURSIVE_DIRECTORY_INCLUDE", 14, 111}, - #endif -+ #ifdef CONF_R_RECURSIVE_SECTION_REFERENCE -+ {"RECURSIVE_SECTION_REFERENCE", ERR_LIB_CONF, CONF_R_RECURSIVE_SECTION_REFERENCE}, -+ #else -+ {"RECURSIVE_SECTION_REFERENCE", 14, 126}, -+ #endif - #ifdef CONF_R_RELATIVE_PATH - {"RELATIVE_PATH", ERR_LIB_CONF, CONF_R_RELATIVE_PATH}, - #else -@@ -2370,6 +2552,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"TOO_MANY_BYTES", 15, 113}, - #endif -+ #ifdef CRYPTO_R_TOO_MANY_NAMES -+ {"TOO_MANY_NAMES", ERR_LIB_CRYPTO, CRYPTO_R_TOO_MANY_NAMES}, -+ #else -+ {"TOO_MANY_NAMES", 15, 132}, -+ #endif - #ifdef CRYPTO_R_TOO_MANY_RECORDS - {"TOO_MANY_RECORDS", ERR_LIB_CRYPTO, CRYPTO_R_TOO_MANY_RECORDS}, - #else -@@ -2560,6 +2747,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"INVALID_SECRET", 5, 128}, - #endif -+ #ifdef DH_R_INVALID_SIZE -+ {"INVALID_SIZE", ERR_LIB_DH, DH_R_INVALID_SIZE}, -+ #else -+ {"INVALID_SIZE", 5, 129}, -+ #endif - #ifdef DH_R_KDF_PARAMETER_ERROR - {"KDF_PARAMETER_ERROR", ERR_LIB_DH, DH_R_KDF_PARAMETER_ERROR}, - #else -@@ -2610,6 +2802,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"PEER_KEY_ERROR", 5, 111}, - #endif -+ #ifdef DH_R_Q_TOO_LARGE -+ {"Q_TOO_LARGE", ERR_LIB_DH, DH_R_Q_TOO_LARGE}, -+ #else -+ {"Q_TOO_LARGE", 5, 130}, -+ #endif - #ifdef DH_R_SHARED_INFO_ERROR - {"SHARED_INFO_ERROR", ERR_LIB_DH, DH_R_SHARED_INFO_ERROR}, - #else -@@ -3545,6 +3742,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"GENERATE_ERROR", 6, 214}, - #endif -+ #ifdef EVP_R_GETTING_ALGORITHMIDENTIFIER_NOT_SUPPORTED -+ {"GETTING_ALGORITHMIDENTIFIER_NOT_SUPPORTED", ERR_LIB_EVP, EVP_R_GETTING_ALGORITHMIDENTIFIER_NOT_SUPPORTED}, -+ #else -+ {"GETTING_ALGORITHMIDENTIFIER_NOT_SUPPORTED", 6, 229}, -+ #endif - #ifdef EVP_R_GET_RAW_KEY_FAILED - {"GET_RAW_KEY_FAILED", ERR_LIB_EVP, EVP_R_GET_RAW_KEY_FAILED}, - #else -@@ -3745,6 +3947,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE", 6, 150}, - #endif -+ #ifdef EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_SIGNATURE_TYPE -+ {"OPERATION_NOT_SUPPORTED_FOR_THIS_SIGNATURE_TYPE", ERR_LIB_EVP, EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_SIGNATURE_TYPE}, -+ #else -+ {"OPERATION_NOT_SUPPORTED_FOR_THIS_SIGNATURE_TYPE", 6, 226}, -+ #endif - #ifdef EVP_R_OUTPUT_WOULD_OVERFLOW - {"OUTPUT_WOULD_OVERFLOW", ERR_LIB_EVP, EVP_R_OUTPUT_WOULD_OVERFLOW}, - #else -@@ -3795,6 +4002,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"SET_DEFAULT_PROPERTY_FAILURE", 6, 209}, - #endif -+ #ifdef EVP_R_SIGNATURE_TYPE_AND_KEY_TYPE_INCOMPATIBLE -+ {"SIGNATURE_TYPE_AND_KEY_TYPE_INCOMPATIBLE", ERR_LIB_EVP, EVP_R_SIGNATURE_TYPE_AND_KEY_TYPE_INCOMPATIBLE}, -+ #else -+ {"SIGNATURE_TYPE_AND_KEY_TYPE_INCOMPATIBLE", 6, 228}, -+ #endif - #ifdef EVP_R_TOO_MANY_RECORDS - {"TOO_MANY_RECORDS", ERR_LIB_EVP, EVP_R_TOO_MANY_RECORDS}, - #else -@@ -3825,6 +4037,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"UNABLE_TO_SET_CALLBACKS", 6, 217}, - #endif -+ #ifdef EVP_R_UNKNOWN_BITS -+ {"UNKNOWN_BITS", ERR_LIB_EVP, EVP_R_UNKNOWN_BITS}, -+ #else -+ {"UNKNOWN_BITS", 6, 166}, -+ #endif - #ifdef EVP_R_UNKNOWN_CIPHER - {"UNKNOWN_CIPHER", ERR_LIB_EVP, EVP_R_UNKNOWN_CIPHER}, - #else -@@ -3840,6 +4057,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"UNKNOWN_KEY_TYPE", 6, 207}, - #endif -+ #ifdef EVP_R_UNKNOWN_MAX_SIZE -+ {"UNKNOWN_MAX_SIZE", ERR_LIB_EVP, EVP_R_UNKNOWN_MAX_SIZE}, -+ #else -+ {"UNKNOWN_MAX_SIZE", 6, 167}, -+ #endif - #ifdef EVP_R_UNKNOWN_OPTION - {"UNKNOWN_OPTION", ERR_LIB_EVP, EVP_R_UNKNOWN_OPTION}, - #else -@@ -3850,6 +4072,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"UNKNOWN_PBE_ALGORITHM", 6, 121}, - #endif -+ #ifdef EVP_R_UNKNOWN_SECURITY_BITS -+ {"UNKNOWN_SECURITY_BITS", ERR_LIB_EVP, EVP_R_UNKNOWN_SECURITY_BITS}, -+ #else -+ {"UNKNOWN_SECURITY_BITS", 6, 168}, -+ #endif - #ifdef EVP_R_UNSUPPORTED_ALGORITHM - {"UNSUPPORTED_ALGORITHM", ERR_LIB_EVP, EVP_R_UNSUPPORTED_ALGORITHM}, - #else -@@ -4040,6 +4267,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"RESPONSE_PARSE_ERROR", 61, 104}, - #endif -+ #ifdef HTTP_R_RESPONSE_TOO_MANY_HDRLINES -+ {"RESPONSE_TOO_MANY_HDRLINES", ERR_LIB_HTTP, HTTP_R_RESPONSE_TOO_MANY_HDRLINES}, -+ #else -+ {"RESPONSE_TOO_MANY_HDRLINES", 61, 130}, -+ #endif - #ifdef HTTP_R_RETRY_TIMEOUT - {"RETRY_TIMEOUT", ERR_LIB_HTTP, HTTP_R_RETRY_TIMEOUT}, - #else -@@ -4530,6 +4762,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"UNSUPPORTED_PUBLIC_KEY_TYPE", 9, 110}, - #endif -+ #ifdef PKCS12_R_CALLBACK_FAILED -+ {"CALLBACK_FAILED", ERR_LIB_PKCS12, PKCS12_R_CALLBACK_FAILED}, -+ #else -+ {"CALLBACK_FAILED", 35, 115}, -+ #endif - #ifdef PKCS12_R_CANT_PACK_STRUCTURE - {"CANT_PACK_STRUCTURE", ERR_LIB_PKCS12, PKCS12_R_CANT_PACK_STRUCTURE}, - #else -@@ -4920,6 +5157,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"CIPHER_OPERATION_FAILED", 57, 102}, - #endif -+ #ifdef PROV_R_COFACTOR_REQUIRED -+ {"COFACTOR_REQUIRED", ERR_LIB_PROV, PROV_R_COFACTOR_REQUIRED}, -+ #else -+ {"COFACTOR_REQUIRED", 57, 236}, -+ #endif - #ifdef PROV_R_DERIVATION_FUNCTION_INIT_FAILED - {"DERIVATION_FUNCTION_INIT_FAILED", ERR_LIB_PROV, PROV_R_DERIVATION_FUNCTION_INIT_FAILED}, - #else -@@ -4935,6 +5177,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"EMS_NOT_ENABLED", 57, 233}, - #endif -+ #ifdef PROV_R_ENTROPY_SOURCE_FAILED_CONTINUOUS_TESTS -+ {"ENTROPY_SOURCE_FAILED_CONTINUOUS_TESTS", ERR_LIB_PROV, PROV_R_ENTROPY_SOURCE_FAILED_CONTINUOUS_TESTS}, -+ #else -+ {"ENTROPY_SOURCE_FAILED_CONTINUOUS_TESTS", 57, 244}, -+ #endif - #ifdef PROV_R_ENTROPY_SOURCE_STRENGTH_TOO_WEAK - {"ENTROPY_SOURCE_STRENGTH_TOO_WEAK", ERR_LIB_PROV, PROV_R_ENTROPY_SOURCE_STRENGTH_TOO_WEAK}, - #else -@@ -4990,6 +5237,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"FAILED_TO_SIGN", 57, 175}, - #endif -+ #ifdef PROV_R_FINAL_CALL_OUT_OF_ORDER -+ {"FINAL_CALL_OUT_OF_ORDER", ERR_LIB_PROV, PROV_R_FINAL_CALL_OUT_OF_ORDER}, -+ #else -+ {"FINAL_CALL_OUT_OF_ORDER", 57, 237}, -+ #endif - #ifdef PROV_R_FIPS_MODULE_CONDITIONAL_ERROR - {"FIPS_MODULE_CONDITIONAL_ERROR", ERR_LIB_PROV, PROV_R_FIPS_MODULE_CONDITIONAL_ERROR}, - #else -@@ -5020,6 +5272,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"INDICATOR_INTEGRITY_FAILURE", 57, 210}, - #endif -+ #ifdef PROV_R_INIT_CALL_OUT_OF_ORDER -+ {"INIT_CALL_OUT_OF_ORDER", ERR_LIB_PROV, PROV_R_INIT_CALL_OUT_OF_ORDER}, -+ #else -+ {"INIT_CALL_OUT_OF_ORDER", 57, 238}, -+ #endif - #ifdef PROV_R_INSUFFICIENT_DRBG_STRENGTH - {"INSUFFICIENT_DRBG_STRENGTH", ERR_LIB_PROV, PROV_R_INSUFFICIENT_DRBG_STRENGTH}, - #else -@@ -5030,6 +5287,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"INVALID_AAD", 57, 108}, - #endif -+ #ifdef PROV_R_INVALID_AEAD -+ {"INVALID_AEAD", ERR_LIB_PROV, PROV_R_INVALID_AEAD}, -+ #else -+ {"INVALID_AEAD", 57, 231}, -+ #endif - #ifdef PROV_R_INVALID_CONFIG_DATA - {"INVALID_CONFIG_DATA", ERR_LIB_PROV, PROV_R_INVALID_CONFIG_DATA}, - #else -@@ -5070,6 +5332,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"INVALID_DIGEST_SIZE", 57, 218}, - #endif -+ #ifdef PROV_R_INVALID_EDDSA_INSTANCE_FOR_ATTEMPTED_OPERATION -+ {"INVALID_EDDSA_INSTANCE_FOR_ATTEMPTED_OPERATION", ERR_LIB_PROV, PROV_R_INVALID_EDDSA_INSTANCE_FOR_ATTEMPTED_OPERATION}, -+ #else -+ {"INVALID_EDDSA_INSTANCE_FOR_ATTEMPTED_OPERATION", 57, 243}, -+ #endif - #ifdef PROV_R_INVALID_INPUT_LENGTH - {"INVALID_INPUT_LENGTH", ERR_LIB_PROV, PROV_R_INVALID_INPUT_LENGTH}, - #else -@@ -5085,6 +5352,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"INVALID_IV_LENGTH", 57, 109}, - #endif -+ #ifdef PROV_R_INVALID_KDF -+ {"INVALID_KDF", ERR_LIB_PROV, PROV_R_INVALID_KDF}, -+ #else -+ {"INVALID_KDF", 57, 232}, -+ #endif - #ifdef PROV_R_INVALID_KEY - {"INVALID_KEY", ERR_LIB_PROV, PROV_R_INVALID_KEY}, - #else -@@ -5100,6 +5372,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"INVALID_MAC", 57, 151}, - #endif -+ #ifdef PROV_R_INVALID_MEMORY_SIZE -+ {"INVALID_MEMORY_SIZE", ERR_LIB_PROV, PROV_R_INVALID_MEMORY_SIZE}, -+ #else -+ {"INVALID_MEMORY_SIZE", 57, 235}, -+ #endif - #ifdef PROV_R_INVALID_MGF1_MD - {"INVALID_MGF1_MD", ERR_LIB_PROV, PROV_R_INVALID_MGF1_MD}, - #else -@@ -5120,6 +5397,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"INVALID_PADDING_MODE", 57, 168}, - #endif -+ #ifdef PROV_R_INVALID_PREHASHED_DIGEST_LENGTH -+ {"INVALID_PREHASHED_DIGEST_LENGTH", ERR_LIB_PROV, PROV_R_INVALID_PREHASHED_DIGEST_LENGTH}, -+ #else -+ {"INVALID_PREHASHED_DIGEST_LENGTH", 57, 241}, -+ #endif - #ifdef PROV_R_INVALID_PUBINFO - {"INVALID_PUBINFO", ERR_LIB_PROV, PROV_R_INVALID_PUBINFO}, - #else -@@ -5155,6 +5437,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"INVALID_TAG_LENGTH", 57, 118}, - #endif -+ #ifdef PROV_R_INVALID_THREAD_POOL_SIZE -+ {"INVALID_THREAD_POOL_SIZE", ERR_LIB_PROV, PROV_R_INVALID_THREAD_POOL_SIZE}, -+ #else -+ {"INVALID_THREAD_POOL_SIZE", 57, 234}, -+ #endif - #ifdef PROV_R_INVALID_UKM_LENGTH - {"INVALID_UKM_LENGTH", ERR_LIB_PROV, PROV_R_INVALID_UKM_LENGTH}, - #else -@@ -5300,6 +5587,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"NOT_XOF_OR_INVALID_LENGTH", 57, 113}, - #endif -+ #ifdef PROV_R_NO_INSTANCE_ALLOWED -+ {"NO_INSTANCE_ALLOWED", ERR_LIB_PROV, PROV_R_NO_INSTANCE_ALLOWED}, -+ #else -+ {"NO_INSTANCE_ALLOWED", 57, 242}, -+ #endif - #ifdef PROV_R_NO_KEY_SET - {"NO_KEY_SET", ERR_LIB_PROV, PROV_R_NO_KEY_SET}, - #else -@@ -5310,6 +5602,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"NO_PARAMETERS_SET", 57, 177}, - #endif -+ #ifdef PROV_R_ONESHOT_CALL_OUT_OF_ORDER -+ {"ONESHOT_CALL_OUT_OF_ORDER", ERR_LIB_PROV, PROV_R_ONESHOT_CALL_OUT_OF_ORDER}, -+ #else -+ {"ONESHOT_CALL_OUT_OF_ORDER", 57, 239}, -+ #endif - #ifdef PROV_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE - {"OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE", ERR_LIB_PROV, PROV_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE}, - #else -@@ -5460,6 +5757,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"UNSUPPORTED_NUMBER_OF_ROUNDS", 57, 152}, - #endif -+ #ifdef PROV_R_UPDATE_CALL_OUT_OF_ORDER -+ {"UPDATE_CALL_OUT_OF_ORDER", ERR_LIB_PROV, PROV_R_UPDATE_CALL_OUT_OF_ORDER}, -+ #else -+ {"UPDATE_CALL_OUT_OF_ORDER", 57, 240}, -+ #endif - #ifdef PROV_R_URI_AUTHORITY_UNSUPPORTED - {"URI_AUTHORITY_UNSUPPORTED", ERR_LIB_PROV, PROV_R_URI_AUTHORITY_UNSUPPORTED}, - #else -@@ -5595,6 +5897,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"INTERNAL_ERROR", 36, 113}, - #endif -+ #ifdef RAND_R_INVALID_PROPERTY_QUERY -+ {"INVALID_PROPERTY_QUERY", ERR_LIB_RAND, RAND_R_INVALID_PROPERTY_QUERY}, -+ #else -+ {"INVALID_PROPERTY_QUERY", 36, 137}, -+ #endif - #ifdef RAND_R_IN_ERROR_STATE - {"IN_ERROR_STATE", ERR_LIB_RAND, RAND_R_IN_ERROR_STATE}, - #else -@@ -6210,6 +6517,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"AT_LEAST_TLS_1_2_NEEDED_IN_SUITEB_MODE", 20, 158}, - #endif -+ #ifdef SSL_R_BAD_CERTIFICATE -+ {"BAD_CERTIFICATE", ERR_LIB_SSL, SSL_R_BAD_CERTIFICATE}, -+ #else -+ {"BAD_CERTIFICATE", 20, 348}, -+ #endif - #ifdef SSL_R_BAD_CHANGE_CIPHER_SPEC - {"BAD_CHANGE_CIPHER_SPEC", ERR_LIB_SSL, SSL_R_BAD_CHANGE_CIPHER_SPEC}, - #else -@@ -6220,6 +6532,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"BAD_CIPHER", 20, 186}, - #endif -+ #ifdef SSL_R_BAD_COMPRESSION_ALGORITHM -+ {"BAD_COMPRESSION_ALGORITHM", ERR_LIB_SSL, SSL_R_BAD_COMPRESSION_ALGORITHM}, -+ #else -+ {"BAD_COMPRESSION_ALGORITHM", 20, 326}, -+ #endif - #ifdef SSL_R_BAD_DATA - {"BAD_DATA", ERR_LIB_SSL, SSL_R_BAD_DATA}, - #else -@@ -6495,6 +6812,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"CONNECTION_TYPE_NOT_SET", 20, 144}, - #endif -+ #ifdef SSL_R_CONN_USE_ONLY -+ {"CONN_USE_ONLY", ERR_LIB_SSL, SSL_R_CONN_USE_ONLY}, -+ #else -+ {"CONN_USE_ONLY", 20, 356}, -+ #endif - #ifdef SSL_R_CONTEXT_NOT_DANE_ENABLED - {"CONTEXT_NOT_DANE_ENABLED", ERR_LIB_SSL, SSL_R_CONTEXT_NOT_DANE_ENABLED}, - #else -@@ -6635,6 +6957,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"EE_KEY_TOO_SMALL", 20, 399}, - #endif -+ #ifdef SSL_R_EMPTY_RAW_PUBLIC_KEY -+ {"EMPTY_RAW_PUBLIC_KEY", ERR_LIB_SSL, SSL_R_EMPTY_RAW_PUBLIC_KEY}, -+ #else -+ {"EMPTY_RAW_PUBLIC_KEY", 20, 349}, -+ #endif - #ifdef SSL_R_EMPTY_SRTP_PROTECTION_PROFILE_LIST - {"EMPTY_SRTP_PROTECTION_PROFILE_LIST", ERR_LIB_SSL, SSL_R_EMPTY_SRTP_PROTECTION_PROFILE_LIST}, - #else -@@ -6650,6 +6977,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"ERROR_IN_RECEIVED_CIPHER_LIST", 20, 151}, - #endif -+ #ifdef SSL_R_ERROR_IN_SYSTEM_DEFAULT_CONFIG -+ {"ERROR_IN_SYSTEM_DEFAULT_CONFIG", ERR_LIB_SSL, SSL_R_ERROR_IN_SYSTEM_DEFAULT_CONFIG}, -+ #else -+ {"ERROR_IN_SYSTEM_DEFAULT_CONFIG", 20, 419}, -+ #endif - #ifdef SSL_R_ERROR_SETTING_TLSA_BASE_DOMAIN - {"ERROR_SETTING_TLSA_BASE_DOMAIN", ERR_LIB_SSL, SSL_R_ERROR_SETTING_TLSA_BASE_DOMAIN}, - #else -@@ -6680,11 +7012,26 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"EXT_LENGTH_MISMATCH", 20, 163}, - #endif -+ #ifdef SSL_R_FAILED_TO_GET_PARAMETER -+ {"FAILED_TO_GET_PARAMETER", ERR_LIB_SSL, SSL_R_FAILED_TO_GET_PARAMETER}, -+ #else -+ {"FAILED_TO_GET_PARAMETER", 20, 316}, -+ #endif - #ifdef SSL_R_FAILED_TO_INIT_ASYNC - {"FAILED_TO_INIT_ASYNC", ERR_LIB_SSL, SSL_R_FAILED_TO_INIT_ASYNC}, - #else - {"FAILED_TO_INIT_ASYNC", 20, 405}, - #endif -+ #ifdef SSL_R_FEATURE_NEGOTIATION_NOT_COMPLETE -+ {"FEATURE_NEGOTIATION_NOT_COMPLETE", ERR_LIB_SSL, SSL_R_FEATURE_NEGOTIATION_NOT_COMPLETE}, -+ #else -+ {"FEATURE_NEGOTIATION_NOT_COMPLETE", 20, 417}, -+ #endif -+ #ifdef SSL_R_FEATURE_NOT_RENEGOTIABLE -+ {"FEATURE_NOT_RENEGOTIABLE", ERR_LIB_SSL, SSL_R_FEATURE_NOT_RENEGOTIABLE}, -+ #else -+ {"FEATURE_NOT_RENEGOTIABLE", 20, 413}, -+ #endif - #ifdef SSL_R_FRAGMENTED_CLIENT_HELLO - {"FRAGMENTED_CLIENT_HELLO", ERR_LIB_SSL, SSL_R_FRAGMENTED_CLIENT_HELLO}, - #else -@@ -6805,6 +7152,16 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"INVALID_NULL_CMD_NAME", 20, 385}, - #endif -+ #ifdef SSL_R_INVALID_RAW_PUBLIC_KEY -+ {"INVALID_RAW_PUBLIC_KEY", ERR_LIB_SSL, SSL_R_INVALID_RAW_PUBLIC_KEY}, -+ #else -+ {"INVALID_RAW_PUBLIC_KEY", 20, 350}, -+ #endif -+ #ifdef SSL_R_INVALID_RECORD -+ {"INVALID_RECORD", ERR_LIB_SSL, SSL_R_INVALID_RECORD}, -+ #else -+ {"INVALID_RECORD", 20, 317}, -+ #endif - #ifdef SSL_R_INVALID_SEQUENCE_NUMBER - {"INVALID_SEQUENCE_NUMBER", ERR_LIB_SSL, SSL_R_INVALID_SEQUENCE_NUMBER}, - #else -@@ -6865,6 +7222,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"LIBRARY_HAS_NO_CIPHERS", 20, 161}, - #endif -+ #ifdef SSL_R_MAXIMUM_ENCRYPTED_PKTS_REACHED -+ {"MAXIMUM_ENCRYPTED_PKTS_REACHED", ERR_LIB_SSL, SSL_R_MAXIMUM_ENCRYPTED_PKTS_REACHED}, -+ #else -+ {"MAXIMUM_ENCRYPTED_PKTS_REACHED", 20, 395}, -+ #endif - #ifdef SSL_R_MISSING_DSA_SIGNING_CERT - {"MISSING_DSA_SIGNING_CERT", ERR_LIB_SSL, SSL_R_MISSING_DSA_SIGNING_CERT}, - #else -@@ -6925,6 +7287,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"MISSING_SUPPORTED_GROUPS_EXTENSION", 20, 209}, - #endif -+ #ifdef SSL_R_MISSING_SUPPORTED_VERSIONS_EXTENSION -+ {"MISSING_SUPPORTED_VERSIONS_EXTENSION", ERR_LIB_SSL, SSL_R_MISSING_SUPPORTED_VERSIONS_EXTENSION}, -+ #else -+ {"MISSING_SUPPORTED_VERSIONS_EXTENSION", 20, 420}, -+ #endif - #ifdef SSL_R_MISSING_TMP_DH_KEY - {"MISSING_TMP_DH_KEY", ERR_LIB_SSL, SSL_R_MISSING_TMP_DH_KEY}, - #else -@@ -7065,6 +7432,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"NO_SRTP_PROFILES", 20, 359}, - #endif -+ #ifdef SSL_R_NO_STREAM -+ {"NO_STREAM", ERR_LIB_SSL, SSL_R_NO_STREAM}, -+ #else -+ {"NO_STREAM", 20, 355}, -+ #endif - #ifdef SSL_R_NO_SUITABLE_DIGEST_ALGORITHM - {"NO_SUITABLE_DIGEST_ALGORITHM", ERR_LIB_SSL, SSL_R_NO_SUITABLE_DIGEST_ALGORITHM}, - #else -@@ -7080,6 +7452,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"NO_SUITABLE_KEY_SHARE", 20, 101}, - #endif -+ #ifdef SSL_R_NO_SUITABLE_RECORD_LAYER -+ {"NO_SUITABLE_RECORD_LAYER", ERR_LIB_SSL, SSL_R_NO_SUITABLE_RECORD_LAYER}, -+ #else -+ {"NO_SUITABLE_RECORD_LAYER", 20, 322}, -+ #endif - #ifdef SSL_R_NO_SUITABLE_SIGNATURE_ALGORITHM - {"NO_SUITABLE_SIGNATURE_ALGORITHM", ERR_LIB_SSL, SSL_R_NO_SUITABLE_SIGNATURE_ALGORITHM}, - #else -@@ -7160,6 +7537,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"PIPELINE_FAILURE", 20, 406}, - #endif -+ #ifdef SSL_R_POLL_REQUEST_NOT_SUPPORTED -+ {"POLL_REQUEST_NOT_SUPPORTED", ERR_LIB_SSL, SSL_R_POLL_REQUEST_NOT_SUPPORTED}, -+ #else -+ {"POLL_REQUEST_NOT_SUPPORTED", 20, 418}, -+ #endif - #ifdef SSL_R_POST_HANDSHAKE_AUTH_ENCODING_ERR - {"POST_HANDSHAKE_AUTH_ENCODING_ERR", ERR_LIB_SSL, SSL_R_POST_HANDSHAKE_AUTH_ENCODING_ERR}, - #else -@@ -7190,6 +7572,21 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"PSK_NO_SERVER_CB", 20, 225}, - #endif -+ #ifdef SSL_R_QUIC_HANDSHAKE_LAYER_ERROR -+ {"QUIC_HANDSHAKE_LAYER_ERROR", ERR_LIB_SSL, SSL_R_QUIC_HANDSHAKE_LAYER_ERROR}, -+ #else -+ {"QUIC_HANDSHAKE_LAYER_ERROR", 20, 393}, -+ #endif -+ #ifdef SSL_R_QUIC_NETWORK_ERROR -+ {"QUIC_NETWORK_ERROR", ERR_LIB_SSL, SSL_R_QUIC_NETWORK_ERROR}, -+ #else -+ {"QUIC_NETWORK_ERROR", 20, 387}, -+ #endif -+ #ifdef SSL_R_QUIC_PROTOCOL_ERROR -+ {"QUIC_PROTOCOL_ERROR", ERR_LIB_SSL, SSL_R_QUIC_PROTOCOL_ERROR}, -+ #else -+ {"QUIC_PROTOCOL_ERROR", 20, 382}, -+ #endif - #ifdef SSL_R_READ_BIO_NOT_SET - {"READ_BIO_NOT_SET", ERR_LIB_SSL, SSL_R_READ_BIO_NOT_SET}, - #else -@@ -7200,6 +7597,16 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"READ_TIMEOUT_EXPIRED", 20, 312}, - #endif -+ #ifdef SSL_R_RECORDS_NOT_RELEASED -+ {"RECORDS_NOT_RELEASED", ERR_LIB_SSL, SSL_R_RECORDS_NOT_RELEASED}, -+ #else -+ {"RECORDS_NOT_RELEASED", 20, 321}, -+ #endif -+ #ifdef SSL_R_RECORD_LAYER_FAILURE -+ {"RECORD_LAYER_FAILURE", ERR_LIB_SSL, SSL_R_RECORD_LAYER_FAILURE}, -+ #else -+ {"RECORD_LAYER_FAILURE", 20, 313}, -+ #endif - #ifdef SSL_R_RECORD_LENGTH_MISMATCH - {"RECORD_LENGTH_MISMATCH", ERR_LIB_SSL, SSL_R_RECORD_LENGTH_MISMATCH}, - #else -@@ -7210,6 +7617,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"RECORD_TOO_SMALL", 20, 298}, - #endif -+ #ifdef SSL_R_REMOTE_PEER_ADDRESS_NOT_SET -+ {"REMOTE_PEER_ADDRESS_NOT_SET", ERR_LIB_SSL, SSL_R_REMOTE_PEER_ADDRESS_NOT_SET}, -+ #else -+ {"REMOTE_PEER_ADDRESS_NOT_SET", 20, 346}, -+ #endif - #ifdef SSL_R_RENEGOTIATE_EXT_TOO_LONG - {"RENEGOTIATE_EXT_TOO_LONG", ERR_LIB_SSL, SSL_R_RENEGOTIATE_EXT_TOO_LONG}, - #else -@@ -7255,6 +7667,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"SCT_VERIFICATION_FAILED", 20, 208}, - #endif -+ #ifdef SSL_R_SEQUENCE_CTR_WRAPPED -+ {"SEQUENCE_CTR_WRAPPED", ERR_LIB_SSL, SSL_R_SEQUENCE_CTR_WRAPPED}, -+ #else -+ {"SEQUENCE_CTR_WRAPPED", 20, 327}, -+ #endif - #ifdef SSL_R_SERVERHELLO_TLSEXT - {"SERVERHELLO_TLSEXT", ERR_LIB_SSL, SSL_R_SERVERHELLO_TLSEXT}, - #else -@@ -7325,6 +7742,16 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"SSLV3_ALERT_BAD_CERTIFICATE", 20, 1042}, - #endif -+ #ifdef SSL_R_SSLV3_ALERT_BAD_CERTIFICATE -+ {"SSLV3_ALERT_BAD_CERTIFICATE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_BAD_CERTIFICATE}, -+ #else -+ {"SSLV3_ALERT_BAD_CERTIFICATE", 20, 1042}, -+ #endif -+ #ifdef SSL_R_SSLV3_ALERT_BAD_RECORD_MAC -+ {"SSLV3_ALERT_BAD_RECORD_MAC", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_BAD_RECORD_MAC}, -+ #else -+ {"SSLV3_ALERT_BAD_RECORD_MAC", 20, 1020}, -+ #endif - #ifdef SSL_R_SSLV3_ALERT_BAD_RECORD_MAC - {"SSLV3_ALERT_BAD_RECORD_MAC", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_BAD_RECORD_MAC}, - #else -@@ -7335,11 +7762,26 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"SSLV3_ALERT_CERTIFICATE_EXPIRED", 20, 1045}, - #endif -+ #ifdef SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED -+ {"SSLV3_ALERT_CERTIFICATE_EXPIRED", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED}, -+ #else -+ {"SSLV3_ALERT_CERTIFICATE_EXPIRED", 20, 1045}, -+ #endif - #ifdef SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED - {"SSLV3_ALERT_CERTIFICATE_REVOKED", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED}, - #else - {"SSLV3_ALERT_CERTIFICATE_REVOKED", 20, 1044}, - #endif -+ #ifdef SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED -+ {"SSLV3_ALERT_CERTIFICATE_REVOKED", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED}, -+ #else -+ {"SSLV3_ALERT_CERTIFICATE_REVOKED", 20, 1044}, -+ #endif -+ #ifdef SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN -+ {"SSLV3_ALERT_CERTIFICATE_UNKNOWN", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN}, -+ #else -+ {"SSLV3_ALERT_CERTIFICATE_UNKNOWN", 20, 1046}, -+ #endif - #ifdef SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN - {"SSLV3_ALERT_CERTIFICATE_UNKNOWN", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN}, - #else -@@ -7350,6 +7792,16 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"SSLV3_ALERT_DECOMPRESSION_FAILURE", 20, 1030}, - #endif -+ #ifdef SSL_R_SSLV3_ALERT_DECOMPRESSION_FAILURE -+ {"SSLV3_ALERT_DECOMPRESSION_FAILURE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_DECOMPRESSION_FAILURE}, -+ #else -+ {"SSLV3_ALERT_DECOMPRESSION_FAILURE", 20, 1030}, -+ #endif -+ #ifdef SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE -+ {"SSLV3_ALERT_HANDSHAKE_FAILURE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE}, -+ #else -+ {"SSLV3_ALERT_HANDSHAKE_FAILURE", 20, 1040}, -+ #endif - #ifdef SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE - {"SSLV3_ALERT_HANDSHAKE_FAILURE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE}, - #else -@@ -7360,11 +7812,26 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"SSLV3_ALERT_ILLEGAL_PARAMETER", 20, 1047}, - #endif -+ #ifdef SSL_R_SSLV3_ALERT_ILLEGAL_PARAMETER -+ {"SSLV3_ALERT_ILLEGAL_PARAMETER", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_ILLEGAL_PARAMETER}, -+ #else -+ {"SSLV3_ALERT_ILLEGAL_PARAMETER", 20, 1047}, -+ #endif - #ifdef SSL_R_SSLV3_ALERT_NO_CERTIFICATE - {"SSLV3_ALERT_NO_CERTIFICATE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_NO_CERTIFICATE}, - #else - {"SSLV3_ALERT_NO_CERTIFICATE", 20, 1041}, - #endif -+ #ifdef SSL_R_SSLV3_ALERT_NO_CERTIFICATE -+ {"SSLV3_ALERT_NO_CERTIFICATE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_NO_CERTIFICATE}, -+ #else -+ {"SSLV3_ALERT_NO_CERTIFICATE", 20, 1041}, -+ #endif -+ #ifdef SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE -+ {"SSLV3_ALERT_UNEXPECTED_MESSAGE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE}, -+ #else -+ {"SSLV3_ALERT_UNEXPECTED_MESSAGE", 20, 1010}, -+ #endif - #ifdef SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE - {"SSLV3_ALERT_UNEXPECTED_MESSAGE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE}, - #else -@@ -7375,6 +7842,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"SSLV3_ALERT_UNSUPPORTED_CERTIFICATE", 20, 1043}, - #endif -+ #ifdef SSL_R_SSLV3_ALERT_UNSUPPORTED_CERTIFICATE -+ {"SSLV3_ALERT_UNSUPPORTED_CERTIFICATE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_UNSUPPORTED_CERTIFICATE}, -+ #else -+ {"SSLV3_ALERT_UNSUPPORTED_CERTIFICATE", 20, 1043}, -+ #endif - #ifdef SSL_R_SSL_COMMAND_SECTION_EMPTY - {"SSL_COMMAND_SECTION_EMPTY", ERR_LIB_SSL, SSL_R_SSL_COMMAND_SECTION_EMPTY}, - #else -@@ -7450,6 +7922,36 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"STILL_IN_INIT", 20, 121}, - #endif -+ #ifdef SSL_R_STREAM_COUNT_LIMITED -+ {"STREAM_COUNT_LIMITED", ERR_LIB_SSL, SSL_R_STREAM_COUNT_LIMITED}, -+ #else -+ {"STREAM_COUNT_LIMITED", 20, 411}, -+ #endif -+ #ifdef SSL_R_STREAM_FINISHED -+ {"STREAM_FINISHED", ERR_LIB_SSL, SSL_R_STREAM_FINISHED}, -+ #else -+ {"STREAM_FINISHED", 20, 365}, -+ #endif -+ #ifdef SSL_R_STREAM_RECV_ONLY -+ {"STREAM_RECV_ONLY", ERR_LIB_SSL, SSL_R_STREAM_RECV_ONLY}, -+ #else -+ {"STREAM_RECV_ONLY", 20, 366}, -+ #endif -+ #ifdef SSL_R_STREAM_RESET -+ {"STREAM_RESET", ERR_LIB_SSL, SSL_R_STREAM_RESET}, -+ #else -+ {"STREAM_RESET", 20, 375}, -+ #endif -+ #ifdef SSL_R_STREAM_SEND_ONLY -+ {"STREAM_SEND_ONLY", ERR_LIB_SSL, SSL_R_STREAM_SEND_ONLY}, -+ #else -+ {"STREAM_SEND_ONLY", 20, 379}, -+ #endif -+ #ifdef SSL_R_TLSV13_ALERT_CERTIFICATE_REQUIRED -+ {"TLSV13_ALERT_CERTIFICATE_REQUIRED", ERR_LIB_SSL, SSL_R_TLSV13_ALERT_CERTIFICATE_REQUIRED}, -+ #else -+ {"TLSV13_ALERT_CERTIFICATE_REQUIRED", 20, 1116}, -+ #endif - #ifdef SSL_R_TLSV13_ALERT_CERTIFICATE_REQUIRED - {"TLSV13_ALERT_CERTIFICATE_REQUIRED", ERR_LIB_SSL, SSL_R_TLSV13_ALERT_CERTIFICATE_REQUIRED}, - #else -@@ -7460,6 +7962,16 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"TLSV13_ALERT_MISSING_EXTENSION", 20, 1109}, - #endif -+ #ifdef SSL_R_TLSV13_ALERT_MISSING_EXTENSION -+ {"TLSV13_ALERT_MISSING_EXTENSION", ERR_LIB_SSL, SSL_R_TLSV13_ALERT_MISSING_EXTENSION}, -+ #else -+ {"TLSV13_ALERT_MISSING_EXTENSION", 20, 1109}, -+ #endif -+ #ifdef SSL_R_TLSV1_ALERT_ACCESS_DENIED -+ {"TLSV1_ALERT_ACCESS_DENIED", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_ACCESS_DENIED}, -+ #else -+ {"TLSV1_ALERT_ACCESS_DENIED", 20, 1049}, -+ #endif - #ifdef SSL_R_TLSV1_ALERT_ACCESS_DENIED - {"TLSV1_ALERT_ACCESS_DENIED", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_ACCESS_DENIED}, - #else -@@ -7470,6 +7982,16 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"TLSV1_ALERT_DECODE_ERROR", 20, 1050}, - #endif -+ #ifdef SSL_R_TLSV1_ALERT_DECODE_ERROR -+ {"TLSV1_ALERT_DECODE_ERROR", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_DECODE_ERROR}, -+ #else -+ {"TLSV1_ALERT_DECODE_ERROR", 20, 1050}, -+ #endif -+ #ifdef SSL_R_TLSV1_ALERT_DECRYPTION_FAILED -+ {"TLSV1_ALERT_DECRYPTION_FAILED", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_DECRYPTION_FAILED}, -+ #else -+ {"TLSV1_ALERT_DECRYPTION_FAILED", 20, 1021}, -+ #endif - #ifdef SSL_R_TLSV1_ALERT_DECRYPTION_FAILED - {"TLSV1_ALERT_DECRYPTION_FAILED", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_DECRYPTION_FAILED}, - #else -@@ -7480,6 +8002,16 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"TLSV1_ALERT_DECRYPT_ERROR", 20, 1051}, - #endif -+ #ifdef SSL_R_TLSV1_ALERT_DECRYPT_ERROR -+ {"TLSV1_ALERT_DECRYPT_ERROR", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_DECRYPT_ERROR}, -+ #else -+ {"TLSV1_ALERT_DECRYPT_ERROR", 20, 1051}, -+ #endif -+ #ifdef SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION -+ {"TLSV1_ALERT_EXPORT_RESTRICTION", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION}, -+ #else -+ {"TLSV1_ALERT_EXPORT_RESTRICTION", 20, 1060}, -+ #endif - #ifdef SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION - {"TLSV1_ALERT_EXPORT_RESTRICTION", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION}, - #else -@@ -7490,6 +8022,16 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"TLSV1_ALERT_INAPPROPRIATE_FALLBACK", 20, 1086}, - #endif -+ #ifdef SSL_R_TLSV1_ALERT_INAPPROPRIATE_FALLBACK -+ {"TLSV1_ALERT_INAPPROPRIATE_FALLBACK", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_INAPPROPRIATE_FALLBACK}, -+ #else -+ {"TLSV1_ALERT_INAPPROPRIATE_FALLBACK", 20, 1086}, -+ #endif -+ #ifdef SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY -+ {"TLSV1_ALERT_INSUFFICIENT_SECURITY", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY}, -+ #else -+ {"TLSV1_ALERT_INSUFFICIENT_SECURITY", 20, 1071}, -+ #endif - #ifdef SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY - {"TLSV1_ALERT_INSUFFICIENT_SECURITY", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY}, - #else -@@ -7500,6 +8042,26 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"TLSV1_ALERT_INTERNAL_ERROR", 20, 1080}, - #endif -+ #ifdef SSL_R_TLSV1_ALERT_INTERNAL_ERROR -+ {"TLSV1_ALERT_INTERNAL_ERROR", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_INTERNAL_ERROR}, -+ #else -+ {"TLSV1_ALERT_INTERNAL_ERROR", 20, 1080}, -+ #endif -+ #ifdef SSL_R_TLSV1_ALERT_NO_APPLICATION_PROTOCOL -+ {"TLSV1_ALERT_NO_APPLICATION_PROTOCOL", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_NO_APPLICATION_PROTOCOL}, -+ #else -+ {"TLSV1_ALERT_NO_APPLICATION_PROTOCOL", 20, 1120}, -+ #endif -+ #ifdef SSL_R_TLSV1_ALERT_NO_APPLICATION_PROTOCOL -+ {"TLSV1_ALERT_NO_APPLICATION_PROTOCOL", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_NO_APPLICATION_PROTOCOL}, -+ #else -+ {"TLSV1_ALERT_NO_APPLICATION_PROTOCOL", 20, 1120}, -+ #endif -+ #ifdef SSL_R_TLSV1_ALERT_NO_RENEGOTIATION -+ {"TLSV1_ALERT_NO_RENEGOTIATION", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_NO_RENEGOTIATION}, -+ #else -+ {"TLSV1_ALERT_NO_RENEGOTIATION", 20, 1100}, -+ #endif - #ifdef SSL_R_TLSV1_ALERT_NO_RENEGOTIATION - {"TLSV1_ALERT_NO_RENEGOTIATION", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_NO_RENEGOTIATION}, - #else -@@ -7510,21 +8072,56 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"TLSV1_ALERT_PROTOCOL_VERSION", 20, 1070}, - #endif -+ #ifdef SSL_R_TLSV1_ALERT_PROTOCOL_VERSION -+ {"TLSV1_ALERT_PROTOCOL_VERSION", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_PROTOCOL_VERSION}, -+ #else -+ {"TLSV1_ALERT_PROTOCOL_VERSION", 20, 1070}, -+ #endif - #ifdef SSL_R_TLSV1_ALERT_RECORD_OVERFLOW - {"TLSV1_ALERT_RECORD_OVERFLOW", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_RECORD_OVERFLOW}, - #else - {"TLSV1_ALERT_RECORD_OVERFLOW", 20, 1022}, - #endif -+ #ifdef SSL_R_TLSV1_ALERT_RECORD_OVERFLOW -+ {"TLSV1_ALERT_RECORD_OVERFLOW", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_RECORD_OVERFLOW}, -+ #else -+ {"TLSV1_ALERT_RECORD_OVERFLOW", 20, 1022}, -+ #endif -+ #ifdef SSL_R_TLSV1_ALERT_UNKNOWN_CA -+ {"TLSV1_ALERT_UNKNOWN_CA", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_UNKNOWN_CA}, -+ #else -+ {"TLSV1_ALERT_UNKNOWN_CA", 20, 1048}, -+ #endif - #ifdef SSL_R_TLSV1_ALERT_UNKNOWN_CA - {"TLSV1_ALERT_UNKNOWN_CA", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_UNKNOWN_CA}, - #else - {"TLSV1_ALERT_UNKNOWN_CA", 20, 1048}, - #endif -+ #ifdef SSL_R_TLSV1_ALERT_UNKNOWN_PSK_IDENTITY -+ {"TLSV1_ALERT_UNKNOWN_PSK_IDENTITY", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_UNKNOWN_PSK_IDENTITY}, -+ #else -+ {"TLSV1_ALERT_UNKNOWN_PSK_IDENTITY", 20, 1115}, -+ #endif -+ #ifdef SSL_R_TLSV1_ALERT_UNKNOWN_PSK_IDENTITY -+ {"TLSV1_ALERT_UNKNOWN_PSK_IDENTITY", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_UNKNOWN_PSK_IDENTITY}, -+ #else -+ {"TLSV1_ALERT_UNKNOWN_PSK_IDENTITY", 20, 1115}, -+ #endif - #ifdef SSL_R_TLSV1_ALERT_USER_CANCELLED - {"TLSV1_ALERT_USER_CANCELLED", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_USER_CANCELLED}, - #else - {"TLSV1_ALERT_USER_CANCELLED", 20, 1090}, - #endif -+ #ifdef SSL_R_TLSV1_ALERT_USER_CANCELLED -+ {"TLSV1_ALERT_USER_CANCELLED", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_USER_CANCELLED}, -+ #else -+ {"TLSV1_ALERT_USER_CANCELLED", 20, 1090}, -+ #endif -+ #ifdef SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE -+ {"TLSV1_BAD_CERTIFICATE_HASH_VALUE", ERR_LIB_SSL, SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE}, -+ #else -+ {"TLSV1_BAD_CERTIFICATE_HASH_VALUE", 20, 1114}, -+ #endif - #ifdef SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE - {"TLSV1_BAD_CERTIFICATE_HASH_VALUE", ERR_LIB_SSL, SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE}, - #else -@@ -7535,6 +8132,16 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE", 20, 1113}, - #endif -+ #ifdef SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE -+ {"TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE", ERR_LIB_SSL, SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE}, -+ #else -+ {"TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE", 20, 1113}, -+ #endif -+ #ifdef SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE -+ {"TLSV1_CERTIFICATE_UNOBTAINABLE", ERR_LIB_SSL, SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE}, -+ #else -+ {"TLSV1_CERTIFICATE_UNOBTAINABLE", 20, 1111}, -+ #endif - #ifdef SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE - {"TLSV1_CERTIFICATE_UNOBTAINABLE", ERR_LIB_SSL, SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE}, - #else -@@ -7545,6 +8152,16 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"TLSV1_UNRECOGNIZED_NAME", 20, 1112}, - #endif -+ #ifdef SSL_R_TLSV1_UNRECOGNIZED_NAME -+ {"TLSV1_UNRECOGNIZED_NAME", ERR_LIB_SSL, SSL_R_TLSV1_UNRECOGNIZED_NAME}, -+ #else -+ {"TLSV1_UNRECOGNIZED_NAME", 20, 1112}, -+ #endif -+ #ifdef SSL_R_TLSV1_UNSUPPORTED_EXTENSION -+ {"TLSV1_UNSUPPORTED_EXTENSION", ERR_LIB_SSL, SSL_R_TLSV1_UNSUPPORTED_EXTENSION}, -+ #else -+ {"TLSV1_UNSUPPORTED_EXTENSION", 20, 1110}, -+ #endif - #ifdef SSL_R_TLSV1_UNSUPPORTED_EXTENSION - {"TLSV1_UNSUPPORTED_EXTENSION", ERR_LIB_SSL, SSL_R_TLSV1_UNSUPPORTED_EXTENSION}, - #else -@@ -7665,6 +8282,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"UNKNOWN_KEY_EXCHANGE_TYPE", 20, 250}, - #endif -+ #ifdef SSL_R_UNKNOWN_MANDATORY_PARAMETER -+ {"UNKNOWN_MANDATORY_PARAMETER", ERR_LIB_SSL, SSL_R_UNKNOWN_MANDATORY_PARAMETER}, -+ #else -+ {"UNKNOWN_MANDATORY_PARAMETER", 20, 323}, -+ #endif - #ifdef SSL_R_UNKNOWN_PKEY_TYPE - {"UNKNOWN_PKEY_TYPE", ERR_LIB_SSL, SSL_R_UNKNOWN_PKEY_TYPE}, - #else -@@ -7700,6 +8322,21 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"UNSUPPORTED_COMPRESSION_ALGORITHM", 20, 257}, - #endif -+ #ifdef SSL_R_UNSUPPORTED_CONFIG_VALUE -+ {"UNSUPPORTED_CONFIG_VALUE", ERR_LIB_SSL, SSL_R_UNSUPPORTED_CONFIG_VALUE}, -+ #else -+ {"UNSUPPORTED_CONFIG_VALUE", 20, 414}, -+ #endif -+ #ifdef SSL_R_UNSUPPORTED_CONFIG_VALUE_CLASS -+ {"UNSUPPORTED_CONFIG_VALUE_CLASS", ERR_LIB_SSL, SSL_R_UNSUPPORTED_CONFIG_VALUE_CLASS}, -+ #else -+ {"UNSUPPORTED_CONFIG_VALUE_CLASS", 20, 415}, -+ #endif -+ #ifdef SSL_R_UNSUPPORTED_CONFIG_VALUE_OP -+ {"UNSUPPORTED_CONFIG_VALUE_OP", ERR_LIB_SSL, SSL_R_UNSUPPORTED_CONFIG_VALUE_OP}, -+ #else -+ {"UNSUPPORTED_CONFIG_VALUE_OP", 20, 416}, -+ #endif - #ifdef SSL_R_UNSUPPORTED_ELLIPTIC_CURVE - {"UNSUPPORTED_ELLIPTIC_CURVE", ERR_LIB_SSL, SSL_R_UNSUPPORTED_ELLIPTIC_CURVE}, - #else -@@ -7720,6 +8357,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"UNSUPPORTED_STATUS_TYPE", 20, 329}, - #endif -+ #ifdef SSL_R_UNSUPPORTED_WRITE_FLAG -+ {"UNSUPPORTED_WRITE_FLAG", ERR_LIB_SSL, SSL_R_UNSUPPORTED_WRITE_FLAG}, -+ #else -+ {"UNSUPPORTED_WRITE_FLAG", 20, 412}, -+ #endif - #ifdef SSL_R_USE_SRTP_NOT_NEGOTIATED - {"USE_SRTP_NOT_NEGOTIATED", ERR_LIB_SSL, SSL_R_USE_SRTP_NOT_NEGOTIATED}, - #else -@@ -7750,6 +8392,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"WRONG_CURVE", 20, 378}, - #endif -+ #ifdef SSL_R_WRONG_RPK_TYPE -+ {"WRONG_RPK_TYPE", ERR_LIB_SSL, SSL_R_WRONG_RPK_TYPE}, -+ #else -+ {"WRONG_RPK_TYPE", 20, 351}, -+ #endif - #ifdef SSL_R_WRONG_SIGNATURE_LENGTH - {"WRONG_SIGNATURE_LENGTH", ERR_LIB_SSL, SSL_R_WRONG_SIGNATURE_LENGTH}, - #else -@@ -8055,6 +8702,16 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"BAD_OBJECT", 34, 119}, - #endif -+ #ifdef X509V3_R_BAD_OPTION -+ {"BAD_OPTION", ERR_LIB_X509V3, X509V3_R_BAD_OPTION}, -+ #else -+ {"BAD_OPTION", 34, 170}, -+ #endif -+ #ifdef X509V3_R_BAD_VALUE -+ {"BAD_VALUE", ERR_LIB_X509V3, X509V3_R_BAD_VALUE}, -+ #else -+ {"BAD_VALUE", 34, 171}, -+ #endif - #ifdef X509V3_R_BN_DEC2BN_ERROR - {"BN_DEC2BN_ERROR", ERR_LIB_X509V3, X509V3_R_BN_DEC2BN_ERROR}, - #else -@@ -8370,6 +9027,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"UNKNOWN_OPTION", 34, 120}, - #endif -+ #ifdef X509V3_R_UNKNOWN_VALUE -+ {"UNKNOWN_VALUE", ERR_LIB_X509V3, X509V3_R_UNKNOWN_VALUE}, -+ #else -+ {"UNKNOWN_VALUE", 34, 172}, -+ #endif - #ifdef X509V3_R_UNSUPPORTED_OPTION - {"UNSUPPORTED_OPTION", ERR_LIB_X509V3, X509V3_R_UNSUPPORTED_OPTION}, - #else -@@ -8430,6 +9092,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"CRL_VERIFY_FAILURE", 11, 131}, - #endif -+ #ifdef X509_R_DUPLICATE_ATTRIBUTE -+ {"DUPLICATE_ATTRIBUTE", ERR_LIB_X509, X509_R_DUPLICATE_ATTRIBUTE}, -+ #else -+ {"DUPLICATE_ATTRIBUTE", 11, 140}, -+ #endif - #ifdef X509_R_ERROR_GETTING_MD_BY_NID - {"ERROR_GETTING_MD_BY_NID", ERR_LIB_X509, X509_R_ERROR_GETTING_MD_BY_NID}, - #else -@@ -8590,6 +9257,11 @@ static struct py_ssl_error_code error_codes[] = { - #else - {"UNSUPPORTED_ALGORITHM", 11, 111}, - #endif -+ #ifdef X509_R_UNSUPPORTED_VERSION -+ {"UNSUPPORTED_VERSION", ERR_LIB_X509, X509_R_UNSUPPORTED_VERSION}, -+ #else -+ {"UNSUPPORTED_VERSION", 11, 145}, -+ #endif - #ifdef X509_R_WRONG_LOOKUP_TYPE - {"WRONG_LOOKUP_TYPE", ERR_LIB_X509, X509_R_WRONG_LOOKUP_TYPE}, - #else -diff --git a/Tools/c-analyzer/cpython/_parser.py b/Tools/c-analyzer/cpython/_parser.py -index 21be53e7884..a08b32fa45d 100644 ---- a/Tools/c-analyzer/cpython/_parser.py -+++ b/Tools/c-analyzer/cpython/_parser.py -@@ -70,9 +70,7 @@ Python/thread_pthread.h - Python/thread_pthread_stubs.h - - # only huge constants (safe but parsing is slow) --Modules/_ssl_data_31.h --Modules/_ssl_data_300.h --Modules/_ssl_data_111.h -+Modules/_ssl_data_*.h - Modules/cjkcodecs/mappings_*.h - Modules/unicodedata_db.h - Modules/unicodename_db.h -diff --git a/Tools/ssl/make_ssl_data.py b/Tools/ssl/make_ssl_data.py -index 9860871..0cd05c7 100755 ---- a/Tools/ssl/make_ssl_data.py -+++ b/Tools/ssl/make_ssl_data.py -@@ -5,9 +5,28 @@ This script should be called *manually* when we want to upgrade SSLError - `library` and `reason` mnemonics to a more recent OpenSSL version. - - It takes two arguments: --- the path to the OpenSSL source tree (e.g. git checkout) -+- the path to the OpenSSL git checkout - - the path to the header file to be generated Modules/_ssl_data_{version}.h - - error codes are version specific -+ -+The OpenSSL git checkout should be at a specific tag, using commands like: -+ git tag --list 'openssl-*' -+ git switch --detach openssl-3.4.0 -+ -+ -+After generating the definitions, compare the result with newest pre-existing file. -+You can use a command like: -+ -+ git diff --no-index Modules/_ssl_data_31.h Modules/_ssl_data_34.h -+ -+- If the new version *only* adds new definitions, remove the pre-existing file -+ and adjust the #include in _ssl.c to point to the new version. -+- If the new version removes or renumbers some definitions, keep both files and -+ add a new #include in _ssl.c. -+ -+A newly supported OpenSSL version should also be added to: -+- Tools/ssl/multissltests.py -+- .github/workflows/build.yml - """ - - import argparse -@@ -16,6 +35,7 @@ import operator - import os - import re - import sys -+import subprocess - - - parser = argparse.ArgumentParser( -@@ -118,9 +138,17 @@ def main(): - # sort by libname, numeric error code - args.reasons = sorted(reasons, key=operator.itemgetter(0, 3)) - -+ git_describe = subprocess.run( -+ ['git', 'describe', '--long', '--dirty'], -+ cwd=args.srcdir, -+ capture_output=True, -+ encoding='utf-8', -+ check=True, -+ ) - lines = [ -- "/* File generated by Tools/ssl/make_ssl_data.py */" -- f"/* Generated on {datetime.datetime.utcnow().isoformat()} */" -+ "/* File generated by Tools/ssl/make_ssl_data.py */", -+ f"/* Generated on {datetime.datetime.now(datetime.UTC).isoformat()} */", -+ f"/* Generated from Git commit {git_describe.stdout.strip()} */", - ] - lines.extend(gen_library_codes(args)) - lines.append("") -diff --git a/Tools/ssl/multissltests.py b/Tools/ssl/multissltests.py -index eae0e0c..fb06f63 100755 ---- a/Tools/ssl/multissltests.py -+++ b/Tools/ssl/multissltests.py -@@ -51,6 +51,7 @@ OPENSSL_RECENT_VERSIONS = [ - "3.1.7", - "3.2.6", - "3.3.5", -+ "3.4.0", - ] - - LIBRESSL_OLD_VERSIONS = [ --- -2.30.2 - 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 deleted file mode 100644 index 84ad2abb0b..0000000000 --- a/meta/recipes-devtools/python/python3/0001-Lib-pty.py-handle-stdin-I-O-errors-same-way-as-maste.patch +++ /dev/null @@ -1,46 +0,0 @@ -From 129ee75863081d9e3418acca3df1e47667f671ad Mon Sep 17 00:00:00 2001 -From: Alexander Kanavin -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 ---- - 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-use-prefix-value-from-build-configu.patch b/meta/recipes-devtools/python/python3/0001-Lib-sysconfig.py-use-prefix-value-from-build-configu.patch deleted file mode 100644 index ffdf9affd9..0000000000 --- a/meta/recipes-devtools/python/python3/0001-Lib-sysconfig.py-use-prefix-value-from-build-configu.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 3f4f3e917950e286d5729ea949ca342995eb3c3e Mon Sep 17 00:00:00 2001 -From: Alexander Kanavin -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 ---- - Lib/sysconfig/__init__.py | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/Lib/sysconfig/__init__.py b/Lib/sysconfig/__init__.py -index f8e1c7d..0882526 100644 ---- a/Lib/sysconfig/__init__.py -+++ b/Lib/sysconfig/__init__.py -@@ -501,6 +501,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 deleted file mode 100644 index 39b62f6f26..0000000000 --- a/meta/recipes-devtools/python/python3/0001-Makefile.pre-use-qemu-wrapper-when-gathering-profile.patch +++ /dev/null @@ -1,33 +0,0 @@ -From e7a8a7385f561f214054cf95f0a22bfa064eee0b Mon Sep 17 00:00:00 2001 -From: Alexander Kanavin -Date: Wed, 30 Jan 2019 12:41:04 +0100 -Subject: [PATCH] Makefile.pre: use qemu wrapper when gathering profile data - -Upstream-Status: Inappropriate [oe-core specific] -Signed-off-by: Alexander Kanavin - -Update to remove test_types from the test list, since that fails under -qemu now. - -Signed-off-by: Trevor Gamblin ---- - Makefile.pre.in | 3 +-- - 1 file changed, 1 insertion(+), 2 deletions(-) - -diff --git a/Makefile.pre.in b/Makefile.pre.in -index 3bd4495f95b..8e8fc60bc76 100644 ---- a/Makefile.pre.in -+++ b/Makefile.pre.in -@@ -751,8 +751,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) -+ ./pgo-wrapper ./python -m test.regrtest --pgo test_grammar test_opcodes test_dict - $(LLVM_PROF_MERGER) - # Remove profile generation binary since we are done with it. - $(MAKE) clean-retain-profile --- -2.39.5 - 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 deleted file mode 100644 index 8fa794b5e7..0000000000 --- a/meta/recipes-devtools/python/python3/0001-Skip-failing-tests-due-to-load-variability-on-YP-AB.patch +++ /dev/null @@ -1,72 +0,0 @@ -From 8828a52ebace98199569404f01174398bcc64a00 Mon Sep 17 00:00:00 2001 -From: Yi Fan Yu -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 - -Skip two additional tests due to suspected load variability failures. - -[YOCTO #15131] -[YOCTO #15177] - -Signed-off-by: Trevor Gamblin ---- - 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 5dae370..23eb971 100644 ---- a/Lib/test/_test_multiprocessing.py -+++ b/Lib/test/_test_multiprocessing.py -@@ -701,6 +701,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)) -@@ -2232,6 +2233,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) -@@ -5320,6 +5322,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 293799f..1dbb623 100644 ---- a/Lib/test/test_time.py -+++ b/Lib/test/test_time.py -@@ -548,6 +548,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() -@@ -561,6 +562,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', 'android', '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 deleted file mode 100644 index adaca4ff77..0000000000 --- a/meta/recipes-devtools/python/python3/0001-Update-test_sysconfig-for-posix_user-purelib.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 5bf5aa6eae1fa3eed66893e51a1858ab481426b4 Mon Sep 17 00:00:00 2001 -From: Wentao Zhang -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 ---- - 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 1ade492..4e94889 100644 ---- a/Lib/test/test_sysconfig.py -+++ b/Lib/test/test_sysconfig.py -@@ -430,7 +430,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_abi = sysconfig._get_python_version_abi() 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 deleted file mode 100644 index 9bc8b091cc..0000000000 --- a/meta/recipes-devtools/python/python3/0001-skip-no_stdout_fileno-test-due-to-load-variability.patch +++ /dev/null @@ -1,29 +0,0 @@ -From c5bdd39f8ebc4e6c58a47d7e424eac028eddb4ff Mon Sep 17 00:00:00 2001 -From: Trevor Gamblin -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 ---- - 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 c5394de..ed17fb6 100644 ---- a/Lib/test/test_builtin.py -+++ b/Lib/test/test_builtin.py -@@ -2474,6 +2474,7 @@ class PtyTests(unittest.TestCase): - "byte 0xe9 in position 4: ordinal not in " - "range(128)") - -+ @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 deleted file mode 100644 index b9c68a98d7..0000000000 --- a/meta/recipes-devtools/python/python3/0001-sysconfig.py-use-platlibdir-also-for-purelib.patch +++ /dev/null @@ -1,27 +0,0 @@ -From bbcb17dc1ed283f41c8cd94d39f70898f0c45583 Mon Sep 17 00:00:00 2001 -From: Alexander Kanavin -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 ---- - Lib/sysconfig/__init__.py | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/Lib/sysconfig/__init__.py b/Lib/sysconfig/__init__.py -index 80aef34..f8e1c7d 100644 ---- a/Lib/sysconfig/__init__.py -+++ b/Lib/sysconfig/__init__.py -@@ -29,7 +29,7 @@ _INSTALL_SCHEMES = { - 'posix_prefix': { - 'stdlib': '{installed_base}/{platlibdir}/{implementation_lower}{py_version_short}{abi_thread}', - 'platstdlib': '{platbase}/{platlibdir}/{implementation_lower}{py_version_short}{abi_thread}', -- 'purelib': '{base}/lib/{implementation_lower}{py_version_short}{abi_thread}/site-packages', -+ 'purelib': '{base}/{platlibdir}/{implementation_lower}{py_version_short}{abi_thread}/site-packages', - 'platlib': '{platbase}/{platlibdir}/{implementation_lower}{py_version_short}{abi_thread}/site-packages', - 'include': - '{installed_base}/include/{implementation_lower}{py_version_short}{abiflags}', diff --git a/meta/recipes-devtools/python/python3/0001-test_active_children-skip-problematic-test.patch b/meta/recipes-devtools/python/python3/0001-test_active_children-skip-problematic-test.patch deleted file mode 100644 index 08ac5861b3..0000000000 --- a/meta/recipes-devtools/python/python3/0001-test_active_children-skip-problematic-test.patch +++ /dev/null @@ -1,27 +0,0 @@ -From 540765b148d942a2339affa6c0d11445e9d0f26c Mon Sep 17 00:00:00 2001 -From: Trevor Gamblin -Date: Thu, 13 Jun 2024 10:54:31 -0400 -Subject: [PATCH] test_active_children: skip problematic test - -This test is failing in some tests on the Autobuilder. Since it's of a -similar nature to other failing/hanging tests, disable it for now. - -Upstream-Status: Inappropriate [OE-Specific] - -Signed-off-by: Trevor Gamblin ---- - Lib/test/_test_multiprocessing.py | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/Lib/test/_test_multiprocessing.py b/Lib/test/_test_multiprocessing.py -index 23eb971..b1295b2 100644 ---- a/Lib/test/_test_multiprocessing.py -+++ b/Lib/test/_test_multiprocessing.py -@@ -594,6 +594,7 @@ class _TestProcess(BaseTestCase): - self.assertTrue(type(cpus) is int) - self.assertTrue(cpus >= 1) - -+ @unittest.skip("skipping problematic test") - def test_active_children(self): - self.assertEqual(type(self.active_children()), list) - 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 deleted file mode 100644 index 68e277d662..0000000000 --- a/meta/recipes-devtools/python/python3/0001-test_ctypes.test_find-skip-without-tools-sdk.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 0e9d0c58e77ef540d9601ce84a1aa79d9ce6ee9b Mon Sep 17 00:00:00 2001 -From: Tim Orling -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 ---- - 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 85b2861..b033203 100644 ---- a/Lib/test/test_ctypes/test_find.py -+++ b/Lib/test/test_ctypes/test_find.py -@@ -116,10 +116,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_deadlock-skip-problematic-test.patch b/meta/recipes-devtools/python/python3/0001-test_deadlock-skip-problematic-test.patch deleted file mode 100644 index 3336e2913a..0000000000 --- a/meta/recipes-devtools/python/python3/0001-test_deadlock-skip-problematic-test.patch +++ /dev/null @@ -1,27 +0,0 @@ -From 5a44f74549b32395109342e9299510c32db71068 Mon Sep 17 00:00:00 2001 -From: Trevor Gamblin -Date: Wed, 12 Jun 2024 10:29:03 -0400 -Subject: [PATCH] test_deadlock: skip problematic test - -This test hangs frequently when run on the Autobuilder. Disable it in -testing until the cause can be determined. - -Upstream-Status: Inappropriate [OE-Specific] - -Signed-off-by: Trevor Gamblin ---- - Lib/test/test_concurrent_futures/test_deadlock.py | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/Lib/test/test_concurrent_futures/test_deadlock.py b/Lib/test/test_concurrent_futures/test_deadlock.py -index 3c30c45..008d6c0 100644 ---- a/Lib/test/test_concurrent_futures/test_deadlock.py -+++ b/Lib/test/test_concurrent_futures/test_deadlock.py -@@ -90,6 +90,7 @@ class ErrorAtUnpickle(object): - return _raise_error_ignore_stderr, (UnpicklingError, ) - - -+@unittest.skip("skipping problematic test") - class ExecutorDeadlockTest: - TIMEOUT = support.LONG_TIMEOUT - 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 deleted file mode 100644 index 189246911b..0000000000 --- a/meta/recipes-devtools/python/python3/0001-test_locale.py-correct-the-test-output-format.patch +++ /dev/null @@ -1,45 +0,0 @@ -From c1f3cf625c0f011060ddaa2a4096f6aa13dd1ee6 Mon Sep 17 00:00:00 2001 -From: Mingli Yu -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 - -Signed-off-by: Mingli Yu ---- - 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 da4bd79..fd9e67d 100644 ---- a/Lib/test/test_locale.py -+++ b/Lib/test/test_locale.py -@@ -501,7 +501,7 @@ class TestRealLocales(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_readline-skip-limited-history-test.patch b/meta/recipes-devtools/python/python3/0001-test_readline-skip-limited-history-test.patch deleted file mode 100644 index a619d51c10..0000000000 --- a/meta/recipes-devtools/python/python3/0001-test_readline-skip-limited-history-test.patch +++ /dev/null @@ -1,46 +0,0 @@ -From 1a0a145261ba4f97aaff3c0c656ac2e0ad9695a8 Mon Sep 17 00:00:00 2001 -From: Trevor Gamblin -Date: Tue, 13 Aug 2024 11:07:05 -0400 -Subject: [PATCH] test_readline: skip limited history test - -This test was added recently and is failing on the ptest image when -using the default PACKAGECONFIG settings (i.e. with editline instead of -readline).. Disable it until the proper fix is determined. - -A bug has been opened upstream: https://github.com/python/cpython/issues/123018 - -Upstream-Status: Inappropriate [OE-specific] - -Signed-off-by: Trevor Gamblin ---- - Lib/test/test_readline.py | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/Lib/test/test_readline.py b/Lib/test/test_readline.py -index 537a9fb..ddf0323 100644 ---- a/Lib/test/test_readline.py -+++ b/Lib/test/test_readline.py -@@ -71,6 +71,7 @@ class TestHistoryManipulation (unittest.TestCase): - - @unittest.skipUnless(hasattr(readline, "append_history_file"), - "append_history not available") -+ @unittest.skip("Skipping problematic test") - def test_write_read_append(self): - hfile = tempfile.NamedTemporaryFile(delete=False) - hfile.close() -@@ -142,6 +143,7 @@ class TestHistoryManipulation (unittest.TestCase): - self.assertEqual(readline.get_history_item(1), "entrée 1") - self.assertEqual(readline.get_history_item(2), "entrée 22") - -+ @unittest.skip("Skipping problematic test") - def test_write_read_limited_history(self): - previous_length = readline.get_history_length() - self.addCleanup(readline.set_history_length, previous_length) -@@ -390,6 +392,7 @@ readline.write_history_file(history_file) - self.assertIn(b"done", output) - - -+ @unittest.skip("Skipping problematic test") - def test_write_read_limited_history(self): - previous_length = readline.get_history_length() - self.addCleanup(readline.set_history_length, previous_length) diff --git a/meta/recipes-devtools/python/python3/0001-test_shutdown-skip-problematic-test.patch b/meta/recipes-devtools/python/python3/0001-test_shutdown-skip-problematic-test.patch deleted file mode 100644 index 4e284de613..0000000000 --- a/meta/recipes-devtools/python/python3/0001-test_shutdown-skip-problematic-test.patch +++ /dev/null @@ -1,43 +0,0 @@ -From b678363156b5d40e09c1d138840180e3ddc7d20b Mon Sep 17 00:00:00 2001 -From: Trevor Gamblin -Date: Wed, 8 May 2024 11:58:09 -0400 -Subject: [PATCH] test_shutdown: skip problematic test - -This test hangs frequently when run on the Autobuilder. Disable it in -testing until the cause can be determined. - -Upstream-Status: Inappropriate [OE-Specific] - -Signed-off-by: Trevor Gamblin ---- - Lib/test/test_concurrent_futures/test_shutdown.py | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/Lib/test/test_concurrent_futures/test_shutdown.py b/Lib/test/test_concurrent_futures/test_shutdown.py -index 7a4065a..6b878a4 100644 ---- a/Lib/test/test_concurrent_futures/test_shutdown.py -+++ b/Lib/test/test_concurrent_futures/test_shutdown.py -@@ -20,6 +20,7 @@ def sleep_and_print(t, msg): - sys.stdout.flush() - - -+@unittest.skip("skipping problematic test") - class ExecutorShutdownTest: - def test_run_after_shutdown(self): - self.executor.shutdown() -@@ -156,6 +157,7 @@ class ExecutorShutdownTest: - signal.signal(signal.SIGALRM, old_handler) - - -+@unittest.skip("skipping problematic test") - class ThreadPoolShutdownTest(ThreadPoolMixin, ExecutorShutdownTest, BaseTestCase): - def test_threads_terminate(self): - def acquire_lock(lock): -@@ -252,6 +254,7 @@ class ThreadPoolShutdownTest(ThreadPoolMixin, ExecutorShutdownTest, BaseTestCase - self.assertIn(out.strip(), [b"apple", b""]) - - -+@unittest.skip("skipping problematic test") - class ProcessPoolShutdownTest(ExecutorShutdownTest): - def test_processes_terminate(self): - def acquire_lock(lock): 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 deleted file mode 100644 index b452c6556f..0000000000 --- a/meta/recipes-devtools/python/python3/0001-test_storlines-skip-due-to-load-variability.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 9f252a691cd335341938489da32d6e2d4620d8ca Mon Sep 17 00:00:00 2001 -From: Trevor Gamblin -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 ---- - 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 bed0e6d..36602be 100644 ---- a/Lib/test/test_ftplib.py -+++ b/Lib/test/test_ftplib.py -@@ -630,6 +630,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/check_build_completeness.py b/meta/recipes-devtools/python/python3/check_build_completeness.py deleted file mode 100755 index a1eace3f57..0000000000 --- a/meta/recipes-devtools/python/python3/check_build_completeness.py +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env python3 -import sys -logfile = open(sys.argv[1]).read() - -necessary_bits = logfile.find("The necessary bits to build these optional modules were not found") -to_find_bits = logfile.find("To find the necessary bits, look in setup.py in detect_modules() for the module's name.") -if necessary_bits != -1: - print("%s" %(logfile[necessary_bits:to_find_bits])) - -failed_to_build = logfile.find("Failed to build these modules:") -if failed_to_build != -1: - failed_to_build_end = logfile.find("\n\n", failed_to_build) - print("%s" %(logfile[failed_to_build:failed_to_build_end])) - -if necessary_bits != -1 or failed_to_build != -1: - sys.exit(1) - diff --git a/meta/recipes-devtools/python/python3/create_manifest3.py b/meta/recipes-devtools/python/python3/create_manifest3.py deleted file mode 100644 index 288d5ede3a..0000000000 --- a/meta/recipes-devtools/python/python3/create_manifest3.py +++ /dev/null @@ -1,444 +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 possible 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. -# -# This script differs from its python2 version mostly on how shared libraries are handled -# The manifest file for python3 has an extra field which contains the cached files for -# each package. -# 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 - - -import sys -import subprocess -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]) - -# 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): - value = value.replace('${PYTHON_MAJMIN}',pyversion) - 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 isCached(item): - if '__pycache__' in item: - 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) - -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 - 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_indent('Getting dependencies for package: core', 0) - - -# This special call gets the core dependencies and -# appends to the old manifest so it doesnt hurt what it -# currently holds. -# This way when other packages check for dependencies -# 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', '%s' % debugFlag]).decode('utf8') -for coredep in output.split(): - coredep = coredep.replace(pyversion,'${PYTHON_MAJMIN}') - if isCached(coredep): - if coredep not in old_manifest['core']['cached']: - old_manifest['core']['cached'].append(coredep) - else: - if coredep not in old_manifest['core']['files']: - old_manifest['core']['files'].append(coredep) - - -# The second step is to loop through the existing files contained in the core package -# according to the old manifest, identify if they are modules, or some other type -# of file that we cant import (directories, binaries, configs) in which case we -# can only assume they were added correctly (manually) so we ignore those and -# pass them to the manifest directly. - -for filedep in old_manifest['core']['files']: - if isFolder(filedep): - if isCached(filedep): - if filedep not in old_manifest['core']['cached']: - old_manifest['core']['cached'].append(filedep) - else: - if filedep not in old_manifest['core']['files']: - old_manifest['core']['files'].append(filedep) - continue - if '${bindir}' in filedep: - if filedep not in old_manifest['core']['files']: - old_manifest['core']['files'].append(filedep) - continue - if filedep == '': - continue - if '${includedir}' in filedep: - if filedep not in old_manifest['core']['files']: - old_manifest['core']['files'].append(filedep) - continue - - # 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_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(): - pymodule_dep = pymodule_dep.replace(pyversion,'${PYTHON_MAJMIN}') - - if isCached(pymodule_dep): - if pymodule_dep not in old_manifest['core']['cached']: - old_manifest['core']['cached'].append(pymodule_dep) - else: - if pymodule_dep not in old_manifest['core']['files']: - old_manifest['core']['files'].append(pymodule_dep) - - -# At this point we are done with the core package. -# The old_manifest dictionary is updated only for the core package because -# 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_indent('%s is a directory' % filedep, 2) - if pypkg not in hasfolders: - hasfolders.append(pypkg) - if filedep not in allfolders: - allfolders.append(filedep) - - - -# This is the main loop that will handle each package. -# It works in a similar fashion than the step before, but -# we will now be updating a new dictionary that will eventually -# become the new manifest. -# -# The following loops though all packages in the manifest, -# through all files on each of them, and checks whether or not -# they are modules and can be imported. -# If they can be imported, then it checks for dependencies for -# each of them by launching a separate task. -# The output of that task is then parsed and the manifest is updated -# accordingly, wether it should add the module on FILES for the current package -# or if that module already belongs to another package then the current one -# will RDEPEND on it - -for pypkg in old_manifest: - # Use an empty dict as data structure to hold data for each package and fill it up - new_manifest[pypkg] = collections.OrderedDict() - new_manifest[pypkg]['summary'] = old_manifest[pypkg]['summary'] - new_manifest[pypkg]['rdepends'] = [] - new_manifest[pypkg]['files'] = [] - new_manifest[pypkg]['cached'] = old_manifest[pypkg]['cached'] - - # All packages should depend on core - if pypkg != 'core': - new_manifest[pypkg]['rdepends'].append('core') - new_manifest[pypkg]['cached'] = [] - - print('\n') - print('--------------------------') - 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_indent('Passing %s package directly' % pypkg, 2) - new_manifest[pypkg] = old_manifest[pypkg] - continue - - for filedep in old_manifest[pypkg]['files']: - # We already handled core on the first pass, we can ignore it now - if pypkg == 'core': - if filedep not in new_manifest[pypkg]['files']: - new_manifest[pypkg]['files'].append(filedep) - continue - - # Handle/ignore what we cant import - if isFolder(filedep): - new_manifest[pypkg]['files'].append(filedep) - # Asyncio (and others) are both the package and the folder name, we should not skip those... - path,mod = os.path.split(filedep) - if mod != pypkg: - continue - if '${bindir}' in filedep: - if filedep not in new_manifest[pypkg]['files']: - new_manifest[pypkg]['files'].append(filedep) - continue - if filedep == '': - continue - if '${includedir}' in filedep: - if filedep not in new_manifest[pypkg]['files']: - new_manifest[pypkg]['files'].append(filedep) - continue - - # 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 = os.path.basename(path) - pymodule = os.path.splitext(os.path.basename(pymodule))[0] - - # If this condition is met, it means we need to import it from another module - # or its the folder itself (e.g. unittest) - if path == pypkg: - if pymodule: - pymodule = path + '.' + pymodule - else: - pymodule = path - - - - # 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_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 = [] - - for pymodule_dep 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 rdependency - # 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. - - pymodule_dep = pymodule_dep.replace(pyversion,'${PYTHON_MAJMIN}') - 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(pymodule_dep): - check_path = pymodule_dep - else: - check_path = os.path.dirname(pymodule_dep) - 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 pypkg_with_folder in hasfolders: - if (folderFound == False): - # 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 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) - else: - break - - # A folder was found so we're done with this item, we can go on - if inFolders: - continue - - - - # No directories beyond this point - # We might already have this module on the dictionary since it could depend on a (previously checked) module - if pymodule_dep not in new_manifest[pypkg]['files'] and pymodule_dep not in new_manifest[pypkg]['cached']: - # Handle core as a special package, we already did it so we pass it to NEW data structure directly - if pypkg == 'core': - print('Adding %s to %s FILES' % (pymodule_dep, pypkg)) - if pymodule_dep.endswith('*'): - wildcards.append(pymodule_dep) - if isCached(pymodule_dep): - new_manifest[pypkg]['cached'].append(pymodule_dep) - else: - new_manifest[pypkg]['files'].append(pymodule_dep) - - # Check for repeated files - if pymodule_dep not in allfiles: - allfiles.append(pymodule_dep) - else: - if pymodule_dep not in repeated: - repeated.append(pymodule_dep) - else: - - - # Last step: Figure out if we this belongs to FILES or RDEPENDS - # We check if this module is already contained on another package, so we add that one - # as an RDEPENDS, or if its not, it means it should be contained on the current - # package, and we should add it to FILES - for possible_rdep in old_manifest: - # Debug - # print('Checking %s ' % pymodule_dep + ' in %s' % possible_rdep) - if pymodule_dep in old_manifest[possible_rdep]['files'] or pymodule_dep in old_manifest[possible_rdep]['cached']: - # Since were nesting, we need to check its not the same pypkg - if(possible_rdep != pypkg): - if possible_rdep not in new_manifest[pypkg]['rdepends']: - # Add it to the new manifest data struct as RDEPENDS since it contains something this module needs - reportRDEPS.append('Adding %s to %s RDEPENDS, because it contains %s\n' % (possible_rdep, pypkg, pymodule_dep)) - new_manifest[pypkg]['rdepends'].append(possible_rdep) - break - else: - - # Since this module wasnt found on another package, it is not an RDEP, - # so we add it to FILES for this package. - # A module shouldn't contain itself (${libdir}/python3/sqlite3 shouldnt be on sqlite3 files) - if os.path.basename(pymodule_dep) != pypkg: - reportFILES.append(('Adding %s to %s FILES\n' % (pymodule_dep, pypkg))) - if isCached(pymodule_dep): - new_manifest[pypkg]['cached'].append(pymodule_dep) - else: - new_manifest[pypkg]['files'].append(pymodule_dep) - if pymodule_dep.endswith('*'): - wildcards.append(pymodule_dep) - if pymodule_dep not in allfiles: - allfiles.append(pymodule_dep) - else: - if pymodule_dep not in repeated: - repeated.append(pymodule_dep) - - print('\n') - print('#################################') - print('Summary for module %s' % pymodule) - print('FILES found for module %s:' % pymodule) - print(''.join(reportFILES)) - print('RDEPENDS found for module %s:' % pymodule) - print(''.join(reportRDEPS)) - print('#################################') - -print('The following FILES contain wildcards, please check if they are necessary') -print(wildcards) -print('The following FILES contain folders, please check if they are necessary') -print(hasfolders) - - -# Sort it just so it looks nicer -for pypkg in new_manifest: - new_manifest[pypkg]['files'].sort() - new_manifest[pypkg]['cached'].sort() - new_manifest[pypkg]['rdepends'].sort() - -# Create the manifest from the data structure that was built -with open('python3-manifest.json.new','w') as outfile: - json.dump(new_manifest,outfile, indent=4) - outfile.write('\n') - -prepend_comments(comments,'python3-manifest.json.new') - -if (repeated): - error_msg = '\n\nERROR:\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) - error_msg += '\n' - sys.exit(error_msg) - diff --git a/meta/recipes-devtools/python/python3/get_module_deps3.py b/meta/recipes-devtools/python/python3/get_module_deps3.py deleted file mode 100644 index 8e432b49af..0000000000 --- a/meta/recipes-devtools/python/python3/get_module_deps3.py +++ /dev/null @@ -1,174 +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 - - -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 -# 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] - return dep_path - - -# Module to import was passed as an argument -current_module = str(sys.argv[1]).rstrip() -if debug == True: - log = open('temp/log_%s' % current_module.strip('.*'),'w') - log.write('Module %s generated the following dependencies:\n' % 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\n') - 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: - # We know this is not the core package, so there must be a difference. - dif = module_deps-core_deps - - -# Check where each dependency came from -for item in dif: - # Main module returns script filename, __main matches mp_main__ as well - if 'main__' in item: - continue - - dep_path = '' - try: - 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: - 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 - - 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' - # Prints out result, which is what will be used by create_manifest - print (dep_path) - continue - - dep_path = fix_path(dep_path) - - import sysconfig - 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\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: - log.write(dep_path+'\n') - # Prints out result, which is what will be used by create_manifest - print (dep_path) - - - cpython_tag = sys.implementation.cache_tag - cached = '' - # Theres no naive way to find *.pyc files on python3 - try: - 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: - 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: - log.write(item+' ') - log.write(str(e)) - pass - if cached is not None: - 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: - log.close() diff --git a/meta/recipes-devtools/python/python3/makerace.patch b/meta/recipes-devtools/python/python3/makerace.patch deleted file mode 100644 index bf73135e09..0000000000 --- a/meta/recipes-devtools/python/python3/makerace.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 2b458b4e1bcd57e3f135d3f0e715f64b98b27906 Mon Sep 17 00:00:00 2001 -From: Richard Purdie -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 ---- - Makefile.pre.in | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/Makefile.pre.in b/Makefile.pre.in -index be1b9ea..9ec3a71 100644 ---- a/Makefile.pre.in -+++ b/Makefile.pre.in -@@ -2492,7 +2492,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/python3-manifest.json b/meta/recipes-devtools/python/python3/python3-manifest.json deleted file mode 100644 index 441830833b..0000000000 --- a/meta/recipes-devtools/python/python3/python3-manifest.json +++ /dev/null @@ -1,1215 +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 that 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 python3-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 python3-misc. -# "webbrowser": { -# "files": ["${libdir}/python${PYTHON_MAJMIN}/lib-dynload/webbrowser.py"], -# "rdepends": [], -# "summary": "Python Web Browser support"} -# -# * Note that the rdepends field was left empty -# -# We run $ bitbake python3 -c create_manifest and the resulting manifest -# should be completed after a few seconds, showing something like: -# "webbrowser": { -# "files": ["${libdir}/python${PYTHON_MAJMIN}/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 python3 -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}/python${PYTHON_MAJMIN}/*/test", - "${libdir}/python${PYTHON_MAJMIN}/*/tests", - "${libdir}/python${PYTHON_MAJMIN}/idlelib/idle_test/", - "${libdir}/python${PYTHON_MAJMIN}/test" - ], - "cached": [] - }, - "asyncio": { - "summary": "Python Asynchronous I/O", - "rdepends": [ - "core", - "io", - "logging", - "netclient", - "numbers", - "stringold" - ], - "files": [ - "${libdir}/python${PYTHON_MAJMIN}/asyncio", - "${libdir}/python${PYTHON_MAJMIN}/concurrent", - "${libdir}/python${PYTHON_MAJMIN}/concurrent/futures", - "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_asyncio.*.so" - ], - "cached": [] - }, - "audio": { - "summary": "Python Audio Handling", - "rdepends": [ - "core" - ], - "files": [ - "${libdir}/python${PYTHON_MAJMIN}/wave.py" - ], - "cached": [ - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/wave.*.pyc" - ] - }, - "codecs": { - "summary": "Python codec", - "rdepends": [ - "core" - ], - "files": [ - "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_multibytecodec.*.so" - ], - "cached": [] - }, - "compile": { - "summary": "Python bytecode compilation support", - "rdepends": [ - "core" - ], - "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" - ], - "files": [ - "${libdir}/python${PYTHON_MAJMIN}/gzip.py", - "${libdir}/python${PYTHON_MAJMIN}/tarfile.py", - "${libdir}/python${PYTHON_MAJMIN}/zipfile", - "${libdir}/python${PYTHON_MAJMIN}/zipfile/_path" - ], - "cached": [ - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/gzip.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/tarfile.*.pyc" - ] - }, - "core": { - "summary": "Python interpreter and core modules", - "rdepends": ["compression"], - "files": [ - "${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", - "${libdir}/python${PYTHON_MAJMIN}/__future__.py", - "${libdir}/python${PYTHON_MAJMIN}/_abcoll.py", - "${libdir}/python${PYTHON_MAJMIN}/_bootlocale.py", - "${libdir}/python${PYTHON_MAJMIN}/_collections_abc.py", - "${libdir}/python${PYTHON_MAJMIN}/_colorize.py", - "${libdir}/python${PYTHON_MAJMIN}/_compression.py", - "${libdir}/python${PYTHON_MAJMIN}/_markupbase.py", - "${libdir}/python${PYTHON_MAJMIN}/_opcode_metadata.py", - "${libdir}/python${PYTHON_MAJMIN}/_pyrepl", - "${libdir}/python${PYTHON_MAJMIN}/_pyrepl/pager.py", - "${libdir}/python${PYTHON_MAJMIN}/_sitebuiltins.py", - "${libdir}/python${PYTHON_MAJMIN}/_sysconfigdata*.py", - "${libdir}/python${PYTHON_MAJMIN}/_weakrefset.py", - "${libdir}/python${PYTHON_MAJMIN}/abc.py", - "${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", - "${libdir}/python${PYTHON_MAJMIN}/collections", - "${libdir}/python${PYTHON_MAJMIN}/collections/abc.py", - "${libdir}/python${PYTHON_MAJMIN}/configparser.py", - "${libdir}/python${PYTHON_MAJMIN}/contextlib.py", - "${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", - "${libdir}/python${PYTHON_MAJMIN}/gettext.py", - "${libdir}/python${PYTHON_MAJMIN}/glob.py", - "${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", - "${libdir}/python${PYTHON_MAJMIN}/importlib/machinery.py", - "${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/fcntl.*.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", - "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/select.*.so", - "${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", - "${libdir}/python${PYTHON_MAJMIN}/pathlib.py", - "${libdir}/python${PYTHON_MAJMIN}/pathlib/_abc.py", - "${libdir}/python${PYTHON_MAJMIN}/pathlib/_local.py", - "${libdir}/python${PYTHON_MAJMIN}/pkgutil.py", - "${libdir}/python${PYTHON_MAJMIN}/platform.py", - "${libdir}/python${PYTHON_MAJMIN}/posixpath.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", - "${libdir}/python${PYTHON_MAJMIN}/sre_compile.py", - "${libdir}/python${PYTHON_MAJMIN}/sre_constants.py", - "${libdir}/python${PYTHON_MAJMIN}/sre_parse.py", - "${libdir}/python${PYTHON_MAJMIN}/stat.py", - "${libdir}/python${PYTHON_MAJMIN}/stringprep.py", - "${libdir}/python${PYTHON_MAJMIN}/struct.py", - "${libdir}/python${PYTHON_MAJMIN}/subprocess.py", - "${libdir}/python${PYTHON_MAJMIN}/symbol.py", - "${libdir}/python${PYTHON_MAJMIN}/sysconfig", - "${libdir}/python${PYTHON_MAJMIN}/sysconfig.py", - "${libdir}/python${PYTHON_MAJMIN}/textwrap.py", - "${libdir}/python${PYTHON_MAJMIN}/threading.py", - "${libdir}/python${PYTHON_MAJMIN}/token.py", - "${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}/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__/_colorize.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_compression.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_markupbase.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_opcode_metadata.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_sitebuiltins.*.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", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/configparser.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/contextlib.*.pyc", - "${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", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/gettext.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/glob.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/heapq.*.pyc", - "${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", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/sre_constants.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/sre_parse.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/stat.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/stringprep.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/struct.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/subprocess.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/symbol.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/sysconfig.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/textwrap.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/threading.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/token.*.pyc", - "${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}/_pyrepl/__pycache__", - "${libdir}/python${PYTHON_MAJMIN}/_pyrepl/__pycache__/pager.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/collections/__pycache__", - "${libdir}/python${PYTHON_MAJMIN}/collections/__pycache__/abc.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/encodings/__pycache__", - "${libdir}/python${PYTHON_MAJMIN}/encodings/__pycache__/aliases.*.pyc", - "${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}/pathlib/__pycache__", - "${libdir}/python${PYTHON_MAJMIN}/pathlib/__pycache__/_abc.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/pathlib/__pycache__/_local.*.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}/sysconfig/__pycache__", - "${libdir}/python${PYTHON_MAJMIN}/urllib/__pycache__", - "${libdir}/python${PYTHON_MAJMIN}/urllib/__pycache__/parse.*.pyc" - ] - }, - "crypt": { - "summary": "Python basic cryptographic and hashing support", - "rdepends": [ - "core" - ], - "files": [ - "${libdir}/python${PYTHON_MAJMIN}/hashlib.py", - "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_blake2.*.so", - "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_hashlib.*.so", - "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_md5.*.so", - "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_sha1.*.so", - "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_sha2.*.so", - "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_sha3.*.so" - ], - "cached": [ - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/hashlib.*.pyc" - ] - }, - "ctypes": { - "summary": "Python C types support", - "rdepends": [ - "core", - "io", - "math" - ], - "files": [ - "${libdir}/python${PYTHON_MAJMIN}/ctypes", - "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_ctypes.*.so", - "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_ctypes_test.*.so" - ], - "cached": [] - }, - "curses": { - "summary": "Python curses support", - "rdepends": [ - "core" - ], - "files": [ - "${libdir}/python${PYTHON_MAJMIN}/curses", - "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_curses.*.so", - "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_curses_panel.*.so" - ], - "cached": [] - }, - "datetime": { - "summary": "Python calendar and time support", - "rdepends": [ - "core" - ], - "files": [ - "${libdir}/python${PYTHON_MAJMIN}/_strptime.py", - "${libdir}/python${PYTHON_MAJMIN}/calendar.py", - "${libdir}/python${PYTHON_MAJMIN}/datetime.py", - "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_datetime.*.so" - ], - "cached": [ - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_strptime.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/calendar.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/datetime.*.pyc" - ] - }, - "db": { - "summary": "Python file-based database support", - "rdepends": [ - "core" - ], - "files": [ - "${libdir}/python${PYTHON_MAJMIN}/dbm", - "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_dbm.*.so" - ], - "cached": [] - }, - "debugger": { - "summary": "Python debugger", - "rdepends": [ - "core", - "pprint", - "shell", - "stringold" - ], - "files": [ - "${libdir}/python${PYTHON_MAJMIN}/bdb.py", - "${libdir}/python${PYTHON_MAJMIN}/pdb.py" - ], - "cached": [ - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/bdb.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pdb.*.pyc" - ] - }, - "dev": { - "cached": [], - "files": [ - "${base_libdir}/*.a", - "${base_libdir}/*.o", - "${bindir}/python*-config*", - "${datadir}/aclocal", - "${datadir}/pkgconfig", - "${includedir}", - "${libdir}/*.a", - "${libdir}/*.la", - "${libdir}/*.o", - "${libdir}/lib*${SOLIBSDEV}", - "${libdir}/pkgconfig" - ], - "rdepends": [ - "core" - ], - "summary": "Python development package" - }, - "difflib": { - "summary": "Python helpers for computing deltas between objects", - "rdepends": [ - "core" - ], - "files": [ - "${libdir}/python${PYTHON_MAJMIN}/difflib.py" - ], - "cached": [ - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/difflib.*.pyc" - ] - }, - "doctest": { - "summary": "Python framework for running examples in docstrings", - "rdepends": [ - "core", - "debugger", - "difflib", - "pprint", - "shell", - "stringold", - "unittest" - ], - "files": [ - "${libdir}/python${PYTHON_MAJMIN}/doctest.py" - ], - "cached": [ - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/doctest.*.pyc" - ] - }, - "email": { - "summary": "Python email support", - "rdepends": [ - "core", - "datetime", - "io", - "math", - "mime", - "netclient", - "stringold" - ], - "files": [ - "${libdir}/python${PYTHON_MAJMIN}/email", - "${libdir}/python${PYTHON_MAJMIN}/imaplib.py" - ], - "cached": [ - "${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": [ - "core" - ], - "files": [ - "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/fcntl.*.so" - ], - "cached": [] - }, - "gdbm": { - "summary": "Python GNU database support", - "rdepends": [ - "core" - ], - "files": [ - "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_gdbm.*.so" - ], - "cached": [] - }, - "html": { - "summary": "Python HTML processing support", - "rdepends": [ - "core" - ], - "files": [ - "${libdir}/python${PYTHON_MAJMIN}/html" - ], - "cached": [] - }, - "idle": { - "summary": "Python Integrated Development Environment", - "rdepends": [ - "core" - ], - "files": [ - "${bindir}/idle*", - "${libdir}/python${PYTHON_MAJMIN}/idlelib" - ], - "cached": [] - }, - "image": { - "summary": "Python graphical image handling", - "rdepends": [ - "core" - ], - "files": [ - "${libdir}/python${PYTHON_MAJMIN}/colorsys.py" - ], - "cached": [ - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/colorsys.*.pyc" - ] - }, - "io": { - "summary": "Python low-level I/O", - "rdepends": [ - "core", - "math", - "netclient" - ], - "files": [ - "${libdir}/python${PYTHON_MAJMIN}/_pyio.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", - "${libdir}/python${PYTHON_MAJMIN}/socket.py", - "${libdir}/python${PYTHON_MAJMIN}/ssl.py", - "${libdir}/python${PYTHON_MAJMIN}/tempfile.py" - ], - "cached": [ - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_pyio.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/socket.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/ssl.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/tempfile.*.pyc" - ] - }, - "json": { - "summary": "Python JSON support", - "rdepends": [ - "core" - ], - "files": [ - "${libdir}/python${PYTHON_MAJMIN}/json", - "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_json.*.so" - ], - "cached": [] - }, - "logging": { - "summary": "Python logging support", - "rdepends": [ - "core", - "io", - "netserver", - "pickle", - "stringold", - "threading" - ], - "files": [ - "${libdir}/python${PYTHON_MAJMIN}/logging" - ], - "cached": [] - }, - "mailbox": { - "summary": "Python mailbox format support", - "rdepends": [ - "core", - "datetime", - "email", - "io", - "math", - "mime", - "netclient", - "stringold" - ], - "files": [ - "${libdir}/python${PYTHON_MAJMIN}/mailbox.py" - ], - "cached": [ - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/mailbox.*.pyc" - ] - }, - "math": { - "summary": "Python math support", - "rdepends": [ - "core" - ], - "files": [ - "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_random.*.so", - "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/cmath.*.so", - "${libdir}/python${PYTHON_MAJMIN}/random.py" - ], - "cached": [ - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/random.*.pyc" - ] - }, - "mime": { - "summary": "Python MIME handling APIs", - "rdepends": [ - "core" - ], - "files": [ - "${libdir}/python${PYTHON_MAJMIN}/quopri.py" - ], - "cached": [ - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/quopri.*.pyc" - ] - }, - "mmap": { - "summary": "Python memory-mapped file support", - "rdepends": [ - "core" - ], - "files": [ - "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/mmap.*.so" - ], - "cached": [] - }, - "modules": { - "cached": [], - "files": [], - "rdepends": [ - "asyncio", - "audio", - "codecs", - "compile", - "compression", - "core", - "crypt", - "ctypes", - "curses", - "datetime", - "db", - "debugger", - "difflib", - "doctest", - "email", - "ensurepip", - "fcntl", - "html", - "idle", - "image", - "io", - "json", - "logging", - "mailbox", - "math", - "mime", - "mmap", - "multiprocessing", - "netclient", - "netserver", - "numbers", - "pickle", - "pkgutil", - "plistlib", - "pprint", - "profile", - "pydoc", - "resource", - "shell", - "sqlite3", - "statistics", - "stringold", - "syslog", - "terminal", - "threading", - "tkinter", - "tomllib", - "unittest", - "unixadmin", - "venv", - "xml", - "xmlrpc", - "zoneinfo" - ], - "summary": "All Python modules" - }, - "multiprocessing": { - "summary": "Python multiprocessing support", - "rdepends": [ - "core", - "crypt", - "ctypes", - "io", - "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": [] - }, - "netclient": { - "summary": "Python Internet Protocol clients", - "rdepends": [ - "core", - "crypt", - "datetime", - "email", - "io", - "math", - "mime", - "stringold" - ], - "files": [ - "${libdir}/python${PYTHON_MAJMIN}/base64.py", - "${libdir}/python${PYTHON_MAJMIN}/ftplib.py", - "${libdir}/python${PYTHON_MAJMIN}/hmac.py", - "${libdir}/python${PYTHON_MAJMIN}/http", - "${libdir}/python${PYTHON_MAJMIN}/http/__pycache__", - "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_uuid.*.so", - "${libdir}/python${PYTHON_MAJMIN}/mimetypes.py", - "${libdir}/python${PYTHON_MAJMIN}/poplib.py", - "${libdir}/python${PYTHON_MAJMIN}/secrets.py", - "${libdir}/python${PYTHON_MAJMIN}/smtplib.py", - "${libdir}/python${PYTHON_MAJMIN}/urllib", - "${libdir}/python${PYTHON_MAJMIN}/uuid.py" - ], - "cached": [ - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/base64.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/ftplib.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/hmac.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/mimetypes.*.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__/uuid.*.pyc" - ] - }, - "netserver": { - "summary": "Python Internet Protocol servers", - "rdepends": [ - "core", - "io" - ], - "files": [ - "${libdir}/python${PYTHON_MAJMIN}/socketserver.py" - ], - "cached": [ - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/socketserver.*.pyc" - ] - }, - "numbers": { - "summary": "Python number APIs", - "rdepends": [ - "core" - ], - "files": [ - "${libdir}/python${PYTHON_MAJMIN}/_pydecimal.py", - "${libdir}/python${PYTHON_MAJMIN}/contextvars.py", - "${libdir}/python${PYTHON_MAJMIN}/decimal.py", - "${libdir}/python${PYTHON_MAJMIN}/fractions.py", - "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_contextvars.*.so", - "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_decimal.*.so", - "${libdir}/python${PYTHON_MAJMIN}/numbers.py" - ], - "cached": [ - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_pydecimal.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/contextvars.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/decimal.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/fractions.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/numbers.*.pyc" - ] - }, - "pickle": { - "summary": "Python serialisation/persistence support", - "rdepends": [ - "core" - ], - "files": [ - "${libdir}/python${PYTHON_MAJMIN}/_compat_pickle.py", - "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_pickle.*.so", - "${libdir}/python${PYTHON_MAJMIN}/pickle.py", - "${libdir}/python${PYTHON_MAJMIN}/pickletools.py", - "${libdir}/python${PYTHON_MAJMIN}/shelve.py" - ], - "cached": [ - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_compat_pickle.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pickle.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pickletools.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/shelve.*.pyc" - ] - }, - "pkgutil": { - "summary": "Python package extension utility support", - "rdepends": [ - "core" - ], - "files": [], - "cached": [] - }, - "plistlib": { - "summary": "Generate and parse Mac OS X .plist files", - "rdepends": [ - "core", - "datetime", - "xml" - ], - "files": [ - "${libdir}/python${PYTHON_MAJMIN}/plistlib.py" - ], - "cached": [ - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/plistlib.*.pyc" - ] - }, - "pprint": { - "summary": "Python pretty-print support", - "rdepends": [ - "core" - ], - "files": [ - "${libdir}/python${PYTHON_MAJMIN}/pprint.py" - ], - "cached": [ - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pprint.*.pyc" - ] - }, - "profile": { - "summary": "Python basic performance profiling support", - "rdepends": [ - "core" - ], - "files": [ - "${libdir}/python${PYTHON_MAJMIN}/cProfile.py", - "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_lsprof.*.so", - "${libdir}/python${PYTHON_MAJMIN}/profile.py", - "${libdir}/python${PYTHON_MAJMIN}/pstats.py" - ], - "cached": [ - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/cProfile.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/profile.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pstats.*.pyc" - ] - }, - "pydoc": { - "summary": "Python interactive help support", - "rdepends": [ - "core" - ], - "files": [ - "${bindir}/pydoc*", - "${libdir}/python${PYTHON_MAJMIN}/pydoc.py", - "${libdir}/python${PYTHON_MAJMIN}/pydoc_data" - ], - "cached": [ - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pydoc.*.pyc" - ] - }, - "resource": { - "summary": "Python resource control interface", - "rdepends": [ - "core" - ], - "files": [ - "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/resource.*.so" - ], - "cached": [] - }, - "shell": { - "summary": "Python shell-like functionality", - "rdepends": [ - "core", - "stringold" - ], - "files": [ - "${libdir}/python${PYTHON_MAJMIN}/cmd.py", - "${libdir}/python${PYTHON_MAJMIN}/shlex.py" - ], - "cached": [ - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/cmd.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/shlex.*.pyc" - ] - }, - "sqlite3": { - "summary": "Python Sqlite3 database support", - "rdepends": [ - "core", - "datetime" - ], - "files": [ - "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_sqlite3.*.so", - "${libdir}/python${PYTHON_MAJMIN}/sqlite3" - ], - "cached": [] - }, - "statistics": { - "summary": "Basic statistics module", - "rdepends": [ - "core", - "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": "Common string operations", - "rdepends": [ - "core" - ], - "files": [ - "${libdir}/python${PYTHON_MAJMIN}/string.py" - ], - "cached": [ - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/string.*.pyc" - ] - }, - "syslog": { - "summary": "Python syslog interface", - "rdepends": [ - "core" - ], - "files": [ - "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/syslog.*.so" - ], - "cached": [] - }, - "terminal": { - "summary": "Python terminal controlling support", - "rdepends": [ - "core", - "io" - ], - "files": [ - "${libdir}/python${PYTHON_MAJMIN}/pty.py", - "${libdir}/python${PYTHON_MAJMIN}/tty.py" - ], - "cached": [ - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pty.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/tty.*.pyc" - ] - }, - "threading": { - "summary": "Python threading & synchronization support", - "rdepends": [ - "core" - ], - "files": [ - "${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__/_threading_local.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/queue.*.pyc" - ] - }, - "tkinter": { - "summary": "Python Tcl/Tk bindings", - "rdepends": [ - "core" - ], - "files": [ - "${libdir}/python${PYTHON_MAJMIN}/tkinter" - ], - "cached": [] - }, - "tomllib": { - "summary": "Provides an interface for parsing TOML", - "rdepends": [ - "core" - ], - "files": [ - "${libdir}/python${PYTHON_MAJMIN}/tomllib/" - ], - "cached": [] - }, - "unittest": { - "summary": "Python unit testing framework", - "rdepends": [ - "asyncio", - "core", - "difflib", - "io", - "logging", - "netclient", - "numbers", - "pprint", - "stringold" - ], - "files": [ - "${libdir}/python${PYTHON_MAJMIN}/unittest", - "${libdir}/python${PYTHON_MAJMIN}/unittest/", - "${libdir}/python${PYTHON_MAJMIN}/unittest/__pycache__" - ], - "cached": [] - }, - "unixadmin": { - "summary": "Python Unix administration support", - "rdepends": [ - "core", - "io" - ], - "files": [ - "${libdir}/python${PYTHON_MAJMIN}/getpass.py" - ], - "cached": [ - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/getpass.*.pyc" - ] - }, - "venv": { - "summary": "Provides support for creating lightweight virtual environments with their own site directories, optionally isolated from system site directories.", - "rdepends": [ - "core", - "logging", - "stringold" - ], - "files": [ - "${bindir}/pyvenv*", - "${libdir}/python${PYTHON_MAJMIN}/venv" - ], - "cached": [] - }, - "xml": { - "summary": "Python basic XML support", - "rdepends": [ - "core" - ], - "files": [ - "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_elementtree.*.so", - "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/pyexpat.*.so", - "${libdir}/python${PYTHON_MAJMIN}/xml" - ], - "cached": [] - }, - "xmlrpc": { - "summary": "Python XML-RPC support", - "rdepends": [ - "compression", - "core", - "datetime", - "email", - "html", - "io", - "mime", - "netclient", - "netserver", - "numbers", - "pydoc", - "stringold", - "xml" - ], - "files": [ - "${libdir}/python${PYTHON_MAJMIN}/xmlrpc", - "${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 deleted file mode 100644 index 5e2b12879d..0000000000 --- a/meta/recipes-devtools/python/python3/reformat_sysconfig.py +++ /dev/null @@ -1,21 +0,0 @@ -#! /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 deleted file mode 100644 index d1c26c11e2..0000000000 --- a/meta/recipes-devtools/python/python3/run-ptest +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -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/valid-dists.patch b/meta/recipes-devtools/python/python3/valid-dists.patch deleted file mode 100644 index 38b6ebc5cb..0000000000 --- a/meta/recipes-devtools/python/python3/valid-dists.patch +++ /dev/null @@ -1,164 +0,0 @@ -From a65c29adc027b3615154cab73aaedd58a6aa23da Mon Sep 17 00:00:00 2001 -From: "Jason R. Coombs" -Date: Tue, 23 Jul 2024 08:36:16 -0400 -Subject: [PATCH] Prioritize valid dists to invalid dists when retrieving by - name. - -Closes python/importlib_metadata#489 - -Upstream-Status: Backport [https://github.com/python/importlib_metadata/commit/a65c29adc027b3615154cab73aaedd58a6aa23da] -Signed-off-by: Ross Burton ---- - Lib/importlib/metadata/__init__.py | 14 +++- - Lib/importlib/metadata/_itertools.py | 98 ++++++++++++++++++++++++++++ - 2 files changed, 110 insertions(+), 2 deletions(-) - -diff --git a/Lib/importlib/metadata/__init__.py b/Lib/importlib/metadata/__init__.py -index 8ce62dd..085378c 100644 ---- a/Lib/importlib/metadata/__init__.py -+++ b/Lib/importlib/metadata/__init__.py -@@ -21,7 +21,7 @@ import collections - from . import _meta - from ._collections import FreezableDefaultDict, Pair - from ._functools import method_cache, pass_none --from ._itertools import always_iterable, unique_everseen -+from ._itertools import always_iterable, bucket, unique_everseen - from ._meta import PackageMetadata, SimplePath - - from contextlib import suppress -@@ -404,7 +404,7 @@ class Distribution(DeprecatedNonAbstract): - if not name: - raise ValueError("A distribution name is required.") - try: -- return next(iter(cls.discover(name=name))) -+ return next(iter(cls._prefer_valid(cls.discover(name=name)))) - except StopIteration: - raise PackageNotFoundError(name) - -@@ -428,6 +428,16 @@ class Distribution(DeprecatedNonAbstract): - resolver(context) for resolver in cls._discover_resolvers() - ) - -+ @staticmethod -+ def _prefer_valid(dists: Iterable[Distribution]) -> Iterable[Distribution]: -+ """ -+ Prefer (move to the front) distributions that have metadata. -+ -+ Ref python/importlib_resources#489. -+ """ -+ buckets = bucket(dists, lambda dist: bool(dist.metadata)) -+ return itertools.chain(buckets[True], buckets[False]) -+ - @staticmethod - def at(path: str | os.PathLike[str]) -> Distribution: - """Return a Distribution for the indicated metadata path. -diff --git a/Lib/importlib/metadata/_itertools.py b/Lib/importlib/metadata/_itertools.py -index d4ca9b9..79d3719 100644 ---- a/Lib/importlib/metadata/_itertools.py -+++ b/Lib/importlib/metadata/_itertools.py -@@ -1,3 +1,4 @@ -+from collections import defaultdict, deque - from itertools import filterfalse - - -@@ -71,3 +72,100 @@ def always_iterable(obj, base_type=(str, bytes)): - return iter(obj) - except TypeError: - return iter((obj,)) -+ -+ -+# Copied from more_itertools 10.3 -+class bucket: -+ """Wrap *iterable* and return an object that buckets the iterable into -+ child iterables based on a *key* function. -+ -+ >>> iterable = ['a1', 'b1', 'c1', 'a2', 'b2', 'c2', 'b3'] -+ >>> s = bucket(iterable, key=lambda x: x[0]) # Bucket by 1st character -+ >>> sorted(list(s)) # Get the keys -+ ['a', 'b', 'c'] -+ >>> a_iterable = s['a'] -+ >>> next(a_iterable) -+ 'a1' -+ >>> next(a_iterable) -+ 'a2' -+ >>> list(s['b']) -+ ['b1', 'b2', 'b3'] -+ -+ The original iterable will be advanced and its items will be cached until -+ they are used by the child iterables. This may require significant storage. -+ -+ By default, attempting to select a bucket to which no items belong will -+ exhaust the iterable and cache all values. -+ If you specify a *validator* function, selected buckets will instead be -+ checked against it. -+ -+ >>> from itertools import count -+ >>> it = count(1, 2) # Infinite sequence of odd numbers -+ >>> key = lambda x: x % 10 # Bucket by last digit -+ >>> validator = lambda x: x in {1, 3, 5, 7, 9} # Odd digits only -+ >>> s = bucket(it, key=key, validator=validator) -+ >>> 2 in s -+ False -+ >>> list(s[2]) -+ [] -+ -+ """ -+ -+ def __init__(self, iterable, key, validator=None): -+ self._it = iter(iterable) -+ self._key = key -+ self._cache = defaultdict(deque) -+ self._validator = validator or (lambda x: True) -+ -+ def __contains__(self, value): -+ if not self._validator(value): -+ return False -+ -+ try: -+ item = next(self[value]) -+ except StopIteration: -+ return False -+ else: -+ self._cache[value].appendleft(item) -+ -+ return True -+ -+ def _get_values(self, value): -+ """ -+ Helper to yield items from the parent iterator that match *value*. -+ Items that don't match are stored in the local cache as they -+ are encountered. -+ """ -+ while True: -+ # If we've cached some items that match the target value, emit -+ # the first one and evict it from the cache. -+ if self._cache[value]: -+ yield self._cache[value].popleft() -+ # Otherwise we need to advance the parent iterator to search for -+ # a matching item, caching the rest. -+ else: -+ while True: -+ try: -+ item = next(self._it) -+ except StopIteration: -+ return -+ item_value = self._key(item) -+ if item_value == value: -+ yield item -+ break -+ elif self._validator(item_value): -+ self._cache[item_value].append(item) -+ -+ def __iter__(self): -+ for item in self._it: -+ item_value = self._key(item) -+ if self._validator(item_value): -+ self._cache[item_value].append(item) -+ -+ yield from self._cache.keys() -+ -+ def __getitem__(self, value): -+ if not self._validator(value): -+ return iter(()) -+ -+ return self._get_values(value) -- cgit v1.2.3-54-g00ecf