Use a define rather than a generated file for wrapped kittens

This commit is contained in:
Kovid Goyal 2022-11-26 16:16:45 +05:30
parent 00223c5bba
commit 5eb2142d70
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
3 changed files with 13 additions and 35 deletions

View File

@ -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*

View File

@ -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: ...

View File

@ -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
)