From 0a19267f309485df0889b67be118274cbb94c7f6 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Sat, 29 Jul 2017 14:37:23 +0300 Subject: build: move custom targets to scripts/ and remove from makefile These scripts generate source code that is committed to git and hence do not really belong in the build system. A maintainer runs them as needed. Signed-off-by: Ran Benita --- scripts/makeheader | 40 ++++++++++++++++++++++++++++++++++++++ scripts/makekeys | 51 +++++++++++++++++++++++++++++++++++++++++++++++++ scripts/update-keysyms | 6 ++++++ scripts/update-keywords | 4 ++++ 4 files changed, 101 insertions(+) create mode 100755 scripts/makeheader create mode 100755 scripts/makekeys create mode 100755 scripts/update-keysyms create mode 100755 scripts/update-keywords (limited to 'scripts') diff --git a/scripts/makeheader b/scripts/makeheader new file mode 100755 index 0000000..7b7a07e --- /dev/null +++ b/scripts/makeheader @@ -0,0 +1,40 @@ +#!/usr/bin/env python + +from __future__ import print_function +import re + + +HEADERS = [ + '/usr/include/X11/keysymdef.h', + '/usr/include/X11/XF86keysym.h', + '/usr/include/X11/Sunkeysym.h', + '/usr/include/X11/DECkeysym.h', + '/usr/include/X11/HPkeysym.h', +] + +print('''#ifndef _XKBCOMMON_KEYSYMS_H +#define _XKBCOMMON_KEYSYMS_H + +/* This file is autogenerated; please do not commit directly. */ + +#define XKB_KEY_NoSymbol 0x000000 /* Special KeySym */ +''') +for path in HEADERS: + with open(path) as header: + for line in header: + if '#ifdef' in line or '#ifndef' in line or '#endif' in line: + continue + + # Remove #define _OSF_Keysyms and such. + if '#define _' in line: + continue + + # Handle a duplicate definition in HPkeysyms.h which kicks in if + # it's not already defined. + if 'XK_Ydiaeresis' in line and '0x100000ee' in line: + continue + + line = re.sub(r'#define\s*(\w*)XK_', r'#define XKB_KEY_\1', line) + + print(line, end='') +print('\n\n#endif') diff --git a/scripts/makekeys b/scripts/makekeys new file mode 100755 index 0000000..4732f8d --- /dev/null +++ b/scripts/makekeys @@ -0,0 +1,51 @@ +#!/usr/bin/env python + +import re, sys, itertools + +pattern = re.compile(r'^#define\s+XKB_KEY_(?P\w+)\s+(?P0x[0-9a-fA-F]+)\s') +matches = [pattern.match(line) for line in open(sys.argv[1])] +entries = [(m.group("name"), int(m.group("value"), 16)) for m in matches if m] + +print(''' +/** + * This file comes from libxkbcommon and was generated by makekeys.py + * You can always fetch the latest version from: + * https://raw.github.com/xkbcommon/libxkbcommon/master/src/ks_tables.h + */ +''') + +entry_offsets = {} + +print(''' +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Woverlength-strings" +static const char *keysym_names = +'''.strip()) +offs = 0 +for (name, _) in sorted(entries, key=lambda e: e[0].lower()): + entry_offsets[name] = offs + print(' "{name}\\0"'.format(name=name)) + offs += len(name) + 1 +print(''' +; +#pragma GCC diagnostic pop +'''.strip()) + +print(''' +struct name_keysym { + xkb_keysym_t keysym; + uint32_t offset; +};\n''') + +def print_entries(x): + for (name, value) in x: + print(' {{ 0x{value:08x}, {offs} }}, /* {name} */'.format(offs=entry_offsets[name], value=value, name=name)) + +print('static const struct name_keysym name_to_keysym[] = {') +print_entries(sorted(entries, key=lambda e: e[0].lower())) +print('};\n') + +# *.sort() is stable so we always get the first keysym for duplicate +print('static const struct name_keysym keysym_to_name[] = {') +print_entries(next(g[1]) for g in itertools.groupby(sorted(entries, key=lambda e: e[1]), key=lambda e: e[1])) +print('};') diff --git a/scripts/update-keysyms b/scripts/update-keysyms new file mode 100755 index 0000000..3356a35 --- /dev/null +++ b/scripts/update-keysyms @@ -0,0 +1,6 @@ +#!/bin/sh +# Run this to regenerate xkbcommon-keysyms.h from the X11 headers +# defining the keysyms and update the name <-> keysym mapping. +export LC_CTYPE=C +scripts/makeheader > xkbcommon/xkbcommon-keysyms.h +scripts/makekeys xkbcommon/xkbcommon-keysyms.h > src/ks_tables.h diff --git a/scripts/update-keywords b/scripts/update-keywords new file mode 100755 index 0000000..65f0d1f --- /dev/null +++ b/scripts/update-keywords @@ -0,0 +1,4 @@ +#!/bin/sh +# Run this if you add/remove a new keyword to the xkbcomp scanner, +# or just want to regenerate the gperf file. +gperf < src/xkbcomp/keywords.gperf > src/xkbcomp/keywords.c -- cgit v1.2.1