AC_PREREQ(2.52)
AC_COPYRIGHT([Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
Massachusetts Institute of Technology.
])
dnl
dnl Figure out the top of the source and build trees. We depend on localdir
dnl being a relative pathname; we could make it general later, but for now
dnl this is good enough.
dnl
dnl esyscmd([test -r aclocal.m4 && echo YES])
define([fileexists],[dnl
pushdef([x],esyscmd([if test -r $1; then echo YES;else echo NO; fi]))dnl
dnl Strip out newline.
ifelse(x,[YES
],[YES],x,[NO
],[NO],UNKNOWN)[]popdef([x])])
define([K5_TOPDIR],dnl
ifelse(fileexists(./aclocal.m4),YES,[.],[dnl
ifelse(fileexists(../aclocal.m4),YES,[..],[dnl
ifelse(fileexists(../../aclocal.m4),YES,[../..],[dnl
ifelse(fileexists(../../../aclocal.m4),YES,[../../..],[dnl
ifelse(fileexists(../../../../aclocal.m4),YES,[../../../..],[dnl
errprint(__file__:__line__: Cannot find path to aclocal.m4[
]) m4exit(1) dnl sometimes that does not work?
builtin(m4exit,1)UNKNOWN])])])])]))
dnl
AC_DEFUN(V5_SET_TOPDIR,[dnl
ac_reltopdir="K5_TOPDIR"
if test ! -r "$srcdir/K5_TOPDIR/aclocal.m4"; then
AC_MSG_ERROR([Configure could not determine the relative topdir])
fi
ac_topdir=$srcdir/$ac_reltopdir
ac_config_fragdir=$ac_reltopdir/config
# echo "Looking for $srcdir/$ac_config_fragdir"
if test -d "$srcdir/$ac_config_fragdir"; then
AC_CONFIG_AUX_DIR(K5_TOPDIR/config)
else
AC_MSG_ERROR([can not find config/ directory in $ac_reltopdir])
fi
])dnl
dnl
dnl Version info.
dnl
pushdef([x],esyscmd([sed -n 's/define([PL_KRB5_MAJOR_RELEASE],regexp(x,[KRB5_MAJOR_RELEASE=\(.*\)],[\1]))
ifelse(PL_KRB5_MAJOR_RELEASE,,[errprint([Can't determine KRB5_MAJOR_RELEASE value from patchlevel.h.
]) m4exit(1) builtin(m4exit,1)])
define([PL_KRB5_MINOR_RELEASE],regexp(x,[KRB5_MINOR_RELEASE=\(.*\)],[\1]))
ifelse(PL_KRB5_MINOR_RELEASE,,[errprint([Can't determine KRB5_MINOR_RELEASE value from patchlevel.h.
]) m4exit(1) builtin(m4exit,1)])
define([PL_KRB5_PATCHLEVEL],regexp(x,[KRB5_PATCHLEVEL=\(.*\)],[\1]))
ifelse(PL_KRB5_PATCHLEVEL,,[errprint([Can't determine KRB5_PATCHLEVEL value from patchlevel.h.
]) m4exit(1) builtin(m4exit,1)])
define([PL_KRB5_RELTAIL],regexp(x,[KRB5_RELTAIL="\(.*\)"],[\1]))
popdef([x])
define([K5_VERSION],PL_KRB5_MAJOR_RELEASE.PL_KRB5_MINOR_RELEASE[]ifelse(PL_KRB5_PATCHLEVEL,0,,.PL_KRB5_PATCHLEVEL)ifelse(PL_KRB5_RELTAIL,,,-PL_KRB5_RELTAIL))
define([K5_BUGADDR],krb5-bugs@mit.edu)
define([K5_AC_INIT],[AC_INIT(Kerberos 5, K5_VERSION, K5_BUGADDR, krb5)
AC_CONFIG_SRCDIR($1)
build_dynobj=no])
AC_DEFUN(CONFIG_RULES,[AC_REQUIRE([V5_SET_TOPDIR]) EXTRA_FILES=""
AC_SUBST(EXTRA_FILES)
WITH_CC AC_REQUIRE_CPP
if test -z "$LD" ; then LD=$CC; fi
AC_ARG_VAR(LD,[linker command [CC]])
AC_SUBST(LDFLAGS) WITH_KRB4 KRB5_AC_CHOOSE_ET KRB5_AC_CHOOSE_SS KRB5_AC_CHOOSE_DB AC_C_CONST WITH_NETLIB WITH_HESIOD KRB5_AC_MAINTAINER_MODE AC_ARG_PROGRAM CONFIG_RELTOPDIR=$ac_reltopdir
AC_SUBST(CONFIG_RELTOPDIR)
AC_SUBST(subdirs)
lib_frag=$srcdir/$ac_config_fragdir/lib.in
AC_SUBST_FILE(lib_frag)
libobj_frag=$srcdir/$ac_config_fragdir/libobj.in
AC_SUBST_FILE(libobj_frag)
libnover_frag=$srcdir/$ac_config_fragdir/libnover.in
AC_SUBST_FILE(libnover_frag)
KRB5_AC_PRAGMA_WEAK_REF
WITH_LDAP
KRB5_LIB_PARAMS
KRB5_AC_INITFINI
KRB5_AC_ENABLE_THREADS
KRB5_AC_FIND_DLOPEN
KRB5_AC_KEYRING_CCACHE
])
AC_DEFUN([KRB5_AC_MAINTAINER_MODE],
[AC_ARG_ENABLE([maintainer-mode],
AC_HELP_STRING([--enable-maintainer-mode],[enable rebuilding of source files, Makefiles, etc]),
USE_MAINTAINER_MODE=$enableval,
USE_MAINTAINER_MODE=no)
if test "$USE_MAINTAINER_MODE" = yes; then
MAINTAINER_MODE_TRUE=
MAINTAINER_MODE_FALSE=' AC_MSG_NOTICE(enabling maintainer mode)
else
MAINTAINER_MODE_TRUE=' MAINTAINER_MODE_FALSE=
fi
MAINT=$MAINTAINER_MODE_TRUE
AC_SUBST(MAINTAINER_MODE_TRUE)
AC_SUBST(MAINTAINER_MODE_FALSE)
AC_SUBST(MAINT)
])
AC_DEFUN([KRB5_AC_INITFINI],[
AC_ARG_ENABLE([delayed-initialization],
AC_HELP_STRING([--disable-delayed-initialization],initialize library code when loaded @<:@delay until first use@:>@), , enable_delayed_initialization=yes)
case "$enable_delayed_initialization" in
yes)
AC_DEFINE(DELAY_INITIALIZER,1,[Define if library initialization should be delayed until first use]) ;;
no) ;;
*) AC_MSG_ERROR(invalid option $enable_delayed_initialization for delayed-initialization) ;;
esac
KRB5_AC_GCC_ATTRS
if test -z "$use_linker_init_option" ; then
AC_MSG_ERROR(ran INITFINI before checking shlib.conf?)
fi
if test "$use_linker_init_option" = yes; then
AC_DEFINE(USE_LINKER_INIT_OPTION,1,[Define if link-time options for library initialization will be used])
fi
if test "$use_linker_fini_option" = yes; then
AC_DEFINE(USE_LINKER_FINI_OPTION,1,[Define if link-time options for library finalization will be used])
fi
])
AC_DEFUN([KRB5_AC_FIND_DLOPEN],[
old_LIBS="$LIBS"
DL_LIB=
AC_SEARCH_LIBS(dlopen, dl, [
if test "$ac_cv_search_dlopen" != "none required"; then
DL_LIB=$ac_cv_search_dlopen
fi
LIBS="$old_LIBS"
AC_DEFINE(USE_DLOPEN,1,[Define if dlopen should be used])])
AC_SUBST(DL_LIB)
])
AC_DEFUN([KRB5_AC_ENABLE_THREADS],[
AC_ARG_ENABLE([thread-support],
AC_HELP_STRING([--disable-thread-support],don't enable thread support @<:@enabled@:>@), , enable_thread_support=yes)
if test "$enable_thread_support" = yes ; then
AC_MSG_NOTICE(enabling thread support)
AC_DEFINE(ENABLE_THREADS,1,[Define if thread support enabled])
fi
if test "$enable_thread_support" = yes; then
ACX_PTHREAD(,[AC_MSG_ERROR([cannot determine options for enabling thread support; try --disable-thread-support])])
AC_MSG_NOTICE(PTHREAD_CC = $PTHREAD_CC)
AC_MSG_NOTICE(PTHREAD_CFLAGS = $PTHREAD_CFLAGS)
AC_MSG_NOTICE(PTHREAD_LIBS = $PTHREAD_LIBS)
case "${host_os}" in
aix* | osf*)
LIBS="$LIBS $PTHREAD_LIBS"
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
PTHREAD_LIBS=
PTHREAD_CFLAGS=
;;
hpux*)
PTHREAD_CFLAGS="-D_REENTRANT -D_THREAD_SAFE -D_POSIX_C_SOURCE=199506L"
;;
solaris*)
if test "$GCC" = yes ; then
PTHREAD_CFLAGS="-D_REENTRANT -pthreads"
fi
;;
esac
THREAD_SUPPORT=1
else
PTHREAD_CC="$CC"
PTHREAD_CFLAGS=""
PTHREAD_LIBS=""
THREAD_SUPPORT=0
fi
AC_SUBST(THREAD_SUPPORT)
AC_CHECK_FUNCS(pthread_once pthread_rwlock_init)
old_CC="$CC"
test "$PTHREAD_CC" != "" && test "$ac_cv_c_compiler_gnu" = no && CC=$PTHREAD_CC
old_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
AC_SUBST(PTHREAD_CFLAGS)
old_LIBS="$LIBS"
LIBS="$PTHREAD_LIBS $LIBS"
AC_MSG_NOTICE(rechecking with PTHREAD_... options)
AC_CHECK_LIB(c, pthread_rwlock_init,
[AC_DEFINE(HAVE_PTHREAD_RWLOCK_INIT_IN_THREAD_LIB,1,[Define if pthread_rwlock_init is provided in the thread library.])])
LIBS="$old_LIBS"
CC="$old_CC"
CFLAGS="$old_CFLAGS"
])
AC_DEFUN([DECLARE_SYS_ERRLIST],
[AC_CACHE_CHECK([for sys_errlist declaration], krb5_cv_decl_sys_errlist,
[AC_TRY_COMPILE([krb5_cv_decl_sys_errlist=yes, krb5_cv_decl_sys_errlist=no)])
if test $krb5_cv_decl_sys_errlist = yes; then
AC_DEFINE(SYS_ERRLIST_DECLARED,1,[Define if sys_errlist is defined in errno.h])
AC_DEFINE(HAVE_SYS_ERRLIST,1,[Define if sys_errlist in libc])
else
AC_CACHE_CHECK([for sys_errlist in libc], krb5_cv_var_sys_errlist,
[AC_TRY_LINK([extern int sys_nerr;], [if (1+sys_nerr < 0) return 1;],
krb5_cv_var_sys_errlist=yes, krb5_cv_var_sys_errlist=no;)])
if test $krb5_cv_var_sys_errlist = yes; then
AC_DEFINE(HAVE_SYS_ERRLIST,1,[Define if sys_errlist in libc])
AC_DEFINE(NEED_SYS_ERRLIST,1,[Define if need to declare sys_errlist])
else
AC_MSG_WARN([sys_errlist is neither in errno.h nor in libc])
fi
fi])
AC_DEFUN(CHECK_SIGPROCMASK,[
AC_MSG_CHECKING([for use of sigprocmask])
AC_CACHE_VAL(krb5_cv_func_sigprocmask_use,
[AC_TRY_LINK([ krb5_cv_func_sigprocmask_use=yes,
AC_TRY_LINK([ krb5_cv_func_sigprocmask_use=no, krb5_cv_func_sigprocmask_use=yes))])
AC_MSG_RESULT($krb5_cv_func_sigprocmask_use)
if test $krb5_cv_func_sigprocmask_use = yes; then
AC_DEFINE(USE_SIGPROCMASK,1,[Define if sigprocmask should be used])
fi
])AC_DEFUN(AC_PROG_ARCHIVE, [AC_CHECK_PROG(ARCHIVE, ar, ar cqv, false)])AC_DEFUN(AC_PROG_ARCHIVE_ADD, [AC_CHECK_PROG(ARADD, ar, ar cruv, false)])AC_DEFUN(CHECK_DIRENT,[
AC_CHECK_HEADER(dirent.h,AC_DEFINE(USE_DIRENT_H,1,[Define if you have dirent.h functionality]))])AC_DEFUN(CHECK_WAIT_TYPE,[
AC_MSG_CHECKING([if argument to wait is int *])
AC_CACHE_VAL(krb5_cv_struct_wait,
[AC_TRY_COMPILE([extern pid_t wait(int *);],[], krb5_cv_struct_wait=no,[AC_TRY_COMPILE(
[ WEXITSTATUS (i);
],
krb5_cv_struct_wait=yes, krb5_cv_struct_wait=no)])])
AC_MSG_RESULT($krb5_cv_struct_wait)
if test $krb5_cv_struct_wait = no; then
AC_DEFINE(WAIT_USES_INT,1,[Define if wait takes int as a argument])
fi
])AC_DEFUN(CHECK_SIGNALS,[
AC_CHECK_FUNC(sigprocmask,
AC_MSG_CHECKING(for sigset_t and POSIX_SIGNALS)
AC_CACHE_VAL(krb5_cv_type_sigset_t,
[AC_TRY_COMPILE(
[[sigset_t x],
krb5_cv_type_sigset_t=yes, krb5_cv_type_sigset_t=no)])
AC_MSG_RESULT($krb5_cv_type_sigset_t)
if test $krb5_cv_type_sigset_t = yes; then
AC_DEFINE(POSIX_SIGNALS,1,[Define if POSIX signal handling is used])
fi
)])AC_DEFUN(KRB5_SIGTYPE,[
AC_MSG_CHECKING([POSIX signal handlers])
AC_CACHE_VAL(krb5_cv_has_posix_signals,
[AC_TRY_COMPILE(
[extern void (*signal ()) ();], [],
krb5_cv_has_posix_signals=yes, krb5_cv_has_posix_signals=no)])
AC_MSG_RESULT($krb5_cv_has_posix_signals)
if test $krb5_cv_has_posix_signals = yes; then
stype=void
AC_DEFINE(POSIX_SIGTYPE, 1, [Define if POSIX signal handlers are used])
else
if test $ac_cv_type_signal = void; then
stype=void
else
stype=int
fi
fi
AC_DEFINE_UNQUOTED(krb5_sigtype, $stype, [Define krb5_sigtype to type of signal handler])])AC_DEFUN(CHECK_SETJMP,[
AC_CHECK_FUNC(sigsetjmp,
AC_MSG_CHECKING(for sigjmp_buf)
AC_CACHE_VAL(krb5_cv_struct_sigjmp_buf,
[AC_TRY_COMPILE(
[krb5_cv_struct_sigjmp_buf=yes,krb5_cv_struct_sigjmp_buf=no)])
AC_MSG_RESULT($krb5_cv_struct_sigjmp_buf)
if test $krb5_cv_struct_sigjmp_buf = yes; then
AC_DEFINE(POSIX_SETJMP,1,[Define if setjmp indicates POSIX interface])
fi
)])AC_DEFUN(KRB5_AC_INET6,[
AC_CHECK_HEADERS(sys/types.h sys/socket.h netinet/in.h netdb.h)
AC_CHECK_FUNCS(inet_ntop inet_pton getnameinfo)
AC_MSG_CHECKING(for getaddrinfo)
AC_CACHE_VAL(ac_cv_func_getaddrinfo,
[AC_TRY_LINK([struct addrinfo *ai;
getaddrinfo("kerberos.mit.edu", "echo", 0, &ai);
], ac_cv_func_getaddrinfo=yes, ac_cv_func_getaddrinfo=no)])
AC_MSG_RESULT($ac_cv_func_getaddrinfo)
if test $ac_cv_func_getaddrinfo = yes; then
AC_DEFINE(HAVE_GETADDRINFO,1,[Define if you have the getaddrinfo function])
fi
AC_REQUIRE([KRB5_SOCKADDR_SA_LEN])AC_ARG_ENABLE([ipv6], , AC_MSG_WARN(enable/disable-ipv6 option is deprecated))KRB5_AC_CHECK_INET6
])AC_DEFUN(KRB5_AC_CHECK_TYPE_WITH_HEADERS,[
AC_MSG_CHECKING(for type $1)
changequote(<<,>>)varname=`echo $1 | sed 's,[ -],_,g'`
changequote([,])AC_CACHE_VAL(krb5_cv_$varname,[
AC_TRY_COMPILE([$2],[ $1 foo; ], eval krb5_cv_$varname=yes, eval krb5_cv_$varname=no)])
eval x="\$krb5_cv_$varname"
AC_MSG_RESULT($x)
if eval test "$x" = yes ; then
AC_DEFINE_UNQUOTED(HAVE_`echo $varname | tr '[[[a-z]]]' '[[[A-Z]]]'`)
fi])
AC_DEFUN(KRB5_AC_CHECK_SOCKADDR_STORAGE,[
KRB5_AC_CHECK_TYPE_WITH_HEADERS(struct sockaddr_storage, [
])])AC_DEFUN(KRB5_AC_CHECK_INET6,[
AC_REQUIRE([KRB5_AC_CHECK_SOCKADDR_STORAGE])AC_MSG_CHECKING(for IPv6 compile-time support)
AC_CACHE_VAL(krb5_cv_inet6,[
if test "$ac_cv_func_inet_ntop" != "yes" ; then
krb5_cv_inet6=no
else
AC_TRY_COMPILE([
],[
struct sockaddr_in6 in;
AF_INET6;
IN6_IS_ADDR_LINKLOCAL (&in.sin6_addr);
],krb5_cv_inet6=yes,krb5_cv_inet6=no)])
fi
AC_MSG_RESULT($krb5_cv_inet6)
if test "$krb5_cv_inet6" = no && test "$ac_cv_func_inet_ntop" = yes; then
AC_MSG_CHECKING(for IPv6 compile-time support with -DINET6)
AC_CACHE_VAL(krb5_cv_inet6_with_dinet6,[
old_CC="$CC"
CC="$CC -DINET6"
AC_TRY_COMPILE([
],[
struct sockaddr_in6 in;
AF_INET6;
IN6_IS_ADDR_LINKLOCAL (&in.sin6_addr);
],krb5_cv_inet6_with_dinet6=yes,krb5_cv_inet6_with_dinet6=no)
CC="$old_CC"])
AC_MSG_RESULT($krb5_cv_inet6_with_dinet6)
fi
if test $krb5_cv_inet6 = yes || test "$krb5_cv_inet6_with_dinet6" = yes; then
if test "$krb5_cv_inet6_with_dinet6" = yes; then
AC_DEFINE(INET6,1,[May need to be defined to enable IPv6 support, for example on IRIX])
fi
AC_DEFINE(KRB5_USE_INET6,1,[Define if we should compile in IPv6 support (even if we can't use it at run time)])
fi
])AC_DEFUN(K5_AC_CHECK_FILE,
[AC_REQUIRE([AC_PROG_CC])ac_safe=`echo "$1" | sed 'y%./+-%__p_%'`
AC_MSG_CHECKING([for $1])
AC_CACHE_VAL(ac_cv_file_$ac_safe,
[if test "$cross_compiling" = yes; then
errprint(__file__:__line__: warning: Cannot check for file existence when cross compiling
) AC_MSG_ERROR(Cannot check for file existence when cross compiling)
else
if test -r $1; then
eval "ac_cv_file_$ac_safe=yes"
else
eval "ac_cv_file_$ac_safe=no"
fi
fi])if eval "test \"`echo '$ac_cv_file_'$ac_safe`\" = yes"; then
AC_MSG_RESULT(yes)
ifelse([$2], , :, [$2])
else
AC_MSG_RESULT(no)
ifelse([$3], , , [$3
np])fi
])
AC_DEFUN(K5_AC_CHECK_FILES,
[AC_REQUIRE([AC_PROG_CC])for ac_file in $1
do
K5_AC_CHECK_FILE($ac_file,
[changequote(, ) ac_tr_file=HAVE`echo $ac_file | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
changequote([, ]) AC_DEFINE_UNQUOTED($ac_tr_file) $2], $3)done
])
AC_DEFUN(WITH_KRB4,[
AC_ARG_WITH([krb4],
[ --without-krb4 don't include Kerberos V4 backwards compatibility
--with-krb4 use V4 libraries included with V5 (default)
--with-krb4=KRB4DIR use preinstalled V4 libraries],
,
withval=yes
)if test $withval = no; then
AC_MSG_NOTICE(no krb4 support)
KRB4_LIB=
KRB4_DEPLIB=
KRB4_INCLUDES=
KRB4_LIBPATH=
KRB_ERR_H_DEP=
krb5_cv_build_krb4_libs=no
krb5_cv_krb4_libdir=
else
AC_DEFINE([KRB5_KRB4_COMPAT], 1, [Define this if building with krb4 compat])
if test $withval = yes; then
AC_MSG_NOTICE(enabling built in krb4 support)
KRB4_DEPLIB='$(TOPLIBD)/libkrb4$(DEPLIBEXT)'
KRB4_LIB=-lkrb4
KRB4_INCLUDES='-I$(SRCTOP)/include/kerberosIV -I$(BUILDTOP)/include/kerberosIV'
KRB4_LIBPATH=
KRB_ERR_H_DEP='$(BUILDTOP)/include/kerberosIV/krb_err.h'
krb5_cv_build_krb4_libs=yes
krb5_cv_krb4_libdir=
else
AC_MSG_NOTICE(using preinstalled krb4 in $withval)
KRB4_LIB="-lkrb"
KRB4_INCLUDES="-I$withval/include"
KRB4_LIBPATH="-L$withval/lib"
KRB_ERR_H_DEP=
krb5_cv_build_krb4_libs=no
krb5_cv_krb4_libdir="$withval/lib"
fi
fi
AC_SUBST(KRB4_INCLUDES)
AC_SUBST(KRB4_LIBPATH)
AC_SUBST(KRB4_LIB)
AC_SUBST(KRB4_DEPLIB)
AC_SUBST(KRB_ERR_H_DEP)
DES425_DEPLIB='$(TOPLIBD)/libdes425$(DEPLIBEXT)'
DES425_LIB=-ldes425
AC_SUBST(DES425_DEPLIB)
AC_SUBST(DES425_LIB)
])AC_DEFUN(KRB5_AC_CHECK_FOR_CFLAGS,[
AC_BEFORE([$0],[AC_PROG_CC])
krb5_ac_cflags_set=${CFLAGS+set}
])
AC_DEFUN(WITH_CC,[AC_REQUIRE([KRB5_AC_CHECK_FOR_CFLAGS])AC_REQUIRE([AC_PROG_CC])krb5_cv_prog_gcc=$ac_cv_c_compiler_gnu
if test $ac_cv_c_compiler_gnu = yes ; then
HAVE_GCC=yes
else HAVE_GCC=
fi
AC_SUBST(HAVE_GCC)
AC_CACHE_CHECK([for GNU linker], krb5_cv_prog_gnu_ld,
[krb5_cv_prog_gnu_ld=no
if test "$GCC" = yes; then
if AC_TRY_COMMAND([$CC -Wl,-v 2>&1 | grep "GNU ld" > /dev/null]); then
krb5_cv_prog_gnu_ld=yes
fi
fi])
extra_gcc_warn_opts="-Wall -Wmissing-prototypes -Wcast-qual \
-Wcast-align -Wconversion -Wshadow"
if test "$GCC" = yes ; then
if test "x$krb5_ac_cflags_set" = xset ; then
AC_MSG_NOTICE(not adding extra gcc warning flags because CFLAGS was set)
else
AC_MSG_NOTICE(adding extra warning flags for gcc)
CFLAGS="$CFLAGS $extra_gcc_warn_opts"
if test "`uname -s`" = Darwin ; then
AC_MSG_NOTICE(skipping pedantic warnings on Darwin)
elif test "`uname -s`" = Linux ; then
AC_MSG_NOTICE(skipping pedantic warnings on Linux)
else
CFLAGS="$CFLAGS -pedantic"
fi
fi
if test "`uname -s`" = Darwin ; then
# Someday this should be a feature test.
# One current (Jaguar = OS 10.2) problem:
# Archive library with foo.o undef sym X and bar.o common sym X,
# if foo.o is pulled in at link time, bar.o may not be, causing
# the linker to complain.
# Dynamic library problems too?
case "$CC $CFLAGS" in
*-fcommon*) ;; # why someone would do this, I don't know
*-fno-common*) ;; *)
AC_MSG_NOTICE(disabling the use of common storage on Darwin)
CFLAGS="$CFLAGS -fno-common"
;;
esac
case "$LD $LDFLAGS" in
*-Wl,-search_paths_first*) ;;
*) LDFLAGS="${LDFLAGS} -Wl,-search_paths_first" ;;
esac
fi
else
if test "`uname -s`" = AIX ; then
case "$CC $CFLAGS" in
*-qhalt=*) ;;
*)
CFLAGS="$CFLAGS -qhalt=e"
AC_MSG_NOTICE(adding -qhalt=e for better error reporting)
;;
esac
case "$CC $CFLAGS" in
*-O*) ;;
*)
CFLAGS="$CFLAGS -O"
AC_MSG_NOTICE(adding -O for inline thread-support function elimination)
;;
esac
fi
fi
])AC_DEFUN(HAVE_YYLINENO,[AC_REQUIRE_CPP()AC_REQUIRE([AC_PROG_LEX])AC_MSG_CHECKING([for yylineno declaration])
AC_CACHE_VAL(krb5_cv_type_yylineno,
echo '%%
%%' | ${LEX} -t > conftest.out
if egrep yylineno conftest.out >/dev/null 2>&1; then
krb5_cv_type_yylineno=yes
else
krb5_cv_type_yylineno=no
fi
rm -f conftest.out)
AC_MSG_RESULT($krb5_cv_type_yylineno)
if test $krb5_cv_type_yylineno = no; then
AC_DEFINE(NO_YYLINENO, 1, [Define if lex produes code with yylineno])
fi
])AC_DEFUN(K5_GEN_MAKEFILE,[ifelse($1, ,[_K5_GEN_MAKEFILE(.,$2)],[_K5_GEN_MAKEFILE($1,$2)])
])
AC_DEFUN(_K5_GEN_MAKEFILE,[AC_CONFIG_FILES([$1/Makefile:$srcdir/]K5_TOPDIR[/config/pre.in:$1/Makefile.in:$srcdir/]K5_TOPDIR[/config/post.in])
])
AC_DEFUN(K5_GEN_FILE,[AC_CONFIG_FILES($1)])AC_DEFUN(K5_AC_OUTPUT,[AC_OUTPUT])AC_DEFUN(V5_AC_OUTPUT_MAKEFILE,
[ifelse($1, , [_V5_AC_OUTPUT_MAKEFILE(.,$2)],[_V5_AC_OUTPUT_MAKEFILE($1,$2)])])
define(_V5_AC_OUTPUT_MAKEFILE,
[ifelse($2, , ,AC_CONFIG_FILES($2))
AC_FOREACH([DIR], [$1], [AC_CONFIG_FILES(DIR[/Makefile:$srcdir/]K5_TOPDIR[/config/pre.in:]DIR[/Makefile.in:$srcdir/]K5_TOPDIR[/config/post.in])])
K5_AC_OUTPUT])AC_DEFUN([KRB5_SOCKADDR_SA_LEN],[ AC_CHECK_MEMBER(struct sockaddr.sa_len,
AC_DEFINE(HAVE_SA_LEN,1,[Define if struct sockaddr contains sa_len])
,,[AC_DEFUN(CHECK_UTMP,[
AC_CHECK_MEMBERS([struct utmp.ut_pid, struct utmp.ut_type, struct utmp.ut_host, struct utmp.ut_exit],,,
[
if test $ac_cv_member_struct_utmp_ut_pid = no; then
AC_DEFINE(NO_UT_PID,1,[Define if ut_pid field not found])
fi
if test $ac_cv_member_struct_utmp_ut_type = no; then
AC_DEFINE(NO_UT_TYPE,1,[Define if ut_type field not found])
fi
if test $ac_cv_member_struct_utmp_ut_host = no; then
AC_DEFINE(NO_UT_HOST,1,[Define if ut_host field not found])
fi
if test $ac_cv_member_struct_utmp_ut_exit = no; then
AC_DEFINE(NO_UT_EXIT,1,[Define if ut_exit field not found])
fi
AC_CHECK_FUNCS(setutent setutxent updwtmp updwtmpx)
])AC_DEFUN(WITH_NETLIB,[
AC_ARG_WITH([netlib],
AC_HELP_STRING([--with-netlib=LIBS], use user defined resolver library),
[ if test "$withval" = yes -o "$withval" = no ; then
AC_MSG_RESULT("netlib will link with C library resolver only")
else
LIBS="$LIBS $withval"
AC_MSG_RESULT("netlib will use \'$withval\'")
fi
],[AC_LIBRARY_NET]
)])AC_DEFUN(KRB5_AC_NEED_DAEMON, [
KRB5_NEED_PROTO([AC_DEFUN(AC_HEADER_STDARG, [
AC_MSG_CHECKING([for stdarg.h])
AC_CACHE_VAL(ac_cv_header_stdarg_h,
[AC_TRY_COMPILE([ } /* ac_try_compile will have started a function body */
int aoeu (char *format, ...) {
va_list v;
int i;
va_start (v, format);
i = va_arg (v, int);
va_end (v);
],ac_cv_header_stdarg_h=yes,ac_cv_header_stdarg_h=no)])AC_MSG_RESULT($ac_cv_header_stdarg_h)
if test $ac_cv_header_stdarg_h = yes; then
AC_DEFINE(HAVE_STDARG_H, 1, [Define if stdarg available and compiles])
else
AC_MSG_CHECKING([for varargs.h])
AC_CACHE_VAL(ac_cv_header_varargs_h,
[AC_TRY_COMPILE([ } /* ac_try_compile will have started a function body */
int aoeu (va_alist) va_dcl {
va_list v;
int i;
va_start (v);
i = va_arg (v, int);
va_end (v);
],ac_cv_header_varargs_h=yes,ac_cv_header_varargs_h=no)])AC_MSG_RESULT($ac_cv_header_varargs_h)
if test $ac_cv_header_varargs_h = yes; then
AC_DEFINE(HAVE_VARARGS_H, 1, [Define if varargs available and compiles])
else
AC_MSG_ERROR(Neither stdarg nor varargs compile?)
fi
fi
])
AC_DEFUN(KRB5_AC_NEED_LIBGEN,[
AC_REQUIRE([AC_PROG_CC])AC_MSG_CHECKING(for working regcomp)
AC_CACHE_VAL(ac_cv_func_regcomp,[
AC_TRY_RUN([
regex_t x; regmatch_t m;
int main() { return regcomp(&x,"pat.*",0) || regexec(&x,"pattern",1,&m,0); }
], ac_cv_func_regcomp=yes, ac_cv_func_regcomp=no, AC_MSG_ERROR([Cannot test regcomp when cross compiling]))])
AC_MSG_RESULT($ac_cv_func_regcomp)
test $ac_cv_func_regcomp = yes && AC_DEFINE(HAVE_REGCOMP,1,[Define if regcomp exists and functions])
if test $ac_cv_func_regcomp = no; then
save_LIBS="$LIBS"
LIBS=-lgen
AC_CHECK_FUNCS(compile step)
LIBS="$save_LIBS"
AC_CHECK_LIB(gen, compile, GEN_LIB=-lgen, GEN_LIB=)
AC_SUBST(GEN_LIB)
fi
])
AC_DEFUN(KRB5_AC_REGEX_FUNCS,[
AC_CHECK_FUNCS(re_comp re_exec regexec)
AC_REQUIRE([KRB5_AC_NEED_LIBGEN])])AC_DEFUN(AC_KRB5_TCL_FIND_CONFIG,[
AC_REQUIRE([KRB5_LIB_AUX])AC_MSG_CHECKING(for tclConfig.sh)
if test -r "$tcl_dir/lib/tclConfig.sh" ; then
tcl_conf="$tcl_dir/lib/tclConfig.sh"
elif test -r "$tcl_dir/tclConfig.sh" ; then
tcl_conf="$tcl_dir/tclConfig.sh"
elif test -r "$tcl_dir/../tclConfig.sh" ; then
tcl_conf="$tcl_dir/../tclConfig.sh"
else
tcl_conf=
lib="$tcl_dir/lib"
changequote(<<,>>) for d in "$lib" "$lib"/tcl7.[0-9] "$lib"/tcl8.[0-9] ; do
if test -r "$d/tclConfig.sh" ; then
tcl_conf="$tcl_conf $d/tclConfig.sh"
fi
done
changequote([,])fi
if test -n "$tcl_conf" ; then
AC_MSG_RESULT($tcl_conf)
else
AC_MSG_RESULT(not found)
fi
tcl_ok_conf=
tcl_vers_maj=
tcl_vers_min=
old_CPPFLAGS=$CPPFLAGS
old_LIBS=$LIBS
old_LDFLAGS=$LDFLAGS
if test -n "$tcl_conf" ; then
for file in $tcl_conf ; do
TCL_MAJOR_VERSION=x ; TCL_MINOR_VERSION=x
AC_MSG_CHECKING(Tcl info in $file)
. $file
v=$TCL_MAJOR_VERSION.$TCL_MINOR_VERSION
if test -z "$tcl_vers_maj" \
|| test "$tcl_vers_maj" -lt "$TCL_MAJOR_VERSION" \
|| test "$tcl_vers_maj" = "$TCL_MAJOR_VERSION" -a "$tcl_vers_min" -lt "$TCL_MINOR_VERSION" ; then
for incdir in "$TCL_PREFIX/include/tcl$v" "$TCL_PREFIX/include" ; do
if test -r "$incdir/tcl.h" -o -r "$incdir/tcl/tcl.h" ; then
CPPFLAGS="$old_CPPFLAGS -I$incdir"
break
fi
done
LIBS="$old_LIBS `eval echo x $TCL_LIB_SPEC $TCL_LIBS | sed 's/^x//'`"
LDFLAGS="$old_LDFLAGS $TCL_LD_FLAGS"
AC_TRY_LINK( , [Tcl_CreateInterp ();],
tcl_ok_conf=$file
tcl_vers_maj=$TCL_MAJOR_VERSION
tcl_vers_min=$TCL_MINOR_VERSION
AC_MSG_RESULT($v - working),
AC_MSG_RESULT($v - compilation failed)
)
else
AC_MSG_RESULT(older version $v)
fi
done
fi
CPPFLAGS=$old_CPPFLAGS
LIBS=$old_LIBS
LDFLAGS=$old_LDFLAGS
tcl_header=no
tcl_lib=no
if test -n "$tcl_ok_conf" ; then
. $tcl_ok_conf
TCL_INCLUDES=
for incdir in "$TCL_PREFIX/include/tcl$v" "$TCL_PREFIX/include" ; do
if test -r "$incdir/tcl.h" -o -r "$incdir/tcl/tcl.h" ; then
if test "$incdir" != "/usr/include" ; then
TCL_INCLUDES=-I$incdir
fi
break
fi
done
eval TCL_LIBS='"'$TCL_LIB_SPEC $TCL_LIBS $TCL_DL_LIBS'"'
TCL_LIBPATH="-L$TCL_EXEC_PREFIX/lib"
TCL_RPATH=":$TCL_EXEC_PREFIX/lib"
if test "$DEPLIBEXT" != "$SHLIBEXT" && test -n "$RPATH_FLAG"; then
TCL_MAYBE_RPATH='$(RPATH_FLAG)'"$TCL_EXEC_PREFIX/lib$RPATH_TAIL"
else
TCL_MAYBE_RPATH=
fi
CPPFLAGS="$old_CPPFLAGS $TCL_INCLUDES"
AC_CHECK_HEADER(tcl.h,AC_DEFINE(HAVE_TCL_H,1,[Define if tcl.h is available]) tcl_header=yes)
if test $tcl_header=no; then
AC_CHECK_HEADER(tcl/tcl.h,AC_DEFINE(HAVE_TCL_TCL_H,1,[Define if tcl/tcl.h is available]) tcl_header=yes)
fi
CPPFLAGS="$old_CPPFLAGS"
tcl_lib=yes
else
TCL_LIBS=
fi
AC_SUBST(TCL_INCLUDES)
AC_SUBST(TCL_LIBS)
AC_SUBST(TCL_LIBPATH)
AC_SUBST(TCL_RPATH)
AC_SUBST(TCL_MAYBE_RPATH)
])AC_DEFUN(AC_KRB5_TCL_TRYOLD, [
AC_REQUIRE([KRB5_AC_FIND_DLOPEN])
AC_MSG_WARN([trying old tcl search code])
if test "$with_tcl" != yes -a "$with_tcl" != no; then
TCL_INCLUDES=-I$with_tcl/include
TCL_LIBPATH=-L$with_tcl/lib
TCL_RPATH=:$with_tcl/lib
fi
if test "$with_tcl" != no ; then
krb5_save_CPPFLAGS="$CPPFLAGS"
krb5_save_LDFLAGS="$LDFLAGS"
CPPFLAGS="$CPPFLAGS $TCL_INCLUDES"
LDFLAGS="$LDFLAGS $TCL_LIBPATH"
tcl_header=no
AC_CHECK_HEADER(tcl.h,AC_DEFINE(HAVE_TCL_H,1,[Define if tcl.h found]) tcl_header=yes)
if test $tcl_header=no; then
AC_CHECK_HEADER(tcl/tcl.h,AC_DEFINE(HAVE_TCL_TCL_H,1,[Define if tcl/tcl.h found]) tcl_header=yes)
fi
if test $tcl_header = yes ; then
tcl_lib=no
if test $tcl_lib = no; then
AC_CHECK_LIB(tcl8.0, Tcl_CreateCommand,
TCL_LIBS="$TCL_LIBS -ltcl8.0 -lm $DL_LIB $LIBS"
tcl_lib=yes,,-lm $DL_LIB)
fi
if test $tcl_lib = no; then
AC_CHECK_LIB(tcl7.6, Tcl_CreateCommand,
TCL_LIBS="$TCL_LIBS -ltcl7.6 -lm $DL_LIB $LIBS"
tcl_lib=yes,,-lm $DL_LIB)
fi
if test $tcl_lib = no; then
AC_CHECK_LIB(tcl7.5, Tcl_CreateCommand,
TCL_LIBS="$TCL_LIBS -ltcl7.5 -lm $DL_LIB $LIBS"
tcl_lib=yes,,-lm $DL_LIB)
fi
if test $tcl_lib = no ; then
AC_CHECK_LIB(tcl, Tcl_CreateCommand,
TCL_LIBS="$TCL_LIBS -ltcl -lm $DL_LIB $LIBS"
tcl_lib=yes,,-lm $DL_LIB)
fi
if test $tcl_lib = no ; then
AC_MSG_WARN("tcl.h found but not library")
fi
else
AC_MSG_WARN(Could not find Tcl which is needed for the kadm5 tests)
TCL_LIBS=
fi
CPPFLAGS="$krb5_save_CPPFLAGS"
LDFLAGS="$krb5_save_LDFLAGS"
AC_SUBST(TCL_INCLUDES)
AC_SUBST(TCL_LIBS)
AC_SUBST(TCL_LIBPATH)
AC_SUBST(TCL_RPATH)
else
AC_MSG_RESULT("Not looking for Tcl library")
fi
])AC_DEFUN(AC_KRB5_TCL,[
TCL_INCLUDES=
TCL_LIBPATH=
TCL_RPATH=
TCL_LIBS=
TCL_WITH=
tcl_dir=
AC_ARG_WITH(tcl,
[ --with-tcl=path where Tcl resides], , with_tcl=try)
if test "$with_tcl" = no ; then
true
elif test "$with_tcl" = yes -o "$with_tcl" = try ; then
tcl_dir=/usr
if test ! -r /usr/lib/tclConfig.sh; then
cat >> conftest <<\EOF
puts "tcl_dir=$tcl_library"
EOF
if tclsh conftest >conftest.out 2>/dev/null; then
if grep tcl_dir= conftest.out >/dev/null 2>&1; then
t=`sed s/tcl_dir=// conftest.out`
tcl_dir=$t
fi
fi rm -f conftest conftest.out
fi else
tcl_dir=$with_tcl
fi
if test "$with_tcl" != no ; then
AC_KRB5_TCL_FIND_CONFIG
if test $tcl_lib = no ; then
if test "$with_tcl" != try ; then
AC_KRB5_TCL_TRYOLD
else
AC_MSG_WARN(Could not find Tcl which is needed for some tests)
fi
fi
fi
if test "$with_tcl" != no -a "$with_tcl" != try ; then
if test "$tcl_header $tcl_lib" != "yes yes" ; then
AC_MSG_ERROR(Could not find Tcl)
fi
fi
])
AC_DEFUN(WITH_HESIOD,
[AC_ARG_WITH(hesiod, AC_HELP_STRING(--with-hesiod[=path], compile with hesiod support @<:@omitted@:>@),
hesiod=$with_hesiod, with_hesiod=no)
if test "$with_hesiod" != "no"; then
HESIOD_DEFS=-DHESIOD
AC_CHECK_LIB(resolv, res_send, res_lib=-lresolv)
if test "$hesiod" != "yes"; then
HESIOD_LIBS="-L${hesiod}/lib -lhesiod $res_lib"
else
HESIOD_LIBS="-lhesiod $res_lib"
fi
else
HESIOD_DEFS=
HESIOD_LIBS=
fi
AC_SUBST(HESIOD_DEFS)
AC_SUBST(HESIOD_LIBS)])
AC_DEFUN(KRB5_BUILD_LIBRARY,
[KRB5_BUILD_LIBRARY_WITH_DEPS
SHLIB_EXPFLAGS=])
AC_DEFUN(KRB5_AC_FORCE_STATIC,[AC_BEFORE([$0],[KRB5_LIB_AUX])krb5_force_static=yes])
AC_DEFUN(KRB5_BUILD_LIBRARY_STATIC,
[AC_REQUIRE([KRB5_AC_FORCE_STATIC])KRB5_BUILD_LIBRARY
LIBINSTLIST=])
AC_DEFUN(KRB5_BUILD_LIBRARY_WITH_DEPS,
[AC_REQUIRE([KRB5_LIB_AUX])AC_REQUIRE([AC_PROG_LN_S])AC_REQUIRE([AC_PROG_RANLIB])AC_REQUIRE([AC_PROG_ARCHIVE])AC_REQUIRE([AC_PROG_ARCHIVE_ADD])AC_REQUIRE([AC_PROG_INSTALL])AC_CHECK_PROG(AR, ar, ar, false)
AC_CHECK_PROG(PERL, perl, perl, false)
if test "$ac_cv_prog_PERL" = "false"; then
AC_MSG_ERROR(Perl is now required for Kerberos builds.)
fi
AC_SUBST(LIBLIST)
AC_SUBST(LIBLINKS)
AC_SUBST(MAKE_SHLIB_COMMAND)
AC_SUBST(SHLIB_EXPFLAGS)
AC_SUBST(SHLIB_EXPORT_FILE_DEP)
AC_SUBST(DYNOBJ_EXPDEPS)
AC_SUBST(DYNOBJ_EXPFLAGS)
AC_SUBST(INSTALL_SHLIB)
AC_SUBST(STLIBEXT)
AC_SUBST(SHLIBEXT)
AC_SUBST(SHLIBVEXT)
AC_SUBST(SHLIBSEXT)
AC_SUBST(DEPLIBEXT)
AC_SUBST(PFLIBEXT)
AC_SUBST(LIBINSTLIST)
AC_SUBST(DYNOBJEXT)
AC_SUBST(MAKE_DYNOBJ_COMMAND)
])
AC_DEFUN(KRB5_BUILD_LIBOBJS,
[AC_REQUIRE([KRB5_LIB_AUX])AC_SUBST(OBJLISTS)
AC_SUBST(STOBJEXT)
AC_SUBST(SHOBJEXT)
AC_SUBST(PFOBJEXT)
AC_SUBST(PICFLAGS)
AC_SUBST(PROFFLAGS)])
AC_DEFUN(KRB5_BUILD_PROGRAM,
[AC_REQUIRE([KRB5_LIB_AUX])AC_REQUIRE([KRB5_AC_NEED_LIBGEN])AC_SUBST(CC_LINK)
AC_SUBST(RPATH_FLAG)
AC_SUBST(DEPLIBEXT)])
AC_DEFUN(KRB5_RUN_FLAGS,
[AC_REQUIRE([KRB5_LIB_AUX])KRB5_RUN_ENV="$RUN_ENV"
AC_SUBST(KRB5_RUN_ENV)])
AC_DEFUN(KRB5_LIB_AUX,
[AC_REQUIRE([KRB5_LIB_PARAMS])
AC_ARG_ENABLE([static],, ,
[enable_static=$default_static])
if test "$enable_static" = yes; then
AC_MSG_ERROR([Sorry, static libraries do not work in this release.])
fi
if test "$enable_static" = no && test "$krb5_force_static" != yes; then
AC_MSG_NOTICE([disabling static libraries])
LIBLINKS=
LIBLIST=
OBJLISTS=
else
LIBLIST='lib$(LIBBASE)$(STLIBEXT)'
LIBLINKS='$(TOPLIBD)/lib$(LIBBASE)$(STLIBEXT)'
OBJLISTS=OBJS.ST
LIBINSTLIST=install-static
DEPLIBEXT=$STLIBEXT
fi
AC_ARG_ENABLE([shared],
, ,
[enable_shared=$default_shared])
if test "$enable_shared" != yes; then
AC_MSG_ERROR([Sorry, this release builds only shared libraries, cannot disable them.])
fi
if test "$enable_shared" = yes; then
case "$SHLIBEXT" in
.so-nobuild)
AC_MSG_WARN([shared libraries not supported on this architecture])
RUN_ENV=
CC_LINK="$CC_LINK_STATIC"
;;
*)
DEPLIBEXT=$SHLIBEXT
if test "$krb5_force_static" = "yes"; then
AC_MSG_RESULT([Forcing static libraries.])
SHLIBEXT=.so-nobuild
SHLIBVEXT=.so.v-nobuild
SHLIBSEXT=.so.s-nobuild
else
AC_MSG_NOTICE([enabling shared libraries])
if test "$STLIBEXT" = "$SHLIBEXT" ; then
STLIBEXT=.a-nobuild
LIBLIST=
LIBLINKS=
OBJLISTS=
LIBINSTLIST=
fi
LIBLIST="$LIBLIST "'lib$(LIBBASE)$(SHLIBEXT)'
LIBLINKS="$LIBLINKS "'$(TOPLIBD)/lib$(LIBBASE)$(SHLIBEXT) $(TOPLIBD)/lib$(LIBBASE)$(SHLIBVEXT)'
case "$SHLIBSEXT" in
.so.s-nobuild)
LIBINSTLIST="$LIBINSTLIST install-shared"
;;
*)
LIBLIST="$LIBLIST "'lib$(LIBBASE)$(SHLIBSEXT)'
LIBLINKS="$LIBLINKS "'$(TOPLIBD)/lib$(LIBBASE)$(SHLIBSEXT)'
LIBINSTLIST="$LIBINSTLIST install-shlib-soname"
;;
esac
OBJLISTS="$OBJLISTS OBJS.SH"
fi
CC_LINK="$CC_LINK_SHARED"
;;
esac
else
RUN_ENV=
CC_LINK="$CC_LINK_STATIC"
SHLIBEXT=.so-nobuild
SHLIBVEXT=.so.v-nobuild
SHLIBSEXT=.so.s-nobuild
fi
if test "$build_dynobj" = yes; then
OBJLISTS=`echo $OBJLISTS | sed -e s/OBJS.ST//g -e s/OBJS.SH//g`
OBJLISTS="$OBJLISTS OBJS.SH"
fi
if test -z "$LIBLIST"; then
AC_MSG_ERROR([must enable one of shared or static libraries])
fi
AC_ARG_ENABLE([profiled],
,
[if test "$enableval" = yes; then
AC_MSG_ERROR([Sorry, profiled libraries do not work in this release.])
fi
if false; then
case $PFLIBEXT in
.po-nobuild)
AC_MSG_WARN([Profiled libraries not supported on this architecture.])
;;
*)
AC_MSG_NOTICE([enabling profiled libraries])
LIBLIST="$LIBLIST "'lib$(LIBBASE)$(PFLIBEXT)'
LIBLINKS="$LIBLINKS "'$(TOPLIBD)/lib$(LIBBASE)$(PFLIBEXT)'
OBJLISTS="$OBJLISTS OBJS.PF"
LIBINSTLIST="$LIBINSTLIST install-profiled"
;;
esac
fi])])
AC_DEFUN(KRB5_LIB_PARAMS,
[AC_REQUIRE([AC_CANONICAL_HOST])krb5_cv_host=$host
AC_SUBST(krb5_cv_host)
AC_REQUIRE([AC_PROG_CC])AC_REQUIRE([V5_SET_TOPDIR]). $ac_topdir/config/shlib.conf])
AC_DEFUN(AC_LIBRARY_NET, [
AC_CHECK_FUNC(gethostbyname, , [
AC_CHECK_LIB(nsl, gethostbyname, , [
AC_CHECK_LIB(socket, gethostbyname, , [
AC_CHECK_LIB(socket, gethostbyname,
LIBS="-lsocket -lnsl $LIBS",
[AC_CHECK_LIB(resolv, gethostbyname,
LIBS="-lresolv $LIBS" )],
-lnsl)
])
])
])
AC_CHECK_FUNC(socket, , AC_CHECK_LIB(socket, socket, ,
AC_CHECK_LIB(socket, socket, LIBS="-lsocket -lnsl $LIBS", , -lnsl)))
KRB5_AC_ENABLE_DNS
if test "$enable_dns" = yes ; then
AC_CHECK_LIB(resolv, main)
_KRB5_AC_CHECK_RES_FUNCS(res_ninit res_nclose res_ndestroy res_nsearch ns_initparse ns_name_uncompress dn_skipname res_search)
if test $krb5_cv_func_res_nsearch = no \
&& test $krb5_cv_func_res_search = no; then
AC_CHECK_FUNC(res_search,
[AC_DEFINE(HAVE_RES_SEARCH, 1,
[Define to 1 if you have the `res_search' function])],
[AC_ERROR([cannot find res_nsearch or res_search])])
fi
fi
])
AC_DEFUN([_KRB5_AC_CHECK_RES_FUNCS],
[AC_FOREACH([AC_Func], [$1],
[AH_TEMPLATE(AS_TR_CPP(HAVE_[]AC_Func),
[Define to 1 if you have the `]AC_Func[' function.])])for krb5_func in $1; do
_KRB5_AC_CHECK_RES_FUNC($krb5_func)
done
])
AC_DEFUN([_KRB5_AC_CHECK_RES_FUNC], [
AC_CACHE_CHECK([for $1], [krb5_cv_func_$1], [AC_TRY_LINK(
[@%:@include <resolv.h>],
[/*
* Use volatile, or else optimization can cause false positives.
*/
void (* volatile p)() = (void (*)())$1;],
[AS_VAR_SET(krb5_cv_func_$1, yes)],
[AS_VAR_SET(krb5_cv_func_$1, no)])])
AS_IF([test AS_VAR_GET(krb5_cv_func_$1) = yes],
[AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_$1]), 1,
[Define to 1 if you have the `$1' function])])[]])
AC_DEFUN(KRB5_AC_ENABLE_DNS, [
enable_dns=yes
enable_dns_for_kdc=yes
AC_DEFINE(KRB5_DNS_LOOKUP_KDC,1,[Define to enable DNS lookups of Kerberos KDCs])
AC_ARG_ENABLE([dns-for-realm],
[ --enable-dns-for-realm enable DNS lookups of Kerberos realm names], ,
[enable_dns_for_realm=no])
if test "$enable_dns_for_realm" = yes; then
AC_DEFINE(KRB5_DNS_LOOKUP_REALM,1,[Define to enable DNS lookups of Kerberos realm names])
fi
AC_DEFINE(KRB5_DNS_LOOKUP, 1,[Define for DNS support of locating realms and KDCs])
])
AC_DEFUN([KRB5_NEED_PROTO], [
ifelse([$3], ,[if test "x$ac_cv_func_$2" = xyes; then])
AC_CACHE_CHECK([if $2 needs a prototype provided], krb5_cv_func_$2_noproto,
AC_TRY_COMPILE([$1],
[struct k5foo {int foo; } xx;
extern int $2 (struct k5foo*);
$2(&xx);
],
krb5_cv_func_$2_noproto=yes,krb5_cv_func_$2_noproto=no))
if test $krb5_cv_func_$2_noproto = yes; then
AC_DEFINE([NEED_]translit($2, [a-z], [A-Z])[_PROTO], 1, [define if the system header files are missing prototype for $2()])
fi
ifelse([$3], ,[fi])
])
AC_DEFUN([KRB5_GETPEERNAME_ARGS],[
AC_DEFINE([GETPEERNAME_ARG2_TYPE],GETSOCKNAME_ARG2_TYPE,[Type of getpeername second argument.])
AC_DEFINE([GETPEERNAME_ARG3_TYPE],GETSOCKNAME_ARG3_TYPE,[Type of getpeername second argument.])
])
AC_DEFUN([TRY_GETSOCK_INT],[
krb5_lib_var=`echo "$1 $2" | sed 'y% ./+-*%___p_p%'`
AC_MSG_CHECKING([if getsockname() takes arguments $1 and $2])
AC_CACHE_VAL(krb5_cv_getsockname_proto_$krb5_lib_var,
[
AC_TRY_COMPILE([extern int getsockname(int, $1, $2);
],,eval "krb5_cv_getsockname_proto_$krb5_lib_var=yes",
eval "krb5_cv_getsockname_proto_$krb5_lib_var=no")])
if eval "test \"`echo '$krb5_cv_getsockname_proto_'$krb5_lib_var`\" = yes"; then
AC_MSG_RESULT(yes)
sock_set=yes; res1="$1"; res2="$2"
else
AC_MSG_RESULT(no)
fi
])
AC_DEFUN([KRB5_GETSOCKNAME_ARGS],[
sock_set=no
for sock_arg1 in "struct sockaddr *" "void *"
do
for sock_arg2 in "size_t *" "int *" "socklen_t *"
do
if test $sock_set = no; then
TRY_GETSOCK_INT($sock_arg1, $sock_arg2)
fi
done
done
if test "$sock_set" = no; then
AC_MSG_NOTICE(assuming struct sockaddr and socklen_t for getsockname args)
res1="struct sockaddr *"
res2="socklen_t *"
fi
res1=`echo "$res1" | tr -d '*' | sed -e 's/ *$//'`
res2=`echo "$res2" | tr -d '*' | sed -e 's/ *$//'`
AC_DEFINE_UNQUOTED([GETSOCKNAME_ARG2_TYPE],$res1,[Type of pointer target for argument 2 to getsockname])
AC_DEFINE_UNQUOTED([GETSOCKNAME_ARG3_TYPE],$res2,[Type of pointer target for argument 3 to getsockname])
])
AC_DEFUN([KRB5_AC_CHOOSE_ET],[
AC_ARG_WITH([system-et],
AC_HELP_STRING(--with-system-et,use system compile_et and -lcom_err @<:@default: build and install a local version@:>@))
AC_MSG_CHECKING(which version of com_err to use)
if test "x$with_system_et" = xyes ; then
COM_ERR_VERSION=sys
AC_MSG_RESULT(system)
else
COM_ERR_VERSION=k5
AC_MSG_RESULT(krb5)
fi
if test $COM_ERR_VERSION = sys; then
AC_CHECK_LIB(com_err, add_error_table, :, AC_MSG_ERROR(cannot find add_error_table in com_err library))
AC_CHECK_LIB(com_err, remove_error_table, :, AC_MSG_ERROR(cannot find remove_error_table in com_err library))
cat >> conf$$e.et <<EOF
error_table foo
error_code ERR_FOO, "foo"
end
EOF
AC_CHECK_PROGS(compile_et,compile_et,false)
if test "$compile_et" = false; then
AC_MSG_ERROR(cannot find compile_et)
fi
AC_CACHE_CHECK(whether compile_et is useful,krb5_cv_compile_et_useful,[
if compile_et conf$$e.et >/dev/null 2>&1 ; then true ; else
AC_MSG_ERROR(execution failed)
fi
AC_TRY_COMPILE([ ],[ &et_foo_error_table; ],:,
[AC_MSG_ERROR(cannot use et_foo_error_table)])
rm -f conf$$e.et conf$$e.c conf$$e.h
krb5_cv_compile_et_useful=yes
])
fi
AC_SUBST(COM_ERR_VERSION)
])
AC_DEFUN([KRB5_AC_CHOOSE_SS],[
AC_ARG_WITH(system-ss,
AC_HELP_STRING(--with-system-ss,use system -lss and mk_cmds @<:@private version@:>@))
AC_ARG_VAR(SS_LIB,[system libraries for 'ss' package [-lss]])
AC_MSG_CHECKING(which version of subsystem package to use)
if test "x$with_system_ss" = xyes ; then
SS_VERSION=sys
AC_MSG_RESULT(system)
test "x${SS_LIB+set}" = xset || SS_LIB=-lss
old_LIBS="$LIBS"
LIBS="$LIBS $SS_LIB"
AC_CACHE_CHECK(whether system ss package works, krb5_cv_system_ss_okay,[
AC_TRY_RUN([
int main(int argc, char *argv[]) {
if (argc == 42) {
int i, err;
i = ss_create_invocation("foo","foo","",0,&err);
ss_listen(i);
}
return 0;
}], krb5_cv_system_ss_okay=yes, AC_MSG_ERROR(cannot run test program),
krb5_cv_system_ss_okay="assumed")])
LIBS="$old_LIBS"
else
SS_VERSION=k5
AC_MSG_RESULT(krb5)
fi
AC_SUBST(SS_LIB)
AC_SUBST(SS_VERSION)
])
AC_DEFUN([KRB5_AC_CHOOSE_DB],[
AC_ARG_WITH(system-db,
AC_HELP_STRING(--with-system-db,use system Berkeley db @<:@private version@:>@))
AC_ARG_VAR(DB_HEADER,[header file for system Berkeley db package [db.h]])
AC_ARG_VAR(DB_LIB,[library for system Berkeley db package [-ldb]])
if test "x$with_system_db" = xyes ; then
DB_VERSION=sys
test "x${DB_HEADER+set}" = xset || DB_HEADER=db.h
test "x${DB_LIB+set}" = xset || DB_LIB=-ldb
if test "x${DB_HEADER}" = xdb.h ; then
DB_HEADER_VERSION=sys
else
DB_HEADER_VERSION=redirect
fi
KDB5_DB_LIB="$DB_LIB"
else
DB_VERSION=k5
AC_DEFINE(HAVE_BT_RSEQ,1,[Define if bt_rseq is available, for recursive btree traversal.])
DB_HEADER=db.h
DB_HEADER_VERSION=k5
KDB5_DB_LIB=
DB_LIB=-ldb
fi
AC_SUBST(DB_VERSION)
AC_SUBST(DB_HEADER)
AC_SUBST(DB_HEADER_VERSION)
AC_SUBST(DB_LIB)
AC_SUBST(KDB5_DB_LIB)
])
AC_DEFUN([KRB5_AC_PRIOCNTL_HACK],
[AC_REQUIRE([AC_PROG_AWK])AC_REQUIRE([AC_LANG_COMPILER_REQUIRE])AC_CACHE_CHECK([whether to use priocntl hack], [krb5_cv_priocntl_hack],
[case $krb5_cv_host in
*-*-solaris2.9*)
if test "$cross_compiling" = yes; then
krb5_cv_priocntl_hack=yes
else
if showrev -p | $AWK 'BEGIN { e = 1 }
/Patch: 11717[[12]]/ { x = index[]([$]2, "-");
if (substr[]([$]2, x + 1, length([$]2) - x) >= 11)
{ e = 0 } else { e = 1 } }
END { exit e; }'; then
krb5_cv_priocntl_hack=no
else
krb5_cv_priocntl_hack=yes
fi
fi
;;
*)
krb5_cv_priocntl_hack=no
;;
esac])
if test "$krb5_cv_priocntl_hack" = yes; then
PRIOCNTL_HACK=1
else
PRIOCNTL_HACK=0
fi
AC_SUBST(PRIOCNTL_HACK)])
AC_DEFUN([KRB5_AC_GCC_ATTRS],
[AC_CACHE_CHECK([for constructor/destructor attribute support],krb5_cv_attr_constructor_destructor,
[rm -f conftest.1 conftest.2
if test -r conftest.1 || test -r conftest.2 ; then
AC_MSG_ERROR(write error in local file system?)
fi
true > conftest.1
true > conftest.2
if test -r conftest.1 && test -r conftest.2 ; then true ; else
AC_MSG_ERROR(write error in local file system?)
fi
a=no
b=no
AC_TRY_RUN([void foo1() __attribute__((constructor));
void foo1() { unlink("conftest.1"); }
void foo2() __attribute__((destructor));
void foo2() { unlink("conftest.2"); }
int main () { return 0; }],
[test -r conftest.1 || a=yes
test -r conftest.2 || b=yes], , AC_MSG_ERROR(Cannot test for constructor/destructor support when cross compiling))
case $krb5_cv_host in
*-*-aix4.*)
b=no
;;
esac
krb5_cv_attr_constructor_destructor="$a,$b"
])
case $krb5_cv_attr_constructor_destructor in
yes,*)
AC_DEFINE(CONSTRUCTOR_ATTR_WORKS,1,[Define if __attribute__((constructor)) works]) ;;
esac
case $krb5_cv_attr_constructor_destructor in
*,yes)
AC_DEFINE(DESTRUCTOR_ATTR_WORKS,1,[Define if __attribute__((destructor)) works]) ;;
esac
])
AC_DEFUN([KRB5_AC_PRAGMA_WEAK_REF],
[AC_CACHE_CHECK([whether pragma weak references are supported],
krb5_cv_pragma_weak_ref,
[AC_TRY_LINK([extern int flurbl(void);],[if (&flurbl != 0) return flurbl();],
krb5_cv_pragma_weak_ref=yes,krb5_cv_pragma_weak_ref=no)])
if test $krb5_cv_pragma_weak_ref = yes ; then
AC_DEFINE(HAVE_PRAGMA_WEAK_REF,1,[Define if fi])
m4_include(config/ac-archive/acx_pthread.m4)
AC_DEFUN([KRB5_AC_LIBUTIL],
[AC_CHECK_LIB(util, main,
[AC_DEFINE(HAVE_LIBUTIL,1,[Define if util library is available with openpty, logwtmp, etc])
UTIL_LIB=-lutil])AC_SUBST(UTIL_LIB)
])
AC_DEFUN(WITH_LDAP,[
AC_ARG_WITH([ldap],
[ --with-ldap compile OpenLDAP database backend module],
[case "$withval" in
OPENLDAP) with_ldap=yes ;;
yes | no) ;;
EDIRECTORY) AC_MSG_ERROR(Option --with-ldap=EDIRECTORY is deprecated; use --with-edirectory instead.) ;;
*) AC_MSG_ERROR(Invalid option value --with-ldap="$withval") ;;
esac], with_ldap=no)AC_ARG_WITH([edirectory],
[ --with-edirectory compile eDirectory database backend module],
[case "$withval" in
yes | no) ;;
*) AC_MSG_ERROR(Invalid option value --with-edirectory="$withval") ;;
esac], with_edirectory=no)
if test $with_ldap = yes; then
if test $with_edirectory = yes; then
AC_MSG_ERROR(Cannot enable both OpenLDAP and eDirectory backends; choose one.)
fi
AC_MSG_NOTICE(enabling OpenLDAP database backend module support)
OPENLDAP_PLUGIN=yes
elif test $with_edirectory = yes; then
AC_MSG_NOTICE(enabling eDirectory database backend module support)
OPENLDAP_PLUGIN=yes
AC_DEFINE(HAVE_EDIRECTORY,1,[Define if LDAP KDB interface should assume eDirectory.])
else
: fi
AC_SUBST(OPENLDAP_PLUGIN)
])AC_DEFUN(KRB5_AC_KEYRING_CCACHE,[
AC_CHECK_HEADERS([keyutils.h],
AC_CHECK_LIB(keyutils, add_key,
[ AC_DEFINE(USE_KEYRING_CCACHE, 1, [Define if the keyring ccache should be enabled])
LIBS="-lkeyutils $LIBS"
]))
])