From patchwork Thu Nov 5 12:24:40 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jaipaul Cheernam X-Patchwork-Id: 103138 Received: from GVXPR05CU001.outbound.protection.outlook.com (GVXPR05CU001.outbound.protection.outlook.com [52.101.83.25]) by mx.groups.io with SMTP id smtpd.msgproc02-g2.33253.1793881491094167127 for ; Thu, 05 Nov 2026 04:24:52 -0800 Authentication-Results: mx.groups.io; dkim=fail reason="dkim: body hash did not verify" header.i=@est.tech header.s=selector1 header.b=KbaeHwsr; spf=pass (domain: est.tech, ip: 52.101.83.25, mailfrom: jaipaul.cheernam@est.tech) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=RJnFjRZ7AnWPDICIiGRALgBBkZXn3R08Lj027VoPzgGX8mBgeQ78fhs/m7dJVquFZGVxzdQ7cOHnSoJ0rQVZtDQP/9VvIlcttLCufAyZIo2dNoClqVfo6W8olKgk0J69dDSsb5DwpMmewCEy7aorU8VOAdbaJS10TEKIzItCtdT9hquC2plMXmCi+9AXhqsl44TwNyNwN1QqrhEqX/Zn1Vh5qUH5eIe+FZ5llROIVXM31Q6ybQ5i0cm6tJis9NUZxkvTf9qrrqtXR4WP+g99mbPp42LCVxy2WdxK8p5Wpx+vbIaUNT8pINAsFrp7tUhTP0YytAPIVvQ4+Hpp/zK5ug== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ZhgIZ47mbZ9PO9YlmmqcVISSYk401bhypZavz0jYy0g=; b=L0Pckuln9DUo2xSM0GhtiY5Q3cSAqqGcZR27kxzx7Kbh4nBYS75gP+Olyva0t9cmhCvQB/8Xhr/yJbJtSWnEbHn+LbMzLoJk4YDFBnBAFaCSRzdZIy7EtS+VwwlXjXgnZkCV2g0YWvABzBD6MELOxKUvthPLb84dFVoGcQgyDFPazCQVNYE4oioWtQJ0xMNwrqMOPszoNxyNGPr9uINcceXC3tdjWtgH9q6D0SE52rKTQFkSyYyoleNsGZ/ckVZa1XFcz7+A3yxFUoYSPIYa278xAcGrq/V003rbj2giYm9Jq0qi/6A2/uXj/V8iRVDSnwm2olNcSTHL8m2r7aS/tQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=est.tech; dmarc=pass action=none header.from=est.tech; dkim=pass header.d=est.tech; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=est.tech; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ZhgIZ47mbZ9PO9YlmmqcVISSYk401bhypZavz0jYy0g=; b=KbaeHwsrXmu/c5RunT9VMwXFxazhE//TfjzSv96xwHW7tdQHOi3hrWBNYp/rzYhu8QYpSt9bkMwKDiJ0u3EV4uKS/HH3WatWVUVnAzLeQl7m62WbdK5fxWG0ozwe6BxLUhvjFJOQ1PGBoIWHYcHvZML1q/0FZ18mxfgtQ589Bq73M4Ib/RBCadopErtnz0ljDlPkPyh4l23aZFVNSEtYW1JnYBMwuhi1zub72QaCVliHG35SfHlFNeXJ4WCY0Gk3mvIYikPKT9SeUngswEZKr/+PjJF1bE487wA79PutspU0KrFMltBQi7MX+eUsO39Qc0r9XqAwKfZMBtFM4Fh9AQ== Authentication-Results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=est.tech; Received: from AM6P189MB3107.EURP189.PROD.OUTLOOK.COM (2603:10a6:20b:6c0::19) by PA1P189MB2662.EURP189.PROD.OUTLOOK.COM (2603:10a6:102:461::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.592.10; Thu, 5 Nov 2026 12:24:46 +0000 Received: from AM6P189MB3107.EURP189.PROD.OUTLOOK.COM ([fe80::bc97:3847:8f02:acb]) by AM6P189MB3107.EURP189.PROD.OUTLOOK.COM ([fe80::bc97:3847:8f02:acb%6]) with mapi id 15.21.0592.009; Thu, 5 Nov 2026 12:24:46 +0000 From: Jaipaul Cheernam To: openembedded-core@lists.openembedded.org Subject: [PATCH v7 1/4] systemtap: mark python3.stpm libpython patch as backport Date: Thu, 5 Nov 2026 13:24:40 +0100 Message-ID: <20261105122443.53245-2-jaipaul.cheernam@est.tech> X-Mailer: git-send-email 2.39.5 (Apple Git-154) In-Reply-To: <20261105122443.53245-1-jaipaul.cheernam@est.tech> References: <20261012090030.95901-2-jaipaul.cheernam@est.tech> <20261105122443.53245-1-jaipaul.cheernam@est.tech> X-ClientProxiedBy: DU7P191CA0029.EURP191.PROD.OUTLOOK.COM (2603:10a6:10:54e::24) To AM6P189MB3107.EURP189.PROD.OUTLOOK.COM (2603:10a6:20b:6c0::19) Return-Path: jaipaul.cheernam@est.tech MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM6P189MB3107:EE_|PA1P189MB2662:EE_ X-MS-Office365-Filtering-Correlation-Id: 7cf54519-c7a2-4d02-bada-08df3b37c796 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|23010399003|366016|1800799024|261026140227099003|260925021911599003|260925022911599003|260925021311599003|11063799006|4143699003|56012099006|261009223027099003|261022105027099003|261021123027099003|261022075727099003|261021121427099003|261102123227099003|261028144727099003|18002099003|22082099003|10067099003; X-Microsoft-Antispam-Message-Info: Pux7N1QHkAXKsdP59XNeFw6RmXGAqtvXsVtowhfB10S1w3gg8j641uFYXh+ke5U6ESnlsxi1MbTNwpMj8/GLTYCK+dFa0TiuMNMk6WtbkT33QnL7yaHuwHPUGUdoQaafZlCIsb5Apiwr2d+KxwteYAlS8EDfzMb7evomP8VN19Z6Gyd+0XLIDds56AIB9MGBu1Z+j2VSVEJg6bNrOJj4L+/j97jJ6Ws7DRkPg68HQ/cII1vyFb2gH8rud1BS3+/bczBiAO6A7Fuc/4a7kscFUakWikcc7mfNt0iteIl9TidjPlYFPt5VfSXuYYBjSeaasVtjpiZRpvfrgU90aS1/XEgxy5GTnJb7eBhnyz4N2yibErfaej/+edJeSIbByRK04PyDYdA/nKwgUjKfENv2zx6d2WPE/7bwzdqmMIhmHOFj7U9i5Bxtqbw6skGnfnmBPwoX+AnMOPM7M64+jZeijnImKMf5rbqYuHtY7U7kNecm7bTD/al9BBbctV4+Ofh9LLMUgsnoG8RXNhjCWh04QBoc9kgVgfA9KCX7m+w15PNf9PZcwhVgvESPgs6D22yZuBaE14ppN7Qh6l8Cjpxj5rLaiYtxklNcL3GC4CMlgLrwA3gplDYaaCuKqoCSvWWg X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM6P189MB3107.EURP189.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(376014)(23010399003)(366016)(1800799024)(261026140227099003)(260925021911599003)(260925022911599003)(260925021311599003)(11063799006)(4143699003)(56012099006)(261009223027099003)(261022105027099003)(261021123027099003)(261022075727099003)(261021121427099003)(261102123227099003)(261028144727099003)(18002099003)(22082099003)(10067099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: v90bFnm+FyLQgIiwzJ69gvhLzpHag5N5XSLlZ//FBgpY8n+2frurvlCnNB4fvH56qdWkIV5RnfbSCAPxUpKffISqi445zG9IAfcAF2BpluwaMu14C8CuwkZI44yJOX/E8+dD/EGg8rmfGUd8z3eyK58rtF1mJLMpAIH042r+lft8mtvfJT26hdmK2D/2QTBIupN3IVtQftx6pRb1zfq1NR6liGijiPPJ0c7VC3hB2XtTYUTGGZzEN6DQX2wsI4D3dqW0AkdJZviLFecsBtjBUXNRQ0OFU2ZlF/aBg2NdTengImRAdJZJNKx5mk9VxYtSMe4l5lXHGndf+OpSHrR2Z/BpMCzjFfNjeYMkhxTGYyFH/tf3VwqU3V7dn/6Muux1XVOYHu6yDbBX1SKR+8WsveXkkzEBL98FQWoaG29es/i7bHgcWFFY9JgyJ9asEA9o6wQqw3MZdn8xZ8mloN9GLIFmRF10Y+R/1QttYLLCQF8HfhdIRcaNgxTjfK/xaIKv4s1j6T1l5ou4cNt8bKOxtdbH2E/XCbSnTdYw1QaZPrBvf+Ax3SqNHtHsPa4T+FH+CDTTkDEDdI0//iMTtrrjK3fvRP0G6hf9bWBeAxybtYGsVaq3cMPY7vChqwU2gwkx5b4MFbfrzRrLPWRYrazNRLUbfZXmdv4EM3zwgLr3ZnWBf/31pqUjA0ygPpaBNn0ico7beli85Q9IM0kToTRc19f9+l3GG3UQaTGcmKa3Dina69KgFJpDzcBMdEgeL24O2+qrPs4SovIuzhvf4Q6aLwxHg/HsFUOngd1gckI6GQLjB2y4/wdCoiD2OR5myHh5xK/9wc9TutTQkzDDTHhk1W319sKPKXx3+O78FwDLmLvNHl9IwjxrKvfRNJw10TGZf8eflkDEPKNsXrDy6NnpmbtgXcQNg1ofEw4f+Cc8eBInDk4KVq9H5Xv81SmzlmQT+EQCLQ/MnveL8+ldIr/W1RWQzJqL28RnIC+dGM6qzcza6aS3+/VUg+h+t5I/W/LiO2v5R/0Qn/4KgSq9hwpK9vXb/H0PsoD2UjzVAWQuBYoUv1Sju+xzYbwY31XroDYHwbGwoBFHvDl4/DBBZrLdtP/yXByaKhf8czcDVycrGQWSFsp+MBq3028YXdsCwZn/VGkx5LRMrIMjRf8KGBKLWTIor7Y3LnHSThczDNG3I8OqMXzWAiOXVK6XhQQPkupnTsJnuemULCIiJuzm5gXowT6ylYl+S2u/s8earmKNp6CsFBGP7Gp8nrHD/qJUGlwf2H58uUsOBm/40saZ1+WN2Gb7C9kSfi7cDf/YS3AVrX6/woZxdd0T8JE/TKNXDre89B0Wrue4kkouB9fp9JJT0LLN5FYZcdGwIR5EZ9umj0rptMWZuNNd+SgE/7pi3gKGfBRuiVPvK9uGWUW6oXL3I77QhevKQLvmkw6UwKsFG9wXuwqUWCagygyWc0gI2T8yNGBe6fchhpJalXIQyG+vH1owZDWoeSH9g6NAuovtJVlEK9Q+XSQNXeSGNEDJyoHjzdp6cyvLazWv8SXje5nlIO/wKGqoaCnepmE1Md5Y7eoMtfKCFKCte/micu9XeWgE7Lc//kzyVNsPsE/hwB11SbYOku2Z9spq/9n/gC8ZwCoW4sQjFOu/PwMQdrV41VGBt0J3baNmnftjoag07QIZvbbV63OWcQ1x3UYZ4JqgBgPDoQXX3OYlmi4GkUW+BGyn5k06YFBBdGaNfPDGjHFZxQ== X-OriginatorOrg: est.tech X-MS-Exchange-CrossTenant-Network-Message-Id: 7cf54519-c7a2-4d02-bada-08df3b37c796 X-MS-Exchange-CrossTenant-AuthSource: AM6P189MB3107.EURP189.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Nov 2026 12:24:46.8783 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: d2585e63-66b9-44b6-a76e-4f4b217d97fd X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: m1Fw/LDb+CHY364+sjopkeQE2RQBlbiiHCR3mMHLZVGF4OLpVMx1lmxnWxYxVxcJY0ptFDYAESvhsR8c8JCSBqFSY7XqmiBdFR9TYPHfiVo= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA1P189MB2662 List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by lin-tor-korg-lkml-alma10-1 with HTTPS for ; Thu, 05 Nov 2026 12:24:56 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/249545 The python3.stpm libpython-path patch was merged upstream after the 5.6 release (commit b9bd609254f5), so it is a backport now Signed-off-by: Jaipaul Cheernam --- ...-record-the-installed-libpython-path.patch | 41 ++++++++----------- 1 file changed, 17 insertions(+), 24 deletions(-) diff --git a/meta/recipes-kernel/systemtap/systemtap/0001-python3.stpm-record-the-installed-libpython-path.patch b/meta/recipes-kernel/systemtap/systemtap/0001-python3.stpm-record-the-installed-libpython-path.patch index 93efec941b..9759434521 100644 --- a/meta/recipes-kernel/systemtap/systemtap/0001-python3.stpm-record-the-installed-libpython-path.patch +++ b/meta/recipes-kernel/systemtap/systemtap/0001-python3.stpm-record-the-installed-libpython-path.patch @@ -1,33 +1,26 @@ -From 0387b9416ad7c25d71685441e1046f1c72cb1d42 Mon Sep 17 00:00:00 2001 +From b9bd609254f54fedba0b7155c63a3b3f6d84993c Mon Sep 17 00:00:00 2001 From: Jaipaul Cheernam -Date: Sat, 19 Sep 2026 13:12:44 +0000 -Subject: [PATCH 1/2] python3.stpm: record the installed libpython path +Date: Wed, 23 Sep 2026 18:52:56 -0400 +Subject: [PATCH] PR34652: python3.stpm: record the installed libpython path tapset/python3.stpm is generated at build time and installed, and its -stap_python3_libpython macro is the module argument of the @cast()s in -tapset/python3.stp: +stap_python3_libpython macro is the module argument of the @cast()s +in tapset/python3.stp. @cast module names are taken literally, so +the macro has to name libpython as it exists on the machine stap is +tracing. - @cast(@object, "PyFrameObject", @stap_python3_libpython) +configure instead derives it from sysconfig's LIBDIR for the +interpreter that built HelperSDT. When cross compiling that is a +directory in the build host's staging area, which exists on no +machine but the builder, so every python3 probe on the installed +system fails to resolve PyFrameObject. -@cast module names are taken literally -- dwarf_cast_expanding_visitor -resolves them with find_executable(module, "", sess.sysenv), i.e. with no -sysroot translation -- so the macro has to name libpython as it exists on -the machine stap is tracing. +Keep only the library soname from sysconfig and anchor it at the +$(libdir) being installed into, so the macro names the installed +library. For a native build where the interpreter's LIBDIR is +$(libdir) the generated value is unchanged. -configure instead derives it from sysconfig's LIBDIR for the interpreter -that built HelperSDT. When cross compiling that is a directory in the -build host's staging area, which exists on no machine but the builder, so -every python3 probe on the installed system fails to resolve -PyFrameObject. The installed file also ends up carrying a build -directory, which distro QA checks reject (OpenEmbedded's buildpaths test -flags it as a packaging error). - -Keep only the library soname from sysconfig and anchor it at the $(libdir) -being installed into, so the macro names the installed library. For a -native build where the interpreter's LIBDIR is $(libdir) -- the usual case --- the generated value is unchanged. - -Upstream-Status: Submitted [https://inbox.sourceware.org/systemtap/20260919135744.78642-2-jaipaul.cheernam@est.tech/] +Upstream-Status: Backport [https://sourceware.org/git/?p=systemtap.git;a=commit;h=b9bd609254f54fedba0b7155c63a3b3f6d84993c] Signed-off-by: Jaipaul Cheernam --- Makefile.am | 10 +++++++++- From patchwork Thu Nov 5 12:24:41 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jaipaul Cheernam X-Patchwork-Id: 103139 Received: from GVXPR05CU001.outbound.protection.outlook.com (GVXPR05CU001.outbound.protection.outlook.com [52.101.83.25]) by mx.groups.io with SMTP id smtpd.msgproc02-g2.33253.1793881491094167127 for ; Thu, 05 Nov 2026 04:24:53 -0800 Authentication-Results: mx.groups.io; dkim=fail reason="dkim: body hash did not verify" header.i=@est.tech header.s=selector1 header.b=0ikBUjz8; spf=pass (domain: est.tech, ip: 52.101.83.25, mailfrom: jaipaul.cheernam@est.tech) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=qr1ro2b+iUdwzSXK9XV88LKXT3HWAwe8U8hEgoPA5g1JwcP3U6pHzc4RnvizQaVFo7TS6ORvUuMqVEuS//S/lQFR4ZYoH/Y+lH5zznwdB6QqdsHmvAFAVkjfaOIlnvoBkaLGEOl6jI7sONY/wa1MRIIhfHjP1m/fqDBJv6iHEhRLrldnUAPbUayoCCjIixoUPSeZjOpH17LwA+6A9hq7egwMLXTvSh1GCOB0/SDgVh4vylKNgjZIUq4wVS9FglrQdOOl6645sU0+jRpFWuqu2p0JFBFiBgsxnj7K2v89wBMS8QgQCYoOKc8/p6/OV/sOkSkwWYrdReJjXrIsXd7oJw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Ed3pIuebcgBgOztJbjCe86axs2Usg3HHVGUP41CxMis=; b=ogzyb6NHcklcF1H8YmrJL9LnwOZufWllmLptC8zuF0JmVNzi60n9+enk9KiczrODR2qDeFULY5tufwBO1IFIbWCe4lQa6UTKx367YpsWY8ggIN2az+f4WU602DFRPi5UqCgSQauFahak3QNSSwaC+WwUxJLCBUBRCYBDFw4oWuApz4YD1Fwo2Tbc7Fc39AlDutzjPbxJB/Nil4YNkRHFfTam2lj/jeDNJRUNgW6M0NtsyYoFNKMDl/qimVeq1A0T+3q7xePNX/vJmhiX+z+4ng01RDzNzpE3ymehz1qTSW7X6Ov9zM758mP7mf2fHZVN8tJlVLtG/XhMX5Al9wIGsg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=est.tech; dmarc=pass action=none header.from=est.tech; dkim=pass header.d=est.tech; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=est.tech; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Ed3pIuebcgBgOztJbjCe86axs2Usg3HHVGUP41CxMis=; b=0ikBUjz8iPAPpgYPFhqsyOWMznUisUC3kADrrMCrGTt/1k5DRMkXh2rfv/qkWWfS597TfWAOaCF11OaKl1EfeEcg+4Vjg0DDQpZ+V0XCpGkTHJ9h5qlL4UXOd4h+Jf5V1xgYAgjeWzubd1aqpPa7RdPKb55HOVa/p6h5NiTJRVzwVYpvgE1/ICYb5TGxNaAOWV+5yG3bEWLgzdHWmqjixA10p3WvOkCEod2H6JTa4SCjkib/UehPCGh3WKpVeX1I1NQgnNxniLWmq9e/HMIg7qUHsIxLhHcjFb2/It2JM7aw2Xv0PTt8gnafQ6QdaXOXi4smto29ZmxcDtWn0bTaUA== Authentication-Results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=est.tech; Received: from AM6P189MB3107.EURP189.PROD.OUTLOOK.COM (2603:10a6:20b:6c0::19) by PA1P189MB2662.EURP189.PROD.OUTLOOK.COM (2603:10a6:102:461::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.592.10; Thu, 5 Nov 2026 12:24:48 +0000 Received: from AM6P189MB3107.EURP189.PROD.OUTLOOK.COM ([fe80::bc97:3847:8f02:acb]) by AM6P189MB3107.EURP189.PROD.OUTLOOK.COM ([fe80::bc97:3847:8f02:acb%6]) with mapi id 15.21.0592.009; Thu, 5 Nov 2026 12:24:48 +0000 From: Jaipaul Cheernam To: openembedded-core@lists.openembedded.org Subject: [PATCH v7 2/4] systemtap: use installer instead of pip for HelperSDT wheel Date: Thu, 5 Nov 2026 13:24:41 +0100 Message-ID: <20261105122443.53245-3-jaipaul.cheernam@est.tech> X-Mailer: git-send-email 2.39.5 (Apple Git-154) In-Reply-To: <20261105122443.53245-1-jaipaul.cheernam@est.tech> References: <20261012090030.95901-2-jaipaul.cheernam@est.tech> <20261105122443.53245-1-jaipaul.cheernam@est.tech> X-ClientProxiedBy: DU2PR04CA0280.eurprd04.prod.outlook.com (2603:10a6:10:28c::15) To AM6P189MB3107.EURP189.PROD.OUTLOOK.COM (2603:10a6:20b:6c0::19) Return-Path: jaipaul.cheernam@est.tech MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM6P189MB3107:EE_|PA1P189MB2662:EE_ X-MS-Office365-Filtering-Correlation-Id: 2e5dd7ee-0b6a-4594-b53c-08df3b37c8bb X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|23010399003|366016|1800799024|261026140227099003|260925021911599003|260925022911599003|260925021311599003|11063799006|4143699003|261026130827099003|56012099006|261021133027099003|261022115727099003|261009223027099003|261022105027099003|261021123027099003|261022075727099003|261021121427099003|261022113327099003|261102123227099003|261021135927099003|261026135527099003|261026121527099003|261021130227099003|261028144727099003|18002099003|22082099003|6133799003|10067099003; X-Microsoft-Antispam-Message-Info: HugdwiaU/E0LgJSA0WLVohmRkvW9Q4wImw5CvofYKJwryMO2cIgd6xsECQx/GW+ctwlqnl53uWQZMSzVLrwhsZgCYBmnl0kx/uI2WFhfVel5EqnqbcEovqAyolH5Z4SA64t2pLUSgKhh2tSNI74raiq0N+b3tDwvWcEpUB//AbOMceyh23EoOqmW7nZtOW0QcHGUldXgwG+pkfEtt3+yOug481DU2lHvlx9pyGEijKME1KZbgV6vXLFh2zXR8EQ5OUIoJSgt/XtHQfimonp6QNUme2KQiSV3OrJJEj/NkJczp99M/1/iRyzNgU0vhSvrfjRNYurfZ3J2HbqougFheEnZZga5UT7ay8X4lMhDBPUceKtR8/rYCYGaGj3lhiagDTApfDMgQFkuXBBSGelhCyDRKbzUOdWFJI95l7D3yJnzO1TQMMdh7xXjHF1OjPXwjJ3471JmHJkG78UWAKWRobmP42w7CLqODd61bQyll/xNGIOMKwPNihX1dvN+nvtU2wWZ8RdX+rZlXpOJthBFMxWj9f09cVYVEqVQX5/B9rQcI9i698/0RgJ9ZgC8TLLVQMH4FtejqFfYeJmW3ouRRnyKfz0x2qfLQ8oo3Y6DL1xkVf3wmccr/eL5Pr0ZlqvC X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM6P189MB3107.EURP189.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(376014)(23010399003)(366016)(1800799024)(261026140227099003)(260925021911599003)(260925022911599003)(260925021311599003)(11063799006)(4143699003)(261026130827099003)(56012099006)(261021133027099003)(261022115727099003)(261009223027099003)(261022105027099003)(261021123027099003)(261022075727099003)(261021121427099003)(261022113327099003)(261102123227099003)(261021135927099003)(261026135527099003)(261026121527099003)(261021130227099003)(261028144727099003)(18002099003)(22082099003)(6133799003)(10067099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: B+X4jB1Kuppak0iZ4aOF3zLuANGBOIpUqKsFLQOYXYquAvm0FYbGiiTRKCSDJYRYMVwGi2B+917ZEn3eV0CDvA1E8wjB+oLg4sZwHavVCbNxUesRi9VTV87vcjBgezogm7eTPEvJ2u5qOcOsbj8KcJM/2ItCtuwWht6Os0MfgjKBaGIBdWencgVIhsF3ok7/qefJ5Zwn9a43SuWGm44H1HrwaTAMtdkdCxPHPbRxWnQuhMDrScRIhblZvMk/W7bIVLU3RKSD2olG78b5CtiApKKuciRo889YkapfqbbCrqPh9vCwewUG5PtfrU29sEulNFquBI/sSzNNXuG11F9Bqfb3ehN6RJ32cqLy+bkRQW/zKkN4kalELuyDTQMC2Of1iB5HoCjBoonMTeVgjKDKfgdJIdJ29rInz0rgVfSKJyOifaekTGKGdTlB3Xt47saKAT08ksrEVBtna0XRkgSjkkgyW++kKNJ2zpaNoypKjUuDSENcTEbpux+PTjICzG6cOrMxoA5UIJpLmu0GfzsxscmF3KGjL+uWxSMjt46wNLGBNZ0e0/zgJYaT7t/IdZgFLVJthcmjrzfATn8Pzk7W362uy7+r+SekZGf/obEiXk0ba4yeqSfDiHCTZy9m3l2xe4tkVdq8RgiF1APrGq+EndgGGJgbbTSj17qKCrGQ4g4wHTA7I6yRlZDpjm1uvxb42bgriKpt9t3Exmh4Pqg1lMnBzvRCkJ3s4rSbTvvEvaEp4WyLRqSGIKR6cMgBLaHchJvBN9Kksnl/RhV1wL3apYAlgQxQ4jx/SCaGTP8FOYwb7XFLVPdO9Ev/PB/dLBYsHuBd4lXqygyYM6mgUeB1p5di04US+I8Bt506hH5qRm1p6XYV4vu0has1fUgIFlzzoI4PWqpFAZXEYSxEu3mFhTg7l8lD/vz88S73M1iNVqABYAAvFWSwY/54xu3pqtaVlP9DCY98OX8C0dpzwd3HxHgyMu5iUg5OIwuMt59tRXX38pdNU59ESYMCU61R+x4mO2umCdpdS2O+F+OTgE1CCYkMCiePFENriyHCEXVhvJ+J2FVuow6RBYVImXLc7hi02ye+oxMAhshlgh7zgucypuYYp27xHSOLQdO/4SR1/xvAbvNt2B2OcbS8/fPJRRF2h2vycRFR8dTJ9RTjRZNW7FlymM6dFM20RKyLCpZbVG02mi3BHwKfmZ+jYSw6g3SQ+mHkxVXkc1o+m+LvwVgjhU2YjVy/buh8UHacnuEQQG135MBGWEaUrZwIIW1Tm4nXt6EiDayt/wsnwlKCemDUcReo5v8WBMpPbVRWzY+nR1bQ+WDKU73j899j7LtJK4HWfNJ5i9tU9lHgYQSzVFHrl1WVs6othjgGRXc6u6qpubzegf6PvlS0Sl5aiapY2eTuvaQ8qY9Jo9O1h+PSuM6W0qVKzQcqAH9+hX7pXopIt15tJw12e8D4LzFqiMPfNJJySK2MmQo9WPfYGjjiJsSOK6OTqy7+dr1PASglUadR0jLSvwcVFAQCh83uCOPE0003SIF4FCV9lEDjWP51AXID4XU1KwQYOtmftDX7R1KZlEODAsx5RvyJWU0tvB83ZdCjlQ8R5CZIh6EitfCli0tQiCCybvM2fAEPmdHxuJNbQUE72SUUto9FdOZ8wMjsnER4zg4MSnDHLAIzJWx0wuW0hom/I9lpVeOCPzc9j6YQK/FgZgtOU5/6+GL7y4mTKkZu4s11eGF8yLUS63khiQqYAQ== X-OriginatorOrg: est.tech X-MS-Exchange-CrossTenant-Network-Message-Id: 2e5dd7ee-0b6a-4594-b53c-08df3b37c8bb X-MS-Exchange-CrossTenant-AuthSource: AM6P189MB3107.EURP189.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Nov 2026 12:24:48.8026 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: d2585e63-66b9-44b6-a76e-4f4b217d97fd X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: AMpRRLmsqvT6MF3VpZjKdYjzq0gxGUSWbnmVdO4nNDadta+suRjl3nCs6W+Qc7OvQg4dqrdIF/SZQyl+srGqID1CX63UhD+vUj5SMpe6JnI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA1P189MB2662 List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by lin-tor-korg-lkml-alma10-1 with HTTPS for ; Thu, 05 Nov 2026 12:24:57 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/249546 Use pypa installer to install the cross-compiled HelperSDT wheel, avoiding pip's host platform tag check that breaks 32-bit builds on 64-bit hosts. This also removes the need for the previous RECORD and direct_url.json cleanup. Tested on qemux86 (core2-32). Signed-off-by: Jaipaul Cheernam --- ...staller-instead-of-pip-for-helpersdt.patch | 48 +++++++++++++++ ...t-install-build-paths-with-the-wheel.patch | 61 ------------------- .../recipes-kernel/systemtap/systemtap_5.6.bb | 4 +- 3 files changed, 50 insertions(+), 63 deletions(-) create mode 100644 meta/recipes-kernel/systemtap/systemtap/0001-systemtap-use-installer-instead-of-pip-for-helpersdt.patch delete mode 100644 meta/recipes-kernel/systemtap/systemtap/0002-python-don-t-install-build-paths-with-the-wheel.patch diff --git a/meta/recipes-kernel/systemtap/systemtap/0001-systemtap-use-installer-instead-of-pip-for-helpersdt.patch b/meta/recipes-kernel/systemtap/systemtap/0001-systemtap-use-installer-instead-of-pip-for-helpersdt.patch new file mode 100644 index 0000000000..05323edaa5 --- /dev/null +++ b/meta/recipes-kernel/systemtap/systemtap/0001-systemtap-use-installer-instead-of-pip-for-helpersdt.patch @@ -0,0 +1,48 @@ +From 070fe259ffe163b12aea7fae15dc9f8c6ae6d4c0 Mon Sep 17 00:00:00 2001 +From: Jaipaul Cheernam +Date: Thu, 5 Nov 2026 09:00:00 +0000 +Subject: [PATCH] systemtap: use installer instead of pip for HelperSDT + +Pip rejects cross-compiled wheels due to platform tag mismatch, +breaking 32-bit builds on 64-bit hosts. + +Use pypa installer to install the wheel without platform checks, +eliminating the need for RECORD and direct_url.json cleanup. + +Upstream-Status: Submitted [https://sourceware.org/bugzilla/show_bug.cgi?id=34959] +Signed-off-by: Jaipaul Cheernam +--- + python/Makefile.am | 18 +++++++++++++----- + 1 file changed, 13 insertions(+), 5 deletions(-) + +diff --git a/python/Makefile.am b/python/Makefile.am +index 0cb608d5a..226800ad6 100644 +--- a/python/Makefile.am ++++ b/python/Makefile.am +@@ -35,13 +35,21 @@ if HAVE_PYTHON3_PROBES + endif + + +-# Note that we're installing from the wheel we just built. ++# Install the wheel we just built with pypa "installer" rather than pip. ++# ++# The wheel is cross-built and tagged for the target, but it is installed ++# with the native interpreter; pip rejects a wheel whose platform tag does ++# not match the running interpreter, so it cannot install a cross-built ++# wheel. installer simply unpacks the wheel and ignores the tag. ++# ++# --compile-bytecode=0 avoids writing .pyc files that record build paths ++# (they are regenerated on first import), and installer does not write a ++# PEP 610 direct_url.json, so neither needs cleaning up afterwards. + install-exec-local: + if HAVE_PYTHON3_PROBES +- $(PYTHON3) -m pip install $(shell readlink -f $(builddir))/py3build/*.whl \ +- $(if $(DESTDIR),--root $(DESTDIR)) --prefix $(prefix) \ +- --no-deps --no-index --no-build-isolation \ +- --ignore-installed --verbose ++ $(PYTHON3) -m installer --compile-bytecode=0 \ ++ $(if $(DESTDIR),--destdir $(DESTDIR)) --prefix $(prefix) \ ++ $(shell readlink -f $(builddir))/py3build/*.whl + endif + + clean-local: diff --git a/meta/recipes-kernel/systemtap/systemtap/0002-python-don-t-install-build-paths-with-the-wheel.patch b/meta/recipes-kernel/systemtap/systemtap/0002-python-don-t-install-build-paths-with-the-wheel.patch deleted file mode 100644 index 146f0a456f..0000000000 --- a/meta/recipes-kernel/systemtap/systemtap/0002-python-don-t-install-build-paths-with-the-wheel.patch +++ /dev/null @@ -1,61 +0,0 @@ -From 3f34320eb37bb583b7bbcec01347a52527991391 Mon Sep 17 00:00:00 2001 -From: Jaipaul Cheernam -Date: Sun, 20 Sep 2026 08:12:00 +0000 -Subject: [PATCH 2/2] python: don't install build paths with the wheel - -pip byte-compiles the module it installs using the paths it writes to, so -with DESTDIR set every .pyc in HelperSDT/__pycache__ records a -$(DESTDIR)-prefixed source file name, and PEP 610 direct_url.json records -the file:// URL of the wheel in the build tree. Neither names anything -that exists on the installed system, and both make the install -unreproducible; distro QA checks reject them (OpenEmbedded's buildpaths -test fails the build on all four files). - -Pass --no-compile, so the bytecode is generated on first import in the -right place, and delete direct_url.json after installing. Its line in -RECORD has to go as well: the line holds a sha256 of the file, and thus of -the build directory the wheel sat in, so leaving it in place keeps RECORD -differing between two builds of the same source in different directories --- and describes a file that is no longer installed. - -Upstream-Status: Submitted [https://inbox.sourceware.org/systemtap/20260919135744.78642-3-jaipaul.cheernam@est.tech/] -Signed-off-by: Jaipaul Cheernam ---- - python/Makefile.am | 19 ++++++++++++++++++- - 1 file changed, 18 insertions(+), 1 deletion(-) - -diff --git a/python/Makefile.am b/python/Makefile.am -index 0cb608d..ebd1465 100644 ---- a/python/Makefile.am -+++ b/python/Makefile.am -@@ -36,12 +36,29 @@ endif - - - # Note that we're installing from the wheel we just built. -+# -+# --no-compile: pip byte-compiles with the paths it writes to, so with -+# DESTDIR set the .pyc files record $(DESTDIR)-prefixed source names, which -+# are wrong on the installed system (and defeat reproducible builds). The -+# bytecode is regenerated on first import instead. -+# -+# PEP 610 direct_url.json records the file:// URL of the wheel in the build -+# tree, which is likewise meaningless once installed. Delete it, and drop -+# its line from RECORD too: that line holds a hash of the file, and so of -+# the build directory, which would keep RECORD varying between builds and -+# would describe a file that is not installed. - install-exec-local: - if HAVE_PYTHON3_PROBES - $(PYTHON3) -m pip install $(shell readlink -f $(builddir))/py3build/*.whl \ - $(if $(DESTDIR),--root $(DESTDIR)) --prefix $(prefix) \ -- --no-deps --no-index --no-build-isolation \ -+ --no-deps --no-index --no-build-isolation --no-compile \ - --ignore-installed --verbose -+ rm -f $(DESTDIR)$(python3dir)/*.dist-info/direct_url.json -+ for r in $(DESTDIR)$(python3dir)/*.dist-info/RECORD; do \ -+ if test -f "$$r"; then \ -+ sed -i '\|/direct_url\.json,|d' "$$r"; \ -+ fi; \ -+ done - endif - - clean-local: diff --git a/meta/recipes-kernel/systemtap/systemtap_5.6.bb b/meta/recipes-kernel/systemtap/systemtap_5.6.bb index b58bb1543b..4a9a16cac8 100644 --- a/meta/recipes-kernel/systemtap/systemtap_5.6.bb +++ b/meta/recipes-kernel/systemtap/systemtap_5.6.bb @@ -12,7 +12,7 @@ SRC_URI += " \ file://0001-improve-reproducibility-for-c-compiling.patch \ file://0001-staprun-address-ncurses-6.3-failures.patch \ file://0001-python3.stpm-record-the-installed-libpython-path.patch \ - file://0002-python-don-t-install-build-paths-with-the-wheel.patch \ + file://0001-systemtap-use-installer-instead-of-pip-for-helpersdt.patch \ " DEPENDS = "elfutils" @@ -34,7 +34,7 @@ PACKAGECONFIG[translator] = "--enable-translator,--disable-translator,boost,bash PACKAGECONFIG[libvirt] = "--enable-libvirt,--disable-libvirt,libvirt" PACKAGECONFIG[sqlite] = "--enable-sqlite,--disable-sqlite,sqlite3" PACKAGECONFIG[monitor] = "--enable-monitor,--disable-monitor,ncurses json-c" -PACKAGECONFIG[python3-probes] = "--with-python3-probes,--without-python3-probes,python3-setuptools-native python3-pip-native python3-wheel-native" +PACKAGECONFIG[python3-probes] = "--with-python3-probes,--without-python3-probes,python3-setuptools-native python3-pip-native python3-wheel-native python3-installer-native" PACKAGECONFIG[debuginfod] = "--with-debuginfod, --without-debuginfod" PACKAGECONFIG[readline] = "--with-readline,--without-readline,readline" From patchwork Thu Nov 5 12:24:42 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jaipaul Cheernam X-Patchwork-Id: 103140 Received: from GVXPR05CU001.outbound.protection.outlook.com (GVXPR05CU001.outbound.protection.outlook.com [52.101.83.25]) by mx.groups.io with SMTP id smtpd.msgproc02-g2.33253.1793881491094167127 for ; Thu, 05 Nov 2026 04:24:54 -0800 Authentication-Results: mx.groups.io; dkim=fail reason="dkim: body hash did not verify" header.i=@est.tech header.s=selector1 header.b=d4myFn2w; spf=pass (domain: est.tech, ip: 52.101.83.25, mailfrom: jaipaul.cheernam@est.tech) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=neWvwTyQ53ZqB2agqxc5WyS67m2IgqFRWQDLTxCyoAtaZovbI/Zxmdtj8EXUDsJFd6QZWp9l4aygjIABNASFcWkteyyu0J1iBoGIOyVYq9ehCbn1HYi4MZ1uCyu/Mk+s7GPYbNllBwXXrdLbtxtiYDrnhNCKhewNN3yVmRhqyLzkWJ+h4dvxdHqhjy5T/S545PWPMJpFto/6Z32lCfMAoCRRPYt4kfZLx40eongKmonNmNkaJp/j+nCxw9kpvn/fOOQ/HOKcnWikqEQtCX1IJGHZZKeXpwTRzKYoscIbLVSUJ+qS6ps5+3ygp3bOLAKHQtc2/SS2NJR1QK5y24umNw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=P1iXrOH1jHIHJSvxMh6sTNLBUess9CNMvuRDWhSGFik=; b=hh7jixvCHCbAZW581lV9R2ecXyHQ3NjYZL212lpxlPr8Z+Vb1d8AEjeIWSdaMzDouj8CdcW9OF/InxN0NdDz98F+aX28Pv3Si7lLd/eGaRr0YH34w7Ty7DKAdzgKUO20Wx9c4eec/Fkeh9Md8Sr1w+ph00b9B75ot1Z41Ih1fOyKgb4vlC7WDdqCEyutZVqN4w6Rz6mkg1AqsX5Oy/7mNg9mnTSun4lrRBNVKF97IVc1ej+uXtbQhLv+IPBYrwmStiEREOQruvLfZ++nQHy3QRnJp/c8uogNGs8K28VNDpAWsE3DU3FhzFe+NAsirP0fbyBRSHRHZWv5sN+tXHhH2Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=est.tech; dmarc=pass action=none header.from=est.tech; dkim=pass header.d=est.tech; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=est.tech; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=P1iXrOH1jHIHJSvxMh6sTNLBUess9CNMvuRDWhSGFik=; b=d4myFn2wpNVi4IlVK0j240VNgW9eY5ututiSUAYKlULrgim4Wi6Qo2NytQkzadUdlct1524x0/HJvOoiUQuyZvBONLxDI+3CifuZwLCa45Xh1rLorZH6ulTClRos5ezkq+SutNmnCAYRi7fAmWd3GX29uvRtRORx8c0+vXyY6I12gctFWFaO7Qq4jOd5munT22HS5xFDRA3skB2ddlNYqkAqAXpiS8BRq65C3etgcmBMxg9jA7kxMe2o/wDdmOWr6NvXDwWL1TURLBAgIVItoUJIsjoFij/yQ/WVTY2dqAV+E/9EFU+L5jCiJUnaOtKsKNk7CZTgyVpPUOpnFU6v6g== Authentication-Results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=est.tech; Received: from AM6P189MB3107.EURP189.PROD.OUTLOOK.COM (2603:10a6:20b:6c0::19) by PA1P189MB2662.EURP189.PROD.OUTLOOK.COM (2603:10a6:102:461::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.592.10; Thu, 5 Nov 2026 12:24:50 +0000 Received: from AM6P189MB3107.EURP189.PROD.OUTLOOK.COM ([fe80::bc97:3847:8f02:acb]) by AM6P189MB3107.EURP189.PROD.OUTLOOK.COM ([fe80::bc97:3847:8f02:acb%6]) with mapi id 15.21.0592.009; Thu, 5 Nov 2026 12:24:50 +0000 From: Jaipaul Cheernam To: openembedded-core@lists.openembedded.org Subject: [PATCH v7 3/4] python3-setuptools: Upgrade 84.0.0 -> 84.2.1 Date: Thu, 5 Nov 2026 13:24:42 +0100 Message-ID: <20261105122443.53245-4-jaipaul.cheernam@est.tech> X-Mailer: git-send-email 2.39.5 (Apple Git-154) In-Reply-To: <20261105122443.53245-1-jaipaul.cheernam@est.tech> References: <20261012090030.95901-2-jaipaul.cheernam@est.tech> <20261105122443.53245-1-jaipaul.cheernam@est.tech> X-ClientProxiedBy: DU7P189CA0011.EURP189.PROD.OUTLOOK.COM (2603:10a6:10:552::25) To AM6P189MB3107.EURP189.PROD.OUTLOOK.COM (2603:10a6:20b:6c0::19) Return-Path: jaipaul.cheernam@est.tech MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM6P189MB3107:EE_|PA1P189MB2662:EE_ X-MS-Office365-Filtering-Correlation-Id: 423dd357-7000-458d-74fe-08df3b37c9c3 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|23010399003|366016|1800799024|261026140227099003|260925021911599003|260925022911599003|260925021311599003|11063799006|4143699003|56012099006|261009223027099003|261022105027099003|261021123027099003|261022075727099003|261021121427099003|261009221227099003|261102123227099003|261026121527099003|261028144727099003|18002099003|22082099003|6133799003|10067099003; X-Microsoft-Antispam-Message-Info: IO6g3mvLWF5Bs/zX+jqbBIGJZgPgvkux3VLBa15kFZj2XmZrajGKQGzlkMEsl+Dg5TWf0gF3LEd4ptCwR0aZN9HuODLwlErTkgeo9p3mQc3oKbLe5ptMkScyXKC1npARv2muSXNUItV2LWfD6bbLlY8drfwb3mn/AOa+KYdGyNyEaxdGcELNbnze92Uw6+Ystq+mPEnkqugMf77vZhnHPI1Oc4/Uh5TXoiKzd6Fkji8H5saGliHLDrch5f/f49lid0ilXXSo04pE18c4vH5idQY/Der6JX+V63HK1sgro1vKAwzE4R2CoqPyA9CLhx5C9lSFMumEux9k+cmHXtVrZQh+d4RRXWQiy2wk6eDnoDGiniO2g1haj1dAPGIFJHFCvZ8vXMlz21juqjiVHwl0y4A6dpRiiP+14etVJND3K1SMs8FXNpDilcrg10ReBjZP6QdRqhIFkCew2pbxKmh2fAjf95eV/oIWnqTWQFTJ+xpFbZO1VsGrH+ASV95ycRvEQk7esNyXHesNnXZs3RQvKXMV/3M50D/NwHi9THmGjv8AFdpIAuUKSnT0wfiI3FTzrEfPNv7P+8SoMftgBcSVPxq3jFxso4vVcAjX+RNII4V6Vp20HrH1sgFy/f0b+nnf X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM6P189MB3107.EURP189.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(376014)(23010399003)(366016)(1800799024)(261026140227099003)(260925021911599003)(260925022911599003)(260925021311599003)(11063799006)(4143699003)(56012099006)(261009223027099003)(261022105027099003)(261021123027099003)(261022075727099003)(261021121427099003)(261009221227099003)(261102123227099003)(261026121527099003)(261028144727099003)(18002099003)(22082099003)(6133799003)(10067099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 5S7uQmj5G9MCz4afffUpx0Y1s21o1glByeJHHspxJPnErVWJ2tYYmc5e2lWr9zO0xRhZWQwrXIrY2LE6PDR8nce/Abk03tReh+s842g4I2vuBtLgJhBgUTHTu1/PznRqud2hASbw696n0A1OWGSRLP8o0j4VGhaSPvnNjRkD+jzLmt2++QsrvOeZImELiskyx803Spgqaao7SRlm/7ZopQrViqoyx2wFScKa/RERJId0lrvCrMuxXjlxNPkdxKmLR8d2pQAuBlBnsuUD5c/4XAUvpnwMYD5XNOCIAUCH99ecxvwm6Yurhbk2Is2lCaaBvUeAQ3TGJENtnGabroLVslZ65LCL+44LH5QTAw6EY6S/o4fE9SfTUUKFo93Bji+13hs3L3WniPVrC5BQ5bNOqzFX3hWnUo3bNBUwK46GCRJhJtBx+u9F9X9rf9k3pqa+JA4WctTmsszk5wo2txFd8URvNEN8/QwPgMbUY/++sYbWmIr4Xw4fb4+MXRmY2KVJEmJqTFsWOI2S2uAFU498WRWLPFNItuuaz8HdZKwAzr2CWomKegXPwwN3IFpkIDsw5kRv+P6EF6jBmbtc8JH6BsC5USHiI09A1c8ce9YXJ499KtGPm49RN+OuUV136k06luyQj2nGY6zTC5m1evP11GOwlIijEc1e8iCuxv2eC9QiGvV+LFNANrqdrYAx/mF98D9LBi78LiFVphuGwWg7qIvwfdoNnZM+yScT26oFByaEFHrPuI1nG+z0h2jpXib6nX3op9OyenpQiImwlmgmUjML2SpbO/vy30uvN2ZtpzKgUCozSmTHvyXHQzoGF3nSzWTCAt/5b1egzYaKsjNkt10AYKLCWXafCrsNF4C/hIdrLlq7/8QKGR3MIprOhBp1UiYAfqY8XQAUFF7Y3dFJ/9xs+pbBuy5dTA8T76i5CjecAHneI+OYKZzzJ42hZLGzBB3ibTPUBT3UwCbE2zt/MSunyAp4EmUCVYFnCYTItt2wxxLe5i09XNzcE2zU8shobrRpWU277u2HcOrtrSIWT0B0jybnf9lCRt9SAaoGhecRq2iZ7ZLCF3O4/31/YBaJrEe33P7hOblosQx5mi/J+4kZmXg+DkltJMTFZV1EYsl8fjYiWVxo3tG7vRe/6+tuZ6O+Z2tM7THSXvfqKtEDRZixW+4v9B20smKTHwB5aNLsCLtavmYLvtgzGAlGRmwYKdzR9ZwMSltpHWMrZ6RzY5zwWYD2Em+N0JQJapDnlW4t8EPkC2ivY7/mkWW6LDqLiQKkW4WPSOQ399q/k9zIAzJdT+kHNu6FZWajN4r1eUXtVKZQxom53/+gQPz1Eqe/NMlCWmi5TqvrpvBVwef+RPNcslOAU/TMsKfXRrd6eyCXK260OzNFVJAN3XJwKfF9kcjAV2zusrNvZFdJoDj3kg+CXPuzFia70TpLd0soSyj/EOOQ0O37eOWRdumNF9kDsJnj4MzjSGXUr//wsnTJENHpSdqYVdrYQiuK1faZ5ZPlwwGKh3px9sYTNmhQBcAtl+yMLnKIbHYcm3XWVKPh9lThp8Tdm97d95kzQ8EoYm15GGKRKUvhTx0azfukBVfPTEynsSqzBWcpp98SYzmRgCccwrWV0grZPEOSw5/AB5n+Xx6h+uabu8Y2fsd2pvgrWfoKLbxTE0D49HrCNWZW7EeOjL81407MgZjncPs8K+ptlQ+Krabxxf+yB52KqXnhbcU+jXsq9k/knE9M+6lt9g== X-OriginatorOrg: est.tech X-MS-Exchange-CrossTenant-Network-Message-Id: 423dd357-7000-458d-74fe-08df3b37c9c3 X-MS-Exchange-CrossTenant-AuthSource: AM6P189MB3107.EURP189.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Nov 2026 12:24:50.5549 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: d2585e63-66b9-44b6-a76e-4f4b217d97fd X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 4YNpZSa5gC/fsHg7qP/CjuWed5zby76lDsGGLEKVDKQRVd1B/jjjrq1nbik5o09DsqQWxuZlHXncehdRIBKTHwDMs6EyAhsXqXg+Lv43ZHE= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA1P189MB2662 List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by lin-tor-korg-lkml-alma10-1 with HTTPS for ; Thu, 05 Nov 2026 12:24:57 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/249547 ChangeLog: https://setuptools.pypa.io/en/stable/history.html#v84-2-1 Signed-off-by: Jaipaul Cheernam --- ...ils-sysconfig.py-make-it-possible-to-substite.patch | 10 +++++----- ...tuptools_84.0.0.bb => python3-setuptools_84.2.1.bb} | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) rename meta/recipes-devtools/python/{python3-setuptools_84.0.0.bb => python3-setuptools_84.2.1.bb} (94%) diff --git a/meta/recipes-devtools/python/python3-setuptools/0001-_distutils-sysconfig.py-make-it-possible-to-substite.patch b/meta/recipes-devtools/python/python3-setuptools/0001-_distutils-sysconfig.py-make-it-possible-to-substite.patch index f6313fb1a9..df9d5f77c3 100644 --- a/meta/recipes-devtools/python/python3-setuptools/0001-_distutils-sysconfig.py-make-it-possible-to-substite.patch +++ b/meta/recipes-devtools/python/python3-setuptools/0001-_distutils-sysconfig.py-make-it-possible-to-substite.patch @@ -1,4 +1,4 @@ -From fe651521b9d970a84432b37d2731932a4862deb2 Mon Sep 17 00:00:00 2001 +From dfebab446e3148e3ec170e06aa57b703a655f772 Mon Sep 17 00:00:00 2001 From: Alexander Kanavin Date: Wed, 11 May 2022 21:41:14 +0200 Subject: [PATCH] _distutils/sysconfig.py: make it possible to substite the @@ -20,10 +20,10 @@ Signed-off-by: Alexander Kanavin 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/setuptools/_distutils/sysconfig.py b/setuptools/_distutils/sysconfig.py -index 7ddc869..01a06af 100644 +index 4792b58..cf1fbc5 100644 --- a/setuptools/_distutils/sysconfig.py +++ b/setuptools/_distutils/sysconfig.py -@@ -134,6 +134,8 @@ def get_python_inc(plat_specific: bool = False, prefix: str | None = None) -> st +@@ -133,6 +133,8 @@ def get_python_inc(plat_specific: bool = False, prefix: str | None = None) -> st sys.base_exec_prefix -- i.e., ignore 'plat_specific'. """ default_prefix = BASE_EXEC_PREFIX if plat_specific else BASE_PREFIX @@ -32,7 +32,7 @@ index 7ddc869..01a06af 100644 resolved_prefix = prefix if prefix is not None else default_prefix # MinGW imitates posix like layout, but os.name != posix os_name = "posix" if is_mingw() else os.name -@@ -246,7 +248,13 @@ def get_python_lib( +@@ -245,7 +247,13 @@ def get_python_lib( early_prefix = prefix @@ -47,7 +47,7 @@ index 7ddc869..01a06af 100644 if standard_lib: prefix = plat_specific and BASE_EXEC_PREFIX or BASE_PREFIX else: -@@ -261,7 +269,7 @@ def get_python_lib( +@@ -260,7 +268,7 @@ def get_python_lib( # Pure Python libdir = "lib" implementation = 'pypy' if IS_PYPY else 'python' diff --git a/meta/recipes-devtools/python/python3-setuptools_84.0.0.bb b/meta/recipes-devtools/python/python3-setuptools_84.2.1.bb similarity index 94% rename from meta/recipes-devtools/python/python3-setuptools_84.0.0.bb rename to meta/recipes-devtools/python/python3-setuptools_84.2.1.bb index 648b084a27..f2dd481835 100644 --- a/meta/recipes-devtools/python/python3-setuptools_84.0.0.bb +++ b/meta/recipes-devtools/python/python3-setuptools_84.2.1.bb @@ -11,7 +11,7 @@ CVE_PRODUCT = "python3-setuptools python:setuptools" SRC_URI += " \ file://0001-_distutils-sysconfig.py-make-it-possible-to-substite.patch" -SRC_URI[sha256sum] = "f4695c21257f0d9b537ec2692c941d02ee143b7cc1276941349a546573b2ef73" +SRC_URI[sha256sum] = "3ff8b3b5492a0aa66960f4419365a86b84e013070d4313e4d4a6894f5d64d6bc" do_install:append() { # setuptools ships Windows launcher executables (cli*.exe, gui*.exe). From patchwork Thu Nov 5 12:24:43 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Jaipaul Cheernam X-Patchwork-Id: 103141 Received: from GVXPR05CU001.outbound.protection.outlook.com (GVXPR05CU001.outbound.protection.outlook.com [52.101.83.25]) by mx.groups.io with SMTP id smtpd.msgproc02-g2.33253.1793881491094167127 for ; Thu, 05 Nov 2026 04:24:56 -0800 Authentication-Results: mx.groups.io; dkim=fail reason="dkim: body hash did not verify" header.i=@est.tech header.s=selector1 header.b=yrQXFc5u; spf=pass (domain: est.tech, ip: 52.101.83.25, mailfrom: jaipaul.cheernam@est.tech) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Hjnm8X/reQZlrROvPU08K4VdifATRETVtFd4oeV+Kf88c2onY1JkJ/KSUizwseJ/B1NulcS4Xuac5SUDpS9vrfDYxAti3xMyOB4MuVLToAxTu4ufuIkeK/F54/LLI7Fgkh5nf6VPXRh/A1eQkUXShfUUizOoIgLxtkToGVR+lKymksaipI/H40wH//NHZmxMP4avkowc8r7IxtcO+cRUsIrAW5byGHB8ReR+LALaU35Wjg1tn1ENDjd21h9dxsfQ0J03eQEkoSNddZPnHeFgOUFCItn7BXLZa4VCd8KnXJJ8vA0Hjs7f+ypLxwUl5inBpUUPEOu/H8nGBTXR8Gh0HA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=5ei42PNNB49hjA+aAai/EkASFJjvmo8WAmtiNDbrYnc=; b=gJspTYjpaaH9xFWgq6djuZRuSuGjidUXChH0kkEa8T2S2QupSmS5GwYcAx0c9AF6dipmX/epNsOToB67jiSUzl8loL9xXBdF5zKfnN32C5I/QeyyqK3GLIdLmbNzAAYpRQv9IeKJTgvGMmygbqWPXoK+h6PYxzuvNfWubyiSgBtKnFRLnFF9IDuW4s1fcMXa0Dm0DYURdR6j8GpqngTCrT49fSQtiHH2ruQAha77IjEG58Y2Alolqnx/gId64qiYBoz9hixJvFwj1HX61DLkHTgRa3eooe3ZmX6IPqqTWb7Hvhg+l7u8IQrkVj3wgykxTTwPbEVc23xGox6FId26Fw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=est.tech; dmarc=pass action=none header.from=est.tech; dkim=pass header.d=est.tech; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=est.tech; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=5ei42PNNB49hjA+aAai/EkASFJjvmo8WAmtiNDbrYnc=; b=yrQXFc5umdLzcVfW2icMo+gU0un60zHhE+0D54DNUDZmh1ZV0B//wTvZfHj1jiA5inh1MWvikXMFbmCG0Mgv5qhhYZYudbVMGgaa8ttfx0Qo4dSR71P4dTFyvYkmUDsUPD9XzWCqpGaHZXnBn8RtPb1m5S4jdeiHrEf6+SSwPOCGmN3onHMUK5TZ21i3V85tdUYLpSHs4iUEVc2qtfHFAYF3kmbBe+mKslk2rv6zqXRrvQTCbPqMyJCEq8Uqccg0Hygmn3XXhw7FYM0q9KE5ZzfI5g61KJ/sAbnAjeNFlitknepL8mAhGrB0wwlM+f3QLOHH1/XRjp2Xg4Dx2Zjrcg== Authentication-Results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=est.tech; Received: from AM6P189MB3107.EURP189.PROD.OUTLOOK.COM (2603:10a6:20b:6c0::19) by PA1P189MB2662.EURP189.PROD.OUTLOOK.COM (2603:10a6:102:461::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.592.10; Thu, 5 Nov 2026 12:24:52 +0000 Received: from AM6P189MB3107.EURP189.PROD.OUTLOOK.COM ([fe80::bc97:3847:8f02:acb]) by AM6P189MB3107.EURP189.PROD.OUTLOOK.COM ([fe80::bc97:3847:8f02:acb%6]) with mapi id 15.21.0592.009; Thu, 5 Nov 2026 12:24:52 +0000 From: Jaipaul Cheernam To: openembedded-core@lists.openembedded.org Subject: [PATCH v7 4/4] python3: Upgrade 3.14.10 -> 3.15.2 Date: Thu, 5 Nov 2026 13:24:43 +0100 Message-ID: <20261105122443.53245-5-jaipaul.cheernam@est.tech> X-Mailer: git-send-email 2.39.5 (Apple Git-154) In-Reply-To: <20261105122443.53245-1-jaipaul.cheernam@est.tech> References: <20261012090030.95901-2-jaipaul.cheernam@est.tech> <20261105122443.53245-1-jaipaul.cheernam@est.tech> X-ClientProxiedBy: DUZPR01CA0237.eurprd01.prod.exchangelabs.com (2603:10a6:10:4b5::20) To AM6P189MB3107.EURP189.PROD.OUTLOOK.COM (2603:10a6:20b:6c0::19) Return-Path: jaipaul.cheernam@est.tech MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM6P189MB3107:EE_|PA1P189MB2662:EE_ X-MS-Office365-Filtering-Correlation-Id: d9913b5b-7b39-40a4-abec-08df3b37cac6 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|23010399003|366016|1800799024|261026140227099003|260925021911599003|260925022911599003|260925021311599003|11063799006|5023799004|4143699003|261026130827099003|56012099006|261021133027099003|261022115727099003|261009223027099003|261022105027099003|261021123027099003|261022075727099003|261009223327099003|261009221727099003|261021121427099003|261022113327099003|261009221227099003|261009220027099003|261102123227099003|261021135927099003|261026135527099003|261026121527099003|261021130227099003|261028144727099003|25016099003|29003799003|18002099003|22082099003|6133799003|12006099003|10067099003|3023799007; X-Microsoft-Antispam-Message-Info: nwP29vaYX5r2dOSFt3LO5QjNtI+mvrh1gfTXoTTAVoWitF4cb05zcQHbB5qJ42MGYH1YxaZsY8Ewde/VIY5SXPjEMzaHr5MY5HlXMFERRWaiAm9c35H7DDhpn2BYdg7IWGnQo5M5F+Ji2oeQQvFeSGb2HBFabMvK4S1lwWPjlOB3Pvqq0A0i2HkcHSyAPI8IYx8HKCIWT4sjxrRNfPM6Tm0pd1ZCfUUQMbF91aKlfjKPeu7DzGlU/WkBd5LHl+JJyUCBV3nrTsY5CUxte4/AEGgJeWCB2knluhrrXjxXzgZoUrFXygWT6GMlACOSMjO10OsXBeI00bSTbqrdoQ0NCU1nbgJttXkziwrJJDrvhEJmYEk1+h0lHaubi3WOv9eY2cUruFxrIEW5NGTVPFzZ8oIhkLSTIZ6N6s3ywQgY6GB+mu2mmT4iz5vTZJzRxbC6xKobwzYTEM+ucjO9v0whcpV5NVtZLUcQoBP8xTiiI7ecoalMEejSqXgB/DoDQDW+/RKa85TRVdW5Yjtx/g6qn9euZ35G9MPyzbpnAhV2L3SUG7sDzL0LZu4o+GnF4IMT6PLect6TP/2cGxQ9cx75EmqiZeU6dvldTX1qCzy3XJmidC5nkVtitnH/M/FrKm8D X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM6P189MB3107.EURP189.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(376014)(23010399003)(366016)(1800799024)(261026140227099003)(260925021911599003)(260925022911599003)(260925021311599003)(11063799006)(5023799004)(4143699003)(261026130827099003)(56012099006)(261021133027099003)(261022115727099003)(261009223027099003)(261022105027099003)(261021123027099003)(261022075727099003)(261009223327099003)(261009221727099003)(261021121427099003)(261022113327099003)(261009221227099003)(261009220027099003)(261102123227099003)(261021135927099003)(261026135527099003)(261026121527099003)(261021130227099003)(261028144727099003)(25016099003)(29003799003)(18002099003)(22082099003)(6133799003)(12006099003)(10067099003)(3023799007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: GnlhzdbR65S6IALhFWGBAC4pJJFQShZxCmiHrFmdvaGTHqw2Ci/dqmg8o6brj1jp7B0H6i67fX4Ikpvj6NRiVWUEGi/0wO1xQQE4DUn/4jUmu3eDwpTvkFvsvOf5R7NjlGx5b9jS+tEgRvO2UAMbalFoMqUbIyIJtkdxyxZUl2TJxEzbTlex2PR+J2PdlSct9Qua6uawW7kthSiBqOqi2hnKLc8CPpZBRw8pd/Sdj0O/zKc/j5b1K9m7dVhp2rtqVNDLG6hyAhqhHmEHAmX5zw29/YhVQgQUrmS0FZDO3UXi5wLTMltUCQNK0mcz3wNnwcHETQlq0VdNYY6OkKS9mild8RwTqg8K+y4OeIMM7uTtnmwxad8L3Jejjf2r6OPUyQ4KEFWRK4cenoCBf/3UMXFBBzFXmAHKgFnf2G8+Dph1jSR3/k7kvvNCRcs7uykJiAqJXTn/QYPjVaB0+PpwJCW5Pnp8/wi5XzdJqWj45T5mlJTXMgYdAhwdc3vfqSZUzmFVa0G3/fT3JGz1ol9sGz5chy7X7WkFeRD78JopbnYVS4leePe1AZu+QCJPlTfNUVeYPhr1vurWqBlR0Fb6vCrtcrfEkJPe2KHGXBM3YkzrhgMH7Udz6TZhT4m90LfqlMDULLjdXeB/hFzOZskT8bf6OMly+gdXjvnShNSqkO7B5NigSKHxaC1zRuCRPqPMNBpqBtLcw5F3VO2NWo5IRh42KOHWhUAjzmN/T2tP4wWceBhn7RhX/f4kVGzTtPNp2E7kPWf4tRcoD2TBHRfxEulS9N2JrNzfXEgx2EJVE1ZKROVY+bK/Q4z44m7CbAK+uhvULFBPWsbDRiilYS/+AEotr+Cpns+h2z6diILipEj5T6It4m7p5/JOiFuR/J0KQUrdgJ7haB9mM1DyHp66vGt0iMw7rdF/g/dkictDCGlV9ssaT0wCm//sLxOOvDN71HzRY6Q9afIvY1u+f2zcxtdXTO9/jdgd0lblnZOAwjqX3Fh+VXP3XzwZd+Db2yog5s/QDEWpTM72w/Nhjzi/bAOhMRiYWJCfaPAU2tT5pqI0for1h6jSuLYS++ooSILb68dIVGxvmL64zDpN72fa74M3+SEmqPJBKCRTBaXYPOB1qTQHFp/q2Ie8zqvPwvfSTsm0k2V0mdf4MAYZYvzwU/UrM3vBLXlje2wi2N/KstV+0W8Kt9j4YIHLPj/C5uDpN7CjUdRWF8B852FpCKzvKpHbmadK3QBgXAKXnREwf38Lz/e1uki37KXKnArVc3j/jHfvfEftqidEsNBSFeOQ1JJ4WJIBriqP2k649+CZgNpLnPiEfC0naEv5O8RqDtsyzBuhJt/jMJ/LGDTGSbENOd+ZmkM/ZY9+AV1PVFVUG6aC2jFZ9ct3wPHSOEFkY/7d3Q0LgXpqOhReoccP2crFvljB0zELnYt36+vpwLEp+AQ0iwWyr7oNXHn8gIk/bqlGdushZtYdraOY8S3tJXlPSI5FFNyBGJLSVcmz6w/a092jCY+wi53pwDnjlFop2K9JulXvlNBz3M4MxvJ+4CMR513RYrkayywfAnYn4hr/Rjmo+sSW3phSJ+FfqcyIt7oyzKskWng+IOr86kRYiq9X1jqaOcuPLAlSkwrI4cj02m6PsvDkKOnZ78w5AVPiOQVulh1NYUIKghYZbyH2ByRQ9zlORcjdRtczKi2j9z192atw5PIJHIqBUz33A0PfTCcNnfKqqPRyH6izDGWEW8UIDg== X-OriginatorOrg: est.tech X-MS-Exchange-CrossTenant-Network-Message-Id: d9913b5b-7b39-40a4-abec-08df3b37cac6 X-MS-Exchange-CrossTenant-AuthSource: AM6P189MB3107.EURP189.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Nov 2026 12:24:52.3660 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: d2585e63-66b9-44b6-a76e-4f4b217d97fd X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: lsTMBDzDb+Ppxz/UOypdL5jehWBjeVNoqFemIYm/lqK1hINmbYgKnDN0QSbeaQnJIr9iE/32N0f6pBv6hM5g8XijFEesWpQZvJXRq67qBek= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA1P189MB2662 List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by lin-tor-korg-lkml-alma10-1 with HTTPS for ; Thu, 05 Nov 2026 12:24:57 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/249548 ReleaseNotes: https://docs.python.org/3/whatsnew/changelog.html#python-3-15-2-final - Drop patches which are part of upstream release - 0001-gh-146207-Add-support-for-OpenSSL-4.0.0.patch - 0002-gh-148292-Update-_ssl._SSLSocket-for-OpenSSL-4.patch - 0003-gh-148292-Remove-shutdown-test-in-test_ssl.test_got_eof.patch - valid-dists.patch - Add --without-system-libmpdec as EXTRA_OECONF configure option (--with-system-libmpdec is needed new package mpdecimal [1]) - Bump PYTHON_BASEVERSION to 3.15 in python3-dir.bbclass - Update python3-manifest - Refresh existing patches - Add two fixes needed for the new release - 0001-gh-160881-Fix-test_is_python_process_non_python_subp.patch - 0001-configure-clear-RUNSHARED-when-cross-compiling.patch Verification: - Built python3 for glibc and musl - verified ptest for all 34 python3 packages which supports ptest [1] https://github.com/python/cpython/issues/115119 Signed-off-by: Jaipaul Cheernam --- meta/classes-recipe/python3-dir.bbclass | 2 +- ...shebang-overflow-on-python-config.py.patch | 6 +- ...e-stdin-I-O-errors-same-way-as-maste.patch | 2 +- ...-use-prefix-value-from-build-configu.patch | 6 +- ...-qemu-wrapper-when-gathering-profile.patch | 6 +- ...est_sysconfig-for-posix_user-purelib.patch | 6 +- ...clear-RUNSHARED-when-cross-compiling.patch | 46 ++++ ...146207-Add-support-for-OpenSSL-4.0.0.patch | 254 ------------------ ...st_is_python_process_non_python_subp.patch | 50 ++++ .../0001-prefer-valid-entrypoints.patch | 6 +- ...g.py-use-platlibdir-also-for-purelib.patch | 4 +- ...le.py-correct-the-test-output-format.patch | 6 +- ...Update-_ssl._SSLSocket-for-OpenSSL-4.patch | 234 ---------------- ...utdown-test-in-test_ssl.test_got_eof.patch | 41 --- .../python/python3/makerace.patch | 6 +- .../python/python3/python3-manifest.json | 199 +++++--------- .../python/python3/valid-dists.patch | 164 ----------- .../{python3_3.14.10.bb => python3_3.15.2.bb} | 12 +- 18 files changed, 199 insertions(+), 851 deletions(-) create mode 100644 meta/recipes-devtools/python/python3/0001-configure-clear-RUNSHARED-when-cross-compiling.patch delete mode 100644 meta/recipes-devtools/python/python3/0001-gh-146207-Add-support-for-OpenSSL-4.0.0.patch create mode 100644 meta/recipes-devtools/python/python3/0001-gh-160881-Fix-test_is_python_process_non_python_subp.patch delete mode 100644 meta/recipes-devtools/python/python3/0002-gh-148292-Update-_ssl._SSLSocket-for-OpenSSL-4.patch delete mode 100644 meta/recipes-devtools/python/python3/0003-gh-148292-Remove-shutdown-test-in-test_ssl.test_got_eof.patch delete mode 100644 meta/recipes-devtools/python/python3/valid-dists.patch rename meta/recipes-devtools/python/{python3_3.14.10.bb => python3_3.15.2.bb} (98%) diff --git a/meta/classes-recipe/python3-dir.bbclass b/meta/classes-recipe/python3-dir.bbclass index 3eb0dea9b2..b26621f365 100644 --- a/meta/classes-recipe/python3-dir.bbclass +++ b/meta/classes-recipe/python3-dir.bbclass @@ -4,7 +4,7 @@ # SPDX-License-Identifier: MIT # -PYTHON_BASEVERSION = "3.14" +PYTHON_BASEVERSION = "3.15" PYTHON_ABI = "" PYTHON_DIR = "python${PYTHON_BASEVERSION}" PYTHON_PN = "python3" diff --git a/meta/recipes-devtools/python/python3/0001-Avoid-shebang-overflow-on-python-config.py.patch b/meta/recipes-devtools/python/python3/0001-Avoid-shebang-overflow-on-python-config.py.patch index 79fee9803f..f5acfb789c 100644 --- 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 @@ -1,4 +1,4 @@ -From 3f2df0e1fce8c7425998dade00d084f1b101a982 Mon Sep 17 00:00:00 2001 +From c7712b4345e16786ee237427537b83787022c733 Mon Sep 17 00:00:00 2001 From: Paulo Neves Date: Tue, 7 Jun 2022 16:16:41 +0200 Subject: [PATCH] Avoid shebang overflow on python-config.py @@ -16,10 +16,10 @@ Upstream-Status: Denied [distribution] 1 file changed, 2 insertions(+) diff --git a/Makefile.pre.in b/Makefile.pre.in -index e946018..345ed29 100644 +index a1d59e4..26a90e6 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in -@@ -2844,6 +2844,8 @@ python-config: $(srcdir)/Misc/python-config.in Misc/python-config.sh +@@ -2938,6 +2938,8 @@ python-config: $(srcdir)/Misc/python-config.in Misc/python-config.sh @ # Substitution happens here, as the completely-expanded BINDIR @ # is not available in configure sed -e "s,@EXENAME@,$(EXENAME)," < $(srcdir)/Misc/python-config.in >python-config.py 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 index 532adfe69a..322de292ce 100644 --- 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 @@ -1,4 +1,4 @@ -From 9cd44429215352eb2753e0fd8e25fef24f714006 Mon Sep 17 00:00:00 2001 +From 1e6d7f34c558ed05f7d35f4a2b86f079318fb6be Mon Sep 17 00:00:00 2001 From: Alexander Kanavin Date: Thu, 16 Sep 2021 16:35:37 +0200 Subject: [PATCH] Lib/pty.py: handle stdin I/O errors same way as master I/O 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 index 580d38a403..ce2efd431c 100644 --- 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 @@ -1,4 +1,4 @@ -From b5aad6a9b6c5add7a85861aed8aa030c1ad3d52f Mon Sep 17 00:00:00 2001 +From 7338a6821cdc4e7cab17ca255e484bf19b4b3670 Mon Sep 17 00:00:00 2001 From: Alexander Kanavin Date: Fri, 17 Nov 2023 14:26:32 +0100 Subject: [PATCH] Lib/sysconfig.py: use prefix value from build configuration @@ -18,10 +18,10 @@ Signed-off-by: Trevor Gamblin 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Lib/sysconfig/__init__.py b/Lib/sysconfig/__init__.py -index 0a8bcc0..a2341f2 100644 +index 924401c..0ff84f7 100644 --- a/Lib/sysconfig/__init__.py +++ b/Lib/sysconfig/__init__.py -@@ -539,12 +539,12 @@ def _init_config_vars(): +@@ -537,12 +537,12 @@ def _init_config_vars(): _CONFIG_VARS['py_version'] = _PY_VERSION _CONFIG_VARS['py_version_short'] = _PY_VERSION_SHORT _CONFIG_VARS['py_version_nodot'] = _PY_VERSION_SHORT_NO_DOT diff --git a/meta/recipes-devtools/python/python3/0001-Makefile.pre-use-qemu-wrapper-when-gathering-profile.patch b/meta/recipes-devtools/python/python3/0001-Makefile.pre-use-qemu-wrapper-when-gathering-profile.patch index d3f46c372a..dd5a87cd54 100644 --- a/meta/recipes-devtools/python/python3/0001-Makefile.pre-use-qemu-wrapper-when-gathering-profile.patch +++ b/meta/recipes-devtools/python/python3/0001-Makefile.pre-use-qemu-wrapper-when-gathering-profile.patch @@ -1,4 +1,4 @@ -From d6f77e3a934616d1f6c083b7144c50a32e08b70a Mon Sep 17 00:00:00 2001 +From 61b446b8554b91b93f8ae40c654abf9d8a77145d Mon Sep 17 00:00:00 2001 From: Alexander Kanavin Date: Wed, 30 Jan 2019 12:41:04 +0100 Subject: [PATCH] Makefile.pre: use qemu wrapper when gathering profile data @@ -15,10 +15,10 @@ Signed-off-by: Trevor Gamblin 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Makefile.pre.in b/Makefile.pre.in -index 526d500..a7e536d 100644 +index 95fefcc..24ca285 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in -@@ -864,8 +864,7 @@ profile-run-stamp: +@@ -879,8 +879,7 @@ profile-run-stamp: # enabled. $(MAKE) profile-gen-stamp # Next, run the profile task to generate the profile information. 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 index 0864f23926..6cc7ae187e 100644 --- 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 @@ -1,4 +1,4 @@ -From c608cb4b3c8c31f1aa25ad1264ff58733fb99769 Mon Sep 17 00:00:00 2001 +From f1e23d641d6edb5bb82cd24272b7b1f8c42c64dd Mon Sep 17 00:00:00 2001 From: Wentao Zhang Date: Mon, 20 Mar 2023 13:39:52 +0800 Subject: [PATCH] Update test_sysconfig for posix_user purelib @@ -22,10 +22,10 @@ Signed-off-by: Wentao Zhang 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/test/test_sysconfig.py b/Lib/test/test_sysconfig.py -index 1fe4b68..383142a 100644 +index ce3a3c6..4eb65fb 100644 --- a/Lib/test/test_sysconfig.py +++ b/Lib/test/test_sysconfig.py -@@ -435,7 +435,7 @@ class TestSysConfig(unittest.TestCase, VirtualEnvironmentMixin): +@@ -432,7 +432,7 @@ class TestSysConfig(unittest.TestCase, VirtualEnvironmentMixin): expected = os.path.normpath(global_path.replace(base, user, 1)) # bpo-44860: platlib of posix_user doesn't use sys.platlibdir, # whereas posix_prefix does. diff --git a/meta/recipes-devtools/python/python3/0001-configure-clear-RUNSHARED-when-cross-compiling.patch b/meta/recipes-devtools/python/python3/0001-configure-clear-RUNSHARED-when-cross-compiling.patch new file mode 100644 index 0000000000..f5f09e81ee --- /dev/null +++ b/meta/recipes-devtools/python/python3/0001-configure-clear-RUNSHARED-when-cross-compiling.patch @@ -0,0 +1,46 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Jaipaul Cheernam +Date: Tue, 27 Oct 2026 10:00:00 +0000 +Subject: [PATCH] configure: clear RUNSHARED when cross compiling + +Since 3.15 the checksharedmods target runs the host build python with the +target LD_LIBRARY_PATH, which breaks musl cross builds (host cannot load +libc.so). Clear RUNSHARED for cross builds as before. + +Upstream-Status: Submitted [https://github.com/python/cpython/issues/160924] +Signed-off-by: Jaipaul Cheernam +--- + configure | 4 ++++ + configure.ac | 4 ++++ + 2 files changed, 8 insertions(+) + +diff --git a/configure b/configure +index 6f7ff1b..9702135 100755 +--- a/configure ++++ b/configure +@@ -7867,6 +7867,10 @@ fi + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LDLIBRARY" >&5 + printf "%s\n" "$LDLIBRARY" >&6; } + ++if test "$cross_compiling" = yes; then ++ RUNSHARED= ++fi ++ + # HOSTRUNNER - Program to run CPython for the host platform + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking HOSTRUNNER" >&5 + printf %s "checking HOSTRUNNER... " >&6; } +diff --git a/configure.ac b/configure.ac +index 9923805..9e86057 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1670,6 +1670,10 @@ else # shared is disabled + fi + AC_MSG_RESULT([$LDLIBRARY]) + ++if test "$cross_compiling" = yes; then ++ RUNSHARED= ++fi ++ + # HOSTRUNNER - Program to run CPython for the host platform + AC_MSG_CHECKING([HOSTRUNNER]) + if test -z "$HOSTRUNNER" diff --git a/meta/recipes-devtools/python/python3/0001-gh-146207-Add-support-for-OpenSSL-4.0.0.patch b/meta/recipes-devtools/python/python3/0001-gh-146207-Add-support-for-OpenSSL-4.0.0.patch deleted file mode 100644 index 37f55de65c..0000000000 --- a/meta/recipes-devtools/python/python3/0001-gh-146207-Add-support-for-OpenSSL-4.0.0.patch +++ /dev/null @@ -1,254 +0,0 @@ -From 3364e7e62fa24d0e19133fb0f90b1c24ef1110c5 Mon Sep 17 00:00:00 2001 -From: Victor Stinner -Date: Wed, 25 Mar 2026 07:44:47 +0100 -Subject: [PATCH] gh-146207: Add support for OpenSSL 4.0.0 alpha1 (#146217) - -OpenSSL 4.0.0 alpha1 removed these functions: - -* SSLv3_method() -* TLSv1_method() -* TLSv1_1_method() -* TLSv1_2_method() - -Other changes: - -* Update test_openssl_version(). -* Update multissltests.py for OpenSSL 4. -* Add const qualifier to fix compiler warnings. - -Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com> -Signed-off-by: Victor Stinner - -Upstream-Status: Backport [https://github.com/python/cpython/commit/3364e7e62fa24d0e19133fb0f90b1c24ef1110c5] -Signed-off-by: Jaipaul Cheernam ---- - Lib/test/test_ssl.py | 52 ++++++++++++++++++++------------------ - Modules/_ssl.c | 27 ++++++++++++++++---- - Modules/_ssl/cert.c | 3 ++- - Tools/ssl/multissltests.py | 7 ++++- - 4 files changed, 58 insertions(+), 31 deletions(-) - -diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py -index dc795c6bd8a..61355927296 100644 ---- a/Lib/test/test_ssl.py -+++ b/Lib/test/test_ssl.py -@@ -439,7 +439,7 @@ class BasicSocketTests(unittest.TestCase): - ssl.OP_NO_COMPRESSION - self.assertEqual(ssl.HAS_SNI, True) - self.assertEqual(ssl.HAS_ECDH, True) -- self.assertEqual(ssl.HAS_TLSv1_2, True) -+ self.assertIsInstance(ssl.HAS_TLSv1_2, bool) - self.assertEqual(ssl.HAS_TLSv1_3, True) - ssl.OP_NO_SSLv2 - ssl.OP_NO_SSLv3 -@@ -630,11 +630,11 @@ class BasicSocketTests(unittest.TestCase): - # Some sanity checks follow - # >= 1.1.1 - self.assertGreaterEqual(n, 0x10101000) -- # < 4.0 -- self.assertLess(n, 0x40000000) -+ # < 5.0 -+ self.assertLess(n, 0x50000000) - major, minor, fix, patch, status = t - self.assertGreaterEqual(major, 1) -- self.assertLess(major, 4) -+ self.assertLess(major, 5) - self.assertGreaterEqual(minor, 0) - self.assertLess(minor, 256) - self.assertGreaterEqual(fix, 0) -@@ -700,12 +700,14 @@ class BasicSocketTests(unittest.TestCase): - ssl.OP_NO_TLSv1_2, - ssl.OP_NO_TLSv1_3 - ] -- protocols = [ -- ssl.PROTOCOL_TLSv1, -- ssl.PROTOCOL_TLSv1_1, -- ssl.PROTOCOL_TLSv1_2, -- ssl.PROTOCOL_TLS -- ] -+ protocols = [] -+ if hasattr(ssl, 'PROTOCOL_TLSv1'): -+ protocols.append(ssl.PROTOCOL_TLSv1) -+ if hasattr(ssl, 'PROTOCOL_TLSv1_1'): -+ protocols.append(ssl.PROTOCOL_TLSv1_1) -+ if hasattr(ssl, 'PROTOCOL_TLSv1_2'): -+ protocols.append(ssl.PROTOCOL_TLSv1_2) -+ protocols.append(ssl.PROTOCOL_TLS) - versions = [ - ssl.TLSVersion.SSLv3, - ssl.TLSVersion.TLSv1, -@@ -1199,6 +1201,7 @@ class ContextTests(unittest.TestCase): - ssl.TLSVersion.TLSv1, - ssl.TLSVersion.TLSv1_1, - ssl.TLSVersion.TLSv1_2, -+ ssl.TLSVersion.TLSv1_3, - ssl.TLSVersion.SSLv3, - } - ) -@@ -1212,7 +1215,7 @@ class ContextTests(unittest.TestCase): - with self.assertRaises(ValueError): - ctx.minimum_version = 42 - -- if has_tls_protocol(ssl.PROTOCOL_TLSv1_1): -+ if has_tls_protocol('PROTOCOL_TLSv1_1'): - ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1_1) - - self.assertIn( -@@ -1764,23 +1767,24 @@ class ContextTests(unittest.TestCase): - self.assertFalse(ctx.check_hostname) - self._assert_context_options(ctx) - -- if has_tls_protocol(ssl.PROTOCOL_TLSv1): -+ if has_tls_protocol('PROTOCOL_TLSv1'): - with warnings_helper.check_warnings(): - ctx = ssl._create_stdlib_context(ssl.PROTOCOL_TLSv1) - self.assertEqual(ctx.protocol, ssl.PROTOCOL_TLSv1) - self.assertEqual(ctx.verify_mode, ssl.CERT_NONE) - self._assert_context_options(ctx) - -- with warnings_helper.check_warnings(): -- ctx = ssl._create_stdlib_context( -- ssl.PROTOCOL_TLSv1_2, -- cert_reqs=ssl.CERT_REQUIRED, -- check_hostname=True -- ) -- self.assertEqual(ctx.protocol, ssl.PROTOCOL_TLSv1_2) -- self.assertEqual(ctx.verify_mode, ssl.CERT_REQUIRED) -- self.assertTrue(ctx.check_hostname) -- self._assert_context_options(ctx) -+ if has_tls_protocol('PROTOCOL_TLSv1_2'): -+ with warnings_helper.check_warnings(): -+ ctx = ssl._create_stdlib_context( -+ ssl.PROTOCOL_TLSv1_2, -+ cert_reqs=ssl.CERT_REQUIRED, -+ check_hostname=True -+ ) -+ self.assertEqual(ctx.protocol, ssl.PROTOCOL_TLSv1_2) -+ self.assertEqual(ctx.verify_mode, ssl.CERT_REQUIRED) -+ self.assertTrue(ctx.check_hostname) -+ self._assert_context_options(ctx) - - ctx = ssl._create_stdlib_context(purpose=ssl.Purpose.CLIENT_AUTH) - self.assertEqual(ctx.protocol, ssl.PROTOCOL_TLS_SERVER) -@@ -3908,10 +3912,10 @@ class ThreadedTests(unittest.TestCase): - client_options=ssl.OP_NO_TLSv1_2) - - try_protocol_combo(ssl.PROTOCOL_TLS, ssl.PROTOCOL_TLSv1_2, 'TLSv1.2') -- if has_tls_protocol(ssl.PROTOCOL_TLSv1): -+ if has_tls_protocol('PROTOCOL_TLSv1'): - try_protocol_combo(ssl.PROTOCOL_TLSv1_2, ssl.PROTOCOL_TLSv1, False) - try_protocol_combo(ssl.PROTOCOL_TLSv1, ssl.PROTOCOL_TLSv1_2, False) -- if has_tls_protocol(ssl.PROTOCOL_TLSv1_1): -+ if has_tls_protocol('PROTOCOL_TLSv1_1'): - try_protocol_combo(ssl.PROTOCOL_TLSv1_2, ssl.PROTOCOL_TLSv1_1, False) - try_protocol_combo(ssl.PROTOCOL_TLSv1_1, ssl.PROTOCOL_TLSv1_2, False) - -diff --git a/Modules/_ssl.c b/Modules/_ssl.c -index b45295b4c0c..6f75af86113 100644 ---- a/Modules/_ssl.c -+++ b/Modules/_ssl.c -@@ -136,6 +136,17 @@ static void _PySSLFixErrno(void) { - #error Unsupported OpenSSL version - #endif - -+#if (OPENSSL_VERSION_NUMBER >= 0x40000000L) -+# define OPENSSL_NO_SSL3 -+# define OPENSSL_NO_TLS1 -+# define OPENSSL_NO_TLS1_1 -+# define OPENSSL_NO_TLS1_2 -+# define OPENSSL_NO_SSL3_METHOD -+# define OPENSSL_NO_TLS1_METHOD -+# define OPENSSL_NO_TLS1_1_METHOD -+# define OPENSSL_NO_TLS1_2_METHOD -+#endif -+ - /* OpenSSL API 1.1.0+ does not include version methods */ - #ifndef OPENSSL_NO_SSL3_METHOD - extern const SSL_METHOD *SSLv3_method(void); -@@ -1137,7 +1148,7 @@ _asn1obj2py(_sslmodulestate *state, const ASN1_OBJECT *name, int no_name) - - static PyObject * - _create_tuple_for_attribute(_sslmodulestate *state, -- ASN1_OBJECT *name, ASN1_STRING *value) -+ const ASN1_OBJECT *name, const ASN1_STRING *value) - { - Py_ssize_t buflen; - PyObject *pyattr; -@@ -1166,16 +1177,16 @@ _create_tuple_for_attribute(_sslmodulestate *state, - } - - static PyObject * --_create_tuple_for_X509_NAME (_sslmodulestate *state, X509_NAME *xname) -+_create_tuple_for_X509_NAME(_sslmodulestate *state, const X509_NAME *xname) - { - PyObject *dn = NULL; /* tuple which represents the "distinguished name" */ - PyObject *rdn = NULL; /* tuple to hold a "relative distinguished name" */ - PyObject *rdnt; - PyObject *attr = NULL; /* tuple to hold an attribute */ - int entry_count = X509_NAME_entry_count(xname); -- X509_NAME_ENTRY *entry; -- ASN1_OBJECT *name; -- ASN1_STRING *value; -+ const X509_NAME_ENTRY *entry; -+ const ASN1_OBJECT *name; -+ const ASN1_STRING *value; - int index_counter; - int rdn_level = -1; - int retcode; -@@ -6599,9 +6610,15 @@ sslmodule_init_constants(PyObject *m) - ADD_INT_CONST("PROTOCOL_TLS", PY_SSL_VERSION_TLS); - ADD_INT_CONST("PROTOCOL_TLS_CLIENT", PY_SSL_VERSION_TLS_CLIENT); - ADD_INT_CONST("PROTOCOL_TLS_SERVER", PY_SSL_VERSION_TLS_SERVER); -+#ifndef OPENSSL_NO_TLS1 - ADD_INT_CONST("PROTOCOL_TLSv1", PY_SSL_VERSION_TLS1); -+#endif -+#ifndef OPENSSL_NO_TLS1_1 - ADD_INT_CONST("PROTOCOL_TLSv1_1", PY_SSL_VERSION_TLS1_1); -+#endif -+#ifndef OPENSSL_NO_TLS1_2 - ADD_INT_CONST("PROTOCOL_TLSv1_2", PY_SSL_VERSION_TLS1_2); -+#endif - - #define ADD_OPTION(NAME, VALUE) if (sslmodule_add_option(m, NAME, (VALUE)) < 0) return -1 - -diff --git a/Modules/_ssl/cert.c b/Modules/_ssl/cert.c -index f2e7be89668..061b0fb3171 100644 ---- a/Modules/_ssl/cert.c -+++ b/Modules/_ssl/cert.c -@@ -128,7 +128,8 @@ _ssl_Certificate_get_info_impl(PySSLCertificate *self) - } - - static PyObject* --_x509name_print(_sslmodulestate *state, X509_NAME *name, int indent, unsigned long flags) -+_x509name_print(_sslmodulestate *state, const X509_NAME *name, -+ int indent, unsigned long flags) - { - PyObject *res; - BIO *biobuf; -diff --git a/Tools/ssl/multissltests.py b/Tools/ssl/multissltests.py -index 3b4507c6771..48207e5330f 100755 ---- a/Tools/ssl/multissltests.py -+++ b/Tools/ssl/multissltests.py -@@ -422,9 +422,11 @@ class BuildOpenSSL(AbstractBuilder): - def _post_install(self): - if self.version.startswith("3."): - self._post_install_3xx() -+ elif self.version.startswith("4."): -+ self._post_install_4xx() - - def _build_src(self, config_args=()): -- if self.version.startswith("3."): -+ if self.version.startswith(("3.", "4.")): - config_args += ("enable-fips",) - super()._build_src(config_args) - -@@ -440,6 +442,9 @@ class BuildOpenSSL(AbstractBuilder): - lib64 = self.lib_dir + "64" - os.symlink(lib64, self.lib_dir) - -+ def _post_install_4xx(self): -+ self._post_install_3xx() -+ - @property - def short_version(self): - """Short version for OpenSSL download URL""" diff --git a/meta/recipes-devtools/python/python3/0001-gh-160881-Fix-test_is_python_process_non_python_subp.patch b/meta/recipes-devtools/python/python3/0001-gh-160881-Fix-test_is_python_process_non_python_subp.patch new file mode 100644 index 0000000000..581dad9b2e --- /dev/null +++ b/meta/recipes-devtools/python/python3/0001-gh-160881-Fix-test_is_python_process_non_python_subp.patch @@ -0,0 +1,50 @@ +From 1db73a72041cdbbeb4ddef01595f25129a8138f7 Mon Sep 17 00:00:00 2001 +From: Tom Greenslade +Date: Thu, 29 Oct 2026 14:17:40 +0000 +Subject: [PATCH] gh-160881: Fix test_is_python_process_non_python_subprocess + with multicall sleep + +_wait_for_process_exec() waited for /proc/{pid}/exe to be named "sleep", +which never happens when sleep is a multicall binary (BusyBox on Alpine, +coreutils-single on RHEL UBI9). Wait instead until the child's executable +differs from the parent's, which means the child has called exec(). + +Co-Authored-By: Claude Opus 5.5 + +Upstream-Status: Submitted [https://github.com/python/cpython/pull/160901] +Signed-off-by: Jaipaul Cheernam +--- + .../test_sampling_profiler/test_children.py | 10 ++++++---- + 1 file changed, 6 insertions(+), 4 deletions(-) + +diff --git a/Lib/test/test_profiling/test_sampling_profiler/test_children.py b/Lib/test/test_profiling/test_sampling_profiler/test_children.py +index 4b27c6dbb1896c1..9a8d529c4b82444 100644 +--- a/Lib/test/test_profiling/test_sampling_profiler/test_children.py ++++ b/Lib/test/test_profiling/test_sampling_profiler/test_children.py +@@ -85,12 +85,14 @@ def reader(): + return result[0] + + +-def _wait_for_process_exec(proc, name, timeout): ++def _wait_for_process_exec(proc, timeout): + # Wait until a child process calls exec() to replace the forked process +- # executable. Raise AssertionError on timeout. ++ # executable. Don't check the executable name: it can be a multicall ++ # binary such as /bin/busybox. Raise AssertionError on timeout. ++ parent_exe = os.readlink("/proc/self/exe") + for _ in sleeping_retry(timeout, max_delay=0.1): + exe = os.readlink(f"/proc/{proc.pid}/exe") +- if os.path.basename(exe) == name: ++ if exe != parent_exe: + break + + +@@ -625,7 +627,7 @@ def test_is_python_process_non_python_subprocess(self): + ) + + try: +- _wait_for_process_exec(proc, "sleep", SHORT_TIMEOUT) ++ _wait_for_process_exec(proc, SHORT_TIMEOUT) + + self.assertFalse( + is_python_process(proc.pid), diff --git a/meta/recipes-devtools/python/python3/0001-prefer-valid-entrypoints.patch b/meta/recipes-devtools/python/python3/0001-prefer-valid-entrypoints.patch index 525a2ca700..e504325592 100644 --- a/meta/recipes-devtools/python/python3/0001-prefer-valid-entrypoints.patch +++ b/meta/recipes-devtools/python/python3/0001-prefer-valid-entrypoints.patch @@ -1,4 +1,4 @@ -From 8d7fcf04c6513841c7985e64b746b1ef5de0c426 Mon Sep 17 00:00:00 2001 +From 57c51c6746c1efdae1654df443c5d23351b2d131 Mon Sep 17 00:00:00 2001 From: Ross Burton Date: Fri, 17 Apr 2026 16:53:42 +0100 Subject: [PATCH] prefer valid entrypoints @@ -16,10 +16,10 @@ Signed-off-by: Ross Burton 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/importlib/metadata/__init__.py b/Lib/importlib/metadata/__init__.py -index 085378c..ff5cae4 100644 +index 32f4b7d..705f245 100644 --- a/Lib/importlib/metadata/__init__.py +++ b/Lib/importlib/metadata/__init__.py -@@ -1016,7 +1016,7 @@ def entry_points(**params) -> EntryPoints: +@@ -1120,7 +1120,7 @@ def entry_points(**params) -> EntryPoints: :return: EntryPoints for all installed packages. """ eps = itertools.chain.from_iterable( 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 index 7807827d9a..e24d6b63b1 100644 --- 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 @@ -1,4 +1,4 @@ -From c10d1b295a9fb93836830cce441da3f22e5c7cd7 Mon Sep 17 00:00:00 2001 +From 07c5b43f29e93825e1c0b0fcebf40dc5971d438f Mon Sep 17 00:00:00 2001 From: Alexander Kanavin Date: Sun, 12 Sep 2021 21:44:36 +0200 Subject: [PATCH] sysconfig.py: use platlibdir also for purelib @@ -13,7 +13,7 @@ Signed-off-by: Alexander Kanavin 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/sysconfig/__init__.py b/Lib/sysconfig/__init__.py -index faf8273..0a8bcc0 100644 +index b931551..924401c 100644 --- a/Lib/sysconfig/__init__.py +++ b/Lib/sysconfig/__init__.py @@ -29,7 +29,7 @@ _INSTALL_SCHEMES = { 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 index a60d082e2f..12d87168ca 100644 --- 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 @@ -1,4 +1,4 @@ -From f0ac5b479b99bfb7f5e937a941b31a596f4caafc Mon Sep 17 00:00:00 2001 +From c8d8b7aaf96faa50d8bf20c59ed31e7c6a8d698c Mon Sep 17 00:00:00 2001 From: Mingli Yu Date: Mon, 5 Aug 2019 15:57:39 +0800 Subject: [PATCH] test_locale.py: correct the test output format @@ -31,10 +31,10 @@ Signed-off-by: Mingli Yu 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/test/test_locale.py b/Lib/test/test_locale.py -index f918435..1910a43 100644 +index a06c600..38b91d0 100644 --- a/Lib/test/test_locale.py +++ b/Lib/test/test_locale.py -@@ -499,7 +499,7 @@ class TestRealLocales(unittest.TestCase): +@@ -500,7 +500,7 @@ class TestRealLocales(unittest.TestCase): self.skipTest('test needs Turkish locale') loc = locale.getlocale(locale.LC_CTYPE) if verbose: diff --git a/meta/recipes-devtools/python/python3/0002-gh-148292-Update-_ssl._SSLSocket-for-OpenSSL-4.patch b/meta/recipes-devtools/python/python3/0002-gh-148292-Update-_ssl._SSLSocket-for-OpenSSL-4.patch deleted file mode 100644 index 1b9a7fc942..0000000000 --- a/meta/recipes-devtools/python/python3/0002-gh-148292-Update-_ssl._SSLSocket-for-OpenSSL-4.patch +++ /dev/null @@ -1,234 +0,0 @@ -From 3c2a3014af7d73cc34f2498f60fdf863d9bc7c6c Mon Sep 17 00:00:00 2001 -From: Victor Stinner -Date: Mon, 4 May 2026 13:52:57 +0200 -Subject: [PATCH] gh-148292: Update _ssl._SSLSocket for OpenSSL 4 (#149102) - -The _SSLSocket object now remembers if it gets an EOF error. In this -case, read(), sendfile(), write() and do_handshake method calls fail -with SSLEOFError without calling the underlying OpenSSL function. - -Co-authored-by: Gregory P. Smith -(cherry picked from commit 7b7fa3f9bf3d7cdf3eb669d02b386e05b39c402a) - -Upstream-Status: Backport [https://github.com/python/cpython/commit/3c2a3014af7d] - -Note: This is from the unmerged CPython PR #149783 which backports -OpenSSL 4.0 support to the 3.14 branch. Upstream deferred merging -until after Python 3.15.1 is released. - -Signed-off-by: Jaipaul Cheernam ---- - Lib/test/test_ssl.py | 82 +++++++++++++++++++ - ...-04-28-17-47-55.gh-issue-148292.oIq3ml.rst | 7 ++ - Modules/_ssl.c | 42 ++++++++++ - 3 files changed, 131 insertions(+) - create mode 100644 Misc/NEWS.d/next/Library/2026-04-28-17-47-55.gh-issue-148292.oIq3ml.rst - -diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py -index 965dbc36f096499..03d9e3f9e5e96b5 100644 ---- a/Lib/test/test_ssl.py -+++ b/Lib/test/test_ssl.py -@@ -3039,6 +3039,36 @@ class ThreadedEchoServer(threading.Thread): - def stop(self): - self.active = False - -+class TestEOFServer(threading.Thread): -+ def __init__(self): -+ super().__init__() -+ self.listening = threading.Event() -+ self.address = None -+ -+ def run(self): -+ context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH) -+ context.load_cert_chain(CERTFILE) -+ server_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) -+ with server_sock: -+ server_sock.settimeout(support.SHORT_TIMEOUT) -+ server_sock.bind((HOST, 0)) -+ server_sock.listen(5) -+ -+ self.address = server_sock.getsockname() -+ self.listening.set() -+ -+ sock, addr = server_sock.accept() -+ sslconn = context.wrap_socket(sock, server_side=True) -+ with sslconn: -+ request = b'' -+ while chunk := sslconn.recv(1024): -+ request += chunk -+ if b'\n' in chunk: -+ break -+ -+ sslconn.sendall(b'server\n') -+ sslconn.shutdown(socket.SHUT_WR) -+ - class AsyncoreEchoServer(threading.Thread): - - # this one's based on asyncore.dispatcher -@@ -5079,6 +5109,58 @@ class ThreadedTests(unittest.TestCase): - if cm.exc_value is not None: - raise cm.exc_value - -+ def test_got_eof(self): -+ # gh-148292: Test that _ssl._SSLSocket behaves the same on all OpenSSL -+ # versions on calling methods after EOF (after the first SSLEOFError). -+ -+ server = TestEOFServer() -+ server.start() -+ if not server.listening.wait(support.SHORT_TIMEOUT): -+ raise RuntimeError("server took too long") -+ self.addCleanup(server.join) -+ -+ context = ssl.create_default_context(cafile=CERTFILE) -+ sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) -+ sock.settimeout(support.SHORT_TIMEOUT) -+ sock.connect(server.address) -+ sslsock = context.wrap_socket(sock, server_hostname='localhost') -+ with sslsock: -+ sslsock.sendall(b'client\n') -+ # test the _ssl._SSLSocket object, not ssl.SSLSocket -+ sslobj = sslsock._sslobj -+ -+ data = sslobj.read(1024) -+ self.assertEqual(data, b'server\n') -+ -+ # The second read gets EOF error and sets got_eof_error to 1 -+ with self.assertRaises(ssl.SSLEOFError): -+ sslobj.read(1024) -+ -+ # Following read(), sendfile(), write() and do_handshake() calls -+ # must raise SSLEOFError -+ with self.assertRaises(ssl.SSLEOFError): -+ # The _SSLSocket remembers the previous EOF error -+ # and raises again SSLEOFError -+ sslobj.read(1024) -+ if hasattr(sslobj, 'sendfile'): -+ with open(__file__, "rb") as fp: -+ with self.assertRaises(ssl.SSLEOFError): -+ sslobj.sendfile(fp.fileno(), 0, 1) -+ with self.assertRaises(ssl.SSLEOFError): -+ sslobj.write(b'client2\n') -+ with self.assertRaises(ssl.SSLEOFError): -+ sslsock.do_handshake() -+ -+ self.assertEqual(sslsock.pending(), 0) -+ try: -+ sslsock.shutdown(socket.SHUT_WR) -+ except OSError as exc: -+ self.assertEqual(exc.errno, errno.ENOTCONN) -+ else: -+ # On Windows and on OpenSSL 1.1.1, shutdown() doesn't -+ # raise an error -+ pass -+ - - @unittest.skipUnless(has_tls_version('TLSv1_3') and ssl.HAS_PHA, - "Test needs TLS 1.3 PHA") -diff --git a/Misc/NEWS.d/next/Library/2026-04-28-17-47-55.gh-issue-148292.oIq3ml.rst b/Misc/NEWS.d/next/Library/2026-04-28-17-47-55.gh-issue-148292.oIq3ml.rst -new file mode 100644 -index 000000000000000..e1f308df5a678e6 ---- /dev/null -+++ b/Misc/NEWS.d/next/Library/2026-04-28-17-47-55.gh-issue-148292.oIq3ml.rst -@@ -0,0 +1,7 @@ -+:mod:`ssl`: Update :class:`ssl.SSLSocket` and :class:`ssl.SSLObject` for -+OpenSSL 4. The classes now remember if they get a :exc:`ssl.SSLEOFError`. In this -+case, following :meth:`~ssl.SSLSocket.read`, :meth:`!sendfile`, -+:meth:`~ssl.SSLSocket.write`, and :meth:`~ssl.SSLSocket.do_handshake` calls -+raise :exc:`ssl.SSLEOFError` without calling the underlying OpenSSL function. -+Thanks to that, :class:`ssl.SSLSocket` behaves the same on all OpenSSL versions -+on EOF. Patch by Victor Stinner. -diff --git a/Modules/_ssl.c b/Modules/_ssl.c -index 1603d0ffd559559..376df32b7cb4bd6 100644 ---- a/Modules/_ssl.c -+++ b/Modules/_ssl.c -@@ -352,6 +352,16 @@ typedef struct { - * and shutdown methods check for chained exceptions. - */ - PyObject *exc; -+ // gh-148292: If non-zero, read(), sendfile(), write() and do_handshake() -+ // methods raise SSLEOFError without calling the underlying OpenSSL -+ // function. Set to 1 on PY_SSL_ERROR_EOF error. -+ // -+ // On OpenSSL 4, if SSL_read_ex() fails with -+ // SSL_R_UNEXPECTED_EOF_WHILE_READING, the following SSL_read_ex() call -+ // fails with a generic protocol error (ERR_peek_last_error() returns 0). -+ // Use got_eof_error to have the same behavior on OpenSSL 4 and newer and -+ // on OpenSSL 3 and older. -+ int got_eof_error; - } PySSLSocket; - - #define PySSLSocket_CAST(op) ((PySSLSocket *)(op)) -@@ -499,6 +509,10 @@ fill_and_set_sslerror(_sslmodulestate *state, - PyObject *init_value, *msg, *key; - PyUnicodeWriter *writer = NULL; - -+ if (ssl_errno == PY_SSL_ERROR_EOF && sslsock != NULL) { -+ sslsock->got_eof_error = 1; -+ } -+ - if (errcode != 0) { - int lib, reason; - -@@ -654,6 +668,18 @@ PySSL_ChainExceptions(PySSLSocket *sslsock) { - return -1; - } - -+ -+static void -+set_eof_error(PySSLSocket *sslsock) -+{ -+ _sslmodulestate *state = get_state_sock(sslsock); -+ fill_and_set_sslerror(state, sslsock, state->PySSLEOFErrorObject, -+ PY_SSL_ERROR_EOF, -+ "EOF occurred in violation of protocol", -+ __LINE__, 0); -+} -+ -+ - static PyObject * - PySSL_SetError(PySSLSocket *sslsock, const char *filename, int lineno) - { -@@ -901,6 +927,7 @@ newPySSLSocket(PySSLContext *sslctx, PySocketSockObject *sock, - self->server_hostname = NULL; - self->err = err; - self->exc = NULL; -+ self->got_eof_error = 0; - - /* Make sure the SSL error state is initialized */ - ERR_clear_error(); -@@ -1043,6 +1070,11 @@ _ssl__SSLSocket_do_handshake_impl(PySSLSocket *self) - BIO_set_nbio(SSL_get_wbio(self->ssl), nonblocking); - } - -+ if (self->got_eof_error) { -+ set_eof_error(self); -+ goto error; -+ } -+ - timeout = GET_SOCKET_TIMEOUT(sock); - has_timeout = (timeout > 0); - if (has_timeout) { -@@ -2514,6 +2546,11 @@ _ssl__SSLSocket_write_impl(PySSLSocket *self, Py_buffer *b) - BIO_set_nbio(SSL_get_wbio(self->ssl), nonblocking); - } - -+ if (self->got_eof_error) { -+ set_eof_error(self); -+ goto error; -+ } -+ - timeout = GET_SOCKET_TIMEOUT(sock); - has_timeout = (timeout > 0); - if (has_timeout) { -@@ -2654,6 +2691,11 @@ _ssl__SSLSocket_read_impl(PySSLSocket *self, Py_ssize_t len, - Py_INCREF(sock); - } - -+ if (self->got_eof_error) { -+ set_eof_error(self); -+ goto error; -+ } -+ - if (!group_right_1) { - dest = PyBytes_FromStringAndSize(NULL, len); - if (dest == NULL) diff --git a/meta/recipes-devtools/python/python3/0003-gh-148292-Remove-shutdown-test-in-test_ssl.test_got_eof.patch b/meta/recipes-devtools/python/python3/0003-gh-148292-Remove-shutdown-test-in-test_ssl.test_got_eof.patch deleted file mode 100644 index 59742290e8..0000000000 --- a/meta/recipes-devtools/python/python3/0003-gh-148292-Remove-shutdown-test-in-test_ssl.test_got_eof.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 81911909bc439d6de8ce6a173b0691b3c58e9e1a Mon Sep 17 00:00:00 2001 -From: Victor Stinner -Date: Mon, 4 May 2026 16:20:25 +0200 -Subject: [PATCH] gh-148292: Remove shutdown() test in test_ssl.test_got_eof() - (#149366) - -The shutdown() behavior depends too much on the operating system and -it's unrelated to the got_eof_error change. - -(cherry picked from commit 1e21cf6fee3830012e458c0fe5dbc6fcd45ace92) - -Upstream-Status: Backport [https://github.com/python/cpython/commit/81911909bc43] - -Note: This is from the unmerged CPython PR #149783 which backports -OpenSSL 4.0 support to the 3.14 branch. Upstream deferred merging -until after Python 3.15.1 is released. - -Signed-off-by: Jaipaul Cheernam ---- - Lib/test/test_ssl.py | 8 -------- - 1 file changed, 8 deletions(-) - -diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py -index 03d9e3f9e5e96b5..6445f122b4272be 100644 ---- a/Lib/test/test_ssl.py -+++ b/Lib/test/test_ssl.py -@@ -5152,14 +5152,6 @@ class ThreadedTests(unittest.TestCase): - sslsock.do_handshake() - - self.assertEqual(sslsock.pending(), 0) -- try: -- sslsock.shutdown(socket.SHUT_WR) -- except OSError as exc: -- self.assertEqual(exc.errno, errno.ENOTCONN) -- else: -- # On Windows and on OpenSSL 1.1.1, shutdown() doesn't -- # raise an error -- pass - - - @unittest.skipUnless(has_tls_version('TLSv1_3') and ssl.HAS_PHA, diff --git a/meta/recipes-devtools/python/python3/makerace.patch b/meta/recipes-devtools/python/python3/makerace.patch index 7167d5b4e8..83ed34d986 100644 --- a/meta/recipes-devtools/python/python3/makerace.patch +++ b/meta/recipes-devtools/python/python3/makerace.patch @@ -1,4 +1,4 @@ -From b41557f570ff4451c477669d6ca5bfacabe21c66 Mon Sep 17 00:00:00 2001 +From be6588c8090edae5379f14dd76f146d383b25e50 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Tue, 13 Jul 2021 23:19:29 +0100 Subject: [PATCH] python3: Fix make race @@ -17,10 +17,10 @@ Signed-off-by: Richard Purdie 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile.pre.in b/Makefile.pre.in -index a7e536d..e946018 100644 +index 24ca285..a1d59e4 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in -@@ -2750,7 +2750,7 @@ COMPILEALL_OPTS=-j0 +@@ -2844,7 +2844,7 @@ COMPILEALL_OPTS=-j0 TEST_MODULES=@TEST_MODULES@ .PHONY: libinstall diff --git a/meta/recipes-devtools/python/python3/python3-manifest.json b/meta/recipes-devtools/python/python3/python3-manifest.json index 50fdf5d0ea..1919e32957 100644 --- a/meta/recipes-devtools/python/python3/python3-manifest.json +++ b/meta/recipes-devtools/python/python3/python3-manifest.json @@ -117,7 +117,7 @@ "${libdir}/python${PYTHON_MAJMIN}/asyncio", "${libdir}/python${PYTHON_MAJMIN}/concurrent", "${libdir}/python${PYTHON_MAJMIN}/concurrent/futures", - "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_asyncio.*.so" + "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_remote_debugging.*.so" ], "cached": [] }, @@ -129,9 +129,7 @@ "files": [ "${libdir}/python${PYTHON_MAJMIN}/wave.py" ], - "cached": [ - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/wave.*.pyc" - ] + "cached": [] }, "codecs": { "summary": "Python codec", @@ -153,11 +151,7 @@ "${libdir}/python${PYTHON_MAJMIN}/filecmp.py", "${libdir}/python${PYTHON_MAJMIN}/py_compile.py" ], - "cached": [ - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/compileall.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/filecmp.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/py_compile.*.pyc" - ] + "cached": [] }, "compression": { "summary": "Python high-level compression support", @@ -165,20 +159,16 @@ "core" ], "files": [ + "${libdir}/python${PYTHON_MAJMIN}/compression/", "${libdir}/python${PYTHON_MAJMIN}/gzip.py", "${libdir}/python${PYTHON_MAJMIN}/tarfile.py", - "${libdir}/python${PYTHON_MAJMIN}/zipfile/", - "${libdir}/python${PYTHON_MAJMIN}/compression/", - "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_zstd.*.so" + "${libdir}/python${PYTHON_MAJMIN}/zipfile/" ], - "cached": [ - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/gzip.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/tarfile.*.pyc" - ] + "cached": [] }, "core": { "summary": "Python interpreter and core modules", - "rdepends": ["compression"], + "rdepends": [], "files": [ "${bindir}/python${PYTHON_MAJMIN}", "${bindir}/python${PYTHON_MAJMIN}.real", @@ -195,6 +185,7 @@ "${libdir}/python${PYTHON_MAJMIN}/_colorize.py", "${libdir}/python${PYTHON_MAJMIN}/_compression.py", "${libdir}/python${PYTHON_MAJMIN}/_markupbase.py", + "${libdir}/python${PYTHON_MAJMIN}/_missing_stdlib_info.py", "${libdir}/python${PYTHON_MAJMIN}/_opcode_metadata.py", "${libdir}/python${PYTHON_MAJMIN}/_py_warnings.py", "${libdir}/python${PYTHON_MAJMIN}/_pyrepl", @@ -214,6 +205,11 @@ "${libdir}/python${PYTHON_MAJMIN}/codeop.py", "${libdir}/python${PYTHON_MAJMIN}/collections", "${libdir}/python${PYTHON_MAJMIN}/collections/abc.py", + "${libdir}/python${PYTHON_MAJMIN}/compression", + "${libdir}/python${PYTHON_MAJMIN}/compression/_common", + "${libdir}/python${PYTHON_MAJMIN}/compression/_common/_streams.py", + "${libdir}/python${PYTHON_MAJMIN}/compression/zstd", + "${libdir}/python${PYTHON_MAJMIN}/compression/zstd/_zstdfile.py", "${libdir}/python${PYTHON_MAJMIN}/configparser.py", "${libdir}/python${PYTHON_MAJMIN}/contextlib.py", "${libdir}/python${PYTHON_MAJMIN}/copy.py", @@ -253,11 +249,14 @@ "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_bz2.*.so", "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_csv.*.so", "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_heapq.*.so", + "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_interpreters.*.so", "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_lzma.*.so", + "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_math_integer.*.so", "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_opcode.*.so", "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_posixsubprocess.*.so", "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_struct.*.so", "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_typing.*.so", + "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_zstd.*.so", "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/array.*.so", "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/binascii.*.so", "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/fcntl.*.so", @@ -283,6 +282,8 @@ "${libdir}/python${PYTHON_MAJMIN}/pathlib.py", "${libdir}/python${PYTHON_MAJMIN}/pathlib/_abc.py", "${libdir}/python${PYTHON_MAJMIN}/pathlib/_local.py", + "${libdir}/python${PYTHON_MAJMIN}/pathlib/_os.py", + "${libdir}/python${PYTHON_MAJMIN}/pathlib/types.py", "${libdir}/python${PYTHON_MAJMIN}/pkgutil.py", "${libdir}/python${PYTHON_MAJMIN}/platform.py", "${libdir}/python${PYTHON_MAJMIN}/posixpath.py", @@ -439,18 +440,18 @@ "${libdir}/python${PYTHON_MAJMIN}/hashlib.py", "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_blake2.*.so", "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_hashlib.*.so", + "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_hmac.*.so", "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_md5.*.so", "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_sha1.*.so", "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_sha2.*.so", "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_sha3.*.so" ], - "cached": [ - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/hashlib.*.pyc" - ] + "cached": [] }, "ctypes": { "summary": "Python C types support", "rdepends": [ + "compression", "core", "io", "math" @@ -482,14 +483,9 @@ "files": [ "${libdir}/python${PYTHON_MAJMIN}/_strptime.py", "${libdir}/python${PYTHON_MAJMIN}/calendar.py", - "${libdir}/python${PYTHON_MAJMIN}/datetime.py", - "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_datetime.*.so" + "${libdir}/python${PYTHON_MAJMIN}/datetime.py" ], - "cached": [ - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_strptime.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/calendar.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/datetime.*.pyc" - ] + "cached": [] }, "db": { "summary": "Python file-based database support", @@ -505,7 +501,15 @@ "debugger": { "summary": "Python debugger", "rdepends": [ + "asyncio", + "compression", "core", + "io", + "json", + "logging", + "math", + "netclient", + "numbers", "pprint", "shell", "stringold" @@ -514,10 +518,7 @@ "${libdir}/python${PYTHON_MAJMIN}/bdb.py", "${libdir}/python${PYTHON_MAJMIN}/pdb.py" ], - "cached": [ - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/bdb.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pdb.*.pyc" - ] + "cached": [] }, "dev": { "cached": [], @@ -547,16 +548,22 @@ "files": [ "${libdir}/python${PYTHON_MAJMIN}/difflib.py" ], - "cached": [ - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/difflib.*.pyc" - ] + "cached": [] }, "doctest": { "summary": "Python framework for running examples in docstrings", "rdepends": [ + "asyncio", + "compression", "core", "debugger", "difflib", + "io", + "json", + "logging", + "math", + "netclient", + "numbers", "pprint", "shell", "stringold", @@ -565,9 +572,7 @@ "files": [ "${libdir}/python${PYTHON_MAJMIN}/doctest.py" ], - "cached": [ - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/doctest.*.pyc" - ] + "cached": [] }, "email": { "summary": "Python email support", @@ -584,9 +589,7 @@ "${libdir}/python${PYTHON_MAJMIN}/email", "${libdir}/python${PYTHON_MAJMIN}/imaplib.py" ], - "cached": [ - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/imaplib.*.pyc" - ] + "cached": [] }, "ensurepip": { "summary": "Support for bootstrapping the pip installer", @@ -603,9 +606,7 @@ "rdepends": [ "core" ], - "files": [ - "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/fcntl.*.so" - ], + "files": [], "cached": [] }, "gdbm": { @@ -647,13 +648,12 @@ "files": [ "${libdir}/python${PYTHON_MAJMIN}/colorsys.py" ], - "cached": [ - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/colorsys.*.pyc" - ] + "cached": [] }, "io": { "summary": "Python low-level I/O", "rdepends": [ + "compression", "core", "math", "netclient" @@ -667,12 +667,7 @@ "${libdir}/python${PYTHON_MAJMIN}/ssl.py", "${libdir}/python${PYTHON_MAJMIN}/tempfile.py" ], - "cached": [ - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_pyio.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/socket.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/ssl.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/tempfile.*.pyc" - ] + "cached": [] }, "json": { "summary": "Python JSON support", @@ -715,9 +710,7 @@ "files": [ "${libdir}/python${PYTHON_MAJMIN}/mailbox.py" ], - "cached": [ - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/mailbox.*.pyc" - ] + "cached": [] }, "math": { "summary": "Python math support", @@ -729,9 +722,7 @@ "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/cmath.*.so", "${libdir}/python${PYTHON_MAJMIN}/random.py" ], - "cached": [ - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/random.*.pyc" - ] + "cached": [] }, "mime": { "summary": "Python MIME handling APIs", @@ -741,9 +732,7 @@ "files": [ "${libdir}/python${PYTHON_MAJMIN}/quopri.py" ], - "cached": [ - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/quopri.*.pyc" - ] + "cached": [] }, "mmap": { "summary": "Python memory-mapped file support", @@ -818,10 +807,12 @@ "multiprocessing": { "summary": "Python multiprocessing support", "rdepends": [ + "compression", "core", "crypt", "ctypes", "io", + "json", "math", "mmap", "netclient", @@ -861,16 +852,7 @@ "${libdir}/python${PYTHON_MAJMIN}/urllib", "${libdir}/python${PYTHON_MAJMIN}/uuid.py" ], - "cached": [ - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/base64.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/ftplib.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/hmac.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/mimetypes.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/poplib.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/secrets.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/smtplib.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/uuid.*.pyc" - ] + "cached": [] }, "netserver": { "summary": "Python Internet Protocol servers", @@ -881,9 +863,7 @@ "files": [ "${libdir}/python${PYTHON_MAJMIN}/socketserver.py" ], - "cached": [ - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/socketserver.*.pyc" - ] + "cached": [] }, "numbers": { "summary": "Python number APIs", @@ -895,17 +875,10 @@ "${libdir}/python${PYTHON_MAJMIN}/contextvars.py", "${libdir}/python${PYTHON_MAJMIN}/decimal.py", "${libdir}/python${PYTHON_MAJMIN}/fractions.py", - "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_contextvars.*.so", "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_decimal.*.so", "${libdir}/python${PYTHON_MAJMIN}/numbers.py" ], - "cached": [ - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_pydecimal.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/contextvars.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/decimal.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/fractions.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/numbers.*.pyc" - ] + "cached": [] }, "pickle": { "summary": "Python serialisation/persistence support", @@ -919,12 +892,7 @@ "${libdir}/python${PYTHON_MAJMIN}/pickletools.py", "${libdir}/python${PYTHON_MAJMIN}/shelve.py" ], - "cached": [ - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_compat_pickle.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pickle.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pickletools.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/shelve.*.pyc" - ] + "cached": [] }, "pkgutil": { "summary": "Python package extension utility support", @@ -944,9 +912,7 @@ "files": [ "${libdir}/python${PYTHON_MAJMIN}/plistlib.py" ], - "cached": [ - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/plistlib.*.pyc" - ] + "cached": [] }, "pprint": { "summary": "Python pretty-print support", @@ -956,9 +922,7 @@ "files": [ "${libdir}/python${PYTHON_MAJMIN}/pprint.py" ], - "cached": [ - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pprint.*.pyc" - ] + "cached": [] }, "profile": { "summary": "Python basic performance profiling support", @@ -969,13 +933,11 @@ "${libdir}/python${PYTHON_MAJMIN}/cProfile.py", "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_lsprof.*.so", "${libdir}/python${PYTHON_MAJMIN}/profile.py", + "${libdir}/python${PYTHON_MAJMIN}/profiling", + "${libdir}/python${PYTHON_MAJMIN}/profiling/tracing", "${libdir}/python${PYTHON_MAJMIN}/pstats.py" ], - "cached": [ - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/cProfile.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/profile.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pstats.*.pyc" - ] + "cached": [] }, "pydoc": { "summary": "Python interactive help support", @@ -987,9 +949,7 @@ "${libdir}/python${PYTHON_MAJMIN}/pydoc.py", "${libdir}/python${PYTHON_MAJMIN}/pydoc_data" ], - "cached": [ - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pydoc.*.pyc" - ] + "cached": [] }, "resource": { "summary": "Python resource control interface", @@ -1004,17 +964,13 @@ "shell": { "summary": "Python shell-like functionality", "rdepends": [ - "core", - "stringold" + "core" ], "files": [ "${libdir}/python${PYTHON_MAJMIN}/cmd.py", "${libdir}/python${PYTHON_MAJMIN}/shlex.py" ], - "cached": [ - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/cmd.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/shlex.*.pyc" - ] + "cached": [] }, "sqlite3": { "summary": "Python Sqlite3 database support", @@ -1039,9 +995,7 @@ "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_statistics.*.so", "${libdir}/python${PYTHON_MAJMIN}/statistics.py" ], - "cached": [ - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/statistics.*.pyc" - ] + "cached": [] }, "stringold": { "summary": "Common string operations", @@ -1074,10 +1028,7 @@ "${libdir}/python${PYTHON_MAJMIN}/pty.py", "${libdir}/python${PYTHON_MAJMIN}/tty.py" ], - "cached": [ - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pty.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/tty.*.pyc" - ] + "cached": [] }, "threading": { "summary": "Python threading & synchronization support", @@ -1089,10 +1040,7 @@ "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_queue.*.so", "${libdir}/python${PYTHON_MAJMIN}/queue.py" ], - "cached": [ - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_threading_local.*.pyc", - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/queue.*.pyc" - ] + "cached": [] }, "tkinter": { "summary": "Python Tcl/Tk bindings", @@ -1143,15 +1091,15 @@ "files": [ "${libdir}/python${PYTHON_MAJMIN}/getpass.py" ], - "cached": [ - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/getpass.*.pyc" - ] + "cached": [] }, "venv": { "summary": "Provides support for creating lightweight virtual environments with their own site directories, optionally isolated from system site directories.", "rdepends": [ + "compression", "core", "logging", + "shell", "stringold" ], "files": [ @@ -1202,11 +1150,10 @@ "core" ], "files": [ - "${libdir}/python${PYTHON_MAJMIN}/zipapp.py" + "${libdir}/python${PYTHON_MAJMIN}/zipapp.py", + "${libdir}/python${PYTHON_MAJMIN}/zipfile" ], - "cached": [ - "${libdir}/python${PYTHON_MAJMIN}/__pycache__/zipapp.*.pyc" - ] + "cached": [] }, "zoneinfo": { "summary": "IANA time zone support", 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 7fe18254e5..0000000000 --- a/meta/recipes-devtools/python/python3/valid-dists.patch +++ /dev/null @@ -1,164 +0,0 @@ -From 66874ce1a9f21b4b00dc85919734d58e6243ca29 Mon Sep 17 00:00:00 2001 -From: "Jason R. Coombs" -Date: Tue, 23 Jul 2024 08:36:16 -0400 -Subject: [PATCH] Prioritize valid dists to invalid dists when retrieving by - name. - -Closes python/importlib_metadata#489 - -Upstream-Status: Backport [https://github.com/python/importlib_metadata/commit/a65c29adc027b3615154cab73aaedd58a6aa23da] -Signed-off-by: Ross Burton ---- - Lib/importlib/metadata/__init__.py | 14 +++- - Lib/importlib/metadata/_itertools.py | 98 ++++++++++++++++++++++++++++ - 2 files changed, 110 insertions(+), 2 deletions(-) - -diff --git a/Lib/importlib/metadata/__init__.py b/Lib/importlib/metadata/__init__.py -index 8ce62dd..085378c 100644 ---- a/Lib/importlib/metadata/__init__.py -+++ b/Lib/importlib/metadata/__init__.py -@@ -21,7 +21,7 @@ import collections - from . import _meta - from ._collections import FreezableDefaultDict, Pair - from ._functools import method_cache, pass_none --from ._itertools import always_iterable, unique_everseen -+from ._itertools import always_iterable, bucket, unique_everseen - from ._meta import PackageMetadata, SimplePath - - from contextlib import suppress -@@ -404,7 +404,7 @@ class Distribution(DeprecatedNonAbstract): - if not name: - raise ValueError("A distribution name is required.") - try: -- return next(iter(cls.discover(name=name))) -+ return next(iter(cls._prefer_valid(cls.discover(name=name)))) - except StopIteration: - raise PackageNotFoundError(name) - -@@ -428,6 +428,16 @@ class Distribution(DeprecatedNonAbstract): - resolver(context) for resolver in cls._discover_resolvers() - ) - -+ @staticmethod -+ def _prefer_valid(dists: Iterable[Distribution]) -> Iterable[Distribution]: -+ """ -+ Prefer (move to the front) distributions that have metadata. -+ -+ Ref python/importlib_resources#489. -+ """ -+ buckets = bucket(dists, lambda dist: bool(dist.metadata)) -+ return itertools.chain(buckets[True], buckets[False]) -+ - @staticmethod - def at(path: str | os.PathLike[str]) -> Distribution: - """Return a Distribution for the indicated metadata path. -diff --git a/Lib/importlib/metadata/_itertools.py b/Lib/importlib/metadata/_itertools.py -index d4ca9b9..79d3719 100644 ---- a/Lib/importlib/metadata/_itertools.py -+++ b/Lib/importlib/metadata/_itertools.py -@@ -1,3 +1,4 @@ -+from collections import defaultdict, deque - from itertools import filterfalse - - -@@ -71,3 +72,100 @@ def always_iterable(obj, base_type=(str, bytes)): - return iter(obj) - except TypeError: - return iter((obj,)) -+ -+ -+# Copied from more_itertools 10.3 -+class bucket: -+ """Wrap *iterable* and return an object that buckets the iterable into -+ child iterables based on a *key* function. -+ -+ >>> iterable = ['a1', 'b1', 'c1', 'a2', 'b2', 'c2', 'b3'] -+ >>> s = bucket(iterable, key=lambda x: x[0]) # Bucket by 1st character -+ >>> sorted(list(s)) # Get the keys -+ ['a', 'b', 'c'] -+ >>> a_iterable = s['a'] -+ >>> next(a_iterable) -+ 'a1' -+ >>> next(a_iterable) -+ 'a2' -+ >>> list(s['b']) -+ ['b1', 'b2', 'b3'] -+ -+ The original iterable will be advanced and its items will be cached until -+ they are used by the child iterables. This may require significant storage. -+ -+ By default, attempting to select a bucket to which no items belong will -+ exhaust the iterable and cache all values. -+ If you specify a *validator* function, selected buckets will instead be -+ checked against it. -+ -+ >>> from itertools import count -+ >>> it = count(1, 2) # Infinite sequence of odd numbers -+ >>> key = lambda x: x % 10 # Bucket by last digit -+ >>> validator = lambda x: x in {1, 3, 5, 7, 9} # Odd digits only -+ >>> s = bucket(it, key=key, validator=validator) -+ >>> 2 in s -+ False -+ >>> list(s[2]) -+ [] -+ -+ """ -+ -+ def __init__(self, iterable, key, validator=None): -+ self._it = iter(iterable) -+ self._key = key -+ self._cache = defaultdict(deque) -+ self._validator = validator or (lambda x: True) -+ -+ def __contains__(self, value): -+ if not self._validator(value): -+ return False -+ -+ try: -+ item = next(self[value]) -+ except StopIteration: -+ return False -+ else: -+ self._cache[value].appendleft(item) -+ -+ return True -+ -+ def _get_values(self, value): -+ """ -+ Helper to yield items from the parent iterator that match *value*. -+ Items that don't match are stored in the local cache as they -+ are encountered. -+ """ -+ while True: -+ # If we've cached some items that match the target value, emit -+ # the first one and evict it from the cache. -+ if self._cache[value]: -+ yield self._cache[value].popleft() -+ # Otherwise we need to advance the parent iterator to search for -+ # a matching item, caching the rest. -+ else: -+ while True: -+ try: -+ item = next(self._it) -+ except StopIteration: -+ return -+ item_value = self._key(item) -+ if item_value == value: -+ yield item -+ break -+ elif self._validator(item_value): -+ self._cache[item_value].append(item) -+ -+ def __iter__(self): -+ for item in self._it: -+ item_value = self._key(item) -+ if self._validator(item_value): -+ self._cache[item_value].append(item) -+ -+ yield from self._cache.keys() -+ -+ def __getitem__(self, value): -+ if not self._validator(value): -+ return iter(()) -+ -+ return self._get_values(value) diff --git a/meta/recipes-devtools/python/python3_3.14.10.bb b/meta/recipes-devtools/python/python3_3.15.2.bb similarity index 98% rename from meta/recipes-devtools/python/python3_3.14.10.bb rename to meta/recipes-devtools/python/python3_3.15.2.bb index c50c4d4bab..43630bb48e 100644 --- a/meta/recipes-devtools/python/python3_3.14.10.bb +++ b/meta/recipes-devtools/python/python3_3.15.2.bb @@ -18,19 +18,17 @@ SRC_URI = "http://www.python.org/ftp/python/${PV}/Python-${PV}.tar.xz \ file://makerace.patch \ file://0001-sysconfig.py-use-platlibdir-also-for-purelib.patch \ file://0001-Lib-pty.py-handle-stdin-I-O-errors-same-way-as-maste.patch \ - file://valid-dists.patch \ file://0001-Avoid-shebang-overflow-on-python-config.py.patch \ file://0001-Update-test_sysconfig-for-posix_user-purelib.patch \ file://0001-prefer-valid-entrypoints.patch \ - file://0001-gh-146207-Add-support-for-OpenSSL-4.0.0.patch \ - file://0002-gh-148292-Update-_ssl._SSLSocket-for-OpenSSL-4.patch \ - file://0003-gh-148292-Remove-shutdown-test-in-test_ssl.test_got_eof.patch \ + file://0001-configure-clear-RUNSHARED-when-cross-compiling.patch \ + file://0001-gh-160881-Fix-test_is_python_process_non_python_subp.patch \ " SRC_URI:append:class-native = " \ file://0001-Lib-sysconfig.py-use-prefix-value-from-build-configu.patch \ " -SRC_URI[sha256sum] = "de414a57119abef52784d8993e341d53aed635fc2b05c2607d9f98a2c5b72032" +SRC_URI[sha256sum] = "8b5536d280142ecf6cdfe15d12a21ba1c65e300bbf7b28a8d0cdb849575797de" # exclude pre-releases for both python 2.x and 3.x UPSTREAM_CHECK_REGEX = "[Pp]ython-(?P\d+(\.\d+)+).tar" @@ -41,7 +39,7 @@ inherit upstream-stable-release-point CVE_PRODUCT = "python:python python_software_foundation:python cpython" -PYTHON_MAJMIN = "3.14" +PYTHON_MAJMIN = "3.15" S = "${UNPACKDIR}/Python-${PV}" @@ -75,7 +73,7 @@ DEPENDS = "\ DEPENDS:append:class-target = " python3-native" DEPENDS:append:class-nativesdk = " python3-native" -EXTRA_OECONF = " --without-ensurepip --enable-shared --with-platlibdir=${baselib} --with-system-expat" +EXTRA_OECONF = " --without-ensurepip --enable-shared --with-platlibdir=${baselib} --with-system-expat --without-system-libmpdec" EXTRA_OECONF:append:class-native = " --bindir=${bindir}/${PN}" EXTRA_OECONF:append:class-target = " --with-build-python=nativepython3 PLATFORM_TRIPLET=${HOST_ARCH}-${HOST_OS}" EXTRA_OECONF:append:class-nativesdk = " --with-build-python=nativepython3"