diff options
Diffstat (limited to 'meta/recipes-devtools/python/python3')
24 files changed, 0 insertions, 4075 deletions
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 @@ | |||
| 1 | From 6b111a328c1c57b1580d63894b2b5d337316f6d4 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Paulo Neves <ptsneves@gmail.com> | ||
| 3 | Date: Tue, 7 Jun 2022 16:16:41 +0200 | ||
| 4 | Subject: [PATCH] Avoid shebang overflow on python-config.py | ||
| 5 | |||
| 6 | The whole native path may be too big, leading to shebang | ||
| 7 | overflow. Let's just use the env shebang. | ||
| 8 | |||
| 9 | Denial reason: [1] | ||
| 10 | |||
| 11 | Upstream-Status: Denied [distribution] | ||
| 12 | |||
| 13 | [1] https://github.com/python/cpython/pull/93760#pullrequestreview-1005365737 | ||
| 14 | --- | ||
| 15 | Makefile.pre.in | 2 ++ | ||
| 16 | 1 file changed, 2 insertions(+) | ||
| 17 | |||
| 18 | diff --git a/Makefile.pre.in b/Makefile.pre.in | ||
| 19 | index 9ec3a71..f7d5382 100644 | ||
| 20 | --- a/Makefile.pre.in | ||
| 21 | +++ b/Makefile.pre.in | ||
| 22 | @@ -2585,6 +2585,8 @@ python-config: $(srcdir)/Misc/python-config.in Misc/python-config.sh | ||
| 23 | @ # Substitution happens here, as the completely-expanded BINDIR | ||
| 24 | @ # is not available in configure | ||
| 25 | sed -e "s,@EXENAME@,$(EXENAME)," < $(srcdir)/Misc/python-config.in >python-config.py | ||
| 26 | + @ # Otherwise we might get huge shebangs with native paths | ||
| 27 | + sed -i -e '1s|^#!.*|#!/usr/bin/env python3|' python-config.py | ||
| 28 | @ # Replace makefile compat. variable references with shell script compat. ones; $(VAR) -> ${VAR} | ||
| 29 | LC_ALL=C sed -e 's,\$$(\([A-Za-z0-9_]*\)),\$$\{\1\},g' < Misc/python-config.sh >python-config | ||
| 30 | @ # 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 @@ | |||
| 1 | From db5c5763f3e3172f1dd011355b41469770dafc0f Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Petr Viktorin <encukou@gmail.com> | ||
| 3 | Date: Thu, 28 Nov 2024 13:29:27 +0100 | ||
| 4 | Subject: [PATCH] gh-127330: Update for OpenSSL 3.4 & document+improve the | ||
| 5 | update process (GH-127331) | ||
| 6 | |||
| 7 | - Add `git describe` output to headers generated by `make_ssl_data.py` | ||
| 8 | |||
| 9 | This info is more important than the date when the file was generated. | ||
| 10 | It does mean that the tool now requires a Git checkout of OpenSSL, | ||
| 11 | not for example a release tarball. | ||
| 12 | |||
| 13 | - Regenerate the older file to add the info. | ||
| 14 | To the other older file, add a note about manual edits. | ||
| 15 | |||
| 16 | - Add notes on how to add a new OpenSSL version | ||
| 17 | |||
| 18 | - Add 3.4 error messages and multissl tests | ||
| 19 | |||
| 20 | Upstream-Status: Submitted [https://github.com/python/cpython/commit/db5c5763f3e3172f1dd011355b41469770dafc0f] | ||
| 21 | Signed-off-by: Peter Marko <peter.marko@siemens.com> | ||
| 22 | --- | ||
| 23 | Modules/_ssl.c | 2 +- | ||
| 24 | Modules/_ssl_data_111.h | 4 +- | ||
| 25 | Modules/_ssl_data_300.h | 5 +- | ||
| 26 | Modules/{_ssl_data_31.h => _ssl_data_34.h} | 674 ++++++++++++++++++++- | ||
| 27 | Tools/c-analyzer/cpython/_parser.py | 4 +- | ||
| 28 | Tools/ssl/make_ssl_data.py | 34 +- | ||
| 29 | Tools/ssl/multissltests.py | 1 + | ||
| 30 | 7 files changed, 714 insertions(+), 10 deletions(-) | ||
| 31 | rename Modules/{_ssl_data_31.h => _ssl_data_34.h} (92%) | ||
| 32 | |||
| 33 | diff --git a/Modules/_ssl.c b/Modules/_ssl.c | ||
| 34 | index b6b5ebf094c..e5b8bf21002 100644 | ||
| 35 | --- a/Modules/_ssl.c | ||
| 36 | +++ b/Modules/_ssl.c | ||
| 37 | @@ -121,7 +121,7 @@ static void _PySSLFixErrno(void) { | ||
| 38 | |||
| 39 | /* Include generated data (error codes) */ | ||
| 40 | #if (OPENSSL_VERSION_NUMBER >= 0x30100000L) | ||
| 41 | -#include "_ssl_data_31.h" | ||
| 42 | +#include "_ssl_data_34.h" | ||
| 43 | #elif (OPENSSL_VERSION_NUMBER >= 0x30000000L) | ||
| 44 | #include "_ssl_data_300.h" | ||
| 45 | #elif (OPENSSL_VERSION_NUMBER >= 0x10101000L) | ||
| 46 | diff --git a/Modules/_ssl_data_111.h b/Modules/_ssl_data_111.h | ||
| 47 | index 093c786e6a2..061fac2bd58 100644 | ||
| 48 | --- a/Modules/_ssl_data_111.h | ||
| 49 | +++ b/Modules/_ssl_data_111.h | ||
| 50 | @@ -1,4 +1,6 @@ | ||
| 51 | -/* File generated by Tools/ssl/make_ssl_data.py *//* Generated on 2023-06-01T02:58:04.081473 */ | ||
| 52 | +/* File generated by Tools/ssl/make_ssl_data.py */ | ||
| 53 | +/* Generated on 2024-11-27T12:48:46.194048+00:00 */ | ||
| 54 | +/* Generated from Git commit OpenSSL_1_1_1w-0-ge04bd3433f */ | ||
| 55 | static struct py_ssl_library_code library_codes[] = { | ||
| 56 | #ifdef ERR_LIB_ASN1 | ||
| 57 | {"ASN1", ERR_LIB_ASN1}, | ||
| 58 | diff --git a/Modules/_ssl_data_300.h b/Modules/_ssl_data_300.h | ||
| 59 | index dc66731f6b6..b687ce43c77 100644 | ||
| 60 | --- a/Modules/_ssl_data_300.h | ||
| 61 | +++ b/Modules/_ssl_data_300.h | ||
| 62 | @@ -1,4 +1,7 @@ | ||
| 63 | -/* File generated by Tools/ssl/make_ssl_data.py *//* Generated on 2023-06-01T03:03:52.163218 */ | ||
| 64 | +/* File generated by Tools/ssl/make_ssl_data.py */ | ||
| 65 | +/* Generated on 2023-06-01T03:03:52.163218 */ | ||
| 66 | +/* Manually edited to add definitions from 1.1.1 (GH-105174) */ | ||
| 67 | + | ||
| 68 | static struct py_ssl_library_code library_codes[] = { | ||
| 69 | #ifdef ERR_LIB_ASN1 | ||
| 70 | {"ASN1", ERR_LIB_ASN1}, | ||
| 71 | diff --git a/Modules/_ssl_data_31.h b/Modules/_ssl_data_34.h | ||
| 72 | similarity index 92% | ||
| 73 | rename from Modules/_ssl_data_31.h | ||
| 74 | rename to Modules/_ssl_data_34.h | ||
| 75 | index c589c501f4e..d4af3e1c1fa 100644 | ||
| 76 | --- a/Modules/_ssl_data_31.h | ||
| 77 | +++ b/Modules/_ssl_data_34.h | ||
| 78 | @@ -1,4 +1,6 @@ | ||
| 79 | -/* File generated by Tools/ssl/make_ssl_data.py *//* Generated on 2023-06-01T03:04:00.275280 */ | ||
| 80 | +/* File generated by Tools/ssl/make_ssl_data.py */ | ||
| 81 | +/* Generated on 2024-11-27T12:35:52.276767+00:00 */ | ||
| 82 | +/* Generated from Git commit openssl-3.4.0-0-g98acb6b028 */ | ||
| 83 | static struct py_ssl_library_code library_codes[] = { | ||
| 84 | #ifdef ERR_LIB_ASN1 | ||
| 85 | {"ASN1", ERR_LIB_ASN1}, | ||
| 86 | @@ -300,6 +302,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 87 | #else | ||
| 88 | {"FIRST_NUM_TOO_LARGE", 13, 122}, | ||
| 89 | #endif | ||
| 90 | + #ifdef ASN1_R_GENERALIZEDTIME_IS_TOO_SHORT | ||
| 91 | + {"GENERALIZEDTIME_IS_TOO_SHORT", ERR_LIB_ASN1, ASN1_R_GENERALIZEDTIME_IS_TOO_SHORT}, | ||
| 92 | + #else | ||
| 93 | + {"GENERALIZEDTIME_IS_TOO_SHORT", 13, 232}, | ||
| 94 | + #endif | ||
| 95 | #ifdef ASN1_R_HEADER_TOO_LONG | ||
| 96 | {"HEADER_TOO_LONG", ERR_LIB_ASN1, ASN1_R_HEADER_TOO_LONG}, | ||
| 97 | #else | ||
| 98 | @@ -730,6 +737,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 99 | #else | ||
| 100 | {"UNSUPPORTED_TYPE", 13, 196}, | ||
| 101 | #endif | ||
| 102 | + #ifdef ASN1_R_UTCTIME_IS_TOO_SHORT | ||
| 103 | + {"UTCTIME_IS_TOO_SHORT", ERR_LIB_ASN1, ASN1_R_UTCTIME_IS_TOO_SHORT}, | ||
| 104 | + #else | ||
| 105 | + {"UTCTIME_IS_TOO_SHORT", 13, 233}, | ||
| 106 | + #endif | ||
| 107 | #ifdef ASN1_R_WRONG_INTEGER_TYPE | ||
| 108 | {"WRONG_INTEGER_TYPE", ERR_LIB_ASN1, ASN1_R_WRONG_INTEGER_TYPE}, | ||
| 109 | #else | ||
| 110 | @@ -845,6 +857,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 111 | #else | ||
| 112 | {"LISTEN_V6_ONLY", 32, 136}, | ||
| 113 | #endif | ||
| 114 | + #ifdef BIO_R_LOCAL_ADDR_NOT_AVAILABLE | ||
| 115 | + {"LOCAL_ADDR_NOT_AVAILABLE", ERR_LIB_BIO, BIO_R_LOCAL_ADDR_NOT_AVAILABLE}, | ||
| 116 | + #else | ||
| 117 | + {"LOCAL_ADDR_NOT_AVAILABLE", 32, 111}, | ||
| 118 | + #endif | ||
| 119 | #ifdef BIO_R_LOOKUP_RETURNED_NOTHING | ||
| 120 | {"LOOKUP_RETURNED_NOTHING", ERR_LIB_BIO, BIO_R_LOOKUP_RETURNED_NOTHING}, | ||
| 121 | #else | ||
| 122 | @@ -860,6 +877,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 123 | #else | ||
| 124 | {"NBIO_CONNECT_ERROR", 32, 110}, | ||
| 125 | #endif | ||
| 126 | + #ifdef BIO_R_NON_FATAL | ||
| 127 | + {"NON_FATAL", ERR_LIB_BIO, BIO_R_NON_FATAL}, | ||
| 128 | + #else | ||
| 129 | + {"NON_FATAL", 32, 112}, | ||
| 130 | + #endif | ||
| 131 | #ifdef BIO_R_NO_ACCEPT_ADDR_OR_SERVICE_SPECIFIED | ||
| 132 | {"NO_ACCEPT_ADDR_OR_SERVICE_SPECIFIED", ERR_LIB_BIO, BIO_R_NO_ACCEPT_ADDR_OR_SERVICE_SPECIFIED}, | ||
| 133 | #else | ||
| 134 | @@ -880,6 +902,26 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 135 | #else | ||
| 136 | {"NO_SUCH_FILE", 32, 128}, | ||
| 137 | #endif | ||
| 138 | + #ifdef BIO_R_PEER_ADDR_NOT_AVAILABLE | ||
| 139 | + {"PEER_ADDR_NOT_AVAILABLE", ERR_LIB_BIO, BIO_R_PEER_ADDR_NOT_AVAILABLE}, | ||
| 140 | + #else | ||
| 141 | + {"PEER_ADDR_NOT_AVAILABLE", 32, 114}, | ||
| 142 | + #endif | ||
| 143 | + #ifdef BIO_R_PORT_MISMATCH | ||
| 144 | + {"PORT_MISMATCH", ERR_LIB_BIO, BIO_R_PORT_MISMATCH}, | ||
| 145 | + #else | ||
| 146 | + {"PORT_MISMATCH", 32, 150}, | ||
| 147 | + #endif | ||
| 148 | + #ifdef BIO_R_TFO_DISABLED | ||
| 149 | + {"TFO_DISABLED", ERR_LIB_BIO, BIO_R_TFO_DISABLED}, | ||
| 150 | + #else | ||
| 151 | + {"TFO_DISABLED", 32, 106}, | ||
| 152 | + #endif | ||
| 153 | + #ifdef BIO_R_TFO_NO_KERNEL_SUPPORT | ||
| 154 | + {"TFO_NO_KERNEL_SUPPORT", ERR_LIB_BIO, BIO_R_TFO_NO_KERNEL_SUPPORT}, | ||
| 155 | + #else | ||
| 156 | + {"TFO_NO_KERNEL_SUPPORT", 32, 108}, | ||
| 157 | + #endif | ||
| 158 | #ifdef BIO_R_TRANSFER_ERROR | ||
| 159 | {"TRANSFER_ERROR", ERR_LIB_BIO, BIO_R_TRANSFER_ERROR}, | ||
| 160 | #else | ||
| 161 | @@ -920,6 +962,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 162 | #else | ||
| 163 | {"UNABLE_TO_REUSEADDR", 32, 139}, | ||
| 164 | #endif | ||
| 165 | + #ifdef BIO_R_UNABLE_TO_TFO | ||
| 166 | + {"UNABLE_TO_TFO", ERR_LIB_BIO, BIO_R_UNABLE_TO_TFO}, | ||
| 167 | + #else | ||
| 168 | + {"UNABLE_TO_TFO", 32, 109}, | ||
| 169 | + #endif | ||
| 170 | #ifdef BIO_R_UNAVAILABLE_IP_FAMILY | ||
| 171 | {"UNAVAILABLE_IP_FAMILY", ERR_LIB_BIO, BIO_R_UNAVAILABLE_IP_FAMILY}, | ||
| 172 | #else | ||
| 173 | @@ -1230,6 +1277,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 174 | #else | ||
| 175 | {"ERROR_VALIDATING_SIGNATURE", 58, 171}, | ||
| 176 | #endif | ||
| 177 | + #ifdef CMP_R_EXPECTED_POLLREQ | ||
| 178 | + {"EXPECTED_POLLREQ", ERR_LIB_CMP, CMP_R_EXPECTED_POLLREQ}, | ||
| 179 | + #else | ||
| 180 | + {"EXPECTED_POLLREQ", 58, 104}, | ||
| 181 | + #endif | ||
| 182 | #ifdef CMP_R_FAILED_BUILDING_OWN_CHAIN | ||
| 183 | {"FAILED_BUILDING_OWN_CHAIN", ERR_LIB_CMP, CMP_R_FAILED_BUILDING_OWN_CHAIN}, | ||
| 184 | #else | ||
| 185 | @@ -1250,16 +1302,51 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 186 | #else | ||
| 187 | {"FAIL_INFO_OUT_OF_RANGE", 58, 129}, | ||
| 188 | #endif | ||
| 189 | + #ifdef CMP_R_GENERATE_CERTREQTEMPLATE | ||
| 190 | + {"GENERATE_CERTREQTEMPLATE", ERR_LIB_CMP, CMP_R_GENERATE_CERTREQTEMPLATE}, | ||
| 191 | + #else | ||
| 192 | + {"GENERATE_CERTREQTEMPLATE", 58, 197}, | ||
| 193 | + #endif | ||
| 194 | + #ifdef CMP_R_GENERATE_CRLSTATUS | ||
| 195 | + {"GENERATE_CRLSTATUS", ERR_LIB_CMP, CMP_R_GENERATE_CRLSTATUS}, | ||
| 196 | + #else | ||
| 197 | + {"GENERATE_CRLSTATUS", 58, 198}, | ||
| 198 | + #endif | ||
| 199 | + #ifdef CMP_R_GETTING_GENP | ||
| 200 | + {"GETTING_GENP", ERR_LIB_CMP, CMP_R_GETTING_GENP}, | ||
| 201 | + #else | ||
| 202 | + {"GETTING_GENP", 58, 192}, | ||
| 203 | + #endif | ||
| 204 | + #ifdef CMP_R_GET_ITAV | ||
| 205 | + {"GET_ITAV", ERR_LIB_CMP, CMP_R_GET_ITAV}, | ||
| 206 | + #else | ||
| 207 | + {"GET_ITAV", 58, 199}, | ||
| 208 | + #endif | ||
| 209 | #ifdef CMP_R_INVALID_ARGS | ||
| 210 | {"INVALID_ARGS", ERR_LIB_CMP, CMP_R_INVALID_ARGS}, | ||
| 211 | #else | ||
| 212 | {"INVALID_ARGS", 58, 100}, | ||
| 213 | #endif | ||
| 214 | + #ifdef CMP_R_INVALID_GENP | ||
| 215 | + {"INVALID_GENP", ERR_LIB_CMP, CMP_R_INVALID_GENP}, | ||
| 216 | + #else | ||
| 217 | + {"INVALID_GENP", 58, 193}, | ||
| 218 | + #endif | ||
| 219 | + #ifdef CMP_R_INVALID_KEYSPEC | ||
| 220 | + {"INVALID_KEYSPEC", ERR_LIB_CMP, CMP_R_INVALID_KEYSPEC}, | ||
| 221 | + #else | ||
| 222 | + {"INVALID_KEYSPEC", 58, 202}, | ||
| 223 | + #endif | ||
| 224 | #ifdef CMP_R_INVALID_OPTION | ||
| 225 | {"INVALID_OPTION", ERR_LIB_CMP, CMP_R_INVALID_OPTION}, | ||
| 226 | #else | ||
| 227 | {"INVALID_OPTION", 58, 174}, | ||
| 228 | #endif | ||
| 229 | + #ifdef CMP_R_INVALID_ROOTCAKEYUPDATE | ||
| 230 | + {"INVALID_ROOTCAKEYUPDATE", ERR_LIB_CMP, CMP_R_INVALID_ROOTCAKEYUPDATE}, | ||
| 231 | + #else | ||
| 232 | + {"INVALID_ROOTCAKEYUPDATE", 58, 195}, | ||
| 233 | + #endif | ||
| 234 | #ifdef CMP_R_MISSING_CERTID | ||
| 235 | {"MISSING_CERTID", ERR_LIB_CMP, CMP_R_MISSING_CERTID}, | ||
| 236 | #else | ||
| 237 | @@ -1425,6 +1512,21 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 238 | #else | ||
| 239 | {"TRANSFER_ERROR", 58, 159}, | ||
| 240 | #endif | ||
| 241 | + #ifdef CMP_R_UNCLEAN_CTX | ||
| 242 | + {"UNCLEAN_CTX", ERR_LIB_CMP, CMP_R_UNCLEAN_CTX}, | ||
| 243 | + #else | ||
| 244 | + {"UNCLEAN_CTX", 58, 191}, | ||
| 245 | + #endif | ||
| 246 | + #ifdef CMP_R_UNEXPECTED_CERTPROFILE | ||
| 247 | + {"UNEXPECTED_CERTPROFILE", ERR_LIB_CMP, CMP_R_UNEXPECTED_CERTPROFILE}, | ||
| 248 | + #else | ||
| 249 | + {"UNEXPECTED_CERTPROFILE", 58, 196}, | ||
| 250 | + #endif | ||
| 251 | + #ifdef CMP_R_UNEXPECTED_CRLSTATUSLIST | ||
| 252 | + {"UNEXPECTED_CRLSTATUSLIST", ERR_LIB_CMP, CMP_R_UNEXPECTED_CRLSTATUSLIST}, | ||
| 253 | + #else | ||
| 254 | + {"UNEXPECTED_CRLSTATUSLIST", 58, 201}, | ||
| 255 | + #endif | ||
| 256 | #ifdef CMP_R_UNEXPECTED_PKIBODY | ||
| 257 | {"UNEXPECTED_PKIBODY", ERR_LIB_CMP, CMP_R_UNEXPECTED_PKIBODY}, | ||
| 258 | #else | ||
| 259 | @@ -1435,11 +1537,21 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 260 | #else | ||
| 261 | {"UNEXPECTED_PKISTATUS", 58, 185}, | ||
| 262 | #endif | ||
| 263 | + #ifdef CMP_R_UNEXPECTED_POLLREQ | ||
| 264 | + {"UNEXPECTED_POLLREQ", ERR_LIB_CMP, CMP_R_UNEXPECTED_POLLREQ}, | ||
| 265 | + #else | ||
| 266 | + {"UNEXPECTED_POLLREQ", 58, 105}, | ||
| 267 | + #endif | ||
| 268 | #ifdef CMP_R_UNEXPECTED_PVNO | ||
| 269 | {"UNEXPECTED_PVNO", ERR_LIB_CMP, CMP_R_UNEXPECTED_PVNO}, | ||
| 270 | #else | ||
| 271 | {"UNEXPECTED_PVNO", 58, 153}, | ||
| 272 | #endif | ||
| 273 | + #ifdef CMP_R_UNEXPECTED_SENDER | ||
| 274 | + {"UNEXPECTED_SENDER", ERR_LIB_CMP, CMP_R_UNEXPECTED_SENDER}, | ||
| 275 | + #else | ||
| 276 | + {"UNEXPECTED_SENDER", 58, 106}, | ||
| 277 | + #endif | ||
| 278 | #ifdef CMP_R_UNKNOWN_ALGORITHM_ID | ||
| 279 | {"UNKNOWN_ALGORITHM_ID", ERR_LIB_CMP, CMP_R_UNKNOWN_ALGORITHM_ID}, | ||
| 280 | #else | ||
| 281 | @@ -1450,6 +1562,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 282 | #else | ||
| 283 | {"UNKNOWN_CERT_TYPE", 58, 135}, | ||
| 284 | #endif | ||
| 285 | + #ifdef CMP_R_UNKNOWN_CRL_ISSUER | ||
| 286 | + {"UNKNOWN_CRL_ISSUER", ERR_LIB_CMP, CMP_R_UNKNOWN_CRL_ISSUER}, | ||
| 287 | + #else | ||
| 288 | + {"UNKNOWN_CRL_ISSUER", 58, 200}, | ||
| 289 | + #endif | ||
| 290 | #ifdef CMP_R_UNKNOWN_PKISTATUS | ||
| 291 | {"UNKNOWN_PKISTATUS", ERR_LIB_CMP, CMP_R_UNKNOWN_PKISTATUS}, | ||
| 292 | #else | ||
| 293 | @@ -1465,6 +1582,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 294 | #else | ||
| 295 | {"UNSUPPORTED_KEY_TYPE", 58, 137}, | ||
| 296 | #endif | ||
| 297 | + #ifdef CMP_R_UNSUPPORTED_PKIBODY | ||
| 298 | + {"UNSUPPORTED_PKIBODY", ERR_LIB_CMP, CMP_R_UNSUPPORTED_PKIBODY}, | ||
| 299 | + #else | ||
| 300 | + {"UNSUPPORTED_PKIBODY", 58, 101}, | ||
| 301 | + #endif | ||
| 302 | #ifdef CMP_R_UNSUPPORTED_PROTECTION_ALG_DHBASEDMAC | ||
| 303 | {"UNSUPPORTED_PROTECTION_ALG_DHBASEDMAC", ERR_LIB_CMP, CMP_R_UNSUPPORTED_PROTECTION_ALG_DHBASEDMAC}, | ||
| 304 | #else | ||
| 305 | @@ -1825,6 +1947,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 306 | #else | ||
| 307 | {"NO_SIGNERS", 46, 135}, | ||
| 308 | #endif | ||
| 309 | + #ifdef CMS_R_OPERATION_UNSUPPORTED | ||
| 310 | + {"OPERATION_UNSUPPORTED", ERR_LIB_CMS, CMS_R_OPERATION_UNSUPPORTED}, | ||
| 311 | + #else | ||
| 312 | + {"OPERATION_UNSUPPORTED", 46, 182}, | ||
| 313 | + #endif | ||
| 314 | #ifdef CMS_R_PEER_KEY_ERROR | ||
| 315 | {"PEER_KEY_ERROR", ERR_LIB_CMS, CMS_R_PEER_KEY_ERROR}, | ||
| 316 | #else | ||
| 317 | @@ -1960,6 +2087,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 318 | #else | ||
| 319 | {"UNSUPPORTED_RECIPIENT_TYPE", 46, 154}, | ||
| 320 | #endif | ||
| 321 | + #ifdef CMS_R_UNSUPPORTED_SIGNATURE_ALGORITHM | ||
| 322 | + {"UNSUPPORTED_SIGNATURE_ALGORITHM", ERR_LIB_CMS, CMS_R_UNSUPPORTED_SIGNATURE_ALGORITHM}, | ||
| 323 | + #else | ||
| 324 | + {"UNSUPPORTED_SIGNATURE_ALGORITHM", 46, 195}, | ||
| 325 | + #endif | ||
| 326 | #ifdef CMS_R_UNSUPPORTED_TYPE | ||
| 327 | {"UNSUPPORTED_TYPE", ERR_LIB_CMS, CMS_R_UNSUPPORTED_TYPE}, | ||
| 328 | #else | ||
| 329 | @@ -1985,6 +2117,31 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 330 | #else | ||
| 331 | {"WRAP_ERROR", 46, 159}, | ||
| 332 | #endif | ||
| 333 | + #ifdef COMP_R_BROTLI_DECODE_ERROR | ||
| 334 | + {"BROTLI_DECODE_ERROR", ERR_LIB_COMP, COMP_R_BROTLI_DECODE_ERROR}, | ||
| 335 | + #else | ||
| 336 | + {"BROTLI_DECODE_ERROR", 41, 102}, | ||
| 337 | + #endif | ||
| 338 | + #ifdef COMP_R_BROTLI_DEFLATE_ERROR | ||
| 339 | + {"BROTLI_DEFLATE_ERROR", ERR_LIB_COMP, COMP_R_BROTLI_DEFLATE_ERROR}, | ||
| 340 | + #else | ||
| 341 | + {"BROTLI_DEFLATE_ERROR", 41, 103}, | ||
| 342 | + #endif | ||
| 343 | + #ifdef COMP_R_BROTLI_ENCODE_ERROR | ||
| 344 | + {"BROTLI_ENCODE_ERROR", ERR_LIB_COMP, COMP_R_BROTLI_ENCODE_ERROR}, | ||
| 345 | + #else | ||
| 346 | + {"BROTLI_ENCODE_ERROR", 41, 106}, | ||
| 347 | + #endif | ||
| 348 | + #ifdef COMP_R_BROTLI_INFLATE_ERROR | ||
| 349 | + {"BROTLI_INFLATE_ERROR", ERR_LIB_COMP, COMP_R_BROTLI_INFLATE_ERROR}, | ||
| 350 | + #else | ||
| 351 | + {"BROTLI_INFLATE_ERROR", 41, 104}, | ||
| 352 | + #endif | ||
| 353 | + #ifdef COMP_R_BROTLI_NOT_SUPPORTED | ||
| 354 | + {"BROTLI_NOT_SUPPORTED", ERR_LIB_COMP, COMP_R_BROTLI_NOT_SUPPORTED}, | ||
| 355 | + #else | ||
| 356 | + {"BROTLI_NOT_SUPPORTED", 41, 105}, | ||
| 357 | + #endif | ||
| 358 | #ifdef COMP_R_ZLIB_DEFLATE_ERROR | ||
| 359 | {"ZLIB_DEFLATE_ERROR", ERR_LIB_COMP, COMP_R_ZLIB_DEFLATE_ERROR}, | ||
| 360 | #else | ||
| 361 | @@ -2000,6 +2157,26 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 362 | #else | ||
| 363 | {"ZLIB_NOT_SUPPORTED", 41, 101}, | ||
| 364 | #endif | ||
| 365 | + #ifdef COMP_R_ZSTD_COMPRESS_ERROR | ||
| 366 | + {"ZSTD_COMPRESS_ERROR", ERR_LIB_COMP, COMP_R_ZSTD_COMPRESS_ERROR}, | ||
| 367 | + #else | ||
| 368 | + {"ZSTD_COMPRESS_ERROR", 41, 107}, | ||
| 369 | + #endif | ||
| 370 | + #ifdef COMP_R_ZSTD_DECODE_ERROR | ||
| 371 | + {"ZSTD_DECODE_ERROR", ERR_LIB_COMP, COMP_R_ZSTD_DECODE_ERROR}, | ||
| 372 | + #else | ||
| 373 | + {"ZSTD_DECODE_ERROR", 41, 108}, | ||
| 374 | + #endif | ||
| 375 | + #ifdef COMP_R_ZSTD_DECOMPRESS_ERROR | ||
| 376 | + {"ZSTD_DECOMPRESS_ERROR", ERR_LIB_COMP, COMP_R_ZSTD_DECOMPRESS_ERROR}, | ||
| 377 | + #else | ||
| 378 | + {"ZSTD_DECOMPRESS_ERROR", 41, 109}, | ||
| 379 | + #endif | ||
| 380 | + #ifdef COMP_R_ZSTD_NOT_SUPPORTED | ||
| 381 | + {"ZSTD_NOT_SUPPORTED", ERR_LIB_COMP, COMP_R_ZSTD_NOT_SUPPORTED}, | ||
| 382 | + #else | ||
| 383 | + {"ZSTD_NOT_SUPPORTED", 41, 110}, | ||
| 384 | + #endif | ||
| 385 | #ifdef CONF_R_ERROR_LOADING_DSO | ||
| 386 | {"ERROR_LOADING_DSO", ERR_LIB_CONF, CONF_R_ERROR_LOADING_DSO}, | ||
| 387 | #else | ||
| 388 | @@ -2085,6 +2262,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 389 | #else | ||
| 390 | {"RECURSIVE_DIRECTORY_INCLUDE", 14, 111}, | ||
| 391 | #endif | ||
| 392 | + #ifdef CONF_R_RECURSIVE_SECTION_REFERENCE | ||
| 393 | + {"RECURSIVE_SECTION_REFERENCE", ERR_LIB_CONF, CONF_R_RECURSIVE_SECTION_REFERENCE}, | ||
| 394 | + #else | ||
| 395 | + {"RECURSIVE_SECTION_REFERENCE", 14, 126}, | ||
| 396 | + #endif | ||
| 397 | #ifdef CONF_R_RELATIVE_PATH | ||
| 398 | {"RELATIVE_PATH", ERR_LIB_CONF, CONF_R_RELATIVE_PATH}, | ||
| 399 | #else | ||
| 400 | @@ -2370,6 +2552,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 401 | #else | ||
| 402 | {"TOO_MANY_BYTES", 15, 113}, | ||
| 403 | #endif | ||
| 404 | + #ifdef CRYPTO_R_TOO_MANY_NAMES | ||
| 405 | + {"TOO_MANY_NAMES", ERR_LIB_CRYPTO, CRYPTO_R_TOO_MANY_NAMES}, | ||
| 406 | + #else | ||
| 407 | + {"TOO_MANY_NAMES", 15, 132}, | ||
| 408 | + #endif | ||
| 409 | #ifdef CRYPTO_R_TOO_MANY_RECORDS | ||
| 410 | {"TOO_MANY_RECORDS", ERR_LIB_CRYPTO, CRYPTO_R_TOO_MANY_RECORDS}, | ||
| 411 | #else | ||
| 412 | @@ -2560,6 +2747,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 413 | #else | ||
| 414 | {"INVALID_SECRET", 5, 128}, | ||
| 415 | #endif | ||
| 416 | + #ifdef DH_R_INVALID_SIZE | ||
| 417 | + {"INVALID_SIZE", ERR_LIB_DH, DH_R_INVALID_SIZE}, | ||
| 418 | + #else | ||
| 419 | + {"INVALID_SIZE", 5, 129}, | ||
| 420 | + #endif | ||
| 421 | #ifdef DH_R_KDF_PARAMETER_ERROR | ||
| 422 | {"KDF_PARAMETER_ERROR", ERR_LIB_DH, DH_R_KDF_PARAMETER_ERROR}, | ||
| 423 | #else | ||
| 424 | @@ -2610,6 +2802,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 425 | #else | ||
| 426 | {"PEER_KEY_ERROR", 5, 111}, | ||
| 427 | #endif | ||
| 428 | + #ifdef DH_R_Q_TOO_LARGE | ||
| 429 | + {"Q_TOO_LARGE", ERR_LIB_DH, DH_R_Q_TOO_LARGE}, | ||
| 430 | + #else | ||
| 431 | + {"Q_TOO_LARGE", 5, 130}, | ||
| 432 | + #endif | ||
| 433 | #ifdef DH_R_SHARED_INFO_ERROR | ||
| 434 | {"SHARED_INFO_ERROR", ERR_LIB_DH, DH_R_SHARED_INFO_ERROR}, | ||
| 435 | #else | ||
| 436 | @@ -3545,6 +3742,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 437 | #else | ||
| 438 | {"GENERATE_ERROR", 6, 214}, | ||
| 439 | #endif | ||
| 440 | + #ifdef EVP_R_GETTING_ALGORITHMIDENTIFIER_NOT_SUPPORTED | ||
| 441 | + {"GETTING_ALGORITHMIDENTIFIER_NOT_SUPPORTED", ERR_LIB_EVP, EVP_R_GETTING_ALGORITHMIDENTIFIER_NOT_SUPPORTED}, | ||
| 442 | + #else | ||
| 443 | + {"GETTING_ALGORITHMIDENTIFIER_NOT_SUPPORTED", 6, 229}, | ||
| 444 | + #endif | ||
| 445 | #ifdef EVP_R_GET_RAW_KEY_FAILED | ||
| 446 | {"GET_RAW_KEY_FAILED", ERR_LIB_EVP, EVP_R_GET_RAW_KEY_FAILED}, | ||
| 447 | #else | ||
| 448 | @@ -3745,6 +3947,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 449 | #else | ||
| 450 | {"OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE", 6, 150}, | ||
| 451 | #endif | ||
| 452 | + #ifdef EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_SIGNATURE_TYPE | ||
| 453 | + {"OPERATION_NOT_SUPPORTED_FOR_THIS_SIGNATURE_TYPE", ERR_LIB_EVP, EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_SIGNATURE_TYPE}, | ||
| 454 | + #else | ||
| 455 | + {"OPERATION_NOT_SUPPORTED_FOR_THIS_SIGNATURE_TYPE", 6, 226}, | ||
| 456 | + #endif | ||
| 457 | #ifdef EVP_R_OUTPUT_WOULD_OVERFLOW | ||
| 458 | {"OUTPUT_WOULD_OVERFLOW", ERR_LIB_EVP, EVP_R_OUTPUT_WOULD_OVERFLOW}, | ||
| 459 | #else | ||
| 460 | @@ -3795,6 +4002,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 461 | #else | ||
| 462 | {"SET_DEFAULT_PROPERTY_FAILURE", 6, 209}, | ||
| 463 | #endif | ||
| 464 | + #ifdef EVP_R_SIGNATURE_TYPE_AND_KEY_TYPE_INCOMPATIBLE | ||
| 465 | + {"SIGNATURE_TYPE_AND_KEY_TYPE_INCOMPATIBLE", ERR_LIB_EVP, EVP_R_SIGNATURE_TYPE_AND_KEY_TYPE_INCOMPATIBLE}, | ||
| 466 | + #else | ||
| 467 | + {"SIGNATURE_TYPE_AND_KEY_TYPE_INCOMPATIBLE", 6, 228}, | ||
| 468 | + #endif | ||
| 469 | #ifdef EVP_R_TOO_MANY_RECORDS | ||
| 470 | {"TOO_MANY_RECORDS", ERR_LIB_EVP, EVP_R_TOO_MANY_RECORDS}, | ||
| 471 | #else | ||
| 472 | @@ -3825,6 +4037,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 473 | #else | ||
| 474 | {"UNABLE_TO_SET_CALLBACKS", 6, 217}, | ||
| 475 | #endif | ||
| 476 | + #ifdef EVP_R_UNKNOWN_BITS | ||
| 477 | + {"UNKNOWN_BITS", ERR_LIB_EVP, EVP_R_UNKNOWN_BITS}, | ||
| 478 | + #else | ||
| 479 | + {"UNKNOWN_BITS", 6, 166}, | ||
| 480 | + #endif | ||
| 481 | #ifdef EVP_R_UNKNOWN_CIPHER | ||
| 482 | {"UNKNOWN_CIPHER", ERR_LIB_EVP, EVP_R_UNKNOWN_CIPHER}, | ||
| 483 | #else | ||
| 484 | @@ -3840,6 +4057,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 485 | #else | ||
| 486 | {"UNKNOWN_KEY_TYPE", 6, 207}, | ||
| 487 | #endif | ||
| 488 | + #ifdef EVP_R_UNKNOWN_MAX_SIZE | ||
| 489 | + {"UNKNOWN_MAX_SIZE", ERR_LIB_EVP, EVP_R_UNKNOWN_MAX_SIZE}, | ||
| 490 | + #else | ||
| 491 | + {"UNKNOWN_MAX_SIZE", 6, 167}, | ||
| 492 | + #endif | ||
| 493 | #ifdef EVP_R_UNKNOWN_OPTION | ||
| 494 | {"UNKNOWN_OPTION", ERR_LIB_EVP, EVP_R_UNKNOWN_OPTION}, | ||
| 495 | #else | ||
| 496 | @@ -3850,6 +4072,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 497 | #else | ||
| 498 | {"UNKNOWN_PBE_ALGORITHM", 6, 121}, | ||
| 499 | #endif | ||
| 500 | + #ifdef EVP_R_UNKNOWN_SECURITY_BITS | ||
| 501 | + {"UNKNOWN_SECURITY_BITS", ERR_LIB_EVP, EVP_R_UNKNOWN_SECURITY_BITS}, | ||
| 502 | + #else | ||
| 503 | + {"UNKNOWN_SECURITY_BITS", 6, 168}, | ||
| 504 | + #endif | ||
| 505 | #ifdef EVP_R_UNSUPPORTED_ALGORITHM | ||
| 506 | {"UNSUPPORTED_ALGORITHM", ERR_LIB_EVP, EVP_R_UNSUPPORTED_ALGORITHM}, | ||
| 507 | #else | ||
| 508 | @@ -4040,6 +4267,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 509 | #else | ||
| 510 | {"RESPONSE_PARSE_ERROR", 61, 104}, | ||
| 511 | #endif | ||
| 512 | + #ifdef HTTP_R_RESPONSE_TOO_MANY_HDRLINES | ||
| 513 | + {"RESPONSE_TOO_MANY_HDRLINES", ERR_LIB_HTTP, HTTP_R_RESPONSE_TOO_MANY_HDRLINES}, | ||
| 514 | + #else | ||
| 515 | + {"RESPONSE_TOO_MANY_HDRLINES", 61, 130}, | ||
| 516 | + #endif | ||
| 517 | #ifdef HTTP_R_RETRY_TIMEOUT | ||
| 518 | {"RETRY_TIMEOUT", ERR_LIB_HTTP, HTTP_R_RETRY_TIMEOUT}, | ||
| 519 | #else | ||
| 520 | @@ -4530,6 +4762,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 521 | #else | ||
| 522 | {"UNSUPPORTED_PUBLIC_KEY_TYPE", 9, 110}, | ||
| 523 | #endif | ||
| 524 | + #ifdef PKCS12_R_CALLBACK_FAILED | ||
| 525 | + {"CALLBACK_FAILED", ERR_LIB_PKCS12, PKCS12_R_CALLBACK_FAILED}, | ||
| 526 | + #else | ||
| 527 | + {"CALLBACK_FAILED", 35, 115}, | ||
| 528 | + #endif | ||
| 529 | #ifdef PKCS12_R_CANT_PACK_STRUCTURE | ||
| 530 | {"CANT_PACK_STRUCTURE", ERR_LIB_PKCS12, PKCS12_R_CANT_PACK_STRUCTURE}, | ||
| 531 | #else | ||
| 532 | @@ -4920,6 +5157,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 533 | #else | ||
| 534 | {"CIPHER_OPERATION_FAILED", 57, 102}, | ||
| 535 | #endif | ||
| 536 | + #ifdef PROV_R_COFACTOR_REQUIRED | ||
| 537 | + {"COFACTOR_REQUIRED", ERR_LIB_PROV, PROV_R_COFACTOR_REQUIRED}, | ||
| 538 | + #else | ||
| 539 | + {"COFACTOR_REQUIRED", 57, 236}, | ||
| 540 | + #endif | ||
| 541 | #ifdef PROV_R_DERIVATION_FUNCTION_INIT_FAILED | ||
| 542 | {"DERIVATION_FUNCTION_INIT_FAILED", ERR_LIB_PROV, PROV_R_DERIVATION_FUNCTION_INIT_FAILED}, | ||
| 543 | #else | ||
| 544 | @@ -4935,6 +5177,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 545 | #else | ||
| 546 | {"EMS_NOT_ENABLED", 57, 233}, | ||
| 547 | #endif | ||
| 548 | + #ifdef PROV_R_ENTROPY_SOURCE_FAILED_CONTINUOUS_TESTS | ||
| 549 | + {"ENTROPY_SOURCE_FAILED_CONTINUOUS_TESTS", ERR_LIB_PROV, PROV_R_ENTROPY_SOURCE_FAILED_CONTINUOUS_TESTS}, | ||
| 550 | + #else | ||
| 551 | + {"ENTROPY_SOURCE_FAILED_CONTINUOUS_TESTS", 57, 244}, | ||
| 552 | + #endif | ||
| 553 | #ifdef PROV_R_ENTROPY_SOURCE_STRENGTH_TOO_WEAK | ||
| 554 | {"ENTROPY_SOURCE_STRENGTH_TOO_WEAK", ERR_LIB_PROV, PROV_R_ENTROPY_SOURCE_STRENGTH_TOO_WEAK}, | ||
| 555 | #else | ||
| 556 | @@ -4990,6 +5237,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 557 | #else | ||
| 558 | {"FAILED_TO_SIGN", 57, 175}, | ||
| 559 | #endif | ||
| 560 | + #ifdef PROV_R_FINAL_CALL_OUT_OF_ORDER | ||
| 561 | + {"FINAL_CALL_OUT_OF_ORDER", ERR_LIB_PROV, PROV_R_FINAL_CALL_OUT_OF_ORDER}, | ||
| 562 | + #else | ||
| 563 | + {"FINAL_CALL_OUT_OF_ORDER", 57, 237}, | ||
| 564 | + #endif | ||
| 565 | #ifdef PROV_R_FIPS_MODULE_CONDITIONAL_ERROR | ||
| 566 | {"FIPS_MODULE_CONDITIONAL_ERROR", ERR_LIB_PROV, PROV_R_FIPS_MODULE_CONDITIONAL_ERROR}, | ||
| 567 | #else | ||
| 568 | @@ -5020,6 +5272,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 569 | #else | ||
| 570 | {"INDICATOR_INTEGRITY_FAILURE", 57, 210}, | ||
| 571 | #endif | ||
| 572 | + #ifdef PROV_R_INIT_CALL_OUT_OF_ORDER | ||
| 573 | + {"INIT_CALL_OUT_OF_ORDER", ERR_LIB_PROV, PROV_R_INIT_CALL_OUT_OF_ORDER}, | ||
| 574 | + #else | ||
| 575 | + {"INIT_CALL_OUT_OF_ORDER", 57, 238}, | ||
| 576 | + #endif | ||
| 577 | #ifdef PROV_R_INSUFFICIENT_DRBG_STRENGTH | ||
| 578 | {"INSUFFICIENT_DRBG_STRENGTH", ERR_LIB_PROV, PROV_R_INSUFFICIENT_DRBG_STRENGTH}, | ||
| 579 | #else | ||
| 580 | @@ -5030,6 +5287,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 581 | #else | ||
| 582 | {"INVALID_AAD", 57, 108}, | ||
| 583 | #endif | ||
| 584 | + #ifdef PROV_R_INVALID_AEAD | ||
| 585 | + {"INVALID_AEAD", ERR_LIB_PROV, PROV_R_INVALID_AEAD}, | ||
| 586 | + #else | ||
| 587 | + {"INVALID_AEAD", 57, 231}, | ||
| 588 | + #endif | ||
| 589 | #ifdef PROV_R_INVALID_CONFIG_DATA | ||
| 590 | {"INVALID_CONFIG_DATA", ERR_LIB_PROV, PROV_R_INVALID_CONFIG_DATA}, | ||
| 591 | #else | ||
| 592 | @@ -5070,6 +5332,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 593 | #else | ||
| 594 | {"INVALID_DIGEST_SIZE", 57, 218}, | ||
| 595 | #endif | ||
| 596 | + #ifdef PROV_R_INVALID_EDDSA_INSTANCE_FOR_ATTEMPTED_OPERATION | ||
| 597 | + {"INVALID_EDDSA_INSTANCE_FOR_ATTEMPTED_OPERATION", ERR_LIB_PROV, PROV_R_INVALID_EDDSA_INSTANCE_FOR_ATTEMPTED_OPERATION}, | ||
| 598 | + #else | ||
| 599 | + {"INVALID_EDDSA_INSTANCE_FOR_ATTEMPTED_OPERATION", 57, 243}, | ||
| 600 | + #endif | ||
| 601 | #ifdef PROV_R_INVALID_INPUT_LENGTH | ||
| 602 | {"INVALID_INPUT_LENGTH", ERR_LIB_PROV, PROV_R_INVALID_INPUT_LENGTH}, | ||
| 603 | #else | ||
| 604 | @@ -5085,6 +5352,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 605 | #else | ||
| 606 | {"INVALID_IV_LENGTH", 57, 109}, | ||
| 607 | #endif | ||
| 608 | + #ifdef PROV_R_INVALID_KDF | ||
| 609 | + {"INVALID_KDF", ERR_LIB_PROV, PROV_R_INVALID_KDF}, | ||
| 610 | + #else | ||
| 611 | + {"INVALID_KDF", 57, 232}, | ||
| 612 | + #endif | ||
| 613 | #ifdef PROV_R_INVALID_KEY | ||
| 614 | {"INVALID_KEY", ERR_LIB_PROV, PROV_R_INVALID_KEY}, | ||
| 615 | #else | ||
| 616 | @@ -5100,6 +5372,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 617 | #else | ||
| 618 | {"INVALID_MAC", 57, 151}, | ||
| 619 | #endif | ||
| 620 | + #ifdef PROV_R_INVALID_MEMORY_SIZE | ||
| 621 | + {"INVALID_MEMORY_SIZE", ERR_LIB_PROV, PROV_R_INVALID_MEMORY_SIZE}, | ||
| 622 | + #else | ||
| 623 | + {"INVALID_MEMORY_SIZE", 57, 235}, | ||
| 624 | + #endif | ||
| 625 | #ifdef PROV_R_INVALID_MGF1_MD | ||
| 626 | {"INVALID_MGF1_MD", ERR_LIB_PROV, PROV_R_INVALID_MGF1_MD}, | ||
| 627 | #else | ||
| 628 | @@ -5120,6 +5397,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 629 | #else | ||
| 630 | {"INVALID_PADDING_MODE", 57, 168}, | ||
| 631 | #endif | ||
| 632 | + #ifdef PROV_R_INVALID_PREHASHED_DIGEST_LENGTH | ||
| 633 | + {"INVALID_PREHASHED_DIGEST_LENGTH", ERR_LIB_PROV, PROV_R_INVALID_PREHASHED_DIGEST_LENGTH}, | ||
| 634 | + #else | ||
| 635 | + {"INVALID_PREHASHED_DIGEST_LENGTH", 57, 241}, | ||
| 636 | + #endif | ||
| 637 | #ifdef PROV_R_INVALID_PUBINFO | ||
| 638 | {"INVALID_PUBINFO", ERR_LIB_PROV, PROV_R_INVALID_PUBINFO}, | ||
| 639 | #else | ||
| 640 | @@ -5155,6 +5437,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 641 | #else | ||
| 642 | {"INVALID_TAG_LENGTH", 57, 118}, | ||
| 643 | #endif | ||
| 644 | + #ifdef PROV_R_INVALID_THREAD_POOL_SIZE | ||
| 645 | + {"INVALID_THREAD_POOL_SIZE", ERR_LIB_PROV, PROV_R_INVALID_THREAD_POOL_SIZE}, | ||
| 646 | + #else | ||
| 647 | + {"INVALID_THREAD_POOL_SIZE", 57, 234}, | ||
| 648 | + #endif | ||
| 649 | #ifdef PROV_R_INVALID_UKM_LENGTH | ||
| 650 | {"INVALID_UKM_LENGTH", ERR_LIB_PROV, PROV_R_INVALID_UKM_LENGTH}, | ||
| 651 | #else | ||
| 652 | @@ -5300,6 +5587,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 653 | #else | ||
| 654 | {"NOT_XOF_OR_INVALID_LENGTH", 57, 113}, | ||
| 655 | #endif | ||
| 656 | + #ifdef PROV_R_NO_INSTANCE_ALLOWED | ||
| 657 | + {"NO_INSTANCE_ALLOWED", ERR_LIB_PROV, PROV_R_NO_INSTANCE_ALLOWED}, | ||
| 658 | + #else | ||
| 659 | + {"NO_INSTANCE_ALLOWED", 57, 242}, | ||
| 660 | + #endif | ||
| 661 | #ifdef PROV_R_NO_KEY_SET | ||
| 662 | {"NO_KEY_SET", ERR_LIB_PROV, PROV_R_NO_KEY_SET}, | ||
| 663 | #else | ||
| 664 | @@ -5310,6 +5602,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 665 | #else | ||
| 666 | {"NO_PARAMETERS_SET", 57, 177}, | ||
| 667 | #endif | ||
| 668 | + #ifdef PROV_R_ONESHOT_CALL_OUT_OF_ORDER | ||
| 669 | + {"ONESHOT_CALL_OUT_OF_ORDER", ERR_LIB_PROV, PROV_R_ONESHOT_CALL_OUT_OF_ORDER}, | ||
| 670 | + #else | ||
| 671 | + {"ONESHOT_CALL_OUT_OF_ORDER", 57, 239}, | ||
| 672 | + #endif | ||
| 673 | #ifdef PROV_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE | ||
| 674 | {"OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE", ERR_LIB_PROV, PROV_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE}, | ||
| 675 | #else | ||
| 676 | @@ -5460,6 +5757,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 677 | #else | ||
| 678 | {"UNSUPPORTED_NUMBER_OF_ROUNDS", 57, 152}, | ||
| 679 | #endif | ||
| 680 | + #ifdef PROV_R_UPDATE_CALL_OUT_OF_ORDER | ||
| 681 | + {"UPDATE_CALL_OUT_OF_ORDER", ERR_LIB_PROV, PROV_R_UPDATE_CALL_OUT_OF_ORDER}, | ||
| 682 | + #else | ||
| 683 | + {"UPDATE_CALL_OUT_OF_ORDER", 57, 240}, | ||
| 684 | + #endif | ||
| 685 | #ifdef PROV_R_URI_AUTHORITY_UNSUPPORTED | ||
| 686 | {"URI_AUTHORITY_UNSUPPORTED", ERR_LIB_PROV, PROV_R_URI_AUTHORITY_UNSUPPORTED}, | ||
| 687 | #else | ||
| 688 | @@ -5595,6 +5897,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 689 | #else | ||
| 690 | {"INTERNAL_ERROR", 36, 113}, | ||
| 691 | #endif | ||
| 692 | + #ifdef RAND_R_INVALID_PROPERTY_QUERY | ||
| 693 | + {"INVALID_PROPERTY_QUERY", ERR_LIB_RAND, RAND_R_INVALID_PROPERTY_QUERY}, | ||
| 694 | + #else | ||
| 695 | + {"INVALID_PROPERTY_QUERY", 36, 137}, | ||
| 696 | + #endif | ||
| 697 | #ifdef RAND_R_IN_ERROR_STATE | ||
| 698 | {"IN_ERROR_STATE", ERR_LIB_RAND, RAND_R_IN_ERROR_STATE}, | ||
| 699 | #else | ||
| 700 | @@ -6210,6 +6517,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 701 | #else | ||
| 702 | {"AT_LEAST_TLS_1_2_NEEDED_IN_SUITEB_MODE", 20, 158}, | ||
| 703 | #endif | ||
| 704 | + #ifdef SSL_R_BAD_CERTIFICATE | ||
| 705 | + {"BAD_CERTIFICATE", ERR_LIB_SSL, SSL_R_BAD_CERTIFICATE}, | ||
| 706 | + #else | ||
| 707 | + {"BAD_CERTIFICATE", 20, 348}, | ||
| 708 | + #endif | ||
| 709 | #ifdef SSL_R_BAD_CHANGE_CIPHER_SPEC | ||
| 710 | {"BAD_CHANGE_CIPHER_SPEC", ERR_LIB_SSL, SSL_R_BAD_CHANGE_CIPHER_SPEC}, | ||
| 711 | #else | ||
| 712 | @@ -6220,6 +6532,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 713 | #else | ||
| 714 | {"BAD_CIPHER", 20, 186}, | ||
| 715 | #endif | ||
| 716 | + #ifdef SSL_R_BAD_COMPRESSION_ALGORITHM | ||
| 717 | + {"BAD_COMPRESSION_ALGORITHM", ERR_LIB_SSL, SSL_R_BAD_COMPRESSION_ALGORITHM}, | ||
| 718 | + #else | ||
| 719 | + {"BAD_COMPRESSION_ALGORITHM", 20, 326}, | ||
| 720 | + #endif | ||
| 721 | #ifdef SSL_R_BAD_DATA | ||
| 722 | {"BAD_DATA", ERR_LIB_SSL, SSL_R_BAD_DATA}, | ||
| 723 | #else | ||
| 724 | @@ -6495,6 +6812,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 725 | #else | ||
| 726 | {"CONNECTION_TYPE_NOT_SET", 20, 144}, | ||
| 727 | #endif | ||
| 728 | + #ifdef SSL_R_CONN_USE_ONLY | ||
| 729 | + {"CONN_USE_ONLY", ERR_LIB_SSL, SSL_R_CONN_USE_ONLY}, | ||
| 730 | + #else | ||
| 731 | + {"CONN_USE_ONLY", 20, 356}, | ||
| 732 | + #endif | ||
| 733 | #ifdef SSL_R_CONTEXT_NOT_DANE_ENABLED | ||
| 734 | {"CONTEXT_NOT_DANE_ENABLED", ERR_LIB_SSL, SSL_R_CONTEXT_NOT_DANE_ENABLED}, | ||
| 735 | #else | ||
| 736 | @@ -6635,6 +6957,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 737 | #else | ||
| 738 | {"EE_KEY_TOO_SMALL", 20, 399}, | ||
| 739 | #endif | ||
| 740 | + #ifdef SSL_R_EMPTY_RAW_PUBLIC_KEY | ||
| 741 | + {"EMPTY_RAW_PUBLIC_KEY", ERR_LIB_SSL, SSL_R_EMPTY_RAW_PUBLIC_KEY}, | ||
| 742 | + #else | ||
| 743 | + {"EMPTY_RAW_PUBLIC_KEY", 20, 349}, | ||
| 744 | + #endif | ||
| 745 | #ifdef SSL_R_EMPTY_SRTP_PROTECTION_PROFILE_LIST | ||
| 746 | {"EMPTY_SRTP_PROTECTION_PROFILE_LIST", ERR_LIB_SSL, SSL_R_EMPTY_SRTP_PROTECTION_PROFILE_LIST}, | ||
| 747 | #else | ||
| 748 | @@ -6650,6 +6977,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 749 | #else | ||
| 750 | {"ERROR_IN_RECEIVED_CIPHER_LIST", 20, 151}, | ||
| 751 | #endif | ||
| 752 | + #ifdef SSL_R_ERROR_IN_SYSTEM_DEFAULT_CONFIG | ||
| 753 | + {"ERROR_IN_SYSTEM_DEFAULT_CONFIG", ERR_LIB_SSL, SSL_R_ERROR_IN_SYSTEM_DEFAULT_CONFIG}, | ||
| 754 | + #else | ||
| 755 | + {"ERROR_IN_SYSTEM_DEFAULT_CONFIG", 20, 419}, | ||
| 756 | + #endif | ||
| 757 | #ifdef SSL_R_ERROR_SETTING_TLSA_BASE_DOMAIN | ||
| 758 | {"ERROR_SETTING_TLSA_BASE_DOMAIN", ERR_LIB_SSL, SSL_R_ERROR_SETTING_TLSA_BASE_DOMAIN}, | ||
| 759 | #else | ||
| 760 | @@ -6680,11 +7012,26 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 761 | #else | ||
| 762 | {"EXT_LENGTH_MISMATCH", 20, 163}, | ||
| 763 | #endif | ||
| 764 | + #ifdef SSL_R_FAILED_TO_GET_PARAMETER | ||
| 765 | + {"FAILED_TO_GET_PARAMETER", ERR_LIB_SSL, SSL_R_FAILED_TO_GET_PARAMETER}, | ||
| 766 | + #else | ||
| 767 | + {"FAILED_TO_GET_PARAMETER", 20, 316}, | ||
| 768 | + #endif | ||
| 769 | #ifdef SSL_R_FAILED_TO_INIT_ASYNC | ||
| 770 | {"FAILED_TO_INIT_ASYNC", ERR_LIB_SSL, SSL_R_FAILED_TO_INIT_ASYNC}, | ||
| 771 | #else | ||
| 772 | {"FAILED_TO_INIT_ASYNC", 20, 405}, | ||
| 773 | #endif | ||
| 774 | + #ifdef SSL_R_FEATURE_NEGOTIATION_NOT_COMPLETE | ||
| 775 | + {"FEATURE_NEGOTIATION_NOT_COMPLETE", ERR_LIB_SSL, SSL_R_FEATURE_NEGOTIATION_NOT_COMPLETE}, | ||
| 776 | + #else | ||
| 777 | + {"FEATURE_NEGOTIATION_NOT_COMPLETE", 20, 417}, | ||
| 778 | + #endif | ||
| 779 | + #ifdef SSL_R_FEATURE_NOT_RENEGOTIABLE | ||
| 780 | + {"FEATURE_NOT_RENEGOTIABLE", ERR_LIB_SSL, SSL_R_FEATURE_NOT_RENEGOTIABLE}, | ||
| 781 | + #else | ||
| 782 | + {"FEATURE_NOT_RENEGOTIABLE", 20, 413}, | ||
| 783 | + #endif | ||
| 784 | #ifdef SSL_R_FRAGMENTED_CLIENT_HELLO | ||
| 785 | {"FRAGMENTED_CLIENT_HELLO", ERR_LIB_SSL, SSL_R_FRAGMENTED_CLIENT_HELLO}, | ||
| 786 | #else | ||
| 787 | @@ -6805,6 +7152,16 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 788 | #else | ||
| 789 | {"INVALID_NULL_CMD_NAME", 20, 385}, | ||
| 790 | #endif | ||
| 791 | + #ifdef SSL_R_INVALID_RAW_PUBLIC_KEY | ||
| 792 | + {"INVALID_RAW_PUBLIC_KEY", ERR_LIB_SSL, SSL_R_INVALID_RAW_PUBLIC_KEY}, | ||
| 793 | + #else | ||
| 794 | + {"INVALID_RAW_PUBLIC_KEY", 20, 350}, | ||
| 795 | + #endif | ||
| 796 | + #ifdef SSL_R_INVALID_RECORD | ||
| 797 | + {"INVALID_RECORD", ERR_LIB_SSL, SSL_R_INVALID_RECORD}, | ||
| 798 | + #else | ||
| 799 | + {"INVALID_RECORD", 20, 317}, | ||
| 800 | + #endif | ||
| 801 | #ifdef SSL_R_INVALID_SEQUENCE_NUMBER | ||
| 802 | {"INVALID_SEQUENCE_NUMBER", ERR_LIB_SSL, SSL_R_INVALID_SEQUENCE_NUMBER}, | ||
| 803 | #else | ||
| 804 | @@ -6865,6 +7222,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 805 | #else | ||
| 806 | {"LIBRARY_HAS_NO_CIPHERS", 20, 161}, | ||
| 807 | #endif | ||
| 808 | + #ifdef SSL_R_MAXIMUM_ENCRYPTED_PKTS_REACHED | ||
| 809 | + {"MAXIMUM_ENCRYPTED_PKTS_REACHED", ERR_LIB_SSL, SSL_R_MAXIMUM_ENCRYPTED_PKTS_REACHED}, | ||
| 810 | + #else | ||
| 811 | + {"MAXIMUM_ENCRYPTED_PKTS_REACHED", 20, 395}, | ||
| 812 | + #endif | ||
| 813 | #ifdef SSL_R_MISSING_DSA_SIGNING_CERT | ||
| 814 | {"MISSING_DSA_SIGNING_CERT", ERR_LIB_SSL, SSL_R_MISSING_DSA_SIGNING_CERT}, | ||
| 815 | #else | ||
| 816 | @@ -6925,6 +7287,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 817 | #else | ||
| 818 | {"MISSING_SUPPORTED_GROUPS_EXTENSION", 20, 209}, | ||
| 819 | #endif | ||
| 820 | + #ifdef SSL_R_MISSING_SUPPORTED_VERSIONS_EXTENSION | ||
| 821 | + {"MISSING_SUPPORTED_VERSIONS_EXTENSION", ERR_LIB_SSL, SSL_R_MISSING_SUPPORTED_VERSIONS_EXTENSION}, | ||
| 822 | + #else | ||
| 823 | + {"MISSING_SUPPORTED_VERSIONS_EXTENSION", 20, 420}, | ||
| 824 | + #endif | ||
| 825 | #ifdef SSL_R_MISSING_TMP_DH_KEY | ||
| 826 | {"MISSING_TMP_DH_KEY", ERR_LIB_SSL, SSL_R_MISSING_TMP_DH_KEY}, | ||
| 827 | #else | ||
| 828 | @@ -7065,6 +7432,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 829 | #else | ||
| 830 | {"NO_SRTP_PROFILES", 20, 359}, | ||
| 831 | #endif | ||
| 832 | + #ifdef SSL_R_NO_STREAM | ||
| 833 | + {"NO_STREAM", ERR_LIB_SSL, SSL_R_NO_STREAM}, | ||
| 834 | + #else | ||
| 835 | + {"NO_STREAM", 20, 355}, | ||
| 836 | + #endif | ||
| 837 | #ifdef SSL_R_NO_SUITABLE_DIGEST_ALGORITHM | ||
| 838 | {"NO_SUITABLE_DIGEST_ALGORITHM", ERR_LIB_SSL, SSL_R_NO_SUITABLE_DIGEST_ALGORITHM}, | ||
| 839 | #else | ||
| 840 | @@ -7080,6 +7452,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 841 | #else | ||
| 842 | {"NO_SUITABLE_KEY_SHARE", 20, 101}, | ||
| 843 | #endif | ||
| 844 | + #ifdef SSL_R_NO_SUITABLE_RECORD_LAYER | ||
| 845 | + {"NO_SUITABLE_RECORD_LAYER", ERR_LIB_SSL, SSL_R_NO_SUITABLE_RECORD_LAYER}, | ||
| 846 | + #else | ||
| 847 | + {"NO_SUITABLE_RECORD_LAYER", 20, 322}, | ||
| 848 | + #endif | ||
| 849 | #ifdef SSL_R_NO_SUITABLE_SIGNATURE_ALGORITHM | ||
| 850 | {"NO_SUITABLE_SIGNATURE_ALGORITHM", ERR_LIB_SSL, SSL_R_NO_SUITABLE_SIGNATURE_ALGORITHM}, | ||
| 851 | #else | ||
| 852 | @@ -7160,6 +7537,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 853 | #else | ||
| 854 | {"PIPELINE_FAILURE", 20, 406}, | ||
| 855 | #endif | ||
| 856 | + #ifdef SSL_R_POLL_REQUEST_NOT_SUPPORTED | ||
| 857 | + {"POLL_REQUEST_NOT_SUPPORTED", ERR_LIB_SSL, SSL_R_POLL_REQUEST_NOT_SUPPORTED}, | ||
| 858 | + #else | ||
| 859 | + {"POLL_REQUEST_NOT_SUPPORTED", 20, 418}, | ||
| 860 | + #endif | ||
| 861 | #ifdef SSL_R_POST_HANDSHAKE_AUTH_ENCODING_ERR | ||
| 862 | {"POST_HANDSHAKE_AUTH_ENCODING_ERR", ERR_LIB_SSL, SSL_R_POST_HANDSHAKE_AUTH_ENCODING_ERR}, | ||
| 863 | #else | ||
| 864 | @@ -7190,6 +7572,21 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 865 | #else | ||
| 866 | {"PSK_NO_SERVER_CB", 20, 225}, | ||
| 867 | #endif | ||
| 868 | + #ifdef SSL_R_QUIC_HANDSHAKE_LAYER_ERROR | ||
| 869 | + {"QUIC_HANDSHAKE_LAYER_ERROR", ERR_LIB_SSL, SSL_R_QUIC_HANDSHAKE_LAYER_ERROR}, | ||
| 870 | + #else | ||
| 871 | + {"QUIC_HANDSHAKE_LAYER_ERROR", 20, 393}, | ||
| 872 | + #endif | ||
| 873 | + #ifdef SSL_R_QUIC_NETWORK_ERROR | ||
| 874 | + {"QUIC_NETWORK_ERROR", ERR_LIB_SSL, SSL_R_QUIC_NETWORK_ERROR}, | ||
| 875 | + #else | ||
| 876 | + {"QUIC_NETWORK_ERROR", 20, 387}, | ||
| 877 | + #endif | ||
| 878 | + #ifdef SSL_R_QUIC_PROTOCOL_ERROR | ||
| 879 | + {"QUIC_PROTOCOL_ERROR", ERR_LIB_SSL, SSL_R_QUIC_PROTOCOL_ERROR}, | ||
| 880 | + #else | ||
| 881 | + {"QUIC_PROTOCOL_ERROR", 20, 382}, | ||
| 882 | + #endif | ||
| 883 | #ifdef SSL_R_READ_BIO_NOT_SET | ||
| 884 | {"READ_BIO_NOT_SET", ERR_LIB_SSL, SSL_R_READ_BIO_NOT_SET}, | ||
| 885 | #else | ||
| 886 | @@ -7200,6 +7597,16 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 887 | #else | ||
| 888 | {"READ_TIMEOUT_EXPIRED", 20, 312}, | ||
| 889 | #endif | ||
| 890 | + #ifdef SSL_R_RECORDS_NOT_RELEASED | ||
| 891 | + {"RECORDS_NOT_RELEASED", ERR_LIB_SSL, SSL_R_RECORDS_NOT_RELEASED}, | ||
| 892 | + #else | ||
| 893 | + {"RECORDS_NOT_RELEASED", 20, 321}, | ||
| 894 | + #endif | ||
| 895 | + #ifdef SSL_R_RECORD_LAYER_FAILURE | ||
| 896 | + {"RECORD_LAYER_FAILURE", ERR_LIB_SSL, SSL_R_RECORD_LAYER_FAILURE}, | ||
| 897 | + #else | ||
| 898 | + {"RECORD_LAYER_FAILURE", 20, 313}, | ||
| 899 | + #endif | ||
| 900 | #ifdef SSL_R_RECORD_LENGTH_MISMATCH | ||
| 901 | {"RECORD_LENGTH_MISMATCH", ERR_LIB_SSL, SSL_R_RECORD_LENGTH_MISMATCH}, | ||
| 902 | #else | ||
| 903 | @@ -7210,6 +7617,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 904 | #else | ||
| 905 | {"RECORD_TOO_SMALL", 20, 298}, | ||
| 906 | #endif | ||
| 907 | + #ifdef SSL_R_REMOTE_PEER_ADDRESS_NOT_SET | ||
| 908 | + {"REMOTE_PEER_ADDRESS_NOT_SET", ERR_LIB_SSL, SSL_R_REMOTE_PEER_ADDRESS_NOT_SET}, | ||
| 909 | + #else | ||
| 910 | + {"REMOTE_PEER_ADDRESS_NOT_SET", 20, 346}, | ||
| 911 | + #endif | ||
| 912 | #ifdef SSL_R_RENEGOTIATE_EXT_TOO_LONG | ||
| 913 | {"RENEGOTIATE_EXT_TOO_LONG", ERR_LIB_SSL, SSL_R_RENEGOTIATE_EXT_TOO_LONG}, | ||
| 914 | #else | ||
| 915 | @@ -7255,6 +7667,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 916 | #else | ||
| 917 | {"SCT_VERIFICATION_FAILED", 20, 208}, | ||
| 918 | #endif | ||
| 919 | + #ifdef SSL_R_SEQUENCE_CTR_WRAPPED | ||
| 920 | + {"SEQUENCE_CTR_WRAPPED", ERR_LIB_SSL, SSL_R_SEQUENCE_CTR_WRAPPED}, | ||
| 921 | + #else | ||
| 922 | + {"SEQUENCE_CTR_WRAPPED", 20, 327}, | ||
| 923 | + #endif | ||
| 924 | #ifdef SSL_R_SERVERHELLO_TLSEXT | ||
| 925 | {"SERVERHELLO_TLSEXT", ERR_LIB_SSL, SSL_R_SERVERHELLO_TLSEXT}, | ||
| 926 | #else | ||
| 927 | @@ -7325,6 +7742,16 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 928 | #else | ||
| 929 | {"SSLV3_ALERT_BAD_CERTIFICATE", 20, 1042}, | ||
| 930 | #endif | ||
| 931 | + #ifdef SSL_R_SSLV3_ALERT_BAD_CERTIFICATE | ||
| 932 | + {"SSLV3_ALERT_BAD_CERTIFICATE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_BAD_CERTIFICATE}, | ||
| 933 | + #else | ||
| 934 | + {"SSLV3_ALERT_BAD_CERTIFICATE", 20, 1042}, | ||
| 935 | + #endif | ||
| 936 | + #ifdef SSL_R_SSLV3_ALERT_BAD_RECORD_MAC | ||
| 937 | + {"SSLV3_ALERT_BAD_RECORD_MAC", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_BAD_RECORD_MAC}, | ||
| 938 | + #else | ||
| 939 | + {"SSLV3_ALERT_BAD_RECORD_MAC", 20, 1020}, | ||
| 940 | + #endif | ||
| 941 | #ifdef SSL_R_SSLV3_ALERT_BAD_RECORD_MAC | ||
| 942 | {"SSLV3_ALERT_BAD_RECORD_MAC", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_BAD_RECORD_MAC}, | ||
| 943 | #else | ||
| 944 | @@ -7335,11 +7762,26 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 945 | #else | ||
| 946 | {"SSLV3_ALERT_CERTIFICATE_EXPIRED", 20, 1045}, | ||
| 947 | #endif | ||
| 948 | + #ifdef SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED | ||
| 949 | + {"SSLV3_ALERT_CERTIFICATE_EXPIRED", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED}, | ||
| 950 | + #else | ||
| 951 | + {"SSLV3_ALERT_CERTIFICATE_EXPIRED", 20, 1045}, | ||
| 952 | + #endif | ||
| 953 | #ifdef SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED | ||
| 954 | {"SSLV3_ALERT_CERTIFICATE_REVOKED", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED}, | ||
| 955 | #else | ||
| 956 | {"SSLV3_ALERT_CERTIFICATE_REVOKED", 20, 1044}, | ||
| 957 | #endif | ||
| 958 | + #ifdef SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED | ||
| 959 | + {"SSLV3_ALERT_CERTIFICATE_REVOKED", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED}, | ||
| 960 | + #else | ||
| 961 | + {"SSLV3_ALERT_CERTIFICATE_REVOKED", 20, 1044}, | ||
| 962 | + #endif | ||
| 963 | + #ifdef SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN | ||
| 964 | + {"SSLV3_ALERT_CERTIFICATE_UNKNOWN", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN}, | ||
| 965 | + #else | ||
| 966 | + {"SSLV3_ALERT_CERTIFICATE_UNKNOWN", 20, 1046}, | ||
| 967 | + #endif | ||
| 968 | #ifdef SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN | ||
| 969 | {"SSLV3_ALERT_CERTIFICATE_UNKNOWN", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN}, | ||
| 970 | #else | ||
| 971 | @@ -7350,6 +7792,16 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 972 | #else | ||
| 973 | {"SSLV3_ALERT_DECOMPRESSION_FAILURE", 20, 1030}, | ||
| 974 | #endif | ||
| 975 | + #ifdef SSL_R_SSLV3_ALERT_DECOMPRESSION_FAILURE | ||
| 976 | + {"SSLV3_ALERT_DECOMPRESSION_FAILURE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_DECOMPRESSION_FAILURE}, | ||
| 977 | + #else | ||
| 978 | + {"SSLV3_ALERT_DECOMPRESSION_FAILURE", 20, 1030}, | ||
| 979 | + #endif | ||
| 980 | + #ifdef SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE | ||
| 981 | + {"SSLV3_ALERT_HANDSHAKE_FAILURE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE}, | ||
| 982 | + #else | ||
| 983 | + {"SSLV3_ALERT_HANDSHAKE_FAILURE", 20, 1040}, | ||
| 984 | + #endif | ||
| 985 | #ifdef SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE | ||
| 986 | {"SSLV3_ALERT_HANDSHAKE_FAILURE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE}, | ||
| 987 | #else | ||
| 988 | @@ -7360,11 +7812,26 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 989 | #else | ||
| 990 | {"SSLV3_ALERT_ILLEGAL_PARAMETER", 20, 1047}, | ||
| 991 | #endif | ||
| 992 | + #ifdef SSL_R_SSLV3_ALERT_ILLEGAL_PARAMETER | ||
| 993 | + {"SSLV3_ALERT_ILLEGAL_PARAMETER", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_ILLEGAL_PARAMETER}, | ||
| 994 | + #else | ||
| 995 | + {"SSLV3_ALERT_ILLEGAL_PARAMETER", 20, 1047}, | ||
| 996 | + #endif | ||
| 997 | #ifdef SSL_R_SSLV3_ALERT_NO_CERTIFICATE | ||
| 998 | {"SSLV3_ALERT_NO_CERTIFICATE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_NO_CERTIFICATE}, | ||
| 999 | #else | ||
| 1000 | {"SSLV3_ALERT_NO_CERTIFICATE", 20, 1041}, | ||
| 1001 | #endif | ||
| 1002 | + #ifdef SSL_R_SSLV3_ALERT_NO_CERTIFICATE | ||
| 1003 | + {"SSLV3_ALERT_NO_CERTIFICATE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_NO_CERTIFICATE}, | ||
| 1004 | + #else | ||
| 1005 | + {"SSLV3_ALERT_NO_CERTIFICATE", 20, 1041}, | ||
| 1006 | + #endif | ||
| 1007 | + #ifdef SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE | ||
| 1008 | + {"SSLV3_ALERT_UNEXPECTED_MESSAGE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE}, | ||
| 1009 | + #else | ||
| 1010 | + {"SSLV3_ALERT_UNEXPECTED_MESSAGE", 20, 1010}, | ||
| 1011 | + #endif | ||
| 1012 | #ifdef SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE | ||
| 1013 | {"SSLV3_ALERT_UNEXPECTED_MESSAGE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE}, | ||
| 1014 | #else | ||
| 1015 | @@ -7375,6 +7842,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 1016 | #else | ||
| 1017 | {"SSLV3_ALERT_UNSUPPORTED_CERTIFICATE", 20, 1043}, | ||
| 1018 | #endif | ||
| 1019 | + #ifdef SSL_R_SSLV3_ALERT_UNSUPPORTED_CERTIFICATE | ||
| 1020 | + {"SSLV3_ALERT_UNSUPPORTED_CERTIFICATE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_UNSUPPORTED_CERTIFICATE}, | ||
| 1021 | + #else | ||
| 1022 | + {"SSLV3_ALERT_UNSUPPORTED_CERTIFICATE", 20, 1043}, | ||
| 1023 | + #endif | ||
| 1024 | #ifdef SSL_R_SSL_COMMAND_SECTION_EMPTY | ||
| 1025 | {"SSL_COMMAND_SECTION_EMPTY", ERR_LIB_SSL, SSL_R_SSL_COMMAND_SECTION_EMPTY}, | ||
| 1026 | #else | ||
| 1027 | @@ -7450,6 +7922,36 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 1028 | #else | ||
| 1029 | {"STILL_IN_INIT", 20, 121}, | ||
| 1030 | #endif | ||
| 1031 | + #ifdef SSL_R_STREAM_COUNT_LIMITED | ||
| 1032 | + {"STREAM_COUNT_LIMITED", ERR_LIB_SSL, SSL_R_STREAM_COUNT_LIMITED}, | ||
| 1033 | + #else | ||
| 1034 | + {"STREAM_COUNT_LIMITED", 20, 411}, | ||
| 1035 | + #endif | ||
| 1036 | + #ifdef SSL_R_STREAM_FINISHED | ||
| 1037 | + {"STREAM_FINISHED", ERR_LIB_SSL, SSL_R_STREAM_FINISHED}, | ||
| 1038 | + #else | ||
| 1039 | + {"STREAM_FINISHED", 20, 365}, | ||
| 1040 | + #endif | ||
| 1041 | + #ifdef SSL_R_STREAM_RECV_ONLY | ||
| 1042 | + {"STREAM_RECV_ONLY", ERR_LIB_SSL, SSL_R_STREAM_RECV_ONLY}, | ||
| 1043 | + #else | ||
| 1044 | + {"STREAM_RECV_ONLY", 20, 366}, | ||
| 1045 | + #endif | ||
| 1046 | + #ifdef SSL_R_STREAM_RESET | ||
| 1047 | + {"STREAM_RESET", ERR_LIB_SSL, SSL_R_STREAM_RESET}, | ||
| 1048 | + #else | ||
| 1049 | + {"STREAM_RESET", 20, 375}, | ||
| 1050 | + #endif | ||
| 1051 | + #ifdef SSL_R_STREAM_SEND_ONLY | ||
| 1052 | + {"STREAM_SEND_ONLY", ERR_LIB_SSL, SSL_R_STREAM_SEND_ONLY}, | ||
| 1053 | + #else | ||
| 1054 | + {"STREAM_SEND_ONLY", 20, 379}, | ||
| 1055 | + #endif | ||
| 1056 | + #ifdef SSL_R_TLSV13_ALERT_CERTIFICATE_REQUIRED | ||
| 1057 | + {"TLSV13_ALERT_CERTIFICATE_REQUIRED", ERR_LIB_SSL, SSL_R_TLSV13_ALERT_CERTIFICATE_REQUIRED}, | ||
| 1058 | + #else | ||
| 1059 | + {"TLSV13_ALERT_CERTIFICATE_REQUIRED", 20, 1116}, | ||
| 1060 | + #endif | ||
| 1061 | #ifdef SSL_R_TLSV13_ALERT_CERTIFICATE_REQUIRED | ||
| 1062 | {"TLSV13_ALERT_CERTIFICATE_REQUIRED", ERR_LIB_SSL, SSL_R_TLSV13_ALERT_CERTIFICATE_REQUIRED}, | ||
| 1063 | #else | ||
| 1064 | @@ -7460,6 +7962,16 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 1065 | #else | ||
| 1066 | {"TLSV13_ALERT_MISSING_EXTENSION", 20, 1109}, | ||
| 1067 | #endif | ||
| 1068 | + #ifdef SSL_R_TLSV13_ALERT_MISSING_EXTENSION | ||
| 1069 | + {"TLSV13_ALERT_MISSING_EXTENSION", ERR_LIB_SSL, SSL_R_TLSV13_ALERT_MISSING_EXTENSION}, | ||
| 1070 | + #else | ||
| 1071 | + {"TLSV13_ALERT_MISSING_EXTENSION", 20, 1109}, | ||
| 1072 | + #endif | ||
| 1073 | + #ifdef SSL_R_TLSV1_ALERT_ACCESS_DENIED | ||
| 1074 | + {"TLSV1_ALERT_ACCESS_DENIED", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_ACCESS_DENIED}, | ||
| 1075 | + #else | ||
| 1076 | + {"TLSV1_ALERT_ACCESS_DENIED", 20, 1049}, | ||
| 1077 | + #endif | ||
| 1078 | #ifdef SSL_R_TLSV1_ALERT_ACCESS_DENIED | ||
| 1079 | {"TLSV1_ALERT_ACCESS_DENIED", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_ACCESS_DENIED}, | ||
| 1080 | #else | ||
| 1081 | @@ -7470,6 +7982,16 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 1082 | #else | ||
| 1083 | {"TLSV1_ALERT_DECODE_ERROR", 20, 1050}, | ||
| 1084 | #endif | ||
| 1085 | + #ifdef SSL_R_TLSV1_ALERT_DECODE_ERROR | ||
| 1086 | + {"TLSV1_ALERT_DECODE_ERROR", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_DECODE_ERROR}, | ||
| 1087 | + #else | ||
| 1088 | + {"TLSV1_ALERT_DECODE_ERROR", 20, 1050}, | ||
| 1089 | + #endif | ||
| 1090 | + #ifdef SSL_R_TLSV1_ALERT_DECRYPTION_FAILED | ||
| 1091 | + {"TLSV1_ALERT_DECRYPTION_FAILED", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_DECRYPTION_FAILED}, | ||
| 1092 | + #else | ||
| 1093 | + {"TLSV1_ALERT_DECRYPTION_FAILED", 20, 1021}, | ||
| 1094 | + #endif | ||
| 1095 | #ifdef SSL_R_TLSV1_ALERT_DECRYPTION_FAILED | ||
| 1096 | {"TLSV1_ALERT_DECRYPTION_FAILED", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_DECRYPTION_FAILED}, | ||
| 1097 | #else | ||
| 1098 | @@ -7480,6 +8002,16 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 1099 | #else | ||
| 1100 | {"TLSV1_ALERT_DECRYPT_ERROR", 20, 1051}, | ||
| 1101 | #endif | ||
| 1102 | + #ifdef SSL_R_TLSV1_ALERT_DECRYPT_ERROR | ||
| 1103 | + {"TLSV1_ALERT_DECRYPT_ERROR", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_DECRYPT_ERROR}, | ||
| 1104 | + #else | ||
| 1105 | + {"TLSV1_ALERT_DECRYPT_ERROR", 20, 1051}, | ||
| 1106 | + #endif | ||
| 1107 | + #ifdef SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION | ||
| 1108 | + {"TLSV1_ALERT_EXPORT_RESTRICTION", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION}, | ||
| 1109 | + #else | ||
| 1110 | + {"TLSV1_ALERT_EXPORT_RESTRICTION", 20, 1060}, | ||
| 1111 | + #endif | ||
| 1112 | #ifdef SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION | ||
| 1113 | {"TLSV1_ALERT_EXPORT_RESTRICTION", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION}, | ||
| 1114 | #else | ||
| 1115 | @@ -7490,6 +8022,16 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 1116 | #else | ||
| 1117 | {"TLSV1_ALERT_INAPPROPRIATE_FALLBACK", 20, 1086}, | ||
| 1118 | #endif | ||
| 1119 | + #ifdef SSL_R_TLSV1_ALERT_INAPPROPRIATE_FALLBACK | ||
| 1120 | + {"TLSV1_ALERT_INAPPROPRIATE_FALLBACK", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_INAPPROPRIATE_FALLBACK}, | ||
| 1121 | + #else | ||
| 1122 | + {"TLSV1_ALERT_INAPPROPRIATE_FALLBACK", 20, 1086}, | ||
| 1123 | + #endif | ||
| 1124 | + #ifdef SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY | ||
| 1125 | + {"TLSV1_ALERT_INSUFFICIENT_SECURITY", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY}, | ||
| 1126 | + #else | ||
| 1127 | + {"TLSV1_ALERT_INSUFFICIENT_SECURITY", 20, 1071}, | ||
| 1128 | + #endif | ||
| 1129 | #ifdef SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY | ||
| 1130 | {"TLSV1_ALERT_INSUFFICIENT_SECURITY", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY}, | ||
| 1131 | #else | ||
| 1132 | @@ -7500,6 +8042,26 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 1133 | #else | ||
| 1134 | {"TLSV1_ALERT_INTERNAL_ERROR", 20, 1080}, | ||
| 1135 | #endif | ||
| 1136 | + #ifdef SSL_R_TLSV1_ALERT_INTERNAL_ERROR | ||
| 1137 | + {"TLSV1_ALERT_INTERNAL_ERROR", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_INTERNAL_ERROR}, | ||
| 1138 | + #else | ||
| 1139 | + {"TLSV1_ALERT_INTERNAL_ERROR", 20, 1080}, | ||
| 1140 | + #endif | ||
| 1141 | + #ifdef SSL_R_TLSV1_ALERT_NO_APPLICATION_PROTOCOL | ||
| 1142 | + {"TLSV1_ALERT_NO_APPLICATION_PROTOCOL", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_NO_APPLICATION_PROTOCOL}, | ||
| 1143 | + #else | ||
| 1144 | + {"TLSV1_ALERT_NO_APPLICATION_PROTOCOL", 20, 1120}, | ||
| 1145 | + #endif | ||
| 1146 | + #ifdef SSL_R_TLSV1_ALERT_NO_APPLICATION_PROTOCOL | ||
| 1147 | + {"TLSV1_ALERT_NO_APPLICATION_PROTOCOL", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_NO_APPLICATION_PROTOCOL}, | ||
| 1148 | + #else | ||
| 1149 | + {"TLSV1_ALERT_NO_APPLICATION_PROTOCOL", 20, 1120}, | ||
| 1150 | + #endif | ||
| 1151 | + #ifdef SSL_R_TLSV1_ALERT_NO_RENEGOTIATION | ||
| 1152 | + {"TLSV1_ALERT_NO_RENEGOTIATION", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_NO_RENEGOTIATION}, | ||
| 1153 | + #else | ||
| 1154 | + {"TLSV1_ALERT_NO_RENEGOTIATION", 20, 1100}, | ||
| 1155 | + #endif | ||
| 1156 | #ifdef SSL_R_TLSV1_ALERT_NO_RENEGOTIATION | ||
| 1157 | {"TLSV1_ALERT_NO_RENEGOTIATION", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_NO_RENEGOTIATION}, | ||
| 1158 | #else | ||
| 1159 | @@ -7510,21 +8072,56 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 1160 | #else | ||
| 1161 | {"TLSV1_ALERT_PROTOCOL_VERSION", 20, 1070}, | ||
| 1162 | #endif | ||
| 1163 | + #ifdef SSL_R_TLSV1_ALERT_PROTOCOL_VERSION | ||
| 1164 | + {"TLSV1_ALERT_PROTOCOL_VERSION", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_PROTOCOL_VERSION}, | ||
| 1165 | + #else | ||
| 1166 | + {"TLSV1_ALERT_PROTOCOL_VERSION", 20, 1070}, | ||
| 1167 | + #endif | ||
| 1168 | #ifdef SSL_R_TLSV1_ALERT_RECORD_OVERFLOW | ||
| 1169 | {"TLSV1_ALERT_RECORD_OVERFLOW", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_RECORD_OVERFLOW}, | ||
| 1170 | #else | ||
| 1171 | {"TLSV1_ALERT_RECORD_OVERFLOW", 20, 1022}, | ||
| 1172 | #endif | ||
| 1173 | + #ifdef SSL_R_TLSV1_ALERT_RECORD_OVERFLOW | ||
| 1174 | + {"TLSV1_ALERT_RECORD_OVERFLOW", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_RECORD_OVERFLOW}, | ||
| 1175 | + #else | ||
| 1176 | + {"TLSV1_ALERT_RECORD_OVERFLOW", 20, 1022}, | ||
| 1177 | + #endif | ||
| 1178 | + #ifdef SSL_R_TLSV1_ALERT_UNKNOWN_CA | ||
| 1179 | + {"TLSV1_ALERT_UNKNOWN_CA", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_UNKNOWN_CA}, | ||
| 1180 | + #else | ||
| 1181 | + {"TLSV1_ALERT_UNKNOWN_CA", 20, 1048}, | ||
| 1182 | + #endif | ||
| 1183 | #ifdef SSL_R_TLSV1_ALERT_UNKNOWN_CA | ||
| 1184 | {"TLSV1_ALERT_UNKNOWN_CA", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_UNKNOWN_CA}, | ||
| 1185 | #else | ||
| 1186 | {"TLSV1_ALERT_UNKNOWN_CA", 20, 1048}, | ||
| 1187 | #endif | ||
| 1188 | + #ifdef SSL_R_TLSV1_ALERT_UNKNOWN_PSK_IDENTITY | ||
| 1189 | + {"TLSV1_ALERT_UNKNOWN_PSK_IDENTITY", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_UNKNOWN_PSK_IDENTITY}, | ||
| 1190 | + #else | ||
| 1191 | + {"TLSV1_ALERT_UNKNOWN_PSK_IDENTITY", 20, 1115}, | ||
| 1192 | + #endif | ||
| 1193 | + #ifdef SSL_R_TLSV1_ALERT_UNKNOWN_PSK_IDENTITY | ||
| 1194 | + {"TLSV1_ALERT_UNKNOWN_PSK_IDENTITY", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_UNKNOWN_PSK_IDENTITY}, | ||
| 1195 | + #else | ||
| 1196 | + {"TLSV1_ALERT_UNKNOWN_PSK_IDENTITY", 20, 1115}, | ||
| 1197 | + #endif | ||
| 1198 | #ifdef SSL_R_TLSV1_ALERT_USER_CANCELLED | ||
| 1199 | {"TLSV1_ALERT_USER_CANCELLED", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_USER_CANCELLED}, | ||
| 1200 | #else | ||
| 1201 | {"TLSV1_ALERT_USER_CANCELLED", 20, 1090}, | ||
| 1202 | #endif | ||
| 1203 | + #ifdef SSL_R_TLSV1_ALERT_USER_CANCELLED | ||
| 1204 | + {"TLSV1_ALERT_USER_CANCELLED", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_USER_CANCELLED}, | ||
| 1205 | + #else | ||
| 1206 | + {"TLSV1_ALERT_USER_CANCELLED", 20, 1090}, | ||
| 1207 | + #endif | ||
| 1208 | + #ifdef SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE | ||
| 1209 | + {"TLSV1_BAD_CERTIFICATE_HASH_VALUE", ERR_LIB_SSL, SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE}, | ||
| 1210 | + #else | ||
| 1211 | + {"TLSV1_BAD_CERTIFICATE_HASH_VALUE", 20, 1114}, | ||
| 1212 | + #endif | ||
| 1213 | #ifdef SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE | ||
| 1214 | {"TLSV1_BAD_CERTIFICATE_HASH_VALUE", ERR_LIB_SSL, SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE}, | ||
| 1215 | #else | ||
| 1216 | @@ -7535,6 +8132,16 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 1217 | #else | ||
| 1218 | {"TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE", 20, 1113}, | ||
| 1219 | #endif | ||
| 1220 | + #ifdef SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE | ||
| 1221 | + {"TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE", ERR_LIB_SSL, SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE}, | ||
| 1222 | + #else | ||
| 1223 | + {"TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE", 20, 1113}, | ||
| 1224 | + #endif | ||
| 1225 | + #ifdef SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE | ||
| 1226 | + {"TLSV1_CERTIFICATE_UNOBTAINABLE", ERR_LIB_SSL, SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE}, | ||
| 1227 | + #else | ||
| 1228 | + {"TLSV1_CERTIFICATE_UNOBTAINABLE", 20, 1111}, | ||
| 1229 | + #endif | ||
| 1230 | #ifdef SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE | ||
| 1231 | {"TLSV1_CERTIFICATE_UNOBTAINABLE", ERR_LIB_SSL, SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE}, | ||
| 1232 | #else | ||
| 1233 | @@ -7545,6 +8152,16 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 1234 | #else | ||
| 1235 | {"TLSV1_UNRECOGNIZED_NAME", 20, 1112}, | ||
| 1236 | #endif | ||
| 1237 | + #ifdef SSL_R_TLSV1_UNRECOGNIZED_NAME | ||
| 1238 | + {"TLSV1_UNRECOGNIZED_NAME", ERR_LIB_SSL, SSL_R_TLSV1_UNRECOGNIZED_NAME}, | ||
| 1239 | + #else | ||
| 1240 | + {"TLSV1_UNRECOGNIZED_NAME", 20, 1112}, | ||
| 1241 | + #endif | ||
| 1242 | + #ifdef SSL_R_TLSV1_UNSUPPORTED_EXTENSION | ||
| 1243 | + {"TLSV1_UNSUPPORTED_EXTENSION", ERR_LIB_SSL, SSL_R_TLSV1_UNSUPPORTED_EXTENSION}, | ||
| 1244 | + #else | ||
| 1245 | + {"TLSV1_UNSUPPORTED_EXTENSION", 20, 1110}, | ||
| 1246 | + #endif | ||
| 1247 | #ifdef SSL_R_TLSV1_UNSUPPORTED_EXTENSION | ||
| 1248 | {"TLSV1_UNSUPPORTED_EXTENSION", ERR_LIB_SSL, SSL_R_TLSV1_UNSUPPORTED_EXTENSION}, | ||
| 1249 | #else | ||
| 1250 | @@ -7665,6 +8282,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 1251 | #else | ||
| 1252 | {"UNKNOWN_KEY_EXCHANGE_TYPE", 20, 250}, | ||
| 1253 | #endif | ||
| 1254 | + #ifdef SSL_R_UNKNOWN_MANDATORY_PARAMETER | ||
| 1255 | + {"UNKNOWN_MANDATORY_PARAMETER", ERR_LIB_SSL, SSL_R_UNKNOWN_MANDATORY_PARAMETER}, | ||
| 1256 | + #else | ||
| 1257 | + {"UNKNOWN_MANDATORY_PARAMETER", 20, 323}, | ||
| 1258 | + #endif | ||
| 1259 | #ifdef SSL_R_UNKNOWN_PKEY_TYPE | ||
| 1260 | {"UNKNOWN_PKEY_TYPE", ERR_LIB_SSL, SSL_R_UNKNOWN_PKEY_TYPE}, | ||
| 1261 | #else | ||
| 1262 | @@ -7700,6 +8322,21 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 1263 | #else | ||
| 1264 | {"UNSUPPORTED_COMPRESSION_ALGORITHM", 20, 257}, | ||
| 1265 | #endif | ||
| 1266 | + #ifdef SSL_R_UNSUPPORTED_CONFIG_VALUE | ||
| 1267 | + {"UNSUPPORTED_CONFIG_VALUE", ERR_LIB_SSL, SSL_R_UNSUPPORTED_CONFIG_VALUE}, | ||
| 1268 | + #else | ||
| 1269 | + {"UNSUPPORTED_CONFIG_VALUE", 20, 414}, | ||
| 1270 | + #endif | ||
| 1271 | + #ifdef SSL_R_UNSUPPORTED_CONFIG_VALUE_CLASS | ||
| 1272 | + {"UNSUPPORTED_CONFIG_VALUE_CLASS", ERR_LIB_SSL, SSL_R_UNSUPPORTED_CONFIG_VALUE_CLASS}, | ||
| 1273 | + #else | ||
| 1274 | + {"UNSUPPORTED_CONFIG_VALUE_CLASS", 20, 415}, | ||
| 1275 | + #endif | ||
| 1276 | + #ifdef SSL_R_UNSUPPORTED_CONFIG_VALUE_OP | ||
| 1277 | + {"UNSUPPORTED_CONFIG_VALUE_OP", ERR_LIB_SSL, SSL_R_UNSUPPORTED_CONFIG_VALUE_OP}, | ||
| 1278 | + #else | ||
| 1279 | + {"UNSUPPORTED_CONFIG_VALUE_OP", 20, 416}, | ||
| 1280 | + #endif | ||
| 1281 | #ifdef SSL_R_UNSUPPORTED_ELLIPTIC_CURVE | ||
| 1282 | {"UNSUPPORTED_ELLIPTIC_CURVE", ERR_LIB_SSL, SSL_R_UNSUPPORTED_ELLIPTIC_CURVE}, | ||
| 1283 | #else | ||
| 1284 | @@ -7720,6 +8357,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 1285 | #else | ||
| 1286 | {"UNSUPPORTED_STATUS_TYPE", 20, 329}, | ||
| 1287 | #endif | ||
| 1288 | + #ifdef SSL_R_UNSUPPORTED_WRITE_FLAG | ||
| 1289 | + {"UNSUPPORTED_WRITE_FLAG", ERR_LIB_SSL, SSL_R_UNSUPPORTED_WRITE_FLAG}, | ||
| 1290 | + #else | ||
| 1291 | + {"UNSUPPORTED_WRITE_FLAG", 20, 412}, | ||
| 1292 | + #endif | ||
| 1293 | #ifdef SSL_R_USE_SRTP_NOT_NEGOTIATED | ||
| 1294 | {"USE_SRTP_NOT_NEGOTIATED", ERR_LIB_SSL, SSL_R_USE_SRTP_NOT_NEGOTIATED}, | ||
| 1295 | #else | ||
| 1296 | @@ -7750,6 +8392,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 1297 | #else | ||
| 1298 | {"WRONG_CURVE", 20, 378}, | ||
| 1299 | #endif | ||
| 1300 | + #ifdef SSL_R_WRONG_RPK_TYPE | ||
| 1301 | + {"WRONG_RPK_TYPE", ERR_LIB_SSL, SSL_R_WRONG_RPK_TYPE}, | ||
| 1302 | + #else | ||
| 1303 | + {"WRONG_RPK_TYPE", 20, 351}, | ||
| 1304 | + #endif | ||
| 1305 | #ifdef SSL_R_WRONG_SIGNATURE_LENGTH | ||
| 1306 | {"WRONG_SIGNATURE_LENGTH", ERR_LIB_SSL, SSL_R_WRONG_SIGNATURE_LENGTH}, | ||
| 1307 | #else | ||
| 1308 | @@ -8055,6 +8702,16 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 1309 | #else | ||
| 1310 | {"BAD_OBJECT", 34, 119}, | ||
| 1311 | #endif | ||
| 1312 | + #ifdef X509V3_R_BAD_OPTION | ||
| 1313 | + {"BAD_OPTION", ERR_LIB_X509V3, X509V3_R_BAD_OPTION}, | ||
| 1314 | + #else | ||
| 1315 | + {"BAD_OPTION", 34, 170}, | ||
| 1316 | + #endif | ||
| 1317 | + #ifdef X509V3_R_BAD_VALUE | ||
| 1318 | + {"BAD_VALUE", ERR_LIB_X509V3, X509V3_R_BAD_VALUE}, | ||
| 1319 | + #else | ||
| 1320 | + {"BAD_VALUE", 34, 171}, | ||
| 1321 | + #endif | ||
| 1322 | #ifdef X509V3_R_BN_DEC2BN_ERROR | ||
| 1323 | {"BN_DEC2BN_ERROR", ERR_LIB_X509V3, X509V3_R_BN_DEC2BN_ERROR}, | ||
| 1324 | #else | ||
| 1325 | @@ -8370,6 +9027,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 1326 | #else | ||
| 1327 | {"UNKNOWN_OPTION", 34, 120}, | ||
| 1328 | #endif | ||
| 1329 | + #ifdef X509V3_R_UNKNOWN_VALUE | ||
| 1330 | + {"UNKNOWN_VALUE", ERR_LIB_X509V3, X509V3_R_UNKNOWN_VALUE}, | ||
| 1331 | + #else | ||
| 1332 | + {"UNKNOWN_VALUE", 34, 172}, | ||
| 1333 | + #endif | ||
| 1334 | #ifdef X509V3_R_UNSUPPORTED_OPTION | ||
| 1335 | {"UNSUPPORTED_OPTION", ERR_LIB_X509V3, X509V3_R_UNSUPPORTED_OPTION}, | ||
| 1336 | #else | ||
| 1337 | @@ -8430,6 +9092,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 1338 | #else | ||
| 1339 | {"CRL_VERIFY_FAILURE", 11, 131}, | ||
| 1340 | #endif | ||
| 1341 | + #ifdef X509_R_DUPLICATE_ATTRIBUTE | ||
| 1342 | + {"DUPLICATE_ATTRIBUTE", ERR_LIB_X509, X509_R_DUPLICATE_ATTRIBUTE}, | ||
| 1343 | + #else | ||
| 1344 | + {"DUPLICATE_ATTRIBUTE", 11, 140}, | ||
| 1345 | + #endif | ||
| 1346 | #ifdef X509_R_ERROR_GETTING_MD_BY_NID | ||
| 1347 | {"ERROR_GETTING_MD_BY_NID", ERR_LIB_X509, X509_R_ERROR_GETTING_MD_BY_NID}, | ||
| 1348 | #else | ||
| 1349 | @@ -8590,6 +9257,11 @@ static struct py_ssl_error_code error_codes[] = { | ||
| 1350 | #else | ||
| 1351 | {"UNSUPPORTED_ALGORITHM", 11, 111}, | ||
| 1352 | #endif | ||
| 1353 | + #ifdef X509_R_UNSUPPORTED_VERSION | ||
| 1354 | + {"UNSUPPORTED_VERSION", ERR_LIB_X509, X509_R_UNSUPPORTED_VERSION}, | ||
| 1355 | + #else | ||
| 1356 | + {"UNSUPPORTED_VERSION", 11, 145}, | ||
| 1357 | + #endif | ||
| 1358 | #ifdef X509_R_WRONG_LOOKUP_TYPE | ||
| 1359 | {"WRONG_LOOKUP_TYPE", ERR_LIB_X509, X509_R_WRONG_LOOKUP_TYPE}, | ||
| 1360 | #else | ||
| 1361 | diff --git a/Tools/c-analyzer/cpython/_parser.py b/Tools/c-analyzer/cpython/_parser.py | ||
| 1362 | index 21be53e7884..a08b32fa45d 100644 | ||
| 1363 | --- a/Tools/c-analyzer/cpython/_parser.py | ||
| 1364 | +++ b/Tools/c-analyzer/cpython/_parser.py | ||
| 1365 | @@ -70,9 +70,7 @@ Python/thread_pthread.h | ||
| 1366 | Python/thread_pthread_stubs.h | ||
| 1367 | |||
| 1368 | # only huge constants (safe but parsing is slow) | ||
| 1369 | -Modules/_ssl_data_31.h | ||
| 1370 | -Modules/_ssl_data_300.h | ||
| 1371 | -Modules/_ssl_data_111.h | ||
| 1372 | +Modules/_ssl_data_*.h | ||
| 1373 | Modules/cjkcodecs/mappings_*.h | ||
| 1374 | Modules/unicodedata_db.h | ||
| 1375 | Modules/unicodename_db.h | ||
| 1376 | diff --git a/Tools/ssl/make_ssl_data.py b/Tools/ssl/make_ssl_data.py | ||
| 1377 | index 9860871..0cd05c7 100755 | ||
| 1378 | --- a/Tools/ssl/make_ssl_data.py | ||
| 1379 | +++ b/Tools/ssl/make_ssl_data.py | ||
| 1380 | @@ -5,9 +5,28 @@ This script should be called *manually* when we want to upgrade SSLError | ||
| 1381 | `library` and `reason` mnemonics to a more recent OpenSSL version. | ||
| 1382 | |||
| 1383 | It takes two arguments: | ||
| 1384 | -- the path to the OpenSSL source tree (e.g. git checkout) | ||
| 1385 | +- the path to the OpenSSL git checkout | ||
| 1386 | - the path to the header file to be generated Modules/_ssl_data_{version}.h | ||
| 1387 | - error codes are version specific | ||
| 1388 | + | ||
| 1389 | +The OpenSSL git checkout should be at a specific tag, using commands like: | ||
| 1390 | + git tag --list 'openssl-*' | ||
| 1391 | + git switch --detach openssl-3.4.0 | ||
| 1392 | + | ||
| 1393 | + | ||
| 1394 | +After generating the definitions, compare the result with newest pre-existing file. | ||
| 1395 | +You can use a command like: | ||
| 1396 | + | ||
| 1397 | + git diff --no-index Modules/_ssl_data_31.h Modules/_ssl_data_34.h | ||
| 1398 | + | ||
| 1399 | +- If the new version *only* adds new definitions, remove the pre-existing file | ||
| 1400 | + and adjust the #include in _ssl.c to point to the new version. | ||
| 1401 | +- If the new version removes or renumbers some definitions, keep both files and | ||
| 1402 | + add a new #include in _ssl.c. | ||
| 1403 | + | ||
| 1404 | +A newly supported OpenSSL version should also be added to: | ||
| 1405 | +- Tools/ssl/multissltests.py | ||
| 1406 | +- .github/workflows/build.yml | ||
| 1407 | """ | ||
| 1408 | |||
| 1409 | import argparse | ||
| 1410 | @@ -16,6 +35,7 @@ import operator | ||
| 1411 | import os | ||
| 1412 | import re | ||
| 1413 | import sys | ||
| 1414 | +import subprocess | ||
| 1415 | |||
| 1416 | |||
| 1417 | parser = argparse.ArgumentParser( | ||
| 1418 | @@ -118,9 +138,17 @@ def main(): | ||
| 1419 | # sort by libname, numeric error code | ||
| 1420 | args.reasons = sorted(reasons, key=operator.itemgetter(0, 3)) | ||
| 1421 | |||
| 1422 | + git_describe = subprocess.run( | ||
| 1423 | + ['git', 'describe', '--long', '--dirty'], | ||
| 1424 | + cwd=args.srcdir, | ||
| 1425 | + capture_output=True, | ||
| 1426 | + encoding='utf-8', | ||
| 1427 | + check=True, | ||
| 1428 | + ) | ||
| 1429 | lines = [ | ||
| 1430 | - "/* File generated by Tools/ssl/make_ssl_data.py */" | ||
| 1431 | - f"/* Generated on {datetime.datetime.utcnow().isoformat()} */" | ||
| 1432 | + "/* File generated by Tools/ssl/make_ssl_data.py */", | ||
| 1433 | + f"/* Generated on {datetime.datetime.now(datetime.UTC).isoformat()} */", | ||
| 1434 | + f"/* Generated from Git commit {git_describe.stdout.strip()} */", | ||
| 1435 | ] | ||
| 1436 | lines.extend(gen_library_codes(args)) | ||
| 1437 | lines.append("") | ||
| 1438 | diff --git a/Tools/ssl/multissltests.py b/Tools/ssl/multissltests.py | ||
| 1439 | index eae0e0c..fb06f63 100755 | ||
| 1440 | --- a/Tools/ssl/multissltests.py | ||
| 1441 | +++ b/Tools/ssl/multissltests.py | ||
| 1442 | @@ -51,6 +51,7 @@ OPENSSL_RECENT_VERSIONS = [ | ||
| 1443 | "3.1.7", | ||
| 1444 | "3.2.6", | ||
| 1445 | "3.3.5", | ||
| 1446 | + "3.4.0", | ||
| 1447 | ] | ||
| 1448 | |||
| 1449 | LIBRESSL_OLD_VERSIONS = [ | ||
| 1450 | -- | ||
| 1451 | 2.30.2 | ||
| 1452 | |||
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 @@ | |||
| 1 | From 129ee75863081d9e3418acca3df1e47667f671ad Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Alexander Kanavin <alex@linutronix.de> | ||
| 3 | Date: Thu, 16 Sep 2021 16:35:37 +0200 | ||
| 4 | Subject: [PATCH] Lib/pty.py: handle stdin I/O errors same way as master I/O | ||
| 5 | errors | ||
| 6 | |||
| 7 | reading stdin can throw the same I/O errors as reading from master fd does, | ||
| 8 | e.g. when running under Yocto's test harness: | ||
| 9 | ====================================================================== | ||
| 10 | ERROR: test_spawn_doesnt_hang (test.test_pty.PtyTest) | ||
| 11 | ---------------------------------------------------------------------- | ||
| 12 | Traceback (most recent call last): | ||
| 13 | File "/usr/lib/python3.10/test/test_pty.py", line 316, in test_spawn_doesnt_hang | ||
| 14 | pty.spawn([sys.executable, '-c', 'print("hi there")']) | ||
| 15 | File "/usr/lib/python3.10/pty.py", line 181, in spawn | ||
| 16 | _copy(master_fd, master_read, stdin_read) | ||
| 17 | File "/usr/lib/python3.10/pty.py", line 157, in _copy | ||
| 18 | data = stdin_read(STDIN_FILENO) | ||
| 19 | File "/usr/lib/python3.10/pty.py", line 132, in _read | ||
| 20 | return os.read(fd, 1024) | ||
| 21 | OSError: [Errno 5] Input/output error | ||
| 22 | |||
| 23 | So let's treat both channels the same. | ||
| 24 | |||
| 25 | Upstream-Status: Submitted [https://github.com/python/cpython/pull/28388] | ||
| 26 | Signed-off-by: Alexander Kanavin <alex@linutronix.de> | ||
| 27 | --- | ||
| 28 | Lib/pty.py | 5 ++++- | ||
| 29 | 1 file changed, 4 insertions(+), 1 deletion(-) | ||
| 30 | |||
| 31 | diff --git a/Lib/pty.py b/Lib/pty.py | ||
| 32 | index 1d97994..fa8821b 100644 | ||
| 33 | --- a/Lib/pty.py | ||
| 34 | +++ b/Lib/pty.py | ||
| 35 | @@ -178,7 +178,10 @@ def _copy(master_fd, master_read=_read, stdin_read=_read): | ||
| 36 | i_buf = i_buf[n:] | ||
| 37 | |||
| 38 | if stdin_avail and STDIN_FILENO in rfds: | ||
| 39 | - data = stdin_read(STDIN_FILENO) | ||
| 40 | + try: | ||
| 41 | + data = stdin_read(STDIN_FILENO) | ||
| 42 | + except OSError: | ||
| 43 | + data = b"" | ||
| 44 | if not data: | ||
| 45 | stdin_avail = False | ||
| 46 | 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 @@ | |||
| 1 | From 3f4f3e917950e286d5729ea949ca342995eb3c3e Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Alexander Kanavin <alex@linutronix.de> | ||
| 3 | Date: Fri, 17 Nov 2023 14:26:32 +0100 | ||
| 4 | Subject: [PATCH] Lib/sysconfig.py: use prefix value from build configuration | ||
| 5 | file | ||
| 6 | |||
| 7 | This allows correctly substituting them for target installs using | ||
| 8 | native python. | ||
| 9 | |||
| 10 | Upstream-Status: Inappropriate [oe-core cross builds] | ||
| 11 | Signed-off-by: Alexander Kanavin <alex@linutronix.de> | ||
| 12 | --- | ||
| 13 | Lib/sysconfig/__init__.py | 5 +++++ | ||
| 14 | 1 file changed, 5 insertions(+) | ||
| 15 | |||
| 16 | diff --git a/Lib/sysconfig/__init__.py b/Lib/sysconfig/__init__.py | ||
| 17 | index f8e1c7d..0882526 100644 | ||
| 18 | --- a/Lib/sysconfig/__init__.py | ||
| 19 | +++ b/Lib/sysconfig/__init__.py | ||
| 20 | @@ -501,6 +501,11 @@ def _init_config_vars(): | ||
| 21 | _CONFIG_VARS['VPATH'] = sys._vpath | ||
| 22 | if os.name == 'posix': | ||
| 23 | _init_posix(_CONFIG_VARS) | ||
| 24 | + _CONFIG_VARS['installed_base'] = _CONFIG_VARS['prefix'] | ||
| 25 | + _CONFIG_VARS['base'] = _CONFIG_VARS['prefix'] | ||
| 26 | + _CONFIG_VARS['installed_platbase'] = _CONFIG_VARS['prefix'] | ||
| 27 | + _CONFIG_VARS['platbase'] = _CONFIG_VARS['prefix'] | ||
| 28 | + _CONFIG_VARS['platlibdir'] = _CONFIG_VARS['PLATLIBDIR'] | ||
| 29 | if _HAS_USER_BASE: | ||
| 30 | # Setting 'userbase' is done below the call to the | ||
| 31 | # 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 @@ | |||
| 1 | From e7a8a7385f561f214054cf95f0a22bfa064eee0b Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Alexander Kanavin <alex.kanavin@gmail.com> | ||
| 3 | Date: Wed, 30 Jan 2019 12:41:04 +0100 | ||
| 4 | Subject: [PATCH] Makefile.pre: use qemu wrapper when gathering profile data | ||
| 5 | |||
| 6 | Upstream-Status: Inappropriate [oe-core specific] | ||
| 7 | Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com> | ||
| 8 | |||
| 9 | Update to remove test_types from the test list, since that fails under | ||
| 10 | qemu now. | ||
| 11 | |||
| 12 | Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com> | ||
| 13 | --- | ||
| 14 | Makefile.pre.in | 3 +-- | ||
| 15 | 1 file changed, 1 insertion(+), 2 deletions(-) | ||
| 16 | |||
| 17 | diff --git a/Makefile.pre.in b/Makefile.pre.in | ||
| 18 | index 3bd4495f95b..8e8fc60bc76 100644 | ||
| 19 | --- a/Makefile.pre.in | ||
| 20 | +++ b/Makefile.pre.in | ||
| 21 | @@ -751,8 +751,7 @@ profile-run-stamp: | ||
| 22 | # enabled. | ||
| 23 | $(MAKE) profile-gen-stamp | ||
| 24 | # Next, run the profile task to generate the profile information. | ||
| 25 | - @ # FIXME: can't run for a cross build | ||
| 26 | - $(LLVM_PROF_FILE) $(RUNSHARED) ./$(BUILDPYTHON) $(PROFILE_TASK) | ||
| 27 | + ./pgo-wrapper ./python -m test.regrtest --pgo test_grammar test_opcodes test_dict | ||
| 28 | $(LLVM_PROF_MERGER) | ||
| 29 | # Remove profile generation binary since we are done with it. | ||
| 30 | $(MAKE) clean-retain-profile | ||
| 31 | -- | ||
| 32 | 2.39.5 | ||
| 33 | |||
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 @@ | |||
| 1 | From 8828a52ebace98199569404f01174398bcc64a00 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Yi Fan Yu <yifan.yu@windriver.com> | ||
| 3 | Date: Thu, 1 Apr 2021 13:08:37 -0700 | ||
| 4 | Subject: [PATCH] Skip failing tests due to load variability on YP AB | ||
| 5 | |||
| 6 | Skip these tests until AB-INT is solved. | ||
| 7 | |||
| 8 | [YOCTO #14296] | ||
| 9 | |||
| 10 | Upstream-Status: Inappropriate [OE-Specific] | ||
| 11 | |||
| 12 | Signed-off-by: Yi Fan Yu <yifan.yu@windriver.com> | ||
| 13 | |||
| 14 | Skip two additional tests due to suspected load variability failures. | ||
| 15 | |||
| 16 | [YOCTO #15131] | ||
| 17 | [YOCTO #15177] | ||
| 18 | |||
| 19 | Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com> | ||
| 20 | --- | ||
| 21 | Lib/test/_test_multiprocessing.py | 3 +++ | ||
| 22 | Lib/test/test_time.py | 2 ++ | ||
| 23 | 2 files changed, 5 insertions(+) | ||
| 24 | |||
| 25 | diff --git a/Lib/test/_test_multiprocessing.py b/Lib/test/_test_multiprocessing.py | ||
| 26 | index 5dae370..23eb971 100644 | ||
| 27 | --- a/Lib/test/_test_multiprocessing.py | ||
| 28 | +++ b/Lib/test/_test_multiprocessing.py | ||
| 29 | @@ -701,6 +701,7 @@ class _TestProcess(BaseTestCase): | ||
| 30 | close_queue(q) | ||
| 31 | |||
| 32 | @support.requires_resource('walltime') | ||
| 33 | + @unittest.skip('timing related test, dependent on load') | ||
| 34 | def test_many_processes(self): | ||
| 35 | if self.TYPE == 'threads': | ||
| 36 | self.skipTest('test not appropriate for {}'.format(self.TYPE)) | ||
| 37 | @@ -2232,6 +2233,7 @@ class _TestBarrier(BaseTestCase): | ||
| 38 | except threading.BrokenBarrierError: | ||
| 39 | results.append(True) | ||
| 40 | |||
| 41 | + @unittest.skip('timing related test, dependent on load') | ||
| 42 | def test_timeout(self): | ||
| 43 | """ | ||
| 44 | Test wait(timeout) | ||
| 45 | @@ -5320,6 +5322,7 @@ class TestWait(unittest.TestCase): | ||
| 46 | time.sleep(period) | ||
| 47 | |||
| 48 | @support.requires_resource('walltime') | ||
| 49 | + @unittest.skip('timing related test, dependent on load') | ||
| 50 | def test_wait_integer(self): | ||
| 51 | from multiprocessing.connection import wait | ||
| 52 | |||
| 53 | diff --git a/Lib/test/test_time.py b/Lib/test/test_time.py | ||
| 54 | index 293799f..1dbb623 100644 | ||
| 55 | --- a/Lib/test/test_time.py | ||
| 56 | +++ b/Lib/test/test_time.py | ||
| 57 | @@ -548,6 +548,7 @@ class TimeTestCase(unittest.TestCase): | ||
| 58 | @unittest.skipIf( | ||
| 59 | support.is_wasi, "process_time not available on WASI" | ||
| 60 | ) | ||
| 61 | + @unittest.skip('timing related test, dependent on load') | ||
| 62 | def test_process_time(self): | ||
| 63 | # process_time() should not include time spend during a sleep | ||
| 64 | start = time.process_time() | ||
| 65 | @@ -561,6 +562,7 @@ class TimeTestCase(unittest.TestCase): | ||
| 66 | self.assertTrue(info.monotonic) | ||
| 67 | self.assertFalse(info.adjustable) | ||
| 68 | |||
| 69 | + @unittest.skip('timing related test, dependent on load') | ||
| 70 | def test_thread_time(self): | ||
| 71 | if not hasattr(time, 'thread_time'): | ||
| 72 | 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 @@ | |||
| 1 | From 5bf5aa6eae1fa3eed66893e51a1858ab481426b4 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Wentao Zhang <wentao.zhang@windriver.com> | ||
| 3 | Date: Mon, 20 Mar 2023 13:39:52 +0800 | ||
| 4 | Subject: [PATCH] Update test_sysconfig for posix_user purelib | ||
| 5 | |||
| 6 | Steps to trigger the failed test: | ||
| 7 | Edit local.conf to add something as follows: | ||
| 8 | BASELIB = "lib64" | ||
| 9 | IMAGE_INSTALL:append = " python3-tests". | ||
| 10 | bitbake core-image-sato | ||
| 11 | runqemu qemux86-64 nographic slirp | ||
| 12 | Reproducer: | ||
| 13 | $python3 -m test test_sysconfig | ||
| 14 | |||
| 15 | Update test_sysconfig.test_user_similar() for the posix_user scheme: | ||
| 16 | "purelib" doesn't use sys.platlibdir. | ||
| 17 | |||
| 18 | Upstream-Status: Inappropriate [oe-core specific] | ||
| 19 | Signed-off-by: Wentao Zhang <wentao.zhang@windriver.com> | ||
| 20 | --- | ||
| 21 | Lib/test/test_sysconfig.py | 2 +- | ||
| 22 | 1 file changed, 1 insertion(+), 1 deletion(-) | ||
| 23 | |||
| 24 | diff --git a/Lib/test/test_sysconfig.py b/Lib/test/test_sysconfig.py | ||
| 25 | index 1ade492..4e94889 100644 | ||
| 26 | --- a/Lib/test/test_sysconfig.py | ||
| 27 | +++ b/Lib/test/test_sysconfig.py | ||
| 28 | @@ -430,7 +430,7 @@ class TestSysConfig(unittest.TestCase): | ||
| 29 | expected = os.path.normpath(global_path.replace(base, user, 1)) | ||
| 30 | # bpo-44860: platlib of posix_user doesn't use sys.platlibdir, | ||
| 31 | # whereas posix_prefix does. | ||
| 32 | - if name == 'platlib': | ||
| 33 | + if name == 'platlib' or name == 'purelib': | ||
| 34 | # Replace "/lib64/python3.11/site-packages" suffix | ||
| 35 | # with "/lib/python3.11/site-packages". | ||
| 36 | 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 @@ | |||
| 1 | From c5bdd39f8ebc4e6c58a47d7e424eac028eddb4ff Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Trevor Gamblin <tgamblin@baylibre.com> | ||
| 3 | Date: Fri, 15 Sep 2023 08:48:33 -0400 | ||
| 4 | Subject: [PATCH] skip no_stdout_fileno test due to load variability | ||
| 5 | |||
| 6 | Skip test_input_no_stdout_fileno so that it doesn't fail on systems | ||
| 7 | under heavy load. | ||
| 8 | |||
| 9 | Upstream-Status: Inappropriate [OE-Specific] | ||
| 10 | |||
| 11 | [YOCTO #15210] | ||
| 12 | |||
| 13 | Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com> | ||
| 14 | --- | ||
| 15 | Lib/test/test_builtin.py | 1 + | ||
| 16 | 1 file changed, 1 insertion(+) | ||
| 17 | |||
| 18 | diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py | ||
| 19 | index c5394de..ed17fb6 100644 | ||
| 20 | --- a/Lib/test/test_builtin.py | ||
| 21 | +++ b/Lib/test/test_builtin.py | ||
| 22 | @@ -2474,6 +2474,7 @@ class PtyTests(unittest.TestCase): | ||
| 23 | "byte 0xe9 in position 4: ordinal not in " | ||
| 24 | "range(128)") | ||
| 25 | |||
| 26 | + @unittest.skip("Test may fail under heavy load") | ||
| 27 | def test_input_no_stdout_fileno(self): | ||
| 28 | # Issue #24402: If stdin is the original terminal but stdout.fileno() | ||
| 29 | # 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 @@ | |||
| 1 | From bbcb17dc1ed283f41c8cd94d39f70898f0c45583 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Alexander Kanavin <alex@linutronix.de> | ||
| 3 | Date: Sun, 12 Sep 2021 21:44:36 +0200 | ||
| 4 | Subject: [PATCH] sysconfig.py: use platlibdir also for purelib | ||
| 5 | |||
| 6 | This is needed in multilib configurations where hardcoding 'lib' | ||
| 7 | is not correct. | ||
| 8 | |||
| 9 | Upstream-Status: Inappropriate [oe-core specific] | ||
| 10 | Signed-off-by: Alexander Kanavin <alex@linutronix.de> | ||
| 11 | --- | ||
| 12 | Lib/sysconfig/__init__.py | 2 +- | ||
| 13 | 1 file changed, 1 insertion(+), 1 deletion(-) | ||
| 14 | |||
| 15 | diff --git a/Lib/sysconfig/__init__.py b/Lib/sysconfig/__init__.py | ||
| 16 | index 80aef34..f8e1c7d 100644 | ||
| 17 | --- a/Lib/sysconfig/__init__.py | ||
| 18 | +++ b/Lib/sysconfig/__init__.py | ||
| 19 | @@ -29,7 +29,7 @@ _INSTALL_SCHEMES = { | ||
| 20 | 'posix_prefix': { | ||
| 21 | 'stdlib': '{installed_base}/{platlibdir}/{implementation_lower}{py_version_short}{abi_thread}', | ||
| 22 | 'platstdlib': '{platbase}/{platlibdir}/{implementation_lower}{py_version_short}{abi_thread}', | ||
| 23 | - 'purelib': '{base}/lib/{implementation_lower}{py_version_short}{abi_thread}/site-packages', | ||
| 24 | + 'purelib': '{base}/{platlibdir}/{implementation_lower}{py_version_short}{abi_thread}/site-packages', | ||
| 25 | 'platlib': '{platbase}/{platlibdir}/{implementation_lower}{py_version_short}{abi_thread}/site-packages', | ||
| 26 | 'include': | ||
| 27 | '{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 @@ | |||
| 1 | From 540765b148d942a2339affa6c0d11445e9d0f26c Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Trevor Gamblin <tgamblin@baylibre.com> | ||
| 3 | Date: Thu, 13 Jun 2024 10:54:31 -0400 | ||
| 4 | Subject: [PATCH] test_active_children: skip problematic test | ||
| 5 | |||
| 6 | This test is failing in some tests on the Autobuilder. Since it's of a | ||
| 7 | similar nature to other failing/hanging tests, disable it for now. | ||
| 8 | |||
| 9 | Upstream-Status: Inappropriate [OE-Specific] | ||
| 10 | |||
| 11 | Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com> | ||
| 12 | --- | ||
| 13 | Lib/test/_test_multiprocessing.py | 1 + | ||
| 14 | 1 file changed, 1 insertion(+) | ||
| 15 | |||
| 16 | diff --git a/Lib/test/_test_multiprocessing.py b/Lib/test/_test_multiprocessing.py | ||
| 17 | index 23eb971..b1295b2 100644 | ||
| 18 | --- a/Lib/test/_test_multiprocessing.py | ||
| 19 | +++ b/Lib/test/_test_multiprocessing.py | ||
| 20 | @@ -594,6 +594,7 @@ class _TestProcess(BaseTestCase): | ||
| 21 | self.assertTrue(type(cpus) is int) | ||
| 22 | self.assertTrue(cpus >= 1) | ||
| 23 | |||
| 24 | + @unittest.skip("skipping problematic test") | ||
| 25 | def test_active_children(self): | ||
| 26 | self.assertEqual(type(self.active_children()), list) | ||
| 27 | |||
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 @@ | |||
| 1 | From 0e9d0c58e77ef540d9601ce84a1aa79d9ce6ee9b Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Tim Orling <timothy.t.orling@intel.com> | ||
| 3 | Date: Fri, 18 Jun 2021 11:56:50 -0700 | ||
| 4 | Subject: [PATCH] test_ctypes.test_find: skip without tools-sdk | ||
| 5 | |||
| 6 | These tests need full packagegroup-core-buildessential, the | ||
| 7 | easiest way to dynamically check for that is looking for | ||
| 8 | 'tools-sdk' in IMAGE_FEATURES. | ||
| 9 | |||
| 10 | Upstream-Status: Inappropriate [oe-specific] | ||
| 11 | |||
| 12 | Signed-off-by: Tim Orling <timothy.t.orling@intel.com> | ||
| 13 | --- | ||
| 14 | Lib/test/test_ctypes/test_find.py | 2 ++ | ||
| 15 | 1 file changed, 2 insertions(+) | ||
| 16 | |||
| 17 | diff --git a/Lib/test/test_ctypes/test_find.py b/Lib/test/test_ctypes/test_find.py | ||
| 18 | index 85b2861..b033203 100644 | ||
| 19 | --- a/Lib/test/test_ctypes/test_find.py | ||
| 20 | +++ b/Lib/test/test_ctypes/test_find.py | ||
| 21 | @@ -116,10 +116,12 @@ class FindLibraryLinux(unittest.TestCase): | ||
| 22 | # LD_LIBRARY_PATH) | ||
| 23 | self.assertEqual(find_library(libname), 'lib%s.so' % libname) | ||
| 24 | |||
| 25 | + @unittest.skip("Needs IMAGE_FEATURE += \"tools-sdk\"") | ||
| 26 | def test_find_library_with_gcc(self): | ||
| 27 | with unittest.mock.patch("ctypes.util._findSoname_ldconfig", lambda *args: None): | ||
| 28 | self.assertNotEqual(find_library('c'), None) | ||
| 29 | |||
| 30 | + @unittest.skip("Needs IMAGE_FEATURE += \"tools-sdk\"") | ||
| 31 | def test_find_library_with_ld(self): | ||
| 32 | with unittest.mock.patch("ctypes.util._findSoname_ldconfig", lambda *args: None), \ | ||
| 33 | 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 @@ | |||
| 1 | From 5a44f74549b32395109342e9299510c32db71068 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Trevor Gamblin <tgamblin@baylibre.com> | ||
| 3 | Date: Wed, 12 Jun 2024 10:29:03 -0400 | ||
| 4 | Subject: [PATCH] test_deadlock: skip problematic test | ||
| 5 | |||
| 6 | This test hangs frequently when run on the Autobuilder. Disable it in | ||
| 7 | testing until the cause can be determined. | ||
| 8 | |||
| 9 | Upstream-Status: Inappropriate [OE-Specific] | ||
| 10 | |||
| 11 | Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com> | ||
| 12 | --- | ||
| 13 | Lib/test/test_concurrent_futures/test_deadlock.py | 1 + | ||
| 14 | 1 file changed, 1 insertion(+) | ||
| 15 | |||
| 16 | diff --git a/Lib/test/test_concurrent_futures/test_deadlock.py b/Lib/test/test_concurrent_futures/test_deadlock.py | ||
| 17 | index 3c30c45..008d6c0 100644 | ||
| 18 | --- a/Lib/test/test_concurrent_futures/test_deadlock.py | ||
| 19 | +++ b/Lib/test/test_concurrent_futures/test_deadlock.py | ||
| 20 | @@ -90,6 +90,7 @@ class ErrorAtUnpickle(object): | ||
| 21 | return _raise_error_ignore_stderr, (UnpicklingError, ) | ||
| 22 | |||
| 23 | |||
| 24 | +@unittest.skip("skipping problematic test") | ||
| 25 | class ExecutorDeadlockTest: | ||
| 26 | TIMEOUT = support.LONG_TIMEOUT | ||
| 27 | |||
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 @@ | |||
| 1 | From c1f3cf625c0f011060ddaa2a4096f6aa13dd1ee6 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Mingli Yu <mingli.yu@windriver.com> | ||
| 3 | Date: Mon, 5 Aug 2019 15:57:39 +0800 | ||
| 4 | Subject: [PATCH] test_locale.py: correct the test output format | ||
| 5 | |||
| 6 | Before this patch: | ||
| 7 | # python3 -m test -v test_locale | ||
| 8 | [snip] | ||
| 9 | test_getsetlocale_issue1813 (test.test_locale.TestMiscellaneous) ... testing with ('tr_TR', 'ISO8859-9') ok | ||
| 10 | [snip] | ||
| 11 | |||
| 12 | After this patch: | ||
| 13 | # python3 -m test -v test_locale | ||
| 14 | [snip] | ||
| 15 | test_getsetlocale_issue1813 (test.test_locale.TestMiscellaneous) ... testing with ('tr_TR', 'ISO8859-9')... ok | ||
| 16 | [snip] | ||
| 17 | |||
| 18 | Make the test ended with "... ok" is common in python | ||
| 19 | unittest world, we should make it keep consistent | ||
| 20 | with other test cases in case it may be ignored to | ||
| 21 | record in the report if we use the common filter | ||
| 22 | "... ok". | ||
| 23 | |||
| 24 | Upstream-Status: Submitted [https://github.com/python/cpython/pull/15132] | ||
| 25 | |||
| 26 | Rebased for 3.9.4, still not accepted upstream Signed-off-by: Alejandro Hernandez <alejandro@enedino.org> | ||
| 27 | |||
| 28 | Signed-off-by: Mingli Yu <mingli.yu@windriver.com> | ||
| 29 | --- | ||
| 30 | Lib/test/test_locale.py | 2 +- | ||
| 31 | 1 file changed, 1 insertion(+), 1 deletion(-) | ||
| 32 | |||
| 33 | diff --git a/Lib/test/test_locale.py b/Lib/test/test_locale.py | ||
| 34 | index da4bd79..fd9e67d 100644 | ||
| 35 | --- a/Lib/test/test_locale.py | ||
| 36 | +++ b/Lib/test/test_locale.py | ||
| 37 | @@ -501,7 +501,7 @@ class TestRealLocales(unittest.TestCase): | ||
| 38 | self.skipTest('test needs Turkish locale') | ||
| 39 | loc = locale.getlocale(locale.LC_CTYPE) | ||
| 40 | if verbose: | ||
| 41 | - print('testing with %a' % (loc,), end=' ', flush=True) | ||
| 42 | + print('testing with %a...' % (loc,), end=' ', flush=True) | ||
| 43 | try: | ||
| 44 | locale.setlocale(locale.LC_CTYPE, loc) | ||
| 45 | 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 @@ | |||
| 1 | From 1a0a145261ba4f97aaff3c0c656ac2e0ad9695a8 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Trevor Gamblin <tgamblin@baylibre.com> | ||
| 3 | Date: Tue, 13 Aug 2024 11:07:05 -0400 | ||
| 4 | Subject: [PATCH] test_readline: skip limited history test | ||
| 5 | |||
| 6 | This test was added recently and is failing on the ptest image when | ||
| 7 | using the default PACKAGECONFIG settings (i.e. with editline instead of | ||
| 8 | readline).. Disable it until the proper fix is determined. | ||
| 9 | |||
| 10 | A bug has been opened upstream: https://github.com/python/cpython/issues/123018 | ||
| 11 | |||
| 12 | Upstream-Status: Inappropriate [OE-specific] | ||
| 13 | |||
| 14 | Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com> | ||
| 15 | --- | ||
| 16 | Lib/test/test_readline.py | 3 +++ | ||
| 17 | 1 file changed, 3 insertions(+) | ||
| 18 | |||
| 19 | diff --git a/Lib/test/test_readline.py b/Lib/test/test_readline.py | ||
| 20 | index 537a9fb..ddf0323 100644 | ||
| 21 | --- a/Lib/test/test_readline.py | ||
| 22 | +++ b/Lib/test/test_readline.py | ||
| 23 | @@ -71,6 +71,7 @@ class TestHistoryManipulation (unittest.TestCase): | ||
| 24 | |||
| 25 | @unittest.skipUnless(hasattr(readline, "append_history_file"), | ||
| 26 | "append_history not available") | ||
| 27 | + @unittest.skip("Skipping problematic test") | ||
| 28 | def test_write_read_append(self): | ||
| 29 | hfile = tempfile.NamedTemporaryFile(delete=False) | ||
| 30 | hfile.close() | ||
| 31 | @@ -142,6 +143,7 @@ class TestHistoryManipulation (unittest.TestCase): | ||
| 32 | self.assertEqual(readline.get_history_item(1), "entrée 1") | ||
| 33 | self.assertEqual(readline.get_history_item(2), "entrée 22") | ||
| 34 | |||
| 35 | + @unittest.skip("Skipping problematic test") | ||
| 36 | def test_write_read_limited_history(self): | ||
| 37 | previous_length = readline.get_history_length() | ||
| 38 | self.addCleanup(readline.set_history_length, previous_length) | ||
| 39 | @@ -390,6 +392,7 @@ readline.write_history_file(history_file) | ||
| 40 | self.assertIn(b"done", output) | ||
| 41 | |||
| 42 | |||
| 43 | + @unittest.skip("Skipping problematic test") | ||
| 44 | def test_write_read_limited_history(self): | ||
| 45 | previous_length = readline.get_history_length() | ||
| 46 | 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 @@ | |||
| 1 | From b678363156b5d40e09c1d138840180e3ddc7d20b Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Trevor Gamblin <tgamblin@baylibre.com> | ||
| 3 | Date: Wed, 8 May 2024 11:58:09 -0400 | ||
| 4 | Subject: [PATCH] test_shutdown: skip problematic test | ||
| 5 | |||
| 6 | This test hangs frequently when run on the Autobuilder. Disable it in | ||
| 7 | testing until the cause can be determined. | ||
| 8 | |||
| 9 | Upstream-Status: Inappropriate [OE-Specific] | ||
| 10 | |||
| 11 | Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com> | ||
| 12 | --- | ||
| 13 | Lib/test/test_concurrent_futures/test_shutdown.py | 3 +++ | ||
| 14 | 1 file changed, 3 insertions(+) | ||
| 15 | |||
| 16 | diff --git a/Lib/test/test_concurrent_futures/test_shutdown.py b/Lib/test/test_concurrent_futures/test_shutdown.py | ||
| 17 | index 7a4065a..6b878a4 100644 | ||
| 18 | --- a/Lib/test/test_concurrent_futures/test_shutdown.py | ||
| 19 | +++ b/Lib/test/test_concurrent_futures/test_shutdown.py | ||
| 20 | @@ -20,6 +20,7 @@ def sleep_and_print(t, msg): | ||
| 21 | sys.stdout.flush() | ||
| 22 | |||
| 23 | |||
| 24 | +@unittest.skip("skipping problematic test") | ||
| 25 | class ExecutorShutdownTest: | ||
| 26 | def test_run_after_shutdown(self): | ||
| 27 | self.executor.shutdown() | ||
| 28 | @@ -156,6 +157,7 @@ class ExecutorShutdownTest: | ||
| 29 | signal.signal(signal.SIGALRM, old_handler) | ||
| 30 | |||
| 31 | |||
| 32 | +@unittest.skip("skipping problematic test") | ||
| 33 | class ThreadPoolShutdownTest(ThreadPoolMixin, ExecutorShutdownTest, BaseTestCase): | ||
| 34 | def test_threads_terminate(self): | ||
| 35 | def acquire_lock(lock): | ||
| 36 | @@ -252,6 +254,7 @@ class ThreadPoolShutdownTest(ThreadPoolMixin, ExecutorShutdownTest, BaseTestCase | ||
| 37 | self.assertIn(out.strip(), [b"apple", b""]) | ||
| 38 | |||
| 39 | |||
| 40 | +@unittest.skip("skipping problematic test") | ||
| 41 | class ProcessPoolShutdownTest(ExecutorShutdownTest): | ||
| 42 | def test_processes_terminate(self): | ||
| 43 | 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 @@ | |||
| 1 | From 9f252a691cd335341938489da32d6e2d4620d8ca Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Trevor Gamblin <tgamblin@baylibre.com> | ||
| 3 | Date: Fri, 6 Oct 2023 10:59:44 -0400 | ||
| 4 | Subject: [PATCH] test_storlines: skip due to load variability | ||
| 5 | |||
| 6 | This is yet another test that intermittently fails on the Yocto AB when | ||
| 7 | a worker is under heavy load, so skip it during testing. | ||
| 8 | |||
| 9 | Upstream-Status: Inappropriate [OE-Specific] | ||
| 10 | |||
| 11 | [YOCTO #14933] | ||
| 12 | |||
| 13 | Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com> | ||
| 14 | --- | ||
| 15 | Lib/test/test_ftplib.py | 1 + | ||
| 16 | 1 file changed, 1 insertion(+) | ||
| 17 | |||
| 18 | diff --git a/Lib/test/test_ftplib.py b/Lib/test/test_ftplib.py | ||
| 19 | index bed0e6d..36602be 100644 | ||
| 20 | --- a/Lib/test/test_ftplib.py | ||
| 21 | +++ b/Lib/test/test_ftplib.py | ||
| 22 | @@ -630,6 +630,7 @@ class TestFTPClass(TestCase): | ||
| 23 | self.client.storbinary('stor', f, rest=r) | ||
| 24 | self.assertEqual(self.server.handler_instance.rest, str(r)) | ||
| 25 | |||
| 26 | + @unittest.skip('timing related test, dependent on load') | ||
| 27 | def test_storlines(self): | ||
| 28 | data = RETR_DATA.replace('\r\n', '\n').encode(self.client.encoding) | ||
| 29 | 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 @@ | |||
| 1 | #!/usr/bin/env python3 | ||
| 2 | import sys | ||
| 3 | logfile = open(sys.argv[1]).read() | ||
| 4 | |||
| 5 | necessary_bits = logfile.find("The necessary bits to build these optional modules were not found") | ||
| 6 | to_find_bits = logfile.find("To find the necessary bits, look in setup.py in detect_modules() for the module's name.") | ||
| 7 | if necessary_bits != -1: | ||
| 8 | print("%s" %(logfile[necessary_bits:to_find_bits])) | ||
| 9 | |||
| 10 | failed_to_build = logfile.find("Failed to build these modules:") | ||
| 11 | if failed_to_build != -1: | ||
| 12 | failed_to_build_end = logfile.find("\n\n", failed_to_build) | ||
| 13 | print("%s" %(logfile[failed_to_build:failed_to_build_end])) | ||
| 14 | |||
| 15 | if necessary_bits != -1 or failed_to_build != -1: | ||
| 16 | sys.exit(1) | ||
| 17 | |||
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 @@ | |||
| 1 | # This script is used as a bitbake task to create a new python manifest | ||
| 2 | # $ bitbake python -c create_manifest | ||
| 3 | # | ||
| 4 | # Our goal is to keep python-core as small as possible and add other python | ||
| 5 | # packages only when the user needs them, hence why we split upstream python | ||
| 6 | # into several packages. | ||
| 7 | # | ||
| 8 | # In a very simplistic way what this does is: | ||
| 9 | # Launch python and see specifically what is required for it to run at a minimum | ||
| 10 | # | ||
| 11 | # Go through the python-manifest file and launch a separate task for every single | ||
| 12 | # one of the files on each package, this task will check what was required for that | ||
| 13 | # specific module to run, these modules will be called dependencies. | ||
| 14 | # The output of such task will be a list of the modules or dependencies that were | ||
| 15 | # found for that file. | ||
| 16 | # | ||
| 17 | # Such output will be parsed by this script, we will look for each dependency on the | ||
| 18 | # manifest and if we find that another package already includes it, then we will add | ||
| 19 | # that package as an RDEPENDS to the package we are currently checking; in case we dont | ||
| 20 | # find the current dependency on any other package we will add it to the current package | ||
| 21 | # as part of FILES. | ||
| 22 | # | ||
| 23 | # | ||
| 24 | # This way we will create a new manifest from the data structure that was built during | ||
| 25 | # this process, on this new manifest each package will contain specifically only | ||
| 26 | # what it needs to run. | ||
| 27 | # | ||
| 28 | # There are some caveats which we try to deal with, such as repeated files on different | ||
| 29 | # packages, packages that include folders, wildcards, and special packages. | ||
| 30 | # Its also important to note that this method only works for python files, and shared | ||
| 31 | # libraries. Static libraries, header files and binaries need to be dealt with manually. | ||
| 32 | # | ||
| 33 | # This script differs from its python2 version mostly on how shared libraries are handled | ||
| 34 | # The manifest file for python3 has an extra field which contains the cached files for | ||
| 35 | # each package. | ||
| 36 | # Tha method to handle cached files does not work when a module includes a folder which | ||
| 37 | # itself contains the pycache folder, gladly this is almost never the case. | ||
| 38 | # | ||
| 39 | # Author: Alejandro Enedino Hernandez Samaniego <alejandro at enedino dot org> | ||
| 40 | |||
| 41 | |||
| 42 | import sys | ||
| 43 | import subprocess | ||
| 44 | import json | ||
| 45 | import os | ||
| 46 | import collections | ||
| 47 | |||
| 48 | if '-d' in sys.argv: | ||
| 49 | debugFlag = '-d' | ||
| 50 | else: | ||
| 51 | debugFlag = '' | ||
| 52 | |||
| 53 | # Get python version from ${PYTHON_MAJMIN} | ||
| 54 | pyversion = str(sys.argv[1]) | ||
| 55 | |||
| 56 | # Hack to get native python search path (for folders), not fond of it but it works for now | ||
| 57 | pivot = 'recipe-sysroot-native' | ||
| 58 | for p in sys.path: | ||
| 59 | if pivot in p: | ||
| 60 | nativelibfolder = p[:p.find(pivot)+len(pivot)] | ||
| 61 | |||
| 62 | # Empty dict to hold the whole manifest | ||
| 63 | new_manifest = collections.OrderedDict() | ||
| 64 | |||
| 65 | # Check for repeated files, folders and wildcards | ||
| 66 | allfiles = [] | ||
| 67 | repeated = [] | ||
| 68 | wildcards = [] | ||
| 69 | |||
| 70 | hasfolders = [] | ||
| 71 | allfolders = [] | ||
| 72 | |||
| 73 | def isFolder(value): | ||
| 74 | value = value.replace('${PYTHON_MAJMIN}',pyversion) | ||
| 75 | 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')): | ||
| 76 | return True | ||
| 77 | else: | ||
| 78 | return False | ||
| 79 | |||
| 80 | def isCached(item): | ||
| 81 | if '__pycache__' in item: | ||
| 82 | return True | ||
| 83 | else: | ||
| 84 | return False | ||
| 85 | |||
| 86 | def prepend_comments(comments, json_manifest): | ||
| 87 | with open(json_manifest, 'r+') as manifest: | ||
| 88 | json_contents = manifest.read() | ||
| 89 | manifest.seek(0, 0) | ||
| 90 | manifest.write(comments + json_contents) | ||
| 91 | |||
| 92 | def print_indent(msg, offset): | ||
| 93 | for l in msg.splitlines(): | ||
| 94 | msg = ' ' * offset + l | ||
| 95 | print(msg) | ||
| 96 | |||
| 97 | |||
| 98 | # Read existing JSON manifest | ||
| 99 | with open('python3-manifest.json') as manifest: | ||
| 100 | # The JSON format doesn't allow comments so we hack the call to keep the comments using a marker | ||
| 101 | manifest_str = manifest.read() | ||
| 102 | json_start = manifest_str.find('# EOC') + 6 # EOC + \n | ||
| 103 | manifest.seek(0) | ||
| 104 | comments = manifest.read(json_start) | ||
| 105 | manifest_str = manifest.read() | ||
| 106 | old_manifest = json.loads(manifest_str, object_pairs_hook=collections.OrderedDict) | ||
| 107 | |||
| 108 | # | ||
| 109 | # First pass to get core-package functionality, because we base everything on the fact that core is actually working | ||
| 110 | # Not exactly the same so it should not be a function | ||
| 111 | # | ||
| 112 | |||
| 113 | print_indent('Getting dependencies for package: core', 0) | ||
| 114 | |||
| 115 | |||
| 116 | # This special call gets the core dependencies and | ||
| 117 | # appends to the old manifest so it doesnt hurt what it | ||
| 118 | # currently holds. | ||
| 119 | # This way when other packages check for dependencies | ||
| 120 | # on the new core package, they will still find them | ||
| 121 | # even when checking the old_manifest | ||
| 122 | |||
| 123 | output = subprocess.check_output([sys.executable, 'get_module_deps3.py', 'python-core-package', '%s' % debugFlag]).decode('utf8') | ||
| 124 | for coredep in output.split(): | ||
| 125 | coredep = coredep.replace(pyversion,'${PYTHON_MAJMIN}') | ||
| 126 | if isCached(coredep): | ||
| 127 | if coredep not in old_manifest['core']['cached']: | ||
| 128 | old_manifest['core']['cached'].append(coredep) | ||
| 129 | else: | ||
| 130 | if coredep not in old_manifest['core']['files']: | ||
| 131 | old_manifest['core']['files'].append(coredep) | ||
| 132 | |||
| 133 | |||
| 134 | # The second step is to loop through the existing files contained in the core package | ||
| 135 | # according to the old manifest, identify if they are modules, or some other type | ||
| 136 | # of file that we cant import (directories, binaries, configs) in which case we | ||
| 137 | # can only assume they were added correctly (manually) so we ignore those and | ||
| 138 | # pass them to the manifest directly. | ||
| 139 | |||
| 140 | for filedep in old_manifest['core']['files']: | ||
| 141 | if isFolder(filedep): | ||
| 142 | if isCached(filedep): | ||
| 143 | if filedep not in old_manifest['core']['cached']: | ||
| 144 | old_manifest['core']['cached'].append(filedep) | ||
| 145 | else: | ||
| 146 | if filedep not in old_manifest['core']['files']: | ||
| 147 | old_manifest['core']['files'].append(filedep) | ||
| 148 | continue | ||
| 149 | if '${bindir}' in filedep: | ||
| 150 | if filedep not in old_manifest['core']['files']: | ||
| 151 | old_manifest['core']['files'].append(filedep) | ||
| 152 | continue | ||
| 153 | if filedep == '': | ||
| 154 | continue | ||
| 155 | if '${includedir}' in filedep: | ||
| 156 | if filedep not in old_manifest['core']['files']: | ||
| 157 | old_manifest['core']['files'].append(filedep) | ||
| 158 | continue | ||
| 159 | |||
| 160 | # Get actual module name , shouldnt be affected by libdir/bindir, etc. | ||
| 161 | pymodule = os.path.splitext(os.path.basename(os.path.normpath(filedep)))[0] | ||
| 162 | |||
| 163 | # We now know that were dealing with a python module, so we can import it | ||
| 164 | # and check what its dependencies are. | ||
| 165 | # We launch a separate task for each module for deterministic behavior. | ||
| 166 | # Each module will only import what is necessary for it to work in specific. | ||
| 167 | # The output of each task will contain each module's dependencies | ||
| 168 | |||
| 169 | print_indent('Getting dependencies for module: %s' % pymodule, 2) | ||
| 170 | output = subprocess.check_output([sys.executable, 'get_module_deps3.py', '%s' % pymodule, '%s' % debugFlag]).decode('utf8') | ||
| 171 | print_indent('The following dependencies were found for module %s:\n' % pymodule, 4) | ||
| 172 | print_indent(output, 6) | ||
| 173 | |||
| 174 | |||
| 175 | for pymodule_dep in output.split(): | ||
| 176 | pymodule_dep = pymodule_dep.replace(pyversion,'${PYTHON_MAJMIN}') | ||
| 177 | |||
| 178 | if isCached(pymodule_dep): | ||
| 179 | if pymodule_dep not in old_manifest['core']['cached']: | ||
| 180 | old_manifest['core']['cached'].append(pymodule_dep) | ||
| 181 | else: | ||
| 182 | if pymodule_dep not in old_manifest['core']['files']: | ||
| 183 | old_manifest['core']['files'].append(pymodule_dep) | ||
| 184 | |||
| 185 | |||
| 186 | # At this point we are done with the core package. | ||
| 187 | # The old_manifest dictionary is updated only for the core package because | ||
| 188 | # all others will use this a base. | ||
| 189 | |||
| 190 | |||
| 191 | print('\n\nChecking for directories...\n') | ||
| 192 | # To improve the script speed, we check which packages contain directories | ||
| 193 | # since we will be looping through (only) those later. | ||
| 194 | for pypkg in old_manifest: | ||
| 195 | for filedep in old_manifest[pypkg]['files']: | ||
| 196 | if isFolder(filedep): | ||
| 197 | print_indent('%s is a directory' % filedep, 2) | ||
| 198 | if pypkg not in hasfolders: | ||
| 199 | hasfolders.append(pypkg) | ||
| 200 | if filedep not in allfolders: | ||
| 201 | allfolders.append(filedep) | ||
| 202 | |||
| 203 | |||
| 204 | |||
| 205 | # This is the main loop that will handle each package. | ||
| 206 | # It works in a similar fashion than the step before, but | ||
| 207 | # we will now be updating a new dictionary that will eventually | ||
| 208 | # become the new manifest. | ||
| 209 | # | ||
| 210 | # The following loops though all packages in the manifest, | ||
| 211 | # through all files on each of them, and checks whether or not | ||
| 212 | # they are modules and can be imported. | ||
| 213 | # If they can be imported, then it checks for dependencies for | ||
| 214 | # each of them by launching a separate task. | ||
| 215 | # The output of that task is then parsed and the manifest is updated | ||
| 216 | # accordingly, wether it should add the module on FILES for the current package | ||
| 217 | # or if that module already belongs to another package then the current one | ||
| 218 | # will RDEPEND on it | ||
| 219 | |||
| 220 | for pypkg in old_manifest: | ||
| 221 | # Use an empty dict as data structure to hold data for each package and fill it up | ||
| 222 | new_manifest[pypkg] = collections.OrderedDict() | ||
| 223 | new_manifest[pypkg]['summary'] = old_manifest[pypkg]['summary'] | ||
| 224 | new_manifest[pypkg]['rdepends'] = [] | ||
| 225 | new_manifest[pypkg]['files'] = [] | ||
| 226 | new_manifest[pypkg]['cached'] = old_manifest[pypkg]['cached'] | ||
| 227 | |||
| 228 | # All packages should depend on core | ||
| 229 | if pypkg != 'core': | ||
| 230 | new_manifest[pypkg]['rdepends'].append('core') | ||
| 231 | new_manifest[pypkg]['cached'] = [] | ||
| 232 | |||
| 233 | print('\n') | ||
| 234 | print('--------------------------') | ||
| 235 | print('Handling package %s' % pypkg) | ||
| 236 | print('--------------------------') | ||
| 237 | |||
| 238 | # Handle special cases, we assume that when they were manually added | ||
| 239 | # to the manifest we knew what we were doing. | ||
| 240 | special_packages = ['misc', 'modules', 'dev', 'tests'] | ||
| 241 | if pypkg in special_packages or 'staticdev' in pypkg: | ||
| 242 | print_indent('Passing %s package directly' % pypkg, 2) | ||
| 243 | new_manifest[pypkg] = old_manifest[pypkg] | ||
| 244 | continue | ||
| 245 | |||
| 246 | for filedep in old_manifest[pypkg]['files']: | ||
| 247 | # We already handled core on the first pass, we can ignore it now | ||
| 248 | if pypkg == 'core': | ||
| 249 | if filedep not in new_manifest[pypkg]['files']: | ||
| 250 | new_manifest[pypkg]['files'].append(filedep) | ||
| 251 | continue | ||
| 252 | |||
| 253 | # Handle/ignore what we cant import | ||
| 254 | if isFolder(filedep): | ||
| 255 | new_manifest[pypkg]['files'].append(filedep) | ||
| 256 | # Asyncio (and others) are both the package and the folder name, we should not skip those... | ||
| 257 | path,mod = os.path.split(filedep) | ||
| 258 | if mod != pypkg: | ||
| 259 | continue | ||
| 260 | if '${bindir}' in filedep: | ||
| 261 | if filedep not in new_manifest[pypkg]['files']: | ||
| 262 | new_manifest[pypkg]['files'].append(filedep) | ||
| 263 | continue | ||
| 264 | if filedep == '': | ||
| 265 | continue | ||
| 266 | if '${includedir}' in filedep: | ||
| 267 | if filedep not in new_manifest[pypkg]['files']: | ||
| 268 | new_manifest[pypkg]['files'].append(filedep) | ||
| 269 | continue | ||
| 270 | |||
| 271 | # Get actual module name , shouldnt be affected by libdir/bindir, etc. | ||
| 272 | # We need to check if the imported module comes from another (e.g. sqlite3.dump) | ||
| 273 | path, pymodule = os.path.split(filedep) | ||
| 274 | path = os.path.basename(path) | ||
| 275 | pymodule = os.path.splitext(os.path.basename(pymodule))[0] | ||
| 276 | |||
| 277 | # If this condition is met, it means we need to import it from another module | ||
| 278 | # or its the folder itself (e.g. unittest) | ||
| 279 | if path == pypkg: | ||
| 280 | if pymodule: | ||
| 281 | pymodule = path + '.' + pymodule | ||
| 282 | else: | ||
| 283 | pymodule = path | ||
| 284 | |||
| 285 | |||
| 286 | |||
| 287 | # We now know that were dealing with a python module, so we can import it | ||
| 288 | # and check what its dependencies are. | ||
| 289 | # We launch a separate task for each module for deterministic behavior. | ||
| 290 | # Each module will only import what is necessary for it to work in specific. | ||
| 291 | # The output of each task will contain each module's dependencies | ||
| 292 | |||
| 293 | print_indent('\nGetting dependencies for module: %s' % pymodule, 2) | ||
| 294 | output = subprocess.check_output([sys.executable, 'get_module_deps3.py', '%s' % pymodule, '%s' % debugFlag]).decode('utf8') | ||
| 295 | print_indent('The following dependencies were found for module %s:\n' % pymodule, 4) | ||
| 296 | print_indent(output, 6) | ||
| 297 | |||
| 298 | reportFILES = [] | ||
| 299 | reportRDEPS = [] | ||
| 300 | |||
| 301 | for pymodule_dep in output.split(): | ||
| 302 | |||
| 303 | # Warning: This first part is ugly | ||
| 304 | # One of the dependencies that was found, could be inside of one of the folders included by another package | ||
| 305 | # We need to check if this happens so we can add the package containing the folder as an rdependency | ||
| 306 | # e.g. Folder encodings contained in codecs | ||
| 307 | # This would be solved if no packages included any folders | ||
| 308 | |||
| 309 | # This can be done in two ways: | ||
| 310 | # 1 - We assume that if we take out the filename from the path we would get | ||
| 311 | # the folder string, then we would check if folder string is in the list of folders | ||
| 312 | # This would not work if a package contains a folder which contains another folder | ||
| 313 | # e.g. path/folder1/folder2/filename folder_string= path/folder1/folder2 | ||
| 314 | # folder_string would not match any value contained in the list of folders | ||
| 315 | # | ||
| 316 | # 2 - We do it the other way around, checking if the folder is contained in the path | ||
| 317 | # e.g. path/folder1/folder2/filename folder_string= path/folder1/folder2 | ||
| 318 | # is folder_string inside path/folder1/folder2/filename?, | ||
| 319 | # Yes, it works, but we waste a couple of milliseconds. | ||
| 320 | |||
| 321 | pymodule_dep = pymodule_dep.replace(pyversion,'${PYTHON_MAJMIN}') | ||
| 322 | inFolders = False | ||
| 323 | for folder in allfolders: | ||
| 324 | # The module could have a directory named after it, e.g. xml, if we take out the filename from the path | ||
| 325 | # we'll end up with ${libdir}, and we want ${libdir}/xml | ||
| 326 | if isFolder(pymodule_dep): | ||
| 327 | check_path = pymodule_dep | ||
| 328 | else: | ||
| 329 | check_path = os.path.dirname(pymodule_dep) | ||
| 330 | if folder in check_path : | ||
| 331 | inFolders = True # Did we find a folder? | ||
| 332 | folderFound = False # Second flag to break inner for | ||
| 333 | # Loop only through packages which contain folders | ||
| 334 | for pypkg_with_folder in hasfolders: | ||
| 335 | if (folderFound == False): | ||
| 336 | # print('Checking folder %s on package %s' % (pymodule_dep,pypkg_with_folder)) | ||
| 337 | for folder_dep in old_manifest[pypkg_with_folder]['files'] or folder_dep in old_manifest[pypkg_with_folder]['cached']: | ||
| 338 | if folder_dep == folder: | ||
| 339 | print ('%s directory found in %s' % (folder, pypkg_with_folder)) | ||
| 340 | folderFound = True | ||
| 341 | if pypkg_with_folder not in new_manifest[pypkg]['rdepends'] and pypkg_with_folder != pypkg: | ||
| 342 | new_manifest[pypkg]['rdepends'].append(pypkg_with_folder) | ||
| 343 | else: | ||
| 344 | break | ||
| 345 | |||
| 346 | # A folder was found so we're done with this item, we can go on | ||
| 347 | if inFolders: | ||
| 348 | continue | ||
| 349 | |||
| 350 | |||
| 351 | |||
| 352 | # No directories beyond this point | ||
| 353 | # We might already have this module on the dictionary since it could depend on a (previously checked) module | ||
| 354 | if pymodule_dep not in new_manifest[pypkg]['files'] and pymodule_dep not in new_manifest[pypkg]['cached']: | ||
| 355 | # Handle core as a special package, we already did it so we pass it to NEW data structure directly | ||
| 356 | if pypkg == 'core': | ||
| 357 | print('Adding %s to %s FILES' % (pymodule_dep, pypkg)) | ||
| 358 | if pymodule_dep.endswith('*'): | ||
| 359 | wildcards.append(pymodule_dep) | ||
| 360 | if isCached(pymodule_dep): | ||
| 361 | new_manifest[pypkg]['cached'].append(pymodule_dep) | ||
| 362 | else: | ||
| 363 | new_manifest[pypkg]['files'].append(pymodule_dep) | ||
| 364 | |||
| 365 | # Check for repeated files | ||
| 366 | if pymodule_dep not in allfiles: | ||
| 367 | allfiles.append(pymodule_dep) | ||
| 368 | else: | ||
| 369 | if pymodule_dep not in repeated: | ||
| 370 | repeated.append(pymodule_dep) | ||
| 371 | else: | ||
| 372 | |||
| 373 | |||
| 374 | # Last step: Figure out if we this belongs to FILES or RDEPENDS | ||
| 375 | # We check if this module is already contained on another package, so we add that one | ||
| 376 | # as an RDEPENDS, or if its not, it means it should be contained on the current | ||
| 377 | # package, and we should add it to FILES | ||
| 378 | for possible_rdep in old_manifest: | ||
| 379 | # Debug | ||
| 380 | # print('Checking %s ' % pymodule_dep + ' in %s' % possible_rdep) | ||
| 381 | if pymodule_dep in old_manifest[possible_rdep]['files'] or pymodule_dep in old_manifest[possible_rdep]['cached']: | ||
| 382 | # Since were nesting, we need to check its not the same pypkg | ||
| 383 | if(possible_rdep != pypkg): | ||
| 384 | if possible_rdep not in new_manifest[pypkg]['rdepends']: | ||
| 385 | # Add it to the new manifest data struct as RDEPENDS since it contains something this module needs | ||
| 386 | reportRDEPS.append('Adding %s to %s RDEPENDS, because it contains %s\n' % (possible_rdep, pypkg, pymodule_dep)) | ||
| 387 | new_manifest[pypkg]['rdepends'].append(possible_rdep) | ||
| 388 | break | ||
| 389 | else: | ||
| 390 | |||
| 391 | # Since this module wasnt found on another package, it is not an RDEP, | ||
| 392 | # so we add it to FILES for this package. | ||
| 393 | # A module shouldn't contain itself (${libdir}/python3/sqlite3 shouldnt be on sqlite3 files) | ||
| 394 | if os.path.basename(pymodule_dep) != pypkg: | ||
| 395 | reportFILES.append(('Adding %s to %s FILES\n' % (pymodule_dep, pypkg))) | ||
| 396 | if isCached(pymodule_dep): | ||
| 397 | new_manifest[pypkg]['cached'].append(pymodule_dep) | ||
| 398 | else: | ||
| 399 | new_manifest[pypkg]['files'].append(pymodule_dep) | ||
| 400 | if pymodule_dep.endswith('*'): | ||
| 401 | wildcards.append(pymodule_dep) | ||
| 402 | if pymodule_dep not in allfiles: | ||
| 403 | allfiles.append(pymodule_dep) | ||
| 404 | else: | ||
| 405 | if pymodule_dep not in repeated: | ||
| 406 | repeated.append(pymodule_dep) | ||
| 407 | |||
| 408 | print('\n') | ||
| 409 | print('#################################') | ||
| 410 | print('Summary for module %s' % pymodule) | ||
| 411 | print('FILES found for module %s:' % pymodule) | ||
| 412 | print(''.join(reportFILES)) | ||
| 413 | print('RDEPENDS found for module %s:' % pymodule) | ||
| 414 | print(''.join(reportRDEPS)) | ||
| 415 | print('#################################') | ||
| 416 | |||
| 417 | print('The following FILES contain wildcards, please check if they are necessary') | ||
| 418 | print(wildcards) | ||
| 419 | print('The following FILES contain folders, please check if they are necessary') | ||
| 420 | print(hasfolders) | ||
| 421 | |||
| 422 | |||
| 423 | # Sort it just so it looks nicer | ||
| 424 | for pypkg in new_manifest: | ||
| 425 | new_manifest[pypkg]['files'].sort() | ||
| 426 | new_manifest[pypkg]['cached'].sort() | ||
| 427 | new_manifest[pypkg]['rdepends'].sort() | ||
| 428 | |||
| 429 | # Create the manifest from the data structure that was built | ||
| 430 | with open('python3-manifest.json.new','w') as outfile: | ||
| 431 | json.dump(new_manifest,outfile, indent=4) | ||
| 432 | outfile.write('\n') | ||
| 433 | |||
| 434 | prepend_comments(comments,'python3-manifest.json.new') | ||
| 435 | |||
| 436 | if (repeated): | ||
| 437 | error_msg = '\n\nERROR:\n' | ||
| 438 | error_msg += 'The following files were found in more than one package),\n' | ||
| 439 | error_msg += 'this is likely to happen when new files are introduced after an upgrade,\n' | ||
| 440 | error_msg += 'please check which package should get it,\n modify the manifest accordingly and re-run the create_manifest task:\n' | ||
| 441 | error_msg += '\n'.join(repeated) | ||
| 442 | error_msg += '\n' | ||
| 443 | sys.exit(error_msg) | ||
| 444 | |||
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 @@ | |||
| 1 | # This script is launched on separate task for each python module | ||
| 2 | # It checks for dependencies for that specific module and prints | ||
| 3 | # them out, the output of this execution will have all dependencies | ||
| 4 | # for a specific module, which will be parsed an dealt on create_manifest.py | ||
| 5 | # | ||
| 6 | # Author: Alejandro Enedino Hernandez Samaniego <alejandro at enedino dot org> | ||
| 7 | |||
| 8 | |||
| 9 | import sys | ||
| 10 | import os | ||
| 11 | |||
| 12 | # We can get a log per module, for all the dependencies that were found, but its messy. | ||
| 13 | if '-d' in sys.argv: | ||
| 14 | debug = True | ||
| 15 | else: | ||
| 16 | debug = False | ||
| 17 | |||
| 18 | # We can get a list of the modules which are currently required to run python | ||
| 19 | # so we run python-core and get its modules, we then import what we need | ||
| 20 | # and check what modules are currently running, if we substract them from the | ||
| 21 | # modules we had initially, we get the dependencies for the module we imported. | ||
| 22 | |||
| 23 | # We use importlib to achieve this, so we also need to know what modules importlib needs | ||
| 24 | import importlib | ||
| 25 | |||
| 26 | core_deps = set(sys.modules) | ||
| 27 | |||
| 28 | def fix_path(dep_path): | ||
| 29 | import os | ||
| 30 | # We DONT want the path on our HOST system | ||
| 31 | pivot = 'recipe-sysroot-native' | ||
| 32 | dep_path = dep_path[dep_path.find(pivot)+len(pivot):] | ||
| 33 | |||
| 34 | if '/usr/bin' in dep_path: | ||
| 35 | dep_path = dep_path.replace('/usr/bin','${bindir}') | ||
| 36 | |||
| 37 | # Handle multilib, is there a better way? | ||
| 38 | if '/usr/lib32' in dep_path: | ||
| 39 | dep_path = dep_path.replace('/usr/lib32','${libdir}') | ||
| 40 | if '/usr/lib64' in dep_path: | ||
| 41 | dep_path = dep_path.replace('/usr/lib64','${libdir}') | ||
| 42 | if '/usr/lib' in dep_path: | ||
| 43 | dep_path = dep_path.replace('/usr/lib','${libdir}') | ||
| 44 | if '/usr/include' in dep_path: | ||
| 45 | dep_path = dep_path.replace('/usr/include','${includedir}') | ||
| 46 | if '__init__.' in dep_path: | ||
| 47 | dep_path = os.path.split(dep_path)[0] | ||
| 48 | return dep_path | ||
| 49 | |||
| 50 | |||
| 51 | # Module to import was passed as an argument | ||
| 52 | current_module = str(sys.argv[1]).rstrip() | ||
| 53 | if debug == True: | ||
| 54 | log = open('temp/log_%s' % current_module.strip('.*'),'w') | ||
| 55 | log.write('Module %s generated the following dependencies:\n' % current_module) | ||
| 56 | try: | ||
| 57 | m = importlib.import_module(current_module) | ||
| 58 | # handle python packages which may not include all modules in the __init__ | ||
| 59 | if hasattr(m, '__file__') and os.path.basename(m.__file__) == "__init__.py": | ||
| 60 | modulepath = os.path.dirname(m.__file__) | ||
| 61 | for i in os.listdir(modulepath): | ||
| 62 | if i.startswith("_") or not(i.endswith(".py")): | ||
| 63 | continue | ||
| 64 | submodule = "{}.{}".format(current_module, i[:-3]) | ||
| 65 | try: | ||
| 66 | importlib.import_module(submodule) | ||
| 67 | except: | ||
| 68 | pass # ignore all import or other exceptions raised during import | ||
| 69 | except ImportError as e: | ||
| 70 | if debug == True: | ||
| 71 | log.write('Module was not found\n') | ||
| 72 | pass | ||
| 73 | |||
| 74 | |||
| 75 | # Get current module dependencies, dif will contain a list of specific deps for this module | ||
| 76 | module_deps = set(sys.modules) | ||
| 77 | |||
| 78 | # We handle the core package (1st pass on create_manifest.py) as a special case | ||
| 79 | if current_module == 'python-core-package': | ||
| 80 | dif = core_deps | ||
| 81 | else: | ||
| 82 | # We know this is not the core package, so there must be a difference. | ||
| 83 | dif = module_deps-core_deps | ||
| 84 | |||
| 85 | |||
| 86 | # Check where each dependency came from | ||
| 87 | for item in dif: | ||
| 88 | # Main module returns script filename, __main matches mp_main__ as well | ||
| 89 | if 'main__' in item: | ||
| 90 | continue | ||
| 91 | |||
| 92 | dep_path = '' | ||
| 93 | try: | ||
| 94 | if debug == True: | ||
| 95 | log.write('\nCalling: sys.modules[' + '%s' % item + '].__file__\n') | ||
| 96 | dep_path = sys.modules['%s' % item].__file__ | ||
| 97 | except AttributeError as e: | ||
| 98 | # Deals with thread (builtin module) not having __file__ attribute | ||
| 99 | if debug == True: | ||
| 100 | log.write(item + ' ') | ||
| 101 | log.write(str(e)) | ||
| 102 | log.write('\n') | ||
| 103 | pass | ||
| 104 | except NameError as e: | ||
| 105 | # Deals with NameError: name 'dep_path' is not defined | ||
| 106 | # because module is not found (wasn't compiled?), e.g. bddsm | ||
| 107 | if debug == True: | ||
| 108 | log.write(item+' ') | ||
| 109 | log.write(str(e)) | ||
| 110 | pass | ||
| 111 | |||
| 112 | if dep_path == '': | ||
| 113 | continue | ||
| 114 | if debug == True: | ||
| 115 | log.write('Dependency path found:\n%s\n' % dep_path) | ||
| 116 | |||
| 117 | # Site-customize is a special case since we (OpenEmbedded) put it there manually | ||
| 118 | if 'sitecustomize' in dep_path: | ||
| 119 | dep_path = '${libdir}/python${PYTHON_MAJMIN}/sitecustomize.py' | ||
| 120 | # Prints out result, which is what will be used by create_manifest | ||
| 121 | print (dep_path) | ||
| 122 | continue | ||
| 123 | |||
| 124 | dep_path = fix_path(dep_path) | ||
| 125 | |||
| 126 | import sysconfig | ||
| 127 | soabi = sysconfig.get_config_var('SOABI') | ||
| 128 | # Check if its a shared library and deconstruct it | ||
| 129 | if soabi in dep_path: | ||
| 130 | if debug == True: | ||
| 131 | log.write('Shared library found in %s\n' % dep_path) | ||
| 132 | dep_path = dep_path.replace(soabi,'*') | ||
| 133 | print (dep_path) | ||
| 134 | continue | ||
| 135 | if "_sysconfigdata" in dep_path: | ||
| 136 | dep_path = dep_path.replace(sysconfig._get_sysconfigdata_name(), "_sysconfigdata*") | ||
| 137 | |||
| 138 | if debug == True: | ||
| 139 | log.write(dep_path+'\n') | ||
| 140 | # Prints out result, which is what will be used by create_manifest | ||
| 141 | print (dep_path) | ||
| 142 | |||
| 143 | |||
| 144 | cpython_tag = sys.implementation.cache_tag | ||
| 145 | cached = '' | ||
| 146 | # Theres no naive way to find *.pyc files on python3 | ||
| 147 | try: | ||
| 148 | if debug == True: | ||
| 149 | log.write('\nCalling: sys.modules[' + '%s' % item + '].__cached__\n') | ||
| 150 | cached = sys.modules['%s' % item].__cached__ | ||
| 151 | except AttributeError as e: | ||
| 152 | # Deals with thread (builtin module) not having __cached__ attribute | ||
| 153 | if debug == True: | ||
| 154 | log.write(item + ' ') | ||
| 155 | log.write(str(e)) | ||
| 156 | log.write('\n') | ||
| 157 | pass | ||
| 158 | except NameError as e: | ||
| 159 | # Deals with NameError: name 'cached' is not defined | ||
| 160 | if debug == True: | ||
| 161 | log.write(item+' ') | ||
| 162 | log.write(str(e)) | ||
| 163 | pass | ||
| 164 | if cached is not None: | ||
| 165 | if debug == True: | ||
| 166 | log.write(cached + '\n') | ||
| 167 | cached = fix_path(cached) | ||
| 168 | cached = cached.replace(cpython_tag,'*') | ||
| 169 | if "_sysconfigdata" in cached: | ||
| 170 | cached = cached.replace(sysconfig._get_sysconfigdata_name(), "_sysconfigdata*") | ||
| 171 | print (cached) | ||
| 172 | |||
| 173 | if debug == True: | ||
| 174 | 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 @@ | |||
| 1 | From 2b458b4e1bcd57e3f135d3f0e715f64b98b27906 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Richard Purdie <richard.purdie@linuxfoundation.org> | ||
| 3 | Date: Tue, 13 Jul 2021 23:19:29 +0100 | ||
| 4 | Subject: [PATCH] python3: Fix make race | ||
| 5 | |||
| 6 | libainstall installs python-config.py but the .pyc cache files are generated | ||
| 7 | by the libinstall target. This means some builds may not generate the pyc files | ||
| 8 | for python-config.py depending on the order things happen in. This means builds | ||
| 9 | are not always reproducible. | ||
| 10 | |||
| 11 | Add a dependency to avoid the race. | ||
| 12 | |||
| 13 | Upstream-Status: Pending | ||
| 14 | Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org> | ||
| 15 | --- | ||
| 16 | Makefile.pre.in | 2 +- | ||
| 17 | 1 file changed, 1 insertion(+), 1 deletion(-) | ||
| 18 | |||
| 19 | diff --git a/Makefile.pre.in b/Makefile.pre.in | ||
| 20 | index be1b9ea..9ec3a71 100644 | ||
| 21 | --- a/Makefile.pre.in | ||
| 22 | +++ b/Makefile.pre.in | ||
| 23 | @@ -2492,7 +2492,7 @@ COMPILEALL_OPTS=-j0 | ||
| 24 | TEST_MODULES=@TEST_MODULES@ | ||
| 25 | |||
| 26 | .PHONY: libinstall | ||
| 27 | -libinstall: all $(srcdir)/Modules/xxmodule.c | ||
| 28 | +libinstall: all $(srcdir)/Modules/xxmodule.c libainstall | ||
| 29 | @for i in $(SCRIPTDIR) $(LIBDEST); \ | ||
| 30 | do \ | ||
| 31 | 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 @@ | |||
| 1 | # DO NOT (entirely) modify this file manually, please read. | ||
| 2 | # | ||
| 3 | # IMPORTANT NOTE: | ||
| 4 | # Please keep in mind that the create_manifest task relies on the fact that the | ||
| 5 | # target and native Python packages are the same, and it also needs to be executed | ||
| 6 | # with a fully working native package (with all the PACKAGECONFIGs enabled and all | ||
| 7 | # and all the modules should be working, check log.do_compile), otherwise the script | ||
| 8 | # will fail to find dependencies correctly, this note is valid either if you are | ||
| 9 | # upgrading to a new Python version or adding a new package. | ||
| 10 | # | ||
| 11 | # | ||
| 12 | # If you are adding a new package please follow the next steps: | ||
| 13 | # How to add a new package: | ||
| 14 | # - If a user wants to add a new package all that has to be done is: | ||
| 15 | # Modify the python3-manifest.json file, and add the required file(s) to the FILES list, | ||
| 16 | # fill up the SUMMARY section as well, the script should handle all the rest. | ||
| 17 | # | ||
| 18 | # Real example: | ||
| 19 | # We want to add a web browser package, including the file webbrowser.py | ||
| 20 | # which at the moment is on python3-misc. | ||
| 21 | # "webbrowser": { | ||
| 22 | # "files": ["${libdir}/python${PYTHON_MAJMIN}/lib-dynload/webbrowser.py"], | ||
| 23 | # "rdepends": [], | ||
| 24 | # "summary": "Python Web Browser support"} | ||
| 25 | # | ||
| 26 | # * Note that the rdepends field was left empty | ||
| 27 | # | ||
| 28 | # We run $ bitbake python3 -c create_manifest and the resulting manifest | ||
| 29 | # should be completed after a few seconds, showing something like: | ||
| 30 | # "webbrowser": { | ||
| 31 | # "files": ["${libdir}/python${PYTHON_MAJMIN}/webbrowser.py"], | ||
| 32 | # "rdepends": ["core","fcntl","io","pickle","shell","subprocess"], | ||
| 33 | # "summary": "Python Web Browser support"} | ||
| 34 | # | ||
| 35 | # | ||
| 36 | # If you are upgrading Python to a new version please follow the next steps: | ||
| 37 | # After each Python upgrade, the create_manifest task should be executed, because we | ||
| 38 | # don't control what changes on upstream Python, so, some module dependency | ||
| 39 | # might have changed without us realizing it, a certain module can either have | ||
| 40 | # more or less dependencies, or could be depending on a new file that was just | ||
| 41 | # created on the new release and for obvious reasons we wouldn't have it on our | ||
| 42 | # old manifest, all of these issues would cause runtime errors on our system. | ||
| 43 | # | ||
| 44 | # - Upgrade both the native and target Python packages to a new version | ||
| 45 | # - Run the create_manifest task for the target Python package as its shown below: | ||
| 46 | # | ||
| 47 | # $ bitbake python3 -c create_manifest | ||
| 48 | # | ||
| 49 | # This will automatically replace your manifest file located under the Python directory | ||
| 50 | # with an new one, which contains the new dependencies (if any). | ||
| 51 | # | ||
| 52 | # Several things could have gone wrong here, I will try to explain a few: | ||
| 53 | # | ||
| 54 | # a) A new file was introduced on this release, e.g. sha3*.so: | ||
| 55 | # The task will check what its needed to import every module, more than one module would | ||
| 56 | # would probably depend on sha3*.so, although only one module should contain it. | ||
| 57 | # | ||
| 58 | # After running the task, the new manifest will have the sha3*.so file on more than one | ||
| 59 | # module, you need to manually decide which one of them should get it and delete it from | ||
| 60 | # the others, for example sha3*.so should likely be on ${PN}-crypt. | ||
| 61 | # Once you have deleted from the others you need to run the create_manifest task again, | ||
| 62 | # this will populate the other module's rdepends fields, with ${PN}-crypt and you should be | ||
| 63 | # good to go. | ||
| 64 | # | ||
| 65 | # b) The native package wasn't built correctly and its missing a certain module: | ||
| 66 | # As mentioned before, you need to make sure the native package was built with all the modules | ||
| 67 | # because it is used as base to build the manifest file, you need to manually check log.do_compile | ||
| 68 | # since it won't error out the compile function if its only missing a couple of modules. | ||
| 69 | # | ||
| 70 | # e.g. missing the _uuid module, log.do_compile would show the following: | ||
| 71 | # Python build finished successfully! | ||
| 72 | # The necessary bits to build these optional modules were not found: | ||
| 73 | # _uuid | ||
| 74 | # | ||
| 75 | # What will happen here is that the new manifest would not be aware that the _uuid module exists, so | ||
| 76 | # not only we won't know of any dependencies to it, but also, the _uuid* files will be packaged on | ||
| 77 | # the misc package (which is where any file that doesn't belong anywhere else ends up). | ||
| 78 | # | ||
| 79 | # This will eventually cause runtime errors on our system if we don't include the misc package on | ||
| 80 | # on our image, because the _uuid files will be missing. | ||
| 81 | # If we build the _uuid module correctly and run the create_manifest task the _uuid files will be | ||
| 82 | # detected correctly along with its dependencies, and we will get a working manifest. | ||
| 83 | # | ||
| 84 | # This is the reason why it is important to make sure we have a fully working native build, | ||
| 85 | # so we can avoid these errors. | ||
| 86 | # | ||
| 87 | # | ||
| 88 | # | ||
| 89 | # DO NOT MODIFY THE NEXT LINE!, IT IS USED AS A MARKER FOR THE ACTUAL JSON MANIFEST | ||
| 90 | # EOC | ||
| 91 | { | ||
| 92 | "tests": { | ||
| 93 | "summary": "Python test suite", | ||
| 94 | "rdepends": [ | ||
| 95 | "core", | ||
| 96 | "modules" | ||
| 97 | ], | ||
| 98 | "files": [ | ||
| 99 | "${libdir}/python${PYTHON_MAJMIN}/*/test", | ||
| 100 | "${libdir}/python${PYTHON_MAJMIN}/*/tests", | ||
| 101 | "${libdir}/python${PYTHON_MAJMIN}/idlelib/idle_test/", | ||
| 102 | "${libdir}/python${PYTHON_MAJMIN}/test" | ||
| 103 | ], | ||
| 104 | "cached": [] | ||
| 105 | }, | ||
| 106 | "asyncio": { | ||
| 107 | "summary": "Python Asynchronous I/O", | ||
| 108 | "rdepends": [ | ||
| 109 | "core", | ||
| 110 | "io", | ||
| 111 | "logging", | ||
| 112 | "netclient", | ||
| 113 | "numbers", | ||
| 114 | "stringold" | ||
| 115 | ], | ||
| 116 | "files": [ | ||
| 117 | "${libdir}/python${PYTHON_MAJMIN}/asyncio", | ||
| 118 | "${libdir}/python${PYTHON_MAJMIN}/concurrent", | ||
| 119 | "${libdir}/python${PYTHON_MAJMIN}/concurrent/futures", | ||
| 120 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_asyncio.*.so" | ||
| 121 | ], | ||
| 122 | "cached": [] | ||
| 123 | }, | ||
| 124 | "audio": { | ||
| 125 | "summary": "Python Audio Handling", | ||
| 126 | "rdepends": [ | ||
| 127 | "core" | ||
| 128 | ], | ||
| 129 | "files": [ | ||
| 130 | "${libdir}/python${PYTHON_MAJMIN}/wave.py" | ||
| 131 | ], | ||
| 132 | "cached": [ | ||
| 133 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/wave.*.pyc" | ||
| 134 | ] | ||
| 135 | }, | ||
| 136 | "codecs": { | ||
| 137 | "summary": "Python codec", | ||
| 138 | "rdepends": [ | ||
| 139 | "core" | ||
| 140 | ], | ||
| 141 | "files": [ | ||
| 142 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_multibytecodec.*.so" | ||
| 143 | ], | ||
| 144 | "cached": [] | ||
| 145 | }, | ||
| 146 | "compile": { | ||
| 147 | "summary": "Python bytecode compilation support", | ||
| 148 | "rdepends": [ | ||
| 149 | "core" | ||
| 150 | ], | ||
| 151 | "files": [ | ||
| 152 | "${libdir}/python${PYTHON_MAJMIN}/compileall.py", | ||
| 153 | "${libdir}/python${PYTHON_MAJMIN}/filecmp.py", | ||
| 154 | "${libdir}/python${PYTHON_MAJMIN}/py_compile.py" | ||
| 155 | ], | ||
| 156 | "cached": [ | ||
| 157 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/compileall.*.pyc", | ||
| 158 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/filecmp.*.pyc", | ||
| 159 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/py_compile.*.pyc" | ||
| 160 | ] | ||
| 161 | }, | ||
| 162 | "compression": { | ||
| 163 | "summary": "Python high-level compression support", | ||
| 164 | "rdepends": [ | ||
| 165 | "core" | ||
| 166 | ], | ||
| 167 | "files": [ | ||
| 168 | "${libdir}/python${PYTHON_MAJMIN}/gzip.py", | ||
| 169 | "${libdir}/python${PYTHON_MAJMIN}/tarfile.py", | ||
| 170 | "${libdir}/python${PYTHON_MAJMIN}/zipfile", | ||
| 171 | "${libdir}/python${PYTHON_MAJMIN}/zipfile/_path" | ||
| 172 | ], | ||
| 173 | "cached": [ | ||
| 174 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/gzip.*.pyc", | ||
| 175 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/tarfile.*.pyc" | ||
| 176 | ] | ||
| 177 | }, | ||
| 178 | "core": { | ||
| 179 | "summary": "Python interpreter and core modules", | ||
| 180 | "rdepends": ["compression"], | ||
| 181 | "files": [ | ||
| 182 | "${bindir}/python${PYTHON_MAJMIN}", | ||
| 183 | "${bindir}/python${PYTHON_MAJMIN}.real", | ||
| 184 | "${bindir}/python3", | ||
| 185 | "${includedir}/python${PYTHON_MAJMIN}/pyconfig*.h", | ||
| 186 | "${libdir}/python${PYTHON_MAJMIN}/UserDict.py", | ||
| 187 | "${libdir}/python${PYTHON_MAJMIN}/UserList.py", | ||
| 188 | "${libdir}/python${PYTHON_MAJMIN}/UserString.py", | ||
| 189 | "${libdir}/python${PYTHON_MAJMIN}/__future__.py", | ||
| 190 | "${libdir}/python${PYTHON_MAJMIN}/_abcoll.py", | ||
| 191 | "${libdir}/python${PYTHON_MAJMIN}/_bootlocale.py", | ||
| 192 | "${libdir}/python${PYTHON_MAJMIN}/_collections_abc.py", | ||
| 193 | "${libdir}/python${PYTHON_MAJMIN}/_colorize.py", | ||
| 194 | "${libdir}/python${PYTHON_MAJMIN}/_compression.py", | ||
| 195 | "${libdir}/python${PYTHON_MAJMIN}/_markupbase.py", | ||
| 196 | "${libdir}/python${PYTHON_MAJMIN}/_opcode_metadata.py", | ||
| 197 | "${libdir}/python${PYTHON_MAJMIN}/_pyrepl", | ||
| 198 | "${libdir}/python${PYTHON_MAJMIN}/_pyrepl/pager.py", | ||
| 199 | "${libdir}/python${PYTHON_MAJMIN}/_sitebuiltins.py", | ||
| 200 | "${libdir}/python${PYTHON_MAJMIN}/_sysconfigdata*.py", | ||
| 201 | "${libdir}/python${PYTHON_MAJMIN}/_weakrefset.py", | ||
| 202 | "${libdir}/python${PYTHON_MAJMIN}/abc.py", | ||
| 203 | "${libdir}/python${PYTHON_MAJMIN}/argparse.py", | ||
| 204 | "${libdir}/python${PYTHON_MAJMIN}/ast.py", | ||
| 205 | "${libdir}/python${PYTHON_MAJMIN}/bisect.py", | ||
| 206 | "${libdir}/python${PYTHON_MAJMIN}/bz2.py", | ||
| 207 | "${libdir}/python${PYTHON_MAJMIN}/code.py", | ||
| 208 | "${libdir}/python${PYTHON_MAJMIN}/codecs.py", | ||
| 209 | "${libdir}/python${PYTHON_MAJMIN}/codeop.py", | ||
| 210 | "${libdir}/python${PYTHON_MAJMIN}/collections", | ||
| 211 | "${libdir}/python${PYTHON_MAJMIN}/collections/abc.py", | ||
| 212 | "${libdir}/python${PYTHON_MAJMIN}/configparser.py", | ||
| 213 | "${libdir}/python${PYTHON_MAJMIN}/contextlib.py", | ||
| 214 | "${libdir}/python${PYTHON_MAJMIN}/copy.py", | ||
| 215 | "${libdir}/python${PYTHON_MAJMIN}/copyreg.py", | ||
| 216 | "${libdir}/python${PYTHON_MAJMIN}/csv.py", | ||
| 217 | "${libdir}/python${PYTHON_MAJMIN}/dataclasses.py", | ||
| 218 | "${libdir}/python${PYTHON_MAJMIN}/dis.py", | ||
| 219 | "${libdir}/python${PYTHON_MAJMIN}/encodings", | ||
| 220 | "${libdir}/python${PYTHON_MAJMIN}/encodings/aliases.py", | ||
| 221 | "${libdir}/python${PYTHON_MAJMIN}/encodings/latin_1.py", | ||
| 222 | "${libdir}/python${PYTHON_MAJMIN}/encodings/utf_8.py", | ||
| 223 | "${libdir}/python${PYTHON_MAJMIN}/enum.py", | ||
| 224 | "${libdir}/python${PYTHON_MAJMIN}/fnmatch.py", | ||
| 225 | "${libdir}/python${PYTHON_MAJMIN}/functools.py", | ||
| 226 | "${libdir}/python${PYTHON_MAJMIN}/genericpath.py", | ||
| 227 | "${libdir}/python${PYTHON_MAJMIN}/getopt.py", | ||
| 228 | "${libdir}/python${PYTHON_MAJMIN}/gettext.py", | ||
| 229 | "${libdir}/python${PYTHON_MAJMIN}/glob.py", | ||
| 230 | "${libdir}/python${PYTHON_MAJMIN}/heapq.py", | ||
| 231 | "${libdir}/python${PYTHON_MAJMIN}/imp.py", | ||
| 232 | "${libdir}/python${PYTHON_MAJMIN}/importlib", | ||
| 233 | "${libdir}/python${PYTHON_MAJMIN}/importlib/_abc.py", | ||
| 234 | "${libdir}/python${PYTHON_MAJMIN}/importlib/_bootstrap.py", | ||
| 235 | "${libdir}/python${PYTHON_MAJMIN}/importlib/_bootstrap_external.py", | ||
| 236 | "${libdir}/python${PYTHON_MAJMIN}/importlib/abc.py", | ||
| 237 | "${libdir}/python${PYTHON_MAJMIN}/importlib/machinery.py", | ||
| 238 | "${libdir}/python${PYTHON_MAJMIN}/importlib/util.py", | ||
| 239 | "${libdir}/python${PYTHON_MAJMIN}/inspect.py", | ||
| 240 | "${libdir}/python${PYTHON_MAJMIN}/io.py", | ||
| 241 | "${libdir}/python${PYTHON_MAJMIN}/ipaddress.py", | ||
| 242 | "${libdir}/python${PYTHON_MAJMIN}/keyword.py", | ||
| 243 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/__pycache__/_struct.*.so", | ||
| 244 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/__pycache__/binascii.*.so", | ||
| 245 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/__pycache__/time.*.so", | ||
| 246 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/__pycache__/xreadlines.*.so", | ||
| 247 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_bisect.*.so", | ||
| 248 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_bz2.*.so", | ||
| 249 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_csv.*.so", | ||
| 250 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_heapq.*.so", | ||
| 251 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_lzma.*.so", | ||
| 252 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_opcode.*.so", | ||
| 253 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_posixsubprocess.*.so", | ||
| 254 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_struct.*.so", | ||
| 255 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_typing.*.so", | ||
| 256 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/array.*.so", | ||
| 257 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/binascii.*.so", | ||
| 258 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/fcntl.*.so", | ||
| 259 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/grp.*.so", | ||
| 260 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/math.*.so", | ||
| 261 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/parser.*.so", | ||
| 262 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/readline.*.so", | ||
| 263 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/select.*.so", | ||
| 264 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/time.*.so", | ||
| 265 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/unicodedata.*.so", | ||
| 266 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/xreadlines.*.so", | ||
| 267 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/zlib.*.so", | ||
| 268 | "${libdir}/python${PYTHON_MAJMIN}/linecache.py", | ||
| 269 | "${libdir}/python${PYTHON_MAJMIN}/locale.py", | ||
| 270 | "${libdir}/python${PYTHON_MAJMIN}/lzma.py", | ||
| 271 | "${libdir}/python${PYTHON_MAJMIN}/new.py", | ||
| 272 | "${libdir}/python${PYTHON_MAJMIN}/ntpath.py", | ||
| 273 | "${libdir}/python${PYTHON_MAJMIN}/opcode.py", | ||
| 274 | "${libdir}/python${PYTHON_MAJMIN}/operator.py", | ||
| 275 | "${libdir}/python${PYTHON_MAJMIN}/optparse.py", | ||
| 276 | "${libdir}/python${PYTHON_MAJMIN}/os.py", | ||
| 277 | "${libdir}/python${PYTHON_MAJMIN}/pathlib", | ||
| 278 | "${libdir}/python${PYTHON_MAJMIN}/pathlib.py", | ||
| 279 | "${libdir}/python${PYTHON_MAJMIN}/pathlib/_abc.py", | ||
| 280 | "${libdir}/python${PYTHON_MAJMIN}/pathlib/_local.py", | ||
| 281 | "${libdir}/python${PYTHON_MAJMIN}/pkgutil.py", | ||
| 282 | "${libdir}/python${PYTHON_MAJMIN}/platform.py", | ||
| 283 | "${libdir}/python${PYTHON_MAJMIN}/posixpath.py", | ||
| 284 | "${libdir}/python${PYTHON_MAJMIN}/re", | ||
| 285 | "${libdir}/python${PYTHON_MAJMIN}/re/_casefix.py", | ||
| 286 | "${libdir}/python${PYTHON_MAJMIN}/re/_compiler.py", | ||
| 287 | "${libdir}/python${PYTHON_MAJMIN}/re/_constants.py", | ||
| 288 | "${libdir}/python${PYTHON_MAJMIN}/re/_parser.py", | ||
| 289 | "${libdir}/python${PYTHON_MAJMIN}/reprlib.py", | ||
| 290 | "${libdir}/python${PYTHON_MAJMIN}/rlcompleter.py", | ||
| 291 | "${libdir}/python${PYTHON_MAJMIN}/runpy.py", | ||
| 292 | "${libdir}/python${PYTHON_MAJMIN}/selectors.py", | ||
| 293 | "${libdir}/python${PYTHON_MAJMIN}/shutil.py", | ||
| 294 | "${libdir}/python${PYTHON_MAJMIN}/signal.py", | ||
| 295 | "${libdir}/python${PYTHON_MAJMIN}/site.py", | ||
| 296 | "${libdir}/python${PYTHON_MAJMIN}/sitecustomize.py", | ||
| 297 | "${libdir}/python${PYTHON_MAJMIN}/sre_compile.py", | ||
| 298 | "${libdir}/python${PYTHON_MAJMIN}/sre_constants.py", | ||
| 299 | "${libdir}/python${PYTHON_MAJMIN}/sre_parse.py", | ||
| 300 | "${libdir}/python${PYTHON_MAJMIN}/stat.py", | ||
| 301 | "${libdir}/python${PYTHON_MAJMIN}/stringprep.py", | ||
| 302 | "${libdir}/python${PYTHON_MAJMIN}/struct.py", | ||
| 303 | "${libdir}/python${PYTHON_MAJMIN}/subprocess.py", | ||
| 304 | "${libdir}/python${PYTHON_MAJMIN}/symbol.py", | ||
| 305 | "${libdir}/python${PYTHON_MAJMIN}/sysconfig", | ||
| 306 | "${libdir}/python${PYTHON_MAJMIN}/sysconfig.py", | ||
| 307 | "${libdir}/python${PYTHON_MAJMIN}/textwrap.py", | ||
| 308 | "${libdir}/python${PYTHON_MAJMIN}/threading.py", | ||
| 309 | "${libdir}/python${PYTHON_MAJMIN}/token.py", | ||
| 310 | "${libdir}/python${PYTHON_MAJMIN}/tokenize.py", | ||
| 311 | "${libdir}/python${PYTHON_MAJMIN}/traceback.py", | ||
| 312 | "${libdir}/python${PYTHON_MAJMIN}/types.py", | ||
| 313 | "${libdir}/python${PYTHON_MAJMIN}/typing.py", | ||
| 314 | "${libdir}/python${PYTHON_MAJMIN}/urllib", | ||
| 315 | "${libdir}/python${PYTHON_MAJMIN}/urllib/parse.py", | ||
| 316 | "${libdir}/python${PYTHON_MAJMIN}/warnings.py", | ||
| 317 | "${libdir}/python${PYTHON_MAJMIN}/weakref.py", | ||
| 318 | "${libdir}/python${PYTHON_MAJMIN}/zipimport.py", | ||
| 319 | "${prefix}/lib/python${PYTHON_MAJMIN}/config*/*[!.a]" | ||
| 320 | ], | ||
| 321 | "cached": [ | ||
| 322 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/__future__.*.pyc", | ||
| 323 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_bootlocale.*.pyc", | ||
| 324 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_collections_abc.*.pyc", | ||
| 325 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_colorize.*.pyc", | ||
| 326 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_compression.*.pyc", | ||
| 327 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_markupbase.*.pyc", | ||
| 328 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_opcode_metadata.*.pyc", | ||
| 329 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_sitebuiltins.*.pyc", | ||
| 330 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_sysconfigdata*.*.pyc", | ||
| 331 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_weakrefset.*.pyc", | ||
| 332 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/abc.*.pyc", | ||
| 333 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/argparse.*.pyc", | ||
| 334 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/ast.*.pyc", | ||
| 335 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/bisect.*.pyc", | ||
| 336 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/bz2.*.pyc", | ||
| 337 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/code.*.pyc", | ||
| 338 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/codecs.*.pyc", | ||
| 339 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/codeop.*.pyc", | ||
| 340 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/configparser.*.pyc", | ||
| 341 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/contextlib.*.pyc", | ||
| 342 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/copy.*.pyc", | ||
| 343 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/copyreg.*.pyc", | ||
| 344 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/csv.*.pyc", | ||
| 345 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/dataclasses.*.pyc", | ||
| 346 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/dis.*.pyc", | ||
| 347 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/enum.*.pyc", | ||
| 348 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/fnmatch.*.pyc", | ||
| 349 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/functools.*.pyc", | ||
| 350 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/genericpath.*.pyc", | ||
| 351 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/getopt.*.pyc", | ||
| 352 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/gettext.*.pyc", | ||
| 353 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/glob.*.pyc", | ||
| 354 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/heapq.*.pyc", | ||
| 355 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/imp.*.pyc", | ||
| 356 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/inspect.*.pyc", | ||
| 357 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/io.*.pyc", | ||
| 358 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/ipaddress.*.pyc", | ||
| 359 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/keyword.*.pyc", | ||
| 360 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/linecache.*.pyc", | ||
| 361 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/locale.*.pyc", | ||
| 362 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/lzma.*.pyc", | ||
| 363 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/ntpath.*.pyc", | ||
| 364 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/opcode.*.pyc", | ||
| 365 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/operator.*.pyc", | ||
| 366 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/optparse.*.pyc", | ||
| 367 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/os.*.pyc", | ||
| 368 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pathlib.*.pyc", | ||
| 369 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pkgutil.*.pyc", | ||
| 370 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/platform.*.pyc", | ||
| 371 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/posixpath.*.pyc", | ||
| 372 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/re.*.pyc", | ||
| 373 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/reprlib.*.pyc", | ||
| 374 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/rlcompleter.*.pyc", | ||
| 375 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/runpy.*.pyc", | ||
| 376 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/selectors.*.pyc", | ||
| 377 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/shutil.*.pyc", | ||
| 378 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/signal.*.pyc", | ||
| 379 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/site.*.pyc", | ||
| 380 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/sre_compile.*.pyc", | ||
| 381 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/sre_constants.*.pyc", | ||
| 382 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/sre_parse.*.pyc", | ||
| 383 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/stat.*.pyc", | ||
| 384 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/stringprep.*.pyc", | ||
| 385 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/struct.*.pyc", | ||
| 386 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/subprocess.*.pyc", | ||
| 387 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/symbol.*.pyc", | ||
| 388 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/sysconfig.*.pyc", | ||
| 389 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/textwrap.*.pyc", | ||
| 390 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/threading.*.pyc", | ||
| 391 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/token.*.pyc", | ||
| 392 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/tokenize.*.pyc", | ||
| 393 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/traceback.*.pyc", | ||
| 394 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/types.*.pyc", | ||
| 395 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/typing.*.pyc", | ||
| 396 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/warnings.*.pyc", | ||
| 397 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/weakref.*.pyc", | ||
| 398 | "${libdir}/python${PYTHON_MAJMIN}/_pyrepl/__pycache__", | ||
| 399 | "${libdir}/python${PYTHON_MAJMIN}/_pyrepl/__pycache__/pager.*.pyc", | ||
| 400 | "${libdir}/python${PYTHON_MAJMIN}/collections/__pycache__", | ||
| 401 | "${libdir}/python${PYTHON_MAJMIN}/collections/__pycache__/abc.*.pyc", | ||
| 402 | "${libdir}/python${PYTHON_MAJMIN}/encodings/__pycache__", | ||
| 403 | "${libdir}/python${PYTHON_MAJMIN}/encodings/__pycache__/aliases.*.pyc", | ||
| 404 | "${libdir}/python${PYTHON_MAJMIN}/encodings/__pycache__/latin_1.*.pyc", | ||
| 405 | "${libdir}/python${PYTHON_MAJMIN}/encodings/__pycache__/utf_8.*.pyc", | ||
| 406 | "${libdir}/python${PYTHON_MAJMIN}/importlib/__pycache__", | ||
| 407 | "${libdir}/python${PYTHON_MAJMIN}/importlib/__pycache__/_abc.*.pyc", | ||
| 408 | "${libdir}/python${PYTHON_MAJMIN}/importlib/__pycache__/abc.*.pyc", | ||
| 409 | "${libdir}/python${PYTHON_MAJMIN}/importlib/__pycache__/machinery.*.pyc", | ||
| 410 | "${libdir}/python${PYTHON_MAJMIN}/importlib/__pycache__/util.*.pyc", | ||
| 411 | "${libdir}/python${PYTHON_MAJMIN}/pathlib/__pycache__", | ||
| 412 | "${libdir}/python${PYTHON_MAJMIN}/pathlib/__pycache__/_abc.*.pyc", | ||
| 413 | "${libdir}/python${PYTHON_MAJMIN}/pathlib/__pycache__/_local.*.pyc", | ||
| 414 | "${libdir}/python${PYTHON_MAJMIN}/re/__pycache__", | ||
| 415 | "${libdir}/python${PYTHON_MAJMIN}/re/__pycache__/_casefix.*.pyc", | ||
| 416 | "${libdir}/python${PYTHON_MAJMIN}/re/__pycache__/_compiler.*.pyc", | ||
| 417 | "${libdir}/python${PYTHON_MAJMIN}/re/__pycache__/_constants.*.pyc", | ||
| 418 | "${libdir}/python${PYTHON_MAJMIN}/re/__pycache__/_parser.*.pyc", | ||
| 419 | "${libdir}/python${PYTHON_MAJMIN}/sysconfig/__pycache__", | ||
| 420 | "${libdir}/python${PYTHON_MAJMIN}/urllib/__pycache__", | ||
| 421 | "${libdir}/python${PYTHON_MAJMIN}/urllib/__pycache__/parse.*.pyc" | ||
| 422 | ] | ||
| 423 | }, | ||
| 424 | "crypt": { | ||
| 425 | "summary": "Python basic cryptographic and hashing support", | ||
| 426 | "rdepends": [ | ||
| 427 | "core" | ||
| 428 | ], | ||
| 429 | "files": [ | ||
| 430 | "${libdir}/python${PYTHON_MAJMIN}/hashlib.py", | ||
| 431 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_blake2.*.so", | ||
| 432 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_hashlib.*.so", | ||
| 433 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_md5.*.so", | ||
| 434 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_sha1.*.so", | ||
| 435 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_sha2.*.so", | ||
| 436 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_sha3.*.so" | ||
| 437 | ], | ||
| 438 | "cached": [ | ||
| 439 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/hashlib.*.pyc" | ||
| 440 | ] | ||
| 441 | }, | ||
| 442 | "ctypes": { | ||
| 443 | "summary": "Python C types support", | ||
| 444 | "rdepends": [ | ||
| 445 | "core", | ||
| 446 | "io", | ||
| 447 | "math" | ||
| 448 | ], | ||
| 449 | "files": [ | ||
| 450 | "${libdir}/python${PYTHON_MAJMIN}/ctypes", | ||
| 451 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_ctypes.*.so", | ||
| 452 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_ctypes_test.*.so" | ||
| 453 | ], | ||
| 454 | "cached": [] | ||
| 455 | }, | ||
| 456 | "curses": { | ||
| 457 | "summary": "Python curses support", | ||
| 458 | "rdepends": [ | ||
| 459 | "core" | ||
| 460 | ], | ||
| 461 | "files": [ | ||
| 462 | "${libdir}/python${PYTHON_MAJMIN}/curses", | ||
| 463 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_curses.*.so", | ||
| 464 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_curses_panel.*.so" | ||
| 465 | ], | ||
| 466 | "cached": [] | ||
| 467 | }, | ||
| 468 | "datetime": { | ||
| 469 | "summary": "Python calendar and time support", | ||
| 470 | "rdepends": [ | ||
| 471 | "core" | ||
| 472 | ], | ||
| 473 | "files": [ | ||
| 474 | "${libdir}/python${PYTHON_MAJMIN}/_strptime.py", | ||
| 475 | "${libdir}/python${PYTHON_MAJMIN}/calendar.py", | ||
| 476 | "${libdir}/python${PYTHON_MAJMIN}/datetime.py", | ||
| 477 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_datetime.*.so" | ||
| 478 | ], | ||
| 479 | "cached": [ | ||
| 480 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_strptime.*.pyc", | ||
| 481 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/calendar.*.pyc", | ||
| 482 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/datetime.*.pyc" | ||
| 483 | ] | ||
| 484 | }, | ||
| 485 | "db": { | ||
| 486 | "summary": "Python file-based database support", | ||
| 487 | "rdepends": [ | ||
| 488 | "core" | ||
| 489 | ], | ||
| 490 | "files": [ | ||
| 491 | "${libdir}/python${PYTHON_MAJMIN}/dbm", | ||
| 492 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_dbm.*.so" | ||
| 493 | ], | ||
| 494 | "cached": [] | ||
| 495 | }, | ||
| 496 | "debugger": { | ||
| 497 | "summary": "Python debugger", | ||
| 498 | "rdepends": [ | ||
| 499 | "core", | ||
| 500 | "pprint", | ||
| 501 | "shell", | ||
| 502 | "stringold" | ||
| 503 | ], | ||
| 504 | "files": [ | ||
| 505 | "${libdir}/python${PYTHON_MAJMIN}/bdb.py", | ||
| 506 | "${libdir}/python${PYTHON_MAJMIN}/pdb.py" | ||
| 507 | ], | ||
| 508 | "cached": [ | ||
| 509 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/bdb.*.pyc", | ||
| 510 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pdb.*.pyc" | ||
| 511 | ] | ||
| 512 | }, | ||
| 513 | "dev": { | ||
| 514 | "cached": [], | ||
| 515 | "files": [ | ||
| 516 | "${base_libdir}/*.a", | ||
| 517 | "${base_libdir}/*.o", | ||
| 518 | "${bindir}/python*-config*", | ||
| 519 | "${datadir}/aclocal", | ||
| 520 | "${datadir}/pkgconfig", | ||
| 521 | "${includedir}", | ||
| 522 | "${libdir}/*.a", | ||
| 523 | "${libdir}/*.la", | ||
| 524 | "${libdir}/*.o", | ||
| 525 | "${libdir}/lib*${SOLIBSDEV}", | ||
| 526 | "${libdir}/pkgconfig" | ||
| 527 | ], | ||
| 528 | "rdepends": [ | ||
| 529 | "core" | ||
| 530 | ], | ||
| 531 | "summary": "Python development package" | ||
| 532 | }, | ||
| 533 | "difflib": { | ||
| 534 | "summary": "Python helpers for computing deltas between objects", | ||
| 535 | "rdepends": [ | ||
| 536 | "core" | ||
| 537 | ], | ||
| 538 | "files": [ | ||
| 539 | "${libdir}/python${PYTHON_MAJMIN}/difflib.py" | ||
| 540 | ], | ||
| 541 | "cached": [ | ||
| 542 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/difflib.*.pyc" | ||
| 543 | ] | ||
| 544 | }, | ||
| 545 | "doctest": { | ||
| 546 | "summary": "Python framework for running examples in docstrings", | ||
| 547 | "rdepends": [ | ||
| 548 | "core", | ||
| 549 | "debugger", | ||
| 550 | "difflib", | ||
| 551 | "pprint", | ||
| 552 | "shell", | ||
| 553 | "stringold", | ||
| 554 | "unittest" | ||
| 555 | ], | ||
| 556 | "files": [ | ||
| 557 | "${libdir}/python${PYTHON_MAJMIN}/doctest.py" | ||
| 558 | ], | ||
| 559 | "cached": [ | ||
| 560 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/doctest.*.pyc" | ||
| 561 | ] | ||
| 562 | }, | ||
| 563 | "email": { | ||
| 564 | "summary": "Python email support", | ||
| 565 | "rdepends": [ | ||
| 566 | "core", | ||
| 567 | "datetime", | ||
| 568 | "io", | ||
| 569 | "math", | ||
| 570 | "mime", | ||
| 571 | "netclient", | ||
| 572 | "stringold" | ||
| 573 | ], | ||
| 574 | "files": [ | ||
| 575 | "${libdir}/python${PYTHON_MAJMIN}/email", | ||
| 576 | "${libdir}/python${PYTHON_MAJMIN}/imaplib.py" | ||
| 577 | ], | ||
| 578 | "cached": [ | ||
| 579 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/imaplib.*.pyc" | ||
| 580 | ] | ||
| 581 | }, | ||
| 582 | "ensurepip": { | ||
| 583 | "summary": "Support for bootstrapping the pip installer", | ||
| 584 | "rdepends": [ | ||
| 585 | "core" | ||
| 586 | ], | ||
| 587 | "files": [ | ||
| 588 | "${libdir}/python${PYTHON_MAJMIN}/ensurepip/" | ||
| 589 | ], | ||
| 590 | "cached": [] | ||
| 591 | }, | ||
| 592 | "fcntl": { | ||
| 593 | "summary": "Python's fcntl interface", | ||
| 594 | "rdepends": [ | ||
| 595 | "core" | ||
| 596 | ], | ||
| 597 | "files": [ | ||
| 598 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/fcntl.*.so" | ||
| 599 | ], | ||
| 600 | "cached": [] | ||
| 601 | }, | ||
| 602 | "gdbm": { | ||
| 603 | "summary": "Python GNU database support", | ||
| 604 | "rdepends": [ | ||
| 605 | "core" | ||
| 606 | ], | ||
| 607 | "files": [ | ||
| 608 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_gdbm.*.so" | ||
| 609 | ], | ||
| 610 | "cached": [] | ||
| 611 | }, | ||
| 612 | "html": { | ||
| 613 | "summary": "Python HTML processing support", | ||
| 614 | "rdepends": [ | ||
| 615 | "core" | ||
| 616 | ], | ||
| 617 | "files": [ | ||
| 618 | "${libdir}/python${PYTHON_MAJMIN}/html" | ||
| 619 | ], | ||
| 620 | "cached": [] | ||
| 621 | }, | ||
| 622 | "idle": { | ||
| 623 | "summary": "Python Integrated Development Environment", | ||
| 624 | "rdepends": [ | ||
| 625 | "core" | ||
| 626 | ], | ||
| 627 | "files": [ | ||
| 628 | "${bindir}/idle*", | ||
| 629 | "${libdir}/python${PYTHON_MAJMIN}/idlelib" | ||
| 630 | ], | ||
| 631 | "cached": [] | ||
| 632 | }, | ||
| 633 | "image": { | ||
| 634 | "summary": "Python graphical image handling", | ||
| 635 | "rdepends": [ | ||
| 636 | "core" | ||
| 637 | ], | ||
| 638 | "files": [ | ||
| 639 | "${libdir}/python${PYTHON_MAJMIN}/colorsys.py" | ||
| 640 | ], | ||
| 641 | "cached": [ | ||
| 642 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/colorsys.*.pyc" | ||
| 643 | ] | ||
| 644 | }, | ||
| 645 | "io": { | ||
| 646 | "summary": "Python low-level I/O", | ||
| 647 | "rdepends": [ | ||
| 648 | "core", | ||
| 649 | "math", | ||
| 650 | "netclient" | ||
| 651 | ], | ||
| 652 | "files": [ | ||
| 653 | "${libdir}/python${PYTHON_MAJMIN}/_pyio.py", | ||
| 654 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_socket.*.so", | ||
| 655 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_ssl.*.so", | ||
| 656 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/termios.*.so", | ||
| 657 | "${libdir}/python${PYTHON_MAJMIN}/socket.py", | ||
| 658 | "${libdir}/python${PYTHON_MAJMIN}/ssl.py", | ||
| 659 | "${libdir}/python${PYTHON_MAJMIN}/tempfile.py" | ||
| 660 | ], | ||
| 661 | "cached": [ | ||
| 662 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_pyio.*.pyc", | ||
| 663 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/socket.*.pyc", | ||
| 664 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/ssl.*.pyc", | ||
| 665 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/tempfile.*.pyc" | ||
| 666 | ] | ||
| 667 | }, | ||
| 668 | "json": { | ||
| 669 | "summary": "Python JSON support", | ||
| 670 | "rdepends": [ | ||
| 671 | "core" | ||
| 672 | ], | ||
| 673 | "files": [ | ||
| 674 | "${libdir}/python${PYTHON_MAJMIN}/json", | ||
| 675 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_json.*.so" | ||
| 676 | ], | ||
| 677 | "cached": [] | ||
| 678 | }, | ||
| 679 | "logging": { | ||
| 680 | "summary": "Python logging support", | ||
| 681 | "rdepends": [ | ||
| 682 | "core", | ||
| 683 | "io", | ||
| 684 | "netserver", | ||
| 685 | "pickle", | ||
| 686 | "stringold", | ||
| 687 | "threading" | ||
| 688 | ], | ||
| 689 | "files": [ | ||
| 690 | "${libdir}/python${PYTHON_MAJMIN}/logging" | ||
| 691 | ], | ||
| 692 | "cached": [] | ||
| 693 | }, | ||
| 694 | "mailbox": { | ||
| 695 | "summary": "Python mailbox format support", | ||
| 696 | "rdepends": [ | ||
| 697 | "core", | ||
| 698 | "datetime", | ||
| 699 | "email", | ||
| 700 | "io", | ||
| 701 | "math", | ||
| 702 | "mime", | ||
| 703 | "netclient", | ||
| 704 | "stringold" | ||
| 705 | ], | ||
| 706 | "files": [ | ||
| 707 | "${libdir}/python${PYTHON_MAJMIN}/mailbox.py" | ||
| 708 | ], | ||
| 709 | "cached": [ | ||
| 710 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/mailbox.*.pyc" | ||
| 711 | ] | ||
| 712 | }, | ||
| 713 | "math": { | ||
| 714 | "summary": "Python math support", | ||
| 715 | "rdepends": [ | ||
| 716 | "core" | ||
| 717 | ], | ||
| 718 | "files": [ | ||
| 719 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_random.*.so", | ||
| 720 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/cmath.*.so", | ||
| 721 | "${libdir}/python${PYTHON_MAJMIN}/random.py" | ||
| 722 | ], | ||
| 723 | "cached": [ | ||
| 724 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/random.*.pyc" | ||
| 725 | ] | ||
| 726 | }, | ||
| 727 | "mime": { | ||
| 728 | "summary": "Python MIME handling APIs", | ||
| 729 | "rdepends": [ | ||
| 730 | "core" | ||
| 731 | ], | ||
| 732 | "files": [ | ||
| 733 | "${libdir}/python${PYTHON_MAJMIN}/quopri.py" | ||
| 734 | ], | ||
| 735 | "cached": [ | ||
| 736 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/quopri.*.pyc" | ||
| 737 | ] | ||
| 738 | }, | ||
| 739 | "mmap": { | ||
| 740 | "summary": "Python memory-mapped file support", | ||
| 741 | "rdepends": [ | ||
| 742 | "core" | ||
| 743 | ], | ||
| 744 | "files": [ | ||
| 745 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/mmap.*.so" | ||
| 746 | ], | ||
| 747 | "cached": [] | ||
| 748 | }, | ||
| 749 | "modules": { | ||
| 750 | "cached": [], | ||
| 751 | "files": [], | ||
| 752 | "rdepends": [ | ||
| 753 | "asyncio", | ||
| 754 | "audio", | ||
| 755 | "codecs", | ||
| 756 | "compile", | ||
| 757 | "compression", | ||
| 758 | "core", | ||
| 759 | "crypt", | ||
| 760 | "ctypes", | ||
| 761 | "curses", | ||
| 762 | "datetime", | ||
| 763 | "db", | ||
| 764 | "debugger", | ||
| 765 | "difflib", | ||
| 766 | "doctest", | ||
| 767 | "email", | ||
| 768 | "ensurepip", | ||
| 769 | "fcntl", | ||
| 770 | "html", | ||
| 771 | "idle", | ||
| 772 | "image", | ||
| 773 | "io", | ||
| 774 | "json", | ||
| 775 | "logging", | ||
| 776 | "mailbox", | ||
| 777 | "math", | ||
| 778 | "mime", | ||
| 779 | "mmap", | ||
| 780 | "multiprocessing", | ||
| 781 | "netclient", | ||
| 782 | "netserver", | ||
| 783 | "numbers", | ||
| 784 | "pickle", | ||
| 785 | "pkgutil", | ||
| 786 | "plistlib", | ||
| 787 | "pprint", | ||
| 788 | "profile", | ||
| 789 | "pydoc", | ||
| 790 | "resource", | ||
| 791 | "shell", | ||
| 792 | "sqlite3", | ||
| 793 | "statistics", | ||
| 794 | "stringold", | ||
| 795 | "syslog", | ||
| 796 | "terminal", | ||
| 797 | "threading", | ||
| 798 | "tkinter", | ||
| 799 | "tomllib", | ||
| 800 | "unittest", | ||
| 801 | "unixadmin", | ||
| 802 | "venv", | ||
| 803 | "xml", | ||
| 804 | "xmlrpc", | ||
| 805 | "zoneinfo" | ||
| 806 | ], | ||
| 807 | "summary": "All Python modules" | ||
| 808 | }, | ||
| 809 | "multiprocessing": { | ||
| 810 | "summary": "Python multiprocessing support", | ||
| 811 | "rdepends": [ | ||
| 812 | "core", | ||
| 813 | "crypt", | ||
| 814 | "ctypes", | ||
| 815 | "io", | ||
| 816 | "math", | ||
| 817 | "mmap", | ||
| 818 | "netclient", | ||
| 819 | "pickle", | ||
| 820 | "threading" | ||
| 821 | ], | ||
| 822 | "files": [ | ||
| 823 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_multiprocessing.*.so", | ||
| 824 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_posixshmem.*.so", | ||
| 825 | "${libdir}/python${PYTHON_MAJMIN}/multiprocessing" | ||
| 826 | ], | ||
| 827 | "cached": [] | ||
| 828 | }, | ||
| 829 | "netclient": { | ||
| 830 | "summary": "Python Internet Protocol clients", | ||
| 831 | "rdepends": [ | ||
| 832 | "core", | ||
| 833 | "crypt", | ||
| 834 | "datetime", | ||
| 835 | "email", | ||
| 836 | "io", | ||
| 837 | "math", | ||
| 838 | "mime", | ||
| 839 | "stringold" | ||
| 840 | ], | ||
| 841 | "files": [ | ||
| 842 | "${libdir}/python${PYTHON_MAJMIN}/base64.py", | ||
| 843 | "${libdir}/python${PYTHON_MAJMIN}/ftplib.py", | ||
| 844 | "${libdir}/python${PYTHON_MAJMIN}/hmac.py", | ||
| 845 | "${libdir}/python${PYTHON_MAJMIN}/http", | ||
| 846 | "${libdir}/python${PYTHON_MAJMIN}/http/__pycache__", | ||
| 847 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_uuid.*.so", | ||
| 848 | "${libdir}/python${PYTHON_MAJMIN}/mimetypes.py", | ||
| 849 | "${libdir}/python${PYTHON_MAJMIN}/poplib.py", | ||
| 850 | "${libdir}/python${PYTHON_MAJMIN}/secrets.py", | ||
| 851 | "${libdir}/python${PYTHON_MAJMIN}/smtplib.py", | ||
| 852 | "${libdir}/python${PYTHON_MAJMIN}/urllib", | ||
| 853 | "${libdir}/python${PYTHON_MAJMIN}/uuid.py" | ||
| 854 | ], | ||
| 855 | "cached": [ | ||
| 856 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/base64.*.pyc", | ||
| 857 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/ftplib.*.pyc", | ||
| 858 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/hmac.*.pyc", | ||
| 859 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/mimetypes.*.pyc", | ||
| 860 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/poplib.*.pyc", | ||
| 861 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/secrets.*.pyc", | ||
| 862 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/smtplib.*.pyc", | ||
| 863 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/uuid.*.pyc" | ||
| 864 | ] | ||
| 865 | }, | ||
| 866 | "netserver": { | ||
| 867 | "summary": "Python Internet Protocol servers", | ||
| 868 | "rdepends": [ | ||
| 869 | "core", | ||
| 870 | "io" | ||
| 871 | ], | ||
| 872 | "files": [ | ||
| 873 | "${libdir}/python${PYTHON_MAJMIN}/socketserver.py" | ||
| 874 | ], | ||
| 875 | "cached": [ | ||
| 876 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/socketserver.*.pyc" | ||
| 877 | ] | ||
| 878 | }, | ||
| 879 | "numbers": { | ||
| 880 | "summary": "Python number APIs", | ||
| 881 | "rdepends": [ | ||
| 882 | "core" | ||
| 883 | ], | ||
| 884 | "files": [ | ||
| 885 | "${libdir}/python${PYTHON_MAJMIN}/_pydecimal.py", | ||
| 886 | "${libdir}/python${PYTHON_MAJMIN}/contextvars.py", | ||
| 887 | "${libdir}/python${PYTHON_MAJMIN}/decimal.py", | ||
| 888 | "${libdir}/python${PYTHON_MAJMIN}/fractions.py", | ||
| 889 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_contextvars.*.so", | ||
| 890 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_decimal.*.so", | ||
| 891 | "${libdir}/python${PYTHON_MAJMIN}/numbers.py" | ||
| 892 | ], | ||
| 893 | "cached": [ | ||
| 894 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_pydecimal.*.pyc", | ||
| 895 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/contextvars.*.pyc", | ||
| 896 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/decimal.*.pyc", | ||
| 897 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/fractions.*.pyc", | ||
| 898 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/numbers.*.pyc" | ||
| 899 | ] | ||
| 900 | }, | ||
| 901 | "pickle": { | ||
| 902 | "summary": "Python serialisation/persistence support", | ||
| 903 | "rdepends": [ | ||
| 904 | "core" | ||
| 905 | ], | ||
| 906 | "files": [ | ||
| 907 | "${libdir}/python${PYTHON_MAJMIN}/_compat_pickle.py", | ||
| 908 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_pickle.*.so", | ||
| 909 | "${libdir}/python${PYTHON_MAJMIN}/pickle.py", | ||
| 910 | "${libdir}/python${PYTHON_MAJMIN}/pickletools.py", | ||
| 911 | "${libdir}/python${PYTHON_MAJMIN}/shelve.py" | ||
| 912 | ], | ||
| 913 | "cached": [ | ||
| 914 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_compat_pickle.*.pyc", | ||
| 915 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pickle.*.pyc", | ||
| 916 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pickletools.*.pyc", | ||
| 917 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/shelve.*.pyc" | ||
| 918 | ] | ||
| 919 | }, | ||
| 920 | "pkgutil": { | ||
| 921 | "summary": "Python package extension utility support", | ||
| 922 | "rdepends": [ | ||
| 923 | "core" | ||
| 924 | ], | ||
| 925 | "files": [], | ||
| 926 | "cached": [] | ||
| 927 | }, | ||
| 928 | "plistlib": { | ||
| 929 | "summary": "Generate and parse Mac OS X .plist files", | ||
| 930 | "rdepends": [ | ||
| 931 | "core", | ||
| 932 | "datetime", | ||
| 933 | "xml" | ||
| 934 | ], | ||
| 935 | "files": [ | ||
| 936 | "${libdir}/python${PYTHON_MAJMIN}/plistlib.py" | ||
| 937 | ], | ||
| 938 | "cached": [ | ||
| 939 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/plistlib.*.pyc" | ||
| 940 | ] | ||
| 941 | }, | ||
| 942 | "pprint": { | ||
| 943 | "summary": "Python pretty-print support", | ||
| 944 | "rdepends": [ | ||
| 945 | "core" | ||
| 946 | ], | ||
| 947 | "files": [ | ||
| 948 | "${libdir}/python${PYTHON_MAJMIN}/pprint.py" | ||
| 949 | ], | ||
| 950 | "cached": [ | ||
| 951 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pprint.*.pyc" | ||
| 952 | ] | ||
| 953 | }, | ||
| 954 | "profile": { | ||
| 955 | "summary": "Python basic performance profiling support", | ||
| 956 | "rdepends": [ | ||
| 957 | "core" | ||
| 958 | ], | ||
| 959 | "files": [ | ||
| 960 | "${libdir}/python${PYTHON_MAJMIN}/cProfile.py", | ||
| 961 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_lsprof.*.so", | ||
| 962 | "${libdir}/python${PYTHON_MAJMIN}/profile.py", | ||
| 963 | "${libdir}/python${PYTHON_MAJMIN}/pstats.py" | ||
| 964 | ], | ||
| 965 | "cached": [ | ||
| 966 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/cProfile.*.pyc", | ||
| 967 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/profile.*.pyc", | ||
| 968 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pstats.*.pyc" | ||
| 969 | ] | ||
| 970 | }, | ||
| 971 | "pydoc": { | ||
| 972 | "summary": "Python interactive help support", | ||
| 973 | "rdepends": [ | ||
| 974 | "core" | ||
| 975 | ], | ||
| 976 | "files": [ | ||
| 977 | "${bindir}/pydoc*", | ||
| 978 | "${libdir}/python${PYTHON_MAJMIN}/pydoc.py", | ||
| 979 | "${libdir}/python${PYTHON_MAJMIN}/pydoc_data" | ||
| 980 | ], | ||
| 981 | "cached": [ | ||
| 982 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pydoc.*.pyc" | ||
| 983 | ] | ||
| 984 | }, | ||
| 985 | "resource": { | ||
| 986 | "summary": "Python resource control interface", | ||
| 987 | "rdepends": [ | ||
| 988 | "core" | ||
| 989 | ], | ||
| 990 | "files": [ | ||
| 991 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/resource.*.so" | ||
| 992 | ], | ||
| 993 | "cached": [] | ||
| 994 | }, | ||
| 995 | "shell": { | ||
| 996 | "summary": "Python shell-like functionality", | ||
| 997 | "rdepends": [ | ||
| 998 | "core", | ||
| 999 | "stringold" | ||
| 1000 | ], | ||
| 1001 | "files": [ | ||
| 1002 | "${libdir}/python${PYTHON_MAJMIN}/cmd.py", | ||
| 1003 | "${libdir}/python${PYTHON_MAJMIN}/shlex.py" | ||
| 1004 | ], | ||
| 1005 | "cached": [ | ||
| 1006 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/cmd.*.pyc", | ||
| 1007 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/shlex.*.pyc" | ||
| 1008 | ] | ||
| 1009 | }, | ||
| 1010 | "sqlite3": { | ||
| 1011 | "summary": "Python Sqlite3 database support", | ||
| 1012 | "rdepends": [ | ||
| 1013 | "core", | ||
| 1014 | "datetime" | ||
| 1015 | ], | ||
| 1016 | "files": [ | ||
| 1017 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_sqlite3.*.so", | ||
| 1018 | "${libdir}/python${PYTHON_MAJMIN}/sqlite3" | ||
| 1019 | ], | ||
| 1020 | "cached": [] | ||
| 1021 | }, | ||
| 1022 | "statistics": { | ||
| 1023 | "summary": "Basic statistics module", | ||
| 1024 | "rdepends": [ | ||
| 1025 | "core", | ||
| 1026 | "math", | ||
| 1027 | "numbers" | ||
| 1028 | ], | ||
| 1029 | "files": [ | ||
| 1030 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_statistics.*.so", | ||
| 1031 | "${libdir}/python${PYTHON_MAJMIN}/statistics.py" | ||
| 1032 | ], | ||
| 1033 | "cached": [ | ||
| 1034 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/statistics.*.pyc" | ||
| 1035 | ] | ||
| 1036 | }, | ||
| 1037 | "stringold": { | ||
| 1038 | "summary": "Common string operations", | ||
| 1039 | "rdepends": [ | ||
| 1040 | "core" | ||
| 1041 | ], | ||
| 1042 | "files": [ | ||
| 1043 | "${libdir}/python${PYTHON_MAJMIN}/string.py" | ||
| 1044 | ], | ||
| 1045 | "cached": [ | ||
| 1046 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/string.*.pyc" | ||
| 1047 | ] | ||
| 1048 | }, | ||
| 1049 | "syslog": { | ||
| 1050 | "summary": "Python syslog interface", | ||
| 1051 | "rdepends": [ | ||
| 1052 | "core" | ||
| 1053 | ], | ||
| 1054 | "files": [ | ||
| 1055 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/syslog.*.so" | ||
| 1056 | ], | ||
| 1057 | "cached": [] | ||
| 1058 | }, | ||
| 1059 | "terminal": { | ||
| 1060 | "summary": "Python terminal controlling support", | ||
| 1061 | "rdepends": [ | ||
| 1062 | "core", | ||
| 1063 | "io" | ||
| 1064 | ], | ||
| 1065 | "files": [ | ||
| 1066 | "${libdir}/python${PYTHON_MAJMIN}/pty.py", | ||
| 1067 | "${libdir}/python${PYTHON_MAJMIN}/tty.py" | ||
| 1068 | ], | ||
| 1069 | "cached": [ | ||
| 1070 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pty.*.pyc", | ||
| 1071 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/tty.*.pyc" | ||
| 1072 | ] | ||
| 1073 | }, | ||
| 1074 | "threading": { | ||
| 1075 | "summary": "Python threading & synchronization support", | ||
| 1076 | "rdepends": [ | ||
| 1077 | "core" | ||
| 1078 | ], | ||
| 1079 | "files": [ | ||
| 1080 | "${libdir}/python${PYTHON_MAJMIN}/_threading_local.py", | ||
| 1081 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_queue.*.so", | ||
| 1082 | "${libdir}/python${PYTHON_MAJMIN}/queue.py" | ||
| 1083 | ], | ||
| 1084 | "cached": [ | ||
| 1085 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_threading_local.*.pyc", | ||
| 1086 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/queue.*.pyc" | ||
| 1087 | ] | ||
| 1088 | }, | ||
| 1089 | "tkinter": { | ||
| 1090 | "summary": "Python Tcl/Tk bindings", | ||
| 1091 | "rdepends": [ | ||
| 1092 | "core" | ||
| 1093 | ], | ||
| 1094 | "files": [ | ||
| 1095 | "${libdir}/python${PYTHON_MAJMIN}/tkinter" | ||
| 1096 | ], | ||
| 1097 | "cached": [] | ||
| 1098 | }, | ||
| 1099 | "tomllib": { | ||
| 1100 | "summary": "Provides an interface for parsing TOML", | ||
| 1101 | "rdepends": [ | ||
| 1102 | "core" | ||
| 1103 | ], | ||
| 1104 | "files": [ | ||
| 1105 | "${libdir}/python${PYTHON_MAJMIN}/tomllib/" | ||
| 1106 | ], | ||
| 1107 | "cached": [] | ||
| 1108 | }, | ||
| 1109 | "unittest": { | ||
| 1110 | "summary": "Python unit testing framework", | ||
| 1111 | "rdepends": [ | ||
| 1112 | "asyncio", | ||
| 1113 | "core", | ||
| 1114 | "difflib", | ||
| 1115 | "io", | ||
| 1116 | "logging", | ||
| 1117 | "netclient", | ||
| 1118 | "numbers", | ||
| 1119 | "pprint", | ||
| 1120 | "stringold" | ||
| 1121 | ], | ||
| 1122 | "files": [ | ||
| 1123 | "${libdir}/python${PYTHON_MAJMIN}/unittest", | ||
| 1124 | "${libdir}/python${PYTHON_MAJMIN}/unittest/", | ||
| 1125 | "${libdir}/python${PYTHON_MAJMIN}/unittest/__pycache__" | ||
| 1126 | ], | ||
| 1127 | "cached": [] | ||
| 1128 | }, | ||
| 1129 | "unixadmin": { | ||
| 1130 | "summary": "Python Unix administration support", | ||
| 1131 | "rdepends": [ | ||
| 1132 | "core", | ||
| 1133 | "io" | ||
| 1134 | ], | ||
| 1135 | "files": [ | ||
| 1136 | "${libdir}/python${PYTHON_MAJMIN}/getpass.py" | ||
| 1137 | ], | ||
| 1138 | "cached": [ | ||
| 1139 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/getpass.*.pyc" | ||
| 1140 | ] | ||
| 1141 | }, | ||
| 1142 | "venv": { | ||
| 1143 | "summary": "Provides support for creating lightweight virtual environments with their own site directories, optionally isolated from system site directories.", | ||
| 1144 | "rdepends": [ | ||
| 1145 | "core", | ||
| 1146 | "logging", | ||
| 1147 | "stringold" | ||
| 1148 | ], | ||
| 1149 | "files": [ | ||
| 1150 | "${bindir}/pyvenv*", | ||
| 1151 | "${libdir}/python${PYTHON_MAJMIN}/venv" | ||
| 1152 | ], | ||
| 1153 | "cached": [] | ||
| 1154 | }, | ||
| 1155 | "xml": { | ||
| 1156 | "summary": "Python basic XML support", | ||
| 1157 | "rdepends": [ | ||
| 1158 | "core" | ||
| 1159 | ], | ||
| 1160 | "files": [ | ||
| 1161 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_elementtree.*.so", | ||
| 1162 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/pyexpat.*.so", | ||
| 1163 | "${libdir}/python${PYTHON_MAJMIN}/xml" | ||
| 1164 | ], | ||
| 1165 | "cached": [] | ||
| 1166 | }, | ||
| 1167 | "xmlrpc": { | ||
| 1168 | "summary": "Python XML-RPC support", | ||
| 1169 | "rdepends": [ | ||
| 1170 | "compression", | ||
| 1171 | "core", | ||
| 1172 | "datetime", | ||
| 1173 | "email", | ||
| 1174 | "html", | ||
| 1175 | "io", | ||
| 1176 | "mime", | ||
| 1177 | "netclient", | ||
| 1178 | "netserver", | ||
| 1179 | "numbers", | ||
| 1180 | "pydoc", | ||
| 1181 | "stringold", | ||
| 1182 | "xml" | ||
| 1183 | ], | ||
| 1184 | "files": [ | ||
| 1185 | "${libdir}/python${PYTHON_MAJMIN}/xmlrpc", | ||
| 1186 | "${libdir}/python${PYTHON_MAJMIN}/xmlrpc/__pycache__" | ||
| 1187 | ], | ||
| 1188 | "cached": [] | ||
| 1189 | }, | ||
| 1190 | "zipapp": { | ||
| 1191 | "summary": "Tools to manage the creation of zip files containing Python code", | ||
| 1192 | "rdepends": [ | ||
| 1193 | "compression", | ||
| 1194 | "core" | ||
| 1195 | ], | ||
| 1196 | "files": [ | ||
| 1197 | "${libdir}/python${PYTHON_MAJMIN}/zipapp.py" | ||
| 1198 | ], | ||
| 1199 | "cached": [ | ||
| 1200 | "${libdir}/python${PYTHON_MAJMIN}/__pycache__/zipapp.*.pyc" | ||
| 1201 | ] | ||
| 1202 | }, | ||
| 1203 | "zoneinfo": { | ||
| 1204 | "summary": "IANA time zone support", | ||
| 1205 | "rdepends": [ | ||
| 1206 | "core", | ||
| 1207 | "datetime" | ||
| 1208 | ], | ||
| 1209 | "files": [ | ||
| 1210 | "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_zoneinfo.*.so", | ||
| 1211 | "${libdir}/python${PYTHON_MAJMIN}/zoneinfo" | ||
| 1212 | ], | ||
| 1213 | "cached": [] | ||
| 1214 | } | ||
| 1215 | } | ||
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 @@ | |||
| 1 | #! /usr/bin/env python3 | ||
| 2 | # | ||
| 3 | # SPDX-License-Identifier: MIT | ||
| 4 | # | ||
| 5 | # Copyright 2019 by Garmin Ltd. or its subsidiaries | ||
| 6 | # | ||
| 7 | # A script to reformat python sysconfig | ||
| 8 | |||
| 9 | import sys | ||
| 10 | import pprint | ||
| 11 | l = {} | ||
| 12 | g = {} | ||
| 13 | with open(sys.argv[1], 'r') as f: | ||
| 14 | exec(f.read(), g, l) | ||
| 15 | |||
| 16 | with open(sys.argv[1], 'w') as f: | ||
| 17 | for k in sorted(l.keys()): | ||
| 18 | f.write('%s = ' % k) | ||
| 19 | pprint.pprint(l[k], stream=f, width=1) | ||
| 20 | f.write('\n') | ||
| 21 | |||
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 @@ | |||
| 1 | #!/bin/sh | ||
| 2 | SKIPPED_TESTS= | ||
| 3 | { 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 @@ | |||
| 1 | From a65c29adc027b3615154cab73aaedd58a6aa23da Mon Sep 17 00:00:00 2001 | ||
| 2 | From: "Jason R. Coombs" <jaraco@jaraco.com> | ||
| 3 | Date: Tue, 23 Jul 2024 08:36:16 -0400 | ||
| 4 | Subject: [PATCH] Prioritize valid dists to invalid dists when retrieving by | ||
| 5 | name. | ||
| 6 | |||
| 7 | Closes python/importlib_metadata#489 | ||
| 8 | |||
| 9 | Upstream-Status: Backport [https://github.com/python/importlib_metadata/commit/a65c29adc027b3615154cab73aaedd58a6aa23da] | ||
| 10 | Signed-off-by: Ross Burton <ross.burton@arm.com> | ||
| 11 | --- | ||
| 12 | Lib/importlib/metadata/__init__.py | 14 +++- | ||
| 13 | Lib/importlib/metadata/_itertools.py | 98 ++++++++++++++++++++++++++++ | ||
| 14 | 2 files changed, 110 insertions(+), 2 deletions(-) | ||
| 15 | |||
| 16 | diff --git a/Lib/importlib/metadata/__init__.py b/Lib/importlib/metadata/__init__.py | ||
| 17 | index 8ce62dd..085378c 100644 | ||
| 18 | --- a/Lib/importlib/metadata/__init__.py | ||
| 19 | +++ b/Lib/importlib/metadata/__init__.py | ||
| 20 | @@ -21,7 +21,7 @@ import collections | ||
| 21 | from . import _meta | ||
| 22 | from ._collections import FreezableDefaultDict, Pair | ||
| 23 | from ._functools import method_cache, pass_none | ||
| 24 | -from ._itertools import always_iterable, unique_everseen | ||
| 25 | +from ._itertools import always_iterable, bucket, unique_everseen | ||
| 26 | from ._meta import PackageMetadata, SimplePath | ||
| 27 | |||
| 28 | from contextlib import suppress | ||
| 29 | @@ -404,7 +404,7 @@ class Distribution(DeprecatedNonAbstract): | ||
| 30 | if not name: | ||
| 31 | raise ValueError("A distribution name is required.") | ||
| 32 | try: | ||
| 33 | - return next(iter(cls.discover(name=name))) | ||
| 34 | + return next(iter(cls._prefer_valid(cls.discover(name=name)))) | ||
| 35 | except StopIteration: | ||
| 36 | raise PackageNotFoundError(name) | ||
| 37 | |||
| 38 | @@ -428,6 +428,16 @@ class Distribution(DeprecatedNonAbstract): | ||
| 39 | resolver(context) for resolver in cls._discover_resolvers() | ||
| 40 | ) | ||
| 41 | |||
| 42 | + @staticmethod | ||
| 43 | + def _prefer_valid(dists: Iterable[Distribution]) -> Iterable[Distribution]: | ||
| 44 | + """ | ||
| 45 | + Prefer (move to the front) distributions that have metadata. | ||
| 46 | + | ||
| 47 | + Ref python/importlib_resources#489. | ||
| 48 | + """ | ||
| 49 | + buckets = bucket(dists, lambda dist: bool(dist.metadata)) | ||
| 50 | + return itertools.chain(buckets[True], buckets[False]) | ||
| 51 | + | ||
| 52 | @staticmethod | ||
| 53 | def at(path: str | os.PathLike[str]) -> Distribution: | ||
| 54 | """Return a Distribution for the indicated metadata path. | ||
| 55 | diff --git a/Lib/importlib/metadata/_itertools.py b/Lib/importlib/metadata/_itertools.py | ||
| 56 | index d4ca9b9..79d3719 100644 | ||
| 57 | --- a/Lib/importlib/metadata/_itertools.py | ||
| 58 | +++ b/Lib/importlib/metadata/_itertools.py | ||
| 59 | @@ -1,3 +1,4 @@ | ||
| 60 | +from collections import defaultdict, deque | ||
| 61 | from itertools import filterfalse | ||
| 62 | |||
| 63 | |||
| 64 | @@ -71,3 +72,100 @@ def always_iterable(obj, base_type=(str, bytes)): | ||
| 65 | return iter(obj) | ||
| 66 | except TypeError: | ||
| 67 | return iter((obj,)) | ||
| 68 | + | ||
| 69 | + | ||
| 70 | +# Copied from more_itertools 10.3 | ||
| 71 | +class bucket: | ||
| 72 | + """Wrap *iterable* and return an object that buckets the iterable into | ||
| 73 | + child iterables based on a *key* function. | ||
| 74 | + | ||
| 75 | + >>> iterable = ['a1', 'b1', 'c1', 'a2', 'b2', 'c2', 'b3'] | ||
| 76 | + >>> s = bucket(iterable, key=lambda x: x[0]) # Bucket by 1st character | ||
| 77 | + >>> sorted(list(s)) # Get the keys | ||
| 78 | + ['a', 'b', 'c'] | ||
| 79 | + >>> a_iterable = s['a'] | ||
| 80 | + >>> next(a_iterable) | ||
| 81 | + 'a1' | ||
| 82 | + >>> next(a_iterable) | ||
| 83 | + 'a2' | ||
| 84 | + >>> list(s['b']) | ||
| 85 | + ['b1', 'b2', 'b3'] | ||
| 86 | + | ||
| 87 | + The original iterable will be advanced and its items will be cached until | ||
| 88 | + they are used by the child iterables. This may require significant storage. | ||
| 89 | + | ||
| 90 | + By default, attempting to select a bucket to which no items belong will | ||
| 91 | + exhaust the iterable and cache all values. | ||
| 92 | + If you specify a *validator* function, selected buckets will instead be | ||
| 93 | + checked against it. | ||
| 94 | + | ||
| 95 | + >>> from itertools import count | ||
| 96 | + >>> it = count(1, 2) # Infinite sequence of odd numbers | ||
| 97 | + >>> key = lambda x: x % 10 # Bucket by last digit | ||
| 98 | + >>> validator = lambda x: x in {1, 3, 5, 7, 9} # Odd digits only | ||
| 99 | + >>> s = bucket(it, key=key, validator=validator) | ||
| 100 | + >>> 2 in s | ||
| 101 | + False | ||
| 102 | + >>> list(s[2]) | ||
| 103 | + [] | ||
| 104 | + | ||
| 105 | + """ | ||
| 106 | + | ||
| 107 | + def __init__(self, iterable, key, validator=None): | ||
| 108 | + self._it = iter(iterable) | ||
| 109 | + self._key = key | ||
| 110 | + self._cache = defaultdict(deque) | ||
| 111 | + self._validator = validator or (lambda x: True) | ||
| 112 | + | ||
| 113 | + def __contains__(self, value): | ||
| 114 | + if not self._validator(value): | ||
| 115 | + return False | ||
| 116 | + | ||
| 117 | + try: | ||
| 118 | + item = next(self[value]) | ||
| 119 | + except StopIteration: | ||
| 120 | + return False | ||
| 121 | + else: | ||
| 122 | + self._cache[value].appendleft(item) | ||
| 123 | + | ||
| 124 | + return True | ||
| 125 | + | ||
| 126 | + def _get_values(self, value): | ||
| 127 | + """ | ||
| 128 | + Helper to yield items from the parent iterator that match *value*. | ||
| 129 | + Items that don't match are stored in the local cache as they | ||
| 130 | + are encountered. | ||
| 131 | + """ | ||
| 132 | + while True: | ||
| 133 | + # If we've cached some items that match the target value, emit | ||
| 134 | + # the first one and evict it from the cache. | ||
| 135 | + if self._cache[value]: | ||
| 136 | + yield self._cache[value].popleft() | ||
| 137 | + # Otherwise we need to advance the parent iterator to search for | ||
| 138 | + # a matching item, caching the rest. | ||
| 139 | + else: | ||
| 140 | + while True: | ||
| 141 | + try: | ||
| 142 | + item = next(self._it) | ||
| 143 | + except StopIteration: | ||
| 144 | + return | ||
| 145 | + item_value = self._key(item) | ||
| 146 | + if item_value == value: | ||
| 147 | + yield item | ||
| 148 | + break | ||
| 149 | + elif self._validator(item_value): | ||
| 150 | + self._cache[item_value].append(item) | ||
| 151 | + | ||
| 152 | + def __iter__(self): | ||
| 153 | + for item in self._it: | ||
| 154 | + item_value = self._key(item) | ||
| 155 | + if self._validator(item_value): | ||
| 156 | + self._cache[item_value].append(item) | ||
| 157 | + | ||
| 158 | + yield from self._cache.keys() | ||
| 159 | + | ||
| 160 | + def __getitem__(self, value): | ||
| 161 | + if not self._validator(value): | ||
| 162 | + return iter(()) | ||
| 163 | + | ||
| 164 | + return self._get_values(value) | ||
