More automated interfacing of D with C codebases

timotheecour thelastmammoth at gmail.com
Mon Oct 22 10:27:07 PDT 2012


> SWIG requires some kind of interface files, which I assume one 
> must have to manually write. Then what's the difference?

These can be as small as:


sfml.i:
%{
#include <SFML/Audio.hpp>
%}
%include SFML/Config.hpp
%include SFML/Audio/Export.hpp

In practice, some additional tweaks may be needed to support 
certain constructs like multiple inheritance, etc, but nothing 
daunting (~ 50 lines of code for my sfml interface file)

> I don't think SWIG is the right approach because:
> * You have to create these interface files

=>
see above. Interface files can be very small.

> * It seem to not handle all code
I was still able to port large libraries like sfml and opencv, 
using tweaks to the interface files and enhancing swig to support 
C++template to D template conversion. There's a small number of 
cases where swig currently chokes, some of which could be easily 
fixed if there's enough demand.

> * No support for Objective-C

=>
http://www.swig.org/Doc1.1/HTML/SWIG.html#n7
One of SWIG's most recent additions is support for Objective-C 
parsing. This is currently an experimental feature that may be 
improved in future releases.

> BTW, how does SWIG handle macros and documentation?
You'd have to write a C/C++ function that does what the macro 
does in the interface file, which would in turn be converted to a 
D function.

For exporting C documentation to D, I've asked on stackoverflow: 
http://stackoverflow.com/questions/12413957/export-comments-in-swig-wrapper
I'm not sure it's supported ATM, but that's definitely something 
possible since swig has a full blown C++ parser.



More information about the Digitalmars-d-learn mailing list