1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
--- configure.ac
+++ configure.ac
@@ -1,4 +1,4 @@
-dnl Initialize autoconf and automake
+nl Initialize autoconf and automake
AC_INIT
AC_CONFIG_SRCDIR(src/main.c)
AC_PREREQ(2.52)
@@ -428,7 +428,18 @@ AC_TRY_LINK(
#include <fontconfig/fontconfig.h>
, FcInit(),
AC_MSG_RESULT([yes])
-AC_DEFINE(HAVE_FONTCONFIG_FONTCONFIG_H,1,[Define to 1 if you have the <fontconfig/fontconfig.h> header file.]),
+AC_DEFINE(HAVE_FONTCONFIG_FONTCONFIG_H,1,[Define to 1 if you have the <fontconfig/fontconfig.h> header file.])
+
+AC_MSG_CHECKING([For fontconfig FcFini()])
+AC_TRY_LINK(
+#include <fontconfig/fontconfig.h>
+, FcFini(),
+AC_MSG_RESULT([yes])
+AC_DEFINE(HAVE_FONTCONFIG_FCFINI,1,[Define to 1 if FcFini() call exists])
+,
+AC_MSG_RESULT([no]))
+
+,
AC_MSG_RESULT([no])
FONTCONFIG_LIBS=
FONTCONFIG_CFLAGS=
--- src/xwindow.c
+++ src/xwindow.c
@@ -123,9 +123,17 @@
if ((strlen((char*)file)>4) &&
(strstr((char*)file+strlen((char*)file)-4,".ttf")))
imlib_add_path_to_font_path(dirname((char*)file));
- FcFontSetDestroy(fs);
- FcObjectSetDestroy(os);
}
+#ifdef HAVE_FONTCONFIG_FCFINI
+ FcFini();
+#else
+ /* On FontConfig >= 2.4, this causes a segfault, probably due to the new
+ caching mechanism: we don't have to care, since FcFini() always exists,
+ and does the dirty dessalocation job just fine.
+ */
+ if (fs) FcFontSetDestroy(fs);
+ FcObjectSetDestroy(os);
+#endif
}
#endif
imlib_add_path_to_font_path(".");
|