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
6 Upstream setuptools writes scripts to /usr/bin that do insanely much
7 stuff at runtime. https://github.com/pypa/setuptools/issues/510
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
17 Upstream-Status: Pending
19 Signed-off-by: Lauri Tirkkonen <lauri.tirkkonen.ext@nokia.com>
20 Signed-off-by: Trevor Gamblin <trevor.gamblin@windriver.com>
22 setuptools/command/easy_install.py | 14 ++++++--------
23 1 file changed, 6 insertions(+), 8 deletions(-)
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):
32 template = textwrap.dedent(r"""
33 - # EASY-INSTALL-ENTRY-SCRIPT: %(spec)r,%(group)r,%(name)r
34 - __requires__ = %(spec)r
37 - from pkg_resources import load_entry_point
39 + from %(module)s import %(ep0)s
41 if __name__ == '__main__':
42 - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
44 - load_entry_point(%(spec)r, %(group)r, %(name)r)()
46 + sys.exit(%(entrypoint)s())
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
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)