summaryrefslogtreecommitdiff
blob: e7a1ad5ca3e725b6cebeffe557342572da56297b (plain)
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(".");