12345678910111213141516171819202122232425262728293031323334353637 |
- 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()
|