pygomx/pygomx-module/build_ffi.py

58 lines
1.9 KiB
Python

#!/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*);
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_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)