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);
Marc.
+----------------------------------+----------------------------------+
| Marc Aurele La France | work: 1-780-492-9310 |
| Academic Information and | fax: 1-780-492-1729 |
| Communications Technologies | email: tsi@xxxxxxxxxxx |
| 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.
_______________________________________________
Devel mailing list
Devel@xxxxxxxxxxx
http://XFree86.Org/mailman/listinfo/devel