Building against fontconfig-2.4.2 (latest release) causes two missing symbols when linking libXft.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

(This is part of a collection of patches and workarounds I have
for consideration for problems in the build process in current
cvs.  I'll just briefly describe each patch(-set) below, and if
needed will put them into bugzilla separately with more details.)


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-<<<<


We should not blindly apply this patch to cvs because it would
then fail for most systems that have pre-August-2006 versions of
fontconfig.  Instead, we should add #ifdefs to xf86 that check the
installed fontconfig's version and then decide to use the new
function names.  But I don't quite know how to do this rightly.

Using a current release of fontconfig will bring in a lot of
fixes in that area, which is enough of a reason to consider it.

Thanks for any help.  :)


_______________________________________________
Devel mailing list
Devel@xxxxxxxxxxx
http://XFree86.Org/mailman/listinfo/devel

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [X Forum]     [XFree86]     [XFree86 Newbie]     [X.Org]     [IETF Annouce]     [Security]     [Fontconfig]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]

  Powered by Linux