#!/usr/bin/python import sys from cffi import FFI lib_list = [ "mxclient", ] if len(sys.argv) > 1: lib_list += sys.argv[1:] print(f"liblist: {lib_list}") ffibuilder = FFI() ffibuilder.set_source( module_name="_pygomx", source=""" //passed to the real C compiler #include "libmxclient.h" """, libraries=lib_list, library_dirs=["."], include_dirs=["."], ) ffibuilder.cdef( csource=""" typedef void (*on_event_handler_ptr) (char*, void*); typedef void (*on_message_handler_ptr) (char*, void*); typedef void (*on_sys_handler_ptr) (char*, void*); extern void FreeCString(char* s); extern char* cli_discoverhs(char* mxid); extern char* cli_mkmxtoken(char* mxid, char* pw); extern char* cli_whoami(char* hs, char* accessToken); extern char* cli_accountinfo(char* hs, char* accessToken); extern char* cli_clearaccount(char* hs, char* accessToken); extern char* cli_serverinfo(char* url); extern int apiv0_initialize(); extern int apiv0_deinitialize(); extern char* apiv0_discover(char* mxid); extern char* apiv0_login(char* data); extern char* apiv0_createclient(char* storage_path, char* hs, char* mxid, char* accessToken); extern char* apiv0_createclient_pass(char* mxpassfile, char* storage_path, char* hs, char* localpart, char* domain); extern char* apiv0_set_on_event_handler(int cid, on_event_handler_ptr ptr, void* pobj); extern char* apiv0_set_on_message_handler(int cid, on_message_handler_ptr ptr, void* pobj); extern char* apiv0_set_on_sys_handler(int cid, on_sys_handler_ptr ptr, void* pobj); extern char* apiv0_startclient(int cid); extern char* apiv0_stopclient(int cid); extern char* apiv0_sendmessage(int cid, char* data); extern char* apiv0_leaveroom(int cid, char* roomid); extern char* apiv0_joinedrooms(int cid); extern int apiv0_removeclient(int cid); extern char* apiv0_listclients(); extern char* apiv0_getoptions(int cid); extern int apiv0_setoptions(int cid, char* opts); """ ) if __name__ == "__main__": ffibuilder.compile(verbose=True)