11305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwooddnl $Id: aclocal.m4,v 1.8 2011/05/20 01:45:25 djm Exp $
21305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwooddnl
31305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwooddnl OpenSSH-specific autoconf macros
41305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwooddnl
51305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
61305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwooddnl OSSH_CHECK_CFLAG_COMPILE(check_flag[, define_flag])
71305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwooddnl Check that $CC accepts a flag 'check_flag'. If it is supported append
81305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwooddnl 'define_flag' to $CFLAGS. If 'define_flag' is not specified, then append
91305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwooddnl 'check_flag'.
101305e95ba6ff9fa202d0818caf10405df4b0f648Mike LockwoodAC_DEFUN([OSSH_CHECK_CFLAG_COMPILE], [{
111305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	AC_MSG_CHECKING([if $CC supports $1])
121305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	saved_CFLAGS="$CFLAGS"
131305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	CFLAGS="$CFLAGS $1"
141305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	_define_flag="$2"
151305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	test "x$_define_flag" = "x" && _define_flag="$1"
161305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int main(void) { return 0; }]])],
171305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood		[ AC_MSG_RESULT([yes])
181305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood		  CFLAGS="$saved_CFLAGS $_define_flag"],
191305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood		[ AC_MSG_RESULT([no])
201305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood		  CFLAGS="$saved_CFLAGS" ]
211305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	)
221305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood}])
231305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
241305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
251305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwooddnl OSSH_CHECK_HEADER_FOR_FIELD(field, header, symbol)
261305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwooddnl Does AC_EGREP_HEADER on 'header' for the string 'field'
271305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwooddnl If found, set 'symbol' to be defined. Cache the result.
281305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwooddnl TODO: This is not foolproof, better to compile and read from there
291305e95ba6ff9fa202d0818caf10405df4b0f648Mike LockwoodAC_DEFUN(OSSH_CHECK_HEADER_FOR_FIELD, [
301305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# look for field '$1' in header '$2'
311305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	dnl This strips characters illegal to m4 from the header filename
321305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	ossh_safe=`echo "$2" | sed 'y%./+-%__p_%'`
331305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	dnl
341305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	ossh_varname="ossh_cv_$ossh_safe""_has_"$1
351305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	AC_MSG_CHECKING(for $1 field in $2)
361305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	AC_CACHE_VAL($ossh_varname, [
371305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood		AC_EGREP_HEADER($1, $2, [ dnl
381305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood			eval "$ossh_varname=yes" dnl
391305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood		], [ dnl
401305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood			eval "$ossh_varname=no" dnl
411305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood		]) dnl
421305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	])
431305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	ossh_result=`eval 'echo $'"$ossh_varname"`
441305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	if test -n "`echo $ossh_varname`"; then
451305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood		AC_MSG_RESULT($ossh_result)
461305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood		if test "x$ossh_result" = "xyes"; then
471305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood			AC_DEFINE($3, 1, [Define if you have $1 in $2])
481305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood		fi
491305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	else
501305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood		AC_MSG_RESULT(no)
511305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	fi
521305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood])
531305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
541305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwooddnl Check for socklen_t: historically on BSD it is an int, and in
551305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwooddnl POSIX 1g it is a type of its own, but some platforms use different
561305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwooddnl types for the argument to getsockopt, getpeername, etc.  So we
571305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwooddnl have to test to find something that will work.
581305e95ba6ff9fa202d0818caf10405df4b0f648Mike LockwoodAC_DEFUN([TYPE_SOCKLEN_T],
591305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood[
601305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood   AC_CHECK_TYPE([socklen_t], ,[
611305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood      AC_MSG_CHECKING([for socklen_t equivalent])
621305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood      AC_CACHE_VAL([curl_cv_socklen_t_equiv],
631305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood      [
641305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	 # Systems have either "struct sockaddr *" or
651305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	 # "void *" as the second argument to getpeername
661305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	 curl_cv_socklen_t_equiv=
671305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	 for arg2 in "struct sockaddr" void; do
681305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	    for t in int size_t unsigned long "unsigned long"; do
691305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	       AC_TRY_COMPILE([
701305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood		  #include <sys/types.h>
711305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood		  #include <sys/socket.h>
721305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
731305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood		  int getpeername (int, $arg2 *, $t *);
741305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	       ],[
751305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood		  $t len;
761305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood		  getpeername(0,0,&len);
771305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	       ],[
781305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood		  curl_cv_socklen_t_equiv="$t"
791305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood		  break
801305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	       ])
811305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	    done
821305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	 done
831305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
841305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	 if test "x$curl_cv_socklen_t_equiv" = x; then
851305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	    AC_MSG_ERROR([Cannot find a type to use in place of socklen_t])
861305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	 fi
871305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood      ])
881305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood      AC_MSG_RESULT($curl_cv_socklen_t_equiv)
891305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood      AC_DEFINE_UNQUOTED(socklen_t, $curl_cv_socklen_t_equiv,
901305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood			[type to use in place of socklen_t if not defined])],
911305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood      [#include <sys/types.h>
921305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#include <sys/socket.h>])
931305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood])
941305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
95