Compiling a testdir for Android 4.3, I get errors like these:
In file included from
/ANDROID_SDK/ndk-bundle/sysroot/usr/include/stdlib.h:263:0,
from ../gllib/stdlib.h:36,
from macros.h:22,
from test-hypotl.c:29:
/ANDROID_SDK/ndk-bundle/sysroot/usr/include/android/legacy_stdlib_inlines.h:76:22:
error: static declaration of 'random' follows non-static declaration
static __inline long random(void) { return lrand48(); }
^
In file included from test-hypotl.c:21:0:
../gllib/stdlib.h:1038:1: note: previous declaration of 'random' was here
_GL_FUNCDECL_SYS (random, long, (void));
^
In file included from
/ANDROID_SDK/ndk-bundle/sysroot/usr/include/stdlib.h:263:0,
from ../gllib/stdlib.h:36,
from macros.h:22,
from test-hypotl.c:29:
/ANDROID_SDK/ndk-bundle/sysroot/usr/include/android/legacy_stdlib_inlines.h:78:22:
error: static declaration of 'srandom' follows non-static declaration
static __inline void srandom(unsigned int __s) { srand48(__s); }
^
In file included from test-hypotl.c:21:0:
../gllib/stdlib.h:1052:1: note: previous declaration of 'srandom' was here
_GL_FUNCDECL_SYS (srandom, void, (unsigned int seed));
^
In file included from
/ANDROID_SDK/ndk-bundle/sysroot/usr/include/stdlib.h:263:0,
from ../gllib/stdlib.h:36,
from macros.h:22,
from test-hypotl.c:29:
/ANDROID_SDK/ndk-bundle/sysroot/usr/include/android/legacy_stdlib_inlines.h:80:21:
error: static declaration of 'grantpt' follows non-static declaration
static __inline int grantpt(int __fd __attribute((unused))) {
^
In file included from test-hypotl.c:21:0:
../gllib/stdlib.h:724:1: note: previous declaration of 'grantpt' was here
_GL_FUNCDECL_SYS (grantpt, int, (int fd));
^
The reason is that the Android headers define a number of system functions
through 'static inline'. This is the complete list:
./android/legacy_fenv_inlines_arm.h:static __inline int feclearexcept(int
__excepts) {
./android/legacy_fenv_inlines_arm.h:static __inline int fedisableexcept(int
__mask __unused) {
./android/legacy_fenv_inlines_arm.h:static __inline int feenableexcept(int
__mask __unused) {
./android/legacy_fenv_inlines_arm.h:static __inline int fegetenv(fenv_t*
__envp) {
./android/legacy_fenv_inlines_arm.h:static __inline int fegetexcept(void) {
./android/legacy_fenv_inlines_arm.h:static __inline int
fegetexceptflag(fexcept_t* __flagp, int __excepts) {
./android/legacy_fenv_inlines_arm.h:static __inline int fegetround(void) {
./android/legacy_fenv_inlines_arm.h:static __inline int feholdexcept(fenv_t*
__envp) {
./android/legacy_fenv_inlines_arm.h:static __inline int feraiseexcept(int
__excepts) {
./android/legacy_fenv_inlines_arm.h:static __inline int fesetenv(const fenv_t*
__envp) {
./android/legacy_fenv_inlines_arm.h:static __inline int fesetexceptflag(const
fexcept_t* __flagp, int __excepts) {
./android/legacy_fenv_inlines_arm.h:static __inline int fesetround(int __round)
{
./android/legacy_fenv_inlines_arm.h:static __inline int fetestexcept(int
__excepts) {
./android/legacy_fenv_inlines_arm.h:static __inline int feupdateenv(const
fenv_t* __envp) {
./android/legacy_signal_inlines.h:static __inline int sigaddset(sigset_t *set,
int signum) {
./android/legacy_signal_inlines.h:static __inline int sigdelset(sigset_t *set,
int signum) {
./android/legacy_signal_inlines.h:static __inline int sigemptyset(sigset_t
*set) {
./android/legacy_signal_inlines.h:static __inline int sigfillset(sigset_t *set)
{
./android/legacy_signal_inlines.h:static __inline int sigismember(const
sigset_t *set, int signum) {
./android/legacy_signal_inlines.h:static __inline sighandler_t signal(int s,
sighandler_t f) {
./android/legacy_stdlib_inlines.h:static __inline double atof(const char *nptr)
{ return (strtod(nptr, NULL)); }
./android/legacy_stdlib_inlines.h:static __inline double strtod_l(const char*
__s, char** __end_ptr, locale_t __l) {
./android/legacy_stdlib_inlines.h:static __inline float strtof(const char*
nptr, char** endptr) {
./android/legacy_stdlib_inlines.h:static __inline float strtof_l(const char*
__s, char** __end_ptr, locale_t __l) {
./android/legacy_stdlib_inlines.h:static __inline int abs(int __n) { return
(__n < 0) ? -__n : __n; }
./android/legacy_stdlib_inlines.h:static __inline int grantpt(int __fd
__attribute((unused))) {
./android/legacy_stdlib_inlines.h:static __inline int rand(void) { return
(int)lrand48(); }
./android/legacy_stdlib_inlines.h:static __inline long labs(long __n) { return
(__n < 0L) ? -__n : __n; }
./android/legacy_stdlib_inlines.h:static __inline long long llabs(long long
__n) {
./android/legacy_stdlib_inlines.h:static __inline long random(void) { return
lrand48(); }
./android/legacy_stdlib_inlines.h:static __inline long strtol_l(const char*
__s, char** __end_ptr, int __base, locale_t __l) {
./android/legacy_stdlib_inlines.h:static __inline void srand(unsigned int __s)
{ srand48(__s); }
./android/legacy_stdlib_inlines.h:static __inline void srandom(unsigned int
__s) { srand48(__s); }
./android/legacy_strings_inlines.h:static __inline int ffs(int __n) { return
__builtin_ffs(__n); }
./android/legacy_sys_stat_inlines.h:static __inline int mkfifo(const char*
__path, mode_t __mode) {
./android/legacy_sys_wait_inlines.h:static __inline pid_t wait4(pid_t pid, int*
status, int options, struct rusage* rusage) {
./bits/termios_inlines.h:static __inline speed_t cfgetspeed(const struct
termios* s) {
./bits/termios_inlines.h:__BIONIC_TERMIOS_INLINE speed_t cfgetispeed(const
struct termios* s) {
./bits/termios_inlines.h:__BIONIC_TERMIOS_INLINE speed_t cfgetospeed(const
struct termios* s) {
./bits/termios_inlines.h:__BIONIC_TERMIOS_INLINE void cfmakeraw(struct termios*
s) {
./bits/termios_inlines.h:__BIONIC_TERMIOS_INLINE int cfsetspeed(struct termios*
s, speed_t speed) {
./bits/termios_inlines.h:__BIONIC_TERMIOS_INLINE int cfsetispeed(struct
termios* s, speed_t speed) {
./bits/termios_inlines.h:__BIONIC_TERMIOS_INLINE int cfsetospeed(struct
termios* s, speed_t speed) {
./bits/termios_inlines.h:__BIONIC_TERMIOS_INLINE int tcdrain(int fd) {
./bits/termios_inlines.h:__BIONIC_TERMIOS_INLINE int tcflow(int fd, int action)
{
./bits/termios_inlines.h:__BIONIC_TERMIOS_INLINE int tcflush(int fd, int queue)
{
./bits/termios_inlines.h:__BIONIC_TERMIOS_INLINE int tcgetattr(int fd, struct
termios* s) {
./bits/termios_inlines.h:__BIONIC_TERMIOS_INLINE pid_t tcgetsid(int fd) {
./bits/termios_inlines.h:__BIONIC_TERMIOS_INLINE int tcsendbreak(int fd, int
duration) {
./bits/termios_inlines.h:__BIONIC_TERMIOS_INLINE int tcsetattr(int fd, int
optional_actions, const struct termios* s) {
./unistd.h:static __inline__ int getpagesize(void) {
A number of these are interacting with gnulib. I'm applying these fixes.
2018-05-13 Bruno Haible <[email protected]>
getpagesize: Fix compilation error on Android.
* m4/getpagesize.m4 (gl_CHECK_FUNC_GETPAGESIZE): New macro.
(gl_FUNC_GETPAGESIZE): Invoke it instead of AC_CHECK_FUNC.
* m4/getcwd-abort-bug.m4 (gl_FUNC_GETCWD_ABORT_BUG): Don't invoke
AC_CHECK_FUNC. Instead, invoke gl_CHECK_FUNC_GETPAGESIZE and define
HAVE_GETPAGESIZE accordingly.
* modules/getcwd (Files): Add m4/getpagesize.m4.
2018-05-13 Bruno Haible <[email protected]>
tcgetsid: Fix compilation error on Android.
* m4/tcgetsid.m4 (gl_FUNC_TCGETSID): Use AC_LINK_IFELSE instead of
AC_CHECK_FUNC.
2018-05-13 Bruno Haible <[email protected]>
getpass: Fix configure test for Android.
* m4/getpass.m4 (gl_PREREQ_GETPASS): Use AC_LINK_IFELSE instead of
AC_CHECK_FUNC.
2018-05-13 Bruno Haible <[email protected]>
ffs: Fix compilation error on Android.
* m4/ffs.m4 (gl_FUNC_FFS): Use AC_LINK_IFELSE instead of AC_CHECK_FUNC.
2018-05-13 Bruno Haible <[email protected]>
mkfifo: Fix compilation error on Android.
* m4/mkfifo.m4 (gl_FUNC_MKFIFO): Use AC_LINK_IFELSE instead of
AC_CHECK_FUNC.
2018-05-13 Bruno Haible <[email protected]>
c-strtod: Fix configure test for Android.
* m4/c-strtod.m4 (gl_C_STRTOD): Use AC_LINK_IFELSE instead of
AC_CHECK_FUNC.
2018-05-13 Bruno Haible <[email protected]>
random: Fix compilation error on Android.
* m4/random.m4 (gl_FUNC_RANDOM): Use AC_LINK_IFELSE instead of
AC_CHECK_FUNC.
2018-05-13 Bruno Haible <[email protected]>
grantpt: Fix compilation error on Android.
* m4/grantpt.m4 (gl_FUNC_GRANTPT): Use AC_LINK_IFELSE instead of
AC_CHECK_FUNC.
>From 052169efee500c4c8a8b9e0433f1cd703f99ea89 Mon Sep 17 00:00:00 2001
From: Bruno Haible <[email protected]>
Date: Sun, 13 May 2018 15:31:48 +0200
Subject: [PATCH 1/9] grantpt: Fix compilation error on Android.
* m4/grantpt.m4 (gl_FUNC_GRANTPT): Use AC_LINK_IFELSE instead of
AC_CHECK_FUNC.
---
ChangeLog | 6 ++++++
m4/grantpt.m4 | 16 +++++++++++++---
2 files changed, 19 insertions(+), 3 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index f4c0138..2c6eab8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
2018-05-13 Bruno Haible <[email protected]>
+ grantpt: Fix compilation error on Android.
+ * m4/grantpt.m4 (gl_FUNC_GRANTPT): Use AC_LINK_IFELSE instead of
+ AC_CHECK_FUNC.
+
+2018-05-13 Bruno Haible <[email protected]>
+
stdioext: Fix compilation errors with newer Android headers.
* lib/stdio-impl.h (fp_, fp_ub): Define differently for Android.
(__SLBF, __SNBF, __SRD, __SWR, __SRW, __SEOF, __SERR, __SOFF): Define
diff --git a/m4/grantpt.m4 b/m4/grantpt.m4
index 7e2ee4a..91d8183 100644
--- a/m4/grantpt.m4
+++ b/m4/grantpt.m4
@@ -1,4 +1,4 @@
-# grantpt.m4 serial 2
+# grantpt.m4 serial 3
dnl Copyright (C) 2010-2018 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
@@ -11,8 +11,18 @@ AC_DEFUN([gl_FUNC_GRANTPT],
dnl Persuade glibc <stdlib.h> to declare grantpt().
AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
- AC_CHECK_FUNCS([grantpt])
- if test $ac_cv_func_grantpt = no; then
+ dnl We can't use AC_CHECK_FUNC here, because grantpt() is defined as a
+ dnl static inline function when compiling for Android 4.4 or older.
+ AC_CACHE_CHECK([for grantpt], [gl_cv_func_grantpt],
+ [AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <stdlib.h>]],
+ [[return grantpt(0);]])
+ ],
+ [gl_cv_func_grantpt=yes],
+ [gl_cv_func_grantpt=no])
+ ])
+ if test $gl_cv_func_grantpt = no; then
HAVE_GRANTPT=0
fi
])
--
2.7.4
>From 3c82739c334a42470f2b3bbbada10138f04813b1 Mon Sep 17 00:00:00 2001
From: Bruno Haible <[email protected]>
Date: Sun, 13 May 2018 15:49:40 +0200
Subject: [PATCH 2/9] random: Fix compilation error on Android.
* m4/random.m4 (gl_FUNC_RANDOM): Use AC_LINK_IFELSE instead of
AC_CHECK_FUNC.
---
ChangeLog | 6 ++++++
m4/random.m4 | 16 +++++++++++++---
2 files changed, 19 insertions(+), 3 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 2c6eab8..908d4ea 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
2018-05-13 Bruno Haible <[email protected]>
+ random: Fix compilation error on Android.
+ * m4/random.m4 (gl_FUNC_RANDOM): Use AC_LINK_IFELSE instead of
+ AC_CHECK_FUNC.
+
+2018-05-13 Bruno Haible <[email protected]>
+
grantpt: Fix compilation error on Android.
* m4/grantpt.m4 (gl_FUNC_GRANTPT): Use AC_LINK_IFELSE instead of
AC_CHECK_FUNC.
diff --git a/m4/random.m4 b/m4/random.m4
index ba9cf3b..dd4d6fe 100644
--- a/m4/random.m4
+++ b/m4/random.m4
@@ -1,4 +1,4 @@
-# random.m4 serial 2
+# random.m4 serial 3
dnl Copyright (C) 2012-2018 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
@@ -8,8 +8,18 @@ AC_DEFUN([gl_FUNC_RANDOM],
[
AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
- AC_CHECK_FUNCS([random])
- if test $ac_cv_func_random = no; then
+ dnl We can't use AC_CHECK_FUNC here, because random() is defined as a
+ dnl static inline function when compiling for Android 4.4 or older.
+ AC_CACHE_CHECK([for random], [gl_cv_func_random],
+ [AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <stdlib.h>]],
+ [[return random() == 0;]])
+ ],
+ [gl_cv_func_random=yes],
+ [gl_cv_func_random=no])
+ ])
+ if test $gl_cv_func_random = no; then
HAVE_RANDOM=0
fi
--
2.7.4
>From da1c4df8732c2805a10ce6534d310642418c21ae Mon Sep 17 00:00:00 2001
From: Bruno Haible <[email protected]>
Date: Sun, 13 May 2018 16:03:03 +0200
Subject: [PATCH 3/9] c-strtod: Fix configure test for Android.
* m4/c-strtod.m4 (gl_C_STRTOD): Use AC_LINK_IFELSE instead of
AC_CHECK_FUNC.
---
ChangeLog | 6 ++++++
m4/c-strtod.m4 | 31 +++++++++++++++++++++++++++++--
2 files changed, 35 insertions(+), 2 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 908d4ea..bb1f4c2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
2018-05-13 Bruno Haible <[email protected]>
+ c-strtod: Fix configure test for Android.
+ * m4/c-strtod.m4 (gl_C_STRTOD): Use AC_LINK_IFELSE instead of
+ AC_CHECK_FUNC.
+
+2018-05-13 Bruno Haible <[email protected]>
+
random: Fix compilation error on Android.
* m4/random.m4 (gl_FUNC_RANDOM): Use AC_LINK_IFELSE instead of
AC_CHECK_FUNC.
diff --git a/m4/c-strtod.m4 b/m4/c-strtod.m4
index ccff0e6..9282cee 100644
--- a/m4/c-strtod.m4
+++ b/m4/c-strtod.m4
@@ -1,4 +1,4 @@
-# c-strtod.m4 serial 15
+# c-strtod.m4 serial 16
# Copyright (C) 2004-2006, 2009-2018 Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation
@@ -37,7 +37,34 @@ dnl Prerequisites of lib/c-strtod.c.
AC_DEFUN([gl_C_STRTOD],
[
AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
- AC_CHECK_FUNCS([strtod_l])
+
+ AC_CHECK_HEADERS_ONCE([xlocale.h])
+ dnl We can't use AC_CHECK_FUNC here, because strtod_l() is defined as a
+ dnl static inline function when compiling for Android 7.1 or older.
+ AC_CACHE_CHECK([for strtod_l], [gl_cv_func_strtod_l],
+ [AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <stdlib.h>
+ #include <locale.h>
+ #if HAVE_XLOCALE_H
+ # include <xlocale.h>
+ #endif
+ locale_t loc;
+ ]],
+ [[char *end;
+ return strtod_l("0",&end,loc) < 0.0;
+ ]])
+ ],
+ [gl_cv_func_strtod_l=yes],
+ [gl_cv_func_strtod_l=no])
+ ])
+ if test $gl_cv_func_strtod_l = yes; then
+ HAVE_STRTOD_L=1
+ else
+ HAVE_STRTOD_L=0
+ fi
+ AC_DEFINE_UNQUOTED([HAVE_STRTOD_L], [$HAVE_STRTOD_L],
+ [Define to 1 if the system has the 'strtod_l' function.])
])
dnl Prerequisites of lib/c-strtold.c.
--
2.7.4
>From b24b6bbf9cf4cdc0d5d011b20dd74916507a6153 Mon Sep 17 00:00:00 2001
From: Bruno Haible <[email protected]>
Date: Sun, 13 May 2018 16:08:56 +0200
Subject: [PATCH 4/9] mkfifo: Fix compilation error on Android.
* m4/mkfifo.m4 (gl_FUNC_MKFIFO): Use AC_LINK_IFELSE instead of
AC_CHECK_FUNC.
---
ChangeLog | 6 ++++++
m4/mkfifo.m4 | 17 ++++++++++++++---
2 files changed, 20 insertions(+), 3 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index bb1f4c2..181a08c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
2018-05-13 Bruno Haible <[email protected]>
+ mkfifo: Fix compilation error on Android.
+ * m4/mkfifo.m4 (gl_FUNC_MKFIFO): Use AC_LINK_IFELSE instead of
+ AC_CHECK_FUNC.
+
+2018-05-13 Bruno Haible <[email protected]>
+
c-strtod: Fix configure test for Android.
* m4/c-strtod.m4 (gl_C_STRTOD): Use AC_LINK_IFELSE instead of
AC_CHECK_FUNC.
diff --git a/m4/mkfifo.m4 b/m4/mkfifo.m4
index 13c5164..5dda67c 100644
--- a/m4/mkfifo.m4
+++ b/m4/mkfifo.m4
@@ -1,4 +1,4 @@
-# serial 5
+# serial 6
# See if we need to provide mkfifo replacement.
dnl Copyright (C) 2009-2018 Free Software Foundation, Inc.
@@ -12,8 +12,19 @@ AC_DEFUN([gl_FUNC_MKFIFO],
[
AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS])
AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
- AC_CHECK_FUNCS_ONCE([mkfifo])
- if test $ac_cv_func_mkfifo = no; then
+
+ dnl We can't use AC_CHECK_FUNC here, because mkfifo() is defined as a
+ dnl static inline function when compiling for Android 4.4 or older.
+ AC_CACHE_CHECK([for mkfifo], [gl_cv_func_mkfifo],
+ [AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <sys/stat.h>]],
+ [[return mkfifo("/",0);]])
+ ],
+ [gl_cv_func_mkfifo=yes],
+ [gl_cv_func_mkfifo=no])
+ ])
+ if test $gl_cv_func_mkfifo = no; then
HAVE_MKFIFO=0
else
dnl Check for Solaris 9 and FreeBSD bug with trailing slash.
--
2.7.4
>From 2afc250c6fae929b95e8b8915b17379cd9f2e450 Mon Sep 17 00:00:00 2001
From: Bruno Haible <[email protected]>
Date: Sun, 13 May 2018 16:13:27 +0200
Subject: [PATCH 5/9] ffs: Fix compilation error on Android.
* m4/ffs.m4 (gl_FUNC_FFS): Use AC_LINK_IFELSE instead of AC_CHECK_FUNC.
---
ChangeLog | 5 +++++
m4/ffs.m4 | 19 ++++++++++++++++---
2 files changed, 21 insertions(+), 3 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 181a08c..3943da8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
2018-05-13 Bruno Haible <[email protected]>
+ ffs: Fix compilation error on Android.
+ * m4/ffs.m4 (gl_FUNC_FFS): Use AC_LINK_IFELSE instead of AC_CHECK_FUNC.
+
+2018-05-13 Bruno Haible <[email protected]>
+
mkfifo: Fix compilation error on Android.
* m4/mkfifo.m4 (gl_FUNC_MKFIFO): Use AC_LINK_IFELSE instead of
AC_CHECK_FUNC.
diff --git a/m4/ffs.m4 b/m4/ffs.m4
index 252e6f6..78b13ee 100644
--- a/m4/ffs.m4
+++ b/m4/ffs.m4
@@ -1,4 +1,4 @@
-# ffs.m4 serial 2
+# ffs.m4 serial 3
dnl Copyright (C) 2011-2018 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
@@ -7,8 +7,21 @@ dnl with or without modifications, as long as this notice is preserved.
AC_DEFUN([gl_FUNC_FFS],
[
AC_REQUIRE([gl_HEADER_STRINGS_H_DEFAULTS])
- AC_CHECK_FUNCS_ONCE([ffs])
- if test $ac_cv_func_ffs = no; then
+
+ dnl We can't use AC_CHECK_FUNC here, because ffs() is defined as a
+ dnl static inline function when compiling for Android 4.2 or older.
+ AC_CACHE_CHECK([for ffs], [gl_cv_func_ffs],
+ [AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <strings.h>
+ int x;
+ ]],
+ [[return ffs(x);]])
+ ],
+ [gl_cv_func_ffs=yes],
+ [gl_cv_func_ffs=no])
+ ])
+ if test $gl_cv_func_ffs = no; then
HAVE_FFS=0
fi
])
--
2.7.4
>From 5d35c92b4a44edc4f5e3b6854230c652b85f4fed Mon Sep 17 00:00:00 2001
From: Bruno Haible <[email protected]>
Date: Sun, 13 May 2018 16:25:20 +0200
Subject: [PATCH 6/9] getpass: Fix configure test for Android.
* m4/getpass.m4 (gl_PREREQ_GETPASS): Use AC_LINK_IFELSE instead of
AC_CHECK_FUNC.
---
ChangeLog | 6 ++++++
m4/getpass.m4 | 47 ++++++++++++++++++++++++++++++++++++++++++++---
2 files changed, 50 insertions(+), 3 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 3943da8..a2fa28b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
2018-05-13 Bruno Haible <[email protected]>
+ getpass: Fix configure test for Android.
+ * m4/getpass.m4 (gl_PREREQ_GETPASS): Use AC_LINK_IFELSE instead of
+ AC_CHECK_FUNC.
+
+2018-05-13 Bruno Haible <[email protected]>
+
ffs: Fix compilation error on Android.
* m4/ffs.m4 (gl_FUNC_FFS): Use AC_LINK_IFELSE instead of AC_CHECK_FUNC.
diff --git a/m4/getpass.m4 b/m4/getpass.m4
index 8e502f0..7f3fc88 100644
--- a/m4/getpass.m4
+++ b/m4/getpass.m4
@@ -1,4 +1,4 @@
-# getpass.m4 serial 14
+# getpass.m4 serial 15
dnl Copyright (C) 2002-2003, 2005-2006, 2009-2018 Free Software Foundation,
dnl Inc.
dnl This file is free software; the Free Software Foundation
@@ -43,7 +43,7 @@ AC_DEFUN([gl_FUNC_GETPASS_GNU],
# Prerequisites of lib/getpass.c.
AC_DEFUN([gl_PREREQ_GETPASS], [
AC_CHECK_HEADERS_ONCE([stdio_ext.h termios.h])
- AC_CHECK_FUNCS_ONCE([__fsetlocking tcgetattr tcsetattr])
+ AC_CHECK_FUNCS_ONCE([__fsetlocking])
AC_CHECK_DECLS([__fsetlocking],,,
[[#include <stdio.h>
#if HAVE_STDIO_EXT_H
@@ -54,5 +54,46 @@ AC_DEFUN([gl_PREREQ_GETPASS], [
AC_CHECK_DECLS_ONCE([fputs_unlocked])
AC_CHECK_DECLS_ONCE([funlockfile])
AC_CHECK_DECLS_ONCE([putc_unlocked])
- :
+
+ dnl We can't use AC_CHECK_FUNC here, because tcgetattr() is defined as a
+ dnl static inline function when compiling for Android 4.4 or older.
+ AC_CACHE_CHECK([for tcgetattr], [gl_cv_func_tcgetattr],
+ [AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <termios.h>
+ struct termios x;
+ ]],
+ [[return tcgetattr(0,&x);]])
+ ],
+ [gl_cv_func_tcgetattr=yes],
+ [gl_cv_func_tcgetattr=no])
+ ])
+ if test $gl_cv_func_tcgetattr = yes; then
+ HAVE_TCGETATTR=1
+ else
+ HAVE_TCGETATTR=0
+ fi
+ AC_DEFINE_UNQUOTED([HAVE_TCGETATTR], [$HAVE_TCGETATTR],
+ [Define to 1 if the system has the 'tcgetattr' function.])
+
+ dnl We can't use AC_CHECK_FUNC here, because tcsetattr() is defined as a
+ dnl static inline function when compiling for Android 4.4 or older.
+ AC_CACHE_CHECK([for tcsetattr], [gl_cv_func_tcsetattr],
+ [AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <termios.h>
+ struct termios x;
+ ]],
+ [[return tcsetattr(0,0,&x);]])
+ ],
+ [gl_cv_func_tcsetattr=yes],
+ [gl_cv_func_tcsetattr=no])
+ ])
+ if test $gl_cv_func_tcsetattr = yes; then
+ HAVE_TCSETATTR=1
+ else
+ HAVE_TCSETATTR=0
+ fi
+ AC_DEFINE_UNQUOTED([HAVE_TCSETATTR], [$HAVE_TCSETATTR],
+ [Define to 1 if the system has the 'tcsetattr' function.])
])
--
2.7.4
>From 9f442cbb0bd8ed7398aee30c3a3944486a64a058 Mon Sep 17 00:00:00 2001
From: Bruno Haible <[email protected]>
Date: Sun, 13 May 2018 16:45:11 +0200
Subject: [PATCH 7/9] tcgetsid: Fix compilation error on Android.
* m4/tcgetsid.m4 (gl_FUNC_TCGETSID): Use AC_LINK_IFELSE instead of
AC_CHECK_FUNC.
---
ChangeLog | 6 ++++++
m4/tcgetsid.m4 | 16 +++++++++++++---
2 files changed, 19 insertions(+), 3 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index a2fa28b..8643efa 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
2018-05-13 Bruno Haible <[email protected]>
+ tcgetsid: Fix compilation error on Android.
+ * m4/tcgetsid.m4 (gl_FUNC_TCGETSID): Use AC_LINK_IFELSE instead of
+ AC_CHECK_FUNC.
+
+2018-05-13 Bruno Haible <[email protected]>
+
getpass: Fix configure test for Android.
* m4/getpass.m4 (gl_PREREQ_GETPASS): Use AC_LINK_IFELSE instead of
AC_CHECK_FUNC.
diff --git a/m4/tcgetsid.m4 b/m4/tcgetsid.m4
index 3a91836..bc8c50d 100644
--- a/m4/tcgetsid.m4
+++ b/m4/tcgetsid.m4
@@ -1,4 +1,4 @@
-# tcgetsid.m4 serial 4
+# tcgetsid.m4 serial 5
dnl Copyright (C) 2010-2018 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
@@ -16,8 +16,18 @@ AC_DEFUN([gl_FUNC_TCGETSID],
HAVE_DECL_TCGETSID=0
fi
- AC_CHECK_FUNCS([tcgetsid])
- if test $ac_cv_func_tcgetsid = yes; then
+ dnl We can't use AC_CHECK_FUNC here, because tcgetsid() is defined as a
+ dnl static inline function when compiling for Android 4.4 or older.
+ AC_CACHE_CHECK([for tcgetsid], [gl_cv_func_tcgetsid],
+ [AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <termios.h>]],
+ [[return tcgetsid(0);]])
+ ],
+ [gl_cv_func_tcgetsid=yes],
+ [gl_cv_func_tcgetsid=no])
+ ])
+ if test $gl_cv_func_tcgetsid = yes; then
HAVE_TCGETSID=1
else
HAVE_TCGETSID=0
--
2.7.4
>From 0cc0345974e41e79aa8041939f63f971b9bce335 Mon Sep 17 00:00:00 2001
From: Bruno Haible <[email protected]>
Date: Sun, 13 May 2018 18:28:35 +0200
Subject: [PATCH 8/9] getpagesize: Fix compilation error on Android.
* m4/getpagesize.m4 (gl_CHECK_FUNC_GETPAGESIZE): New macro.
(gl_FUNC_GETPAGESIZE): Invoke it instead of AC_CHECK_FUNC.
* m4/getcwd-abort-bug.m4 (gl_FUNC_GETCWD_ABORT_BUG): Don't invoke
AC_CHECK_FUNC. Instead, invoke gl_CHECK_FUNC_GETPAGESIZE and define
HAVE_GETPAGESIZE accordingly.
* modules/getcwd (Files): Add m4/getpagesize.m4.
---
ChangeLog | 10 ++++++++++
m4/getcwd-abort-bug.m4 | 10 ++++++++--
m4/getpagesize.m4 | 23 ++++++++++++++++++++---
modules/getcwd | 1 +
4 files changed, 39 insertions(+), 5 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 8643efa..611bdc5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,15 @@
2018-05-13 Bruno Haible <[email protected]>
+ getpagesize: Fix compilation error on Android.
+ * m4/getpagesize.m4 (gl_CHECK_FUNC_GETPAGESIZE): New macro.
+ (gl_FUNC_GETPAGESIZE): Invoke it instead of AC_CHECK_FUNC.
+ * m4/getcwd-abort-bug.m4 (gl_FUNC_GETCWD_ABORT_BUG): Don't invoke
+ AC_CHECK_FUNC. Instead, invoke gl_CHECK_FUNC_GETPAGESIZE and define
+ HAVE_GETPAGESIZE accordingly.
+ * modules/getcwd (Files): Add m4/getpagesize.m4.
+
+2018-05-13 Bruno Haible <[email protected]>
+
tcgetsid: Fix compilation error on Android.
* m4/tcgetsid.m4 (gl_FUNC_TCGETSID): Use AC_LINK_IFELSE instead of
AC_CHECK_FUNC.
diff --git a/m4/getcwd-abort-bug.m4 b/m4/getcwd-abort-bug.m4
index 3115d61..8904360 100644
--- a/m4/getcwd-abort-bug.m4
+++ b/m4/getcwd-abort-bug.m4
@@ -1,4 +1,4 @@
-# serial 8
+# serial 9
# Determine whether getcwd aborts when the length of the working directory
# name is unusually large. Any length between 4k and 16k trigger the bug
# when using glibc-2.4.90-9 or older.
@@ -16,7 +16,13 @@ AC_DEFUN([gl_FUNC_GETCWD_ABORT_BUG],
AC_CHECK_DECLS_ONCE([getcwd])
AC_CHECK_HEADERS_ONCE([unistd.h])
AC_REQUIRE([gl_PATHMAX_SNIPPET_PREREQ])
- AC_CHECK_FUNCS([getpagesize])
+
+ gl_CHECK_FUNC_GETPAGESIZE
+ if test $gl_cv_func_getpagesize = yes; then
+ AC_DEFINE_UNQUOTED([HAVE_GETPAGESIZE], [1],
+ [Define to 1 if the system has the 'getpagesize' function.])
+ fi
+
AC_CACHE_CHECK([whether getcwd aborts when 4k < cwd_length < 16k],
[gl_cv_func_getcwd_abort_bug],
[# Remove any remnants of a previous test.
diff --git a/m4/getpagesize.m4 b/m4/getpagesize.m4
index 6492c78..eb17d60 100644
--- a/m4/getpagesize.m4
+++ b/m4/getpagesize.m4
@@ -1,4 +1,4 @@
-# getpagesize.m4 serial 9
+# getpagesize.m4 serial 10
dnl Copyright (C) 2002, 2004-2005, 2007, 2009-2018 Free Software Foundation,
dnl Inc.
dnl This file is free software; the Free Software Foundation
@@ -9,8 +9,8 @@ AC_DEFUN([gl_FUNC_GETPAGESIZE],
[
AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
AC_REQUIRE([AC_CANONICAL_HOST])
- AC_CHECK_FUNCS([getpagesize])
- if test $ac_cv_func_getpagesize = no; then
+ gl_CHECK_FUNC_GETPAGESIZE
+ if test $gl_cv_func_getpagesize = no; then
HAVE_GETPAGESIZE=0
AC_CHECK_HEADERS([OS.h])
if test $ac_cv_header_OS_h = yes; then
@@ -30,3 +30,20 @@ AC_DEFUN([gl_FUNC_GETPAGESIZE],
dnl mingw has getpagesize() in libgcc.a but doesn't declare it.
AC_CHECK_DECL([getpagesize], , [HAVE_DECL_GETPAGESIZE=0])
])
+
+dnl Tests whether the function getpagesize() exists.
+dnl Sets gl_cv_func_getpagesize.
+AC_DEFUN([gl_CHECK_FUNC_GETPAGESIZE],
+[
+ dnl We can't use AC_CHECK_FUNC here, because getpagesize() is defined as a
+ dnl static inline function when compiling for Android 4.4 or older.
+ AC_CACHE_CHECK([for getpagesize], [gl_cv_func_getpagesize],
+ [AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <unistd.h>]],
+ [[return getpagesize();]])
+ ],
+ [gl_cv_func_getpagesize=yes],
+ [gl_cv_func_getpagesize=no])
+ ])
+])
diff --git a/modules/getcwd b/modules/getcwd
index 77ad097..628c4d1 100644
--- a/modules/getcwd
+++ b/modules/getcwd
@@ -6,6 +6,7 @@ lib/getcwd.c
m4/getcwd-abort-bug.m4
m4/getcwd-path-max.m4
m4/getcwd.m4
+m4/getpagesize.m4
m4/pathmax.m4
Depends-on:
--
2.7.4