Gour wrote: >> Btw, Johannes Pfau wrapped most of TagLib with SWIG and said the >> wrapping process was frustrating. > >Well, I'd like to hear more about his experiences...Which version of >SWIG he used?
I think the last version I used was a svn snapshot after the 2.0.2 release. It's not that using swig was especially frustrating, but the TagLib C++ API offers little over the much simpler C API. So I thought wrapping the complete C++ API just wasn't worth it. Some problems I had with swig: As I was new to swig I had no idea how to organize a big project consisting of multiple C++ headers. There are questions like include vs. import; simply editing the C++ headers vs. including the headers and placing rename directives etc. into own files; how to organize the project, so that changes to the c++ library can be merged easily... The swig manual is *huge* and works well as a reference, but a simple introduction tutorial doesn't exist AFAIK. It took me some time to get template instances working, somehow I didn't understand the syntax or whatever. And there are some 'cosmetic issues' that don't matter for functionality, but I found these to be annoying: * IIRC free functions or variables/properties always go into the main file and it's not possible to place those into a specific namespace * I think it's the same for template instances and hand written code, but I'm not sure * Namespace duplication: Namespaces look like this: "TagLib.APE.APE". This is needed to support some corner cases where C++ namespaces wouldn't map well to D namespaces otherwise. But for simple namespaces I'd like to have proper namespaces ("TagLib.APE") * swig always generates a main module, and IIRC it even has to be a toplevel module (TagLibBase, not TagLib.Base). And as D doesn't allow packages and modules to have the same name, it wasn't possible to simply name this main module "TagLib", so I named it "TagLibD" instead. But this still sucks, as your namespaces then look like this: TagLibD TagLib.TagLib TagLib.APE.APE TagLib.ID3v2.ID3v2 Having two different toplevel namespaces especially annoyed me. However, I'd nevertheless say swig is the best solution to wrap a C++ project unless there's a manually written, well supported C API. Also, in case you're interested, the source for that TagLib swig wrapper is here: https://github.com/jpf91/TagLibD/ -- Johannes Pfau