Blame | Last modification | View Log | Download | RSS feed
# extracted form autoconf 2.61: 2.63 is different# Programming languages support.# Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 Free Software# Foundation, Inc.## 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, 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.# R_BIGENDIAN ([ACTION-IF-TRUE], [ACTION-IF-FALSE], [ACTION-IF-UNKNOWN])# -------------------------------------------------------------------------AC_DEFUN([R_BIGENDIAN],[AC_CACHE_CHECK(whether byte ordering is bigendian, ac_cv_c_bigendian,[# See if sys/param.h defines the BYTE_ORDER macro.AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <sys/types.h>#include <sys/param.h>],[#if ! (defined BYTE_ORDER && defined BIG_ENDIAN && defined LITTLE_ENDIAN \&& BYTE_ORDER && BIG_ENDIAN && LITTLE_ENDIAN)bogus endian macros#endif])],[# It does; now see whether it defined to BIG_ENDIAN or not.AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <sys/types.h>#include <sys/param.h>], [#if BYTE_ORDER != BIG_ENDIANnot big endian#endif])], [ac_cv_c_bigendian=yes], [ac_cv_c_bigendian=no])],[# It does not; compile a test program.AC_RUN_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT], [[/* Are we little or big endian? From Harbison&Steele. */union{long int l;char c[sizeof (long int)];} u;u.l = 1;return u.c[sizeof (long int) - 1] == 1;]])],[ac_cv_c_bigendian=no],[ac_cv_c_bigendian=yes],[# try to guess the endianness by grepping values into an object fileac_cv_c_bigendian=unknownAC_COMPILE_IFELSE([AC_LANG_PROGRAM([[short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };void _ascii () { char *s = (char *) ascii_mm; s = (char *) ascii_ii; }short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };void _ebcdic () { char *s = (char *) ebcdic_mm; s = (char *) ebcdic_ii; }]],[[ _ascii (); _ebcdic (); ]])],[if grep BIGenDianSyS conftest.$ac_objext >/dev/null ; thenac_cv_c_bigendian=yesfiif grep LiTTleEnDian conftest.$ac_objext >/dev/null ; thenif test "$ac_cv_c_bigendian" = unknown; thenac_cv_c_bigendian=noelse# finding both strings is unlikely to happen, but who knows?ac_cv_c_bigendian=unknownfifi])])])])case $ac_cv_c_bigendian inyes)m4_default([$1],[AC_DEFINE([WORDS_BIGENDIAN], 1,[Define to 1 if your processor stores words with the most significantbyte first (like Motorola and SPARC, unlike Intel and VAX).])]) ;;no)$2 ;;*)m4_default([$3],[AC_MSG_ERROR([unknown endiannesspresetting ac_cv_c_bigendian=no (or yes) will help])]) ;;esac])# R_BIGENDIAN