Forum: Ruby [ANN] ffi-swig-generator 0.3.0

Announcement (2017-05-07): is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see and for other Rails- und Ruby-related community platforms.
Andrea F. (Guest)
on 2009-04-20 17:22
ffi-swig-generator version 0.3.0
    by Andrea F.


ffi-swig-generator is a ruby-ffi wrapper code generator that produces
ruby-ffi glue code parsing C header files through SWIG.

ffi-swig-generator is able to traverse an XML parse tree generated by
the +swig+ command and to produce a ruby-ffi code from it.

ffi-swig-generator is shipped with a command line tool and a rake task
that automates the code generation process.

ffi-swig-generator XML capabilities are provided by nokogiri.


* Major enhancements
  * Generate accessors methods for struct fields of type string and
  * Add experimental support for nested structs and unions.
  * Add initial support for configuration files.
* Minor enhancements
  * Add support for variadic arguments.
  * Add support for anonymous callbacks in function and struct
  * Add support for volatile types.
  * Add support for U, L, UL constant qualifiers.
  * Improve testing with cucumber.
  * Now the rake task can be configured through a configuration block.
* Bug fixes
  * Fix ruby 1.8.6/1.9.1 compatibility issues.
  * Fix generated const char* return type.
  * Fix a bug that prevented to manage struct name with a prepending


* The program is able to generate:
  * all C native types
  * #define constants
  * typedefs
  * struct, union, array and enum types
  * callbacks (pointers to functions)
* Naive indentation of the generated code


From command line:

  ffi-gen mylib.xml mylib.rb

From a Rakefile:

  require 'ffi-swig-generator' do |task|
    task.input_fn = 'my_interface_dir/*.i'
    task.output_dir = 'my_output_dir'


* rake >= 0.8.3
* nokogiri >= 1.1.1
* swig >= 1.3


Download and install from rubygems:

  [sudo] gem install ffi-swig-generator

or clone mercurial repository:

  hg clone


See the examples in examples/ folder.

libc.i is an interface file containing some excerpt of libc functions.

wiiuse.i is a fairly complex example of a C header file interface. It
reproduces the content of wiiuse.h, the header file of the wiiuse
library. wiiuse is a C library that handles the connection with
Nintendo Wiimote devices. The interface file is almost a mere
copy/paste from the original header file. See [1] for an updated
revision of ffi-wiiuse library.


The generator has been used to generate code for the projects
below. Take a look at them to see further usage examples.

This topic is locked and can not be replied to.