check for poll() as it is done for other functions

This commit is contained in:
Yang Tse 2009-02-13 05:49:58 +00:00
parent 9ddc7ad038
commit debe0b561d
2 changed files with 152 additions and 41 deletions

View File

@ -2033,6 +2033,7 @@ CURL_CHECK_FUNC_IOCTL
CURL_CHECK_FUNC_IOCTLSOCKET
CURL_CHECK_FUNC_IOCTLSOCKET_CAMEL
CURL_CHECK_FUNC_LOCALTIME_R
CURL_CHECK_FUNC_POLL
CURL_CHECK_FUNC_SETSOCKOPT
CURL_CHECK_FUNC_SIGACTION
CURL_CHECK_FUNC_SIGINTERRUPT
@ -2078,7 +2079,6 @@ AC_CHECK_FUNCS([basename \
inet_addr \
perror \
pipe \
poll \
setlocale \
setmode \
setrlimit \
@ -2135,45 +2135,6 @@ if test "$ipv6" = "yes"; then
CURL_CHECK_NI_WITHSCOPEID
fi
AC_MSG_CHECKING([if we are Mac OS X (to disable poll)])
disable_poll=no
case $host in
*-*-darwin*)
disable_poll="yes";
;;
*)
;;
esac
AC_MSG_RESULT($disable_poll)
if test "$disable_poll" = "no"; then
dnl poll() might be badly emulated, as in Mac OS X 10.3 (and other BSDs?) and
dnl to find out we make an extra check here!
if test "$ac_cv_func_poll" = "yes"; then
AC_MSG_CHECKING([if poll works with NULL inputs])
AC_RUN_IFELSE([
#ifdef HAVE_SYS_POLL_H
#include <sys/poll.h>
#elif defined(HAVE_POLL_H)
#include <poll.h>
#endif
int main(void)
{
/* make this return 0 == timeout since there's nothing to read from */
return poll((void *)0, 0, 10 /*ms*/);
}
],
AC_MSG_RESULT(yes)
AC_DEFINE(HAVE_POLL_FINE, 1, [If you have a fine poll]),
AC_MSG_RESULT(no),
AC_MSG_RESULT(cross-compiling assumes yes)
AC_DEFINE(HAVE_POLL_FINE, 1, [If you have a fine poll])
) dnl end of AC_RUN_IFELSE
fi dnl poll() was found
fi dnl poll()-check is not disabled
dnl ************************************************************
dnl enable non-blocking communications
dnl

View File

@ -22,7 +22,7 @@
#***************************************************************************
# File version for 'aclocal' use. Keep it a single number.
# serial 43
# serial 45
dnl CURL_INCLUDES_ARPA_INET
@ -124,6 +124,30 @@ curl_includes_netdb="\
])
dnl CURL_INCLUDES_POLL
dnl -------------------------------------------------
dnl Set up variable with list of headers that must be
dnl included when poll.h is to be included.
AC_DEFUN([CURL_INCLUDES_POLL], [
curl_includes_poll="\
/* includes start */
#ifdef HAVE_SYS_TYPES_H
# include <sys/types.h>
#endif
#ifdef HAVE_POLL_H
# include <poll.h>
#endif
#ifdef HAVE_SYS_POLL_H
# include <sys/poll.h>
#endif
/* includes end */"
AC_CHECK_HEADERS(
sys/types.h poll.h sys/poll.h,
[], [], [$curl_includes_poll])
])
dnl CURL_INCLUDES_SETJMP
dnl -------------------------------------------------
dnl Set up variable with list of headers that must be
@ -3108,6 +3132,132 @@ AC_DEFUN([CURL_CHECK_FUNC_LOCALTIME_R], [
])
dnl CURL_CHECK_FUNC_POLL
dnl -------------------------------------------------
dnl Verify if poll 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_poll, then
dnl HAVE_POLL will be defined.
AC_DEFUN([CURL_CHECK_FUNC_POLL], [
AC_REQUIRE([CURL_INCLUDES_STDLIB])dnl
AC_REQUIRE([CURL_INCLUDES_POLL])dnl
#
tst_links_poll="unknown"
tst_proto_poll="unknown"
tst_compi_poll="unknown"
tst_works_poll="unknown"
tst_allow_poll="unknown"
#
case $host_os in
darwin*)
dnl poll does not work on this platform
curl_disallow_poll="yes"
;;
esac
#
AC_MSG_CHECKING([if poll can be linked])
AC_LINK_IFELSE([
AC_LANG_PROGRAM([[
$curl_includes_poll
]],[[
if(0 != poll(0, 0, 0))
return 1;
]])
],[
AC_MSG_RESULT([yes])
tst_links_poll="yes"
],[
AC_MSG_RESULT([no])
tst_links_poll="no"
])
#
if test "$tst_links_poll" = "yes"; then
AC_MSG_CHECKING([if poll is prototyped])
AC_EGREP_CPP([poll],[
$curl_includes_poll
],[
AC_MSG_RESULT([yes])
tst_proto_poll="yes"
],[
AC_MSG_RESULT([no])
tst_proto_poll="no"
])
fi
#
if test "$tst_proto_poll" = "yes"; then
AC_MSG_CHECKING([if poll is compilable])
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([[
$curl_includes_poll
]],[[
if(0 != poll(0, 0, 0))
return 1;
]])
],[
AC_MSG_RESULT([yes])
tst_compi_poll="yes"
],[
AC_MSG_RESULT([no])
tst_compi_poll="no"
])
fi
#
dnl only do runtime verification when not cross-compiling
if test "x$cross_compiling" != "xyes" &&
test "$tst_compi_poll" = "yes"; then
AC_MSG_CHECKING([if poll seems to work])
AC_RUN_IFELSE([
AC_LANG_PROGRAM([[
$curl_includes_stdlib
$curl_includes_poll
]],[[
if(0 != poll(0, 0, 10))
exit(1); /* fail */
else
exit(0);
]])
],[
AC_MSG_RESULT([yes])
tst_works_poll="yes"
],[
AC_MSG_RESULT([no])
tst_works_poll="no"
])
fi
#
if test "$tst_compi_poll" = "yes" &&
test "$tst_works_poll" != "no"; then
AC_MSG_CHECKING([if poll usage allowed])
if test "x$curl_disallow_poll" != "xyes"; then
AC_MSG_RESULT([yes])
tst_allow_poll="yes"
else
AC_MSG_RESULT([no])
tst_allow_poll="no"
fi
fi
#
AC_MSG_CHECKING([if poll might be used])
if test "$tst_links_poll" = "yes" &&
test "$tst_proto_poll" = "yes" &&
test "$tst_compi_poll" = "yes" &&
test "$tst_allow_poll" = "yes" &&
test "$tst_works_poll" != "no"; then
AC_MSG_RESULT([yes])
AC_DEFINE_UNQUOTED(HAVE_POLL, 1,
[Define to 1 if you have a working poll function.])
AC_DEFINE_UNQUOTED(HAVE_POLL_FINE, 1,
[If you have a fine poll])
ac_cv_func_poll="yes"
else
AC_MSG_RESULT([no])
ac_cv_func_poll="no"
fi
])
dnl CURL_CHECK_FUNC_SETSOCKOPT
dnl -------------------------------------------------
dnl Verify if setsockopt is available, prototyped, and