Home | History | Annotate | Download | only in openssh
      1 dnl $Id: aclocal.m4,v 1.13 2014/01/22 10:30:12 djm Exp $
      2 dnl
      3 dnl OpenSSH-specific autoconf macros
      4 dnl
      5 
      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
      9 dnl 'check_flag'.
     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"
     14 	_define_flag="$2"
     15 	test "x$_define_flag" = "x" && _define_flag="$1"
     16 	AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
     17 #include <stdlib.h>
     18 #include <stdio.h>
     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;
     22 	float l = i * 2.1;
     23 	double m = l / 0.5;
     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);
     26 	exit(0);
     27 }
     28 	]])],
     29 		[
     30 if `grep -i "unrecognized option" conftest.err >/dev/null`
     31 then
     32 		AC_MSG_RESULT([no])
     33 		CFLAGS="$saved_CFLAGS"
     34 else
     35 		AC_MSG_RESULT([yes])
     36 		 CFLAGS="$saved_CFLAGS $_define_flag"
     37 fi],
     38 		[ AC_MSG_RESULT([no])
     39 		  CFLAGS="$saved_CFLAGS" ]
     40 	)
     41 }])
     42 
     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
     46 dnl 'check_flag'.
     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"
     51 	_define_flag="$2"
     52 	test "x$_define_flag" = "x" && _define_flag="$1"
     53 	AC_LINK_IFELSE([AC_LANG_SOURCE([[
     54 #include <stdlib.h>
     55 #include <stdio.h>
     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;
     59 	float l = i * 2.1;
     60 	double m = l / 0.5;
     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);
     63 	exit(0);
     64 }
     65 	]])],
     66 		[
     67 if `grep -i "unrecognized option" conftest.err >/dev/null`
     68 then
     69 		AC_MSG_RESULT([no])
     70 		CFLAGS="$saved_CFLAGS"
     71 else
     72 		AC_MSG_RESULT([yes])
     73 		 CFLAGS="$saved_CFLAGS $_define_flag"
     74 fi],
     75 		[ AC_MSG_RESULT([no])
     76 		  CFLAGS="$saved_CFLAGS" ]
     77 	)
     78 }])
     79 
     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
     83 dnl 'check_flag'.
     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"
     88 	_define_flag="$2"
     89 	test "x$_define_flag" = "x" && _define_flag="$1"
     90 	AC_LINK_IFELSE([AC_LANG_SOURCE([[
     91 #include <stdlib.h>
     92 #include <stdio.h>
     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;
     96 	float l = i * 2.1;
     97 	double m = l / 0.5;
     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);
    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 
    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_%'`
    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 
    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],
    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