improve detection of gethostbyaddr_r() and gethostbyname_r()

This commit is contained in:
Yang Tse 2008-09-17 16:03:49 +00:00
parent 0c1ae21c11
commit d84440d53b
3 changed files with 288 additions and 420 deletions

View file

@ -2623,424 +2623,6 @@ AC_DEFUN([CURL_CHECK_INET_NTOA_R],
])
dnl CURL_CHECK_GETHOSTBYADDR_R
dnl -------------------------------------------------
dnl check number of arguments for gethostbyaddr_r, it
dnl might take either 5, 7, or 8 arguments.
AC_DEFUN([CURL_CHECK_GETHOSTBYADDR_R], [
#
AC_MSG_CHECKING([for gethostbyaddr_r])
AC_LINK_IFELSE([
AC_LANG_FUNC_LINK_TRY([gethostbyaddr_r])
],[
AC_MSG_RESULT([yes])
tmp_cv_gethostbyaddr_r="yes"
],[
AC_MSG_RESULT([no])
tmp_cv_gethostbyaddr_r="no"
])
#
if test "$tmp_cv_gethostbyaddr_r" != "yes"; then
AC_MSG_CHECKING([deeper for gethostbyaddr_r])
AC_LINK_IFELSE([
AC_LANG_PROGRAM([[
]],[[
gethostbyaddr_r();
]])
],[
AC_MSG_RESULT([yes])
tmp_cv_gethostbyaddr_r="yes"
],[
AC_MSG_RESULT([but still no])
tmp_cv_gethostbyaddr_r="no"
])
fi
#
if test "$tmp_cv_gethostbyaddr_r" = "yes"; then
ac_cv_gethostbyaddr_r_args="unknown"
AC_MSG_CHECKING([if gethostbyaddr_r takes 5 arguments])
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([[
#undef _REENTRANT
#include <sys/types.h>
#include <netdb.h>
]],[[
char * address;
int length;
int type;
struct hostent h;
struct hostent_data hdata;
int rc;
rc = gethostbyaddr_r(address, length, type, &h, &hdata);
]])
],[
AC_MSG_RESULT([yes])
AC_DEFINE(HAVE_GETHOSTBYADDR_R_5, 1, [gethostbyaddr_r() takes 5 args])
ac_cv_gethostbyaddr_r_args="5"
],[
AC_MSG_RESULT([no])
])
if test "$ac_cv_gethostbyaddr_r_args" = "unknown"; then
AC_MSG_CHECKING([if gethostbyaddr_r with -D_REENTRANT takes 5 arguments])
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([[
#undef _REENTRANT
#define _REENTRANT
#include <sys/types.h>
#include <netdb.h>
]],[[
char * address;
int length;
int type;
struct hostent h;
struct hostent_data hdata;
int rc;
rc = gethostbyaddr_r(address, length, type, &h, &hdata);
]])
],[
AC_MSG_RESULT([yes])
AC_DEFINE(HAVE_GETHOSTBYADDR_R_5, 1, [gethostbyaddr_r() takes 5 args])
ac_cv_gethostbyaddr_r_args="5"
],[
AC_MSG_RESULT([no])
])
fi
if test "$ac_cv_gethostbyaddr_r_args" = "unknown"; then
AC_MSG_CHECKING([if gethostbyaddr_r takes 7 arguments])
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([[
#undef _REENTRANT
#include <sys/types.h>
#include <netdb.h>
]],[[
char * address;
int length;
int type;
struct hostent h;
char buffer[8192];
int h_errnop;
struct hostent * hp;
hp = gethostbyaddr_r(address, length, type, &h,
buffer, 8192, &h_errnop);
]])
],[
AC_MSG_RESULT([yes])
AC_DEFINE(HAVE_GETHOSTBYADDR_R_7, 1, [gethostbyaddr_r() takes 7 args])
ac_cv_gethostbyaddr_r_args="7"
],[
AC_MSG_RESULT([no])
])
fi
if test "$ac_cv_gethostbyaddr_r_args" = "unknown"; then
AC_MSG_CHECKING([if gethostbyaddr_r with -D_REENTRANT takes 7 arguments])
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([[
#undef _REENTRANT
#define _REENTRANT
#include <sys/types.h>
#include <netdb.h>
]],[[
char * address;
int length;
int type;
struct hostent h;
char buffer[8192];
int h_errnop;
struct hostent * hp;
hp = gethostbyaddr_r(address, length, type, &h,
buffer, 8192, &h_errnop);
]])
],[
AC_MSG_RESULT([yes])
AC_DEFINE(HAVE_GETHOSTBYADDR_R_7, 1, [gethostbyaddr_r() takes 7 args])
ac_cv_gethostbyaddr_r_args="7"
],[
AC_MSG_RESULT([no])
])
fi
if test "$ac_cv_gethostbyaddr_r_args" = "unknown"; then
AC_MSG_CHECKING([if gethostbyaddr_r takes 8 arguments])
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([[
#undef _REENTRANT
#include <sys/types.h>
#include <netdb.h>
]],[[
char * address;
int length;
int type;
struct hostent h;
char buffer[8192];
int h_errnop;
struct hostent * hp;
int rc;
rc = gethostbyaddr_r(address, length, type, &h,
buffer, 8192, &hp, &h_errnop);
]])
],[
AC_MSG_RESULT([yes])
AC_DEFINE(HAVE_GETHOSTBYADDR_R_8, 1, [gethostbyaddr_r() takes 8 args])
ac_cv_gethostbyaddr_r_args="8"
],[
AC_MSG_RESULT([no])
])
fi
if test "$ac_cv_gethostbyaddr_r_args" = "unknown"; then
AC_MSG_CHECKING([if gethostbyaddr_r with -D_REENTRANT takes 8 arguments])
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([[
#undef _REENTRANT
#define _REENTRANT
#include <sys/types.h>
#include <netdb.h>
]],[[
char * address;
int length;
int type;
struct hostent h;
char buffer[8192];
int h_errnop;
struct hostent * hp;
int rc;
rc = gethostbyaddr_r(address, length, type, &h,
buffer, 8192, &hp, &h_errnop);
]])
],[
AC_MSG_RESULT([yes])
AC_DEFINE(HAVE_GETHOSTBYADDR_R_8, 1, [gethostbyaddr_r() takes 8 args])
ac_cv_gethostbyaddr_r_args="8"
],[
AC_MSG_RESULT([no])
])
fi
if test "$ac_cv_gethostbyaddr_r_args" = "unknown"; then
AC_MSG_WARN([Cannot find out how to use gethostbyaddr_r])
AC_MSG_WARN([HAVE_GETHOSTBYADDR_R will not be defined])
ac_cv_func_gethostbyaddr_r="no"
else
AC_DEFINE_UNQUOTED(HAVE_GETHOSTBYADDR_R, 1,
[Define to 1 if you have the gethostbyaddr_r function.])
ac_cv_func_gethostbyaddr_r="yes"
fi
else
ac_cv_func_gethostbyaddr_r="no"
fi
])
dnl CURL_CHECK_GETHOSTBYNAME_R
dnl -------------------------------------------------
dnl check number of arguments for gethostbyname_r, it
dnl might take either 3, 5, or 6 arguments.
AC_DEFUN([CURL_CHECK_GETHOSTBYNAME_R], [
#
AC_MSG_CHECKING([for gethostbyname_r])
AC_LINK_IFELSE([
AC_LANG_FUNC_LINK_TRY([gethostbyname_r])
],[
AC_MSG_RESULT([yes])
tmp_cv_gethostbyname_r="yes"
],[
AC_MSG_RESULT([no])
tmp_cv_gethostbyname_r="no"
])
#
if test "$tmp_cv_gethostbyname_r" != "yes"; then
AC_MSG_CHECKING([deeper for gethostbyname_r])
AC_LINK_IFELSE([
AC_LANG_PROGRAM([[
]],[[
gethostbyname_r();
]])
],[
AC_MSG_RESULT([yes])
tmp_cv_gethostbyname_r="yes"
],[
AC_MSG_RESULT([but still no])
tmp_cv_gethostbyname_r="no"
])
fi
#
if test "$tmp_cv_gethostbyname_r" = "yes"; then
ac_cv_gethostbyname_r_args="unknown"
AC_MSG_CHECKING([if gethostbyname_r takes 3 arguments])
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([[
#undef _REENTRANT
#include <string.h>
#include <sys/types.h>
#include <netdb.h>
#undef NULL
#define NULL (void *)0
int
gethostbyname_r(const char *, struct hostent *,
struct hostent_data *);
]],[[
struct hostent_data data;
gethostbyname_r(NULL, NULL, NULL);
]])
],[
AC_MSG_RESULT([yes])
AC_DEFINE(HAVE_GETHOSTBYNAME_R_3, 1, [gethostbyname_r() takes 3 args])
ac_cv_gethostbyname_r_args="3"
],[
AC_MSG_RESULT([no])
])
if test "$ac_cv_gethostbyname_r_args" = "unknown"; then
AC_MSG_CHECKING([if gethostbyname_r with -D_REENTRANT takes 3 arguments])
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([[
#undef _REENTRANT
#define _REENTRANT
#include <string.h>
#include <sys/types.h>
#include <netdb.h>
#undef NULL
#define NULL (void *)0
int
gethostbyname_r(const char *, struct hostent *,
struct hostent_data *);
]],[[
struct hostent_data data;
gethostbyname_r(NULL, NULL, NULL);
]])
],[
AC_MSG_RESULT([yes])
AC_DEFINE(HAVE_GETHOSTBYNAME_R_3, 1, [gethostbyname_r() takes 3 args])
ac_cv_gethostbyname_r_args="3"
],[
AC_MSG_RESULT([no])
])
fi
if test "$ac_cv_gethostbyname_r_args" = "unknown"; then
AC_MSG_CHECKING([if gethostbyname_r takes 5 arguments])
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([[
#undef _REENTRANT
#include <sys/types.h>
#include <netdb.h>
#undef NULL
#define NULL (void *)0
struct hostent *
gethostbyname_r(const char *, struct hostent *,
char *, int, int *);
]],[[
gethostbyname_r(NULL, NULL, NULL, 0, NULL);
]])
],[
AC_MSG_RESULT([yes])
AC_DEFINE(HAVE_GETHOSTBYNAME_R_5, 1, [gethostbyname_r() takes 5 args])
ac_cv_gethostbyname_r_args="5"
],[
AC_MSG_RESULT([no])
])
fi
if test "$ac_cv_gethostbyname_r_args" = "unknown"; then
AC_MSG_CHECKING([if gethostbyname_r with -D_REENTRANT takes 5 arguments])
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([[
#undef _REENTRANT
#define _REENTRANT
#include <sys/types.h>
#include <netdb.h>
#undef NULL
#define NULL (void *)0
struct hostent *
gethostbyname_r(const char *, struct hostent *,
char *, int, int *);
]],[[
gethostbyname_r(NULL, NULL, NULL, 0, NULL);
]])
],[
AC_MSG_RESULT([yes])
AC_DEFINE(HAVE_GETHOSTBYNAME_R_5, 1, [gethostbyname_r() takes 5 args])
ac_cv_gethostbyname_r_args="5"
],[
AC_MSG_RESULT([no])
])
fi
if test "$ac_cv_gethostbyname_r_args" = "unknown"; then
AC_MSG_CHECKING([if gethostbyname_r takes 6 arguments])
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([[
#undef _REENTRANT
#include <sys/types.h>
#include <netdb.h>
#undef NULL
#define NULL (void *)0
int
gethostbyname_r(const char *, struct hostent *,
char *, size_t, struct hostent **, int *);
]],[[
gethostbyname_r(NULL, NULL, NULL, 0, NULL, NULL);
]])
],[
AC_MSG_RESULT([yes])
AC_DEFINE(HAVE_GETHOSTBYNAME_R_6, 1, [gethostbyname_r() takes 6 args])
ac_cv_gethostbyname_r_args="6"
],[
AC_MSG_RESULT([no])
])
fi
if test "$ac_cv_gethostbyname_r_args" = "unknown"; then
AC_MSG_CHECKING([if gethostbyname_r with -D_REENTRANT takes 6 arguments])
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([[
#undef _REENTRANT
#define _REENTRANT
#include <sys/types.h>
#include <netdb.h>
#undef NULL
#define NULL (void *)0
int
gethostbyname_r(const char *, struct hostent *,
char *, size_t, struct hostent **, int *);
]],[[
gethostbyname_r(NULL, NULL, NULL, 0, NULL, NULL);
]])
],[
AC_MSG_RESULT([yes])
AC_DEFINE(HAVE_GETHOSTBYNAME_R_6, 1, [gethostbyname_r() takes 6 args])
ac_cv_gethostbyname_r_args="6"
],[
AC_MSG_RESULT([no])
])
fi
if test "$ac_cv_gethostbyname_r_args" = "unknown"; then
AC_MSG_WARN([Cannot find out how to use gethostbyname_r])
AC_MSG_WARN([HAVE_GETHOSTBYNAME_R will not be defined])
ac_cv_func_gethostbyname_r="no"
else
AC_DEFINE_UNQUOTED(HAVE_GETHOSTBYNAME_R, 1,
[Define to 1 if you have the gethostbyname_r function.])
ac_cv_func_gethostbyname_r="yes"
fi
else
ac_cv_func_gethostbyname_r="no"
fi
])
dnl **********************************************************************
dnl CURL_DETECT_ICC ([ACTION-IF-YES])
dnl