[Fontconfig] Build failure with MinGW/2.10.92

LRN lrn1986 at gmail.com
Sat Jan 19 02:32:04 PST 2013


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On Sat Jan 12 10:17:11 PST 2013 Akira TAGOH wrote:
> On Sat, Jan 12, 2013 at 4:18 PM, Josh wrote:
> 
>> I am no longer able to build fontconfig on MinGW:
>> 
>> $ make make all-recursive make[1]: Entering directory 
>> `/mingw/src/fontconfig-2.10.**91' Making all in fontconfig
>> make[2]: Entering directory
>> `/mingw/src/fontconfig-2.10.**91/fontconfig' make[2]: Nothing to
>> be done for `all'. make[2]: Leaving directory 
>> `/mingw/src/fontconfig-2.10.**91/fontconfig' Making all in
>> fc-case make[2]: Entering directory 
>> `/mingw/src/fontconfig-2.10.**91/fc-case' make all-am make[3]: 
>> Entering directory `/mingw/src/fontconfig-2.10.**91/fc-case'
>> make[3]: Nothing to be done for `all-am'. make[3]: Leaving
>> directory `/mingw/src/fontconfig-2.10.**91/fc-case' make[2]:
>> Leaving directory `/mingw/src/fontconfig-2.10.**91/fc-case'
>> Making all in fc-lang make[2]: Entering directory 
>> `/mingw/src/fontconfig-2.10.**91/fc-lang' make all-am make[3]: 
>> Entering directory `/mingw/src/fontconfig-2.10.**91/fc-lang'
>> make[3]: Nothing to be done for `all-am'. make[3]: Leaving
>> directory `/mingw/src/fontconfig-2.10.**91/fc-lang' make[2]:
>> Leaving directory `/mingw/src/fontconfig-2.10.**91/fc-lang'
>> Making all in fc-glyphname make[2]: Entering directory 
>> `/mingw/src/fontconfig-2.10.**91/fc-glyphname' make all-am
>> make[3]: Entering directory
>> `/mingw/src/fontconfig-2.10.**91/fc-glyphname' make[3]: Nothing
>> to be done for `all-am'. make[3]: Leaving directory 
>> `/mingw/src/fontconfig-2.10.**91/fc-glyphname' make[2]: Leaving 
>> directory `/mingw/src/fontconfig-2.10.**91/fc-glyphname' Making
>> all in src make[2]: Entering directory 
>> `/mingw/src/fontconfig-2.10.**91/src' make all-am make[3]:
>> Entering directory `/mingw/src/fontconfig-2.10.**91/src' CC
>> fccompat.lo fccompat.c: In function 'FcMakeTempfile':
>> fccompat.c:103:2: error: #error no secure functions to create a
>> temporary file make[3]: *** [fccompat.lo] Error 1 make[3]:
>> Leaving directory `/mingw/src/fontconfig-2.10.**91/src' make[2]:
>> *** [all] Error 2 make[2]: Leaving directory
>> `/mingw/src/fontconfig-2.10.**91/src' make[1]: ***
>> [all-recursive] Error 1 make[1]: Leaving directory 
>> `/mingw/src/fontconfig-2.10.**91' make: *** [all] Error 2
>> 
>> This is the first time I ever had problems with fontconfig. I
>> link it with MPlayer, apparently the mingw.org toolchain doesn't
>> have "_MKTEMP_S" yet it worked fine before without it so why is
>> _MKTEMP_S required now?
>> 
>> I can't switch to MinGW-w64 for MPlayer even though it's more
>> updated and probably has it, I would like to, but I run endlessly
>> into even more errors with MPlayer on those toolchains..
> 
> Hmm, yeah, I tested it with MinGW-w64 and works fine. will have a
> look later, to fix this issue.
> 
> 
Here's a fix.

Also attached a fix for installation.

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (MingW32)
Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/

iQEcBAEBAgAGBQJQ+nYjAAoJEOs4Jb6SI2Cwi7sIALPFoA3XbW3pBE9XarL62zyO
awxdrHthONBnfY3s+lqslkUFS0LDhT5dEhWvdipoJDZcZCdhQuNJBtAQX3Q2u+rU
J7Ee80rtSkujCuItaNJtpmbxITwE+CPzhQJaO9Y3ueHB+ZZHlmPBkReZYLpb4wZo
OKjWJRZqS7V34pgHJYoUwYrzttfkXh3G8tFnceVRTXIGmR/ua/sCJtxa/7DXZlGX
G+mOPKeKUvK2irFX4wezJYeA4FLhODJRddzXOz/fh+l/zRxKjbEuqsiKaduy4MIy
gsv8zf8j7ZFy4G5bgvZWsPAeaDxdQqDqKASNoXnrhbQrbnr5IAuqpHX3DZuLWhU=
=W62v
-----END PGP SIGNATURE-----
-------------- next part --------------
--- fontconfig-2.10.91/src/fccompat.c.orig	2013-01-08 11:21:19 +0400
+++ fontconfig-2.10.91/src/fccompat.c	2013-01-19 14:16:29 +0400
@@ -48,6 +48,57 @@
 #define FC_O_LARGEFILE 0
 #endif
 
+#if defined(__MINGW32__) && !defined(__MINGW64__)
+#include <time.h>
+#include <math.h>
+#include <errno.h>
+#include <sys/stat.h>
+#include <string.h>
+
+static void
+randtemplate (char *template, size_t l)
+{
+  int i;
+  for (i = l - 6; i < l; i++)
+  {
+    int r = rand ();
+    if ((r / (RAND_MAX + 1)) > ((RAND_MAX + 1) / 2))
+      template[i] = 'A' + (double) rand () / (RAND_MAX + 1) * ('Z' - 'A');
+    else
+      template[i] = 'a' + (double) rand () / (RAND_MAX + 1) * ('z' - 'a');
+  }
+}
+
+static int
+mkstemp (char *template)
+{
+  int i;
+  size_t l;
+  
+  if (template == NULL)
+  {
+    errno = EINVAL;
+    return -1;
+  }
+  l = strlen (template);
+  if (l < 6 || strcmp (&template[l - 6], "XXXXXX") != 0)
+  {
+    errno = EINVAL;
+    return -1;
+  }
+  srand(time (NULL));
+  do
+  {
+    errno = 0;
+    randtemplate (template, l);
+    i = open (template, O_BINARY | O_CREAT | O_EXCL | O_TEMPORARY | O_NOINHERIT | O_RDWR, _S_IREAD | _S_IWRITE);
+  } while (i < 0 && errno == EEXIST);
+  if (i >= 0)
+    errno = 0;
+  return i;
+}
+#endif
+
 int
 FcOpen(const char *pathname, int flags, ...)
 {
@@ -99,6 +150,8 @@
    if (_mktemp_s(template, strlen(template) + 1) != 0)
        return -1;
    fd = FcOpen(template, O_RDWR | O_EXCL | O_CREAT, 0600);
+#elif defined(__MINGW32__) && !defined(__MINGW64__)
+  fd = mkstemp (template);
 #else
 #error no secure functions to create a temporary file
 #endif
-------------- next part --------------
--- fontconfig-2.10.1/src/Makefile.am.orig	2012-09-10 03:40:57 +0400
+++ fontconfig-2.10.1/src/Makefile.am	2012-09-10 03:44:14 +0400
@@ -30,7 +30,7 @@
 # gcc import library install/uninstall
 
 install-libtool-import-lib: 
-	$(INSTALL) .libs/libfontconfig.dll.a $(DESTDIR)$(libdir)
+	$(INSTALL) .libs/libfontconfig.dll.a $(DESTDIR)$(libdir)/libfontconfig.dll.a
 	$(INSTALL) fontconfig.def $(DESTDIR)$(libdir)/fontconfig.def
 
 uninstall-libtool-import-lib:
--- fontconfig-2.10.1/src/Makefile.am.orig	2012-09-18 09:30:57 +0400
+++ fontconfig-2.10.1/src/Makefile.am	2012-09-18 09:46:37 +0400
@@ -29,7 +29,8 @@
 
 # gcc import library install/uninstall
 
-install-libtool-import-lib: 
+install-libtool-import-lib: libfontconfig.la
+	$(MKDIR_P) $(DESTDIR)$(libdir)
 	$(INSTALL) .libs/libfontconfig.dll.a $(DESTDIR)$(libdir)/libfontconfig.dll.a
 	$(INSTALL) fontconfig.def $(DESTDIR)$(libdir)/fontconfig.def
 


More information about the Fontconfig mailing list