From 3abf981542788310104bc96b9c9cf70dd39b361b Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Tue, 8 Nov 2011 14:19:57 -0500 Subject: [PATCH] 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 --- src/makealias | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/makealias b/src/makealias index fd9c3fd..fca94d4 100755 --- a/src/makealias +++ b/src/makealias @@ -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 - echo "#undef $name" >> $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