xref: /freebsd/crypto/openssh/aclocal.m4 (revision 8657387683946d0c03e09fe77029edfe309eeb20)
1dnl OpenSSH-specific autoconf macros
2dnl
3
4dnl OSSH_CHECK_CFLAG_COMPILE(check_flag[, define_flag])
5dnl Check that $CC accepts a flag 'check_flag'. If it is supported append
6dnl 'define_flag' to $CFLAGS. If 'define_flag' is not specified, then append
7dnl 'check_flag'.
8AC_DEFUN([OSSH_CHECK_CFLAG_COMPILE], [{
9	AC_MSG_CHECKING([if $CC supports compile flag $1])
10	saved_CFLAGS="$CFLAGS"
11	CFLAGS="$CFLAGS $WERROR $1"
12	_define_flag="$2"
13	test "x$_define_flag" = "x" && _define_flag="$1"
14	AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
15#include <stdlib.h>
16#include <stdio.h>
17int main(int argc, char **argv) {
18	/* Some math to catch -ftrapv problems in the toolchain */
19	int i = 123 * argc, j = 456 + argc, k = 789 - argc;
20	float l = i * 2.1;
21	double m = l / 0.5;
22	long long int n = argc * 12345LL, o = 12345LL * (long long int)argc;
23	printf("%d %d %d %f %f %lld %lld\n", i, j, k, l, m, n, o);
24	exit(0);
25}
26	]])],
27		[
28if `grep -i "unrecognized option" conftest.err >/dev/null`
29then
30		AC_MSG_RESULT([no])
31		CFLAGS="$saved_CFLAGS"
32else
33		AC_MSG_RESULT([yes])
34		 CFLAGS="$saved_CFLAGS $_define_flag"
35fi],
36		[ AC_MSG_RESULT([no])
37		  CFLAGS="$saved_CFLAGS" ]
38	)
39}])
40
41dnl OSSH_CHECK_CFLAG_LINK(check_flag[, define_flag])
42dnl Check that $CC accepts a flag 'check_flag'. If it is supported append
43dnl 'define_flag' to $CFLAGS. If 'define_flag' is not specified, then append
44dnl 'check_flag'.
45AC_DEFUN([OSSH_CHECK_CFLAG_LINK], [{
46	AC_MSG_CHECKING([if $CC supports compile flag $1 and linking succeeds])
47	saved_CFLAGS="$CFLAGS"
48	CFLAGS="$CFLAGS $WERROR $1"
49	_define_flag="$2"
50	test "x$_define_flag" = "x" && _define_flag="$1"
51	AC_LINK_IFELSE([AC_LANG_SOURCE([[
52#include <stdlib.h>
53#include <stdio.h>
54int main(int argc, char **argv) {
55	/* Some math to catch -ftrapv problems in the toolchain */
56	int i = 123 * argc, j = 456 + argc, k = 789 - argc;
57	float l = i * 2.1;
58	double m = l / 0.5;
59	long long int n = argc * 12345LL, o = 12345LL * (long long int)argc;
60	long long int p = n * o;
61	printf("%d %d %d %f %f %lld %lld %lld\n", i, j, k, l, m, n, o, p);
62	exit(0);
63}
64	]])],
65		[
66if `grep -i "unrecognized option" conftest.err >/dev/null`
67then
68		AC_MSG_RESULT([no])
69		CFLAGS="$saved_CFLAGS"
70else
71		AC_MSG_RESULT([yes])
72		 CFLAGS="$saved_CFLAGS $_define_flag"
73fi],
74		[ AC_MSG_RESULT([no])
75		  CFLAGS="$saved_CFLAGS" ]
76	)
77}])
78
79dnl OSSH_CHECK_LDFLAG_LINK(check_flag[, define_flag])
80dnl Check that $LD accepts a flag 'check_flag'. If it is supported append
81dnl 'define_flag' to $LDFLAGS. If 'define_flag' is not specified, then append
82dnl 'check_flag'.
83AC_DEFUN([OSSH_CHECK_LDFLAG_LINK], [{
84	AC_MSG_CHECKING([if $LD supports link flag $1])
85	saved_LDFLAGS="$LDFLAGS"
86	LDFLAGS="$LDFLAGS $WERROR $1"
87	_define_flag="$2"
88	test "x$_define_flag" = "x" && _define_flag="$1"
89	AC_LINK_IFELSE([AC_LANG_SOURCE([[
90#include <stdlib.h>
91#include <stdio.h>
92int main(int argc, char **argv) {
93	/* Some math to catch -ftrapv problems in the toolchain */
94	int i = 123 * argc, j = 456 + argc, k = 789 - argc;
95	float l = i * 2.1;
96	double m = l / 0.5;
97	long long int n = argc * 12345LL, o = 12345LL * (long long int)argc;
98	long long p = n * o;
99	printf("%d %d %d %f %f %lld %lld %lld\n", i, j, k, l, m, n, o, p);
100	exit(0);
101}
102		]])],
103		[ AC_MSG_RESULT([yes])
104		  LDFLAGS="$saved_LDFLAGS $_define_flag"],
105		[ AC_MSG_RESULT([no])
106		  LDFLAGS="$saved_LDFLAGS" ]
107	)
108}])
109
110dnl OSSH_CHECK_HEADER_FOR_FIELD(field, header, symbol)
111dnl Does AC_EGREP_HEADER on 'header' for the string 'field'
112dnl If found, set 'symbol' to be defined. Cache the result.
113dnl TODO: This is not foolproof, better to compile and read from there
114AC_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_%'`
118	dnl
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
124		], [ dnl
125			eval "$ossh_varname=no" dnl
126		]) dnl
127	])
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])
133		fi
134	else
135		AC_MSG_RESULT(no)
136	fi
137])
138
139dnl Check for socklen_t: historically on BSD it is an int, and in
140dnl POSIX 1g it is a type of its own, but some platforms use different
141dnl types for the argument to getsockopt, getpeername, etc.  So we
142dnl have to test to find something that will work.
143AC_DEFUN([TYPE_SOCKLEN_T],
144[
145   AC_CHECK_TYPE([socklen_t], ,[
146      AC_MSG_CHECKING([for socklen_t equivalent])
147      AC_CACHE_VAL([curl_cv_socklen_t_equiv],
148      [
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
154	       AC_TRY_COMPILE([
155		  #include <sys/types.h>
156		  #include <sys/socket.h>
157
158		  int getpeername (int, $arg2 *, $t *);
159	       ],[
160		  $t len;
161		  getpeername(0,0,&len);
162	       ],[
163		  curl_cv_socklen_t_equiv="$t"
164		  break
165	       ])
166	    done
167	 done
168
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])
171	 fi
172      ])
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>])
178])
179
180