diff options
author | Daniel Stenberg <daniel@haxx.se> | 2019-05-21 16:47:53 +0200 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2019-05-21 16:47:53 +0200 |
commit | 270f1492e9288fbda7a256639783c14ea7e26d92 (patch) | |
tree | 9637afd1cbc610b6d4c7143230eab9ca4ecf9fc8 | |
parent | 9406d93e77e7923e2788e43df50cf3a577f1c42b (diff) | |
download | curl-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.txt | 1 | ||||
-rwxr-xr-x | configure.ac | 1 | ||||
-rw-r--r-- | lib/curl_config.h.cmake | 3 | ||||
-rw-r--r-- | m4/curl-functions.m4 | 99 |
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 |