summaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/python/python3-installer/interpreter.patch
blob: 7906769b9017957f55a2bad338d520e6e2f0d883 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
From 74fe171fa4a25c120607e9f8450cbdfee675c959 Mon Sep 17 00:00:00 2001
From: Ross Burton <ross.burton@arm.com>
Date: Mon, 14 Mar 2022 14:39:22 +0000
Subject: [PATCH] python3-installer: add installer module

Let us override the hashbang directly (possibly upstreamable), and don't
play games with hashbangs: for now assume that even hashbangs with spaces
are simple (assume the spaces are only used to separate arguments) and
we don't have long hashbangs.

Upstream-Status: Inappropriate
Signed-off-by: Ross Burton <ross.burton@arm.com>

---
 src/installer/__main__.py |  9 ++++++++-
 src/installer/scripts.py  | 15 +--------------
 2 files changed, 9 insertions(+), 15 deletions(-)

diff --git a/src/installer/__main__.py b/src/installer/__main__.py
index 51014b9..38de286 100644
--- a/src/installer/__main__.py
+++ b/src/installer/__main__.py
@@ -30,6 +30,13 @@ def _get_main_parser() -> argparse.ArgumentParser:
         type=str,
         help="override prefix to install packages to",
     )
+    parser.add_argument(
+        "--interpreter",
+        "-i",
+        type=str,
+        default=sys.executable,
+        help=f"interpreter (defaults to {sys.executable})",
+    )
     parser.add_argument(
         "--compile-bytecode",
         action="append",
@@ -86,7 +93,7 @@ def _main(cli_args: Sequence[str], program: Optional[str] = None) -> None:
     with WheelFile.open(args.wheel) as source:
         destination = SchemeDictionaryDestination(
             scheme_dict=_get_scheme_dict(source.distribution, prefix=args.prefix),
-            interpreter=sys.executable,
+            interpreter=args.interpreter,
             script_kind=get_launcher_kind(),
             bytecode_optimization_levels=bytecode_levels,
             destdir=args.destdir,
diff --git a/src/installer/scripts.py b/src/installer/scripts.py
index 7e3c8fc..ba6ed5a 100644
--- a/src/installer/scripts.py
+++ b/src/installer/scripts.py
@@ -59,20 +59,7 @@ def _build_shebang(executable: str, forlauncher: bool) -> bytes:
     https://bitbucket.org/pypa/distlib/src/58cd5c6/distlib/scripts.py#lines-124
     """
     executable_bytes = executable.encode("utf-8")
-    if forlauncher:  # The launcher can just use the command as-is.
-        return b"#!" + executable_bytes
-    if _is_executable_simple(executable_bytes):
-        return b"#!" + executable_bytes
-
-    # Shebang support for an executable with a space in it is under-specified
-    # and platform-dependent, so we use a clever hack to generate a script to
-    # run in ``/bin/sh`` that should work on all reasonably modern platforms.
-    # Read the following message to understand how the hack works:
-    # https://github.com/pradyunsg/installer/pull/4#issuecomment-623668717
-
-    quoted = shlex.quote(executable).encode("utf-8")
-    # I don't understand a lick what this is trying to do.
-    return b"#!/bin/sh\n'''exec' " + quoted + b' "$0" "$@"\n' + b"' '''"
+    return b"#!" + executable_bytes
 
 
 class InvalidScript(ValueError):