check for getifaddrs and freeifaddrs as it is done for other functions

This commit is contained in:
Yang Tse 2008-11-08 03:27:15 +00:00
parent 6354cbf9d6
commit 9717ccb786
2 changed files with 228 additions and 2 deletions

View File

@ -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 \

View File

@ -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,