GNU bug report logs -
#65319
compilation error on Android (Termux)
Previous Next
Reported by: Bruno Haible <bruno <at> clisp.org>
Date: Tue, 15 Aug 2023 20:29:02 UTC
Severity: normal
Done: Po Lu <luangruo <at> yahoo.com>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
[Message part 1 (text/plain, inline)]
Your bug report
#65319: compilation error on Android (Termux)
which was filed against the emacs package, has been closed.
The explanation is attached below, along with your original report.
If you require more details, please reply to 65319 <at> debbugs.gnu.org.
--
65319: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=65319
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
Bruno Haible <bruno <at> clisp.org> writes:
> Po Lu wrote:
>> Does Gnulib guarantee that the gl_CHECK_FUNCS_ANDROID stuff will
>> continue to exist in the future? If so, I'm inclined towards using
>> that.
>
> Yes. This macro is used over 100 times in Gnulib, has not seen any
> problem reports in the last 6 months, and is prefixed with 'gl_'
> not '_gl_'. Therefore it's very unlikely to go away.
>
> Note this macro's documentation:
>
> ...
> dnl Thus, the question "does the OS have the function func" has three possible
> dnl answers:
> dnl - yes, in all versions starting from the given API level,
> dnl - no, in no version,
> dnl - not in the given API level, but in a later version of Android.
> ...
> dnl This macro sets two variables:
> dnl - gl_cv_onwards_func_<func> to yes / no / "future OS version"
> dnl - ac_cv_func_<func> to yes / no / no
> dnl The first variable allows to distinguish all three cases.
> dnl The second variable is set, so that an invocation
> dnl gl_CHECK_FUNCS_ANDROID([func], [[#include <foo.h>]])
> dnl can be used as a drop-in replacement for
> dnl AC_CHECK_FUNCS([func]).
>
> Bruno
Thanks. I'll install the change you proposed in short order, and am
closing this bug.
[Message part 3 (message/rfc822, inline)]
Hi,
Compiling a current Emacs checkout from today on Android, inside the Termux
app, produces a compilation error:
../../src/dired.c:1140:16: warning: call to undeclared function 'getpwent'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
while ((pw = getpwent ()))
^
../../src/dired.c:1140:14: error: incompatible integer to pointer conversion assigning to 'struct passwd *' from 'int' [-Wint-conversion]
while ((pw = getpwent ()))
^ ~~~~~~~~~~~
The reason is that the default Android API level in Termux is 24,
the Android <pwd.h> declares getpwent() only starting with API level 26:
#if __ANDROID_API__ >= 26
struct passwd* getpwent(void) __INTRODUCED_IN(26);
...
yet HAVE_GETPWENT and HAVE_ENDPWENT come out as 1.
I can see two possible fixes:
a) use
gl_CHECK_FUNCS_ANDROID([getpwent], [[#include <pwd.h>]])
instead of
AC_CHECK_FUNCS(... getpwent ...)
in configure.ac,
b) add
AC_CHECK_DECLS([getpwent], [], [], [[
#include <sys/types.h>
#include <pwd.h>
]])
to configure.ac, and a '&& HAVE_DECL_GETPWENT' in
src/dired.c line 1137.
Bruno
This bug report was last modified 1 year and 336 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.