fcarch: Check for architecture signature at compile time rather than configure time
authorJeremy Huddleston <jeremyhu@apple.com>
Mon, 19 Mar 2012 09:16:41 +0000 (02:16 -0700)
committerAkira TAGOH <akira@tagoh.org>
Wed, 21 Mar 2012 02:59:01 +0000 (11:59 +0900)
https://bugs.freedesktop.org/show_bug.cgi?id=20208

Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
fc-cache/fc-cache.c
src/fcarch.c
src/fcarch.h

index d265350..deb4aa8 100644 (file)
@@ -22,8 +22,6 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-#include "../src/fcarch.h"
-
 #ifdef HAVE_CONFIG_H
 #include <config.h>
 #else
@@ -34,6 +32,7 @@
 #endif
 
 #include <fontconfig/fontconfig.h>
+#include "../src/fcarch.h"
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
index c69397e..09d24b3 100644 (file)
 
 #ifndef FC_ARCHITECTURE
 
-#include "fcarch.h"
-
 /* Make sure the cache structure is consistent with what we expect */
 
 #include "fcint.h"
 
+#include "fcarch.h"
+
 FC_ASSERT_STATIC (1 == sizeof (char));
 FC_ASSERT_STATIC (2 == sizeof (FcChar16));
 FC_ASSERT_STATIC (4 == sizeof (int));
index 9cabf04..22e6f8e 100644 (file)
  * be64                1234            8               8
  */
 
-#if defined(WORDS_BIGENDIAN) && WORDS_BIGENDIAN
+#ifdef __APPLE__
+# include <machine/endian.h>
+# undef SIZEOF_VOID_P
+# undef ALIGNOF_DOUBLE
+# ifdef __LP64__
+#  define SIZEOF_VOID_P 8
+#  define ALIGNOF_DOUBLE 8
+# else
+#  define SIZEOF_VOID_P 4
+#  define ALIGNOF_DOUBLE 4
+# endif
+#endif
+
+#if defined(__DARWIN_BYTE_ORDER) && __DARWIN_BYTE_ORDER == __DARWIN_LITTLE_ENDIAN
+# define FC_ARCH_ENDIAN "le"
+#elif defined(__DARWIN_BYTE_ORDER) && __DARWIN_BYTE_ORDER == __DARWIN_BIG_ENDIAN
+# define FC_ARCH_ENDIAN "be"
+#elif defined(__DARWIN_BYTE_ORDER) && __DARWIN_BYTE_ORDER == __DARWIN_PDP_ENDIAN
+# define FC_ARCH_ENDIAN "pe"
+#elif defined(WORDS_BIGENDIAN) && WORDS_BIGENDIAN
 # define FC_ARCH_ENDIAN "be"
-#else /* !WORDS_BIGENDIAN */
+#else
 # define FC_ARCH_ENDIAN "le"
 #endif