Unverified Commit c9c4f7b5 authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

configure/cmake: check for if_nametoindex()

- adds the check to cmake

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

Closes #3917
parent 12e564ca
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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)
+1 −0
Original line number Diff line number Diff line
@@ -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
+3 −0
Original line number Diff line number Diff line
@@ -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

+113 −0
Original line number Diff line number Diff line
@@ -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