]> git.eshelyaron.com Git - emacs.git/commitdiff
Temporary fixes for the Android build
authorPo Lu <luangruo@yahoo.com>
Sun, 13 Aug 2023 04:44:25 +0000 (12:44 +0800)
committerPo Lu <luangruo@yahoo.com>
Sun, 13 Aug 2023 04:44:25 +0000 (12:44 +0800)
* configure.ac:
* src/conf_post.h [__ANDROID__]: Define substitutes for functions
used by Gnulib that are occasionally absent.

configure.ac
src/conf_post.h

index 0234a82b92f598801e39143aa0e9287826a5428f..46836073aa06dc4ba07399f3eaf1a01e5befa3e1 100644 (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])])
index f31e012dc6e6c296faf4a38f668561b5554140c5..d48c3494b57e80f8ca85be49df548f0d7d36ef96 100644 (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__ */