1 | dnl
|
---|
2 | dnl $Id$
|
---|
3 | dnl
|
---|
4 |
|
---|
5 | dnl check if this computer is little or big-endian
|
---|
6 | dnl if we can figure it out at compile-time then don't define the cpp symbol
|
---|
7 | dnl otherwise test for it and define it. also allow options for overriding
|
---|
8 | dnl it when cross-compiling
|
---|
9 |
|
---|
10 | AC_DEFUN([KRB_C_BIGENDIAN], [
|
---|
11 | AC_ARG_ENABLE(bigendian,
|
---|
12 | AS_HELP_STRING([--enable-bigendian],[the target is big endian]),
|
---|
13 | krb_cv_c_bigendian=yes)
|
---|
14 | AC_ARG_ENABLE(littleendian,
|
---|
15 | AS_HELP_STRING([--enable-littleendian],[the target is little endian]),
|
---|
16 | krb_cv_c_bigendian=no)
|
---|
17 | AC_CACHE_CHECK([whether byte order is known at compile time],
|
---|
18 | krb_cv_c_bigendian_compile,
|
---|
19 | [AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
|
---|
20 | #include <sys/types.h>
|
---|
21 | #include <sys/param.h>
|
---|
22 | #if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN
|
---|
23 | bogus endian macros
|
---|
24 | #endif]])],[krb_cv_c_bigendian_compile=yes],[krb_cv_c_bigendian_compile=no])])
|
---|
25 | AC_CACHE_CHECK(whether byte ordering is bigendian, krb_cv_c_bigendian,[
|
---|
26 | if test "$krb_cv_c_bigendian_compile" = "yes"; then
|
---|
27 | AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
|
---|
28 | #include <sys/types.h>
|
---|
29 | #include <sys/param.h>
|
---|
30 | #if BYTE_ORDER != BIG_ENDIAN
|
---|
31 | not big endian
|
---|
32 | #endif]])],[krb_cv_c_bigendian=yes],[krb_cv_c_bigendian=no])
|
---|
33 | else
|
---|
34 | AC_RUN_IFELSE([AC_LANG_SOURCE([[main (int argc, char **argv) {
|
---|
35 | /* Are we little or big endian? From Harbison&Steele. */
|
---|
36 | union
|
---|
37 | {
|
---|
38 | long l;
|
---|
39 | char c[sizeof (long)];
|
---|
40 | } u;
|
---|
41 | u.l = 1;
|
---|
42 | exit (u.c[sizeof (long) - 1] == 1);
|
---|
43 | }]])],[krb_cv_c_bigendian=no],[krb_cv_c_bigendian=yes],
|
---|
44 | [AC_MSG_ERROR([specify either --enable-bigendian or --enable-littleendian])])
|
---|
45 | fi
|
---|
46 | ])
|
---|
47 | if test "$krb_cv_c_bigendian" = "yes"; then
|
---|
48 | AC_DEFINE(WORDS_BIGENDIAN, 1, [define if target is big endian])dnl
|
---|
49 | fi
|
---|
50 | if test "$krb_cv_c_bigendian_compile" = "yes"; then
|
---|
51 | AC_DEFINE(ENDIANESS_IN_SYS_PARAM_H, 1, [define if sys/param.h defines the endiness])dnl
|
---|
52 | fi
|
---|
53 | AH_BOTTOM([
|
---|
54 | #ifdef ENDIANESS_IN_SYS_PARAM_H
|
---|
55 | # include <sys/types.h>
|
---|
56 | # include <sys/param.h>
|
---|
57 | # if BYTE_ORDER == BIG_ENDIAN
|
---|
58 | # define WORDS_BIGENDIAN 1
|
---|
59 | # endif
|
---|
60 | #endif
|
---|
61 | ])
|
---|
62 | ])
|
---|