home *** CD-ROM | disk | FTP | other *** search
/ Netrunner 2004 October / NETRUNNER0410.ISO / regular / ActivePerl-5.8.4.810-MSWin32-x86.msi / _af6e2a4957fcfb9a94f223995472d0ec < prev    next >
Text File  |  2004-06-01  |  3KB  |  82 lines

  1. dnl @synopsis AC_C_BIGENDIAN_CROSS
  2. dnl
  3. dnl Check endianess even when crosscompiling
  4. dnl (partially based on the original AC_C_BIGENDIAN).
  5. dnl
  6. dnl The implementation will create a binary, and instead of running
  7. dnl the binary it will be grep'ed for some symbols that will look
  8. dnl different for different endianess of the binary.
  9. dnl
  10. dnl @version $Id: ac_c_bigendian_cross.m4,v 1.2 2001/10/01 20:03:13 fdrake Exp $
  11. dnl @author Guido Draheim <guidod@gmx.de>
  12. dnl
  13. AC_DEFUN([AC_C_BIGENDIAN_CROSS],
  14. [AC_CACHE_CHECK(whether byte ordering is bigendian, ac_cv_c_bigendian,
  15. [ac_cv_c_bigendian=unknown
  16. # See if sys/param.h defines the BYTE_ORDER macro.
  17. AC_TRY_COMPILE([#include <sys/types.h>
  18. #include <sys/param.h>], [
  19. #if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN
  20.  bogus endian macros
  21. #endif], [# It does; now see whether it defined to BIG_ENDIAN or not.
  22. AC_TRY_COMPILE([#include <sys/types.h>
  23. #include <sys/param.h>], [
  24. #if BYTE_ORDER != BIG_ENDIAN
  25.  not big endian
  26. #endif], ac_cv_c_bigendian=yes, ac_cv_c_bigendian=no)])
  27. if test $ac_cv_c_bigendian = unknown; then
  28. AC_TRY_RUN([main () {
  29.   /* Are we little or big endian?  From Harbison&Steele.  */
  30.   union
  31.   {
  32.     long l;
  33.     char c[sizeof (long)];
  34.   } u;
  35.   u.l = 1;
  36.   exit (u.c[sizeof (long) - 1] == 1);
  37. }], ac_cv_c_bigendian=no, ac_cv_c_bigendian=yes,
  38. [ echo $ac_n "cross-compiling... " 2>&AC_FD_MSG ])
  39. fi])
  40. if test $ac_cv_c_bigendian = unknown; then
  41. AC_MSG_CHECKING(to probe for byte ordering)
  42. [
  43. cat >conftest.c <<EOF
  44. short ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
  45. short ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
  46. void _ascii() { char* s = (char*) ascii_mm; s = (char*) ascii_ii; }
  47. short ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
  48. short ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
  49. void _ebcdic() { char* s = (char*) ebcdic_mm; s = (char*) ebcdic_ii; }
  50. int main() { _ascii (); _ebcdic (); return 0; }
  51. EOF
  52. ] if test -f conftest.c ; then
  53.      if ${CC-cc} -c conftest.c -o conftest.o && test -f conftest.o ; then
  54.         if test `grep -l BIGenDianSyS conftest.o` ; then
  55.            echo $ac_n ' big endian probe OK, ' 1>&AC_FD_MSG
  56.            ac_cv_c_bigendian=yes
  57.         fi
  58.         if test `grep -l LiTTleEnDian conftest.o` ; then
  59.            echo $ac_n ' little endian probe OK, ' 1>&AC_FD_MSG
  60.            if test $ac_cv_c_bigendian = yes ; then
  61.             ac_cv_c_bigendian=unknown;
  62.            else
  63.             ac_cv_c_bigendian=no
  64.            fi
  65.         fi
  66.         echo $ac_n 'guessing bigendian ...  ' >&AC_FD_MSG
  67.      fi
  68.   fi
  69. AC_MSG_RESULT($ac_cv_c_bigendian)
  70. fi
  71. if test $ac_cv_c_bigendian = yes; then
  72.   AC_DEFINE(WORDS_BIGENDIAN, 1, [whether byteorder is bigendian])
  73.   BYTEORDER=4321
  74. else
  75.   BYTEORDER=1234
  76. fi
  77. AC_DEFINE_UNQUOTED(BYTEORDER, $BYTEORDER, [1234 = LIL_ENDIAN, 4321 = BIGENDIAN])
  78. if test $ac_cv_c_bigendian = unknown; then
  79.   AC_MSG_ERROR(unknown endianess - sorry, please pre-set ac_cv_c_bigendian)
  80. fi
  81. ])
  82.