AC_INIT(ssh.c)

AC_CONFIG_HEADER(config.h)
AC_CANONICAL_HOST

dnl Checks for programs.
AC_PROG_CC
AC_PROG_CPP
AC_PROG_RANLIB
AC_PROG_INSTALL
AC_CHECK_PROG(AR, ar, ar)
AC_PATH_PROG(PERL, perl)
AC_SUBST(PERL)

AC_ARG_WITH(rsh,
	[  --with-rsh=PATH         Specify path to remote shell program ],
	[
		if test "x$withval" != "$xno" ; then
			AC_DEFINE_UNQUOTED(RSH_PATH, "$withval")
		fi
	],
	[
		AC_PATH_PROG(rsh_path, rsh)
	]
)

AC_ARG_WITH(xauth,
	[  --with-xauth=PATH       Specify path to xauth program ],
	[
		if test "x$withval" != "$xno" ; then
			AC_DEFINE_UNQUOTED(XAUTH_PATH, "$withval")
		fi
	],
	[
		AC_PATH_PROG(xauth_path, xauth)
		if test ! -z "$xauth_path" -a -x "/usr/openwin/bin/xauth" ; then
			xauth_path="/usr/openwin/bin/xauth"
		fi
	]
)

if test ! -z "$xauth_path" ; then
	AC_DEFINE_UNQUOTED(XAUTH_PATH, "$xauth_path")
fi
if test ! -z "$rsh_path" ; then
	AC_DEFINE_UNQUOTED(RSH_PATH, "$rsh_path")
fi

dnl Checks for compiler characteristics
if test "$GCC" = "yes"; then CFLAGS="$CFLAGS -Wall"; fi

AC_C_INLINE

dnl Check for OpenSSL/SSLeay directories.
AC_MSG_CHECKING([for OpenSSL/SSLeay directory])
for ssldir in $prefix /usr /usr/local/openssl /usr/lib/openssl /usr/local/ssl /usr/lib/ssl /usr/local $prefix /usr/pkg ; do
	if test -f "$ssldir/include/openssl/crypto.h"; then
		AC_DEFINE(HAVE_OPENSSL)
		GOT_SSL="yes"
		break
	fi
	if test -f "$ssldir/include/ssl/crypto.h"; then
		AC_DEFINE(HAVE_SSL)
		GOT_SSL="yes"
		break
	fi
done
if test -z "$GOT_SSL" ; then
	AC_MSG_ERROR([Could not find SSLeay / OpenSSL libraries, please install])	
fi
AC_SUBST(ssldir)
AC_DEFINE_UNQUOTED(ssldir, "$ssldir")
if test "$ssldir" != "/usr"; then
	CFLAGS="$CFLAGS -I$ssldir/include"
	LDFLAGS="$LDFLAGS -L$ssldir/lib"
fi
AC_MSG_RESULT($ssldir)

dnl Check for some target-specific stuff
case "$host" in
*-*-aix*)
	AFS_LIBS="-lld"
	AC_DEFINE(BROKEN_GETADDRINFO)
	;;
*-*-hpux10*)
	if test -z "$GCC"; then
		CFLAGS="$CFLAGS -Aa"
	fi
	CFLAGS="$CFLAGS -D_HPUX_SOURCE"
	AC_DEFINE(IPADDR_IN_DISPLAY)
	AC_DEFINE(USE_UTMPX)
	AC_MSG_CHECKING(for HPUX trusted system password database)
	if test -f /tcb/files/auth/system/default; then
		AC_MSG_RESULT(yes)
		AC_DEFINE(HAVE_HPUX_TRUSTED_SYSTEM_PW)
		LIBS="$LIBS -lsec"
		AC_MSG_WARN([This configuration is untested])
	else
		AC_MSG_RESULT(no)
		AC_DEFINE(DISABLE_SHADOW)
	fi
	MANTYPE='$(CATMAN)'
	mansubdir=cat
	;;
*-*-irix5*)
	MANTYPE='$(CATMAN)'
	no_libsocket=1
	no_libnsl=1
	;;
*-*-irix6*)
	MANTYPE='$(CATMAN)'
	AC_MSG_WARN([*** Irix 6.x is not tested, please report you experiences *** ])
	no_libsocket=1
	no_libnsl=1
	;;
*-*-linux*)
	no_dev_ptmx=1
	;;
*-*-netbsd*)
	if test "$GOT_SSL" = "yes"; then
		LDFLAGS="$LDFLAGS -R$ssldir/lib"
	fi
	;;
*-*-solaris*)
	AC_DEFINE(USE_UTMPX)
	;;
*-*-sysv*)
	AC_DEFINE(USE_UTMPX)
	MANTYPE='$(CATMAN)'
	mansubdir=cat
	LIBS="$LIBS -lgen -lsocket"
	;;
esac

dnl Check for RSAref library.
AC_MSG_CHECKING([for RSAref library])
saved_LIBS="$LIBS"
LIBS="$saved_LIBS -lRSAglue -lrsaref"
AC_TRY_LINK([], [],
[AC_MSG_RESULT(yes);
 AC_DEFINE(RSAREF)],
[AC_MSG_RESULT(no)]; LIBS="$saved_LIBS")

dnl Checks for libraries.
AC_CHECK_LIB(crypto, CRYPTO_lock, ,AC_MSG_ERROR([*** libcrypto missing - please install first ***]))
AC_CHECK_LIB(z, deflate, ,AC_MSG_ERROR([*** zlib missing - please install first ***]))
AC_CHECK_LIB(util, login, AC_DEFINE(HAVE_LIBUTIL_LOGIN) LIBS="$LIBS -lutil")

if test -z "$no_libsocket" ; then
	AC_CHECK_LIB(nsl, yp_match, , )
fi
if test -z "$no_libnsl" ; then
	AC_CHECK_LIB(socket, main, , )
fi

dnl Checks for header files.
AC_CHECK_HEADERS(bstring.h endian.h lastlog.h login.h maillock.h netdb.h netgroup.h paths.h poll.h pty.h shadow.h security/pam_appl.h sys/bitypes.h sys/bsdtty.h sys/cdefs.h sys/poll.h sys/select.h sys/stropts.h sys/sysmacros.h sys/time.h sys/ttcompat.h stddef.h util.h utmp.h utmpx.h)

dnl Checks for library functions.
AC_CHECK_FUNCS(arc4random bindresvport_af freeaddrinfo gai_strerror getaddrinfo getpagesize getnameinfo innetgr md5_crypt mkdtemp openpty rresvport_af setenv seteuid setlogin setproctitle setreuid snprintf strlcat strlcpy updwtmpx vsnprintf _getpty)

AC_CHECK_FUNC(login, 
	[AC_DEFINE(HAVE_LOGIN)],
	[AC_CHECK_LIB(bsd, login, [LIBS="$LIBS -lbsd"; AC_DEFINE(HAVE_LOGIN)])]
)

AC_CHECK_FUNC(daemon, 
	[AC_DEFINE(HAVE_DAEMON)],
	[AC_CHECK_LIB(bsd, daemon, [LIBS="$LIBS -lbsd"; AC_DEFINE(HAVE_DAEMON)])]
)

dnl Checks for data types
AC_CHECK_SIZEOF(char, 1)
AC_CHECK_SIZEOF(short int, 2)
AC_CHECK_SIZEOF(int, 4)
AC_CHECK_SIZEOF(long int, 4)
AC_CHECK_SIZEOF(long long int, 8)

dnl More checks for data types
AC_MSG_CHECKING([for intXX_t types])
AC_TRY_COMPILE(
	[#include <sys/types.h>], 
	[int16_t a; int32_t b; a = 1235; b = 1235;], 
	[
		AC_DEFINE(HAVE_INTXX_T)
		AC_MSG_RESULT(yes)
		have_intxx_t=1
	],
	[AC_MSG_RESULT(no)]
) 

AC_MSG_CHECKING([for u_intXX_t types])
AC_TRY_COMPILE(
	[#include <sys/types.h>], 
	[u_int16_t c; u_int32_t d; c = 1235; d = 1235;], 
	[
		AC_DEFINE(HAVE_U_INTXX_T)
		AC_MSG_RESULT(yes)
		have_u_intxx_t=1
	],
	[AC_MSG_RESULT(no)]
) 

if test -z "$have_u_intxx_t" -o -z "$have_intxx_t" -a \
           "x$ac_cv_header_sys_bitypes_h" = "xyes"
then
	AC_MSG_CHECKING([for intXX_t and u_intXX_t types in sys/bitypes.h])
	AC_TRY_COMPILE(
		[#include <sys/bitypes.h>], 
		[
			u_int16_t c; u_int32_t d; 
			int16_t e; int32_t f;
			c = 1235; d = 1235;
			e = 1235; f = 1235;
		], 
		[
			AC_DEFINE(HAVE_U_INTXX_T)
			AC_DEFINE(HAVE_INTXX_T)
			AC_MSG_RESULT(yes)
		],
		[AC_MSG_RESULT(no)]
	) 
fi

AC_MSG_CHECKING([for uintXX_t types])
AC_TRY_COMPILE(
	[#include <sys/types.h>], 
	[uint16_t c; uint32_t d; c = 1235; d = 1235;], 
	[
		AC_DEFINE(HAVE_UINTXX_T)
		AC_MSG_RESULT(yes)
	],
	[AC_MSG_RESULT(no)]
) 

AC_MSG_CHECKING([for socklen_t])
AC_TRY_COMPILE(
	[
		#include <sys/types.h>
		#include <sys/socket.h>
	],
	[socklen_t foo; foo = 1235;],
	[
		AC_DEFINE(HAVE_SOCKLEN_T)
		AC_MSG_RESULT(yes)
	],
	[AC_MSG_RESULT(no)]
)

AC_MSG_CHECKING([for size_t])
AC_TRY_COMPILE(
	[#include <sys/types.h>],
	[size_t foo; foo = 1235;],
	[
		AC_DEFINE(HAVE_SIZE_T)
		AC_MSG_RESULT(yes)
	],
	[AC_MSG_RESULT(no)]
)

AC_MSG_CHECKING([for struct sockaddr_storage])
AC_TRY_COMPILE(
	[
		#include <sys/types.h>
		#include <sys/socket.h>
	],
	[struct sockaddr_storage s;],
	[
		AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE)
		AC_MSG_RESULT(yes)
	],
	[AC_MSG_RESULT(no)]
)

AC_MSG_CHECKING([for struct sockaddr_in6])
AC_TRY_COMPILE(
	[#include <netinet/in.h>],
	[struct sockaddr_in6 s; s.sin6_family = 0;],
	[
		AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN6)
		AC_MSG_RESULT(yes)
	],
	[AC_MSG_RESULT(no)]
)

AC_MSG_CHECKING([for struct in6_addr])
AC_TRY_COMPILE(
	[#include <netinet/in.h>],
	[struct in6_addr s; s.s6_addr[0] = 0;],
	[
		AC_DEFINE(HAVE_STRUCT_IN6_ADDR)
		AC_MSG_RESULT(yes)
	],
	[AC_MSG_RESULT(no)]
)

AC_MSG_CHECKING([for struct addrinfo])
AC_TRY_COMPILE(
	[
		#include <sys/types.h>
		#include <sys/socket.h>
		#include <netdb.h>
	],
	[struct addrinfo s; s.ai_flags = AI_PASSIVE;],
	[
		AC_DEFINE(HAVE_STRUCT_ADDRINFO)
		AC_MSG_RESULT(yes)
	],
	[AC_MSG_RESULT(no)]
)

AC_ARG_WITH(pam,
	[  --without-pam           Disable PAM support ],
	[
		if test "x$withval" = "xno" ; then
			no_pam=1
			AC_DEFINE(DISABLE_PAM)
		fi
	]
)

if test -z "$no_pam" -a "x$ac_cv_header_security_pam_appl_h" = "xyes" ; then
	AC_CHECK_LIB(dl, dlopen, , )
	LIBS="$LIBS -lpam"
	dnl Check PAM strerror arguments
	AC_MSG_CHECKING([whether pam_strerror takes only one argument])
	AC_TRY_COMPILE(
		[
			#include <stdlib.h>
			#include <security/pam_appl.h>
		], 
		[(void)pam_strerror((pam_handle_t *)NULL, -1);], 
		[AC_MSG_RESULT(no)],
		[
			AC_DEFINE(HAVE_OLD_PAM)
			AC_MSG_RESULT(yes)
		]
	) 
fi

AC_MSG_CHECKING([whether to build GNOME ssh-askpass])
dnl Check whether user wants GNOME ssh-askpass
AC_ARG_WITH(gnome-askpass,
	[  --with-gnome-askpass    Build the GNOME passphrase requester (default=no)],
	[
		if test x$withval = xno ; then
			GNOME_ASKPASS="";
		else
			GNOME_ASKPASS="gnome-ssh-askpass";
		fi
	])
AC_SUBST(GNOME_ASKPASS)

if test -z "$GNOME_ASKPASS" ; then
	AC_MSG_RESULT(no)
else
	AC_MSG_RESULT(yes)
fi

dnl Check for user-specified random device
AC_ARG_WITH(random,
	[  --with-random=FILE      read randomness from FILE (default=/dev/urandom)],
	[
		RANDOM_POOL="$withval";
		AC_DEFINE_UNQUOTED(RANDOM_POOL, "$RANDOM_POOL")
	],
	[
		dnl Check for random device
		AC_CHECK_FILE("/dev/urandom",
			[
				RANDOM_POOL="/dev/urandom"; 
				AC_SUBST(RANDOM_POOL)
				AC_DEFINE_UNQUOTED(RANDOM_POOL, "$RANDOM_POOL")
			]
		)
	]
)

dnl Check for EGD pool file
AC_ARG_WITH(egd-pool,
	[  --with-egd-pool=FILE    read randomness from EGD pool FILE (default none)],
	[
		RANDOM_POOL="$withval";
		AC_DEFINE(HAVE_EGD)
		AC_SUBST(RANDOM_POOL)
		AC_DEFINE_UNQUOTED(RANDOM_POOL, "$RANDOM_POOL")
	]
)

dnl Make sure we have random number support
if test -z "$RANDOM_POOL" -a -z "$EGD_POOL"; then
	AC_MSG_ERROR([No random device found, and no EGD random pool specified])
fi

AC_MSG_CHECKING([whether utmp.h has ut_host field])
AC_EGREP_HEADER(ut_host, utmp.h, 
	[AC_DEFINE(HAVE_HOST_IN_UTMP) AC_MSG_RESULT(yes); ], 
	[AC_MSG_RESULT(no)]
)
AC_MSG_CHECKING([whether utmpx.h has ut_host field])
AC_EGREP_HEADER(ut_host, utmpx.h, 
	[AC_DEFINE(HAVE_HOST_IN_UTMPX) AC_MSG_RESULT(yes); ], 
	[AC_MSG_RESULT(no)]
)
AC_MSG_CHECKING([whether utmpx.h has syslen field])
AC_EGREP_HEADER(syslen, utmpx.h, 
	[AC_DEFINE(HAVE_SYSLEN_IN_UTMPX) AC_MSG_RESULT(yes); ], 
	[AC_MSG_RESULT(no)]
)
AC_MSG_CHECKING([whether utmp.h has ut_pid field])
AC_EGREP_HEADER(ut_pid, utmp.h, 
	[AC_DEFINE(HAVE_PID_IN_UTMP) AC_MSG_RESULT(yes); ], 
	[AC_MSG_RESULT(no)]
)
AC_MSG_CHECKING([whether utmp.h has ut_type field])
AC_EGREP_HEADER(ut_type, utmp.h, 
	[AC_DEFINE(HAVE_TYPE_IN_UTMP) AC_MSG_RESULT(yes); ], 
	[AC_MSG_RESULT(no)]
)
AC_MSG_CHECKING([whether utmp.h has ut_tv field])
AC_EGREP_HEADER(ut_tv, utmp.h, 
	[AC_DEFINE(HAVE_TV_IN_UTMP) AC_MSG_RESULT(yes); ], 
	[AC_MSG_RESULT(no)]
)
AC_MSG_CHECKING([whether utmp.h has ut_id field])
AC_EGREP_HEADER(ut_id, utmp.h, 
	[AC_DEFINE(HAVE_ID_IN_UTMP) AC_MSG_RESULT(yes); ], 
	[AC_MSG_RESULT(no)]
)
AC_MSG_CHECKING([whether utmp.h has ut_addr field])
AC_EGREP_HEADER(ut_addr, utmp.h, 
	[AC_DEFINE(HAVE_ADDR_IN_UTMP) AC_MSG_RESULT(yes); ], 
	[AC_MSG_RESULT(no)]
)
AC_MSG_CHECKING([whether utmpx.h has ut_addr field])
AC_EGREP_HEADER(ut_addr, utmpx.h, 
	[AC_DEFINE(HAVE_ADDR_IN_UTMPX) AC_MSG_RESULT(yes); ], 
	[AC_MSG_RESULT(no)]
)
AC_MSG_CHECKING([whether utmp.h has ut_addr_v6 field])
AC_EGREP_HEADER(ut_addr_v6, utmp.h, 
	[AC_DEFINE(HAVE_ADDR_V6_IN_UTMP) AC_MSG_RESULT(yes); ], 
	[AC_MSG_RESULT(no)]
)
AC_MSG_CHECKING([whether utmpx.h has ut_addr_v6 field])
AC_EGREP_HEADER(ut_addr_v6, utmpx.h, 
	[AC_DEFINE(HAVE_ADDR_V6_IN_UTMPX) AC_MSG_RESULT(yes); ], 
	[AC_MSG_RESULT(no)]
)

AC_MSG_CHECKING([whether struct sockaddr_storage has ss_family field])
AC_TRY_COMPILE(
	[
		#include <sys/types.h>
		#include <sys/socket.h>
	],
	[struct sockaddr_storage s; s.ss_family = 1;],
	[
		AC_DEFINE(HAVE_SS_FAMILY_IN_SS)
		AC_MSG_RESULT(yes)
	],
	[AC_MSG_RESULT(no)]
)
AC_MSG_CHECKING([whether struct sockaddr_storage has __ss_family field])
AC_TRY_COMPILE(
	[
		#include <sys/types.h>
		#include <sys/socket.h>
	],
	[struct sockaddr_storage s; s.__ss_family = 1;],
	[
		AC_DEFINE(HAVE___SS_FAMILY_IN_SS)
		AC_MSG_RESULT(yes)
	],
	[AC_MSG_RESULT(no)]
)

dnl Look for lastlog location
AC_ARG_WITH(lastlog,
	[  --with-lastlog=FILE     Location of lastlog file],
	[
		if test "x$withval" = "xno" ; then
			AC_DEFINE(DISABLE_LASTLOG)
		else
			AC_DEFINE_UNQUOTED(LASTLOG_LOCATION, "$withval")
		fi
	],
	[
		AC_MSG_CHECKING([location of lastlog file])
		for lastlog in /var/log/lastlog /var/adm/lastlog /etc/security/lastlog ; do
			if test -f $lastlog ; then
				gotlastlog="file"
				break
			fi
			if test -d $lastlog ; then
				gotlastlog="dir"
				break
			fi
		done
		if test -z "$gotlastlog" ; then
			AC_MSG_RESULT(not found)
			nolastlog=1
		else
			if test "x$gotlastlog" = "xdir" ; then
				AC_MSG_RESULT(${lastlog}/)
				AC_DEFINE(LASTLOG_IS_DIR)
			else
				AC_MSG_RESULT($lastlog)
				AC_DEFINE_UNQUOTED(LASTLOG_LOCATION, "$lastlog")
			fi
		fi	
	]
)

if test ! -z "$nolastlog" ; then
	AC_MSG_WARN([*** Disabling lastlog support *** ])
	AC_DEFINE(DISABLE_LASTLOG)
fi

dnl Compile with dante SOCKS library
AC_ARG_WITH(dante,
	[  --with-dante=DIR        Use Dante SOCKS lib (default is system library path)],
	[
		SAVELIBS="$LIBS"
		SOCKSLIBS=""
		SOCKSLIBPATH=""
		if test "x$withval" != "xno" ; then
			if test -n $withval ; then
				LIBS="$LIBS -L$withval"
				SOCKSLIBPATH="-L$withval"
			fi
			AC_CHECK_LIB(socks, Rconnect, AC_DEFINE(HAVE_DANTE) SOCKSLIBS="$SOCKSLIBPATH -lsocks")
		fi
		LIBS="$SAVELIBS $SOCKSLIBS"
	]
)

dnl Compile with SOCKS4 SOCKS library
AC_ARG_WITH(socks4,
	[  --with-socks4=DIR        Use Socks4 SOCKS lib (default is system library path)],
	[
		SAVELIBS="$LIBS"
		SOCKSLIBS=""
		SOCKSLIBPATH=""
		if test "x$withval" != "xno" ; then
			if test -n $withval ; then
				LIBS="$LIBS -L$withval"
				SOCKSLIBPATH="-L$withval"
			fi
			AC_CHECK_LIB(socks, Rconnect, AC_DEFINE(HAVE_SOCKS4) SOCKSLIBS="$SOCKSLIBPATH -lsocks")
		fi
		LIBS="$SAVELIBS $SOCKSLIBS"
	]
)

dnl Compile with SOCKS5 SOCKS library
AC_ARG_WITH(socks5,
	[  --with-socks5=DIR        Use Socks5 SOCKS lib (default is system library path)],
	[
		SAVELIBS="$LIBS"
		SOCKSLIBS=""
		SOCKSLIBPATH=""
		if test "x$withval" != "xno" ; then
			if test -n $withval ; then
				LIBS="$LIBS -L$withval"
				SOCKSLIBPATH="-L$withval"
			fi
			AC_CHECK_LIB(socks5, SOCKSconnect, AC_DEFINE(HAVE_SOCKS5) SOCKSLIBS="$SOCKSLIBPATH -lsocks5")
		fi
		LIBS="$SAVELIBS $SOCKSLIBS"
	]
)
AC_ARG_WITH(catman,
	[  --with-catman=man|cat   Install preformatted manpages[no]],
	[
		MANTYPE='$(CATMAN)'
		if test x"$withval" != x"yes" ; then
		   mansubdir=$withval
		else
		   mansubdir=cat
		fi
	], [
		if test -z "$MANTYPE" ; then
			MANTYPE='$(TROFFMAN)'
			mansubdir=man
		fi
	]
)
AC_SUBST(MANTYPE)
AC_SUBST(mansubdir)

if test -z "$no_dev_ptmx" ; then
	AC_CHECK_FILE("/dev/ptmx", AC_DEFINE_UNQUOTED(HAVE_DEV_PTMX))
fi
AC_CHECK_FILE("/dev/ptc", AC_DEFINE_UNQUOTED(HAVE_DEV_PTS_AND_PTC))

AC_MSG_CHECKING([whether libc defines __progname])
AC_TRY_LINK([], 
	[extern char *__progname; printf("%s", __progname);], 
	[
		AC_DEFINE(HAVE___PROGNAME)
		AC_MSG_RESULT(yes)
	], 
	[
		AC_MSG_RESULT(no)
	]
)

dnl Check whether user wants Kerberos support
AC_ARG_WITH(kerberos4,
	[  --with-kerberos4=PATH   Enable Kerberos 4 support],
	[
		if test "x$withval" != "$xno" ; then
	
			if test "x$withval" != "$xyes" ; then
				CFLAGS="$CFLAGS -I${withval}/include"
				LDFLAGS="$LDFLAGS -L${withval}/lib"
			else
				if test -d /usr/include/kerberosIV ; then
					CFLAGS="$CFLAGS -I/usr/include/kerberosIV"
				fi
			fi

			AC_CHECK_HEADERS(krb.h)
			AC_CHECK_LIB(krb, main)
			if test "$ac_cv_header_krb_h" != yes; then
				AC_MSG_WARN([Cannot find krb.h, build may fail])
			fi
			if test "$ac_cv_lib_krb_main" != yes; then
				AC_MSG_WARN([Cannot find libkrb, build may fail])
			fi

			LIBS="$LIBS -lkrb -ldes"
			AC_CHECK_LIB(resolv, dn_expand, , )
			KRB4=yes
			AC_DEFINE(KRB4)
		fi
	]
)

dnl Check whether user wants AFS support
AC_ARG_WITH(afs,
	[  --with-afs=PATH         Enable AFS support],
	[
		if test "x$withval" != "$xno" ; then

			if test "x$withval" != "$xyes" ; then
				CFLAGS="$CFLAGS -I${withval}/include"
				LFLAGS="$LFLAGS -L${withval}/lib"
			fi

			if test -z "$KRB4" ; then
				AC_MSG_WARN([AFS requires Kerberos IV support, build may fail])
			fi

			LIBS="$LIBS -lkafs"
			if test ! -z "$AFS_LIBS" ; then
				LIBS="$LIBS $AFS_LIBS"
			fi
			AC_DEFINE(AFS)
		fi
	]
)

dnl Check whether user wants S/Key support
AC_ARG_WITH(skey,
	[  --with-skey             Enable S/Key support],
	[
		if test "x$withval" != "$xno" ; then
			AC_DEFINE(SKEY)
			LIBS="$LIBS -lskey"
		fi
	]
)

dnl Check whether user wants TCP wrappers support
AC_ARG_WITH(tcp-wrappers,
	[  --with-tcp-wrappers     Enable tcpwrappers support],
	[
		if test "x$withval" != "$xno" ; then
			AC_DEFINE(LIBWRAP)
			LIBS="$LIBS -lwrap"
		fi
	]
)

dnl Check whether to enable MD5 passwords
AC_ARG_WITH(md5-passwords,
	[  --with-md5-passwords    Enable use of MD5 passwords],
	[
		if test "x$withval" != "$xno" ; then
			AC_DEFINE(HAVE_MD5_PASSWORDS)
		fi
	]
)

dnl Check whether to enable utmpx support
AC_ARG_WITH(utmpx,
	[  --with-utmpx            Enable utmpx support],
	[
		if test "x$withval" != "xno" ; then
			AC_DEFINE(USE_UTMPX)
		fi
	]
)

dnl Whether to disable shadow password support
AC_ARG_WITH(shadow,
	[  --without-shadow        Disable shadow password support],
	[
		if test "x$withval" = "xno" ; then	
			AC_DEFINE(DISABLE_SHADOW)
		fi
	]
)

dnl Use ip address instead of hostname in $DISPLAY
AC_ARG_WITH(ipaddr-display,
	[  --with-ipaddr-display   Use ip address instead of hostname in \$DISPLAY],
	[
		if test "x$withval" = "xno" ; then	
			AC_DEFINE(IPADDR_IN_DISPLAY)
		fi
	]
)

AC_ARG_WITH(default-path,
	[  --with-default-path=PATH Specify default \$PATH environment for server],
	[
		if test "x$withval" != "xno" ; then	
			AC_DEFINE_UNQUOTED(USER_PATH, "$withval")
		fi
	]
)

AC_ARG_WITH(ipv4-default,
	[  --with-ipv4-default     Use IPv4 by connections unless '-6' specified],
	[
		if test "x$withval" != "xno" ; then	
			AC_DEFINE(IPV4_DEFAULT)
		fi
	]
)

piddir=/var/run
AC_ARG_WITH(pid-dir,
	[  --with-pid-dir=PATH     Specify location of ssh.pid file],
	[
		if test "x$withval" != "xno" ; then	
			piddir=$withval
		fi
	]
)
AC_DEFINE_UNQUOTED(PIDDIR, "$piddir")
AC_SUBST(piddir)

dnl Check for mail directory (last resort if we cannot get it from headers)
if test ! -z "$MAIL" ; then
	maildir=`dirname $MAIL`
	AC_DEFINE_UNQUOTED(MAIL_DIRECTORY, "$maildir")
fi

AC_OUTPUT(Makefile)
