blob: 330a17fc4821613e2271e5c0fa4e4ca3879ac95f [file] [log] [blame]
Erik de Castro Lopo6b00dc22016-12-05 18:57:47 +11001dnl Copyright (C) 2012-2016 Xiph.org Foundation
Erik de Castro Lopo11efaa32013-03-10 12:30:49 +11002dnl
3dnl Redistribution and use in source and binary forms, with or without
4dnl modification, are permitted provided that the following conditions
5dnl are met:
6dnl
7dnl - Redistributions of source code must retain the above copyright
8dnl notice, this list of conditions and the following disclaimer.
9dnl
10dnl - Redistributions in binary form must reproduce the above copyright
11dnl notice, this list of conditions and the following disclaimer in the
12dnl documentation and/or other materials provided with the distribution.
13dnl
14dnl - Neither the name of the Xiph.org Foundation nor the names of its
15dnl contributors may be used to endorse or promote products derived from
16dnl this software without specific prior written permission.
17dnl
18dnl THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19dnl ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20dnl LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21dnl A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR
22dnl CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23dnl EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24dnl PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
25dnl PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
26dnl LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
27dnl NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28dnl SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
30
31dnl @synopsis XIPH_C_FIND_ENDIAN
32dnl
33dnl Determine endian-ness of target processor.
34dnl @version 1.1 Mar 03 2002
35dnl @author Erik de Castro Lopo <erikd@mega-nerd.com>
36dnl
37dnl Majority written from scratch to replace the standard autoconf macro
38dnl AC_C_BIGENDIAN. Only part remaining from the original is the invocation
39dnl of the AC_TRY_RUN macro.
40dnl
41dnl Find endian-ness in the following way:
42dnl 1) Look in <endian.h>.
43dnl 2) If 1) fails, look in <sys/types.h> and <sys/param.h>.
44dnl 3) If 1) and 2) fails and not cross compiling run a test program.
45dnl 4) If 1) and 2) fails and cross compiling then guess based on target.
46
47AC_DEFUN([XIPH_C_FIND_ENDIAN],
48[AC_CACHE_CHECK(processor byte ordering,
49 ac_cv_c_byte_order,
50
51# Initialize to unknown
52ac_cv_c_byte_order=unknown
53
54if test x$ac_cv_header_endian_h = xyes ; then
55
56 # First try <endian.h> which should set BYTE_ORDER.
57
58 [AC_TRY_LINK([
59 #include <endian.h>
60 #if BYTE_ORDER != LITTLE_ENDIAN
61 not big endian
62 #endif
63 ], return 0 ;,
64 ac_cv_c_byte_order=little
65 )]
66
67 [AC_TRY_LINK([
68 #include <endian.h>
69 #if BYTE_ORDER != BIG_ENDIAN
70 not big endian
71 #endif
72 ], return 0 ;,
73 ac_cv_c_byte_order=big
74 )]
75
76 fi
77
78if test $ac_cv_c_byte_order = unknown ; then
79
80 [AC_TRY_LINK([
81 #include <sys/types.h>
82 #include <sys/param.h>
83 #if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN
84 bogus endian macros
85 #endif
86 ], return 0 ;,
87
88 [AC_TRY_LINK([
89 #include <sys/types.h>
90 #include <sys/param.h>
91 #if BYTE_ORDER != LITTLE_ENDIAN
92 not big endian
93 #endif
94 ], return 0 ;,
95 ac_cv_c_byte_order=little
96 )]
97
98 [AC_TRY_LINK([
99 #include <sys/types.h>
100 #include <sys/param.h>
101 #if BYTE_ORDER != LITTLE_ENDIAN
102 not big endian
103 #endif
104 ], return 0 ;,
105 ac_cv_c_byte_order=little
106 )]
107
108 )]
109
110 fi
111
112if test $ac_cv_c_byte_order = unknown ; then
113 if test $cross_compiling = yes ; then
114 # This is the last resort. Try to guess the target processor endian-ness
115 # by looking at the target CPU type.
116 [
117 case "$target_cpu" in
118 alpha* | i?86* | mipsel* | ia64*)
119 ac_cv_c_byte_order=little
120 ;;
121
122 m68* | mips* | powerpc* | hppa* | sparc*)
123 ac_cv_c_byte_order=big
124 ;;
125
126 esac
127 ]
128 else
129 AC_TRY_RUN(
130 [[
131 int main (void)
132 { /* Are we little or big endian? From Harbison&Steele. */
133 union
134 { long l ;
135 char c [sizeof (long)] ;
136 } u ;
137 u.l = 1 ;
138 return (u.c [sizeof (long) - 1] == 1);
139 }
140 ]], , ac_cv_c_byte_order=big,
141 )
142
143 AC_TRY_RUN(
144 [[int main (void)
145 { /* Are we little or big endian? From Harbison&Steele. */
146 union
147 { long l ;
148 char c [sizeof (long)] ;
149 } u ;
150 u.l = 1 ;
151 return (u.c [0] == 1);
152 }]], , ac_cv_c_byte_order=little,
153 )
154 fi
155 fi
156
157)
158
159if test $ac_cv_c_byte_order = big ; then
160 ac_cv_c_big_endian=1
161 ac_cv_c_little_endian=0
162elif test $ac_cv_c_byte_order = little ; then
163 ac_cv_c_big_endian=0
164 ac_cv_c_little_endian=1
165else
166 ac_cv_c_big_endian=0
167 ac_cv_c_little_endian=0
168
169 AC_MSG_WARN([[*****************************************************************]])
170 AC_MSG_WARN([[*** Not able to determine endian-ness of target processor. ]])
171 AC_MSG_WARN([[*** The constants CPU_IS_BIG_ENDIAN and CPU_IS_LITTLE_ENDIAN in ]])
172 AC_MSG_WARN([[*** config.h may need to be hand editied. ]])
173 AC_MSG_WARN([[*****************************************************************]])
174 fi
175
176]
177)# XIPH_C_FIND_ENDIAN