Re: Building against fontconfig-2.4.2 (latest release) causes two missing symbols when linking libXft.
Marc Aurele La France <[email protected]>
| Newsgroups | gmane.comp.xfree86.devel |
|---|---|
| Message-ID | <Pine.WNT.4.64.0704221006160.1468@tsi> |
On Sat, 14 Apr 2007, Marc Aurele La France wrote:
> On Wed, 11 Apr 2007, SciFi wrote:
>> 1. Building against fontconfig-2.4.2 (latest release) causes two
>> missing symbols when linking libXft.
>> Build Log snip:
>>>>>>
>> [...]
>> ld: Undefined symbols:
>> _FcPatternFindElt
>> _FcPatternInsertElt
>> /usr/bin/libtool: internal link edit command failed
>> <<<<
>> To recreate:
>> a) build and install fontconfig-2.4.2
>> b) specify these in your [build/]config/cf/host.def file:
>> #define HasFontconfig YES
>> #define FontconfigDir /usr/local (or wherever you installed fontconfig)
>> Discussion:
>> There are two API functions that have been renamed in recent
>> versions of fontconfig, while their ABI (parms passed, header
>> layouts, etc.) remain the same.
>> Chiefly what we need to do in xf86's source:
>> s/FcPatternFindElt/FcPatternObjectFindElt/
>> s/FcPatternInsertElt/FcPatternObjectInsertElt/
>> I don't know enough how to insert #ifdefs that will test the
>> installed fontconfig's version criteria, so that we could make
>> xf86 compilable on old-and-new versions. I did find the commit
>> that made this change:
>> <http://lists.freedesktop.org/archives/fontconfig/2006-August/002381.html>
>> ...but still not sure what was the "switchover" point for this
>> commit, i.e. the version-rel-mod-patch level to use for #ifdefs to
>> decide after which point to use the new function names. I hope
>> you know what I mean. ;)
>> For now, a quick patch to fix this:
>>>>>> -cut->>>>
>> --- xc/lib/Xft1/xftint.h_orig 2002-06-30 23:28:17 -0500
>> +++ xc/lib/Xft1/xftint.h 2007-04-06 08:17:55 -0500
>> @@ -92,10 +92,10 @@
>> * Yes, these are stolen from fcint.h
>> */
>> FcPatternElt *
>> -FcPatternFindElt (const FcPattern *p, const char *object);
>> +FcPatternObjectFindElt (const FcPattern *p, const char *object);
>>
>> FcPatternElt *
>> -FcPatternInsertElt (FcPattern *p, const char *object);
>> +FcPatternObjectInsertElt (FcPattern *p, const char *object);
>>
>> typedef FcPatternElt XftPatternElt;
>>
>> --- xc/lib/Xft1/xftpat.c_orig 2002-06-07 18:44:23 -0500
>> +++ xc/lib/Xft1/xftpat.c 2007-04-06 08:18:45 -0500
>> @@ -210,9 +210,9 @@
>> XftPatternFind (XftPattern *p, const char *object, FcBool insert)
>> {
>> if (insert)
>> - return FcPatternInsertElt (p, object);
>> + return FcPatternObjectInsertElt (p, object);
>> else
>> - return FcPatternFindElt (p, object);
>> + return FcPatternObjectFindElt (p, object);
>> }
>>
>>
>> <<<<-cut-<<<<
> Here's a quicker one...
> *** cvs/xc/lib/Xft1/xftint.h Sun Jun 30 22:28:17 2002
> --- devel/xc/lib/Xft1/xftint.h Sat Apr 14 21:40:45 2007
> *************** typedef struct _FcPatternElt FcPatternEl
> *** 91,96 ****
> --- 91,107 ----
> /*
> * Yes, these are stolen from fcint.h
> */
> + /*
> + * Unfortunately, fontconfig's version number was not updated when these
> were
> + * renamed (in 2.3.95).
> + */
> + #if FC_VERSION == 20395
> + # error "fontconfig 2.3.95 not supported"
> + #endif
> + #if FC_VERSION > 20395
> + # define FcPatternFindElt FcPatternObjectFindElt
> + # define FcPatternInsertElt FcPatternObjectInsertElt
> + #endif
> FcPatternElt *
> FcPatternFindElt (const FcPattern *p, const char *object);
>
This has now been committed. Thanks for reporting the problem.
Marc.
+----------------------------------+----------------------------------+
| Marc Aurele La France | work: 1-780-492-9310 |
| Academic Information and | fax: 1-780-492-1729 |
| Communications Technologies | email: [email protected] |
| 352 General Services Building +----------------------------------+
| University of Alberta | |
| Edmonton, Alberta | Standard disclaimers apply |
| T6G 2H1 | |
| CANADA | |
+----------------------------------+----------------------------------+
XFree86 developer and VP. ATI driver and X server internals.