/usr/lib/python2.7/dist-packages/cairocffi/mkconstants.py is in python-cairocffi 0.5.4-1.
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 | # coding: utf8
import re
import pycparser.c_generator
def parse_constant(node):
if isinstance(node, pycparser.c_ast.Constant):
return node.value
elif isinstance(node, pycparser.c_ast.UnaryOp) and node.op == '-':
return '-' + parse_constant(node.expr)
else:
raise TypeError(node)
class Visitor(pycparser.c_ast.NodeVisitor):
def visit_Enum(self, node):
value = 0
for enumerator in node.values.enumerators:
if enumerator.value is not None:
value_string = parse_constant(enumerator.value)
value = int(value_string, 0)
else:
value_string = str(value)
assert enumerator.name.startswith('CAIRO_') # len('CAIRO_') == 6
print('%s = %s' % (enumerator.name[6:], value_string))
value += 1
print('')
def generate(include_dir):
# Remove comments, preprocessor instructions and macros.
source = re.sub(
'/\*.*?\*/'
'|CAIRO_(BEGIN|END)_DECLS'
'|cairo_public '
r'|^\s*#.*?[^\\]\n',
'',
''.join(open('%s/cairo%s.h' % (include_dir, suffix), 'r').read()
for suffix in ['', '-pdf', '-ps', '-svg']),
flags=re.DOTALL | re.MULTILINE)
print('# Generated by mkconstants.py\n')
ast = pycparser.CParser().parse(source)
Visitor().visit(ast)
source = pycparser.c_generator.CGenerator().visit(ast)
print('_CAIRO_HEADERS = r"""\n%s\n"""' % source.strip())
if __name__ == '__main__':
generate('/usr/include/cairo')
|