summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2019-05-21 16:47:53 +0200
committerDaniel Stenberg <daniel@haxx.se>2019-05-21 16:47:53 +0200
commit270f1492e9288fbda7a256639783c14ea7e26d92 (patch)
tree9637afd1cbc610b6d4c7143230eab9ca4ecf9fc8
parent9406d93e77e7923e2788e43df50cf3a577f1c42b (diff)
downloadcurl-270f1492e9288fbda7a256639783c14ea7e26d92.tar.gz
configure/cmake: check for if_nametoindex()
- adds the check to cmake - fixes the configure check to work for cross-compiled windows builds
-rw-r--r--CMakeLists.txt1
-rwxr-xr-xconfigure.ac1
-rw-r--r--lib/curl_config.h.cmake3
-rw-r--r--m4/curl-functions.m499
4 files changed, 104 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index c8c77e1d8..388f790db 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -887,6 +887,7 @@ check_symbol_exists(ftruncate "${CURL_INCLUDES}" HAVE_FTRUNCATE)
check_symbol_exists(getprotobyname "${CURL_INCLUDES}" HAVE_GETPROTOBYNAME)
check_symbol_exists(getpeername "${CURL_INCLUDES}" HAVE_GETPEERNAME)
check_symbol_exists(getsockname "${CURL_INCLUDES}" HAVE_GETSOCKNAME)
+check_symbol_exists(if_nametoindex "${CURL_INCLUDES}" HAVE_IF_NAMETOINDEX)
check_symbol_exists(getrlimit "${CURL_INCLUDES}" HAVE_GETRLIMIT)
check_symbol_exists(setlocale "${CURL_INCLUDES}" HAVE_SETLOCALE)
check_symbol_exists(setmode "${CURL_INCLUDES}" HAVE_SETMODE)
diff --git a/configure.ac b/configure.ac
index 3e45b5151..43f33d70e 100755
--- a/configure.ac
+++ b/configure.ac
@@ -3721,6 +3721,7 @@ CURL_CHECK_FUNC_GETHOSTBYNAME_R
CURL_CHECK_FUNC_GETHOSTNAME
CURL_CHECK_FUNC_GETPEERNAME
CURL_CHECK_FUNC_GETSOCKNAME
+CURL_CHECK_FUNC_IF_NAMETOINDEX
CURL_CHECK_FUNC_GETIFADDRS
CURL_CHECK_FUNC_GETSERVBYPORT_R
CURL_CHECK_FUNC_GMTIME_R
diff --git a/lib/curl_config.h.cmake b/lib/curl_config.h.cmake
index 9ac64f651..afa59d538 100644
--- a/lib/curl_config.h.cmake
+++ b/lib/curl_config.h.cmake
@@ -241,6 +241,9 @@
/* Define to 1 if you have the `getsockname' function. */
#cmakedefine HAVE_GETSOCKNAME 1
+/* Define to 1 if you have the `if_nametoindex' function. */
+#cmakedefine HAVE_IF_NAMETOINDEX 1
+
/* Define to 1 if you have the `getpwuid' function. */
#cmakedefine HAVE_GETPWUID 1
diff --git a/m4/curl-functions.m4 b/m4/curl-functions.m4
index b79e18198..adbc970f3 100644
--- a/m4/curl-functions.m4
+++ b/m4/curl-functions.m4
@@ -3108,6 +3108,105 @@ 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_UNISTD])dnl
+ AC_REQUIRE([CURL_PREPROCESS_CALLCONV])dnl
+ AC_REQUIRE([CURL_INCLUDES_BSDSOCKET])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 <net/if.h>
+ ]],[[
+ 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_bsdsocket
+ #include <net/if.h>
+ ],[
+ 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_bsdsocket
+ #include <net/if.h>
+ ]],[[
+ 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