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:
Mike Frysinger 2011-11-08 14:19:57 -05:00
parent d9c4462778
commit 3abf981542
1 changed files with 14 additions and 4 deletions

View File

@ -17,12 +17,22 @@ while read name; do
hattr='__attribute((visibility("hidden")))' hattr='__attribute((visibility("hidden")))'
echo "extern __typeof ($name) $alias $hattr;" >> $HEAD echo "extern __typeof ($name) $alias $hattr;" >> $HEAD
echo "#define $name $alias" >> $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__/')
echo "#undef $name" >> $TAIL 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")))' cattr='__attribute((alias("'$alias'"), visibility("default")))'
echo "extern __typeof ($name) $name $cattr;" >> $TAIL echo "extern __typeof ($name) $name $cattr;" >> $TAIL
echo "#endif" >> $TAIL
;; ;;
esac esac
done done
echo "#endif" >> $TAIL [ $? -ne 0 ] && exit 1
echo "#endif /* $ifdef */" >> $TAIL
echo "#endif /* HAVE_GNUC_ATTRIBUTE */" >> $TAIL