aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYang Tse <yangsita@gmail.com>2008-09-19 18:39:24 +0000
committerYang Tse <yangsita@gmail.com>2008-09-19 18:39:24 +0000
commit4e4f6c1ec83a4d0d9189ce51c5bf22cf24efd687 (patch)
tree21047fd0beb517b3e88323fa204e21b36f03a26f
parent459e67b2a7290bc57dec773756d24d4503ac6d48 (diff)
configure script now checks availability of the alarm() function
-rw-r--r--CHANGES3
-rw-r--r--configure.ac1
-rw-r--r--lib/setup.h105
-rw-r--r--m4/curl-functions.m485
4 files changed, 136 insertions, 58 deletions
diff --git a/CHANGES b/CHANGES
index 7e8a5ac7e..4eb7cd8c3 100644
--- a/CHANGES
+++ b/CHANGES
@@ -6,6 +6,9 @@
Changelog
+Yang Tse (19 Sep 2008)
+- configure script now checks availability of the alarm() function.
+
Daniel Fandrich (18 Sep 2008)
- Don't bother to install a SIGALRM handler unless alarm() is available.
Also, leave the existing SIGALRM handler alone if the timeout is too small
diff --git a/configure.ac b/configure.ac
index c39fbd9d6..2a1bce95d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2045,6 +2045,7 @@ CURL_CHECK_FUNC_RECVFROM
CURL_CHECK_FUNC_SEND
CURL_CHECK_MSG_NOSIGNAL
+CURL_CHECK_FUNC_ALARM
CURL_CHECK_FUNC_FDOPEN
CURL_CHECK_FUNC_FTRUNCATE
CURL_CHECK_FUNC_GETHOSTBYADDR_R
diff --git a/lib/setup.h b/lib/setup.h
index 59da0e0d3..df253662f 100644
--- a/lib/setup.h
+++ b/lib/setup.h
@@ -338,76 +338,66 @@
#ifdef WIN32
-#if !defined(__CYGWIN__)
-#define sclose(x) closesocket(x)
-
-#undef HAVE_ALARM
-#else
- /* gcc-for-win is still good :) */
-#define sclose(x) close(x)
-#define HAVE_ALARM
-#endif /* !GNU or mingw */
+# if !defined(__CYGWIN__)
+# define sclose(x) closesocket(x)
+# else
+# define sclose(x) close(x)
+# endif
-#define DIR_CHAR "\\"
-#define DOT_CHAR "_"
+# define DIR_CHAR "\\"
+# define DOT_CHAR "_"
#else /* WIN32 */
-#ifdef MSDOS /* Watt-32 */
-#include <sys/ioctl.h>
-#define sclose(x) close_s(x)
-#define select(n,r,w,x,t) select_s(n,r,w,x,t)
-#define ioctl(x,y,z) ioctlsocket(x,y,(char *)(z))
-#define IOCTL_3_ARGS
-#include <tcp.h>
-#ifdef word
-#undef word
-#endif
-#ifdef byte
-#undef byte
-#endif
-
-#else /* MSDOS */
+# ifdef MSDOS /* Watt-32 */
-#ifdef __BEOS__
-#define sclose(x) closesocket(x)
-#else /* __BEOS__ */
-#define sclose(x) close(x)
-#endif /* __BEOS__ */
+# include <sys/ioctl.h>
+# define sclose(x) close_s(x)
+# define select(n,r,w,x,t) select_s(n,r,w,x,t)
+# define ioctl(x,y,z) ioctlsocket(x,y,(char *)(z))
+# define IOCTL_3_ARGS
+# include <tcp.h>
+# ifdef word
+# undef word
+# endif
+# ifdef byte
+# undef byte
+# endif
-#define HAVE_ALARM
+# else /* MSDOS */
-#endif /* MSDOS */
+# ifdef __BEOS__
+# define sclose(x) closesocket(x)
+# else /* __BEOS__ */
+# define sclose(x) close(x)
+# endif /* __BEOS__ */
-#ifdef _AMIGASF
-#undef HAVE_ALARM
-#undef sclose
-#define sclose(x) CloseSocket(x)
-#endif
+# endif /* MSDOS */
-#ifdef __minix
-/* Minix 3 versions up to at least 3.1.3 are missing these prototypes */
-extern char * strtok_r(char *s, const char *delim, char **last);
-extern struct tm * gmtime_r(const time_t * const timep, struct tm *tmp);
-#endif
+# ifdef _AMIGASF
+# undef sclose
+# define sclose(x) CloseSocket(x)
+# endif
-#ifdef __SYMBIAN32__
-#undef HAVE_ALARM
-#endif
+# ifdef __minix
+ /* Minix 3 versions up to at least 3.1.3 are missing these prototypes */
+ extern char * strtok_r(char *s, const char *delim, char **last);
+ extern struct tm * gmtime_r(const time_t * const timep, struct tm *tmp);
+# endif
-#define DIR_CHAR "/"
-#ifndef DOT_CHAR
-#define DOT_CHAR "."
-#endif
+# define DIR_CHAR "/"
+# ifndef DOT_CHAR
+# define DOT_CHAR "."
+# endif
-#ifdef MSDOS
-#undef DOT_CHAR
-#define DOT_CHAR "_"
-#endif
+# ifdef MSDOS
+# undef DOT_CHAR
+# define DOT_CHAR "_"
+# endif
-#ifndef fileno /* sunos 4 have this as a macro! */
-int fileno( FILE *stream);
-#endif
+# ifndef fileno /* sunos 4 have this as a macro! */
+ int fileno( FILE *stream);
+# endif
#endif /* WIN32 */
@@ -450,7 +440,6 @@ int netware_init(void);
#include <sys/bsdskt.h>
#include <sys/timeval.h>
#endif
-#undef HAVE_ALARM
#endif
#if defined(HAVE_LIBIDN) && defined(HAVE_TLD_H)
diff --git a/m4/curl-functions.m4 b/m4/curl-functions.m4
index 2b11d720e..bb8eef542 100644
--- a/m4/curl-functions.m4
+++ b/m4/curl-functions.m4
@@ -204,6 +204,91 @@ curl_includes_unistd="\
])
+dnl CURL_CHECK_FUNC_ALARM
+dnl -------------------------------------------------
+dnl Verify if alarm 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_alarm, then
+dnl HAVE_ALARM will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_ALARM], [
+ AC_REQUIRE([CURL_INCLUDES_UNISTD])dnl
+ #
+ tst_links_alarm="unknown"
+ tst_proto_alarm="unknown"
+ tst_compi_alarm="unknown"
+ tst_allow_alarm="unknown"
+ #
+ AC_MSG_CHECKING([if alarm can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_FUNC_LINK_TRY([alarm])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_alarm="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_alarm="no"
+ ])
+ #
+ if test "$tst_links_alarm" = "yes"; then
+ AC_MSG_CHECKING([if alarm is prototyped])
+ AC_EGREP_CPP([alarm],[
+ $curl_includes_unistd
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_alarm="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_alarm="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_alarm" = "yes"; then
+ AC_MSG_CHECKING([if alarm is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_unistd
+ ]],[[
+ if(0 != alarm(0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_alarm="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_alarm="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_alarm" = "yes"; then
+ AC_MSG_CHECKING([if alarm usage allowed])
+ if test "x$curl_disallow_alarm" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_alarm="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_alarm="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if alarm might be used])
+ if test "$tst_links_alarm" = "yes" &&
+ test "$tst_proto_alarm" = "yes" &&
+ test "$tst_compi_alarm" = "yes" &&
+ test "$tst_allow_alarm" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_ALARM, 1,
+ [Define to 1 if you have the alarm function.])
+ ac_cv_func_alarm="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_alarm="no"
+ fi
+])
+
+
dnl CURL_CHECK_FUNC_FDOPEN
dnl -------------------------------------------------
dnl Verify if fdopen is available, prototyped, and