1 dnl $Id: aclocal.m4,v 1.13 2014/01/22 10:30:12 djm Exp $
3 dnl OpenSSH-specific autoconf macros
6 dnl OSSH_CHECK_CFLAG_COMPILE(check_flag[, define_flag])
7 dnl Check that $CC accepts a flag 'check_flag'. If it is supported append
8 dnl 'define_flag' to $CFLAGS. If 'define_flag' is not specified, then append
10 AC_DEFUN([OSSH_CHECK_CFLAG_COMPILE], [{
11 AC_MSG_CHECKING([if $CC supports compile flag $1])
12 saved_CFLAGS="$CFLAGS"
13 CFLAGS="$CFLAGS $WERROR $1"
15 test "x$_define_flag" = "x" && _define_flag="$1"
16 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
19 int main(int argc, char **argv) {
20 /* Some math to catch -ftrapv problems in the toolchain */
21 int i = 123 * argc, j = 456 + argc, k = 789 - argc;
24 long long int n = argc * 12345LL, o = 12345LL * (long long int)argc;
25 printf("%d %d %d %f %f %lld %lld\n", i, j, k, l, m, n, o);
30 if `grep -i "unrecognized option" conftest.err >/dev/null`
33 CFLAGS="$saved_CFLAGS"
36 CFLAGS="$saved_CFLAGS $_define_flag"
39 CFLAGS="$saved_CFLAGS" ]
43 dnl OSSH_CHECK_CFLAG_LINK(check_flag[, define_flag])
44 dnl Check that $CC accepts a flag 'check_flag'. If it is supported append
45 dnl 'define_flag' to $CFLAGS. If 'define_flag' is not specified, then append
47 AC_DEFUN([OSSH_CHECK_CFLAG_LINK], [{
48 AC_MSG_CHECKING([if $CC supports compile flag $1 and linking succeeds])
49 saved_CFLAGS="$CFLAGS"
50 CFLAGS="$CFLAGS $WERROR $1"
52 test "x$_define_flag" = "x" && _define_flag="$1"
53 AC_LINK_IFELSE([AC_LANG_SOURCE([[
56 int main(int argc, char **argv) {
57 /* Some math to catch -ftrapv problems in the toolchain */
58 int i = 123 * argc, j = 456 + argc, k = 789 - argc;
61 long long int n = argc * 12345LL, o = 12345LL * (long long int)argc;
62 printf("%d %d %d %f %f %lld %lld\n", i, j, k, l, m, n, o);
67 if `grep -i "unrecognized option" conftest.err >/dev/null`
70 CFLAGS="$saved_CFLAGS"
73 CFLAGS="$saved_CFLAGS $_define_flag"
76 CFLAGS="$saved_CFLAGS" ]
80 dnl OSSH_CHECK_LDFLAG_LINK(check_flag[, define_flag])
81 dnl Check that $LD accepts a flag 'check_flag'. If it is supported append
82 dnl 'define_flag' to $LDFLAGS. If 'define_flag' is not specified, then append
84 AC_DEFUN([OSSH_CHECK_LDFLAG_LINK], [{
85 AC_MSG_CHECKING([if $LD supports link flag $1])
86 saved_LDFLAGS="$LDFLAGS"
87 LDFLAGS="$LDFLAGS $WERROR $1"
89 test "x$_define_flag" = "x" && _define_flag="$1"
90 AC_LINK_IFELSE([AC_LANG_SOURCE([[
93 int main(int argc, char **argv) {
94 /* Some math to catch -ftrapv problems in the toolchain */
95 int i = 123 * argc, j = 456 + argc, k = 789 - argc;
98 long long int n = argc * 12345LL, o = 12345LL * (long long int)argc;
99 printf("%d %d %d %f %f %lld %lld\n", i, j, k, l, m, n, o);
103 [ AC_MSG_RESULT([yes])
104 LDFLAGS="$saved_LDFLAGS $_define_flag"],
105 [ AC_MSG_RESULT([no])
106 LDFLAGS="$saved_LDFLAGS" ]
110 dnl OSSH_CHECK_HEADER_FOR_FIELD(field, header, symbol)
111 dnl Does AC_EGREP_HEADER on 'header' for the string 'field'
112 dnl If found, set 'symbol' to be defined. Cache the result.
113 dnl TODO: This is not foolproof, better to compile and read from there
114 AC_DEFUN(OSSH_CHECK_HEADER_FOR_FIELD, [
115 # look for field '$1' in header '$2'
116 dnl This strips characters illegal to m4 from the header filename
117 ossh_safe=`echo "$2" | sed 'y%./+-%__p_%'`
119 ossh_varname="ossh_cv_$ossh_safe""_has_"$1
120 AC_MSG_CHECKING(for $1 field in $2)
121 AC_CACHE_VAL($ossh_varname, [
122 AC_EGREP_HEADER($1, $2, [ dnl
123 eval "$ossh_varname=yes" dnl
125 eval "$ossh_varname=no" dnl
128 ossh_result=`eval 'echo $'"$ossh_varname"`
129 if test -n "`echo $ossh_varname`"; then
130 AC_MSG_RESULT($ossh_result)
131 if test "x$ossh_result" = "xyes"; then
132 AC_DEFINE($3, 1, [Define if you have $1 in $2])
139 dnl Check for socklen_t: historically on BSD it is an int, and in
140 dnl POSIX 1g it is a type of its own, but some platforms use different
141 dnl types for the argument to getsockopt, getpeername, etc. So we
142 dnl have to test to find something that will work.
143 AC_DEFUN([TYPE_SOCKLEN_T],
145 AC_CHECK_TYPE([socklen_t], ,[
146 AC_MSG_CHECKING([for socklen_t equivalent])
147 AC_CACHE_VAL([curl_cv_socklen_t_equiv],
149 # Systems have either "struct sockaddr *" or
150 # "void *" as the second argument to getpeername
151 curl_cv_socklen_t_equiv=
152 for arg2 in "struct sockaddr" void; do
153 for t in int size_t unsigned long "unsigned long"; do
155 #include <sys/types.h>
156 #include <sys/socket.h>
158 int getpeername (int, $arg2 *, $t *);
161 getpeername(0,0,&len);
163 curl_cv_socklen_t_equiv="$t"
169 if test "x$curl_cv_socklen_t_equiv" = x; then
170 AC_MSG_ERROR([Cannot find a type to use in place of socklen_t])
173 AC_MSG_RESULT($curl_cv_socklen_t_equiv)
174 AC_DEFINE_UNQUOTED(socklen_t, $curl_cv_socklen_t_equiv,
175 [type to use in place of socklen_t if not defined])],
176 [#include <sys/types.h>
177 #include <sys/socket.h>])