[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [40341] trunk/blender: cleanup endian handling
Campbell Barton
ideasman42 at gmail.com
Mon Sep 19 10:02:18 CEST 2011
Revision: 40341
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=40341
Author: campbellbarton
Date: 2011-09-19 08:02:17 +0000 (Mon, 19 Sep 2011)
Log Message:
-----------
cleanup endian handling
- define __BIG_ENDIAN__ or __LITTLE_ENDIAN__ with cmake & scons.
- ENDIAN_ORDER is now a define rather than a global short.
- replace checks like this with single ifdef: #if defined(__sgi) || defined (__sparc) || defined (__sparc__) || defined (__PPC__) || defined (__ppc__) || defined (__hppa__) || defined (__BIG_ENDIAN__)
- remove BKE_endian.h which isn't used
Modified Paths:
--------------
trunk/blender/CMakeLists.txt
trunk/blender/SConstruct
trunk/blender/build_files/scons/tools/btools.py
trunk/blender/intern/audaspace/intern/AUD_ConverterReader.cpp
trunk/blender/intern/audaspace/intern/AUD_Mixer.cpp
trunk/blender/intern/guardedalloc/intern/mallocn.c
trunk/blender/intern/string/intern/STR_String.cpp
trunk/blender/source/blender/avi/intern/avirgb.c
trunk/blender/source/blender/avi/intern/endian.c
trunk/blender/source/blender/blenkernel/BKE_global.h
trunk/blender/source/blender/blenkernel/BKE_utildefines.h
trunk/blender/source/blender/blenkernel/CMakeLists.txt
trunk/blender/source/blender/blenkernel/intern/blender.c
trunk/blender/source/blender/blenlib/BLI_utildefines.h
trunk/blender/source/blender/imbuf/intern/IMB_anim.h
trunk/blender/source/blender/imbuf/intern/imbuf.h
trunk/blender/source/blender/makesdna/DNA_ID.h
trunk/blender/source/blender/render/intern/source/shadbuf.c
Removed Paths:
-------------
trunk/blender/source/blender/blenkernel/BKE_endian.h
Modified: trunk/blender/CMakeLists.txt
===================================================================
--- trunk/blender/CMakeLists.txt 2011-09-19 06:32:19 UTC (rev 40340)
+++ trunk/blender/CMakeLists.txt 2011-09-19 08:02:17 UTC (rev 40341)
@@ -105,6 +105,7 @@
get_blender_version()
+
# Blender internal features
option(WITH_BLENDER "Build blender (disable to build only the blender player)" ON)
mark_as_advanced(WITH_BLENDER)
@@ -1150,6 +1151,18 @@
unset(_sse2)
endif()
+
+# set the endian define
+include(TestBigEndian)
+test_big_endian(_SYSTEM_BIG_ENDIAN)
+if(_SYSTEM_BIG_ENDIAN)
+ add_definitions(-D__BIG_ENDIAN__)
+else()
+ add_definitions(-D__LITTLE_ENDIAN__)
+endif()
+unset(_SYSTEM_BIG_ENDIAN)
+
+
if(WITH_IMAGE_OPENJPEG)
if(UNIX AND NOT APPLE)
# dealt with above
Modified: trunk/blender/SConstruct
===================================================================
--- trunk/blender/SConstruct 2011-09-19 06:32:19 UTC (rev 40340)
+++ trunk/blender/SConstruct 2011-09-19 08:02:17 UTC (rev 40341)
@@ -337,6 +337,17 @@
env['CXXFLAGS'].append('-DDISABLE_ELBEEM')
env['CCFLAGS'].append('-DDISABLE_ELBEEM')
+
+if btools.ENDIAN == "big":
+ env['CPPFLAGS'].append('-D__BIG_ENDIAN__')
+ env['CXXFLAGS'].append('-D__BIG_ENDIAN__')
+ env['CCFLAGS'].append('-D__BIG_ENDIAN__')
+else:
+ env['CPPFLAGS'].append('-D__LITTLE_ENDIAN__')
+ env['CXXFLAGS'].append('-D__LITTLE_ENDIAN__')
+ env['CCFLAGS'].append('-D__LITTLE_ENDIAN__')
+
+
# TODO, make optional
env['CPPFLAGS'].append('-DWITH_AUDASPACE')
env['CXXFLAGS'].append('-DWITH_AUDASPACE')
Modified: trunk/blender/build_files/scons/tools/btools.py
===================================================================
--- trunk/blender/build_files/scons/tools/btools.py 2011-09-19 06:32:19 UTC (rev 40340)
+++ trunk/blender/build_files/scons/tools/btools.py 2011-09-19 08:02:17 UTC (rev 40341)
@@ -63,10 +63,28 @@
return 'r' + build_rev
+
+# copied from: http://www.scons.org/wiki/AutoconfRecipes
+def checkEndian():
+ import struct
+ array = struct.pack('cccc', '\x01', '\x02', '\x03', '\x04')
+ i = struct.unpack('i', array)
+ # Little Endian
+ if i == struct.unpack('<i', array):
+ return "little"
+ # Big Endian
+ elif i == struct.unpack('>i', array):
+ return "big"
+ else:
+ raise Exception("cant find endian")
+
+
# This is used in creating the local config directories
VERSION, VERSION_DISPLAY = get_version()
REVISION = get_revision()
+ENDIAN = checkEndian()
+
def print_arguments(args, bc):
if len(args):
for k,v in args.iteritems():
Modified: trunk/blender/intern/audaspace/intern/AUD_ConverterReader.cpp
===================================================================
--- trunk/blender/intern/audaspace/intern/AUD_ConverterReader.cpp 2011-09-19 06:32:19 UTC (rev 40340)
+++ trunk/blender/intern/audaspace/intern/AUD_ConverterReader.cpp 2011-09-19 08:02:17 UTC (rev 40341)
@@ -36,9 +36,6 @@
AUD_EffectReader(reader),
m_format(specs.format)
{
- int bigendian = 1;
- bigendian = (((char*)&bigendian)[0]) ? 0: 1; // 1 if Big Endian
-
switch(m_format)
{
case AUD_FORMAT_U8:
@@ -48,10 +45,11 @@
m_convert = AUD_convert_float_s16;
break;
case AUD_FORMAT_S24:
- if(bigendian)
- m_convert = AUD_convert_float_s24_be;
- else
- m_convert = AUD_convert_float_s24_le;
+#ifdef __BIG_ENDIAN__
+ m_convert = AUD_convert_float_s24_be;
+#else
+ m_convert = AUD_convert_float_s24_le;
+#endif
break;
case AUD_FORMAT_S32:
m_convert = AUD_convert_float_s32;
Modified: trunk/blender/intern/audaspace/intern/AUD_Mixer.cpp
===================================================================
--- trunk/blender/intern/audaspace/intern/AUD_Mixer.cpp 2011-09-19 06:32:19 UTC (rev 40340)
+++ trunk/blender/intern/audaspace/intern/AUD_Mixer.cpp 2011-09-19 08:02:17 UTC (rev 40341)
@@ -37,9 +37,6 @@
AUD_Mixer::AUD_Mixer(AUD_DeviceSpecs specs) :
m_specs(specs)
{
- int bigendian = 1;
- bigendian = (((char*)&bigendian)[0]) ? 0: 1; // 1 if Big Endian
-
switch(m_specs.format)
{
case AUD_FORMAT_U8:
@@ -49,10 +46,12 @@
m_convert = AUD_convert_float_s16;
break;
case AUD_FORMAT_S24:
- if(bigendian)
- m_convert = AUD_convert_float_s24_be;
- else
- m_convert = AUD_convert_float_s24_le;
+
+#ifdef __BIG_ENDIAN__
+ m_convert = AUD_convert_float_s24_be;
+#else
+ m_convert = AUD_convert_float_s24_le;
+#endif
break;
case AUD_FORMAT_S32:
m_convert = AUD_convert_float_s32;
Modified: trunk/blender/intern/guardedalloc/intern/mallocn.c
===================================================================
--- trunk/blender/intern/guardedalloc/intern/mallocn.c 2011-09-19 06:32:19 UTC (rev 40340)
+++ trunk/blender/intern/guardedalloc/intern/mallocn.c 2011-09-19 08:02:17 UTC (rev 40341)
@@ -124,10 +124,10 @@
/* locally used defines */
/* --------------------------------------------------------------------- */
-#if defined( __sgi) || defined (__sun) || defined (__sun__) || defined (__sparc) || defined (__sparc__) || defined (__PPC__) || (defined (__APPLE__) && !defined(__LITTLE_ENDIAN__))
-#define MAKE_ID(a,b,c,d) ( (int)(a)<<24 | (int)(b)<<16 | (c)<<8 | (d) )
+#ifdef __BIG_ENDIAN__
+# define MAKE_ID(a,b,c,d) ( (int)(a)<<24 | (int)(b)<<16 | (c)<<8 | (d) )
#else
-#define MAKE_ID(a,b,c,d) ( (int)(d)<<24 | (int)(c)<<16 | (b)<<8 | (a) )
+# define MAKE_ID(a,b,c,d) ( (int)(d)<<24 | (int)(c)<<16 | (b)<<8 | (a) )
#endif
#define MEMTAG1 MAKE_ID('M', 'E', 'M', 'O')
Modified: trunk/blender/intern/string/intern/STR_String.cpp
===================================================================
--- trunk/blender/intern/string/intern/STR_String.cpp 2011-09-19 06:32:19 UTC (rev 40340)
+++ trunk/blender/intern/string/intern/STR_String.cpp 2011-09-19 08:02:17 UTC (rev 40341)
@@ -45,7 +45,7 @@
#include <ctype.h>
#include <string.h>
#if defined(__sun__) || defined( __sun ) || defined (__sparc) || defined (__sparc__) || defined (_AIX)
-#include <strings.h>
+# include <strings.h>
#endif
#include "STR_String.h"
Modified: trunk/blender/source/blender/avi/intern/avirgb.c
===================================================================
--- trunk/blender/source/blender/avi/intern/avirgb.c 2011-09-19 06:32:19 UTC (rev 40340)
+++ trunk/blender/source/blender/avi/intern/avirgb.c 2011-09-19 08:02:17 UTC (rev 40341)
@@ -42,8 +42,8 @@
#include "MEM_guardedalloc.h"
#include "avirgb.h"
-#if defined(__sgi) || defined (__sparc) || defined (__sparc__) || defined (__PPC__) || defined (__ppc__) || defined (__hppa__) || defined (__BIG_ENDIAN__)
-#define WORDS_BIGENDIAN
+#ifdef __BIG_ENDIAN__
+# define WORDS_BIGENDIAN
#endif
Modified: trunk/blender/source/blender/avi/intern/endian.c
===================================================================
--- trunk/blender/source/blender/avi/intern/endian.c 2011-09-19 06:32:19 UTC (rev 40340)
+++ trunk/blender/source/blender/avi/intern/endian.c 2011-09-19 08:02:17 UTC (rev 40341)
@@ -43,11 +43,7 @@
#include "endian.h"
#include "avi_intern.h"
-#if defined(__sgi) || defined (__sparc) || defined (__sparc__) || defined (__PPC__) || defined (__ppc__) || defined (__hppa__) || defined (__BIG_ENDIAN__)
-#define WORDS_BIGENDIAN
-#endif
-
-#ifdef WORDS_BIGENDIAN
+#ifdef __BIG_ENDIAN__
static void invert (int *num) {
int new=0,i,j;
@@ -79,7 +75,7 @@
}
#endif
-#ifdef WORDS_BIGENDIAN
+#ifdef __BIG_ENDIAN__
static void Ilist (AviList *list){
invert (&list->fcc);
invert (&list->size);
@@ -159,10 +155,10 @@
invert (&indexe->Offset);
invert (&indexe->Size);
}
-#endif /* WORDS_BIGENDIAN */
+#endif /* __BIG_ENDIAN__ */
void awrite (AviMovie *movie, void *datain, int block, int size, FILE *fp, int type) {
-#ifdef WORDS_BIGENDIAN
+#ifdef __BIG_ENDIAN__
void *data;
data = MEM_mallocN (size, "avi endian");
@@ -209,9 +205,9 @@
}
MEM_freeN (data);
-#else /* WORDS_BIGENDIAN */
+#else /* __BIG_ENDIAN__ */
(void)movie; /* unused */
(void)type; /* unused */
fwrite (datain, block, size, fp);
-#endif /* WORDS_BIGENDIAN */
+#endif /* __BIG_ENDIAN__ */
}
Deleted: trunk/blender/source/blender/blenkernel/BKE_endian.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_endian.h 2011-09-19 06:32:19 UTC (rev 40340)
+++ trunk/blender/source/blender/blenkernel/BKE_endian.h 2011-09-19 08:02:17 UTC (rev 40341)
@@ -1,50 +0,0 @@
-/*
- * $Id$
- *
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- * Are we little or big endian? From Harbison&Steele.
- */
-#ifndef BKE_ENDIAN_H
-#define BKE_ENDIAN_H
-
-/** \file BKE_endian.h
- * \ingroup bke
- */
-
-/**
- * BKE_ENDIANNESS(a) returns 1 if big endian and returns 0 if little endian
- */
-#define BKE_ENDIANNESS(a) { \
- union { \
- intptr_t l; \
- char c[sizeof (intptr_t)]; \
- } u; \
- u.l = 1; \
- a = (u.c[sizeof (intptr_t) - 1] == 1) ? 1 : 0; \
-}
-
-#endif
-
Modified: trunk/blender/source/blender/blenkernel/BKE_global.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_global.h 2011-09-19 06:32:19 UTC (rev 40340)
+++ trunk/blender/source/blender/blenkernel/BKE_global.h 2011-09-19 08:02:17 UTC (rev 40341)
@@ -151,10 +151,19 @@
/* ENDIAN_ORDER: indicates what endianness the platform where the file was
* written had. */
+#if !defined( __BIG_ENDIAN__ ) && !defined( __LITTLE_ENDIAN__ )
+# error Either __BIG_ENDIAN__ or __LITTLE_ENDIAN__ must be defined.
+#endif
+
#define L_ENDIAN 1
#define B_ENDIAN 0
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list