AC-Archive
Autoconf Macro Archive

ac-archive.sf.net: - Project CVS - Download
Macro Index
- AM Support
- C++ Support
- C Support
- Fortran Support
- Java Support
- Cross Compilation
- Installed Packages
- Miscellaneous
- LaTeX Support
- Uncategorized
- archive macros
- adl's macros
- bkorb's macros
- guidod's macros
- latex's macros
- other's macros
- rleigh's macros
- obsoleted macros
- released macros
- search index

Documentation
- Contribute!
- History
- acincludedir m4
- acinclude (tool)
- macro howto
- ax tricks
- maintainers
- License
- Topics

generated...
2007-08-05

(C) 2007 guidod
Download the M4 Source.

ax_func_which_gethostbyname_r

Back to the Main Page.

Synopsis
AX_FUNC_WHICH_GETHOSTBYNAME_R
, 
, 
Version

2005-01-21

Author

Caolan McNamara <caolan@skynet.ie> Daniel Richard G. <skunk@iskunk.org>

License

GPLWithACException
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation. As a special exception, the respective Autoconf Macro's copyright owner gives unlimited permission to copy, distribute and modify the configure scripts that are the output of Autoconf when processing the Macro. You need not follow the terms of the GNU General Public License when using or distributing such scripts

Category

cryp.to ac-archive's Installed Packages (released)

Documentation

Determines which historical variant of the gethostbyname_r() call (taking three, five, or six arguments) is available on the system and defines one of the following macros accordingly:

 HAVE_FUNC_GETHOSTBYNAME_R_6
 HAVE_FUNC_GETHOSTBYNAME_R_5
 HAVE_FUNC_GETHOSTBYNAME_R_3

If used in conjunction with gethostname.c, the API demonstrated in test.c can be used regardless of which gethostbyname_r() is available. These example files can be found at http://www.csn.ul.ie/~caolan/publink/gethostbyname_r

based on David Arnold's autoconf suggestion in the threads faq

Originally named "AC_caolan_FUNC_WHICH_GETHOSTBYNAME_R". Rewritten for Autoconf 2.5x by Daniel Richard G.

M4 Source Code
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 &lt;netdb.h&gt;]],
	[[
	    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 &lt;netdb.h&gt;]],
	[[
	    char *name = "www.gnu.org";
	    struct hostent ret, *retp;
	    char buf@&lt;:@1024@:&gt;@;
	    int buflen = 1024;
	    int my_h_errno;
	    (void)gethostbyname_r(name, &amp;ret, buf, buflen, &amp;retp, &amp;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 &lt;netdb.h&gt;]],
	[[
	    char *name = "www.gnu.org";
	    struct hostent ret;
	    char buf@&lt;:@1024@:&gt;@;
	    int buflen = 1024;
	    int my_h_errno;
	    (void)gethostbyname_r(name, &amp;ret, buf, buflen, &amp;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 &lt;netdb.h&gt;]],
	[[
	    char *name = "www.gnu.org";
	    struct hostent ret;
	    struct hostent_data data;
	    (void)gethostbyname_r(name, &amp;ret, &amp;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