Temporary fixes for the Android build

* configure.ac:
* src/conf_post.h [__ANDROID__]: Define substitutes for functions
used by Gnulib that are occasionally absent.
This commit is contained in:
Po Lu 2023-08-13 12:44:25 +08:00
parent 748521ba34
commit 0e44ab5f06
2 changed files with 52 additions and 0 deletions

View file

@ -2710,6 +2710,25 @@ for Android, but all API calls need to be stubbed out])
# Check for some functions not always present in the NDK.
AC_CHECK_DECLS([android_get_device_api_level])
AC_CHECK_DECLS([endutent, sysinfo], [], [],
[[
#include <sys/sysinfo.h>
#include <utmp.h>
]])
# Establish if BOOT_TIME is defined in utmp.h.
AC_CACHE_CHECK([if utmp.h defines BOOT_TIME],
[emacs_cv_utmp_h_defines_boot_time],
[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
#include <utmp.h>
#ifndef BOOT_TIME
BOOT_TIME not defined
#endif /* BOOT_TIME */
]], [[]])], [emacs_cv_utmp_h_defines_boot_time=yes],
[emacs_cv_utmp_h_defines_boot_time=no])])
AS_IF([test x"$emacs_cv_utmp_h_defines_boot_time" = xyes],
[AC_DEFINE([UTMP_H_DEFINES_BOOT_TIME], [1],
[Define to 1 if building for Android and utmp.h declares BOOT_TIME])])
# Say this build is really for Android.
REALLY_ANDROID=yes])])

View file

@ -471,3 +471,36 @@ extern int emacs_setenv_TZ (char const *);
#undef MB_CUR_MAX
#define MB_CUR_MAX REPLACEMENT_MB_CUR_MAX
#endif /* REPLACEMENT_MB_CUR_MAX */
#ifdef __ANDROID__
/* The Android NDK r10b omits the function `endutent' that is actually
defined in the C library and used by Gnulib. Define a prototype
for it here. */
#ifndef HAVE_DECL_ENDUTENT
extern void endutent (void);
#endif /* HAVE_DECL_ENDUTENT */
/* Now define substitutes for BOOT_TIME if necessary. */
#ifndef UTMP_H_DEFINES_BOOT_TIME
#include <utmp.h>
#define BOOT_TIME 2
#endif /* UTMP_H_DEFINES_BOOT_TIME */
/* sysinfo is also absent from some versions of the NDK, yet is
present on API level 9 and above. */
#ifndef HAVE_DECL_SYSINFO
#include <sys/sysinfo.h>
#if __ANDROID_API__ >= 9
extern int sysinfo (struct sysinfo *info);
#else /* __ANDROID_API__ < 8 */
/* Gnulib uses this function unconditionally. */
#define sysinfo(ignored) ((void) ignored, (errno = ENOSYS), -1)
#endif /* HAVE_DECL_SYSINFO */
#endif /* __ANDROID__ */