From 263bb4e172d58a4e8ce55f147bc46bf50dd7fde1 Mon Sep 17 00:00:00 2001
From: Alexander Neundorf <neundorf@kde.org>
Date: Mon, 13 Aug 2007 11:04:19 -0400
Subject: ENH: for universal binaries return the endianess based on the
 processor

Alex
---
 Modules/TestBigEndian.cmake | 26 ++++++++++++++++++--------
 1 file changed, 18 insertions(+), 8 deletions(-)

diff --git a/Modules/TestBigEndian.cmake b/Modules/TestBigEndian.cmake
index 9d5cd72..ffc3a0c 100644
--- a/Modules/TestBigEndian.cmake
+++ b/Modules/TestBigEndian.cmake
@@ -42,7 +42,7 @@ MACRO(TEST_BIG_ENDIAN VARIABLE)
   
      FILE(READ "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/TestEndianess.c"
           TEST_ENDIANESS_FILE_CONTENT)
-      
+
      TRY_COMPILE(HAVE_${VARIABLE}
       "${CMAKE_BINARY_DIR}"
       "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/TestEndianess.c"
@@ -53,23 +53,33 @@ MACRO(TEST_BIG_ENDIAN VARIABLE)
 
         FILE(STRINGS "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/TestEndianess.bin"
             CMAKE_TEST_ENDIANESS_STRINGS_LE LIMIT_COUNT 1 REGEX "THIS IS LITTLE ENDIAN")
-  
+
         FILE(STRINGS "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/TestEndianess.bin"
             CMAKE_TEST_ENDIANESS_STRINGS_BE LIMIT_COUNT 1 REGEX "THIS IS BIG ENDIAN")
- 
+
+        # on mac, if there are universal binaries built both will be true
+        # return the result depending on the machine on which cmake runs
+        IF(CMAKE_TEST_ENDIANESS_STRINGS_BE  AND  CMAKE_TEST_ENDIANESS_STRINGS_LE)
+          IF(CMAKE_SYSTEM_PROCESSOR MATCHES powerpc)
+            SET(CMAKE_TEST_ENDIANESS_STRINGS_BE TRUE)
+            SET(CMAKE_TEST_ENDIANESS_STRINGS_LE FALSE)
+          ELSE(CMAKE_SYSTEM_PROCESSOR MATCHES powerpc)
+            SET(CMAKE_TEST_ENDIANESS_STRINGS_BE FALSE)
+            SET(CMAKE_TEST_ENDIANESS_STRINGS_LE TRUE)
+          ENDIF(CMAKE_SYSTEM_PROCESSOR MATCHES powerpc)
+          MESSAGE(STATUS "TEST_BIG_ENDIAN found different results, consider setting CMAKE_OSX_ARCHITECTURES or CMAKE_TRY_COMPILE_OSX_ARCHITECTURES to one or no architecture !")
+        ENDIF(CMAKE_TEST_ENDIANESS_STRINGS_BE  AND  CMAKE_TEST_ENDIANESS_STRINGS_LE)
+
         IF(CMAKE_TEST_ENDIANESS_STRINGS_LE)
           SET(${VARIABLE} 0 CACHE INTERNAL "Result of TEST_BIG_ENDIAN" FORCE)
           MESSAGE(STATUS "Check if the system is big endian - little endian")
         ENDIF(CMAKE_TEST_ENDIANESS_STRINGS_LE)
-        
+
         IF(CMAKE_TEST_ENDIANESS_STRINGS_BE)
           SET(${VARIABLE} 1 CACHE INTERNAL "Result of TEST_BIG_ENDIAN" FORCE)
           MESSAGE(STATUS "Check if the system is big endian - big endian")
         ENDIF(CMAKE_TEST_ENDIANESS_STRINGS_BE)
-        
-        IF(CMAKE_TEST_ENDIANESS_STRINGS_BE  AND  CMAKE_TEST_ENDIANESS_STRINGS_LE)
-          MESSAGE(STATUS "TEST_BIG_ENDIAN found different results, consider setting CMAKE_OSX_ARCHITECTURES or CMAKE_TRY_COMPILE_OSX_ARCHITECTURES to one or no architecture !")
-        ENDIF(CMAKE_TEST_ENDIANESS_STRINGS_BE  AND  CMAKE_TEST_ENDIANESS_STRINGS_LE)
+
         IF(NOT CMAKE_TEST_ENDIANESS_STRINGS_BE  AND  NOT CMAKE_TEST_ENDIANESS_STRINGS_LE)
           MESSAGE(SEND_ERROR "TEST_BIG_ENDIAN found no result!")
         ENDIF(NOT CMAKE_TEST_ENDIANESS_STRINGS_BE  AND  NOT CMAKE_TEST_ENDIANESS_STRINGS_LE)
-- 
cgit v0.12