root / make_constants_pxi.py

Revision 3b8b25c95f70a17b7e25553124bf068268dafb8b, 1.6 kB (checked in by njs@…, 2 months ago)

librarify make_constants_pxi.py

Line 
1#!/usr/bin/env python
2
3import sys
4
5def main(progname, args):
6    if len(args) != 2:
7        sys.stderr.write("Usage: %s CONSTANT-LIST PXI-OUTPUT\n")
8        sys.exit(2)
9    (constants_path, pxi_path) = args
10    make_constants_pxi(constants_path, pxi_path)
11
12def make_constants_pxi(constants_path, pxi_path):
13    constants = []
14    for line in open(constants_path):
15        data = line.split("#", 1)[0].strip()
16        # data can be empty ''...
17        if not data:
18            continue
19        # or a pair like 'cFoo "Foo"'...
20        elif len(data.split()) == 2:
21            (pyname, cname) = data.split()
22            constants.append((pyname, cname))
23        # or just a simple token 'Foo'
24        else:
25            constants.append(data)
26    out = open(pxi_path, "w")
27    out.write("cdef extern from *:\n")
28    ### Apparently you can't use | on enum's?!
29    # out.write("    enum MagicNumbers:\n")
30    # for const in constants:
31    #     if isinstance(const, tuple):
32    #         out.write('        %s %s\n' % const)
33    #     else:
34    #         out.write('        %s\n' % (const,))
35    for const in constants:
36        if isinstance(const, tuple):
37            out.write('    unsigned int %s %s\n' % const)
38        else:
39            out.write('    unsigned int %s\n' % (const,))
40   
41    out.write("const = {\n")
42    for const in constants:
43        if isinstance(const, tuple):
44            pyname = const[0]
45        else:
46            pyname = const
47        out.write('    "%s": %s,\n' % (pyname, pyname))
48    out.write("}\n")
49
50if __name__ == "__main__":
51    main(sys.argv[0], sys.argv[1:])
Note: See TracBrowser for help on using the browser.