I swore off SWIG years ago after being forced to use it for a very large set of C++ bindings. Recently, though, I needed to wrap a smaller C library of about 50 functions and a few structs. I tried cffi but its workflow for wrapping the complete contents of a few header files still seemed more complicated than SWIG. I ended up using SWIG again. The initial results were very easy but SWIG doesn't handle arrays very gracefully. May need to go back and put some more effort into cffi.