makealias: handle missing funcs better
When adding new functions, if the actual definition doesn't match the header (say due to a typo), the regeneration of the internal headers get confused and output bad cpp logic. This causes gcc to barf due to mismatched #ifdef/#endif. Which is a pain to figure out due to the sheer voulme of generated code. So tweak the makealias script to detect this case and error out. While we're here, improve the cpp output a bit to indent, include comments, and merge similar ifdef blocks. Signed-off-by: Mike Frysinger <vapier@gentoo.org>
This commit is contained in:
parent
d9c4462778
commit
3abf981542
|
@ -17,12 +17,22 @@ while read name; do
|
|||
hattr='__attribute((visibility("hidden")))'
|
||||
echo "extern __typeof ($name) $alias $hattr;" >> $HEAD
|
||||
echo "#define $name $alias" >> $HEAD
|
||||
grep -l '^'$name'[ (]' "$SRCDIR"/*.c | sed -n 1p | sed -e 's/^.*\/\([^.]*\)\.c/#ifdef __\1__/' >> $TAIL
|
||||
ifdef=$(grep -l '^'$name'[ (]' "$SRCDIR"/*.c | sed -n 1p | sed -e 's/^.*\/\([^.]*\)\.c/__\1__/')
|
||||
if [ -z "$ifdef" ] ; then
|
||||
echo "error: could not locate $name in src/*.c" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
if [ "$ifdef" != "$last" ] ; then
|
||||
[ -n "$last" ] && echo "#endif /* $last */" >> $TAIL
|
||||
echo "#ifdef $ifdef" >> $TAIL
|
||||
last=$ifdef
|
||||
fi
|
||||
echo "# undef $name" >> $TAIL
|
||||
cattr='__attribute((alias("'$alias'"), visibility("default")))'
|
||||
echo "extern __typeof ($name) $name $cattr;" >> $TAIL
|
||||
echo "#endif" >> $TAIL
|
||||
;;
|
||||
esac
|
||||
done
|
||||
echo "#endif" >> $TAIL
|
||||
[ $? -ne 0 ] && exit 1
|
||||
echo "#endif /* $ifdef */" >> $TAIL
|
||||
echo "#endif /* HAVE_GNUC_ATTRIBUTE */" >> $TAIL
|
||||
|
|
Loading…
Reference in New Issue