📄 configure.ac
字号:
OSSH_CHECK_HEADER_FOR_FIELD(ut_addr, utmp.h, HAVE_ADDR_IN_UTMP)OSSH_CHECK_HEADER_FOR_FIELD(ut_addr, utmpx.h, HAVE_ADDR_IN_UTMPX)OSSH_CHECK_HEADER_FOR_FIELD(ut_addr_v6, utmp.h, HAVE_ADDR_V6_IN_UTMP)OSSH_CHECK_HEADER_FOR_FIELD(ut_addr_v6, utmpx.h, HAVE_ADDR_V6_IN_UTMPX)OSSH_CHECK_HEADER_FOR_FIELD(ut_exit, utmp.h, HAVE_EXIT_IN_UTMP)OSSH_CHECK_HEADER_FOR_FIELD(ut_time, utmp.h, HAVE_TIME_IN_UTMP)OSSH_CHECK_HEADER_FOR_FIELD(ut_time, utmpx.h, HAVE_TIME_IN_UTMPX)OSSH_CHECK_HEADER_FOR_FIELD(ut_tv, utmpx.h, HAVE_TV_IN_UTMPX)AC_CHECK_MEMBERS([struct stat.st_blksize])AC_CACHE_CHECK([for ss_family field in struct sockaddr_storage], ac_cv_have_ss_family_in_struct_ss, [ AC_TRY_COMPILE( [#include <sys/types.h>#include <sys/socket.h> ], [ struct sockaddr_storage s; s.ss_family = 1; ], [ ac_cv_have_ss_family_in_struct_ss="yes" ], [ ac_cv_have_ss_family_in_struct_ss="no" ], )])if test "x$ac_cv_have_ss_family_in_struct_ss" = "xyes" ; then AC_DEFINE(HAVE_SS_FAMILY_IN_SS)fiAC_CACHE_CHECK([for __ss_family field in struct sockaddr_storage], ac_cv_have___ss_family_in_struct_ss, [ AC_TRY_COMPILE( [#include <sys/types.h>#include <sys/socket.h> ], [ struct sockaddr_storage s; s.__ss_family = 1; ], [ ac_cv_have___ss_family_in_struct_ss="yes" ], [ ac_cv_have___ss_family_in_struct_ss="no" ] )])if test "x$ac_cv_have___ss_family_in_struct_ss" = "xyes" ; then AC_DEFINE(HAVE___SS_FAMILY_IN_SS)fiAC_CACHE_CHECK([for pw_class field in struct passwd], ac_cv_have_pw_class_in_struct_passwd, [ AC_TRY_COMPILE( [#include <pwd.h> ], [ struct passwd p; p.pw_class = 0; ], [ ac_cv_have_pw_class_in_struct_passwd="yes" ], [ ac_cv_have_pw_class_in_struct_passwd="no" ] )])if test "x$ac_cv_have_pw_class_in_struct_passwd" = "xyes" ; then AC_DEFINE(HAVE_PW_CLASS_IN_PASSWD)fiAC_CACHE_CHECK([for pw_expire field in struct passwd], ac_cv_have_pw_expire_in_struct_passwd, [ AC_TRY_COMPILE( [#include <pwd.h> ], [ struct passwd p; p.pw_expire = 0; ], [ ac_cv_have_pw_expire_in_struct_passwd="yes" ], [ ac_cv_have_pw_expire_in_struct_passwd="no" ] )])if test "x$ac_cv_have_pw_expire_in_struct_passwd" = "xyes" ; then AC_DEFINE(HAVE_PW_EXPIRE_IN_PASSWD)fiAC_CACHE_CHECK([for pw_change field in struct passwd], ac_cv_have_pw_change_in_struct_passwd, [ AC_TRY_COMPILE( [#include <pwd.h> ], [ struct passwd p; p.pw_change = 0; ], [ ac_cv_have_pw_change_in_struct_passwd="yes" ], [ ac_cv_have_pw_change_in_struct_passwd="no" ] )])if test "x$ac_cv_have_pw_change_in_struct_passwd" = "xyes" ; then AC_DEFINE(HAVE_PW_CHANGE_IN_PASSWD)fidnl make sure we're using the real structure members and not definesAC_CACHE_CHECK([for msg_accrights field in struct msghdr], ac_cv_have_accrights_in_msghdr, [ AC_COMPILE_IFELSE( [#include <sys/types.h>#include <sys/socket.h>#include <sys/uio.h>int main() {#ifdef msg_accrights#error "msg_accrights is a macro"exit(1);#endifstruct msghdr m;m.msg_accrights = 0;exit(0);} ], [ ac_cv_have_accrights_in_msghdr="yes" ], [ ac_cv_have_accrights_in_msghdr="no" ] )])if test "x$ac_cv_have_accrights_in_msghdr" = "xyes" ; then AC_DEFINE(HAVE_ACCRIGHTS_IN_MSGHDR)fiAC_CACHE_CHECK([for msg_control field in struct msghdr], ac_cv_have_control_in_msghdr, [ AC_COMPILE_IFELSE( [#include <sys/types.h>#include <sys/socket.h>#include <sys/uio.h>int main() {#ifdef msg_control#error "msg_control is a macro"exit(1);#endifstruct msghdr m;m.msg_control = 0;exit(0);} ], [ ac_cv_have_control_in_msghdr="yes" ], [ ac_cv_have_control_in_msghdr="no" ] )])if test "x$ac_cv_have_control_in_msghdr" = "xyes" ; then AC_DEFINE(HAVE_CONTROL_IN_MSGHDR)fiAC_CACHE_CHECK([if libc defines __progname], ac_cv_libc_defines___progname, [ AC_TRY_LINK([], [ extern char *__progname; printf("%s", __progname); ], [ ac_cv_libc_defines___progname="yes" ], [ ac_cv_libc_defines___progname="no" ] )])if test "x$ac_cv_libc_defines___progname" = "xyes" ; then AC_DEFINE(HAVE___PROGNAME)fiAC_CACHE_CHECK([whether $CC implements __FUNCTION__], ac_cv_cc_implements___FUNCTION__, [ AC_TRY_LINK([#include <stdio.h>], [ printf("%s", __FUNCTION__); ], [ ac_cv_cc_implements___FUNCTION__="yes" ], [ ac_cv_cc_implements___FUNCTION__="no" ] )])if test "x$ac_cv_cc_implements___FUNCTION__" = "xyes" ; then AC_DEFINE(HAVE___FUNCTION__)fiAC_CACHE_CHECK([whether $CC implements __func__], ac_cv_cc_implements___func__, [ AC_TRY_LINK([#include <stdio.h>], [ printf("%s", __func__); ], [ ac_cv_cc_implements___func__="yes" ], [ ac_cv_cc_implements___func__="no" ] )])if test "x$ac_cv_cc_implements___func__" = "xyes" ; then AC_DEFINE(HAVE___func__)fiAC_CACHE_CHECK([whether getopt has optreset support], ac_cv_have_getopt_optreset, [ AC_TRY_LINK( [#include <getopt.h> ], [ extern int optreset; optreset = 0; ], [ ac_cv_have_getopt_optreset="yes" ], [ ac_cv_have_getopt_optreset="no" ] )])if test "x$ac_cv_have_getopt_optreset" = "xyes" ; then AC_DEFINE(HAVE_GETOPT_OPTRESET)fiAC_CACHE_CHECK([if libc defines sys_errlist], ac_cv_libc_defines_sys_errlist, [ AC_TRY_LINK([], [ extern const char *const sys_errlist[]; printf("%s", sys_errlist[0]);], [ ac_cv_libc_defines_sys_errlist="yes" ], [ ac_cv_libc_defines_sys_errlist="no" ] )])if test "x$ac_cv_libc_defines_sys_errlist" = "xyes" ; then AC_DEFINE(HAVE_SYS_ERRLIST)fiAC_CACHE_CHECK([if libc defines sys_nerr], ac_cv_libc_defines_sys_nerr, [ AC_TRY_LINK([], [ extern int sys_nerr; printf("%i", sys_nerr);], [ ac_cv_libc_defines_sys_nerr="yes" ], [ ac_cv_libc_defines_sys_nerr="no" ] )])if test "x$ac_cv_libc_defines_sys_nerr" = "xyes" ; then AC_DEFINE(HAVE_SYS_NERR)fiSCARD_MSG="no"# Check whether user wants sectok supportAC_ARG_WITH(sectok, [ --with-sectok Enable smartcard support using libsectok], [ if test "x$withval" != "xno" ; then if test "x$withval" != "xyes" ; then CPPFLAGS="$CPPFLAGS -I${withval}" LDFLAGS="$LDFLAGS -L${withval}" if test ! -z "$need_dash_r" ; then LDFLAGS="$LDFLAGS -R${withval}" fi if test ! -z "$blibpath" ; then blibpath="$blibpath:${withval}" fi fi AC_CHECK_HEADERS(sectok.h) if test "$ac_cv_header_sectok_h" != yes; then AC_MSG_ERROR(Can't find sectok.h) fi AC_CHECK_LIB(sectok, sectok_open) if test "$ac_cv_lib_sectok_sectok_open" != yes; then AC_MSG_ERROR(Can't find libsectok) fi AC_DEFINE(SMARTCARD) AC_DEFINE(USE_SECTOK) SCARD_MSG="yes, using sectok" fi ])# Check whether user wants OpenSC supportAC_ARG_WITH(opensc, AC_HELP_STRING([--with-opensc=PFX], [Enable smartcard support using OpenSC]), opensc_config_prefix="$withval", opensc_config_prefix="")if test x$opensc_config_prefix != x ; then OPENSC_CONFIG=$opensc_config_prefix/bin/opensc-config AC_PATH_PROG(OPENSC_CONFIG, opensc-config, no) if test "$OPENSC_CONFIG" != "no"; then LIBOPENSC_CFLAGS=`$OPENSC_CONFIG --cflags` LIBOPENSC_LIBS=`$OPENSC_CONFIG --libs` CPPFLAGS="$CPPFLAGS $LIBOPENSC_CFLAGS" LDFLAGS="$LDFLAGS $LIBOPENSC_LIBS" AC_DEFINE(SMARTCARD) AC_DEFINE(USE_OPENSC) SCARD_MSG="yes, using OpenSC" fifi# Check libraries needed by DNS fingerprint supportAC_SEARCH_LIBS(getrrsetbyname, resolv, [AC_DEFINE(HAVE_GETRRSETBYNAME)], [ # Needed by our getrrsetbyname() AC_SEARCH_LIBS(res_query, resolv) AC_SEARCH_LIBS(dn_expand, resolv) AC_MSG_CHECKING(if res_query will link) AC_TRY_LINK_FUNC(res_query, AC_MSG_RESULT(yes), [AC_MSG_RESULT(no) saved_LIBS="$LIBS" LIBS="$LIBS -lresolv" AC_MSG_CHECKING(for res_query in -lresolv) AC_LINK_IFELSE([#include <resolv.h>int main(){ res_query (0, 0, 0, 0, 0); return 0;} ], [LIBS="$LIBS -lresolv" AC_MSG_RESULT(yes)], [LIBS="$saved_LIBS" AC_MSG_RESULT(no)]) ]) AC_CHECK_FUNCS(_getshort _getlong) AC_CHECK_MEMBER(HEADER.ad, [AC_DEFINE(HAVE_HEADER_AD)],, [#include <arpa/nameser.h>]) ])# Check whether user wants Kerberos 5 supportKRB5_MSG="no"AC_ARG_WITH(kerberos5, [ --with-kerberos5=PATH Enable Kerberos 5 support], [ if test "x$withval" != "xno" ; then if test "x$withval" = "xyes" ; then KRB5ROOT="/usr/local" else KRB5ROOT=${withval} fi AC_DEFINE(KRB5) KRB5_MSG="yes" AC_MSG_CHECKING(for krb5-config) if test -x $KRB5ROOT/bin/krb5-config ; then KRB5CONF=$KRB5ROOT/bin/krb5-config AC_MSG_RESULT($KRB5CONF) AC_MSG_CHECKING(for gssapi support) if $KRB5CONF | grep gssapi >/dev/null ; then AC_MSG_RESULT(yes) AC_DEFINE(GSSAPI) k5confopts=gssapi else AC_MSG_RESULT(no) k5confopts="" fi K5CFLAGS="`$KRB5CONF --cflags $k5confopts`" K5LIBS="`$KRB5CONF --libs $k5confopts`" CPPFLAGS="$CPPFLAGS $K5CFLAGS" AC_MSG_CHECKING(whether we are using Heimdal) AC_TRY_COMPILE([ #include <krb5.h> ], [ char *tmp = heimdal_version; ], [ AC_MSG_RESULT(yes) AC_DEFINE(HEIMDAL) ], AC_MSG_RESULT(no) ) else AC_MSG_RESULT(no) CPPFLAGS="$CPPFLAGS -I${KRB5ROOT}/include" LDFLAGS="$LDFLAGS -L${KRB5ROOT}/lib" AC_MSG_CHECKING(whether we are using Heimdal) AC_TRY_COMPILE([ #include <krb5.h> ], [ char *tmp = heimdal_version; ], [ AC_MSG_RESULT(yes) AC_DEFINE(HEIMDAL) K5LIBS="-lkrb5 -ldes" K5LIBS="$K5LIBS -lcom_err -lasn1" AC_CHECK_LIB(roken, net_write, [K5LIBS="$K5LIBS -lroken"]) ], [ AC_MSG_RESULT(no) K5LIBS="-lkrb5 -lk5crypto -lcom_err" ] ) AC_SEARCH_LIBS(dn_expand, resolv) AC_CHECK_LIB(gssapi,gss_init_sec_context, [ AC_DEFINE(GSSAPI) K5LIBS="-lgssapi $K5LIBS" ], [ AC_CHECK_LIB(gssapi_krb5,gss_init_sec_context, [ AC_DEFINE(GSSAPI) K5LIBS="-lgssapi_krb5 $K5LIBS" ], AC_MSG_WARN([Cannot find any suitable gss-api library - build may fail]), $K5LIBS) ], $K5LIBS) AC_CHECK_HEADER(gssapi.h, , [ unset ac_cv_header_gssapi_h CPPFLAGS="$CPPFLAGS -I${KRB5ROOT}/include/gssapi" AC_CHECK_HEADERS(gssapi.h, , AC_MSG_WARN([Cannot find any suitable gss-api header - build may fail]) ) ] ) oldCPP="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -I${KRB5ROOT}/include/gssapi" AC_CHECK_HEADER(gssapi_krb5.h, , [ CPPFLAGS="$oldCPP" ]) fi if test ! -z "$need_dash_r" ; then LDFLAGS="$LDFLAGS -R${KRB5ROOT}/lib" fi if test ! -z "$blibpath" ; then blibpath="$blibpath:${KRB5ROOT}/lib" fi fi AC_CHECK_HEADERS(gssapi.h gssapi/gssapi.h) AC_CHECK_HEADERS(gssapi_krb5.h gssapi/gssapi_krb5.h) AC_CHECK_HEADERS(gssapi_generic.h gssapi/gssapi_generic.h) LIBS="$LIBS $K5LIBS" AC_SEARCH_LIBS(k_hasafs, kafs, AC_DEFINE(USE_AFS)) AC_SEARCH_LIBS(krb5_init_ets, $K5LIBS, AC_DEFINE(KRB5_INIT_ETS)) ])# Looking for programs, paths and filesPRIVSEP_PATH=/var/emptyAC_ARG_WITH(privsep-path, [ --with-privsep-path=xxx Path for privilege separation chroot (default=/var/empty)], [ if test "x$withval" != "$no" ; then PRIVSEP_PATH=$withval fi ])AC_SUBST(PRIVSEP_PATH)AC_ARG_WITH(xauth, [ --with-xauth=PATH Specify path to xauth program ], [ if test "x$withval" != "xno" ; then xauth_path=$withval fi ], [ TestPath="$PATH" TestPath="${TestPath}${PATH_SEPARATOR}/usr/X/bin" TestPath="${TestPath}${PATH_SEPARATOR}/usr/bin/X11" TestPath="${TestPath}${PATH_SEPARATOR}/usr/X11R6/bin" TestPath="${TestPath}${PATH_SEPARATOR}/usr/openwin/bin" AC_PATH_PROG(xauth_path, xauth, , $TestPath) if (test ! -z "$xauth_path" && test -x "/usr/openwin/bin/xauth") ; then xauth_path="/usr/openwin/bin/xauth" fi ])STRIP_OPT=-sAC_ARG_ENABLE(strip, [ --disable-strip Disable calling strip(1) on install], [ if test "x$enableval" = "xno" ; then STRIP_OPT= fi ])AC_SUBST(STRIP_OPT)if test -z "$xauth_path" ; then XAUTH_PATH="undefined" AC_SUBST(XAUTH_PATH)else AC_DEFINE_UNQUOTED(XAUTH_PATH, "$xauth_path") XAUTH_PATH=$xauth_path AC_SUBST(XAUTH_PATH)fi# 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")fiif test ! -z "$cross_compiling" && test "x$cross_compiling" = "xyes"; then AC_MSG_WARN([cross compiling: Disabling /dev/ptmx test]) disable_ptmx_check=yesfiif test -z "$no_dev_ptmx" ; then if test "x$disable_ptmx_check" != "xyes" ; then AC_CHECK_FILE("/dev/ptmx", [ AC_DEFINE_UNQUOTED(HAVE_DEV_PTMX) have_dev_ptmx=1 ] ) fifiif test ! -z "$cross_compiling" && test "x$cross_compiling" != "xyes"; then AC_CHECK_FILE("/dev/ptc", [ AC_DEFINE_UNQUOTED(HAVE_DEV_PTS_AND_PTC) have_dev_ptc=1 ] )else AC_MSG_WARN([cross compiling: Disabling /dev/ptc test])fi# Options from here on. Some of these are preset by platform aboveAC_ARG_WITH(mantype, [ --with-mantype=man|cat|doc Set man page type], [ case "$withval" in man|cat|doc) MANTYPE=$withval ;; *) AC_MSG_ERROR(invalid man type: $withval) ;; esac ])if test -z "$MANTYPE"; then TestPath="/usr/bin${PATH_SEPARATOR}/usr/ucb" AC_PATH_PROGS(NROFF, nroff awf, /bin/false, $TestPath) if ${NROFF} -mdoc ${srcdir}/ssh.1 >/dev/null 2>&1; then MANTYPE=doc elif ${NROFF} -man ${srcdir}/ssh.1 >/dev/null 2>&1; then MANTYPE=man else MANTYPE=cat fifiAC_SUBST(MANTYPE)if test "$MANTYPE" = "doc"; then mansubdir=man;else mansubdir=$MANTYPE;fiAC_SUBST(mansubdir)# Check whether to enable MD5 passwordsMD5_MSG="no"AC_A
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -