[C++-sig] [ANN] Py++ based ctypes code generator

Roman Yakovenko roman.yakovenko at gmail.com
Tue Jan 20 20:16:02 CET 2009


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.


Roman Yakovenko

C++ Python language binding


More information about the Cplusplus-sig mailing list