summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2011-11-08 14:19:57 -0500
committerMike Frysinger <vapier@gentoo.org>2012-02-21 14:15:58 -0500
commit3abf981542788310104bc96b9c9cf70dd39b361b (patch)
tree38563343bb635a3df28408f5179778d493749db4
parentd9c4462778a3d97b38e267dcdf68dfe22210ed8c (diff)
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>
-rwxr-xr-xsrc/makealias18
1 files changed, 14 insertions, 4 deletions
diff --git a/src/makealias b/src/makealias
index fd9c3fd1..fca94d4a 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