164 lines
3.8 KiB
Plaintext
164 lines
3.8 KiB
Plaintext
dnl @synopsis AX_FUNC_WHICH_GETHOSTBYNAME_R
|
|
dnl
|
|
dnl Determines which historical variant of the gethostbyname_r() call
|
|
dnl (taking three, five, or six arguments) is available on the system
|
|
dnl and defines one of the following macros accordingly:
|
|
dnl
|
|
dnl HAVE_FUNC_GETHOSTBYNAME_R_6
|
|
dnl HAVE_FUNC_GETHOSTBYNAME_R_5
|
|
dnl HAVE_FUNC_GETHOSTBYNAME_R_3
|
|
dnl
|
|
dnl If used in conjunction with gethostname.c, the API demonstrated in
|
|
dnl test.c can be used regardless of which gethostbyname_r() is
|
|
dnl available. These example files can be found at
|
|
dnl http://www.csn.ul.ie/~caolan/publink/gethostbyname_r
|
|
dnl
|
|
dnl based on David Arnold's autoconf suggestion in the threads faq
|
|
dnl
|
|
dnl Originally named "AC_caolan_FUNC_WHICH_GETHOSTBYNAME_R". Rewritten
|
|
dnl for Autoconf 2.5x by Daniel Richard G.
|
|
dnl
|
|
dnl @category InstalledPackages
|
|
dnl @author Caolan McNamara <caolan@skynet.ie>
|
|
dnl @author Daniel Richard G. <skunk@iskunk.org>
|
|
dnl @version 2005-01-21
|
|
dnl @license GPLWithACException
|
|
|
|
AC_DEFUN([AX_FUNC_WHICH_GETHOSTBYNAME_R], [
|
|
|
|
AC_LANG_PUSH(C)
|
|
AC_MSG_CHECKING([how many arguments gethostbyname_r() takes])
|
|
|
|
AC_CACHE_VAL(ac_cv_func_which_gethostbyname_r, [
|
|
|
|
################################################################
|
|
|
|
ac_cv_func_which_gethostbyname_r=unknown
|
|
|
|
#
|
|
# ONE ARGUMENT (sanity check)
|
|
#
|
|
|
|
# This should fail, as there is no variant of gethostbyname_r() that takes
|
|
# a single argument. If it actually compiles, then we can assume that
|
|
# netdb.h is not declaring the function, and the compiler is thereby
|
|
# assuming an implicit prototype. In which case, we're out of luck.
|
|
#
|
|
AC_COMPILE_IFELSE(
|
|
[AC_LANG_PROGRAM(
|
|
[[#include <netdb.h>]],
|
|
[[
|
|
char *name = "www.gnu.org";
|
|
(void)gethostbyname_r(name) /* ; */
|
|
]]
|
|
)],
|
|
ac_cv_func_which_gethostbyname_r=no
|
|
)
|
|
|
|
#
|
|
# SIX ARGUMENTS
|
|
# (e.g. Linux)
|
|
#
|
|
|
|
if test "$ac_cv_func_which_gethostbyname_r" = "unknown"; then
|
|
|
|
AC_COMPILE_IFELSE(
|
|
[AC_LANG_PROGRAM(
|
|
[[#include <netdb.h>]],
|
|
[[
|
|
char *name = "www.gnu.org";
|
|
struct hostent ret, *retp;
|
|
char buf@<:@1024@:>@;
|
|
int buflen = 1024;
|
|
int my_h_errno;
|
|
(void)gethostbyname_r(name, &ret, buf, buflen, &retp, &my_h_errno) /* ; */
|
|
]]
|
|
)],
|
|
ac_cv_func_which_gethostbyname_r=six
|
|
)
|
|
|
|
fi
|
|
|
|
#
|
|
# FIVE ARGUMENTS
|
|
# (e.g. Solaris)
|
|
#
|
|
|
|
if test "$ac_cv_func_which_gethostbyname_r" = "unknown"; then
|
|
|
|
AC_COMPILE_IFELSE(
|
|
[AC_LANG_PROGRAM(
|
|
[[#include <netdb.h>]],
|
|
[[
|
|
char *name = "www.gnu.org";
|
|
struct hostent ret;
|
|
char buf@<:@1024@:>@;
|
|
int buflen = 1024;
|
|
int my_h_errno;
|
|
(void)gethostbyname_r(name, &ret, buf, buflen, &my_h_errno) /* ; */
|
|
]]
|
|
)],
|
|
ac_cv_func_which_gethostbyname_r=five
|
|
)
|
|
|
|
fi
|
|
|
|
#
|
|
# THREE ARGUMENTS
|
|
# (e.g. AIX, HP-UX, Tru64)
|
|
#
|
|
|
|
if test "$ac_cv_func_which_gethostbyname_r" = "unknown"; then
|
|
|
|
AC_COMPILE_IFELSE(
|
|
[AC_LANG_PROGRAM(
|
|
[[#include <netdb.h>]],
|
|
[[
|
|
char *name = "www.gnu.org";
|
|
struct hostent ret;
|
|
struct hostent_data data;
|
|
(void)gethostbyname_r(name, &ret, &data) /* ; */
|
|
]]
|
|
)],
|
|
ac_cv_func_which_gethostbyname_r=three
|
|
)
|
|
|
|
fi
|
|
|
|
################################################################
|
|
|
|
]) dnl end AC_CACHE_VAL
|
|
|
|
case "$ac_cv_func_which_gethostbyname_r" in
|
|
three)
|
|
AC_MSG_RESULT([three])
|
|
AC_DEFINE(HAVE_FUNC_GETHOSTBYNAME_R_3)
|
|
;;
|
|
|
|
five)
|
|
AC_MSG_RESULT([five])
|
|
AC_DEFINE(HAVE_FUNC_GETHOSTBYNAME_R_5)
|
|
;;
|
|
|
|
six)
|
|
AC_MSG_RESULT([six])
|
|
AC_DEFINE(HAVE_FUNC_GETHOSTBYNAME_R_6)
|
|
;;
|
|
|
|
no)
|
|
AC_MSG_RESULT([cannot find function declaration in netdb.h])
|
|
;;
|
|
|
|
unknown)
|
|
AC_MSG_RESULT([can't tell])
|
|
;;
|
|
|
|
*)
|
|
AC_MSG_ERROR([internal error])
|
|
;;
|
|
esac
|
|
|
|
AC_LANG_POP(C)
|
|
|
|
]) dnl end AC_DEFUN
|