From patchwork Mon May 18 10:36:24 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ross Burton X-Patchwork-Id: 88288 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 94D41CD4F52 for ; Mon, 18 May 2026 10:36:27 +0000 (UTC) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by mx.groups.io with SMTP id smtpd.msgproc01-g2.5674.1779100586891283324 for ; Mon, 18 May 2026 03:36:27 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="dkim: body hash did not verify" header.i=@arm.com header.s=foss header.b=YMMYVu+n; spf=pass (domain: arm.com, ip: 217.140.110.172, mailfrom: ross.burton@arm.com) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 465054617 for ; Mon, 18 May 2026 03:36:21 -0700 (PDT) Received: from cesw-amp-gbt-1s-m12830-04.lab.cambridge.arm.com (usa-sjc-imap-foss1.foss.arm.com [10.121.207.14]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 051833F85F for ; Mon, 18 May 2026 03:36:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=arm.com; s=foss; t=1779100586; bh=I3SGgE0bE420M+ihWe1X30kRNhpwPAJ7GjW8Nxjbtqg=; h=From:To:Subject:Date:From; b=YMMYVu+nYQriTdAxt+1VNX+lPb7CEvu8KvYa0PnM48gkTIhtQezyhy4lgpBGP4IcU DHl9xPTiY5Esv0ZM6Ek0wve+kCnmyYD7IJTSR8Z5NNYJLRbkras+bAGNGHiJ9f9j8q z6karZEs5G9GbIMaYZyI7UikMoLtIaHafB9FuLuI= From: Ross Burton To: openembedded-core@lists.openembedded.org Subject: [PATCH] python3-installer: upgrade 0.7.0 -> 1.0.1 Date: Mon, 18 May 2026 11:36:24 +0100 Message-ID: <20260518103624.598829-1-ross.burton@arm.com> X-Mailer: git-send-email 2.43.0 MIME-Version: 1.0 List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Mon, 18 May 2026 10:36:27 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/237218 v1.0.1 (May 11, 2026) - Include docs and tests in sdist again (#322) - Fix long path issue on Windows (#321) - Fix date in changelog (#324) - Use `os.path.abspath()` instead of `Path.resolve()` for performance (#326) v1.0.0 (Mar 28, 2026) - Drop support for Python 3.9, 3.8, and 3.7 (#305, #242, #206) - Add support and Python 3.13 and 3.14 (#201, #282) - Add `--overwrite-existing` CLI option (#216) - Add `--validate-record` CLI option (#161) - Support installing multiple wheels (#203) - Handle invalid hash algorithms (#179) - Stream-based validation instead of in-memory (#98) - Add validate_stream methods (#99) - Consolidate and refine validation APIs (#108, #111) - Sort entries before writing RECORD (#245) - Do not install __pycache__ from wheels (#307) - Fix a path traversal bug (#317) - Update launcher scripts and Windows behavior (#212, #181) - Fix Windows relpath bug (#286) - Migrate to dataclasses (#200) - Use cached_property for memoization (#243) - Refactor installer.scripts (#239) - Decouple test modules (#104) - Avoid cross-module imports from .utils (#102) - Lazy imports for performance (#226) - Complete type annotations and enforce strict mypy (#173) - Deprecate RecordEntry.validate (#186) - Fix documentation typos and grammar (#309, #210) - Improve docstrings and internal documentation (#100) Remove an upstreamed patch, and rewrite the patch adding an --interpreter option. Verified that building everything in oe-core that uses the pep517 class is identical before and after the upgrade. Signed-off-by: Ross Burton --- ...ils.py-sort-entries-before-writing-o.patch | 27 ------ .../python3-installer/interpreter.patch | 85 ++++++++++--------- ...er_0.7.0.bb => python3-installer_1.0.1.bb} | 5 +- 3 files changed, 45 insertions(+), 72 deletions(-) delete mode 100644 meta/recipes-devtools/python/python3-installer/0001-src-installer-utils.py-sort-entries-before-writing-o.patch rename meta/recipes-devtools/python/{python3-installer_0.7.0.bb => python3-installer_1.0.1.bb} (79%) diff --git a/meta/recipes-devtools/python/python3-installer/0001-src-installer-utils.py-sort-entries-before-writing-o.patch b/meta/recipes-devtools/python/python3-installer/0001-src-installer-utils.py-sort-entries-before-writing-o.patch deleted file mode 100644 index a6715ed457d..00000000000 --- a/meta/recipes-devtools/python/python3-installer/0001-src-installer-utils.py-sort-entries-before-writing-o.patch +++ /dev/null @@ -1,27 +0,0 @@ -From 760ddf50ce559abd67bbdd31797267d00bcddfb3 Mon Sep 17 00:00:00 2001 -From: Alexander Kanavin -Date: Tue, 1 Oct 2024 19:22:11 +0200 -Subject: [PATCH] src/installer/utils.py: sort entries before writing out - RECORD file - -This helps build reproducibility. - -Upstream-Status: Submitted [https://github.com/pypa/installer/pull/245] -Signed-off-by: Alexander Kanavin ---- - src/installer/utils.py | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/installer/utils.py b/src/installer/utils.py -index 3e601d6..073297c 100644 ---- a/src/installer/utils.py -+++ b/src/installer/utils.py -@@ -207,7 +207,7 @@ def construct_record_file( - io.BytesIO(), encoding="utf-8", write_through=True, newline="" - ) - writer = csv.writer(stream, delimiter=",", quotechar='"', lineterminator="\n") -- for scheme, record in records: -+ for scheme, record in sorted(records, key=lambda x: x[1].path): - writer.writerow(record.to_row(prefix_for_scheme(scheme))) - stream.seek(0) - return stream.detach() diff --git a/meta/recipes-devtools/python/python3-installer/interpreter.patch b/meta/recipes-devtools/python/python3-installer/interpreter.patch index 7906769b901..0a5d34a349a 100644 --- a/meta/recipes-devtools/python/python3-installer/interpreter.patch +++ b/meta/recipes-devtools/python/python3-installer/interpreter.patch @@ -1,23 +1,24 @@ -From 74fe171fa4a25c120607e9f8450cbdfee675c959 Mon Sep 17 00:00:00 2001 +From 22fa800b4cbcfddd57fa262fd7f2aeb06a15a711 Mon Sep 17 00:00:00 2001 From: Ross Burton Date: Mon, 14 Mar 2022 14:39:22 +0000 -Subject: [PATCH] python3-installer: add installer module +Subject: [PATCH 1/2] installer: add --interpreter option -Let us override the hashbang directly (possibly upstreamable), and don't -play games with hashbangs: for now assume that even hashbangs with spaces -are simple (assume the spaces are only used to separate arguments) and -we don't have long hashbangs. +The currently running Python might not be the right one for the installed +wheels, so add an option to allow the interpreter to be overridden. -Upstream-Status: Inappropriate +This is essential in cross/distro builds where we want to install a +wheel into a working directory to build a distro package (eg a rpm or +deb) with pypa/installer, but the currently running python on the build +host might not be the right path for the scripts to use on the target. + +Upstream-Status: Submitted [https://github.com/pypa/installer/pull/332] Signed-off-by: Ross Burton - --- - src/installer/__main__.py | 9 ++++++++- - src/installer/scripts.py | 15 +-------------- - 2 files changed, 9 insertions(+), 15 deletions(-) + src/installer/__main__.py | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/installer/__main__.py b/src/installer/__main__.py -index 51014b9..38de286 100644 +index b7a7445..25415ea 100644 --- a/src/installer/__main__.py +++ b/src/installer/__main__.py @@ -30,6 +30,13 @@ def _get_main_parser() -> argparse.ArgumentParser: @@ -34,38 +35,38 @@ index 51014b9..38de286 100644 parser.add_argument( "--compile-bytecode", action="append", -@@ -86,7 +93,7 @@ def _main(cli_args: Sequence[str], program: Optional[str] = None) -> None: - with WheelFile.open(args.wheel) as source: - destination = SchemeDictionaryDestination( - scheme_dict=_get_scheme_dict(source.distribution, prefix=args.prefix), -- interpreter=sys.executable, -+ interpreter=args.interpreter, - script_kind=get_launcher_kind(), - bytecode_optimization_levels=bytecode_levels, - destdir=args.destdir, +@@ -102,7 +109,7 @@ def _main(cli_args: Sequence[str], program: str | None = None) -> None: + source.validate_record(validate_contents=args.validate_record == "all") + destination = SchemeDictionaryDestination( + scheme_dict=_get_scheme_dict(source.distribution, prefix=args.prefix), +- interpreter=sys.executable, ++ interpreter=args.interpreter, + script_kind=get_launcher_kind(), + bytecode_optimization_levels=bytecode_levels, + destdir=args.destdir, diff --git a/src/installer/scripts.py b/src/installer/scripts.py -index 7e3c8fc..ba6ed5a 100644 +index b21a72e..551941f 100644 --- a/src/installer/scripts.py +++ b/src/installer/scripts.py -@@ -59,20 +59,7 @@ def _build_shebang(executable: str, forlauncher: bool) -> bytes: - https://bitbucket.org/pypa/distlib/src/58cd5c6/distlib/scripts.py#lines-124 - """ - executable_bytes = executable.encode("utf-8") -- if forlauncher: # The launcher can just use the command as-is. -- return b"#!" + executable_bytes -- if _is_executable_simple(executable_bytes): -- return b"#!" + executable_bytes +@@ -138,17 +138,4 @@ class Script: + https://bitbucket.org/pypa/distlib/src/58cd5c6/distlib/scripts.py#lines-124 + """ + executable_bytes = executable.encode("utf-8") +- if forlauncher: # The launcher can just use the command as-is. +- return b"#!" + executable_bytes +- if self._is_executable_simple(executable_bytes): +- return b"#!" + executable_bytes - -- # Shebang support for an executable with a space in it is under-specified -- # and platform-dependent, so we use a clever hack to generate a script to -- # run in ``/bin/sh`` that should work on all reasonably modern platforms. -- # Read the following message to understand how the hack works: -- # https://github.com/pradyunsg/installer/pull/4#issuecomment-623668717 +- # Shebang support for an executable with a space in it is under-specified +- # and platform-dependent, so we use a clever hack to generate a script to +- # run in ``/bin/sh`` that should work on all reasonably modern platforms. +- # Read the following message to understand how the hack works: +- # https://github.com/pypa/installer/pull/4#issuecomment-623668717 - -- quoted = shlex.quote(executable).encode("utf-8") -- # I don't understand a lick what this is trying to do. -- return b"#!/bin/sh\n'''exec' " + quoted + b' "$0" "$@"\n' + b"' '''" -+ return b"#!" + executable_bytes - - - class InvalidScript(ValueError): +- quoted = shlex.quote(executable).encode("utf-8") +- # I don't understand a lick what this is trying to do. +- return b"#!/bin/sh\n'''exec' " + quoted + b' "$0" "$@"\n' + b"' '''" ++ return b"#!" + executable_bytes +-- +2.43.0 + diff --git a/meta/recipes-devtools/python/python3-installer_0.7.0.bb b/meta/recipes-devtools/python/python3-installer_1.0.1.bb similarity index 79% rename from meta/recipes-devtools/python/python3-installer_0.7.0.bb rename to meta/recipes-devtools/python/python3-installer_1.0.1.bb index 6aaf1b3a379..6727f8e21e8 100644 --- a/meta/recipes-devtools/python/python3-installer_0.7.0.bb +++ b/meta/recipes-devtools/python/python3-installer_1.0.1.bb @@ -6,10 +6,9 @@ BUGTRACKER = "https://github.com/pypa/installer/issues" LICENSE = "MIT" LIC_FILES_CHKSUM = "file://LICENSE;md5=5038641aec7a77451e31da828ebfae00" -SRC_URI += "file://interpreter.patch \ - file://0001-src-installer-utils.py-sort-entries-before-writing-o.patch" +SRC_URI += "file://interpreter.patch" -SRC_URI[sha256sum] = "a26d3e3116289bb08216e0d0f7d925fcef0b0194eedfa0c944bcaaa106c4b631" +SRC_URI[sha256sum] = "052c7fc3721d54c696e2dea019be67539d7b144e924f559f54beb3121831c364" inherit pypi python_flit_core