On Thursday 15 December 2011 19:06:31 anatoly techtonik wrote:
> Can anybody help me? I am really stuck.
> 
> I can't understand why C++ was chosen to write the tool like Shiboken. If
> it was in Python - it was much more easier to troubleshoot the issues like
> this one.

Historic reasons, besides the fact that the C++ parser we have was written in 
C++. I already tried to create bindings for ApiExtractor (where the C++ parser 
lives) using the current Shiboken and rewrite the generator in Python, but 
it's a lot of work and I had no free time to do that so I forgot this idea.

As I said Shiboken was intended to be used to wrap C++ libraries, not C. It 
can be used to wrap C libraries but for sure there are better and simpler 
tools to do that.
 
> > On Wed, Dec 14, 2011 at 11:38 PM, Hugo Parente Lima <
> > 
> > [email protected]> wrote:
> >> > > You also need to care care of putting all your includes inside a
> >> 
> >> "extern
> >> 
> >> > > C",
> >> > > because shiboken generates C++ code.
> >> > 
> >> > Could you, please, expand this a bit? Do I need to do this in avbin.h
> >> 
> >> file,
> >> 
> >> > or in generated .cpp/.h files?
> >> 
> >> When linking C code using a C++ compiler you must tell the C++ compiler
> >> that
> >> the function is a C function, not a C++ function, you do this putting
> >> the function declaration inside a block like:
> >> 
> >> extern "C" {
> >> }
> >> 
> >> Some C libraries already do that in their headers, but if your library
> >> doesn't
> >> do that you need to find a way to have all your C includes inside a
> >> extern "C"
> >> block.
> > 
> > I've wrapped code inside avbin.h into extern "C" block following the
> > excellent explanation from
> > http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html but it still
> > doesn't help.
> > 
> > The problem is that Shiboken was meant to be used to wrap C++ code, not
> > C,
> > 
> >> so
> >> the code generator doesn't write the "extern C" before including the
> >> library
> >> headers and you need to find a way to do that. Thinking a bit I don't
> >> know if
> >> there's a clean way to do that with the current version of Shiboken.
> > 
> > Do you mean that if I execute `shiboken lib/AVbin/include/avbin.h
> > typesystem.xml` shiboken can not detect if avbin.h is C or C++ header?
> > 
> > > > > For example, I want to create binding for avbin_get_version()
> >> 
> >> function
> >> 
> >> > > > available from
> >> > > > https://github.com/AVbin/AVbin/blob/master/include/avbin.h
> >> > > > 
> >> > > > I do:
> >> > > > $ shiboken lib/AVbin/include/avbin.h typesystem.xml
> >> > > > 
> >> > > > Where typesystem.xml is the following:
> >> > > > 
> >> > > > <?xml version="1.0"?>
> >> > > > 
> >> > > > <!-- the name of the module as it will be imported from Python-->
> >> > > > <typesystem package='AVbin'>
> >> > > > 
> >> > > >   <function signature='int avbin_get_version()' rename='version'/>
> >> > > > 
> >> > > > </typesystem>
> >> > > > 
> >> > > > 
> >> > > > First of all it always complains about "No C++ classes found!"
> >> > > 
> >> > > You can ignore this message.
> >> > > 
> >> > > > Then I see the message:
> >> > > > Global function 'int avbin_get_version()' is specified in
> >> 
> >> typesystem,
> >> 
> >> > > > but not defined. This could potentially lead to compilation
> >> > > > errors.
> >> > > > 
> >> > > >  If I modify the <function> with signature='avbin_get_version()' I
> >> 
> >> get
> >> 
> >> > > > another error:
> >> > > > skipping function '::avbin_get_version', unmatched return type
> >> > > > 'int'
> >> > > 
> >> > > Probably this function wasn't found in your global header, the
> >> > > header file read by shiboken to find what classes/function can be
> >> > > bound, look at the log
> >> > > files generated by the generator.
> >> > 
> >> > They are empty. 1032 bytes each.
> >> > Console output: http://pastebin.com/fU7rzmXi
> >> > Generated files:
> >> > - out/AVbin/avbin_module_wrapper.cpp - http://pastebin.com/GUkTiksN
> >> > - out/AVbin/avbin_python.h - http://pastebin.com/KmGDW8xi
> >> 
> >> No, I meant the log files created by the generator, something like
> >> mjb_rejected_functions.log, the log must explain why the functions were
> >> rejected.
> > 
> > All logs look the same: http://paste.kde.org/159104/
> > I've specified --debug-level=full but it added only one line to console
> > output that doesn't explain anything:
> > DEBUG :: Parsed: 'typesystem.xml', 2 new entries
> > 
> > > I've uploaded the project to:
> >> > https://bitbucket.org/techtonik/shiboken-avbin

-- 
Hugo Parente Lima
INdT - Instituto Nokia de Tecnologia

Attachment: signature.asc
Description: This is a digitally signed message part.

_______________________________________________
PySide mailing list
[email protected]
http://lists.pyside.org/listinfo/pyside

Reply via email to