2009/1/20 Roman Yakovenko <roman.yakovenko@gmail.com>

I would like to announce a new code generator for ctypes package.

The new code generator is integrated with Py++ package and reuse most
of its infrastructure:
* GCC-XML - generates an XML description of a C++ program from GCC's
internal representation
* pygccxml - powerful and simple Python package to work GCCXML generated file.
* Py++ design, code and utilities
* It was build with future ( ctypes-cpp ) functionality in mind.
* It has cross-platform ( Windows XP and Linux Ubuntu 8.10 ) unit tests

How it works:

1. Using pygccxml, the source files are parsed ( using pygccxml ) and
in-memory description of the code is created
2. .dll, .map or .so file is parsed ( pygccxml ) and exported symbols
list is created
3. Using decorated and undecorated names, mapping between declarations
and exported symbols is created.
4. The exported symbols and the mapping are used to:
  * define for what declarations the code should be generated
  * find out function calling convention
5. The last step - the code is generated

Supported functionality:

* shared libraries, that were compiled using C or C++ compiler
* free functions, including variable number of arguments
* [global|member] [named|anonymous] variables
* [named|anonymous|opaque|nested]  structures
* enumerations
* typedefs


   Is it useful? - Yes. I created example, which generates code for
GMP( http://gmplib.org/ ) library. The following link (
) will take you to the example.
   * dev - directory, which contains code generator source code
   * pygmplib - directory, which contains generated code - Python
package, which provides access to GMP lib functionality
   * test.py - Python script - tester.

Want to try?
   Windows users:
contains few packages
       * ctypes code generator - stand alone executable, which
generates code for a .dll file
       * gccxml-setup - gccxml setup file
   Linux users:
       Sorry, no binaries :-(
       * you need to check-out( http://gccxml.org/HTML/Download.html
) and build gccxml ( http://gccxml.org/HTML/Install.html )
       * you need to check-out Py++ and pygccxml (
http://sourceforge.net/svn/?group_id=118209 )
       * wrap_library.py (
) is the script, which generates code for .so file.

Your feedback is welcome.

This is potentially very useful!  Generated Python code can be shipped with any project and is (almost) platform independent without need for compilation; you just run Python code.

However I have to wonder how (if) do you support C++ calling conventions.  Things like:
   - How to pass the 'this' parameter to call methods;
   - Function/method overloading.

I have followed the path of C++ code generation precisely because of the difficulty of calling C++ code via libffi, or else I would probably have contributed to the gobject-introspection and pybank projects.  I thought ctypes did not support C++?


Gustavo J. A. M. Carneiro
INESC Porto, Telecommunications and Multimedia Unit
"The universe is always one step beyond logic." -- Frank Herbert