Andrew Geissler | d25ed32 | 2020-06-27 00:28:28 -0500 | [diff] [blame^] | 1 | From aae8cd3de3f289cea3db01212579913c925191e8 Mon Sep 17 00:00:00 2001 |
| 2 | From: Lauri Tirkkonen <lauri.tirkkonen.ext@nokia.com> |
| 3 | Date: Thu, 26 Mar 2020 14:24:25 +0000 |
| 4 | Subject: [PATCH] ScriptWriter: create more efficient /usr/bin wrappers |
| 5 | |
| 6 | Upstream setuptools writes scripts to /usr/bin that do insanely much |
| 7 | stuff at runtime. https://github.com/pypa/setuptools/issues/510 |
| 8 | |
| 9 | Since the script entry points are already known at build time, we can |
| 10 | just write those directly into the /usr/bin wrapper, avoiding the |
| 11 | expensive 'pkg_resources' import at runtime. The idea is from |
| 12 | https://github.com/ninjaaron/fast-entry_points but patched directly into |
| 13 | the native build of setuptools here, so that all Python modules under |
| 14 | bitbake automatically use it without needing additional build time |
| 15 | dependencies. |
| 16 | |
| 17 | Upstream-Status: Pending |
| 18 | |
| 19 | Signed-off-by: Lauri Tirkkonen <lauri.tirkkonen.ext@nokia.com> |
| 20 | Signed-off-by: Trevor Gamblin <trevor.gamblin@windriver.com> |
| 21 | --- |
| 22 | setuptools/command/easy_install.py | 14 ++++++-------- |
| 23 | 1 file changed, 6 insertions(+), 8 deletions(-) |
| 24 | |
| 25 | diff --git a/setuptools/command/easy_install.py b/setuptools/command/easy_install.py |
| 26 | index 8fba7b41..03a72714 100755 |
| 27 | --- a/setuptools/command/easy_install.py |
| 28 | +++ b/setuptools/command/easy_install.py |
| 29 | @@ -2023,17 +2023,12 @@ class ScriptWriter(object): |
| 30 | """ |
| 31 | |
| 32 | template = textwrap.dedent(r""" |
| 33 | - # EASY-INSTALL-ENTRY-SCRIPT: %(spec)r,%(group)r,%(name)r |
| 34 | - __requires__ = %(spec)r |
| 35 | - import re |
| 36 | import sys |
| 37 | - from pkg_resources import load_entry_point |
| 38 | + |
| 39 | + from %(module)s import %(ep0)s |
| 40 | |
| 41 | if __name__ == '__main__': |
| 42 | - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) |
| 43 | - sys.exit( |
| 44 | - load_entry_point(%(spec)r, %(group)r, %(name)r)() |
| 45 | - ) |
| 46 | + sys.exit(%(entrypoint)s()) |
| 47 | """).lstrip() |
| 48 | |
| 49 | command_spec_class = CommandSpec |
| 50 | @@ -2068,6 +2063,9 @@ class ScriptWriter(object): |
| 51 | for type_ in 'console', 'gui': |
| 52 | group = type_ + '_scripts' |
| 53 | for name, ep in dist.get_entry_map(group).items(): |
| 54 | + module = ep.module_name |
| 55 | + ep0 = ep.attrs[0] |
| 56 | + entrypoint = '.'.join(ep.attrs) |
| 57 | cls._ensure_safe_name(name) |
| 58 | script_text = cls.template % locals() |
| 59 | args = cls._get_script_args(type_, name, header, script_text) |
| 60 | -- |
| 61 | 2.24.1 |
| 62 | |