]> granicus.if.org Git - curl/commitdiff
configure/cmake: check for if_nametoindex()
authorDaniel Stenberg <daniel@haxx.se>
Tue, 21 May 2019 14:47:53 +0000 (16:47 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Wed, 22 May 2019 07:49:19 +0000 (09:49 +0200)
- adds the check to cmake

- fixes the configure check to work for cross-compiled windows builds

Closes #3917

CMakeLists.txt
configure.ac
lib/curl_config.h.cmake
m4/curl-functions.m4

index c8c77e1d88c2ab11650482a992b2d6374b55b574..388f790dbb3dbe3ba86e37ddfe756084f81985ff 100644 (file)
@@ -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)
index 3e45b51511729cad2e1de76926d09eb01df2fc7a..43f33d70ec409662dc92bd100bb8ea060ef72d13 100755 (executable)
@@ -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
index 9ac64f651bf4952be2b000c4513d2509bbdeeb05..afa59d53809f8273283eb763475d119f2d491667 100644 (file)
 /* 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
 
index b79e181987d5b5c7bd757408cb5e3b911a39928a..84f6ffcb2984d5724f2ece4039e52ce3eb3834b6 100644 (file)
@@ -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 <net/if.h>
+#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 <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_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