1# m4/ax_func_which_gethostbyname_r.m4
2
3# Copyright � 2005 Caolan McNamara <caolan@skynet.ie>
4# Copyright � 2005 Daniel Richard G. <skunk@iskunk.org>
5
6# This program is free software; you can redistribute it and/or modify
7# it under the terms of the GNU General Public License as published by
8# the Free Software Foundation; either version 2 of the License, or
9# (at your option) any later version.
10
11# This program is distributed in the hope that it will be useful, but
12# WITHOUT ANY WARRANTY; without even the implied warranty of
13# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14# General Public License for more details.
15
16# You should have received a copy of the GNU General Public License
17# along with this program; if not, write to the Free Software
18# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
19# 02111-1307, USA.
20
21# As a special exception, the respective Autoconf Macro's copyright
22# owner gives unlimited permission to copy, distribute and modify the
23# configure scripts that are the output of Autoconf when processing
24# the Macro. You need not follow the terms of the GNU General Public
25# License when using or distributing such scripts, even though
26# portions of the text of the Macro appear in them. The GNU General
27# Public License (GPL) does govern all other use of the material that
28# constitutes the Autoconf Macro.
29
30# This special exception to the GPL applies to versions of the
31# Autoconf Macro released by the Autoconf Macro Archive. When you make
32# and distribute a modified version of the Autoconf Macro, you may
33# extend this special exception to the GPL to apply to your modified
34# version as well.
35
36
37AC_DEFUN([AX_FUNC_WHICH_GETHOSTBYNAME_R], [
38
39    AC_LANG_PUSH(C)
40    AC_MSG_CHECKING([how many arguments gethostbyname_r() takes])
41
42    AC_CACHE_VAL(ac_cv_func_which_gethostbyname_r, [
43
44################################################################
45
46ac_cv_func_which_gethostbyname_r=unknown
47
48#
49# ONE ARGUMENT (sanity check)
50#
51
52# This should fail, as there is no variant of gethostbyname_r() that takes
53# a single argument. If it actually compiles, then we can assume that
54# netdb.h is not declaring the function, and the compiler is thereby
55# assuming an implicit prototype. In which case, we're out of luck.
56#
57AC_COMPILE_IFELSE([AC_LANG_SOURCE([
58    AC_LANG_PROGRAM(
59        [[#include <netdb.h>]],
60        [[
61            char *name = "www.gnu.org";
62            (void)gethostbyname_r(name) /* ; */
63        ]])])],
64    ac_cv_func_which_gethostbyname_r=no)
65
66#
67# SIX ARGUMENTS
68# (e.g. Linux)
69#
70
71if test "$ac_cv_func_which_gethostbyname_r" = "unknown"; then
72
73AC_COMPILE_IFELSE([AC_LANG_SOURCE([
74    AC_LANG_PROGRAM(
75        [[#include <netdb.h>]],
76        [[
77            char *name = "www.gnu.org";
78            struct hostent ret, *retp;
79            char buf@<:@1024@:>@;
80            int buflen = 1024;
81            int my_h_errno;
82            (void)gethostbyname_r(name, &ret, buf, buflen, &retp, &my_h_errno) /* ; */
83        ]])])],
84    ac_cv_func_which_gethostbyname_r=six)
85
86fi
87
88#
89# FIVE ARGUMENTS
90# (e.g. Solaris)
91#
92
93if test "$ac_cv_func_which_gethostbyname_r" = "unknown"; then
94
95AC_COMPILE_IFELSE([AC_LANG_SOURCE([
96    AC_LANG_PROGRAM(
97        [[#include <netdb.h>]],
98        [[
99            char *name = "www.gnu.org";
100            struct hostent ret;
101            char buf@<:@1024@:>@;
102            int buflen = 1024;
103            int my_h_errno;
104            (void)gethostbyname_r(name, &ret, buf, buflen, &my_h_errno) /* ; */
105        ]])])],
106    ac_cv_func_which_gethostbyname_r=five)
107
108fi
109
110#
111# THREE ARGUMENTS
112# (e.g. AIX, HP-UX, Tru64)
113#
114
115if test "$ac_cv_func_which_gethostbyname_r" = "unknown"; then
116
117AC_COMPILE_IFELSE([AC_LANG_SOURCE([
118    AC_LANG_PROGRAM(
119        [[#include <netdb.h>]],
120        [[
121            char *name = "www.gnu.org";
122            struct hostent ret;
123            struct hostent_data data;
124            (void)gethostbyname_r(name, &ret, &data) /* ; */
125        ]])])],
126    ac_cv_func_which_gethostbyname_r=three)
127
128fi
129
130################################################################
131
132]) dnl end AC_CACHE_VAL
133
134case "$ac_cv_func_which_gethostbyname_r" in
135    three)
136    AC_MSG_RESULT([three])
137    AC_DEFINE([HAVE_FUNC_GETHOSTBYNAME_R_3], 1, [three-argument gethostbyname_r])
138    ;;
139
140    five)
141    AC_MSG_RESULT([five])
142    AC_DEFINE([HAVE_FUNC_GETHOSTBYNAME_R_5], 1, [five-argument gethostbyname_r])
143    ;;
144
145    six)
146    AC_MSG_RESULT([six])
147    AC_DEFINE([HAVE_FUNC_GETHOSTBYNAME_R_6], 1, [six-argument gethostbyname_r])
148    ;;
149
150    no)
151    AC_MSG_RESULT([cannot find function declaration in netdb.h])
152    ;;
153
154    unknown)
155    AC_MSG_RESULT([can't tell])
156    ;;
157
158    *)
159    AC_MSG_ERROR([internal error])
160    ;;
161esac
162
163AC_LANG_POP(C)
164
165]) dnl end AC_DEFUN
166