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.
This commit is contained in:
Po Lu 2023-03-04 13:38:00 +08:00
parent 798003b04f
commit 39a7e6b79f
3 changed files with 47 additions and 0 deletions

View file

@ -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

View file

@ -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

View file

@ -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 */