+# For Android NDK unified headers
+if test x$platform_android = xyes; then
+ AC_CHECK_HEADERS(machine/endian.h sys/endian.h)
+ AC_CHECK_HEADERS(android/legacy_signal_inlines.h, [have_android_signal_inlines=yes], [have_android_signal_inlines=no])
+
+ # Make sure SIGRT{MIN,MAX} work - they will fail to work with unified headers if building for
+ # API level < 21 *and* android/legacy_signal_inlines.h doesn't declare (and define) the required
+ # libc APIs to obtain values for SIGRT{MIN,MAX}. We perform the check only if android/legacy_signal_inlines.h
+ # is found because in other cases the macros will either work (for NDK < 14) or fail if the legacy header
+ # doesn't contain the required definitions (NDK 14)
+ if test x$have_android_signal_inlines = xyes; then
+ AC_MSG_CHECKING([Whether Android SIGRTMIN/SGRTMAX macros are valid])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([#include <android/legacy_signal_inlines.h>],[
+ int i;
+ for (i = SIGRTMIN + 1; i < SIGRTMAX; ++i) {
+ }
+ ])],[
+ AC_MSG_RESULT(yes)
+ android_sigrtminmax_work=yes
+ ],[
+ AC_MSG_RESULT(no)
+ android_sigrtminmax_work=no
+ ]
+ )
+
+ if test x$android_sigrtminmax_work = xno; then
+ AC_MSG_ERROR([Android SIGRTMIN/SIGRTMAX macros don't work in this NDK])
+ fi
+ fi
+
+ # Attempt to detect whether we're using Android NDK unified headers
+ AC_CHECK_HEADERS(android/api-level.h, [have_android_api_level=yes], [have_android_api_level=no])
+ AC_CHECK_HEADERS(android/versioning.h, [have_android_versioning=yes], [have_android_versioning=no])
+
+ android_unified_headers=no
+ if test x$have_android_api_level = xyes; then
+ if test x$have_android_versioning = xyes; then
+ AC_MSG_CHECKING([whether using Android NDK unified headers])
+
+ # Both macros are defined only in the NDK unified headers
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([
+ #include <android/api-level.h>
+ #include <android/versioning.h>
+ ],[
+ #if __ANDROID_API_O__ == 26 && defined(__INTRODUCED_IN)
+ return 0
+ #else
+ #error __ANDROID_API_O__ != 26 or the __INTRODUCED_IN macro not defined
+ #endif
+ ])],[
+ AC_MSG_RESULT(yes)
+ android_unified_headers=yes
+ ],[
+ AC_MSG_RESULT(no)
+ android_unified_headers=no
+ ]
+ )
+ fi
+ fi
+
+ if test x$android_unified_headers = xyes; then
+ AC_DEFINE(ANDROID_UNIFIED_HEADERS, 1, [Whether Android NDK unified headers are used])
+ fi
+fi # Android
+