diff options
author | Mike Frysinger <vapier@gentoo.org> | 2011-11-08 14:19:57 -0500 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2012-02-21 14:15:58 -0500 |
commit | 3abf981542788310104bc96b9c9cf70dd39b361b (patch) | |
tree | 38563343bb635a3df28408f5179778d493749db4 | |
parent | d9c4462778a3d97b38e267dcdf68dfe22210ed8c (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-x | src/makealias | 18 |
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 |