From c9c4f7b547190709622fb012c446d060710a7d9f Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Tue, 21 May 2019 16:47:53 +0200 Subject: configure/cmake: check for if_nametoindex() - adds the check to cmake - fixes the configure check to work for cross-compiled windows builds Closes #3917 --- m4/curl-functions.m4 | 113 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) (limited to 'm4') diff --git a/m4/curl-functions.m4 b/m4/curl-functions.m4 index b79e18198..84f6ffcb2 100644 --- a/m4/curl-functions.m4 +++ b/m4/curl-functions.m4 @@ -563,6 +563,23 @@ curl_includes_bsdsocket="\ [], [], [ $curl_includes_bsdsocket]) ]) +dnl CURL_INCLUDES_NETIF +dnl ------------------------------------------------- +dnl Set up variable with list of headers that must be +dnl included when net/if.h is to be included. + +AC_DEFUN([CURL_INCLUDES_NETIF], [ +curl_includes_netif="\ +/* includes start */ +#ifdef HAVE_NET_IF_H +# include +#endif +/* includes end */" + AC_CHECK_HEADERS( + net/if.h, + [], [], [$curl_includes_netif]) +]) + dnl CURL_PREPROCESS_CALLCONV dnl ------------------------------------------------- @@ -3108,6 +3125,102 @@ AC_DEFUN([CURL_CHECK_FUNC_GETSOCKNAME], [ fi ]) +dnl CURL_CHECK_FUNC_IF_NAMETOINDEX +dnl ------------------------------------------------- +dnl Verify if if_nametoindex is available, prototyped, and +dnl can be compiled. If all of these are true, and +dnl usage has not been previously disallowed with +dnl shell variable curl_disallow_if_nametoindex, then +dnl HAVE_IF_NAMETOINDEX will be defined. + +AC_DEFUN([CURL_CHECK_FUNC_IF_NAMETOINDEX], [ + AC_REQUIRE([CURL_INCLUDES_WINSOCK2])dnl + AC_REQUIRE([CURL_INCLUDES_NETIF])dnl + AC_REQUIRE([CURL_PREPROCESS_CALLCONV])dnl + # + tst_links_if_nametoindex="unknown" + tst_proto_if_nametoindex="unknown" + tst_compi_if_nametoindex="unknown" + tst_allow_if_nametoindex="unknown" + # + AC_MSG_CHECKING([if if_nametoindex can be linked]) + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ + $curl_includes_winsock2 + $curl_includes_bsdsocket + #include + ]],[[ + if(0 != if_nametoindex("")) + return 1; + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_links_if_nametoindex="yes" + ],[ + AC_MSG_RESULT([no]) + tst_links_if_nametoindex="no" + ]) + # + if test "$tst_links_if_nametoindex" = "yes"; then + AC_MSG_CHECKING([if if_nametoindex is prototyped]) + AC_EGREP_CPP([if_nametoindex],[ + $curl_includes_winsock2 + $curl_includes_netif + ],[ + AC_MSG_RESULT([yes]) + tst_proto_if_nametoindex="yes" + ],[ + AC_MSG_RESULT([no]) + tst_proto_if_nametoindex="no" + ]) + fi + # + if test "$tst_proto_if_nametoindex" = "yes"; then + AC_MSG_CHECKING([if if_nametoindex is compilable]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + $curl_includes_winsock2 + $curl_includes_netif + ]],[[ + if(0 != if_nametoindex("")) + return 1; + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_compi_if_nametoindex="yes" + ],[ + AC_MSG_RESULT([no]) + tst_compi_if_nametoindex="no" + ]) + fi + # + if test "$tst_compi_if_nametoindex" = "yes"; then + AC_MSG_CHECKING([if if_nametoindex usage allowed]) + if test "x$curl_disallow_if_nametoindex" != "xyes"; then + AC_MSG_RESULT([yes]) + tst_allow_if_nametoindex="yes" + else + AC_MSG_RESULT([no]) + tst_allow_if_nametoindex="no" + fi + fi + # + AC_MSG_CHECKING([if if_nametoindex might be used]) + if test "$tst_links_if_nametoindex" = "yes" && + test "$tst_proto_if_nametoindex" = "yes" && + test "$tst_compi_if_nametoindex" = "yes" && + test "$tst_allow_if_nametoindex" = "yes"; then + AC_MSG_RESULT([yes]) + AC_DEFINE_UNQUOTED(HAVE_IF_NAMETOINDEX, 1, + [Define to 1 if you have the if_nametoindex function.]) + curl_cv_func_if_nametoindex="yes" + else + AC_MSG_RESULT([no]) + curl_cv_func_if_nametoindex="no" + fi +]) + + dnl CURL_CHECK_FUNC_GETIFADDRS dnl ------------------------------------------------- dnl Verify if getifaddrs is available, prototyped, can -- cgit v1.2.3