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

Akira TAGOH akira at tagoh.org
Tue Feb 21 20:57:24 PST 2012


Sure. just filed a bug for that. I think it has to be done carefully
to avoid a regression. so I'll postpone that at this time.

On Wed, Feb 22, 2012 at 4:31 AM, Behdad Esfahbod <behdad at behdad.org> wrote:
> 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
> _______________________________________________
> Fontconfig mailing list
> Fontconfig at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/fontconfig



-- 
Akira TAGOH


More information about the Fontconfig mailing list