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

Behdad Esfahbod behdad at behdad.org
Tue Feb 21 11:31:10 PST 2012


I think we should just remove the alias stuff and use more modern ways to
achieve the same.  These days people mostly just do -Bsymbolic-functions,
which is not exactly the same, but is good enough.  So, I'd say just remove
the alias stuff...

On 02/21/2012 02:19 PM, Mike Frysinger wrote:
> 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


More information about the Fontconfig mailing list