When determining the endiandness of the target architecture we're building for a small program is compiled, which in an obfuscated way declares two strings. Then, we look which string is in correct order (using strings binary) and deduct the endiandness. But using the strings binary is problematic, because it's part of toolchain (strings is just a symlink to x86_64-pc-linux-gnu-strings or llvm-strings). And when (cross-)compiling, it requires users to set the symlink to the correct toolchain.
Fortunately, we have a better alternative anyways. Since we require either clang or gcc we can rely on macros they declare. Bug: https://bugs.gentoo.org/876933 Signed-off-by: Michal Privoznik <mpriv...@redhat.com> --- configure | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/configure b/configure index 45ee6f4eb3..91e04635cb 100755 --- a/configure +++ b/configure @@ -1426,27 +1426,30 @@ fi # --- # big/little endian test cat > $TMPC << EOF -#include <stdio.h> -short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, }; -short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, }; -int main(int argc, char *argv[]) -{ - return printf("%s %s\n", (char *)big_endian, (char *)little_endian); -} +#if defined(__BYTE_ORDER) && __BYTE_ORDER == __BIG_ENDIAN || \ + defined(__BIG_ENDIAN__) +# error BIG +#endif +int main(void) { return 0; } EOF if compile_prog ; then - if strings -a $TMPE | grep -q BiGeNdIaN ; then - bigendian="yes" - elif strings -a $TMPE | grep -q LiTtLeEnDiAn ; then - bigendian="no" - else - echo big/little test failed - exit 1 - fi + bigendian="yes" else + cat > $TMPC << EOF +#if defined(__BYTE_ORDER) && __BYTE_ORDER == __LITTLE_ENDIAN || \ + defined(__LITTLE_ENDIAN__) +# error LITTLE +#endif +int main(void) { return 0; } +EOF + + if compile_prog ; then + bigendian="no" + else echo big/little test failed exit 1 + fi fi ########################################## -- 2.35.1