diff --git a/README.md b/README.md index aeec64b..515b76b 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,36 @@ # toxygen_wrapper -ctypes wrapping of [Tox](https://tox.chat/) libtoxcore +[ctypes](https://docs.python.org/3/library/ctypes.html) +wrapping of [Tox](https://tox.chat/) ```libtoxcore``` into Python. -Taken from the wrapper directory of the now abandoned +Taken from the ```wrapper``` directory of the now abandoned `next_gen` branch by Ingvar. The basics of NGC groups are supported, as well as AV and toxencryptsave. -There is no coverage of conferences as they are not supported in ```toxygen``` +There is no coverage of conferences as they are not used in ```toxygen``` and the list of still unwrapped calls as of Sept. 2022 can be found in -```tox.c-toxcore.missing```. +```tox.c-toxcore.missing```. The code still needs double-checking +that every call in ```tox.py``` has the right signature, but it runs +```toxygen``` with apparent issues. It has been tested with UDP and TCP proxy (Tor). It has ***not*** been -tested on Windows, and there may be some breakage, which should be -easy to fix. +tested on Windows, and there may be some minor breakage, which should be +easy to fix. There is a good coverage integration testsuite in ```tests```. ## Install Put the parent of the wrapper directory on your PYTHONPATH and touch a file called `__init__.py` in its parent directory. +Then you need a ```libs``` directory beside the `wrapper` directory +and you need to link your ```libtoxcore.so``` and ```libtoxav.so``` +and ```libtoxencryptsave.so``` into it. Link all 3 filenames +to ```libtoxcore.so``` if you have only ```libtoxcore.so``` +(which is usually the case if you built ```c-toxcore``` with ```cmake``` +rather than ```autogen/configure```). If you want to be different, +then just straighten out the filenames in ```libtox.py```. + ## Prerequisites No prerequisites in Python3. @@ -27,8 +38,12 @@ No prerequisites in Python3. ## Other wrappers There are a number of other wrappings into Python of Tox core. -This one uses CTYPES which has its merits - there is no need to -recompile anything as with Cython - change the Python file and it's done. +This one uses [ctypes](https://docs.python.org/3/library/ctypes.html) +which has its merits - there is no need to recompile anything as with +Cython - change the Python file and it's done. And you can follow things +in a Python debugger, or with the utterly stupendous Python feature of +```gdb`` (```gdb -ex r --args /usr/bin/python3.9 ```). + CTYPES code can be brittle, segfaulting if you've got things wrong, but if your wrapping is right, it is very efficient and easy to work on. diff --git a/wrapper/libtox.py b/wrapper/libtox.py index 494611b..32e7335 100644 --- a/wrapper/libtox.py +++ b/wrapper/libtox.py @@ -1,5 +1,4 @@ # -*- mode: python; indent-tabs-mode: nil; py-indent-offset: 4; coding: utf-8 -*- - import os import sys from ctypes import CDLL @@ -41,11 +40,11 @@ class LibToxCore: class LibToxAV: def __init__(self): - platform = sys.platform - if platform == 'win32': + platform = util.get_platform() + if platform == 'Windows': # on Windows av api is in libtox.dll self._libtoxav = CDLL(os.path.join(sLIBS_DIR, 'libtox.dll')) - elif platform == 'darwin': + elif platform == 'Darwin': self._libtoxav = CDLL('libtoxcore.dylib') else: libFile = os.path.join(sLIBS_DIR, 'libtoxav.so')