[CastXML] how to print the exact same declaration as in the header ?

Matt mattator at gmail.com
Mon Jul 25 11:58:35 EDT 2016


> I am not sure there is any test for what you want to achieve. Maybe we
> should
> first write a minimal c++/c code example, demonstrating the problem.
> There is a test called “unittests/plain_c_tester.py”, which is probably the
> only C-things  pygccxml supports.
I don't see anything specific to C in this script ?!
I would like to see how does pygccxml invoke castxml and then how
castxml invokes libclang etc... I've tried configuring the XML
generator with cflags="-nostdinc -I/usr/include" and would like to
make sure those flags are passed on.

Also I don't know if it's linked but I want my script to find where
the function "sigaction" is declared (I want the /usr/include/signal.h
declaration). I search with:
`criteria = declarations.calldef_matcher(name=row["name"])`
but right now pygccxml/castxml returns the structure in
/usr/include/x86_64-linux-gnu/bits/sigaction.h (which shouldn't be
resolved as calldef IMO). Is it correct ?

Thanks for your help :)


> Cheers
>
> Michka
>
>
>
> 2016-07-22 16:21 GMT+02:00 Michka Popoff <michkapopoff at gmail.com>:
>
> Hi
>
> thanks for the nice comments.
>
> Using print on declarations in pygccxml is a nice way to debug you code,
> but often you may not want to rely on the __str__ implementation in you real
> code.
>
> The output of the __str__ method may vary depending on you compiler /
> platform / code,
> and I can not guarantee that this will work in a reliable way in all the
> situations.
> This is something I may add to the documentation; __str__ is for debugging
> purposes only.
>
> It is probably better to build the string you want by using the .name,
> .return_type,
> .arguments ... attributes. This is often more flexible, and also more
> performant,
> as you select only the things that you are interested in.
>
> Cheers
>
> Michka
>
>
> On 22 Jul 2016, at 16:10, Matt <mattator at gmail.com> wrote:
>
> I found the code in declarations/free_calldef.py and hacked it
> locally, I might copy/paste the code in my script later then.
>
> Sorry for the noise
>
> 2016-07-22 15:36 GMT+02:00 Matt <mattator at gmail.com>:
>
> Hi,
>
> I've just started with pygccxml/castxml and I must admit it's quite
> impressive: doc/examples and worked straightout of the box.
>
> I want to use pygccxml to generate wrapper functions around glibc
> functions. I can't use LD_PRELOAD or --wrap techniques so I have to
> copy/paste the declarations of these functions which is a pain.
> I am trying to automate this copy/paste via pygccxml.
>
> So far, I have:
> ==
> func1a = global_namespace.free_function(name="printf")
> print(func1a)
> ==
> which output:
> extern int printf(__restrict__ char const * __format, ...) [free function]
> is very near to what I want:
> extern int printf(__restrict__ char const * __format, ...)
>
> I have done dir(func1a) to see which members I could use and grepped
> for __str__ to see the magic but miserably fail to find the location.
> How could I output the same declaration as in the header please ?
>
>
> Cheers
>
> Nb: In the list of  programs using pygccxml you could add www.nsnam.org
>
> _______________________________________________
> CastXML mailing list
> CastXML at public.kitware.com
> http://public.kitware.com/mailman/listinfo/castxml
>
>
>


More information about the CastXML mailing list