emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

feature/android 39a7e6b79fd: Port to broken Android NDK version


From: Po Lu
Subject: feature/android 39a7e6b79fd: Port to broken Android NDK version
Date: Sat, 4 Mar 2023 00:41:17 -0500 (EST)

branch: feature/android
commit 39a7e6b79fdeafc539a36f6831d922a2622cb679
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>

    Port to broken Android NDK version
    
    * configure.ac: Check for __ctype_get_mb_cur_max.
    Then see if MB_CUR_MAX is defined to it, and define
    REPLACEMENT_MB_CUR_MAX if so and it does not link.
    * java/INSTALL: Update documentation.
    * src/conf_post.h (MB_CUR_MAX): Define replacement if
    necessary.
---
 configure.ac    | 29 +++++++++++++++++++++++++++++
 java/INSTALL    |  9 +++++++++
 src/conf_post.h |  9 +++++++++
 3 files changed, 47 insertions(+)

diff --git a/configure.ac b/configure.ac
index e15d0c7ef39..3a9d2614c00 100644
--- a/configure.ac
+++ b/configure.ac
@@ -7383,6 +7383,35 @@ fi
 
 AC_SUBST([WINDOW_SYSTEM_OBJ])
 
+# Some systems have MB_CUR_MAX defined to a call to
+# __ctype_get_mb_cur_max, but do not have __ctype_get_mb_cur_max in
+# libc.  Check for that situation and define MB_CUR_MAX to something
+# sane.
+
+AC_CHECK_FUNC([__ctype_get_mb_cur_max])
+
+AC_CACHE_CHECK([whether MB_CUR_MAX is defined to function that won't link],
+  [emacs_cv_broken_mb_cur_max],
+  [AC_EGREP_CPP(__ctype_get_mb_cur_max, [
+#include <stdlib.h>
+#ifndef MB_CUR_MAX
+#define MB_CUR_MAX -1
+#endif
+static int foo = MB_CUR_MAX;
+], [AS_IF([test "$ac_cv_func___ctype_get_mb_cur_max" = "yes"],
+     [emacs_cv_broken_mb_cur_max=no],
+     [emacs_cv_broken_mb_cur_max=yes])],
+  [emacs_cv_broken_mb_cur_max=no])])
+
+AS_IF([test "$emacs_cv_broken_mb_cur_max" = "yes"],
+ # Define this to 4, which is right for Android.
+ [AS_CASE([$opsys], [android],
+   [AC_DEFINE([REPLACEMENT_MB_CUR_MAX], [4],
+      [Define to MB_CUR_MAX if stdlib.h is broken.])],
+   [AC_MSG_ERROR([MB_CUR_MAX does not work on your system.
+Please modify configure.ac to set an appropriate value, then
+send your change to bug-gnu-emacs@gnu.org])])])
+
 AH_TOP([/* GNU Emacs site configuration template file.
 
 Copyright (C) 1988, 1993-1994, 1999-2002, 2004-2021
diff --git a/java/INSTALL b/java/INSTALL
index b331d09d9ff..37f7048b89d 100644
--- a/java/INSTALL
+++ b/java/INSTALL
@@ -129,6 +129,15 @@ so:
 
   ./configure --with-ndk-cxx=/path/to/toolchain/bin/i686-linux-android-g++
 
+Some versions of the NDK have a bug, where GCC fails to locate
+``stddef.h'' after being copied to a standalone toolchain.  To work
+around this problem (which normally exhibits itself when building C++
+code), add:
+
+   -isystem /path/to/toolchain/include/c++/4.9.x
+
+to ANDROID_CFLAGS.
+
 
 DEBUG AND RELEASE BUILDS
 
diff --git a/src/conf_post.h b/src/conf_post.h
index 0d5f90a6910..506ddc11270 100644
--- a/src/conf_post.h
+++ b/src/conf_post.h
@@ -461,3 +461,12 @@ extern int emacs_setenv_TZ (char const *);
 #else
 # define UNINIT /* empty */
 #endif
+
+/* MB_CUR_MAX is often broken on systems which copy-paste LLVM
+   headers, so replace its definition with a working one if
+   necessary.  */
+
+#ifdef REPLACEMENT_MB_CUR_MAX
+#include <stdlib.h>
+#define MB_CUR_MAX REPLACEMENT_MB_CUR_MAX
+#endif /* REPLACEMENT_MB_CUR_MAX */



reply via email to

[Prev in Thread] Current Thread [Next in Thread]