[Fontconfig] fontconfig: Branch 'master' - 2 commits

Behdad Esfahbod behdad at kemper.freedesktop.org
Mon Dec 27 23:23:16 PST 2010


 Makefile.am              |    2 
 configure.in             |   64 ++++-----------------
 doc/Makefile.am          |   19 +++---
 fc-arch/Makefile.am      |   54 ------------------
 fc-arch/fc-arch.c        |  138 -----------------------------------------------
 fc-arch/fcarch.tmpl.h    |   65 ----------------------
 fc-cache/fc-cache.c      |    2 
 fc-case/Makefile.am      |   14 ++--
 fc-cat/fc-cat.c          |    2 
 fc-glyphname/Makefile.am |   14 ++--
 fc-lang/Makefile.am      |   17 +++--
 src/Makefile.am          |    6 +-
 src/fcarch.c             |   72 ++++++++++++++++++++++++
 src/fcarch.h             |   71 ++++++++++++++++++++++++
 src/fccache.c            |    3 -
 src/fcint.h              |    4 +
 16 files changed, 204 insertions(+), 343 deletions(-)

New commits:
commit d1a0fca316ab8d9d61474028da54615e4d9f7540
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Tue Dec 28 00:59:19 2010 -0600

    Make fc-arch stuff cross-compiling-safe
    
    Fixes:
    Bug 32679 - fontconfig-2.8.0 does not cross compile
    Bug 25462 - Cross-compilation doesn't work

diff --git a/Makefile.am b/Makefile.am
index ce36505..7931717 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -22,7 +22,7 @@
 #  PERFORMANCE OF THIS SOFTWARE.
 
 DOCSRC=@DOCSRC@
-SUBDIRS=fontconfig fc-case fc-lang fc-glyphname fc-arch src \
+SUBDIRS=fontconfig fc-case fc-lang fc-glyphname src \
 	fc-cache fc-cat fc-list fc-match fc-pattern fc-query fc-scan \
 	conf.d $(DOCSRC) test
 	 
diff --git a/configure.in b/configure.in
index 0a7b1b0..5d92b5f 100644
--- a/configure.in
+++ b/configure.in
@@ -56,7 +56,7 @@ AC_SUBST(LIBT_CURRENT_MINUS_AGE)
 
 dnl ==========================================================================
 
-AM_CONFIG_HEADER(config.h)
+AC_CONFIG_HEADERS(config.h)
 
 AC_PROG_CC
 AC_PROG_INSTALL
@@ -98,59 +98,12 @@ AM_CONDITIONAL(CROSS_COMPILING, test $cross_compiling = yes)
 
 dnl ==========================================================================
 
-# Setup for compiling build tools (fc-glyphname, etc)
-AC_MSG_CHECKING([for a C compiler for build tools])
-if test $cross_compiling = yes; then
-  AC_CHECK_PROGS(CC_FOR_BUILD, gcc cc)
-else
-  CC_FOR_BUILD=$CC
-fi
-AC_MSG_RESULT([$CC_FOR_BUILD])
-AC_SUBST(CC_FOR_BUILD)
-
-AC_MSG_CHECKING([for suffix of executable build tools])
-if test $cross_compiling = yes; then
-  cat >conftest.c <<\_______EOF
-int
-main ()
-{
-  exit (0);
-}
-_______EOF
-  for i in .exe ""; do
-    compile="$CC_FOR_BUILD conftest.c -o conftest$i"
-    if AC_TRY_EVAL(compile); then
-      if (./conftest) 2>&AC_FD_CC; then
-	EXEEXT_FOR_BUILD=$i
-	break
-      fi
-    fi
-  done
-  rm -f conftest*
-  if test "${EXEEXT_FOR_BUILD+set}" != set; then
-    AC_MSG_ERROR([Cannot determine suffix of executable build tools])
-  fi
-else
-  EXEEXT_FOR_BUILD=$EXEEXT
-fi
-AC_MSG_RESULT([$EXEEXT_FOR_BUILD])
-AC_SUBST(EXEEXT_FOR_BUILD)
-
-dnl ==========================================================================
-
 AC_ARG_WITH(arch,      [  --with-arch=ARCH      Force architecture to ARCH], arch="$withval", arch=auto)
 
-if test $cross_compiling = yes; then
-	case "$arch" in
-	auto)
-		AC_MSG_ERROR([Cannot autodetect architecture in cross compile environment]
-			     [Use --with-arch=ARCH to specify architecture])
-		;;
-	esac
+if test "x$arch" != xauto; then
+	AC_DEFINE_UNQUOTED([FC_ARCHITECTURE], "$arch", [Architecture prefix to use for cache file names])
 fi
 
-ARCHITECTURE=$arch
-AC_SUBST(ARCHITECTURE)
 
 dnl ==========================================================================
 
@@ -529,13 +482,20 @@ fi
 AC_SUBST(DOCSRC)
 AC_SUBST(DOCMAN3)
 
+
+dnl Figure out what cache format suffix to use for this architecture
+AC_C_BIGENDIAN
+AC_CHECK_SIZEOF([void *])
+AC_CHECK_ALIGNOF([double])
+
+
+
 AC_OUTPUT([
-Makefile 
+Makefile
 fontconfig/Makefile
 fc-lang/Makefile
 fc-glyphname/Makefile
 fc-case/Makefile
-fc-arch/Makefile
 src/Makefile
 conf.d/Makefile
 fc-cache/Makefile
diff --git a/fc-arch/Makefile.am b/fc-arch/Makefile.am
deleted file mode 100644
index b1ecbf4..0000000
--- a/fc-arch/Makefile.am
+++ /dev/null
@@ -1,54 +0,0 @@
-#
-# $Id $
-#
-# Copyright © 2003 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission.  The authors make no
-# representations about the suitability of this software for any purpose.  It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-
-CC = @CC_FOR_BUILD@
-EXEEXT = @EXEEXT_FOR_BUILD@
-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-
-INCLUDES=-I${top_srcdir}/src -I${top_srcdir} $(WARN_CFLAGS)
-
-TMPL=fcarch.tmpl.h
-STMPL=${top_srcdir}/fc-arch/fcarch.tmpl.h
-TARG=fcarch.h
-
-ARCHITECTURE=@ARCHITECTURE@
-.PRECIOUS: $(TARG)
-
-noinst_PROGRAMS=fc-arch
-
-EXTRA_DIST=$(TMPL)
-
-$(TARG):fc-arch${EXEEXT} $(STMPL) ${top_srcdir}/src/fcint.h ../config.h
-	$(AM_V_GEN) $(RM) $(TARG); \
-	./fc-arch${EXEEXT} $(ARCHITECTURE) < $(STMPL) > $(TARG).tmp && \
-	mv $(TARG).tmp $(TARG)
-
-ALIAS_FILES = fcalias.h fcaliastail.h
-
-BUILT_SOURCES = $(ALIAS_FILES) $(TARG)
-
-$(ALIAS_FILES): 
-	touch $(ALIAS_FILES)
-
-CLEANFILES=$(TARG) $(ALIAS_FILES)
diff --git a/fc-arch/fc-arch.c b/fc-arch/fc-arch.c
deleted file mode 100644
index 1ef0cf1..0000000
--- a/fc-arch/fc-arch.c
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Copyright © 2006 Keith Packard
- * Copyright © 2005 Patrick Lam
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of the copyright holders not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  The copyright holders make no representations
- * about the suitability of this software for any purpose.  It is provided "as
- * is" without express or implied warranty.
- *
- * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
- * OF THIS SOFTWARE.
- */
-
-#include "fcint.h"
-#include <ctype.h>
-
-#define ENDIAN_TEST 0x01020304
-#define MACHINE_SIGNATURE_SIZE 1024
-
-static char *
-FcCacheMachineSignature (void)
-{
-    static char buf[MACHINE_SIGNATURE_SIZE];
-    int32_t magic = ENDIAN_TEST;
-    char * m = (char *)&magic;
-
-    sprintf (buf, "%01x%01x%01x%01x_"
-	     "%02x_%02x_%02x_%02x_%02x_%02x_%02x_%02x_%02x_%02x_%02x_%02x_"
-	     "%02x_%02x_%02x_%02x_%02x_%02x_%02x_%02x_%02x_%02x",
-	     m[0], m[1], m[2], m[3],
-	     (unsigned int)sizeof (FcAlign),
-	     (unsigned int)sizeof (char),
-	     (unsigned int)sizeof (char *),
-	     (unsigned int)sizeof (int),
-	     (unsigned int)sizeof (intptr_t),
-	     (unsigned int)sizeof (FcPattern),
-	     (unsigned int)sizeof (FcPatternEltPtr),
-	     (unsigned int)sizeof (struct  FcPatternElt *),
-	     (unsigned int)sizeof (FcPatternElt),
-	     (unsigned int)sizeof (FcObject),
-	     (unsigned int)sizeof (FcValueListPtr),
-	     (unsigned int)sizeof (FcValue),
-	     (unsigned int)sizeof (FcValueBinding),
-	     (unsigned int)sizeof (struct  FcValueList *),
-	     (unsigned int)sizeof (FcStrSet *), /* For FcLangSet */
-	     (unsigned int)sizeof (FcCharSet),
-	     (unsigned int)sizeof (FcCharLeaf **),
-	     (unsigned int)sizeof (FcChar16 *),
-	     (unsigned int)sizeof (FcChar16),
-	     (unsigned int)sizeof (FcCharLeaf),
-	     (unsigned int)sizeof (FcChar32),
-	     (unsigned int)sizeof (FcCache));
-
-    return buf;
-}
-
-int
-main (int argc, char **argv)
-{
-    static char		line[1024];
-    char		*signature;
-    int			signature_length;
-    char		*space;
-    char		*arch = NULL;
-    int			lineno = 0;
-    
-    if (argc != 2)
-	fprintf (stderr, "Usage: %s <architecture>|auto < fcarch.tmpl.h > fcarch.h\n",
-		 argv[0]);
-    arch = argv[1];
-    /*
-     * Scan the input until the marker is found
-     */
-    
-    while (fgets (line, sizeof (line), stdin))
-    {
-	lineno++;
-	if (!strncmp (line, "@@@", 3))
-	    break;
-	fputs (line, stdout);
-    }
-    signature = FcCacheMachineSignature();
-    signature_length = strlen (signature);
-    
-    if (strcmp (arch, "auto") == 0)
-    {
-	arch = NULL;
-	/*
-	 * Search for signature
-	 */
-	while (fgets (line, sizeof (line), stdin)) 
-	{
-	    lineno++;
-	    /*
-	     * skip comments
-	     */
-	    if (!strncmp (line, "@@@", 3))
-		continue;
-	    space = line;
-	    while (*space && !isspace (*space))
-		space++;
-	    if (!space)
-	    {
-		fprintf (stderr, "%s: malformed input on line %d\n",
-			 argv[0], lineno);
-		exit (1);
-	    }
-	    *space++ = '\0';
-	    while (isspace (*space))
-		space++;
-	    if (!strncmp (space, signature, signature_length))
-	    {
-		arch = line;
-		break;
-	    }
-	}
-    }
-    if (!arch)
-    {
-	fprintf (stderr, "%s: unknown signature \"%s\"\n", argv[0], signature);
-	fprintf (stderr, "\tPlease update fcarch.tmpl.h and rebuild\n");
-	exit (1);
-    }
-    printf ("#define FC_ARCHITECTURE \"%s\"\n", arch);
-    fflush (stdout);
-    exit (ferror (stdout));
-}
-
diff --git a/fc-arch/fcarch.tmpl.h b/fc-arch/fcarch.tmpl.h
deleted file mode 100644
index 2f972ba..0000000
--- a/fc-arch/fcarch.tmpl.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright © 2006 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission.  The authors make no
- * representations about the suitability of this software for any purpose.  It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-@@@ 
-@@@ Each unique machine architecture needs an entry in this file
-@@@ If fc-arch runs and doesn't find a matching entry, it will print
-@@@ out the archtecture signature in the error message. Take that
-@@@ signature and place it in this file along with a suitable architecture
-@@@ name. Architecture names are used to construct file names, so
-@@@ use something reasonable and don't include any spaces
-@@@
-@@@ So far the differences boil down to: endianness, 32 vs 64 bit pointers,
-@@@ and on 32bit ones, whether double is aligned to one word or two words.
-@@@ Those result in the 6 formats listed below.
-@@@
-@@@ ,name (endianness,pointer-size,double-alignment)
-@@@ |   ,endian
-@@@ |   |    ,FcAlign
-@@@ |   |    |  ,char
-@@@ |   |    |  |  ,char*
-@@@ |   |    |  |  |  ,int
-@@@ |   |    |  |  |  |  ,intptr_t
-@@@ |   |    |  |  |  |  |  ,Pattern
-@@@ |   |    |  |  |  |  |  |  ,EltPtr
-@@@ |   |    |  |  |  |  |  |  |  ,Elt *
-@@@ |   |    |  |  |  |  |  |  |  |  ,Elt
-@@@ |   |    |  |  |  |  |  |  |  |  |  ,ObjPtr
-@@@ |   |    |  |  |  |  |  |  |  |  |  |  ,ValueListPtr
-@@@ |   |    |  |  |  |  |  |  |  |  |  |  |  ,Value
-@@@ |   |    |  |  |  |  |  |  |  |  |  |  |  |  ,ValueBinding
-@@@ |   |    |  |  |  |  |  |  |  |  |  |  |  |  |  ,ValueList *
-@@@ |   |    |  |  |  |  |  |  |  |  |  |  |  |  |  |  ,StrSet *
-@@@ |   |    |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ,CharSet
-@@@ |   |    |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ,CharLeaf **
-@@@ |   |    |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ,Char16 *
-@@@ |   |    |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ,Char16
-@@@ |   |    |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ,CharLeaf
-@@@ |   |    |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ,Char32
-@@@ |   |    |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ,Cache
-@@@ |   |    |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
-le32d4	4321_08_01_04_04_04_10_04_04_08_04_04_0c_04_04_04_10_04_04_02_20_04_20
-le32d8	4321_08_01_04_04_04_10_04_04_08_04_04_10_04_04_04_10_04_04_02_20_04_20
-le64	4321_08_01_08_04_08_18_08_08_10_04_08_10_04_08_08_18_08_08_02_20_04_38
-be32d4	1234_08_01_04_04_04_10_04_04_08_04_04_0c_04_04_04_10_04_04_02_20_04_20
-be32d8	1234_08_01_04_04_04_10_04_04_08_04_04_10_04_04_04_10_04_04_02_20_04_20
-be64	1234_08_01_08_04_08_18_08_08_10_04_08_10_04_08_08_18_08_08_02_20_04_38
diff --git a/fc-cache/fc-cache.c b/fc-cache/fc-cache.c
index a0da50e..d265350 100644
--- a/fc-cache/fc-cache.c
+++ b/fc-cache/fc-cache.c
@@ -22,7 +22,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-#include "../fc-arch/fcarch.h"
+#include "../src/fcarch.h"
 
 #ifdef HAVE_CONFIG_H
 #include <config.h>
diff --git a/fc-cat/fc-cat.c b/fc-cat/fc-cat.c
index 40c38c4..c6c3993 100644
--- a/fc-cat/fc-cat.c
+++ b/fc-cat/fc-cat.c
@@ -32,7 +32,7 @@
 #endif
 
 #include <fontconfig/fontconfig.h>
-#include "../fc-arch/fcarch.h"
+#include "../src/fcarch.h"
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
diff --git a/src/Makefile.am b/src/Makefile.am
index 59b9c75..e300fe9 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -84,13 +84,12 @@ noinst_HEADERS=fcint.h fcftint.h fcdeprecate.h
 ALIAS_FILES = fcalias.h fcaliastail.h fcftalias.h fcftaliastail.h
 
 BUILT_SOURCES = $(ALIAS_FILES) \
-	../fc-arch/fcarch.h \
 	../fc-case/fccase.h \
 	../fc-glyphname/fcglyphname.h \
 	../fc-lang/fclang.h
 
-../fc-arch/fcarch.h:
-	cd ../fc-arch && $(MAKE) $(AM_MAKEFLAGS) fcarch.h
+noinst_PROGRAMS = fcarch
+
 ../fc-case/fccase.h:
 	cd ../fc-case && $(MAKE) $(AM_MAKEFLAGS) fccase.h
 ../fc-glyphname/fcglyphname.h:
@@ -99,6 +98,7 @@ BUILT_SOURCES = $(ALIAS_FILES) \
 	cd ../fc-lang && $(MAKE) $(AM_MAKEFLAGS) fclang.h
 
 libfontconfig_la_SOURCES = \
+	fcarch.h \
 	fcatomic.c \
 	fcblanks.c \
 	fccache.c \
diff --git a/src/fcarch.c b/src/fcarch.c
new file mode 100644
index 0000000..36d0ce5
--- /dev/null
+++ b/src/fcarch.c
@@ -0,0 +1,72 @@
+/*
+ * Copyright © 2002 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission.  The authors make no
+ * representations about the suitability of this software for any purpose.  It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <stdio.h>
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+/* If architecture is hardcoded, skip the assert tests */
+
+#ifndef FC_ARCHITECTURE
+
+#include "fcarch.h"
+
+/* Make sure the cache structure is consistent with what we expect */
+
+#include "fcint.h"
+
+FC_ASSERT_STATIC (1 == sizeof (char));
+FC_ASSERT_STATIC (2 == sizeof (FcChar16));
+FC_ASSERT_STATIC (4 == sizeof (int));
+FC_ASSERT_STATIC (4 == sizeof (FcChar32));
+FC_ASSERT_STATIC (4 == sizeof (FcObject));
+FC_ASSERT_STATIC (4 == sizeof (FcValueBinding));
+FC_ASSERT_STATIC (8 == sizeof (FcAlign));
+FC_ASSERT_STATIC (0x20 == sizeof (FcCharLeaf));
+
+FC_ASSERT_STATIC (SIZEOF_VOID_P == sizeof (intptr_t));
+FC_ASSERT_STATIC (SIZEOF_VOID_P == sizeof (FcPatternEltPtr));
+FC_ASSERT_STATIC (SIZEOF_VOID_P == sizeof (FcValueListPtr));
+FC_ASSERT_STATIC (SIZEOF_VOID_P == sizeof (char *));
+FC_ASSERT_STATIC (SIZEOF_VOID_P == sizeof (struct FcPatternElt *));
+FC_ASSERT_STATIC (SIZEOF_VOID_P == sizeof (FcValueList *));
+FC_ASSERT_STATIC (SIZEOF_VOID_P == sizeof (FcStrSet *));
+FC_ASSERT_STATIC (SIZEOF_VOID_P == sizeof (FcCharLeaf **));
+FC_ASSERT_STATIC (SIZEOF_VOID_P == sizeof (FcChar16 *));
+
+FC_ASSERT_STATIC (0x08 + 1*SIZEOF_VOID_P == sizeof (FcValue));
+FC_ASSERT_STATIC (0x00 + 2*SIZEOF_VOID_P == sizeof (FcPatternElt));
+FC_ASSERT_STATIC (0x08 + 2*SIZEOF_VOID_P == sizeof (FcPattern));
+FC_ASSERT_STATIC (0x08 + 2*SIZEOF_VOID_P == sizeof (FcCharSet));
+FC_ASSERT_STATIC (0x08 + 6*SIZEOF_VOID_P == sizeof (FcCache));
+
+#endif
+
+
+int
+main (int argc, char **argv)
+{
+    printf ("%s\n", FC_ARCHITECTURE);
+    return 0;
+}
diff --git a/src/fcarch.h b/src/fcarch.h
new file mode 100644
index 0000000..0c8cd05
--- /dev/null
+++ b/src/fcarch.h
@@ -0,0 +1,71 @@
+/*
+ * Copyright © 2006 Keith Packard
+ * Copyright © 2010 Behdad Esfahbod
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission.  The authors make no
+ * representations about the suitability of this software for any purpose.  It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+#ifndef _FCARCH_H_
+#define _FCARCH_H_
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+/*
+ * Each unique machine architecture needs an entry in this file
+ * So far the differences boil down to: endianness, 32 vs 64 bit pointers,
+ * and on 32bit ones, whether double is aligned to one word or two words.
+ * Those result in the 6 formats listed below.
+ *
+ * If any of the assertion errors in fccache.c fail, you need to add a new
+ * architecture.  Contact the fontconfig mailing list in that case.
+ *
+ * name		endianness	pointer-size	double-alignment
+ *
+ * le32d4	4321		4		4
+ * le32d8	4321		4		8
+ * le64		4321		8		8
+ * be32d4	1234		4		4
+ * be32d8	1234		4		8
+ * be64		1234		8		8
+ */
+
+#if defined(WORDS_BIGENDIAN) && WORDS_BIGENDIAN
+# define FC_ARCH_ENDIAN "be"
+#else /* !WORDS_BIGENDIAN */
+# define FC_ARCH_ENDIAN "le"
+#endif
+
+#if SIZEOF_VOID_P == 4
+# if ALIGNOF_DOUBLE == 4
+#  define FC_ARCH_SIZE_ALIGN "32d4"
+# else /* ALIGNOF_DOUBLE != 4 */
+#  define FC_ARCH_SIZE_ALIGN "32d8"
+# endif
+#else /* SIZEOF_VOID_P != 4 */
+# define FC_ARCH_SIZE_ALIGN "64"
+#endif
+
+#ifdef ARCHITECTURE
+# define ARCHITECTURE FC_ARCHITECTURE
+#else
+# define FC_ARCHITECTURE FC_ARCH_ENDIAN FC_ARCH_SIZE_ALIGN
+#endif
+
+#endif /* _FCARCH_H_ */
diff --git a/src/fccache.c b/src/fccache.c
index d557d34..1bbd799 100644
--- a/src/fccache.c
+++ b/src/fccache.c
@@ -22,7 +22,7 @@
  */
 
 #include "fcint.h"
-#include "../fc-arch/fcarch.h"
+#include "fcarch.h"
 #include <stdio.h>
 #include <fcntl.h>
 #include <dirent.h>
@@ -41,6 +41,7 @@
 #define O_BINARY 0
 #endif
 
+
 struct MD5Context {
         FcChar32 buf[4];
         FcChar32 bits[2];
diff --git a/src/fcint.h b/src/fcint.h
index 2bc7878..a859913 100644
--- a/src/fcint.h
+++ b/src/fcint.h
@@ -107,6 +107,10 @@
 
 #define FC_MEM_NUM	    30
 
+#define _FC_ASSERT_STATIC1(_line, _cond) typedef int _static_assert_on_line_##_line##_failed[(_cond)?1:-1]
+#define _FC_ASSERT_STATIC0(_line, _cond) _FC_ASSERT_STATIC1 (_line, (_cond))
+#define FC_ASSERT_STATIC(_cond) _FC_ASSERT_STATIC0 (__LINE__, (_cond))
+
 #define FC_MIN(a,b) ((a) < (b) ? (a) : (b))
 #define FC_MAX(a,b) ((a) > (b) ? (a) : (b))
 #define FC_ABS(a)   ((a) < 0 ? -(a) : (a))
commit 2a6b235ff6d2750171e8dff7cfdfe3bccb0f630e
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Mon Dec 27 13:20:47 2010 -0600

    Make most generated-files cross-compiling-safe
    
    By simply including a copy in the tarball.
    
    Remains fc-arch which is trickier.

diff --git a/doc/Makefile.am b/doc/Makefile.am
index 98121b1..8d7d5c8 100644
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -21,10 +21,6 @@
 # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 # PERFORMANCE OF THIS SOFTWARE.
 
-CC = @CC_FOR_BUILD@
-EXEEXT = @EXEEXT_FOR_BUILD@
-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-
 DOC_SRC = $(srcdir)
 DOC_MODULE = fontconfig
 DOC2HTML = docbook2html
@@ -83,7 +79,7 @@ DOC_FUNCS_SGML=\
 	fcstrset.sgml \
 	fcvalue.sgml
 
-man5_MANS=fonts-conf.5 
+man5_MANS=fonts-conf.5
 man3_MANS=$(DOCMAN3)
 
 noinst_PROGRAMS=edit-sgml
@@ -96,15 +92,20 @@ check_SCRIPTS=check-missing-doc
 TESTS_ENVIRONMENT=top_srcdir=${top_srcdir} sh
 TESTS=check-missing-doc
 
-EXTRA_DIST=$(LOCAL_DOCS) $(SGML) $(DOC_FUNCS_FNCS) $(check_SCRIPTS) func.sgml confdir.sgml.in
+EXTRA_DIST=$(LOCAL_DOCS) $(SGML) $(DOC_FUNCS_FNCS) $(DOC_FUNCS_SGML) $(check_SCRIPTS) func.sgml confdir.sgml.in
 
 SUFFIXES=.fncs .sgml .txt .html
 
 if USEDOCBOOK
 
+if CROSS_COMPILING
+.fncs.sgml:
+	@echo Warning: cannot rebuild $@ when cross-compiling
+else
 .fncs.sgml:
 	$(RM) $@
 	./edit-sgml$(EXEEXT) $(FNCS_TMPL) < '$<' > $*.sgml
+endif
 
 .sgml.txt:
 	$(RM) $@
@@ -127,7 +128,7 @@ func.refs: local-fontconfig-devel.sgml $(DOC_FUNCS_SGML) version.sgml confdir.sg
 local-fontconfig-devel.sgml: fontconfig-devel.sgml
 	$(LN_S) $< $@
 
-$(DOC_FUNCS_SGML): edit-sgml$(EXEEXT) $(FNCS_TMPL)
+$(DOC_FUNCS_SGML): edit-sgml.c $(FNCS_TMPL)
 
 fonts-conf.5: local-fontconfig-user.sgml version.sgml confdir.sgml
 	$(RM) $@
@@ -140,9 +141,11 @@ local-fontconfig-user.sgml: fontconfig-user.sgml
 all-local: $(LOCAL_DOCS)
 
 clean-local:
-	$(RM) $(man3_MANS) $(man5_MANS) $(DOC_FILES) $(DOC_FUNCS_SGML) func.refs
+	$(RM) $(man3_MANS) $(man5_MANS) $(DOC_FILES) func.refs
 	$(RM) -r $(HTML_DIR)
 
+MAINTAINERCLEANFILES = $(DOC_FUNCS_SGML)
+
 $(HTML_DIR): local-fontconfig-devel.sgml $(DOC_FUNCS_SGML) version.sgml confdir.sgml
 	$(RM) -r $(HTML_DIR)
 	$(DOC2HTML) -V '%use-id-as-filename%' -o $(HTML_DIR) local-fontconfig-devel.sgml
diff --git a/fc-arch/fcarch.tmpl.h b/fc-arch/fcarch.tmpl.h
index 868454e..2f972ba 100644
--- a/fc-arch/fcarch.tmpl.h
+++ b/fc-arch/fcarch.tmpl.h
@@ -29,7 +29,7 @@
 @@@ use something reasonable and don't include any spaces
 @@@
 @@@ So far the differences boil down to: endianness, 32 vs 64 bit pointers,
-@@@ and on @@@ 32bit ones, whether double is aligned to one word or two words.
+@@@ and on 32bit ones, whether double is aligned to one word or two words.
 @@@ Those result in the 6 formats listed below.
 @@@
 @@@ ,name (endianness,pointer-size,double-alignment)
diff --git a/fc-case/Makefile.am b/fc-case/Makefile.am
index e462120..4f255fc 100644
--- a/fc-case/Makefile.am
+++ b/fc-case/Makefile.am
@@ -22,10 +22,6 @@
 # PERFORMANCE OF THIS SOFTWARE.
 #
 
-CC = @CC_FOR_BUILD@
-EXEEXT = @EXEEXT_FOR_BUILD@
-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-
 INCLUDES=-I${top_srcdir}/src -I${top_srcdir} $(WARN_CFLAGS)
 
 TMPL=fccase.tmpl.h
@@ -44,12 +40,17 @@ fc_case_SRCS= \
 CASEFOLDING=CaseFolding.txt
 SCASEFOLDING=${top_srcdir}/fc-case/CaseFolding.txt
 
-EXTRA_DIST=$(TMPL) $(CASEFOLDING)
+EXTRA_DIST = $(TARG) $(TMPL) $(CASEFOLDING)
 
+if CROSS_COMPILING
+$(TARG): $(STMPL) fc-case.c $(SCASEFOLDING)
+	@echo Warning: cannot rebuild $(TARG) when cross-compiling
+else
 $(TARG): $(STMPL) fc-case$(EXEEXT) $(SCASEFOLDING)
 	$(AM_V_GEN) $(RM) $(TARG); \
 	./fc-case$(EXEEXT) $(SCASEFOLDING) < $(STMPL) > $(TARG).tmp && \
 	mv $(TARG).tmp $(TARG)
+endif
 
 ALIAS_FILES = fcalias.h fcaliastail.h
 
@@ -58,5 +59,6 @@ BUILT_SOURCES = $(ALIAS_FILES)
 $(ALIAS_FILES): 
 	touch $(ALIAS_FILES)
 
-CLEANFILES=$(TARG) $(ALIAS_FILES)
+CLEANFILES = $(ALIAS_FILES)
 
+MAINTAINERCLEANFILES = $(TARG)
diff --git a/fc-glyphname/Makefile.am b/fc-glyphname/Makefile.am
index 4106b32..3799880 100644
--- a/fc-glyphname/Makefile.am
+++ b/fc-glyphname/Makefile.am
@@ -22,10 +22,6 @@
 # PERFORMANCE OF THIS SOFTWARE.
 #
 
-CC = @CC_FOR_BUILD@
-EXEEXT = @EXEEXT_FOR_BUILD@
-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-
 INCLUDES=-I${top_srcdir}/src -I${top_srcdir} $(WARN_CFLAGS)
 
 TMPL=fcglyphname.tmpl.h
@@ -37,12 +33,17 @@ noinst_PROGRAMS=fc-glyphname
 GLYPHNAME=zapfdingbats.txt
 SGLYPHNAME=${top_srcdir}/fc-glyphname/zapfdingbats.txt
 
-EXTRA_DIST=$(TMPL) $(GLYPHNAME)
+EXTRA_DIST = $(TARG) $(TMPL) $(GLYPHNAME)
 
+if CROSS_COMPILING
+$(TARG): $(STMPL) fc-glyphname.c $(SGLYPHNAME)
+	@echo Warning: cannot rebuild $(TARG) when cross-compiling
+else
 $(TARG): $(STMPL) fc-glyphname$(EXEEXT) $(SGLYPHNAME)
 	$(AM_V_GEN) $(RM) $(TARG); \
 	./fc-glyphname$(EXEEXT) $(SGLYPHNAME) < $(STMPL) > $(TARG).tmp && \
 	mv $(TARG).tmp $(TARG)
+endif
 
 ALIAS_FILES = fcalias.h fcaliastail.h
 
@@ -51,5 +52,6 @@ BUILT_SOURCES = $(ALIAS_FILES) $(TARG)
 $(ALIAS_FILES):
 	touch $(ALIAS_FILES)
 
-CLEANFILES=$(TARG) $(ALIAS_FILES)
+CLEANFILES = $(ALIAS_FILES)
 
+MAINTAINERCLEANFILES = $(TARG)
diff --git a/fc-lang/Makefile.am b/fc-lang/Makefile.am
index 242fae0..29cee59 100644
--- a/fc-lang/Makefile.am
+++ b/fc-lang/Makefile.am
@@ -22,10 +22,6 @@
 # PERFORMANCE OF THIS SOFTWARE.
 #
 
-CC = @CC_FOR_BUILD@
-EXEEXT = @EXEEXT_FOR_BUILD@
-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-
 INCLUDES=-I${top_srcdir}/src -I${top_srcdir} $(WARN_CFLAGS)
 
 TMPL=fclang.tmpl.h
@@ -36,21 +32,28 @@ noinst_PROGRAMS=fc-lang
 
 noinst_MANS=fc-lang.man
 
-EXTRA_DIST=$(TMPL) $(ORTH)
+EXTRA_DIST = $(TARG) $(TMPL) $(ORTH)
 
+if CROSS_COMPILING
+$(TARG):$(ORTH) fc-lang.c $(STMPL)
+	@echo Warning: cannot rebuild $(TARG) when cross-compiling
+else
 $(TARG):$(ORTH) fc-lang${EXEEXT} $(STMPL)
 	$(AM_V_GEN) $(RM) $(TARG); \
 	./fc-lang${EXEEXT} -d ${srcdir} $(ORTH) < $(STMPL) > $(TARG).tmp && \
 	mv $(TARG).tmp $(TARG)
+endif
 
 ALIAS_FILES = fcalias.h fcaliastail.h
 
 BUILT_SOURCES = $(ALIAS_FILES) $(TARG)
 
-$(ALIAS_FILES): 
+$(ALIAS_FILES):
 	touch $(ALIAS_FILES)
 
-CLEANFILES = $(TARG) $(ALIAS_FILES)
+CLEANFILES = $(ALIAS_FILES)
+
+MAINTAINERCLEANFILES = $(TARG)
 
 # NOTE:
 #


More information about the Fontconfig mailing list