aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/python/cffi/gen/main.py
blob: 39636d187c9d07e0f337fa5a3d8830fa0e330389 (plain) (blame)
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
import os.path 
import sys 
 
from cffi.setuptools_ext import execfile 
 
usage = '''Usage: {} INPUT:VAR OUTPUT 
Generate CFFI C module source code. 
 
INPUT is a source .py file. 
VAR is a cffi.FFI() object defined in the source file. 
OUTPUT is a .c or .cpp output file. 
''' 
 
 
def main(): 
    if len(sys.argv) != 3 or ':' not in sys.argv[1]: 
        sys.stdout.write(usage.format(sys.argv[0])) 
        sys.exit(1) 
 
    mod_spec, c_file = sys.argv[1:3] 
    build_file_name, ffi_var_name = mod_spec.rsplit(':', 1) 
 
    source_dir = os.path.dirname(os.path.abspath(build_file_name)) 
    sys._MEIPASS = source_dir  # For pygit2. 
    sys.dont_write_bytecode = True 
    sys.path = [source_dir] 
    mod_vars = {'__name__': '__cffi__', '__file__': build_file_name} 
    execfile(build_file_name, mod_vars) 
 
    ffi = mod_vars[ffi_var_name] 
    if callable(ffi): 
        ffi = ffi() 
    ffi.emit_c_code(c_file) 
 
 
if __name__ == '__main__': 
    main()