Commit 0a19267f309485df0889b67be118274cbb94c7f6

Ran Benita 2017-07-29T14:37:23

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 <ran234@gmail.com>

diff --git a/Makefile.am b/Makefile.am
index 0501997..a22bd7a 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -4,8 +4,10 @@ pkgconfigdir = $(libdir)/pkgconfig
 pkgconfig_DATA = xkbcommon.pc
 
 EXTRA_DIST = \
-	makekeys.py \
-	makeheader.py \
+	scripts/makeheader \
+	scripts/makekeys \
+	scripts/update-keysyms \
+	scripts/update-keywords \
 	src/xkbcomp/keywords.gperf \
 	test/data \
 	README.md \
@@ -315,21 +317,6 @@ bench_rulescomp_LDADD = $(BENCH_LDADD)
 bench_compose_LDADD = $(BENCH_LDADD)
 
 ##
-# Custom targets
-##
-
-# Run this to regenerate xkbcommon-keysyms.h from the X11 headers
-# defining the keysyms and update the name <-> keysym mapping.
-update-keysyms:
-	LC_CTYPE=C python $(top_srcdir)/makeheader.py > $(top_srcdir)/xkbcommon/xkbcommon-keysyms.h
-	LC_CTYPE=C python $(top_srcdir)/makekeys.py $(top_srcdir)/xkbcommon/xkbcommon-keysyms.h > $(top_srcdir)/src/ks_tables.h
-
-# Run this if you add/remove a new keyword to the xkbcomp scanner,
-# or just want to regenerate the gperf file.
-update-keywords:
-	$(AM_V_GEN)gperf < $(top_srcdir)/src/xkbcomp/keywords.gperf > $(top_srcdir)/src/xkbcomp/keywords.c
-
-##
 # Android stuff
 ##
 
diff --git a/PACKAGING b/PACKAGING
index d848b58..b14101a 100644
--- a/PACKAGING
+++ b/PACKAGING
@@ -33,7 +33,7 @@ Dependencies for libxkbcommon:
 
 - (build optional) gperf.
   Output included in git and tarball. To regenerate, use
-  `make update-keywords`.
+  `./scripts/update-keywords`.
 
 Dependencies for libxkbcommon-x11:
 - libxkbcommon.
diff --git a/makeheader.py b/makeheader.py
deleted file mode 100644
index 7b7a07e..0000000
--- a/makeheader.py
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/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/makekeys.py b/makekeys.py
deleted file mode 100644
index 4732f8d..0000000
--- a/makekeys.py
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/usr/bin/env python
-
-import re, sys, itertools
-
-pattern = re.compile(r'^#define\s+XKB_KEY_(?P<name>\w+)\s+(?P<value>0x[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/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<name>\w+)\s+(?P<value>0x[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