Merge pull request #9 from lha/master
[heimdal.git] / cf / krb-bigendian.m4
blobe8037503f8733146018aa54be357433756684dc6
1 dnl
2 dnl $Id$
3 dnl
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
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
47 if test "$krb_cv_c_bigendian" = "yes"; then
48   AC_DEFINE(WORDS_BIGENDIAN, 1, [define if target is big endian])dnl
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
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