from cffi import FFI ffibuilder = FFI() # cdef() expects a single string declaring the C types, functions and # globals needed to use the shared object. It must be in valid C syntax. ffibuilder.cdef(""" typedef struct { const char *p; ptrdiff_t n; } _GoString_; typedef _GoString_ GoString; typedef unsigned char GoUint8; /* Return type for GetLanguageByExtension */ struct GetLanguageByExtension_return { GoString r0; /* language */ GoUint8 r1; /* safe */ }; extern struct GetLanguageByExtension_return GetLanguageByExtension(GoString p0); """) # set_source() gives the name of the python extension module to # produce, and some C source code as a string. This C code needs # to make the declarated functions, types and globals available, # so it is often just the "#include". ffibuilder.set_source("_c_enry", """ #include "../.shared/libenry.h" // the C header of the library """, libraries=['enry'], library_dirs=['../.shared' ]) # library name, for the linker if __name__ == "__main__": ffibuilder.compile(verbose=True)