[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
1-bigendian-grep.patch
From: |
Alexandre Duret-Lutz |
Subject: |
1-bigendian-grep.patch |
Date: |
Sun, 12 Aug 2001 12:54:09 +0200 |
Index: ChangeLog
--- ChangeLog
+++ ChangeLog
@@ -1,1 +1,7 @@
+2001-08-11 Alexandre Duret-Lutz <address@hidden>
+
+ * lib/autoconf/c.m4 (AC_C_BIGENDIAN): Guess endianness by grep'ing
+ magic values from an object file when cross-compiling.
+ Based on code by Guido Draheim <address@hidden>.
+
Index: NEWS
===================================================================
RCS file: /home/adl/CVSROOT/actmp/NEWS,v
retrieving revision 1.1.1.1
diff -u -r1.1.1.1 NEWS
--- NEWS 11 Aug 2001 19:12:57 -0000 1.1.1.1
+++ NEWS 11 Aug 2001 19:51:10 -0000
@@ -10,6 +10,8 @@
- --force, -f
** Bug fixes
- The top level $prefix is propagated to the AC_CONFIG_SUBDIRS configures.
+** C Macros
+- AC_C_BIGENDIAN supports the cross-compiling case.
* Major changes in Autoconf 2.52
** Documentation
Index: THANKS
===================================================================
RCS file: /home/adl/CVSROOT/actmp/THANKS,v
retrieving revision 1.1.1.1
diff -u -r1.1.1.1 THANKS
--- THANKS 11 Aug 2001 19:12:57 -0000 1.1.1.1
+++ THANKS 11 Aug 2001 19:46:08 -0000
@@ -56,6 +56,7 @@
Gordon Matzigkeit address@hidden
Graham Jenkins address@hidden
Greg A. Woods address@hidden
+Guido Draheim address@hidden
Guido Flohr address@hidden
Guillermo Gomez address@hidden
Hans Olsson address@hidden
Index: lib/autoconf/c.m4
===================================================================
RCS file: /home/adl/CVSROOT/actmp/lib/autoconf/c.m4,v
retrieving revision 1.1.1.1
diff -u -r1.1.1.1 c.m4
--- lib/autoconf/c.m4 11 Aug 2001 19:12:57 -0000 1.1.1.1
+++ lib/autoconf/c.m4 11 Aug 2001 20:03:52 -0000
@@ -832,8 +832,7 @@
# --------------
AC_DEFUN([AC_C_BIGENDIAN],
[AC_CACHE_CHECK(whether byte ordering is bigendian, ac_cv_c_bigendian,
-[ac_cv_c_bigendian=unknown
-# See if sys/param.h defines the BYTE_ORDER macro.
+[# See if sys/param.h defines the BYTE_ORDER macro.
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <sys/types.h>
#include <sys/param.h>
],
@@ -847,9 +846,8 @@
], [#if BYTE_ORDER != BIG_ENDIAN
not big endian
#endif
-])], [ac_cv_c_bigendian=yes],
- [ac_cv_c_bigendian=no])])
-if test $ac_cv_c_bigendian = unknown; then
+])], [ac_cv_c_bigendian=yes], [ac_cv_c_bigendian=no])],
+[# It does not; compile a test program.
AC_TRY_RUN(
[int
main ()
@@ -862,13 +860,39 @@
} u;
u.l = 1;
exit (u.c[sizeof (long) - 1] == 1);
-}], ac_cv_c_bigendian=no, ac_cv_c_bigendian=yes)
-fi])
-if test $ac_cv_c_bigendian = yes; then
- AC_DEFINE(WORDS_BIGENDIAN, 1,
- [Define if your processor stores words with the most significant
- byte first (like Motorola and SPARC, unlike Intel and VAX).])
+}], [ac_cv_c_bigendian=no], [ac_cv_c_bigendian=yes],
+[# try to guess the endianess by grep'ing values into an object file
+ ac_cv_c_bigendian=unknown
+ AC_COMPILE_IFELSE(
+[short ascii_mm[[]] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
+short ascii_ii[[]] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
+void _ascii () { char *s = (char *) ascii_mm; s = (char *) ascii_ii; }
+short ebcdic_ii[[]] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
+short ebcdic_mm[[]] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
+void _ebcdic () { char *s = (char *) ebcdic_mm; s = (char *) ebcdic_ii; }
+int main () { _ascii (); _ebcdic (); return 0; }],
+[if test `grep -l BIGenDianSyS conftest.$ac_objext` ; then
+ ac_cv_c_bigendian=yes
fi
+if test `grep -l LiTTleEnDian conftest.$ac_objext` ; then
+ if test "$ac_cv_c_bigendian" = unknown; then
+ ac_cv_c_bigendian=no
+ else
+ # finding both strings is unlikely to happen, but who knows?
+ ac_cv_c_bigendian=unknown
+ fi
+fi])])])])
+case $ac_cv_c_bigendian in
+ yes)
+ AC_DEFINE(WORDS_BIGENDIAN, 1,
+ [Define if your processor stores words with the most significant
+ byte first (like Motorola and SPARC, unlike Intel and VAX).]);;
+ no)
+ ;;
+ *)
+ AC_MSG_ERROR([unknown endianess
+presetting ac_cv_c_bigendian=no (or yes) will help]);;
+esac
])# AC_C_BIGENDIAN
- 1-bigendian-grep.patch,
Alexandre Duret-Lutz <=