blob: 106293d3c5362dd1dedc9a4c573cdd0a0777cc4c (
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()
|