From 5eb2142d7066ead526a97f21027df3f89a075cef Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sat, 26 Nov 2022 16:16:45 +0530 Subject: [PATCH] Use a define rather than a generated file for wrapped kittens --- kitty/data-types.c | 19 ++++++------------- kitty/fast_data_types.pyi | 5 ++--- setup.py | 24 +++++------------------- 3 files changed, 13 insertions(+), 35 deletions(-) diff --git a/kitty/data-types.c b/kitty/data-types.c index 4f7751d3d..8ac86be43 100644 --- a/kitty/data-types.c +++ b/kitty/data-types.c @@ -216,21 +216,14 @@ get_docs_ref_map(PyObject *self UNUSED, PyObject *args UNUSED) { return PyBytes_FromStringAndSize(docs_ref_map, sizeof(docs_ref_map)); } -#include "wrapped_kitten_names_generated.h" - static PyObject* wrapped_kittens(PyObject *self UNUSED, PyObject *args UNUSED) { - PyObject *ans = PyFrozenSet_New(NULL); - if (ans != NULL) { - for (int i = 0; wrapped_kitten_names[i] != NULL; i++) { - PyObject *n = PyUnicode_FromString(wrapped_kitten_names[i]); - if (n == NULL) break; - if (PySet_Add(ans, n) != 0) { Py_DECREF(n); break; } - Py_DECREF(n); - } - } - if (PyErr_Occurred()) { Py_CLEAR(ans); } - return ans; + const char *wrapped_kitten_names = WRAPPED_KITTENS; + PyObject *ans = PyUnicode_FromString(wrapped_kitten_names); + if (ans == NULL) return NULL; + PyObject *s = PyUnicode_Split(ans, NULL, -1); + Py_DECREF(ans); + return s; } static PyObject* diff --git a/kitty/fast_data_types.pyi b/kitty/fast_data_types.pyi index a6a586cbc..c1a48050f 100644 --- a/kitty/fast_data_types.pyi +++ b/kitty/fast_data_types.pyi @@ -1,8 +1,7 @@ import termios from ctypes import Array, c_ubyte from typing import ( - Any, Callable, Dict, FrozenSet, Iterator, List, NewType, Optional, Tuple, TypedDict, - Union, + Any, Callable, Dict, Iterator, List, NewType, Optional, Tuple, TypedDict, Union, ) from kitty.boss import Boss @@ -1493,5 +1492,5 @@ def get_clipboard_mime(ct: int, mime: Optional[str], callback: Callable[[bytes], def run_with_activation_token(func: Callable[[str], None]) -> None: ... def make_x11_window_a_dock_window(x11_window_id: int, strut: Tuple[int, int, int, int, int, int, int, int, int, int, int, int]) -> None: ... def unicode_database_version() -> Tuple[int, int, int]: ... -def wrapped_kittens() -> FrozenSet[str]: ... +def wrapped_kittens() -> List[str]: ... def expand_ansi_c_escapes(test: str) -> str: ... diff --git a/setup.py b/setup.py index 7fce13503..75e2d0bb3 100755 --- a/setup.py +++ b/setup.py @@ -529,10 +529,12 @@ def get_source_specific_defines(env: Env, src: str) -> Tuple[str, Optional[List[ if src == 'kitty/parser_dump.c': return 'kitty/parser.c', ['DUMP_COMMANDS'] if src == 'kitty/data-types.c': - return src, [f'KITTY_VCS_REV="{get_vcs_rev_define()}"'] - with suppress(KeyError): + wk = ' '.join(wrapped_kittens()) + return src, [f'KITTY_VCS_REV="{get_vcs_rev_define()}"', f'WRAPPED_KITTENS="{wk}"'] + try: return src, env.library_paths[src] - return src, None + except KeyError: + return src, None def newer(dest: str, *sources: str) -> bool: @@ -870,27 +872,11 @@ def wrapped_kittens() -> Sequence[str]: raise Exception('Failed to read wrapped kittens from kitty wrapper script') -def build_wrapped_kittens() -> str: - h = 'static const char* wrapped_kitten_names[] = {\n' - h += ', '.join(f'"{x}"' for x in wrapped_kittens()) - h += ', NULL' - h += '\n};\n' - dest = 'kitty/wrapped_kitten_names_generated.h' - q = '' - with suppress(FileNotFoundError), open(dest) as f: - q = f.read() - if q != h: - with open(dest, 'w') as f: - f.write(h) - return dest - - def build(args: Options, native_optimizations: bool = True, call_init: bool = True) -> None: if call_init: init_env_from_args(args, native_optimizations) sources, headers = find_c_files() headers.append(build_ref_map()) - headers.append(build_wrapped_kittens()) compile_c_extension( kitty_env(), 'kitty/fast_data_types', args.compilation_database, sources, headers )