From 708784255e42f0946ab36d2a55e4c4ae99b086ec Mon Sep 17 00:00:00 2001 From: Xavier de Gaye Date: Wed, 21 Dec 2016 12:46:36 +0100 Subject: [PATCH] Issue #28538: Fix the compilation error that occurs because if_nameindex() is available on Android API level 24, but the if_nameindex structure is not defined. --- Misc/NEWS | 4 ++++ configure | 34 +++++++++++++++++++++++++++++++++- configure.ac | 14 +++++++++++++- 3 files changed, 50 insertions(+), 2 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS index f3d3fd19ec4..0f7b9f7a411 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -82,6 +82,10 @@ Tests Build ----- +- Issue #28538: Fix the compilation error that occurs because if_nameindex() is + available on Android API level 24, but the if_nameindex structure is not + defined. + - Issue #20211: Do not add the directory for installing C header files and the directory for installing object code libraries to the cross compilation search paths. Original patch by Thomas Petazzoni. diff --git a/configure b/configure index fd005f8d7a7..a997376b6be 100755 --- a/configure +++ b/configure @@ -11198,7 +11198,6 @@ for ac_func in alarm accept4 setitimer getitimer bind_textdomain_codeset chown \ futimens futimes gai_strerror getentropy \ getgrouplist getgroups getlogin getloadavg getpeername getpgid getpid \ getpriority getresuid getresgid getpwent getspnam getspent getsid getwd \ - if_nameindex \ initgroups kill killpg lchmod lchown lockf linkat lstat lutimes mmap \ memrchr mbrtowc mkdirat mkfifo \ mkfifoat mknod mknodat mktime mremap nice openat pathconf pause pipe2 plock poll \ @@ -12642,6 +12641,39 @@ else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +# On Android API level 24 if_nameindex() is available, but the if_nameindex +# structure is not defined. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for if_nameindex" >&5 +$as_echo_n "checking for if_nameindex... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef HAVE_NET_IF_H +# include +#endif + +int +main () +{ +struct if_nameindex *ni = if_nameindex(); int x = ni[0].if_index; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +$as_echo "#define HAVE_IF_NAMEINDEX 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext diff --git a/configure.ac b/configure.ac index 9013c0eb3ae..61fad0098cc 100644 --- a/configure.ac +++ b/configure.ac @@ -3384,7 +3384,6 @@ AC_CHECK_FUNCS(alarm accept4 setitimer getitimer bind_textdomain_codeset chown \ futimens futimes gai_strerror getentropy \ getgrouplist getgroups getlogin getloadavg getpeername getpgid getpid \ getpriority getresuid getresgid getpwent getspnam getspent getsid getwd \ - if_nameindex \ initgroups kill killpg lchmod lchown lockf linkat lstat lutimes mmap \ memrchr mbrtowc mkdirat mkfifo \ mkfifoat mknod mknodat mktime mremap nice openat pathconf pause pipe2 plock poll \ @@ -3737,6 +3736,19 @@ AC_LINK_IFELSE([AC_LANG_PROGRAM([[ AC_MSG_RESULT(no) ]) +# On Android API level 24 if_nameindex() is available, but the if_nameindex +# structure is not defined. +AC_MSG_CHECKING(for if_nameindex) +AC_LINK_IFELSE([AC_LANG_PROGRAM([[ +#ifdef HAVE_NET_IF_H +# include +#endif +]], [[struct if_nameindex *ni = if_nameindex(); int x = ni[0].if_index;]])], + [AC_DEFINE(HAVE_IF_NAMEINDEX, 1, Define to 1 if you have the 'if_nameindex' function.) + AC_MSG_RESULT(yes)], + [AC_MSG_RESULT(no) +]) + # On OSF/1 V5.1, getaddrinfo is available, but a define # for [no]getaddrinfo in netdb.h. AC_MSG_CHECKING(for getaddrinfo)