aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--configure.ac3
-rw-r--r--m4/curl-functions.m4227
2 files changed, 228 insertions, 2 deletions
diff --git a/configure.ac b/configure.ac
index 56251b0eb..67a4c3a64 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2016,11 +2016,13 @@ CURL_CHECK_MSG_NOSIGNAL
CURL_CHECK_FUNC_ALARM
CURL_CHECK_FUNC_FDOPEN
CURL_CHECK_FUNC_FREEADDRINFO
+CURL_CHECK_FUNC_FREEIFADDRS
CURL_CHECK_FUNC_FTRUNCATE
CURL_CHECK_FUNC_GETADDRINFO
CURL_CHECK_FUNC_GETHOSTBYADDR_R
CURL_CHECK_FUNC_GETHOSTBYNAME_R
CURL_CHECK_FUNC_GETHOSTNAME
+CURL_CHECK_FUNC_GETIFADDRS
CURL_CHECK_FUNC_GETSERVBYPORT_R
CURL_CHECK_FUNC_GMTIME_R
CURL_CHECK_FUNC_INET_NTOA_R
@@ -2063,7 +2065,6 @@ AC_CHECK_FUNCS([basename \
fork \
geteuid \
gethostbyaddr \
- getifaddrs \
getpass_r \
getppid \
getprotobyname \
diff --git a/m4/curl-functions.m4 b/m4/curl-functions.m4
index 619b9e11f..9b0d08018 100644
--- a/m4/curl-functions.m4
+++ b/m4/curl-functions.m4
@@ -22,7 +22,7 @@
#***************************************************************************
# File version for 'aclocal' use. Keep it a single number.
-# serial 33
+# serial 34
dnl CURL_INCLUDES_ARPA_INET
@@ -52,6 +52,33 @@ curl_includes_arpa_inet="\
])
+dnl CURL_INCLUDES_IFADDRS
+dnl -------------------------------------------------
+dnl Set up variable with list of headers that must be
+dnl included when ifaddrs.h is to be included.
+
+AC_DEFUN([CURL_INCLUDES_IFADDRS], [
+curl_includes_ifaddrs="\
+/* includes start */
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+# include <sys/socket.h>
+#endif
+#ifdef HAVE_NETINET_IN_H
+# include <netinet/in.h>
+#endif
+#ifdef HAVE_IFADDRS_H
+# include <ifaddrs.h>
+#endif
+/* includes end */"
+ AC_CHECK_HEADERS(
+ sys/types.h sys/socket.h netinet/in.h ifaddrs.h,
+ [], [], [$curl_includes_ifaddrs])
+])
+
+
dnl CURL_INCLUDES_NETDB
dnl -------------------------------------------------
dnl Set up variable with list of headers that must be
@@ -594,6 +621,90 @@ AC_DEFUN([CURL_CHECK_FUNC_FREEADDRINFO], [
])
+dnl CURL_CHECK_FUNC_FREEIFADDRS
+dnl -------------------------------------------------
+dnl Verify if freeifaddrs 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_freeifaddrs, then
+dnl HAVE_FREEIFADDRS will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_FREEIFADDRS], [
+ AC_REQUIRE([CURL_INCLUDES_IFADDRS])dnl
+ #
+ tst_links_freeifaddrs="unknown"
+ tst_proto_freeifaddrs="unknown"
+ tst_compi_freeifaddrs="unknown"
+ tst_allow_freeifaddrs="unknown"
+ #
+ AC_MSG_CHECKING([if freeifaddrs can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_FUNC_LINK_TRY([freeifaddrs])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_freeifaddrs="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_freeifaddrs="no"
+ ])
+ #
+ if test "$tst_links_freeifaddrs" = "yes"; then
+ AC_MSG_CHECKING([if freeifaddrs is prototyped])
+ AC_EGREP_CPP([freeifaddrs],[
+ $curl_includes_ifaddrs
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_freeifaddrs="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_freeifaddrs="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_freeifaddrs" = "yes"; then
+ AC_MSG_CHECKING([if freeifaddrs is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_ifaddrs
+ ]],[[
+ freeifaddrs(0);
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_freeifaddrs="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_freeifaddrs="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_freeifaddrs" = "yes"; then
+ AC_MSG_CHECKING([if freeifaddrs usage allowed])
+ if test "x$curl_disallow_freeifaddrs" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_freeifaddrs="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_freeifaddrs="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if freeifaddrs might be used])
+ if test "$tst_links_freeifaddrs" = "yes" &&
+ test "$tst_proto_freeifaddrs" = "yes" &&
+ test "$tst_compi_freeifaddrs" = "yes" &&
+ test "$tst_allow_freeifaddrs" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_FREEIFADDRS, 1,
+ [Define to 1 if you have the freeifaddrs function.])
+ ac_cv_func_freeifaddrs="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_freeifaddrs="no"
+ fi
+])
+
+
dnl CURL_CHECK_FUNC_FTRUNCATE
dnl -------------------------------------------------
dnl Verify if ftruncate is available, prototyped, and
@@ -1193,6 +1304,120 @@ AC_DEFUN([CURL_CHECK_FUNC_GETHOSTNAME], [
])
+dnl CURL_CHECK_FUNC_GETIFADDRS
+dnl -------------------------------------------------
+dnl Verify if getifaddrs is available, prototyped, can
+dnl be compiled and seems to work. If all of these are
+dnl true, and usage has not been previously disallowed
+dnl with shell variable curl_disallow_getifaddrs, then
+dnl HAVE_GETIFADDRS will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_GETIFADDRS], [
+ AC_REQUIRE([CURL_INCLUDES_IFADDRS])dnl
+ #
+ tst_links_getifaddrs="unknown"
+ tst_proto_getifaddrs="unknown"
+ tst_compi_getifaddrs="unknown"
+ tst_works_getifaddrs="unknown"
+ tst_allow_getifaddrs="unknown"
+ #
+ AC_MSG_CHECKING([if getifaddrs can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_FUNC_LINK_TRY([getifaddrs])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_getifaddrs="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_getifaddrs="no"
+ ])
+ #
+ if test "$tst_links_getifaddrs" = "yes"; then
+ AC_MSG_CHECKING([if getifaddrs is prototyped])
+ AC_EGREP_CPP([getifaddrs],[
+ $curl_includes_ifaddrs
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_getifaddrs="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_getifaddrs="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_getifaddrs" = "yes"; then
+ AC_MSG_CHECKING([if getifaddrs is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_ifaddrs
+ ]],[[
+ if(0 != getifaddrs(0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_getifaddrs="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_getifaddrs="no"
+ ])
+ fi
+ #
+ dnl only do runtime verification when not cross-compiling
+ if test "x$cross_compiling" != "xyes" &&
+ test "$tst_compi_getifaddrs" = "yes"; then
+ AC_MSG_CHECKING([if getifaddrs seems to work])
+ AC_RUN_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_ifaddrs
+ ]],[[
+ struct ifaddrs *ifa = 0;
+ int error;
+
+ error = getifaddrs(&ifa);
+ if(error || !ifa)
+ exit(1); /* fail */
+ else
+ exit(0);
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_works_getifaddrs="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_works_getifaddrs="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_getifaddrs" = "yes" &&
+ test "$tst_works_getifaddrs" != "no"; then
+ AC_MSG_CHECKING([if getifaddrs usage allowed])
+ if test "x$curl_disallow_getifaddrs" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_getifaddrs="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_getifaddrs="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if getifaddrs might be used])
+ if test "$tst_links_getifaddrs" = "yes" &&
+ test "$tst_proto_getifaddrs" = "yes" &&
+ test "$tst_compi_getifaddrs" = "yes" &&
+ test "$tst_allow_getifaddrs" = "yes" &&
+ test "$tst_works_getifaddrs" != "no"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_GETIFADDRS, 1,
+ [Define to 1 if you have a working getifaddrs function.])
+ ac_cv_func_getifaddrs="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_getifaddrs="no"
+ fi
+])
+
+
dnl CURL_CHECK_FUNC_GETSERVBYPORT_R
dnl -------------------------------------------------
dnl Verify if getservbyport_r is available, prototyped,