diff options
| author | Yang Tse <yangsita@gmail.com> | 2008-09-19 18:39:24 +0000 | 
|---|---|---|
| committer | Yang Tse <yangsita@gmail.com> | 2008-09-19 18:39:24 +0000 | 
| commit | 4e4f6c1ec83a4d0d9189ce51c5bf22cf24efd687 (patch) | |
| tree | 21047fd0beb517b3e88323fa204e21b36f03a26f | |
| parent | 459e67b2a7290bc57dec773756d24d4503ac6d48 (diff) | |
configure script now checks availability of the alarm() function
| -rw-r--r-- | CHANGES | 3 | ||||
| -rw-r--r-- | configure.ac | 1 | ||||
| -rw-r--r-- | lib/setup.h | 105 | ||||
| -rw-r--r-- | m4/curl-functions.m4 | 85 | 
4 files changed, 136 insertions, 58 deletions
@@ -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  | 
