From af795d1f88e9d8f1fad0613eac93c6775b4f6735 Mon Sep 17 00:00:00 2001 From: Eric Biggers Date: Mon, 29 Dec 2014 21:26:06 -0600 Subject: [PATCH] Adjust endianness detection __BYTE_ORDER__ isn't available in older gcc, unfortunately. --- configure.ac | 1 + include/wimlib/compiler-gcc.h | 12 +++++++++++- include/wimlib/compiler.h | 2 +- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index e5e834f3..27d6fa38 100644 --- a/configure.ac +++ b/configure.ac @@ -5,6 +5,7 @@ AC_CONFIG_SRCDIR([src/wim.c]) AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_AUX_DIR([build-aux]) AM_INIT_AUTOMAKE([-Wall -Werror subdir-objects foreign]) +AC_C_BIGENDIAN m4_ifdef([AM_PROG_AR], [AM_PROG_AR]) LT_INIT diff --git a/include/wimlib/compiler-gcc.h b/include/wimlib/compiler-gcc.h index 46983308..cb42c894 100644 --- a/include/wimlib/compiler-gcc.h +++ b/include/wimlib/compiler-gcc.h @@ -27,7 +27,17 @@ #define inline inline __attribute__((always_inline)) #define noinline __attribute__((noinline)) -#define CPU_IS_BIG_ENDIAN (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) +/* Newer gcc supports __BYTE_ORDER__. Older gcc doesn't. */ +#ifdef __BYTE_ORDER__ +# define CPU_IS_BIG_ENDIAN (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) +#elif defined(HAVE_CONFIG_H) +# include "config.h" +# ifdef WORDS_BIGENDIAN +# define CPU_IS_BIG_ENDIAN 1 +# else +# define CPU_IS_BIG_ENDIAN 0 +# endif +#endif #if defined(__x86_64__) || defined(__i386__) # define UNALIGNED_ACCESS_SPEED 3 diff --git a/include/wimlib/compiler.h b/include/wimlib/compiler.h index 11eaa239..4bd92d78 100644 --- a/include/wimlib/compiler.h +++ b/include/wimlib/compiler.h @@ -59,7 +59,7 @@ #endif #ifndef CPU_IS_BIG_ENDIAN -# error "missing required definition of CPU_IS_BIG_ENDIAN" +# error "missing required endianness definition" #endif #define CPU_IS_LITTLE_ENDIAN (!CPU_IS_BIG_ENDIAN) -- 2.43.0