diff options
-rw-r--r-- | configure.ac | 41 | ||||
-rw-r--r-- | m4/curl-functions.m4 | 152 |
2 files changed, 152 insertions, 41 deletions
diff --git a/configure.ac b/configure.ac index 4a383ffea..f81799121 100644 --- a/configure.ac +++ b/configure.ac @@ -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 diff --git a/m4/curl-functions.m4 b/m4/curl-functions.m4 index 4935879bc..b0489b8a4 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 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 |