/usr/lib/python3/dist-packages/evdev/genecodes.py is in python3-evdev 0.4.7-0ubuntu4.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | #!/usr/bin/env python
# -*- coding: utf-8; -*-
'''
Generate a Python extension module with the constants defined in linux/input.h.
'''
from __future__ import print_function
import os, sys, re
#-----------------------------------------------------------------------------
# The default header file locations to try.
headers = [
'/usr/include/linux/input.h',
'/usr/include/linux/input-event-codes.h',
]
if sys.argv[1:]:
headers = sys.argv[1:]
#-----------------------------------------------------------------------------
macro_regex = r'#define +((?:KEY|ABS|REL|SW|MSC|LED|BTN|REP|SND|ID|EV|BUS|SYN|FF)_\w+)'
macro_regex = re.compile(macro_regex)
uname = list(os.uname()); del uname[1]
uname = ' '.join(uname)
#-----------------------------------------------------------------------------
template = r'''
#include <Python.h>
#ifdef __FreeBSD__
#include <dev/evdev/input.h>
#else
#include <linux/input.h>
#endif
/* Automatically generated by evdev.genecodes */
/* Generated on %s */
#define MODULE_NAME "_ecodes"
#define MODULE_HELP "linux/input.h macros"
static PyMethodDef MethodTable[] = {
{ NULL, NULL, 0, NULL}
};
#if PY_MAJOR_VERSION >= 3
static struct PyModuleDef moduledef = {
PyModuleDef_HEAD_INIT,
MODULE_NAME,
MODULE_HELP,
-1, /* m_size */
MethodTable, /* m_methods */
NULL, /* m_reload */
NULL, /* m_traverse */
NULL, /* m_clear */
NULL, /* m_free */
};
#endif
static PyObject *
moduleinit(void)
{
#if PY_MAJOR_VERSION >= 3
PyObject* m = PyModule_Create(&moduledef);
#else
PyObject* m = Py_InitModule3(MODULE_NAME, MethodTable, MODULE_HELP);
#endif
if (m == NULL) return NULL;
%s
return m;
}
#if PY_MAJOR_VERSION >= 3
PyMODINIT_FUNC
PyInit__ecodes(void)
{
return moduleinit();
}
#else
PyMODINIT_FUNC
init_ecodes(void)
{
moduleinit();
}
#endif
'''
def parse_header(header):
for line in open(header):
macro = macro_regex.search(line)
if macro:
yield ' PyModule_AddIntMacro(m, %s);' % macro.group(1)
all_macros = []
for header in headers:
try:
fh = open(header)
except (IOError, OSError):
continue
all_macros += parse_header(header)
if not all_macros:
print('no input macros found in: %s' % ' '.join(headers), file=sys.stderr)
sys.exit(1)
macros = os.linesep.join(all_macros)
print(template % (uname, macros))
|