# 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])])
#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__ */