[Fontconfig] [PATCH 9/9] makealias: handle missing funcs better

Mike Frysinger vapier at gentoo.org
Tue Feb 21 11:19:22 PST 2012


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 at gentoo.org>
---
 src/makealias |   18 ++++++++++++++----
 1 files 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
-- 
1.7.8.4



More information about the Fontconfig mailing list