Re: [PATCH] non-gcc-specific exception.sh

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sat, Oct 12, 2019 at 06:55:39PM +0200, Nicolas Iooss wrote:
> > Will this one do better?  Looks a bit messy though[1]:
> >
> > gcc -E -I../include -xc ../include/selinux/selinux.h |
> >   awk -F '[ (]' '/^#/{p=0} \
> >     /^# .*selinux\/selinux\.h/{p=1} \
> >     /^extern int/{if(p==1){print $3}}'
> I wanted to spend some time testing different approaches before
> replying. Your awk command works fine, but I am wondering
> whether its complexity is needed at all.

I've considered this approach too but decided to try and mimic
what's done already first, and maybe try the next step afterwards
(albeit "a temporary solution is the most permanent one" is a well
known effect indeed :-).

> For example, why not directly grab the "extern int" lines in
> selinux.h (using sed -n s/.../.../p). This would work well with
> libselinux and avoid using awk for this simple task, but not
> for libsemanage...  or it could, with:
> 
>     cat ../include/semanage/*.h | \
>     sed -n 's/^extern \+int \+\([0-9A-Za-z_]\+\) *(.*$/\1/p'
> 
> Actually, the main reason why it is currently not possible to migrate
> from "gcc -aux-info and awk" to "cat | sed" is caused by the fact that
> the file generated by "gcc -aux-info" adds "extern" before all
> function prototypes. Adding "extern" directly to the prototypes of all
> exported functions in header files seems to be required in order to
> use something else than "gcc -aux-info" to generate the glue code that
> handles exception in Python bindings.

That's another part I'm not strong at, being rather shell/make
sysadmin/maintainer type than a proper C developer; only spotted
the selinuxfs_exists prototype difference, in particular.

> Therefore I suggest the following approach:
> 1. add "extern" to all exported functions in libselinux and
> libsemanage public headers (I can send a patch for this
> tomorrow if you don't want to do this)

I'd be grateful to you as touching code I have no clue about
is something I try to avoid.

> 2. change exception.sh to use something else than "gcc -aux-info"
> to generate the glue code

This is what I can take care of, -E way or through direct parsing.

> 3. add something so that "make test" compares the result of "$CC
> -aux-info" (if $CC is gcc-compatible) with the new way to find
> functions, in order to report differences in the generated glue code.
> This could for example consist in adding some code in exception.sh
> such that "./exception.sh test" performs this check.

I can do that either given your support with review.

> Would this suit you?

Definitely.

> By the way, I found out that libsemanage generates glue code
> for select() and pselect() too, as it does not filter the
> output of "gcc -aux-info". This is a bug that needs to be
> fixed.

~/git/libselinux/libsemanage/src> touch FILTER-OUT-p_select-TOO    

-- 
 ---- WBR, Michael Shigorin / http://altlinux.org
  ------ http://opennet.ru / http://anna-news.info



[Index of Archives]     [Selinux Refpolicy]     [Linux SGX]     [Fedora Users]     [Fedora Desktop]     [Yosemite Photos]     [Yosemite Camping]     [Yosemite Campsites]     [KDE Users]     [Gnome Users]

  Powered by Linux