2 AC_COPYRIGHT([Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
3 Massachusetts Institute of Technology.
6 dnl Figure out the top of the source and build trees. We depend on localdir
7 dnl being a relative pathname; we could make it general later, but for now
8 dnl this is good enough.
10 dnl esyscmd([test -r aclocal.m4 && echo YES])
11 define([fileexists],[dnl
12 pushdef([x],esyscmd([if test -r $1; then echo YES;else echo NO; fi]))dnl
13 dnl Strip out newline.
16 ],[NO],UNKNOWN)[]popdef([x])])
17 define([K5_TOPDIR],dnl
18 ifelse(fileexists(./aclocal.m4),YES,[.],[dnl
19 ifelse(fileexists(../aclocal.m4),YES,[..],[dnl
20 ifelse(fileexists(../../aclocal.m4),YES,[../..],[dnl
21 ifelse(fileexists(../../../aclocal.m4),YES,[../../..],[dnl
22 ifelse(fileexists(../../../../aclocal.m4),YES,[../../../..],[dnl
23 errprint(__file__:__line__: Cannot find path to aclocal.m4[
24 ]) m4exit(1) dnl sometimes that does not work?
25 builtin(m4exit,1)UNKNOWN])])])])]))
27 AC_DEFUN(V5_SET_TOPDIR,[dnl
28 ac_reltopdir="K5_TOPDIR"
29 if test ! -r "$srcdir/K5_TOPDIR/aclocal.m4"; then
30 AC_MSG_ERROR([Configure could not determine the relative topdir])
32 ac_topdir=$srcdir/$ac_reltopdir
33 ac_config_fragdir=$ac_reltopdir/config
34 krb5_pre_in=$ac_config_fragdir/pre.in
35 krb5_post_in=$ac_config_fragdir/post.in
36 # echo "Looking for $srcdir/$ac_config_fragdir"
37 if test -d "$srcdir/$ac_config_fragdir"; then
38 AC_CONFIG_AUX_DIR(K5_TOPDIR/config)
40 AC_MSG_ERROR([can not find config/ directory in $ac_reltopdir])
46 pushdef([x],esyscmd([sed -n 's/#define \([A-Z0-9_]*\)[ \t]*\(.*\)/\1=\2/p' < ]K5_TOPDIR/patchlevel.h))
47 define([PL_KRB5_MAJOR_RELEASE],regexp(x,[KRB5_MAJOR_RELEASE=\(.*\)],[\1]))
48 ifelse(PL_KRB5_MAJOR_RELEASE,,[errprint([Can't determine KRB5_MAJOR_RELEASE value from patchlevel.h.
49 ]) m4exit(1) dnl sometimes that does not work?
51 define([PL_KRB5_MINOR_RELEASE],regexp(x,[KRB5_MINOR_RELEASE=\(.*\)],[\1]))
52 ifelse(PL_KRB5_MINOR_RELEASE,,[errprint([Can't determine KRB5_MINOR_RELEASE value from patchlevel.h.
53 ]) m4exit(1) dnl sometimes that does not work?
55 define([PL_KRB5_PATCHLEVEL],regexp(x,[KRB5_PATCHLEVEL=\(.*\)],[\1]))
56 ifelse(PL_KRB5_PATCHLEVEL,,[errprint([Can't determine KRB5_PATCHLEVEL value from patchlevel.h.
57 ]) m4exit(1) dnl sometimes that does not work?
59 define([PL_KRB5_RELTAIL],regexp(x,[KRB5_RELTAIL="\(.*\)"],[\1]))
60 dnl RELTAIL is allowed to not be defined.
62 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))
63 define([K5_BUGADDR],krb5-bugs@mit.edu)
64 define([K5_AC_INIT],[AC_INIT(Kerberos 5, K5_VERSION, K5_BUGADDR, krb5)
68 dnl drop in standard rules for all configure files -- CONFIG_RULES
70 AC_DEFUN(CONFIG_RULES,[dnl
71 AC_REQUIRE([V5_SET_TOPDIR]) dnl
76 if test -z "$LD" ; then LD=$CC; fi
77 AC_ARG_VAR(LD,[linker command [CC]])
83 dnl allow stuff in tree to access deprecated/private stuff for now
84 dnl AC_DEFINE([KRB5_PRIVATE], 1, [Define only if building in-tree])
85 dnl AC_DEFINE([KRB5_DEPRECATED], 1, [Define only if building in-tree])
89 KRB5_AC_MAINTAINER_MODE dnl
92 dnl This identifies the top of the source tree relative to the directory
93 dnl in which the configure file lives.
95 CONFIG_RELTOPDIR=$ac_reltopdir
96 AC_SUBST(CONFIG_RELTOPDIR)
98 lib_frag=$srcdir/$ac_config_fragdir/lib.in
99 AC_SUBST_FILE(lib_frag)
100 libobj_frag=$srcdir/$ac_config_fragdir/libobj.in
101 AC_SUBST_FILE(libobj_frag)
102 libnover_frag=$srcdir/$ac_config_fragdir/libnover.in
103 AC_SUBST_FILE(libnover_frag)
105 KRB5_AC_PRAGMA_WEAK_REF
108 KRB5_AC_ENABLE_THREADS
112 dnl Maintainer mode, akin to what automake provides, 'cept we don't
113 dnl want to use automake right now.
114 AC_DEFUN([KRB5_AC_MAINTAINER_MODE],
115 [AC_ARG_ENABLE([maintainer-mode],
116 AC_HELP_STRING([--enable-maintainer-mode],[enable rebuilding of source files, Makefiles, etc]),
117 USE_MAINTAINER_MODE=$enableval,
118 USE_MAINTAINER_MODE=no)
119 if test "$USE_MAINTAINER_MODE" = yes; then
120 MAINTAINER_MODE_TRUE=
121 MAINTAINER_MODE_FALSE='#'
122 AC_MSG_NOTICE(enabling maintainer mode)
124 MAINTAINER_MODE_TRUE='#'
125 MAINTAINER_MODE_FALSE=
127 MAINT=$MAINTAINER_MODE_TRUE
128 AC_SUBST(MAINTAINER_MODE_TRUE)
129 AC_SUBST(MAINTAINER_MODE_FALSE)
134 AC_DEFUN([KRB5_AC_INITFINI],[
135 dnl Do we want initialization at load time?
136 AC_ARG_ENABLE([delayed-initialization],
137 AC_HELP_STRING([--disable-delayed-initialization],initialize library code when loaded @<:@delay until first use@:>@), , enable_delayed_initialization=yes)
138 case "$enable_delayed_initialization" in
140 AC_DEFINE(DELAY_INITIALIZER,1,[Define if library initialization should be delayed until first use]) ;;
142 *) AC_MSG_ERROR(invalid option $enable_delayed_initialization for delayed-initialization) ;;
144 dnl We always want finalization at unload time.
146 dnl Can we do things through gcc?
148 dnl How about with the linker?
149 if test -z "$use_linker_init_option" ; then
150 AC_MSG_ERROR(ran INITFINI before checking shlib.conf?)
152 if test "$use_linker_init_option" = yes; then
153 AC_DEFINE(USE_LINKER_INIT_OPTION,1,[Define if link-time options for library initialization will be used])
155 if test "$use_linker_fini_option" = yes; then
156 AC_DEFINE(USE_LINKER_FINI_OPTION,1,[Define if link-time options for library finalization will be used])
161 AC_DEFUN([KRB5_AC_FIND_DLOPEN],[
162 AC_CHECK_LIB(dl, dlopen,[DL_LIB=-ldl
163 AC_DEFINE(USE_DLOPEN,1,[Define if dlopen should be used])])
164 dnl AC_CHECK_LIB(ld, main, DL_LIB=-lld)
170 AC_DEFUN([KRB5_AC_ENABLE_THREADS],[
171 AC_ARG_ENABLE([thread-support],
172 AC_HELP_STRING([--disable-thread-support],don't enable thread support @<:@enabled@:>@), , enable_thread_support=yes)
173 if test "$enable_thread_support" = yes ; then
174 AC_MSG_NOTICE(enabling thread support)
175 AC_DEFINE(ENABLE_THREADS,1,[Define if thread support enabled])
177 dnl Maybe this should be inside the conditional above? Doesn't cache....
178 if test "$enable_thread_support" = yes; then
179 ACX_PTHREAD(,[AC_MSG_ERROR([cannot determine options for enabling thread support; try --disable-thread-support])])
180 AC_MSG_NOTICE(PTHREAD_CC = $PTHREAD_CC)
181 AC_MSG_NOTICE(PTHREAD_CFLAGS = $PTHREAD_CFLAGS)
182 AC_MSG_NOTICE(PTHREAD_LIBS = $PTHREAD_LIBS)
183 dnl Not really needed -- if pthread.h isn't found, ACX_PTHREAD will fail.
184 dnl AC_CHECK_HEADERS(pthread.h)
185 # AIX and Tru64 don't support weak references, and don't have
186 # stub versions of the pthread code in libc.
189 # On these platforms, we'll always pull in the thread support.
190 LIBS="$LIBS $PTHREAD_LIBS"
191 CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
192 # We don't need to sometimes add the flags we've just folded in...
197 # These are the flags that "gcc -pthread" adds. But we don't
198 # want "-pthread" because that has link-time effects, and we
199 # don't exclude CFLAGS when linking. *sigh*
200 PTHREAD_CFLAGS="-D_REENTRANT -D_THREAD_SAFE -D_POSIX_C_SOURCE=199506L"
203 # On Solaris 10 with gcc 3.4.3, the autoconf archive macro doesn't
204 # get the right result.
205 if test "$GCC" = yes ; then
206 PTHREAD_CFLAGS="-D_REENTRANT -pthreads"
217 AC_SUBST(THREAD_SUPPORT)
218 dnl We want to know where these routines live, so on systems with weak
219 dnl reference support we can figure out whether or not the pthread library
220 dnl has been linked in.
221 dnl If we don't add any libraries for thread support, don't bother.
222 AC_CHECK_FUNCS(pthread_once pthread_mutexattr_setrobust_np pthread_rwlock_init)
224 test "$PTHREAD_CC" != "" && test "$ac_cv_c_compiler_gnu" = no && CC=$PTHREAD_CC
226 # On Solaris, -pthreads is added to CFLAGS, no extra explicit libraries.
227 CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
228 AC_SUBST(PTHREAD_CFLAGS)
230 LIBS="$PTHREAD_LIBS $LIBS"
231 AC_MSG_NOTICE(rechecking with PTHREAD_... options)
232 AC_CHECK_LIB(c, pthread_mutexattr_setrobust_np,
233 [AC_DEFINE(HAVE_PTHREAD_MUTEXATTR_SETROBUST_NP_IN_THREAD_LIB,1,[Define if pthread_mutexattr_setrobust_np is provided in the thread library.])])
234 AC_CHECK_LIB(c, pthread_rwlock_init,
235 [AC_DEFINE(HAVE_PTHREAD_RWLOCK_INIT_IN_THREAD_LIB,1,[Define if pthread_rwlock_init is provided in the thread library.])])
241 dnl This is somewhat gross and should go away when the build system
242 dnl is revamped. -- tlyu
243 dnl DECLARE_SYS_ERRLIST - check for sys_errlist in libc
245 AC_DEFUN([DECLARE_SYS_ERRLIST],
246 [AC_CACHE_CHECK([for sys_errlist declaration], krb5_cv_decl_sys_errlist,
247 [AC_TRY_COMPILE([#include <stdio.h>
248 #include <errno.h>], [1+sys_nerr;],
249 krb5_cv_decl_sys_errlist=yes, krb5_cv_decl_sys_errlist=no)])
250 # assume sys_nerr won't be declared w/o being in libc
251 if test $krb5_cv_decl_sys_errlist = yes; then
252 AC_DEFINE(SYS_ERRLIST_DECLARED,1,[Define if sys_errlist is defined in errno.h])
253 AC_DEFINE(HAVE_SYS_ERRLIST,1,[Define if sys_errlist in libc])
255 # This means that sys_errlist is not declared in errno.h, but may still
257 AC_CACHE_CHECK([for sys_errlist in libc], krb5_cv_var_sys_errlist,
258 [AC_TRY_LINK([extern int sys_nerr;], [if (1+sys_nerr < 0) return 1;],
259 krb5_cv_var_sys_errlist=yes, krb5_cv_var_sys_errlist=no;)])
260 if test $krb5_cv_var_sys_errlist = yes; then
261 AC_DEFINE(HAVE_SYS_ERRLIST,1,[Define if sys_errlist in libc])
262 # Do this cruft for backwards compatibility for now.
263 AC_DEFINE(NEED_SYS_ERRLIST,1,[Define if need to declare sys_errlist])
265 AC_MSG_WARN([sys_errlist is neither in errno.h nor in libc])
270 dnl check for sigmask/sigprocmask -- CHECK_SIGPROCMASK
272 AC_DEFUN(CHECK_SIGPROCMASK,[
273 AC_MSG_CHECKING([for use of sigprocmask])
274 AC_CACHE_VAL(krb5_cv_func_sigprocmask_use,
275 [AC_TRY_LINK([#include <signal.h>], [sigprocmask(SIG_SETMASK,0,0);],
276 krb5_cv_func_sigprocmask_use=yes,
277 AC_TRY_LINK([#include <signal.h>], [sigmask(1);],
278 krb5_cv_func_sigprocmask_use=no, krb5_cv_func_sigprocmask_use=yes))])
279 AC_MSG_RESULT($krb5_cv_func_sigprocmask_use)
280 if test $krb5_cv_func_sigprocmask_use = yes; then
281 AC_DEFINE(USE_SIGPROCMASK,1,[Define if sigprocmask should be used])
285 AC_DEFUN(AC_PROG_ARCHIVE, [AC_CHECK_PROG(ARCHIVE, ar, ar cqv, false)])dnl
286 AC_DEFUN(AC_PROG_ARCHIVE_ADD, [AC_CHECK_PROG(ARADD, ar, ar cruv, false)])dnl
288 dnl check for <dirent.h> -- CHECK_DIRENT
289 dnl (may need to be more complex later)
291 AC_DEFUN(CHECK_DIRENT,[
292 AC_CHECK_HEADER(dirent.h,AC_DEFINE(USE_DIRENT_H,1,[Define if you have dirent.h functionality]))])dnl
294 dnl check if union wait is defined, or if WAIT_USES_INT -- CHECK_WAIT_TYPE
296 AC_DEFUN(CHECK_WAIT_TYPE,[
297 AC_MSG_CHECKING([if argument to wait is int *])
298 AC_CACHE_VAL(krb5_cv_struct_wait,
299 dnl Test for prototype clash - if there is none - then assume int * works
300 [AC_TRY_COMPILE([#include <sys/types.h>
301 #include <sys/wait.h>
302 extern pid_t wait(int *);],[], krb5_cv_struct_wait=no,dnl
303 dnl Else fallback on old stuff
305 [#include <sys/wait.h>], [union wait i;
310 krb5_cv_struct_wait=yes, krb5_cv_struct_wait=no)])])
311 AC_MSG_RESULT($krb5_cv_struct_wait)
312 if test $krb5_cv_struct_wait = no; then
313 AC_DEFINE(WAIT_USES_INT,1,[Define if wait takes int as a argument])
317 dnl check for POSIX signal handling -- CHECK_SIGNALS
319 AC_DEFUN(CHECK_SIGNALS,[
320 AC_CHECK_FUNC(sigprocmask,
321 AC_MSG_CHECKING(for sigset_t and POSIX_SIGNALS)
322 AC_CACHE_VAL(krb5_cv_type_sigset_t,
324 [#include <signal.h>],
326 krb5_cv_type_sigset_t=yes, krb5_cv_type_sigset_t=no)])
327 AC_MSG_RESULT($krb5_cv_type_sigset_t)
328 if test $krb5_cv_type_sigset_t = yes; then
329 AC_DEFINE(POSIX_SIGNALS,1,[Define if POSIX signal handling is used])
333 dnl check for signal type
335 dnl AC_RETSIGTYPE isn't quite right, but almost.
336 AC_DEFUN(KRB5_SIGTYPE,[
337 AC_MSG_CHECKING([POSIX signal handlers])
338 AC_CACHE_VAL(krb5_cv_has_posix_signals,
340 [#include <sys/types.h>
345 extern void (*signal ()) ();], [],
346 krb5_cv_has_posix_signals=yes, krb5_cv_has_posix_signals=no)])
347 AC_MSG_RESULT($krb5_cv_has_posix_signals)
348 if test $krb5_cv_has_posix_signals = yes; then
350 AC_DEFINE(POSIX_SIGTYPE, 1, [Define if POSIX signal handlers are used])
352 if test $ac_cv_type_signal = void; then
358 AC_DEFINE_UNQUOTED(krb5_sigtype, $stype, [Define krb5_sigtype to type of signal handler])dnl
361 dnl check for POSIX setjmp/longjmp -- CHECK_SETJMP
363 AC_DEFUN(CHECK_SETJMP,[
364 AC_CHECK_FUNC(sigsetjmp,
365 AC_MSG_CHECKING(for sigjmp_buf)
366 AC_CACHE_VAL(krb5_cv_struct_sigjmp_buf,
368 [#include <setjmp.h>],[sigjmp_buf x],
369 krb5_cv_struct_sigjmp_buf=yes,krb5_cv_struct_sigjmp_buf=no)])
370 AC_MSG_RESULT($krb5_cv_struct_sigjmp_buf)
371 if test $krb5_cv_struct_sigjmp_buf = yes; then
372 AC_DEFINE(POSIX_SETJMP,1,[Define if setjmp indicates POSIX interface])
376 dnl Check for IPv6 compile-time support.
378 AC_DEFUN(KRB5_AC_INET6,[
379 AC_CHECK_HEADERS(sys/types.h sys/socket.h netinet/in.h netdb.h)
380 AC_CHECK_FUNCS(inet_ntop inet_pton getnameinfo)
381 dnl getaddrinfo test needs netdb.h, for proper compilation on alpha
382 dnl under OSF/1^H^H^H^H^HDigital^H^H^H^H^H^H^HTru64 UNIX, where it's
384 AC_MSG_CHECKING(for getaddrinfo)
385 AC_CACHE_VAL(ac_cv_func_getaddrinfo,
386 [AC_TRY_LINK([#ifdef HAVE_NETDB_H
390 getaddrinfo("kerberos.mit.edu", "echo", 0, &ai);
391 ], ac_cv_func_getaddrinfo=yes, ac_cv_func_getaddrinfo=no)])
392 AC_MSG_RESULT($ac_cv_func_getaddrinfo)
393 if test $ac_cv_func_getaddrinfo = yes; then
394 AC_DEFINE(HAVE_GETADDRINFO,1,[Define if you have the getaddrinfo function])
397 AC_REQUIRE([KRB5_SOCKADDR_SA_LEN])dnl
398 AC_ARG_ENABLE([ipv6], , AC_MSG_WARN(enable/disable-ipv6 option is deprecated))dnl
402 AC_DEFUN(KRB5_AC_CHECK_TYPE_WITH_HEADERS,[
403 AC_MSG_CHECKING(for type $1)
404 changequote(<<,>>)dnl
405 varname=`echo $1 | sed 's,[ -],_,g'`
407 AC_CACHE_VAL(krb5_cv_$varname,[
408 AC_TRY_COMPILE([$2],[ $1 foo; ], eval krb5_cv_$varname=yes, eval krb5_cv_$varname=no)])
409 eval x="\$krb5_cv_$varname"
411 if eval test "$x" = yes ; then
412 AC_DEFINE_UNQUOTED(HAVE_`echo $varname | tr '[[[a-z]]]' '[[[A-Z]]]'`)
416 AC_DEFUN(KRB5_AC_CHECK_SOCKADDR_STORAGE,[
417 KRB5_AC_CHECK_TYPE_WITH_HEADERS(struct sockaddr_storage, [
418 #ifdef HAVE_SYS_TYPES_H
419 #include <sys/types.h>
421 #include <sys/socket.h>
422 #include <netinet/in.h>
426 AC_DEFUN(KRB5_AC_CHECK_INET6,[
427 AC_REQUIRE([KRB5_AC_CHECK_SOCKADDR_STORAGE])dnl
428 AC_MSG_CHECKING(for IPv6 compile-time support)
429 AC_CACHE_VAL(krb5_cv_inet6,[
430 if test "$ac_cv_func_inet_ntop" != "yes" ; then
434 #ifdef HAVE_SYS_TYPES_H
435 #include <sys/types.h>
437 #include <sys/socket.h>
438 #include <netinet/in.h>
441 struct sockaddr_in6 in;
443 IN6_IS_ADDR_LINKLOCAL (&in.sin6_addr);
444 ],krb5_cv_inet6=yes,krb5_cv_inet6=no)])
446 AC_MSG_RESULT($krb5_cv_inet6)
447 if test "$krb5_cv_inet6" = no && test "$ac_cv_func_inet_ntop" = yes; then
448 AC_MSG_CHECKING(for IPv6 compile-time support with -DINET6)
449 AC_CACHE_VAL(krb5_cv_inet6_with_dinet6,[
453 #ifdef HAVE_SYS_TYPES_H
454 #include <sys/types.h>
456 #include <sys/socket.h>
457 #include <netinet/in.h>
460 struct sockaddr_in6 in;
462 IN6_IS_ADDR_LINKLOCAL (&in.sin6_addr);
463 ],krb5_cv_inet6_with_dinet6=yes,krb5_cv_inet6_with_dinet6=no)
465 AC_MSG_RESULT($krb5_cv_inet6_with_dinet6)
467 if test $krb5_cv_inet6 = yes || test "$krb5_cv_inet6_with_dinet6" = yes; then
468 if test "$krb5_cv_inet6_with_dinet6" = yes; then
469 AC_DEFINE(INET6,1,[May need to be defined to enable IPv6 support, for example on IRIX])
471 AC_DEFINE(KRB5_USE_INET6,1,[Define if we should compile in IPv6 support (even if we can't use it at run time)])
475 dnl Generic File existence tests
477 dnl K5_AC_CHECK_FILE(FILE, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
479 AC_DEFUN(K5_AC_CHECK_FILE,
480 [AC_REQUIRE([AC_PROG_CC])dnl
481 dnl Do the transliteration at runtime so arg 1 can be a shell variable.
482 ac_safe=`echo "$1" | sed 'y%./+-%__p_%'`
483 AC_MSG_CHECKING([for $1])
484 AC_CACHE_VAL(ac_cv_file_$ac_safe,
485 [if test "$cross_compiling" = yes; then
486 errprint(__file__:__line__: warning: Cannot check for file existence when cross compiling
488 AC_MSG_ERROR(Cannot check for file existence when cross compiling)
491 eval "ac_cv_file_$ac_safe=yes"
493 eval "ac_cv_file_$ac_safe=no"
496 if eval "test \"`echo '$ac_cv_file_'$ac_safe`\" = yes"; then
498 ifelse([$2], , :, [$2])
506 dnl K5_AC_CHECK_FILES(FILE... [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
508 AC_DEFUN(K5_AC_CHECK_FILES,
509 [AC_REQUIRE([AC_PROG_CC])dnl
512 K5_AC_CHECK_FILE($ac_file,
514 ac_tr_file=HAVE`echo $ac_file | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
516 AC_DEFINE_UNQUOTED($ac_tr_file) $2], $3)dnl
520 dnl set $(KRB4) from --with-krb4=value -- WITH_KRB4
524 [ --without-krb4 don't include Kerberos V4 backwards compatibility
525 --with-krb4 use V4 libraries included with V5 (default)
526 --with-krb4=KRB4DIR use preinstalled V4 libraries],
530 if test $withval = no; then
531 AC_MSG_NOTICE(no krb4 support)
537 krb5_cv_build_krb4_libs=no
540 AC_DEFINE([KRB5_KRB4_COMPAT], 1, [Define this if building with krb4 compat])
541 if test $withval = yes; then
542 AC_MSG_NOTICE(enabling built in krb4 support)
543 KRB4_DEPLIB='$(TOPLIBD)/libkrb4$(DEPLIBEXT)'
545 KRB4_INCLUDES='-I$(SRCTOP)/include/kerberosIV -I$(BUILDTOP)/include/kerberosIV'
547 KRB_ERR_H_DEP='$(BUILDTOP)/include/kerberosIV/krb_err.h'
548 krb5_cv_build_krb4_libs=yes
551 AC_MSG_NOTICE(using preinstalled krb4 in $withval)
553 dnl DEPKRB4_LIB="$withval/lib/libkrb.a"
554 KRB4_INCLUDES="-I$withval/include"
555 KRB4_LIBPATH="-L$withval/lib"
557 krb5_cv_build_krb4_libs=no
558 krb5_cv_krb4_libdir="$withval/lib"
561 AC_SUBST(KRB4_INCLUDES)
562 AC_SUBST(KRB4_LIBPATH)
564 AC_SUBST(KRB4_DEPLIB)
565 AC_SUBST(KRB_ERR_H_DEP)
566 dnl We always compile the des425 library
567 DES425_DEPLIB='$(TOPLIBD)/libdes425$(DEPLIBEXT)'
569 AC_SUBST(DES425_DEPLIB)
574 AC_DEFUN(KRB5_AC_CHECK_FOR_CFLAGS,[
575 AC_BEFORE([$0],[AC_PROG_CC])
576 krb5_ac_cflags_set=${CFLAGS+set}
579 AC_DEFUN(WITH_CC,[dnl
580 AC_REQUIRE([KRB5_AC_CHECK_FOR_CFLAGS])dnl
581 AC_REQUIRE([AC_PROG_CC])dnl
582 krb5_cv_prog_gcc=$ac_cv_c_compiler_gnu
583 if test $ac_cv_c_compiler_gnu = yes ; then
588 AC_CACHE_CHECK([for GNU linker], krb5_cv_prog_gnu_ld,
589 [krb5_cv_prog_gnu_ld=no
590 if test "$GCC" = yes; then
591 if AC_TRY_COMMAND([$CC -Wl,-v 2>&1 dnl
592 | grep "GNU ld" > /dev/null]); then
593 krb5_cv_prog_gnu_ld=yes
596 # maybe add -Waggregate-return, or can we assume that actually works by now?
597 # -Wno-comment used to be used for SunOS system header <sys/stream.h>
598 # -Wno-long-long, if needed, for k5-platform.h without inttypes.h etc.
599 extra_gcc_warn_opts="-Wall -Wmissing-prototypes -Wcast-qual \
600 -Wcast-align -Wconversion -Wshadow"
601 if test "$GCC" = yes ; then
602 if test "x$krb5_ac_cflags_set" = xset ; then
603 AC_MSG_NOTICE(not adding extra gcc warning flags because CFLAGS was set)
605 AC_MSG_NOTICE(adding extra warning flags for gcc)
606 CFLAGS="$CFLAGS $extra_gcc_warn_opts"
607 if test "`uname -s`" = Darwin ; then
608 AC_MSG_NOTICE(skipping pedantic warnings on Darwin)
609 elif test "`uname -s`" = Linux ; then
610 AC_MSG_NOTICE(skipping pedantic warnings on Linux)
612 CFLAGS="$CFLAGS -pedantic"
615 if test "`uname -s`" = Darwin ; then
616 # Someday this should be a feature test.
617 # One current (Jaguar = OS 10.2) problem:
618 # Archive library with foo.o undef sym X and bar.o common sym X,
619 # if foo.o is pulled in at link time, bar.o may not be, causing
620 # the linker to complain.
621 # Dynamic library problems too?
622 case "$CC $CFLAGS" in
623 *-fcommon*) ;; # why someone would do this, I don't know
624 *-fno-common*) ;; # okay, they're already doing the right thing
626 AC_MSG_NOTICE(disabling the use of common storage on Darwin)
627 CFLAGS="$CFLAGS -fno-common"
630 case "$LD $LDFLAGS" in
631 *-Wl,-search_paths_first*) ;;
632 *) LDFLAGS="${LDFLAGS} -Wl,-search_paths_first" ;;
636 if test "`uname -s`" = AIX ; then
637 # Using AIX but not GCC, assume native compiler.
638 # The native compiler appears not to give a nonzero exit
639 # status for certain classes of errors, like missing arguments
640 # in function calls. Let's try to fix that with -qhalt=e.
641 case "$CC $CFLAGS" in
644 CFLAGS="$CFLAGS -qhalt=e"
645 AC_MSG_NOTICE(adding -qhalt=e for better error reporting)
648 # Also, the optimizer isn't turned on by default, which means
649 # the static inline functions get left in random object files,
650 # leading to references to pthread_mutex_lock from anything that
651 # includes k5-int.h whether it uses threads or not.
652 case "$CC $CFLAGS" in
656 AC_MSG_NOTICE(adding -O for inline thread-support function elimination)
664 dnl check for yylineno -- HAVE_YYLINENO
666 AC_DEFUN(HAVE_YYLINENO,[dnl
667 AC_REQUIRE_CPP()AC_REQUIRE([AC_PROG_LEX])dnl
668 AC_MSG_CHECKING([for yylineno declaration])
669 AC_CACHE_VAL(krb5_cv_type_yylineno,
670 # some systems have yylineno, others don't...
672 %%' | ${LEX} -t > conftest.out
673 if egrep yylineno conftest.out >/dev/null 2>&1; then
674 krb5_cv_type_yylineno=yes
676 krb5_cv_type_yylineno=no
679 AC_MSG_RESULT($krb5_cv_type_yylineno)
680 if test $krb5_cv_type_yylineno = no; then
681 AC_DEFINE(NO_YYLINENO, 1, [Define if lex produes code with yylineno])
685 dnl K5_GEN_MAKEFILE([dir, [frags]])
687 AC_DEFUN(K5_GEN_MAKEFILE,[dnl
688 ifelse($1, ,[_K5_GEN_MAKEFILE(.,$2)],[_K5_GEN_MAKEFILE($1,$2)])
691 dnl _K5_GEN_MAKEFILE(dir, [frags])
692 dnl dir must be present in this case
693 dnl Note: Be careful in quoting.
694 dnl The ac_foreach generates the list of fragments to include
695 dnl or "" if $2 is empty
696 AC_DEFUN(_K5_GEN_MAKEFILE,[dnl
697 AC_CONFIG_FILES([$1/Makefile:$krb5_pre_in:$1/Makefile.in:$krb5_post_in])
700 dnl K5_GEN_FILE( <ac_output arguments> )
702 AC_DEFUN(K5_GEN_FILE,[AC_CONFIG_FILES($1)])dnl
705 dnl Note: Adds the variables to config.status for individual
706 dnl Makefile generation from config.statsu
707 AC_DEFUN(K5_AC_OUTPUT,[dnl
708 AC_CONFIG_COMMANDS([krb5_config_prefix], [], dnl
709 [krb5_pre_in=$krb5_pre_in
710 ac_config_fragdir=$ac_config_fragdir
711 krb5_post_in=$krb5_post_in])
714 dnl V5_AC_OUTPUT_MAKEFILE
716 AC_DEFUN(V5_AC_OUTPUT_MAKEFILE,
717 [ifelse($1, , [_V5_AC_OUTPUT_MAKEFILE(.,$2)],[_V5_AC_OUTPUT_MAKEFILE($1,$2)])])
719 define(_V5_AC_OUTPUT_MAKEFILE,
720 [ifelse($2, , ,AC_CONFIG_FILES($2))
721 AC_FOREACH([DIR], [$1],dnl
722 [AC_CONFIG_FILES(DIR[/Makefile:$krb5_pre_in:]DIR[/Makefile.in:$krb5_post_in])])
726 dnl KRB5_SOCKADDR_SA_LEN: define HAVE_SA_LEN if sockaddr contains the sa_len
729 AC_DEFUN([KRB5_SOCKADDR_SA_LEN],[ dnl
730 AC_CHECK_MEMBER(struct sockaddr.sa_len,
731 AC_DEFINE(HAVE_SA_LEN,1,[Define if struct sockaddr contains sa_len])
732 ,,[#include <sys/types.h>
733 #include <sys/socket.h>])])
736 dnl CHECK_UTMP: check utmp structure and functions
738 AC_DEFUN(CHECK_UTMP,[
739 AC_CHECK_MEMBERS([struct utmp.ut_pid, struct utmp.ut_type, struct utmp.ut_host, struct utmp.ut_exit],,,
740 [#include <sys/types.h>
743 # Define the names actually used in the krb5 code currently:
744 if test $ac_cv_member_struct_utmp_ut_pid = no; then
745 AC_DEFINE(NO_UT_PID,1,[Define if ut_pid field not found])
747 if test $ac_cv_member_struct_utmp_ut_type = no; then
748 AC_DEFINE(NO_UT_TYPE,1,[Define if ut_type field not found])
750 if test $ac_cv_member_struct_utmp_ut_host = no; then
751 AC_DEFINE(NO_UT_HOST,1,[Define if ut_host field not found])
753 if test $ac_cv_member_struct_utmp_ut_exit = no; then
754 AC_DEFINE(NO_UT_EXIT,1,[Define if ut_exit field not found])
757 AC_CHECK_FUNCS(setutent setutxent updwtmp updwtmpx)
763 AC_DEFUN(WITH_NETLIB,[
764 AC_ARG_WITH([netlib],
765 AC_HELP_STRING([--with-netlib=LIBS], use user defined resolver library),
766 [ if test "$withval" = yes -o "$withval" = no ; then
767 AC_MSG_RESULT("netlib will link with C library resolver only")
769 LIBS="$LIBS $withval"
770 AC_MSG_RESULT("netlib will use \'$withval\'")
777 AC_DEFUN(KRB5_AC_NEED_DAEMON, [
778 KRB5_NEED_PROTO([#ifdef HAVE_UNISTD_H
780 #endif],daemon,1)])dnl
782 dnl Check if stdarg or varargs is available *and compiles*; prefer stdarg.
783 dnl (This was sent to djm for incorporation into autoconf 3/12/1996. KR)
785 AC_DEFUN(AC_HEADER_STDARG, [
787 AC_MSG_CHECKING([for stdarg.h])
788 AC_CACHE_VAL(ac_cv_header_stdarg_h,
789 [AC_TRY_COMPILE([#include <stdarg.h>], [
790 } /* ac_try_compile will have started a function body */
791 int aoeu (char *format, ...) {
794 va_start (v, format);
797 ],ac_cv_header_stdarg_h=yes,ac_cv_header_stdarg_h=no)])dnl
798 AC_MSG_RESULT($ac_cv_header_stdarg_h)
799 if test $ac_cv_header_stdarg_h = yes; then
800 AC_DEFINE(HAVE_STDARG_H, 1, [Define if stdarg available and compiles])
803 AC_MSG_CHECKING([for varargs.h])
804 AC_CACHE_VAL(ac_cv_header_varargs_h,
805 [AC_TRY_COMPILE([#include <varargs.h>],[
806 } /* ac_try_compile will have started a function body */
807 int aoeu (va_alist) va_dcl {
813 ],ac_cv_header_varargs_h=yes,ac_cv_header_varargs_h=no)])dnl
814 AC_MSG_RESULT($ac_cv_header_varargs_h)
815 if test $ac_cv_header_varargs_h = yes; then
816 AC_DEFINE(HAVE_VARARGS_H, 1, [Define if varargs available and compiles])
818 AC_MSG_ERROR(Neither stdarg nor varargs compile?)
821 fi dnl stdarg test failure
826 dnl KRB5_AC_NEED_LIBGEN --- check if libgen needs to be linked in for
830 AC_DEFUN(KRB5_AC_NEED_LIBGEN,[
831 AC_REQUIRE([AC_PROG_CC])dnl
833 dnl regcomp is present but non-functional on Solaris 2.4
835 AC_MSG_CHECKING(for working regcomp)
836 AC_CACHE_VAL(ac_cv_func_regcomp,[
838 #include <sys/types.h>
840 regex_t x; regmatch_t m;
841 int main() { return regcomp(&x,"pat.*",0) || regexec(&x,"pattern",1,&m,0); }
842 ], ac_cv_func_regcomp=yes, ac_cv_func_regcomp=no, AC_MSG_ERROR([Cannot test regcomp when cross compiling]))])
843 AC_MSG_RESULT($ac_cv_func_regcomp)
844 test $ac_cv_func_regcomp = yes && AC_DEFINE(HAVE_REGCOMP,1,[Define if regcomp exists and functions])
846 dnl Check for the compile and step functions - only if regcomp is not available
848 if test $ac_cv_func_regcomp = no; then
851 dnl this will fail if there's no compile/step in -lgen, or if there's
852 dnl no -lgen. This is fine.
853 AC_CHECK_FUNCS(compile step)
856 dnl Set GEN_LIB if necessary
858 AC_CHECK_LIB(gen, compile, GEN_LIB=-lgen, GEN_LIB=)
863 dnl KRB5_AC_REGEX_FUNCS --- check for different regular expression
864 dnl support functions
866 AC_DEFUN(KRB5_AC_REGEX_FUNCS,[
867 AC_CHECK_FUNCS(re_comp re_exec regexec)
868 AC_REQUIRE([KRB5_AC_NEED_LIBGEN])dnl
871 dnl AC_KRB5_TCL_FIND_CONFIG (uses tcl_dir)
873 AC_DEFUN(AC_KRB5_TCL_FIND_CONFIG,[
874 AC_REQUIRE([KRB5_LIB_AUX])dnl
875 AC_MSG_CHECKING(for tclConfig.sh)
876 if test -r "$tcl_dir/lib/tclConfig.sh" ; then
877 tcl_conf="$tcl_dir/lib/tclConfig.sh"
878 elif test -r "$tcl_dir/tclConfig.sh" ; then
879 tcl_conf="$tcl_dir/tclConfig.sh"
883 changequote(<<,>>)dnl
884 for d in "$lib" "$lib"/tcl7.[0-9] "$lib"/tcl8.[0-9] ; do
885 if test -r "$d/tclConfig.sh" ; then
886 tcl_conf="$tcl_conf $d/tclConfig.sh"
891 if test -n "$tcl_conf" ; then
892 AC_MSG_RESULT($tcl_conf)
894 AC_MSG_RESULT(not found)
899 old_CPPFLAGS=$CPPFLAGS
902 if test -n "$tcl_conf" ; then
903 for file in $tcl_conf ; do
904 TCL_MAJOR_VERSION=x ; TCL_MINOR_VERSION=x
905 AC_MSG_CHECKING(Tcl info in $file)
907 v=$TCL_MAJOR_VERSION.$TCL_MINOR_VERSION
908 if test -z "$tcl_vers_maj" \
909 || test "$tcl_vers_maj" -lt "$TCL_MAJOR_VERSION" \
910 || test "$tcl_vers_maj" = "$TCL_MAJOR_VERSION" -a "$tcl_vers_min" -lt "$TCL_MINOR_VERSION" ; then
911 for incdir in "$TCL_PREFIX/include/tcl$v" "$TCL_PREFIX/include" ; do
912 if test -r "$incdir/tcl.h" -o -r "$incdir/tcl/tcl.h" ; then
913 CPPFLAGS="$old_CPPFLAGS -I$incdir"
917 LIBS="$old_LIBS `eval echo x $TCL_LIB_SPEC $TCL_LIBS | sed 's/^x//'`"
918 LDFLAGS="$old_LDFLAGS $TCL_LD_FLAGS"
919 AC_TRY_LINK( , [Tcl_CreateInterp ();],
921 tcl_vers_maj=$TCL_MAJOR_VERSION
922 tcl_vers_min=$TCL_MINOR_VERSION
923 AC_MSG_RESULT($v - working),
924 AC_MSG_RESULT($v - compilation failed)
927 AC_MSG_RESULT(older version $v)
931 CPPFLAGS=$old_CPPFLAGS
936 if test -n "$tcl_ok_conf" ; then
939 for incdir in "$TCL_PREFIX/include/tcl$v" "$TCL_PREFIX/include" ; do
940 if test -r "$incdir/tcl.h" -o -r "$incdir/tcl/tcl.h" ; then
941 if test "$incdir" != "/usr/include" ; then
942 TCL_INCLUDES=-I$incdir
947 # Need eval because the first-level expansion could reference
948 # variables like ${TCL_DBGX}.
949 eval TCL_LIBS='"'$TCL_LIB_SPEC $TCL_LIBS $TCL_DL_LIBS'"'
950 TCL_LIBPATH="-L$TCL_EXEC_PREFIX/lib"
951 TCL_RPATH=":$TCL_EXEC_PREFIX/lib"
952 if test "$DEPLIBEXT" != "$SHLIBEXT" && test -n "$RPATH_FLAG"; then
953 TCL_MAYBE_RPATH='$(RPATH_FLAG)'"$TCL_EXEC_PREFIX/lib$RPATH_TAIL"
957 CPPFLAGS="$old_CPPFLAGS $TCL_INCLUDES"
958 AC_CHECK_HEADER(tcl.h,AC_DEFINE(HAVE_TCL_H,1,[Define if tcl.h is available]) tcl_header=yes)
959 if test $tcl_header=no; then
960 AC_CHECK_HEADER(tcl/tcl.h,AC_DEFINE(HAVE_TCL_TCL_H,1,[Define if tcl/tcl.h is available]) tcl_header=yes)
962 CPPFLAGS="$old_CPPFLAGS"
965 # If we read a tclConfig.sh file, it probably set this.
968 AC_SUBST(TCL_INCLUDES)
970 AC_SUBST(TCL_LIBPATH)
972 AC_SUBST(TCL_MAYBE_RPATH)
975 dnl AC_KRB5_TCL_TRYOLD
976 dnl attempt to use old search algorithm for locating tcl
978 AC_DEFUN(AC_KRB5_TCL_TRYOLD, [
979 AC_REQUIRE([KRB5_AC_FIND_DLOPEN])
980 AC_MSG_WARN([trying old tcl search code])
981 if test "$with_tcl" != yes -a "$with_tcl" != no; then
982 TCL_INCLUDES=-I$with_tcl/include
983 TCL_LIBPATH=-L$with_tcl/lib
984 TCL_RPATH=:$with_tcl/lib
986 if test "$with_tcl" != no ; then
987 krb5_save_CPPFLAGS="$CPPFLAGS"
988 krb5_save_LDFLAGS="$LDFLAGS"
989 CPPFLAGS="$CPPFLAGS $TCL_INCLUDES"
990 LDFLAGS="$LDFLAGS $TCL_LIBPATH"
992 AC_CHECK_HEADER(tcl.h,AC_DEFINE(HAVE_TCL_H,1,[Define if tcl.h found]) tcl_header=yes)
993 if test $tcl_header=no; then
994 AC_CHECK_HEADER(tcl/tcl.h,AC_DEFINE(HAVE_TCL_TCL_H,1,[Define if tcl/tcl.h found]) tcl_header=yes)
997 if test $tcl_header = yes ; then
1000 if test $tcl_lib = no; then
1001 AC_CHECK_LIB(tcl8.0, Tcl_CreateCommand,
1002 TCL_LIBS="$TCL_LIBS -ltcl8.0 -lm $DL_LIB $LIBS"
1003 tcl_lib=yes,,-lm $DL_LIB)
1005 if test $tcl_lib = no; then
1006 AC_CHECK_LIB(tcl7.6, Tcl_CreateCommand,
1007 TCL_LIBS="$TCL_LIBS -ltcl7.6 -lm $DL_LIB $LIBS"
1008 tcl_lib=yes,,-lm $DL_LIB)
1010 if test $tcl_lib = no; then
1011 AC_CHECK_LIB(tcl7.5, Tcl_CreateCommand,
1012 TCL_LIBS="$TCL_LIBS -ltcl7.5 -lm $DL_LIB $LIBS"
1013 tcl_lib=yes,,-lm $DL_LIB)
1016 if test $tcl_lib = no ; then
1017 AC_CHECK_LIB(tcl, Tcl_CreateCommand,
1018 TCL_LIBS="$TCL_LIBS -ltcl -lm $DL_LIB $LIBS"
1019 tcl_lib=yes,,-lm $DL_LIB)
1022 if test $tcl_lib = no ; then
1023 AC_MSG_WARN("tcl.h found but not library")
1026 AC_MSG_WARN(Could not find Tcl which is needed for the kadm5 tests)
1029 CPPFLAGS="$krb5_save_CPPFLAGS"
1030 LDFLAGS="$krb5_save_LDFLAGS"
1031 AC_SUBST(TCL_INCLUDES)
1033 AC_SUBST(TCL_LIBPATH)
1036 AC_MSG_RESULT("Not looking for Tcl library")
1040 dnl AC_KRB5_TCL - determine if the TCL library is present on system
1042 AC_DEFUN(AC_KRB5_TCL,[
1050 [ --with-tcl=path where Tcl resides], , with_tcl=try)
1051 if test "$with_tcl" = no ; then
1053 elif test "$with_tcl" = yes -o "$with_tcl" = try ; then
1055 if test ! -r /usr/lib/tclConfig.sh; then
1056 cat >> conftest <<\EOF
1057 puts "tcl_dir=$tcl_library"
1059 if tclsh conftest >conftest.out 2>/dev/null; then
1060 if grep tcl_dir= conftest.out >/dev/null 2>&1; then
1061 t=`sed s/tcl_dir=// conftest.out`
1064 fi # tclsh ran script okay
1065 rm -f conftest conftest.out
1066 fi # no /usr/lib/tclConfig.sh
1070 if test "$with_tcl" != no ; then
1071 AC_KRB5_TCL_FIND_CONFIG
1072 if test $tcl_lib = no ; then
1073 if test "$with_tcl" != try ; then
1076 AC_MSG_WARN(Could not find Tcl which is needed for some tests)
1080 # If "yes" or pathname, error out if not found.
1081 if test "$with_tcl" != no -a "$with_tcl" != try ; then
1082 if test "$tcl_header $tcl_lib" != "yes yes" ; then
1083 AC_MSG_ERROR(Could not find Tcl)
1091 AC_DEFUN(WITH_HESIOD,
1092 [AC_ARG_WITH(hesiod, AC_HELP_STRING(--with-hesiod[=path], compile with hesiod support @<:@omitted@:>@),
1093 hesiod=$with_hesiod, with_hesiod=no)
1094 if test "$with_hesiod" != "no"; then
1095 HESIOD_DEFS=-DHESIOD
1096 AC_CHECK_LIB(resolv, res_send, res_lib=-lresolv)
1097 if test "$hesiod" != "yes"; then
1098 HESIOD_LIBS="-L${hesiod}/lib -lhesiod $res_lib"
1100 HESIOD_LIBS="-lhesiod $res_lib"
1106 AC_SUBST(HESIOD_DEFS)
1107 AC_SUBST(HESIOD_LIBS)])
1111 dnl KRB5_BUILD_LIBRARY
1113 dnl Pull in the necessary stuff to create the libraries.
1115 AC_DEFUN(KRB5_BUILD_LIBRARY,
1116 [KRB5_BUILD_LIBRARY_WITH_DEPS
1117 # null out SHLIB_EXPFLAGS because we lack any dependencies
1121 dnl KRB5_BUILD_LIBRARY_STATIC
1123 dnl Force static library build.
1125 AC_DEFUN(KRB5_AC_FORCE_STATIC,[dnl
1126 AC_BEFORE([$0],[KRB5_LIB_AUX])dnl
1127 krb5_force_static=yes])
1128 AC_DEFUN(KRB5_BUILD_LIBRARY_STATIC,
1129 dnl Use define rather than AC_DEFUN to avoid ordering problems.
1130 [AC_REQUIRE([KRB5_AC_FORCE_STATIC])dnl
1132 # If we're only building static libraries, they're for build-time use only,
1137 dnl KRB5_BUILD_LIBRARY_WITH_DEPS
1139 dnl Like KRB5_BUILD_LIBRARY, but adds in explicit dependencies in the
1140 dnl generated shared library.
1142 AC_DEFUN(KRB5_BUILD_LIBRARY_WITH_DEPS,
1143 [AC_REQUIRE([KRB5_LIB_AUX])dnl
1144 AC_REQUIRE([AC_PROG_LN_S])dnl
1145 AC_REQUIRE([AC_PROG_RANLIB])dnl
1146 AC_REQUIRE([AC_PROG_ARCHIVE])dnl
1147 AC_REQUIRE([AC_PROG_ARCHIVE_ADD])dnl
1148 AC_REQUIRE([AC_PROG_INSTALL])dnl
1149 AC_CHECK_PROG(AR, ar, ar, false)
1150 AC_CHECK_PROG(PERL, perl, perl, false)
1151 if test "$ac_cv_prog_PERL" = "false"; then
1152 AC_MSG_ERROR(Perl is now required for Kerberos builds.)
1156 AC_SUBST(MAKE_SHLIB_COMMAND)
1157 AC_SUBST(SHLIB_EXPFLAGS)
1158 AC_SUBST(SHLIB_EXPORT_FILE_DEP)
1159 AC_SUBST(DYNOBJ_EXPDEPS)
1160 AC_SUBST(DYNOBJ_EXPFLAGS)
1161 AC_SUBST(INSTALL_SHLIB)
1168 AC_SUBST(LIBINSTLIST)
1170 AC_SUBST(MAKE_DYNOBJ_COMMAND)
1174 dnl KRB5_BUILD_LIBOBJS
1176 dnl Pull in the necessary stuff to build library objects.
1178 AC_DEFUN(KRB5_BUILD_LIBOBJS,
1179 [AC_REQUIRE([KRB5_LIB_AUX])dnl
1185 AC_SUBST(PROFFLAGS)])
1188 dnl KRB5_BUILD_PROGRAM
1190 dnl Set variables to build a program.
1192 AC_DEFUN(KRB5_BUILD_PROGRAM,
1193 [AC_REQUIRE([KRB5_LIB_AUX])dnl
1194 AC_REQUIRE([KRB5_AC_NEED_LIBGEN])dnl
1196 AC_SUBST(RPATH_FLAG)
1197 AC_SUBST(DEPLIBEXT)])
1202 dnl Set up environment for running dynamic executables out of build tree
1204 AC_DEFUN(KRB5_RUN_FLAGS,
1205 [AC_REQUIRE([KRB5_LIB_AUX])dnl
1206 KRB5_RUN_ENV="$RUN_ENV"
1207 AC_SUBST(KRB5_RUN_ENV)])
1212 dnl Parse configure options related to library building.
1214 AC_DEFUN(KRB5_LIB_AUX,
1215 [AC_REQUIRE([KRB5_LIB_PARAMS])dnl
1217 # Check whether to build static libraries.
1218 AC_ARG_ENABLE([static],
1219 AC_HELP_STRING([--enable-static],[build static libraries @<:@disabled for most platforms@:>@])
1220 AC_HELP_STRING([--disable-static],[don't build static libraries]), ,
1221 [enable_static=$default_static])
1223 if test "$enable_static" = no && test "$krb5_force_static" != yes; then
1224 AC_MSG_NOTICE([disabling static libraries])
1229 LIBLIST='lib$(LIBBASE)$(STLIBEXT)'
1230 LIBLINKS='$(TOPLIBD)/lib$(LIBBASE)$(STLIBEXT)'
1232 LIBINSTLIST=install-static
1234 # CFLAGS="$CFLAGS -D_KDB5_STATIC_LINK"
1237 # Check whether to build shared libraries.
1238 AC_ARG_ENABLE([shared],
1239 AC_HELP_STRING([--enable-shared],[build shared libraries @<:@enabled for most platforms@:>@])
1240 AC_HELP_STRING([--disable-shared],[don't build shared libraries]), ,
1241 [enable_shared=$default_shared])
1243 if test "$enable_shared" = yes; then
1246 AC_MSG_WARN([shared libraries not supported on this architecture])
1248 CC_LINK="$CC_LINK_STATIC"
1251 # set this now because some logic below may reset SHLIBEXT
1253 if test "$krb5_force_static" = "yes"; then
1254 AC_MSG_RESULT([Forcing static libraries.])
1255 # avoid duplicate rules generation for AIX and such
1256 SHLIBEXT=.so-nobuild
1257 SHLIBVEXT=.so.v-nobuild
1258 SHLIBSEXT=.so.s-nobuild
1260 AC_MSG_NOTICE([enabling shared libraries])
1261 # Clear some stuff in case of AIX, etc.
1262 if test "$STLIBEXT" = "$SHLIBEXT" ; then
1269 LIBLIST="$LIBLIST "'lib$(LIBBASE)$(SHLIBEXT)'
1270 LIBLINKS="$LIBLINKS "'$(TOPLIBD)/lib$(LIBBASE)$(SHLIBEXT) $(TOPLIBD)/lib$(LIBBASE)$(SHLIBVEXT)'
1271 case "$SHLIBSEXT" in
1273 LIBINSTLIST="$LIBINSTLIST install-shared"
1276 LIBLIST="$LIBLIST "'lib$(LIBBASE)$(SHLIBSEXT)'
1277 LIBLINKS="$LIBLINKS "'$(TOPLIBD)/lib$(LIBBASE)$(SHLIBSEXT)'
1278 LIBINSTLIST="$LIBINSTLIST install-shlib-soname"
1281 OBJLISTS="$OBJLISTS OBJS.SH"
1283 CC_LINK="$CC_LINK_SHARED"
1288 CC_LINK="$CC_LINK_STATIC"
1289 SHLIBEXT=.so-nobuild
1290 SHLIBVEXT=.so.v-nobuild
1291 SHLIBSEXT=.so.s-nobuild
1294 if test "$build_dynobj" = yes; then
1295 OBJLISTS=`echo $OBJLISTS | sed -e s/OBJS.ST//g -e s/OBJS.SH//g`
1296 OBJLISTS="$OBJLISTS OBJS.SH"
1299 if test -z "$LIBLIST"; then
1300 AC_MSG_ERROR([must enable one of shared or static libraries])
1303 # Check whether to build profiled libraries.
1304 AC_ARG_ENABLE([profiled],
1305 [ --enable-profiled build profiled libraries @<:@disabled@:>@],
1306 [if test "$enableval" = yes; then
1309 AC_MSG_WARN([Profiled libraries not supported on this architecture.])
1312 AC_MSG_NOTICE([enabling profiled libraries])
1313 LIBLIST="$LIBLIST "'lib$(LIBBASE)$(PFLIBEXT)'
1314 LIBLINKS="$LIBLINKS "'$(TOPLIBD)/lib$(LIBBASE)$(PFLIBEXT)'
1315 OBJLISTS="$OBJLISTS OBJS.PF"
1316 LIBINSTLIST="$LIBINSTLIST install-profiled"
1324 dnl Determine parameters related to libraries, e.g. various extensions.
1326 AC_DEFUN(KRB5_LIB_PARAMS,
1327 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
1329 AC_SUBST(krb5_cv_host)
1330 AC_REQUIRE([AC_PROG_CC])dnl
1331 AC_REQUIRE([V5_SET_TOPDIR])dnl
1332 . $ac_topdir/config/shlib.conf])
1334 dnl The following was written by jhawk@mit.edu
1336 dnl AC_LIBRARY_NET: Id: net.m4,v 1.4 1997/10/25 20:49:53 jhawk Exp
1338 dnl This test is for network applications that need socket() and
1339 dnl gethostbyname() -ish functions. Under Solaris, those applications need to
1340 dnl link with "-lsocket -lnsl". Under IRIX, they should *not* link with
1341 dnl "-lsocket" because libsocket.a breaks a number of things (for instance:
1342 dnl gethostbyname() under IRIX 5.2, and snoop sockets under most versions of
1345 dnl Unfortunately, many application developers are not aware of this, and
1346 dnl mistakenly write tests that cause -lsocket to be used under IRIX. It is
1347 dnl also easy to write tests that cause -lnsl to be used under operating
1348 dnl systems where neither are necessary (or useful), such as SunOS 4.1.4, which
1349 dnl uses -lnsl for TLI.
1351 dnl This test exists so that every application developer does not test this in
1352 dnl a different, and subtly broken fashion.
1354 dnl It has been argued that this test should be broken up into two seperate
1355 dnl tests, one for the resolver libraries, and one for the libraries necessary
1356 dnl for using Sockets API. Unfortunately, the two are carefully intertwined and
1357 dnl allowing the autoconf user to use them independantly potentially results in
1358 dnl unfortunate ordering dependancies -- as such, such component macros would
1359 dnl have to carefully use indirection and be aware if the other components were
1360 dnl executed. Since other autoconf macros do not go to this trouble, and almost
1361 dnl no applications use sockets without the resolver, this complexity has not
1362 dnl been implemented.
1364 dnl The check for libresolv is in case you are attempting to link statically
1365 dnl and happen to have a libresolv.a lying around (and no libnsl.a).
1367 AC_DEFUN(AC_LIBRARY_NET, [
1368 # Most operating systems have gethostbyname() in the default searched
1369 # libraries (i.e. libc):
1370 AC_CHECK_FUNC(gethostbyname, , [
1371 # Some OSes (eg. Solaris) place it in libnsl:
1372 AC_CHECK_LIB(nsl, gethostbyname, , [
1373 # Some strange OSes (SINIX) have it in libsocket:
1374 AC_CHECK_LIB(socket, gethostbyname, , [
1375 # Unfortunately libsocket sometimes depends on libnsl.
1376 # AC_CHECK_LIB's API is essentially broken so the following
1377 # ugliness is necessary:
1378 AC_CHECK_LIB(socket, gethostbyname,
1379 LIBS="-lsocket -lnsl $LIBS",
1380 [AC_CHECK_LIB(resolv, gethostbyname,
1381 LIBS="-lresolv $LIBS" )],
1386 AC_CHECK_FUNC(socket, , AC_CHECK_LIB(socket, socket, ,
1387 AC_CHECK_LIB(socket, socket, LIBS="-lsocket -lnsl $LIBS", , -lnsl)))
1389 if test "$enable_dns" = yes ; then
1390 # We assume that if libresolv exists we can link against it.
1391 # This may get us a gethostby* that doesn't respect nsswitch.
1392 AC_CHECK_LIB(resolv, main)
1394 _KRB5_AC_CHECK_RES_FUNCS(res_ninit res_nclose res_ndestroy res_nsearch dnl
1395 ns_initparse ns_name_uncompress dn_skipname res_search)
1396 if test $krb5_cv_func_res_nsearch = no \
1397 && test $krb5_cv_func_res_search = no; then
1398 # Attempt to link with res_search(), in case it's not prototyped.
1399 AC_CHECK_FUNC(res_search,
1400 [AC_DEFINE(HAVE_RES_SEARCH, 1,
1401 [Define to 1 if you have the `res_search' function])],
1402 [AC_ERROR([cannot find res_nsearch or res_search])])
1406 AC_DEFUN([_KRB5_AC_CHECK_RES_FUNCS],
1407 [AC_FOREACH([AC_Func], [$1],
1408 [AH_TEMPLATE(AS_TR_CPP(HAVE_[]AC_Func),
1409 [Define to 1 if you have the `]AC_Func[' function.])])dnl
1410 for krb5_func in $1; do
1411 _KRB5_AC_CHECK_RES_FUNC($krb5_func)
1414 AC_DEFUN([_KRB5_AC_CHECK_RES_FUNC], [
1415 # Solaris 9 prototypes ns_name_uncompress() in arpa/nameser.h, but
1416 # doesn't export it from libresolv.so, so we use extreme paranoia here
1417 # and check both for the declaration and that we can link against the
1419 AC_CACHE_CHECK([for $1], [krb5_cv_func_$1], [AC_TRY_LINK(
1420 [#include <sys/types.h>
1421 #include <netinet/in.h>
1422 #include <arpa/nameser.h>
1423 @%:@include <resolv.h>],
1425 * Use volatile, or else optimization can cause false positives.
1427 void (* volatile p)() = (void (*)())$1;],
1428 [AS_VAR_SET(krb5_cv_func_$1, yes)],
1429 [AS_VAR_SET(krb5_cv_func_$1, no)])])
1430 AS_IF([test AS_VAR_GET(krb5_cv_func_$1) = yes],
1431 [AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_$1]), 1,
1432 [Define to 1 if you have the `$1' function])])[]dnl
1436 dnl KRB5_AC_ENABLE_DNS
1438 AC_DEFUN(KRB5_AC_ENABLE_DNS, [
1440 enable_dns_for_kdc=yes
1441 AC_DEFINE(KRB5_DNS_LOOKUP_KDC,1,[Define to enable DNS lookups of Kerberos KDCs])
1443 AC_ARG_ENABLE([dns-for-realm],
1444 [ --enable-dns-for-realm enable DNS lookups of Kerberos realm names], ,
1445 [enable_dns_for_realm=no])
1446 if test "$enable_dns_for_realm" = yes; then
1447 AC_DEFINE(KRB5_DNS_LOOKUP_REALM,1,[Define to enable DNS lookups of Kerberos realm names])
1450 AC_DEFINE(KRB5_DNS_LOOKUP, 1,[Define for DNS support of locating realms and KDCs])
1455 dnl Check if we need the prototype for a function - we give it a bogus
1456 dnl prototype and if it complains - then a valid prototype exists on the
1459 dnl KRB5_NEED_PROTO(includes, function, [bypass])
1460 dnl if $3 set, don't see if library defined.
1461 dnl Useful for case where we will define in libkrb5 the function if need be
1462 dnl but want to know if a prototype exists in either case on system.
1464 AC_DEFUN([KRB5_NEED_PROTO], [
1465 ifelse([$3], ,[if test "x$ac_cv_func_$2" = xyes; then])
1466 AC_CACHE_CHECK([if $2 needs a prototype provided], krb5_cv_func_$2_noproto,
1467 AC_TRY_COMPILE([$1],
1468 [struct k5foo {int foo; } xx;
1469 extern int $2 (struct k5foo*);
1472 krb5_cv_func_$2_noproto=yes,krb5_cv_func_$2_noproto=no))
1473 if test $krb5_cv_func_$2_noproto = yes; then
1474 AC_DEFINE([NEED_]translit($2, [a-z], [A-Z])[_PROTO], 1, dnl
1475 [define if the system header files are missing prototype for $2()])
1480 dnl =============================================================
1481 dnl Internal function for testing for getpeername prototype
1483 AC_DEFUN([KRB5_GETPEERNAME_ARGS],[
1484 AC_DEFINE([GETPEERNAME_ARG2_TYPE],GETSOCKNAME_ARG2_TYPE,[Type of getpeername second argument.])
1485 AC_DEFINE([GETPEERNAME_ARG3_TYPE],GETSOCKNAME_ARG3_TYPE,[Type of getpeername second argument.])
1488 dnl =============================================================
1489 dnl Internal function for testing for getsockname arguments
1491 AC_DEFUN([TRY_GETSOCK_INT],[
1492 krb5_lib_var=`echo "$1 $2" | sed 'y% ./+-*%___p_p%'`
1493 AC_MSG_CHECKING([if getsockname() takes arguments $1 and $2])
1494 AC_CACHE_VAL(krb5_cv_getsockname_proto_$krb5_lib_var,
1496 AC_TRY_COMPILE([#include <sys/types.h>
1497 #include <sys/socket.h>
1498 extern int getsockname(int, $1, $2);
1499 ],,eval "krb5_cv_getsockname_proto_$krb5_lib_var=yes",
1500 eval "krb5_cv_getsockname_proto_$krb5_lib_var=no")])
1501 if eval "test \"`echo '$krb5_cv_getsockname_proto_'$krb5_lib_var`\" = yes"; then
1503 sock_set=yes; res1="$1"; res2="$2"
1509 dnl Determines the types of the second and third arguments to getsockname().
1511 AC_DEFUN([KRB5_GETSOCKNAME_ARGS],[
1513 for sock_arg1 in "struct sockaddr *" "void *"
1515 for sock_arg2 in "size_t *" "int *" "socklen_t *"
1517 if test $sock_set = no; then
1518 TRY_GETSOCK_INT($sock_arg1, $sock_arg2)
1522 if test "$sock_set" = no; then
1523 AC_MSG_NOTICE(assuming struct sockaddr and socklen_t for getsockname args)
1524 res1="struct sockaddr *"
1527 res1=`echo "$res1" | tr -d '*' | sed -e 's/ *$//'`
1528 res2=`echo "$res2" | tr -d '*' | sed -e 's/ *$//'`
1529 AC_DEFINE_UNQUOTED([GETSOCKNAME_ARG2_TYPE],$res1,[Type of pointer target for argument 2 to getsockname])
1530 AC_DEFINE_UNQUOTED([GETSOCKNAME_ARG3_TYPE],$res2,[Type of pointer target for argument 3 to getsockname])
1534 AC_DEFUN([KRB5_AC_CHOOSE_ET],[
1535 AC_ARG_WITH([system-et],
1536 AC_HELP_STRING(--with-system-et,use system compile_et and -lcom_err @<:@default: build and install a local version@:>@))
1537 AC_MSG_CHECKING(which version of com_err to use)
1538 if test "x$with_system_et" = xyes ; then
1540 AC_MSG_RESULT(system)
1545 if test $COM_ERR_VERSION = sys; then
1546 # check for various functions we need
1547 AC_CHECK_LIB(com_err, add_error_table, :, AC_MSG_ERROR(cannot find add_error_table in com_err library))
1548 AC_CHECK_LIB(com_err, remove_error_table, :, AC_MSG_ERROR(cannot find remove_error_table in com_err library))
1549 # make sure compile_et provides "et_foo" name
1550 cat >> conf$$e.et <<EOF
1552 error_code ERR_FOO, "foo"
1555 AC_CHECK_PROGS(compile_et,compile_et,false)
1556 if test "$compile_et" = false; then
1557 AC_MSG_ERROR(cannot find compile_et)
1559 AC_CACHE_CHECK(whether compile_et is useful,krb5_cv_compile_et_useful,[
1560 if compile_et conf$$e.et >/dev/null 2>&1 ; then true ; else
1561 AC_MSG_ERROR(execution failed)
1563 AC_TRY_COMPILE([#include "conf$$e.h"
1564 ],[ &et_foo_error_table; ],:,
1565 [AC_MSG_ERROR(cannot use et_foo_error_table)])
1566 # Anything else we need to test for?
1567 rm -f conf$$e.et conf$$e.c conf$$e.h
1568 krb5_cv_compile_et_useful=yes
1571 AC_SUBST(COM_ERR_VERSION)
1573 AC_DEFUN([KRB5_AC_CHOOSE_SS],[
1574 AC_ARG_WITH(system-ss,
1575 AC_HELP_STRING(--with-system-ss,use system -lss and mk_cmds @<:@private version@:>@))
1576 AC_ARG_VAR(SS_LIB,[system libraries for 'ss' package [-lss]])
1577 AC_MSG_CHECKING(which version of subsystem package to use)
1578 if test "x$with_system_ss" = xyes ; then
1580 AC_MSG_RESULT(system)
1581 # todo: check for various libraries we might need
1582 # in the meantime...
1583 test "x${SS_LIB+set}" = xset || SS_LIB=-lss
1585 LIBS="$LIBS $SS_LIB"
1586 AC_CACHE_CHECK(whether system ss package works, krb5_cv_system_ss_okay,[
1589 int main(int argc, char *argv[]) {
1592 i = ss_create_invocation("foo","foo","",0,&err);
1596 }], krb5_cv_system_ss_okay=yes, AC_MSG_ERROR(cannot run test program),
1597 krb5_cv_system_ss_okay="assumed")])
1604 AC_SUBST(SS_VERSION)
1607 AC_DEFUN([KRB5_AC_CHOOSE_DB],[
1608 AC_ARG_WITH(system-db,
1609 AC_HELP_STRING(--with-system-db,use system Berkeley db @<:@private version@:>@))
1610 AC_ARG_VAR(DB_HEADER,[header file for system Berkeley db package [db.h]])
1611 AC_ARG_VAR(DB_LIB,[library for system Berkeley db package [-ldb]])
1612 if test "x$with_system_db" = xyes ; then
1614 # TODO: Do we have specific routines we should check for?
1615 # How about known, easily recognizable bugs?
1616 # We want to use bt_rseq in some cases, but no other version but
1617 # ours has it right now.
1619 # Okay, check the variables.
1620 test "x${DB_HEADER+set}" = xset || DB_HEADER=db.h
1621 test "x${DB_LIB+set}" = xset || DB_LIB=-ldb
1623 if test "x${DB_HEADER}" = xdb.h ; then
1624 DB_HEADER_VERSION=sys
1626 DB_HEADER_VERSION=redirect
1628 KDB5_DB_LIB="$DB_LIB"
1631 AC_DEFINE(HAVE_BT_RSEQ,1,[Define if bt_rseq is available, for recursive btree traversal.])
1633 DB_HEADER_VERSION=k5
1634 # libdb gets sucked into libkdb
1636 # needed for a couple of things that need libdb for its own sake
1639 AC_SUBST(DB_VERSION)
1641 AC_SUBST(DB_HEADER_VERSION)
1643 AC_SUBST(KDB5_DB_LIB)
1646 dnl KRB5_AC_PRIOCNTL_HACK
1649 AC_DEFUN([KRB5_AC_PRIOCNTL_HACK],
1650 [AC_REQUIRE([AC_PROG_AWK])dnl
1651 AC_REQUIRE([AC_LANG_COMPILER_REQUIRE])dnl
1652 AC_CACHE_CHECK([whether to use priocntl hack], [krb5_cv_priocntl_hack],
1653 [case $krb5_cv_host in
1655 if test "$cross_compiling" = yes; then
1656 krb5_cv_priocntl_hack=yes
1658 # Solaris patch 117171-11 (sparc) or 117172-11 (x86)
1659 # fixes the Solaris 9 bug where final pty output
1660 # gets lost on close.
1661 if showrev -p | $AWK 'BEGIN { e = 1 }
1662 /Patch: 11717[[12]]/ { x = index[]([$]2, "-");
1663 if (substr[]([$]2, x + 1, length([$]2) - x) >= 11)
1664 { e = 0 } else { e = 1 } }
1665 END { exit e; }'; then
1666 krb5_cv_priocntl_hack=no
1668 krb5_cv_priocntl_hack=yes
1673 krb5_cv_priocntl_hack=no
1676 if test "$krb5_cv_priocntl_hack" = yes; then
1681 AC_SUBST(PRIOCNTL_HACK)])
1684 dnl KRB5_AC_GCC_ATTRS
1685 AC_DEFUN([KRB5_AC_GCC_ATTRS],
1686 [AC_CACHE_CHECK([for constructor/destructor attribute support],krb5_cv_attr_constructor_destructor,
1687 [rm -f conftest.1 conftest.2
1688 if test -r conftest.1 || test -r conftest.2 ; then
1689 AC_MSG_ERROR(write error in local file system?)
1693 if test -r conftest.1 && test -r conftest.2 ; then true ; else
1694 AC_MSG_ERROR(write error in local file system?)
1698 # blindly assume we have 'unlink'...
1699 AC_TRY_RUN([void foo1() __attribute__((constructor));
1700 void foo1() { unlink("conftest.1"); }
1701 void foo2() __attribute__((destructor));
1702 void foo2() { unlink("conftest.2"); }
1703 int main () { return 0; }],
1704 [test -r conftest.1 || a=yes
1705 test -r conftest.2 || b=yes], , AC_MSG_ERROR(Cannot test for constructor/destructor support when cross compiling))
1706 case $krb5_cv_host in
1708 # Under AIX 4.3.3, at least, shared library destructor functions
1709 # appear to get executed in reverse link order (right to left),
1710 # so that a library's destructor function may run after that of
1711 # libraries it depends on, and may still have to access in the
1714 # That counts as "not working", for me, but it's a much more
1715 # complicated test case to set up.
1719 krb5_cv_attr_constructor_destructor="$a,$b"
1721 # Okay, krb5_cv_... should be set now.
1722 case $krb5_cv_attr_constructor_destructor in
1724 AC_DEFINE(CONSTRUCTOR_ATTR_WORKS,1,[Define if __attribute__((constructor)) works]) ;;
1726 case $krb5_cv_attr_constructor_destructor in
1728 AC_DEFINE(DESTRUCTOR_ATTR_WORKS,1,[Define if __attribute__((destructor)) works]) ;;
1730 dnl End of attributes we care about right now.
1734 dnl KRB5_AC_PRAGMA_WEAK_REF
1735 AC_DEFUN([KRB5_AC_PRAGMA_WEAK_REF],
1736 [AC_CACHE_CHECK([whether pragma weak references are supported],
1737 krb5_cv_pragma_weak_ref,
1738 [AC_TRY_LINK([#pragma weak flurbl
1739 extern int flurbl(void);],[if (&flurbl != 0) return flurbl();],
1740 krb5_cv_pragma_weak_ref=yes,krb5_cv_pragma_weak_ref=no)])
1741 if test $krb5_cv_pragma_weak_ref = yes ; then
1742 AC_DEFINE(HAVE_PRAGMA_WEAK_REF,1,[Define if #pragma weak references work])
1746 m4_include(config/ac-archive/acx_pthread.m4)
1750 # Check for libutil, for NetBSD, et al.; needed for openpty() and
1751 # logwtmp() on some platforms.
1753 AC_DEFUN([KRB5_AC_LIBUTIL],
1754 [AC_CHECK_LIB(util, main,
1755 [AC_DEFINE(HAVE_LIBUTIL,1,[Define if util library is available with openpty, logwtmp, etc])
1756 UTIL_LIB=-lutil])dnl