From 1146bf07624b5820b942b84b68e66f0d3dd25914 Mon Sep 17 00:00:00 2001
From: Ola Jeppsson <ola.jeppsson@gmail.com>
Date: Mon, 7 Oct 2019 18:07:30 -0400
Subject: [PATCH] configure: Fix cross-compilation errors

AC_RUN_IFELSE does not work when cross-compiling so we need to provide
fallback methods for those cases.

I tried to use constructs that work with Autoconf 2.52.
Alas, I wasn't able to generate a working build system with that version.

Autoconf 2.58 / Automake 1.7.9 is the earliest combo that I could get
to work (with and without this patch).
Perhaps it's time for a slight bump for the required version numbers?

Cross-compiles sucessfully against:
riscv64-unknown-linux-gnu

Downloaded from upstream PR:
https://github.com/memcached/memcached/pull/552

Signed-off-by: Bernd Kuhls <bernd.kuhls@t-online.de>
---
 configure.ac | 80 +++++++++++++++++++++++++++-------------------------
 1 file changed, 41 insertions(+), 39 deletions(-)

diff --git a/configure.ac b/configure.ac
index fb78fc5..27dc939 100644
--- a/configure.ac
+++ b/configure.ac
@@ -264,23 +264,42 @@ return sizeof(void*) == 8 ? 0 : 1;
     ],[
       CFLAGS="-m64 $org_cflags"
     ],[
-    AC_MSG_ERROR([Don't know how to build a 64-bit object.])
+      AC_MSG_ERROR([Don't know how to build a 64-bit object.])
+    ],[
+       dnl cross compile
+       AC_MSG_WARN([Assuming no extra CFLAGS are required for cross-compiling 64bit version.])
     ])
 fi
 
 dnl If data pointer is 64bit or not.
-AC_RUN_IFELSE(
-  [AC_LANG_PROGRAM([], [dnl
-return sizeof(void*) == 8 ? 0 : 1;
-  ])
-],[
-  have_64bit_ptr=yes
-],[
+AC_CHECK_HEADERS([stdint.h])
+AS_IF([test -z "$have_64bit_ptr"],
+  [AC_RUN_IFELSE(
+     [AC_LANG_PROGRAM([], [return sizeof(void*) == 8 ? 0 : 1;])],
+     [have_64bit_ptr=yes ],
+     [have_64bit_ptr=no],
+     [dnl cross compile (this test requires C99)
+      AS_IF([test "x$ac_cv_header_stdint_h" = xyes],
+        [AC_COMPILE_IFELSE(
+           [AC_LANG_PROGRAM([
+              #include <stdint.h>
+              #if UINTPTR_MAX == 0xFFFFFFFFFFFFFFFFUL
+              /* 64 bit pointer */
+              #else
+              #error 32 bit pointer
+              #endif
+            ], [])],
+            [have_64bit_ptr=yes],
+            [have_64bit_ptr=no])],
+        [have_64bit_ptr=unknown])
+     ])
 ])
-
-if test $have_64bit_ptr = yes; then
+AS_IF([test "$have_64bit_ptr" = "unknown" ],[
+  AC_MSG_ERROR([Cannot detect pointer size. Must pass have_64bit_ptr={yes,no} to configure.])
+])
+AS_IF([test "$have_64bit_ptr" = yes],[
   AC_DEFINE(HAVE_64BIT_PTR, 1, [data pointer is 64bit])
-fi
+])
 
 # Issue 213: Search for clock_gettime to help people linking
 #            with a static version of libevent
@@ -570,30 +589,10 @@ fi
 AC_C_SOCKLEN_T
 
 dnl Check if we're a little-endian or a big-endian system, needed by hash code
-AC_DEFUN([AC_C_ENDIAN],
-[AC_CACHE_CHECK(for endianness, ac_cv_c_endian,
-[
-  AC_RUN_IFELSE(
-    [AC_LANG_PROGRAM([], [dnl
-        long val = 1;
-        char *c = (char *) &val;
-        exit(*c == 1);
-    ])
-  ],[
-    ac_cv_c_endian=big
-  ],[
-    ac_cv_c_endian=little
-  ])
-])
-if test $ac_cv_c_endian = big; then
-  AC_DEFINE(ENDIAN_BIG, 1, [machine is bigendian])
-fi
-if test $ac_cv_c_endian = little; then
-  AC_DEFINE(ENDIAN_LITTLE, 1, [machine is littleendian])
-fi
-])
-
-AC_C_ENDIAN
+AC_C_BIGENDIAN(
+  [AC_DEFINE(ENDIAN_BIG, 1, [machine is bigendian])],
+  [AC_DEFINE(ENDIAN_LITTLE, 1, [machine is littleendian])],
+  [AC_MSG_ERROR([Cannot detect endianness. Must pass ac_cv_c_bigendian={yes,no} to configure.])])
 
 AC_DEFUN([AC_C_HTONLL],
 [
@@ -670,12 +669,15 @@ AC_DEFUN([AC_C_ALIGNMENT],
   ],[
     ac_cv_c_alignment=need
   ],[
-    ac_cv_c_alignment=need
+    dnl cross compile
+    ac_cv_c_alignment=maybe
   ])
 ])
-if test $ac_cv_c_alignment = need; then
-  AC_DEFINE(NEED_ALIGN, 1, [Machine need alignment])
-fi
+AS_IF([test $ac_cv_c_alignment = need],
+  [AC_DEFINE(NEED_ALIGN, 1, [Machine need alignment])])
+AS_IF([test $ac_cv_c_alignment = maybe],
+  [AC_MSG_WARN([Assuming aligned access is required when cross-compiling])
+   AC_DEFINE(NEED_ALIGN, 1, [Machine need alignment])])
 ])
 
 AC_C_ALIGNMENT
-- 
2.20.1

