1# $Id: dspam_functions.m4,v 1.0 2009/06/10 22:00:31 sbajic Exp $
2# m4/dspam_functions.m4
3# Stevan Bajic <stevan@bajic.ch>
4#
5#   Various m4 macros
6#
7#
8
9dnl DS_INCLUDES_ARPA_INET
10dnl -------------------------------------------------
11dnl Set up variable with list of headers that must be
12dnl included when arpa/inet.h is to be included.
13
14AC_DEFUN([DS_INCLUDES_ARPA_INET],
15[
16ds_includes_arpa_inet="\
17/* includes start */
18#ifdef HAVE_SYS_TYPES_H
19#  include <sys/types.h>
20#endif
21#ifdef HAVE_SYS_SOCKET_H
22#  include <sys/socket.h>
23#endif
24#ifdef HAVE_NETINET_IN_H
25#  include <netinet/in.h>
26#endif
27#ifdef HAVE_ARPA_INET_H
28#  include <arpa/inet.h>
29#endif
30/* includes end */"
31  AC_CHECK_HEADERS(
32    sys/types.h sys/socket.h netinet/in.h arpa/inet.h,
33    [], [], [$ds_includes_arpa_inet])
34])
35
36
37dnl DS_CHECK_FUNC_INET_NTOA_R
38dnl -------------------------------------------------
39dnl Verify if inet_ntoa_r is available, prototyped,
40dnl can be compiled and the count of arguments used.
41
42AC_DEFUN([DS_CHECK_FUNC_INET_NTOA_R],
43[
44  AC_REQUIRE([DS_INCLUDES_ARPA_INET])dnl
45  #
46  test_prototyped_inet_ntoa_r="unknown"
47  test_compiles_inet_ntoa_r="unknown"
48  test_number_of_arguments_inet_ntoa_r="unknown"
49  #
50  AC_CHECK_FUNCS(inet_ntoa_r)
51  #
52  if test "$ac_cv_func_inet_ntoa_r" = "yes"; then
53    AC_MSG_CHECKING([if inet_ntoa_r is prototyped])
54    AC_EGREP_CPP([inet_ntoa_r],[
55      $ds_includes_arpa_inet
56    ],[
57      AC_MSG_RESULT([yes])
58      test_prototyped_inet_ntoa_r="yes"
59    ],[
60      AC_MSG_RESULT([no])
61      test_prototyped_inet_ntoa_r="no"
62    ])
63  fi
64  #
65  if test "$test_prototyped_inet_ntoa_r" = "yes"; then
66    if test "$test_number_of_arguments_inet_ntoa_r" = "unknown"; then
67      AC_MSG_CHECKING([if inet_ntoa_r takes 2 args.])
68      AC_COMPILE_IFELSE([
69        AC_LANG_PROGRAM([[
70          $ds_includes_arpa_inet
71        ]],[[
72          struct in_addr addr;
73          if(0 != inet_ntoa_r(addr, 0))
74            return 1;
75        ]])
76      ],[
77        AC_MSG_RESULT([yes])
78        test_compiles_inet_ntoa_r="yes"
79        test_number_of_arguments_inet_ntoa_r="2"
80      ],[
81        AC_MSG_RESULT([no])
82        test_compiles_inet_ntoa_r="no"
83      ])
84    fi
85    if test "$test_number_of_arguments_inet_ntoa_r" = "unknown"; then
86      AC_MSG_CHECKING([if inet_ntoa_r takes 3 args.])
87      AC_COMPILE_IFELSE([
88        AC_LANG_PROGRAM([[
89          $ds_includes_arpa_inet
90        ]],[[
91          struct in_addr addr;
92          if(0 != inet_ntoa_r(addr, 0, 0))
93            return 1;
94        ]])
95      ],[
96        AC_MSG_RESULT([yes])
97        test_compiles_inet_ntoa_r="yes"
98        test_number_of_arguments_inet_ntoa_r="3"
99      ],[
100        AC_MSG_RESULT([no])
101        test_compiles_inet_ntoa_r="no"
102      ])
103    fi
104    AC_MSG_CHECKING([if inet_ntoa_r is compilable])
105    if test "$test_compiles_inet_ntoa_r" = "yes"; then
106      AC_MSG_RESULT([yes])
107    else
108      AC_MSG_RESULT([no])
109    fi
110  fi
111  #
112  AC_MSG_CHECKING([if inet_ntoa_r might be used])
113  if test "$test_prototyped_inet_ntoa_r" = "yes" &&
114     test "$test_compiles_inet_ntoa_r" = "yes"; then
115    AC_MSG_RESULT([yes])
116    AC_DEFINE_UNQUOTED(HAVE_INET_NTOA_R, 1,
117      [Define to 1 if you have the inet_ntoa_r function.])
118    dnl AC_DEFINE_UNQUOTED(INET_NTOA_R_ARGS, $test_number_of_arguments_inet_ntoa_r,
119    dnl   [Specifies the number of arguments to inet_ntoa_r])
120    #
121    if test "$test_number_of_arguments_inet_ntoa_r" -eq "2"; then
122      AC_DEFINE(HAVE_INET_NTOA_R_2, 1, [inet_ntoa_r() takes 2 args])
123    elif test "$test_number_of_arguments_inet_ntoa_r" -eq "3"; then
124      AC_DEFINE(HAVE_INET_NTOA_R_3, 1, [inet_ntoa_r() takes 3 args])
125    fi
126    #
127    ac_cv_func_inet_ntoa_r="yes"
128  else
129    AC_MSG_RESULT([no])
130    ac_cv_func_inet_ntoa_r="no"
131  fi
132])
133