]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
improve detection of sigaction() and strtok_r()
authorYang Tse <yangsita@gmail.com>
Wed, 10 Sep 2008 19:03:00 +0000 (19:03 +0000)
committerYang Tse <yangsita@gmail.com>
Wed, 10 Sep 2008 19:03:00 +0000 (19:03 +0000)
configure.ac
m4/curl-functions.m4

index 89ea54afb5f5633efed1bfc83f806b79e1ac9d12..1729dc5f3f8c025d3201a6d2d4632bd7a48349d2 100644 (file)
@@ -2035,6 +2035,8 @@ CURL_CHECK_FUNC_SEND
 CURL_CHECK_MSG_NOSIGNAL
 
 CURL_CHECK_FUNC_GMTIME_R
+CURL_CHECK_FUNC_SIGACTION
+CURL_CHECK_FUNC_STRTOK_R
 CURL_CHECK_FUNC_STRTOLL
 
 dnl Checks for library functions.
@@ -2070,7 +2072,6 @@ AC_CHECK_FUNCS([basename \
   setlocale \
   setmode \
   setrlimit \
-  sigaction \
   siginterrupt \
   signal \
   sigsetjmp \
@@ -2082,7 +2083,6 @@ AC_CHECK_FUNCS([basename \
   stricmp \
   strlcat \
   strstr \
-  strtok_r \
   uname \
   utime
 ],[
index abe52a0cdf3c74c45982e752c4d4d51173533ebd..f5996398381bdd7eb4551e96f5a665abd190f540 100644 (file)
 # serial 1
 
 
+dnl CURL_INCLUDES_SIGNAL
+dnl -------------------------------------------------
+dnl Set up variable with list of headers that must be
+dnl included when signal.h is to be included.
+
+AC_DEFUN([CURL_INCLUDES_SIGNAL], [
+curl_includes_signal="\
+/* includes start */
+#ifdef HAVE_SYS_TYPES_H
+#  include <sys/types.h>
+#endif
+#ifdef HAVE_SIGNAL_H
+#  include <signal.h>
+#endif
+/* includes end */"
+  AC_CHECK_HEADERS(
+    sys/types.h signal.h,
+    [], [], [$curl_includes_signal])
+])
+
+
 dnl CURL_INCLUDES_STDLIB
 dnl -------------------------------------------------
 dnl Set up variable with list of headers that must be
@@ -46,6 +67,27 @@ curl_includes_stdlib="\
 ])
 
 
+dnl CURL_INCLUDES_STRING
+dnl -------------------------------------------------
+dnl Set up variable with list of headers that must be
+dnl included when string.h is to be included.
+
+AC_DEFUN([CURL_INCLUDES_STRING], [
+curl_includes_string="\
+/* includes start */
+#ifdef HAVE_SYS_TYPES_H
+#  include <sys/types.h>
+#endif
+#ifdef HAVE_STRING_H
+#  include <string.h>
+#endif
+/* includes end */"
+  AC_CHECK_HEADERS(
+    sys/types.h string.h,
+    [], [], [$curl_includes_string])
+])
+
+
 dnl CURL_INCLUDES_TIME
 dnl -------------------------------------------------
 dnl Set up variable with list of headers that must be
@@ -122,7 +164,8 @@ AC_DEFUN([CURL_CHECK_FUNC_GMTIME_R], [
       AC_LANG_PROGRAM([[
         $curl_includes_time
       ]],[[
-        gmtime_r(0, 0);
+        if(0 != gmtime_r(0, 0))
+          return 1;
       ]])
     ],[
       AC_MSG_RESULT([yes])
@@ -187,6 +230,176 @@ AC_DEFUN([CURL_CHECK_FUNC_GMTIME_R], [
 ])
 
 
+dnl CURL_CHECK_FUNC_SIGACTION
+dnl -------------------------------------------------
+dnl Verify if sigaction 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_sigaction, then
+dnl HAVE_SIGACTION will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_SIGACTION], [
+  AC_REQUIRE([CURL_INCLUDES_SIGNAL])dnl
+  #
+  tst_links_sigaction="unknown"
+  tst_proto_sigaction="unknown"
+  tst_compi_sigaction="unknown"
+  tst_allow_sigaction="unknown"
+  #
+  AC_MSG_CHECKING([if sigaction can be linked])
+  AC_LINK_IFELSE([
+    AC_LANG_FUNC_LINK_TRY([sigaction])
+  ],[
+    AC_MSG_RESULT([yes])
+    tst_links_sigaction="yes"
+  ],[
+    AC_MSG_RESULT([no])
+    tst_links_sigaction="no"
+  ])
+  #
+  if test "$tst_links_sigaction" = "yes"; then
+    AC_MSG_CHECKING([if sigaction is prototyped])
+    AC_EGREP_CPP([sigaction],[
+      $curl_includes_signal
+    ],[
+      AC_MSG_RESULT([yes])
+      tst_proto_sigaction="yes"
+    ],[
+      AC_MSG_RESULT([no])
+      tst_proto_sigaction="no"
+    ])
+  fi
+  #
+  if test "$tst_proto_sigaction" = "yes"; then
+    AC_MSG_CHECKING([if sigaction is compilable])
+    AC_COMPILE_IFELSE([
+      AC_LANG_PROGRAM([[
+        $curl_includes_signal
+      ]],[[
+        if(0 != sigaction(0, 0, 0))
+          return 1;
+      ]])
+    ],[
+      AC_MSG_RESULT([yes])
+      tst_compi_sigaction="yes"
+    ],[
+      AC_MSG_RESULT([no])
+      tst_compi_sigaction="no"
+    ])
+  fi
+  #
+  if test "$tst_compi_sigaction" = "yes"; then
+    AC_MSG_CHECKING([if sigaction usage allowed])
+    if test "x$curl_disallow_sigaction" != "xyes"; then
+      AC_MSG_RESULT([yes])
+      tst_allow_sigaction="yes"
+    else
+      AC_MSG_RESULT([no])
+      tst_allow_sigaction="no"
+    fi
+  fi
+  #
+  AC_MSG_CHECKING([if sigaction might be used])
+  if test "$tst_links_sigaction" = "yes" &&
+     test "$tst_proto_sigaction" = "yes" &&
+     test "$tst_compi_sigaction" = "yes" &&
+     test "$tst_allow_sigaction" = "yes"; then
+    AC_MSG_RESULT([yes])
+    AC_DEFINE_UNQUOTED(HAVE_SIGACTION, 1,
+      [Define to 1 if you have the sigaction function.])
+    ac_cv_func_sigaction="yes"
+  else
+    AC_MSG_RESULT([no])
+    ac_cv_func_sigaction="no"
+  fi
+])
+
+
+dnl CURL_CHECK_FUNC_STRTOK_R
+dnl -------------------------------------------------
+dnl Verify if strtok_r 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_strtok_r, then
+dnl HAVE_STRTOK_R will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_STRTOK_R], [
+  AC_REQUIRE([CURL_INCLUDES_STRING])dnl
+  #
+  tst_links_strtok_r="unknown"
+  tst_proto_strtok_r="unknown"
+  tst_compi_strtok_r="unknown"
+  tst_allow_strtok_r="unknown"
+  #
+  AC_MSG_CHECKING([if strtok_r can be linked])
+  AC_LINK_IFELSE([
+    AC_LANG_FUNC_LINK_TRY([strtok_r])
+  ],[
+    AC_MSG_RESULT([yes])
+    tst_links_strtok_r="yes"
+  ],[
+    AC_MSG_RESULT([no])
+    tst_links_strtok_r="no"
+  ])
+  #
+  if test "$tst_links_strtok_r" = "yes"; then
+    AC_MSG_CHECKING([if strtok_r is prototyped])
+    AC_EGREP_CPP([strtok_r],[
+      $curl_includes_string
+    ],[
+      AC_MSG_RESULT([yes])
+      tst_proto_strtok_r="yes"
+    ],[
+      AC_MSG_RESULT([no])
+      tst_proto_strtok_r="no"
+    ])
+  fi
+  #
+  if test "$tst_proto_strtok_r" = "yes"; then
+    AC_MSG_CHECKING([if strtok_r is compilable])
+    AC_COMPILE_IFELSE([
+      AC_LANG_PROGRAM([[
+        $curl_includes_string
+      ]],[[
+        if(0 != strtok_r(0, 0, 0))
+          return 1;
+      ]])
+    ],[
+      AC_MSG_RESULT([yes])
+      tst_compi_strtok_r="yes"
+    ],[
+      AC_MSG_RESULT([no])
+      tst_compi_strtok_r="no"
+    ])
+  fi
+  #
+  if test "$tst_compi_strtok_r" = "yes"; then
+    AC_MSG_CHECKING([if strtok_r usage allowed])
+    if test "x$curl_disallow_strtok_r" != "xyes"; then
+      AC_MSG_RESULT([yes])
+      tst_allow_strtok_r="yes"
+    else
+      AC_MSG_RESULT([no])
+      tst_allow_strtok_r="no"
+    fi
+  fi
+  #
+  AC_MSG_CHECKING([if strtok_r might be used])
+  if test "$tst_links_strtok_r" = "yes" &&
+     test "$tst_proto_strtok_r" = "yes" &&
+     test "$tst_compi_strtok_r" = "yes" &&
+     test "$tst_allow_strtok_r" = "yes"; then
+    AC_MSG_RESULT([yes])
+    AC_DEFINE_UNQUOTED(HAVE_STRTOK_R, 1,
+      [Define to 1 if you have the strtok_r function.])
+    ac_cv_func_strtok_r="yes"
+  else
+    AC_MSG_RESULT([no])
+    ac_cv_func_strtok_r="no"
+  fi
+])
+
+
 dnl CURL_CHECK_FUNC_STRTOLL
 dnl -------------------------------------------------
 dnl Verify if strtoll is available, prototyped, and
@@ -233,7 +446,8 @@ AC_DEFUN([CURL_CHECK_FUNC_STRTOLL], [
       AC_LANG_PROGRAM([[
         $curl_includes_stdlib
       ]],[[
-        strtoll(0, 0, 0);
+        if(0 != strtoll(0, 0, 0))
+          return 1;
       ]])
     ],[
       AC_MSG_RESULT([yes])