improve detection of gethostname(), localtime_r() and strstr()

This commit is contained in:
Yang Tse 2008-09-17 08:14:28 +00:00
parent 638e3c070c
commit d7e406e020
3 changed files with 289 additions and 23 deletions

View File

@ -2601,26 +2601,6 @@ fi
])
AC_DEFUN([CURL_CHECK_LOCALTIME_R],
[
dnl check for localtime_r
AC_CHECK_FUNCS(localtime_r,[
AC_MSG_CHECKING(whether localtime_r is declared)
AC_EGREP_CPP(localtime_r,[
#undef _REENTRANT
#include <time.h>],[
AC_MSG_RESULT(yes)],[
AC_MSG_RESULT(no)
AC_MSG_CHECKING(whether localtime_r with -D_REENTRANT is declared)
AC_EGREP_CPP(localtime_r,[
#undef _REENTRANT
#define _REENTRANT
#include <time.h>],[
AC_MSG_RESULT(yes)],
AC_MSG_RESULT(no))])])
])
AC_DEFUN([CURL_CHECK_INET_NTOA_R],
[
dnl determine if function definition for inet_ntoa_r exists.

View File

@ -1853,7 +1853,7 @@ else
CURL_CHECK_INET_NTOA_R()
dnl is there a localtime_r()
CURL_CHECK_LOCALTIME_R()
dnl the old localtime_r check was done here
dnl is there a strerror_r()
dnl the old strerror_r check was done here
@ -1874,7 +1874,7 @@ if test "x$RECENTAIX" = "xyes"; then
AC_DEFINE(_THREAD_SAFE, 1, [define this if you need it to compile thread-safe code])
dnl is there a localtime_r()
CURL_CHECK_LOCALTIME_R()
dnl the old localtime_r check was done here
dnl is there a strerror_r()
dnl the old strerror_r check was done here
@ -2038,7 +2038,9 @@ CURL_CHECK_MSG_NOSIGNAL
CURL_CHECK_FUNC_FDOPEN
CURL_CHECK_FUNC_FTRUNCATE
CURL_CHECK_FUNC_GETHOSTNAME
CURL_CHECK_FUNC_GMTIME_R
CURL_CHECK_FUNC_LOCALTIME_R
CURL_CHECK_FUNC_SIGACTION
CURL_CHECK_FUNC_STRCASECMP
CURL_CHECK_FUNC_STRCASESTR
@ -2050,6 +2052,7 @@ CURL_CHECK_FUNC_STRLCAT
CURL_CHECK_FUNC_STRNCASECMP
CURL_CHECK_FUNC_STRNCMPI
CURL_CHECK_FUNC_STRNICMP
CURL_CHECK_FUNC_STRSTR
CURL_CHECK_FUNC_STRTOK_R
CURL_CHECK_FUNC_STRTOLL
CURL_CHECK_FUNC_WRITEV
@ -2090,7 +2093,6 @@ AC_CHECK_FUNCS([basename \
signal \
sigsetjmp \
socket \
strstr \
uname \
utime
],[

View File

@ -353,6 +353,91 @@ AC_DEFUN([CURL_CHECK_FUNC_FTRUNCATE], [
])
dnl CURL_CHECK_FUNC_GETHOSTNAME
dnl -------------------------------------------------
dnl Verify if gethostname 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_gethostname, then
dnl HAVE_GETHOSTNAME will be defined.
AC_DEFUN([CURL_CHECK_FUNC_GETHOSTNAME], [
AC_REQUIRE([CURL_INCLUDES_UNISTD])dnl
#
tst_links_gethostname="unknown"
tst_proto_gethostname="unknown"
tst_compi_gethostname="unknown"
tst_allow_gethostname="unknown"
#
AC_MSG_CHECKING([if gethostname can be linked])
AC_LINK_IFELSE([
AC_LANG_FUNC_LINK_TRY([gethostname])
],[
AC_MSG_RESULT([yes])
tst_links_gethostname="yes"
],[
AC_MSG_RESULT([no])
tst_links_gethostname="no"
])
#
if test "$tst_links_gethostname" = "yes"; then
AC_MSG_CHECKING([if gethostname is prototyped])
AC_EGREP_CPP([gethostname],[
$curl_includes_unistd
],[
AC_MSG_RESULT([yes])
tst_proto_gethostname="yes"
],[
AC_MSG_RESULT([no])
tst_proto_gethostname="no"
])
fi
#
if test "$tst_proto_gethostname" = "yes"; then
AC_MSG_CHECKING([if gethostname is compilable])
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([[
$curl_includes_unistd
]],[[
if(0 != gethostname(0, 0))
return 1;
]])
],[
AC_MSG_RESULT([yes])
tst_compi_gethostname="yes"
],[
AC_MSG_RESULT([no])
tst_compi_gethostname="no"
])
fi
#
if test "$tst_compi_gethostname" = "yes"; then
AC_MSG_CHECKING([if gethostname usage allowed])
if test "x$curl_disallow_gethostname" != "xyes"; then
AC_MSG_RESULT([yes])
tst_allow_gethostname="yes"
else
AC_MSG_RESULT([no])
tst_allow_gethostname="no"
fi
fi
#
AC_MSG_CHECKING([if gethostname might be used])
if test "$tst_links_gethostname" = "yes" &&
test "$tst_proto_gethostname" = "yes" &&
test "$tst_compi_gethostname" = "yes" &&
test "$tst_allow_gethostname" = "yes"; then
AC_MSG_RESULT([yes])
AC_DEFINE_UNQUOTED(HAVE_GETHOSTNAME, 1,
[Define to 1 if you have the gethostname function.])
ac_cv_func_gethostname="yes"
else
AC_MSG_RESULT([no])
ac_cv_func_gethostname="no"
fi
])
dnl CURL_CHECK_FUNC_GMTIME_R
dnl -------------------------------------------------
dnl Verify if gmtime_r is available, prototyped, can
@ -467,6 +552,120 @@ AC_DEFUN([CURL_CHECK_FUNC_GMTIME_R], [
])
dnl CURL_CHECK_FUNC_LOCALTIME_R
dnl -------------------------------------------------
dnl Verify if localtime_r 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_localtime_r, then
dnl HAVE_LOCALTIME_R will be defined.
AC_DEFUN([CURL_CHECK_FUNC_LOCALTIME_R], [
AC_REQUIRE([CURL_INCLUDES_TIME])dnl
#
tst_links_localtime_r="unknown"
tst_proto_localtime_r="unknown"
tst_compi_localtime_r="unknown"
tst_works_localtime_r="unknown"
tst_allow_localtime_r="unknown"
#
AC_MSG_CHECKING([if localtime_r can be linked])
AC_LINK_IFELSE([
AC_LANG_FUNC_LINK_TRY([localtime_r])
],[
AC_MSG_RESULT([yes])
tst_links_localtime_r="yes"
],[
AC_MSG_RESULT([no])
tst_links_localtime_r="no"
])
#
if test "$tst_links_localtime_r" = "yes"; then
AC_MSG_CHECKING([if localtime_r is prototyped])
AC_EGREP_CPP([localtime_r],[
$curl_includes_time
],[
AC_MSG_RESULT([yes])
tst_proto_localtime_r="yes"
],[
AC_MSG_RESULT([no])
tst_proto_localtime_r="no"
])
fi
#
if test "$tst_proto_localtime_r" = "yes"; then
AC_MSG_CHECKING([if localtime_r is compilable])
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([[
$curl_includes_time
]],[[
if(0 != localtime_r(0, 0))
return 1;
]])
],[
AC_MSG_RESULT([yes])
tst_compi_localtime_r="yes"
],[
AC_MSG_RESULT([no])
tst_compi_localtime_r="no"
])
fi
#
dnl only do runtime verification when not cross-compiling
if test "x$cross_compiling" != "xyes" &&
test "$tst_compi_localtime_r" = "yes"; then
AC_MSG_CHECKING([if localtime_r seems to work])
AC_RUN_IFELSE([
AC_LANG_PROGRAM([[
$curl_includes_time
]],[[
time_t clock = 1170352587;
struct tm *tmp = 0;
struct tm result;
tmp = localtime_r(&clock, &result);
if(tmp)
exit(0);
else
exit(1);
]])
],[
AC_MSG_RESULT([yes])
tst_works_localtime_r="yes"
],[
AC_MSG_RESULT([no])
tst_works_localtime_r="no"
])
fi
#
if test "$tst_compi_localtime_r" = "yes" &&
test "$tst_works_localtime_r" != "no"; then
AC_MSG_CHECKING([if localtime_r usage allowed])
if test "x$curl_disallow_localtime_r" != "xyes"; then
AC_MSG_RESULT([yes])
tst_allow_localtime_r="yes"
else
AC_MSG_RESULT([no])
tst_allow_localtime_r="no"
fi
fi
#
AC_MSG_CHECKING([if localtime_r might be used])
if test "$tst_links_localtime_r" = "yes" &&
test "$tst_proto_localtime_r" = "yes" &&
test "$tst_compi_localtime_r" = "yes" &&
test "$tst_allow_localtime_r" = "yes" &&
test "$tst_works_localtime_r" != "no"; then
AC_MSG_RESULT([yes])
AC_DEFINE_UNQUOTED(HAVE_LOCALTIME_R, 1,
[Define to 1 if you have a working localtime_r function.])
ac_cv_func_localtime_r="yes"
else
AC_MSG_RESULT([no])
ac_cv_func_localtime_r="no"
fi
])
dnl CURL_CHECK_FUNC_SIGACTION
dnl -------------------------------------------------
dnl Verify if sigaction is available, prototyped, and
@ -1573,6 +1772,91 @@ AC_DEFUN([CURL_CHECK_FUNC_STRNICMP], [
])
dnl CURL_CHECK_FUNC_STRSTR
dnl -------------------------------------------------
dnl Verify if strstr 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_strstr, then
dnl HAVE_STRSTR will be defined.
AC_DEFUN([CURL_CHECK_FUNC_STRSTR], [
AC_REQUIRE([CURL_INCLUDES_STRING])dnl
#
tst_links_strstr="unknown"
tst_proto_strstr="unknown"
tst_compi_strstr="unknown"
tst_allow_strstr="unknown"
#
AC_MSG_CHECKING([if strstr can be linked])
AC_LINK_IFELSE([
AC_LANG_FUNC_LINK_TRY([strstr])
],[
AC_MSG_RESULT([yes])
tst_links_strstr="yes"
],[
AC_MSG_RESULT([no])
tst_links_strstr="no"
])
#
if test "$tst_links_strstr" = "yes"; then
AC_MSG_CHECKING([if strstr is prototyped])
AC_EGREP_CPP([strstr],[
$curl_includes_string
],[
AC_MSG_RESULT([yes])
tst_proto_strstr="yes"
],[
AC_MSG_RESULT([no])
tst_proto_strstr="no"
])
fi
#
if test "$tst_proto_strstr" = "yes"; then
AC_MSG_CHECKING([if strstr is compilable])
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([[
$curl_includes_string
]],[[
if(0 != strstr(0, 0))
return 1;
]])
],[
AC_MSG_RESULT([yes])
tst_compi_strstr="yes"
],[
AC_MSG_RESULT([no])
tst_compi_strstr="no"
])
fi
#
if test "$tst_compi_strstr" = "yes"; then
AC_MSG_CHECKING([if strstr usage allowed])
if test "x$curl_disallow_strstr" != "xyes"; then
AC_MSG_RESULT([yes])
tst_allow_strstr="yes"
else
AC_MSG_RESULT([no])
tst_allow_strstr="no"
fi
fi
#
AC_MSG_CHECKING([if strstr might be used])
if test "$tst_links_strstr" = "yes" &&
test "$tst_proto_strstr" = "yes" &&
test "$tst_compi_strstr" = "yes" &&
test "$tst_allow_strstr" = "yes"; then
AC_MSG_RESULT([yes])
AC_DEFINE_UNQUOTED(HAVE_STRSTR, 1,
[Define to 1 if you have the strstr function.])
ac_cv_func_strstr="yes"
else
AC_MSG_RESULT([no])
ac_cv_func_strstr="no"
fi
])
dnl CURL_CHECK_FUNC_STRTOK_R
dnl -------------------------------------------------
dnl Verify if strtok_r is available, prototyped, and