2 AC_COPYRIGHT([Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009
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 # echo "Looking for $srcdir/$ac_config_fragdir"
35 if test -d "$srcdir/$ac_config_fragdir"; then
36 AC_CONFIG_AUX_DIR(K5_TOPDIR/config)
38 AC_MSG_ERROR([can not find config/ directory in $ac_reltopdir])
44 pushdef([x],esyscmd([sed -n 's/#define \([A-Z0-9_]*\)[ \t]*\(.*\)/\1=\2/p' < ]K5_TOPDIR/patchlevel.h))
45 define([PL_KRB5_MAJOR_RELEASE],regexp(x,[KRB5_MAJOR_RELEASE=\(.*\)],[\1]))
46 ifelse(PL_KRB5_MAJOR_RELEASE,,[errprint([Can't determine KRB5_MAJOR_RELEASE value from patchlevel.h.
47 ]) m4exit(1) dnl sometimes that does not work?
49 define([PL_KRB5_MINOR_RELEASE],regexp(x,[KRB5_MINOR_RELEASE=\(.*\)],[\1]))
50 ifelse(PL_KRB5_MINOR_RELEASE,,[errprint([Can't determine KRB5_MINOR_RELEASE value from patchlevel.h.
51 ]) m4exit(1) dnl sometimes that does not work?
53 define([PL_KRB5_PATCHLEVEL],regexp(x,[KRB5_PATCHLEVEL=\(.*\)],[\1]))
54 ifelse(PL_KRB5_PATCHLEVEL,,[errprint([Can't determine KRB5_PATCHLEVEL value from patchlevel.h.
55 ]) m4exit(1) dnl sometimes that does not work?
57 define([PL_KRB5_RELTAIL],regexp(x,[KRB5_RELTAIL="\(.*\)"],[\1]))
58 dnl RELTAIL is allowed to not be defined.
60 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))
61 define([K5_BUGADDR],krb5-bugs@mit.edu)
62 define([K5_AC_INIT],[AC_INIT(Kerberos 5, K5_VERSION, K5_BUGADDR, krb5)
66 dnl drop in standard rules for all configure files -- CONFIG_RULES
68 AC_DEFUN(CONFIG_RULES,[dnl
69 AC_REQUIRE([V5_SET_TOPDIR]) dnl
74 if test -z "$LD" ; then LD=$CC; fi
75 AC_ARG_VAR(LD,[linker command [CC]])
80 dnl allow stuff in tree to access deprecated stuff for now
81 dnl AC_DEFINE([KRB5_DEPRECATED], 1, [Define only if building in-tree])
85 KRB5_AC_MAINTAINER_MODE dnl
88 dnl This identifies the top of the source tree relative to the directory
89 dnl in which the configure file lives.
91 CONFIG_RELTOPDIR=$ac_reltopdir
92 AC_SUBST(CONFIG_RELTOPDIR)
93 lib_frag=$srcdir/$ac_config_fragdir/lib.in
94 AC_SUBST_FILE(lib_frag)
95 libobj_frag=$srcdir/$ac_config_fragdir/libobj.in
96 AC_SUBST_FILE(libobj_frag)
97 libnover_frag=$srcdir/$ac_config_fragdir/libnover.in
98 AC_SUBST_FILE(libnover_frag)
99 libpriv_frag=$srcdir/$ac_config_fragdir/libpriv.in
100 AC_SUBST_FILE(libpriv_frag)
101 libnodeps_frag=$srcdir/$ac_config_fragdir/libnodeps.in
102 AC_SUBST_FILE(libnodeps_frag)
104 KRB5_AC_PRAGMA_WEAK_REF
108 KRB5_AC_ENABLE_THREADS
110 KRB5_AC_KEYRING_CCACHE
113 dnl Maintainer mode, akin to what automake provides, 'cept we don't
114 dnl want to use automake right now.
115 AC_DEFUN([KRB5_AC_MAINTAINER_MODE],
116 [AC_ARG_ENABLE([maintainer-mode],
117 AC_HELP_STRING([--enable-maintainer-mode],[enable rebuilding of source files, Makefiles, etc]),
118 USE_MAINTAINER_MODE=$enableval,
119 USE_MAINTAINER_MODE=no)
120 if test "$USE_MAINTAINER_MODE" = yes; then
121 MAINTAINER_MODE_TRUE=
122 MAINTAINER_MODE_FALSE='#'
123 AC_MSG_NOTICE(enabling maintainer mode)
125 MAINTAINER_MODE_TRUE='#'
126 MAINTAINER_MODE_FALSE=
128 MAINT=$MAINTAINER_MODE_TRUE
129 AC_SUBST(MAINTAINER_MODE_TRUE)
130 AC_SUBST(MAINTAINER_MODE_FALSE)
135 AC_DEFUN([KRB5_AC_INITFINI],[
136 dnl Do we want initialization at load time?
137 AC_ARG_ENABLE([delayed-initialization],
138 AC_HELP_STRING([--disable-delayed-initialization],initialize library code when loaded @<:@delay until first use@:>@), , enable_delayed_initialization=yes)
139 case "$enable_delayed_initialization" in
141 AC_DEFINE(DELAY_INITIALIZER,1,[Define if library initialization should be delayed until first use]) ;;
143 *) AC_MSG_ERROR(invalid option $enable_delayed_initialization for delayed-initialization) ;;
145 dnl We always want finalization at unload time.
147 dnl Can we do things through gcc?
149 dnl How about with the linker?
150 if test -z "$use_linker_init_option" ; then
151 AC_MSG_ERROR(ran INITFINI before checking shlib.conf?)
153 if test "$use_linker_init_option" = yes; then
154 AC_DEFINE(USE_LINKER_INIT_OPTION,1,[Define if link-time options for library initialization will be used])
156 if test "$use_linker_fini_option" = yes; then
157 AC_DEFINE(USE_LINKER_FINI_OPTION,1,[Define if link-time options for library finalization will be used])
162 AC_DEFUN([KRB5_AC_FIND_DLOPEN],[
165 AC_SEARCH_LIBS(dlopen, dl, [
166 if test "$ac_cv_search_dlopen" != "none required"; then
167 DL_LIB=$ac_cv_search_dlopen
170 AC_DEFINE(USE_DLOPEN,1,[Define if dlopen should be used])])
176 AC_DEFUN([KRB5_AC_ENABLE_THREADS],[
177 AC_ARG_ENABLE([thread-support],
178 AC_HELP_STRING([--disable-thread-support],don't enable thread support @<:@enabled@:>@), , enable_thread_support=yes)
179 if test "$enable_thread_support" = yes ; then
180 AC_MSG_NOTICE(enabling thread support)
181 AC_DEFINE(ENABLE_THREADS,1,[Define if thread support enabled])
183 dnl Maybe this should be inside the conditional above? Doesn't cache....
184 if test "$enable_thread_support" = yes; then
185 ACX_PTHREAD(,[AC_MSG_ERROR([cannot determine options for enabling thread support; try --disable-thread-support])])
186 AC_MSG_NOTICE(PTHREAD_CC = $PTHREAD_CC)
187 AC_MSG_NOTICE(PTHREAD_CFLAGS = $PTHREAD_CFLAGS)
188 AC_MSG_NOTICE(PTHREAD_LIBS = $PTHREAD_LIBS)
189 dnl Not really needed -- if pthread.h isn't found, ACX_PTHREAD will fail.
190 dnl AC_CHECK_HEADERS(pthread.h)
191 # AIX and Tru64 don't support weak references, and don't have
192 # stub versions of the pthread code in libc.
195 # On these platforms, we'll always pull in the thread support.
196 LIBS="$LIBS $PTHREAD_LIBS"
197 CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
198 # We don't need to sometimes add the flags we've just folded in...
203 # These are the flags that "gcc -pthread" adds. But we don't
204 # want "-pthread" because that has link-time effects, and we
205 # don't exclude CFLAGS when linking. *sigh*
206 PTHREAD_CFLAGS="-D_REENTRANT -D_THREAD_SAFE -D_POSIX_C_SOURCE=199506L"
209 # On Solaris 10 with gcc 3.4.3, the autoconf archive macro doesn't
210 # get the right result. XXX What about Solaris 9 and earlier?
211 if test "$GCC" = yes ; then
212 PTHREAD_CFLAGS="-D_REENTRANT -pthreads"
216 # On Solaris 10 with gcc 3.4.3, the autoconf archive macro doesn't
217 # get the right result.
218 if test "$GCC" = yes ; then
219 PTHREAD_CFLAGS="-D_REENTRANT -pthreads"
221 # On Solaris 10, the thread support is always available in libc.
222 AC_DEFINE(NO_WEAK_PTHREADS,1,[Define if references to pthread routines should be non-weak.])
232 AC_SUBST(THREAD_SUPPORT)
233 dnl We want to know where these routines live, so on systems with weak
234 dnl reference support we can figure out whether or not the pthread library
235 dnl has been linked in.
236 dnl If we don't add any libraries for thread support, don't bother.
237 AC_CHECK_FUNCS(pthread_once pthread_rwlock_init)
239 test "$PTHREAD_CC" != "" && test "$ac_cv_c_compiler_gnu" = no && CC=$PTHREAD_CC
241 # On Solaris, -pthreads is added to CFLAGS, no extra explicit libraries.
242 CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
243 AC_SUBST(PTHREAD_CFLAGS)
245 LIBS="$PTHREAD_LIBS $LIBS"
246 AC_MSG_NOTICE(rechecking with PTHREAD_... options)
247 AC_CHECK_LIB(c, pthread_rwlock_init,
248 [AC_DEFINE(HAVE_PTHREAD_RWLOCK_INIT_IN_THREAD_LIB,1,[Define if pthread_rwlock_init is provided in the thread library.])])
254 dnl This is somewhat gross and should go away when the build system
255 dnl is revamped. -- tlyu
256 dnl DECLARE_SYS_ERRLIST - check for sys_errlist in libc
258 AC_DEFUN([DECLARE_SYS_ERRLIST],
259 [AC_CACHE_CHECK([for sys_errlist declaration], krb5_cv_decl_sys_errlist,
260 [AC_TRY_COMPILE([#include <stdio.h>
261 #include <errno.h>], [1+sys_nerr;],
262 krb5_cv_decl_sys_errlist=yes, krb5_cv_decl_sys_errlist=no)])
263 # assume sys_nerr won't be declared w/o being in libc
264 if test $krb5_cv_decl_sys_errlist = yes; then
265 AC_DEFINE(SYS_ERRLIST_DECLARED,1,[Define if sys_errlist is defined in errno.h])
266 AC_DEFINE(HAVE_SYS_ERRLIST,1,[Define if sys_errlist in libc])
268 # This means that sys_errlist is not declared in errno.h, but may still
270 AC_CACHE_CHECK([for sys_errlist in libc], krb5_cv_var_sys_errlist,
271 [AC_TRY_LINK([extern int sys_nerr;], [if (1+sys_nerr < 0) return 1;],
272 krb5_cv_var_sys_errlist=yes, krb5_cv_var_sys_errlist=no;)])
273 if test $krb5_cv_var_sys_errlist = yes; then
274 AC_DEFINE(HAVE_SYS_ERRLIST,1,[Define if sys_errlist in libc])
275 # Do this cruft for backwards compatibility for now.
276 AC_DEFINE(NEED_SYS_ERRLIST,1,[Define if need to declare sys_errlist])
278 AC_MSG_WARN([sys_errlist is neither in errno.h nor in libc])
283 dnl check for sigmask/sigprocmask -- CHECK_SIGPROCMASK
285 AC_DEFUN(CHECK_SIGPROCMASK,[
286 AC_MSG_CHECKING([for use of sigprocmask])
287 AC_CACHE_VAL(krb5_cv_func_sigprocmask_use,
288 [AC_TRY_LINK([#include <signal.h>], [sigprocmask(SIG_SETMASK,0,0);],
289 krb5_cv_func_sigprocmask_use=yes,
290 AC_TRY_LINK([#include <signal.h>], [sigmask(1);],
291 krb5_cv_func_sigprocmask_use=no, krb5_cv_func_sigprocmask_use=yes))])
292 AC_MSG_RESULT($krb5_cv_func_sigprocmask_use)
293 if test $krb5_cv_func_sigprocmask_use = yes; then
294 AC_DEFINE(USE_SIGPROCMASK,1,[Define if sigprocmask should be used])
298 AC_DEFUN(AC_PROG_ARCHIVE, [AC_CHECK_PROG(ARCHIVE, ar, ar cqv, false)])dnl
299 AC_DEFUN(AC_PROG_ARCHIVE_ADD, [AC_CHECK_PROG(ARADD, ar, ar cruv, false)])dnl
301 dnl check for <dirent.h> -- CHECK_DIRENT
302 dnl (may need to be more complex later)
304 AC_DEFUN(CHECK_DIRENT,[
305 AC_CHECK_HEADER(dirent.h,AC_DEFINE(USE_DIRENT_H,1,[Define if you have dirent.h functionality]))])dnl
307 dnl check if union wait is defined, or if WAIT_USES_INT -- CHECK_WAIT_TYPE
309 AC_DEFUN(CHECK_WAIT_TYPE,[
310 AC_MSG_CHECKING([if argument to wait is int *])
311 AC_CACHE_VAL(krb5_cv_struct_wait,
312 dnl Test for prototype clash - if there is none - then assume int * works
313 [AC_TRY_COMPILE([#include <sys/types.h>
314 #include <sys/wait.h>
315 extern pid_t wait(int *);],[], krb5_cv_struct_wait=no,dnl
316 dnl Else fallback on old stuff
318 [#include <sys/wait.h>], [union wait i;
323 krb5_cv_struct_wait=yes, krb5_cv_struct_wait=no)])])
324 AC_MSG_RESULT($krb5_cv_struct_wait)
325 if test $krb5_cv_struct_wait = no; then
326 AC_DEFINE(WAIT_USES_INT,1,[Define if wait takes int as a argument])
330 dnl check for POSIX signal handling -- CHECK_SIGNALS
332 AC_DEFUN(CHECK_SIGNALS,[
333 AC_CHECK_FUNC(sigprocmask,
334 AC_MSG_CHECKING(for sigset_t and POSIX_SIGNALS)
335 AC_CACHE_VAL(krb5_cv_type_sigset_t,
337 [#include <signal.h>],
339 krb5_cv_type_sigset_t=yes, krb5_cv_type_sigset_t=no)])
340 AC_MSG_RESULT($krb5_cv_type_sigset_t)
341 if test $krb5_cv_type_sigset_t = yes; then
342 AC_DEFINE(POSIX_SIGNALS,1,[Define if POSIX signal handling is used])
346 dnl check for signal type
348 dnl AC_RETSIGTYPE isn't quite right, but almost.
349 AC_DEFUN(KRB5_SIGTYPE,[
350 AC_MSG_CHECKING([POSIX signal handlers])
351 AC_CACHE_VAL(krb5_cv_has_posix_signals,
353 [#include <sys/types.h>
358 extern void (*signal ()) ();], [],
359 krb5_cv_has_posix_signals=yes, krb5_cv_has_posix_signals=no)])
360 AC_MSG_RESULT($krb5_cv_has_posix_signals)
361 if test $krb5_cv_has_posix_signals = yes; then
363 AC_DEFINE(POSIX_SIGTYPE, 1, [Define if POSIX signal handlers are used])
365 if test $ac_cv_type_signal = void; then
371 AC_DEFINE_UNQUOTED(krb5_sigtype, $stype, [Define krb5_sigtype to type of signal handler])dnl
374 dnl check for POSIX setjmp/longjmp -- CHECK_SETJMP
376 AC_DEFUN(CHECK_SETJMP,[
377 AC_CHECK_FUNC(sigsetjmp,
378 AC_MSG_CHECKING(for sigjmp_buf)
379 AC_CACHE_VAL(krb5_cv_struct_sigjmp_buf,
381 [#include <setjmp.h>],[sigjmp_buf x],
382 krb5_cv_struct_sigjmp_buf=yes,krb5_cv_struct_sigjmp_buf=no)])
383 AC_MSG_RESULT($krb5_cv_struct_sigjmp_buf)
384 if test $krb5_cv_struct_sigjmp_buf = yes; then
385 AC_DEFINE(POSIX_SETJMP,1,[Define if setjmp indicates POSIX interface])
389 dnl Check for IPv6 compile-time support.
391 AC_DEFUN(KRB5_AC_INET6,[
392 AC_CHECK_HEADERS(sys/types.h sys/socket.h netinet/in.h netdb.h)
393 AC_CHECK_FUNCS(inet_ntop inet_pton getnameinfo)
394 dnl getaddrinfo test needs netdb.h, for proper compilation on alpha
395 dnl under OSF/1^H^H^H^H^HDigital^H^H^H^H^H^H^HTru64 UNIX, where it's
397 AC_MSG_CHECKING(for getaddrinfo)
398 AC_CACHE_VAL(ac_cv_func_getaddrinfo,
399 [AC_TRY_LINK([#ifdef HAVE_NETDB_H
403 getaddrinfo("kerberos.mit.edu", "echo", 0, &ai);
404 ], ac_cv_func_getaddrinfo=yes, ac_cv_func_getaddrinfo=no)])
405 AC_MSG_RESULT($ac_cv_func_getaddrinfo)
406 if test $ac_cv_func_getaddrinfo = yes; then
407 AC_DEFINE(HAVE_GETADDRINFO,1,[Define if you have the getaddrinfo function])
410 AC_REQUIRE([KRB5_SOCKADDR_SA_LEN])dnl
411 AC_ARG_ENABLE([ipv6], , AC_MSG_WARN(enable/disable-ipv6 option is deprecated))dnl
412 AC_MSG_CHECKING(for IPv6 compile-time support)
413 AC_CACHE_VAL(krb5_cv_inet6,[
414 if test "$ac_cv_func_inet_ntop" != "yes" ; then
418 #ifdef HAVE_SYS_TYPES_H
419 #include <sys/types.h>
421 #include <sys/socket.h>
422 #include <netinet/in.h>
425 struct sockaddr_in6 in;
427 IN6_IS_ADDR_LINKLOCAL (&in.sin6_addr);
428 ],krb5_cv_inet6=yes,krb5_cv_inet6=no)])
430 AC_MSG_RESULT($krb5_cv_inet6)
431 if test "$krb5_cv_inet6" = no && test "$ac_cv_func_inet_ntop" = yes; then
432 AC_MSG_CHECKING(for IPv6 compile-time support with -DINET6)
433 AC_CACHE_VAL(krb5_cv_inet6_with_dinet6,[
437 #ifdef HAVE_SYS_TYPES_H
438 #include <sys/types.h>
440 #include <sys/socket.h>
441 #include <netinet/in.h>
444 struct sockaddr_in6 in;
446 IN6_IS_ADDR_LINKLOCAL (&in.sin6_addr);
447 ],krb5_cv_inet6_with_dinet6=yes,krb5_cv_inet6_with_dinet6=no)
449 AC_MSG_RESULT($krb5_cv_inet6_with_dinet6)
451 if test $krb5_cv_inet6 = yes || test "$krb5_cv_inet6_with_dinet6" = yes; then
452 if test "$krb5_cv_inet6_with_dinet6" = yes; then
453 AC_DEFINE(INET6,1,[May need to be defined to enable IPv6 support, for example on IRIX])
455 AC_DEFINE(KRB5_USE_INET6,1,[Define if we should compile in IPv6 support (even if we can't use it at run time)])
459 dnl Generic File existence tests
461 dnl K5_AC_CHECK_FILE(FILE, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
463 AC_DEFUN(K5_AC_CHECK_FILE,
464 [AC_REQUIRE([AC_PROG_CC])dnl
465 dnl Do the transliteration at runtime so arg 1 can be a shell variable.
466 ac_safe=`echo "$1" | sed 'y%./+-%__p_%'`
467 AC_MSG_CHECKING([for $1])
468 AC_CACHE_VAL(ac_cv_file_$ac_safe,
469 [if test "$cross_compiling" = yes; then
470 errprint(__file__:__line__: warning: Cannot check for file existence when cross compiling
472 AC_MSG_ERROR(Cannot check for file existence when cross compiling)
475 eval "ac_cv_file_$ac_safe=yes"
477 eval "ac_cv_file_$ac_safe=no"
480 if eval "test \"`echo '$ac_cv_file_'$ac_safe`\" = yes"; then
482 ifelse([$2], , :, [$2])
490 dnl K5_AC_CHECK_FILES(FILE... [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
492 AC_DEFUN(K5_AC_CHECK_FILES,
493 [AC_REQUIRE([AC_PROG_CC])dnl
496 K5_AC_CHECK_FILE($ac_file,
498 ac_tr_file=HAVE`echo $ac_file | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
500 AC_DEFINE_UNQUOTED($ac_tr_file) $2], $3)dnl
503 AC_DEFUN(KRB5_AC_CHECK_FOR_CFLAGS,[
504 AC_BEFORE([$0],[AC_PROG_CC])
505 AC_BEFORE([$0],[AC_PROG_CXX])
506 krb5_ac_cflags_set=${CFLAGS+set}
507 krb5_ac_cxxflags_set=${CXXFLAGS+set}
508 krb5_ac_warn_cflags_set=${WARN_CFLAGS+set}
509 krb5_ac_warn_cxxflags_set=${WARN_CXXFLAGS+set}
512 AC_DEFUN(TRY_WARN_CC_FLAG,[dnl
513 cachevar=`echo "krb5_cv_cc_flag_$1" | sed s/[[^a-zA-Z0-9_]]/_/g`
514 AC_CACHE_CHECK([if C compiler supports $1], [$cachevar],
515 [# first try without, then with
516 AC_TRY_COMPILE([], 1;,
517 [old_cflags="$CFLAGS"
519 AC_TRY_COMPILE([], 1;, eval $cachevar=yes, eval $cachevar=no)
520 CFLAGS="$old_cflags"],
521 [AC_MSG_ERROR(compiling simple test program with $CFLAGS failed)])])
522 if eval test '"${'$cachevar'}"' = yes; then
523 WARN_CFLAGS="$WARN_CFLAGS $1"
525 eval flag_supported='${'$cachevar'}'
528 AC_DEFUN(WITH_CC,[dnl
529 AC_REQUIRE([KRB5_AC_CHECK_FOR_CFLAGS])dnl
530 AC_REQUIRE([AC_PROG_CC])dnl
531 AC_REQUIRE([AC_PROG_CXX])dnl
532 if test $ac_cv_c_compiler_gnu = yes ; then
537 AC_CACHE_CHECK([for GNU linker], krb5_cv_prog_gnu_ld,
538 [krb5_cv_prog_gnu_ld=no
539 if test "$GCC" = yes; then
540 if AC_TRY_COMMAND([$CC -Wl,-v 2>&1 dnl
541 | grep "GNU ld" > /dev/null]); then
542 krb5_cv_prog_gnu_ld=yes
545 AC_ARG_WITH([size-optimizations],
546 [ --with-size-optimizations enable a few optimizations to reduce code size
547 possibly at some run-time cost],
550 if test "$withval" = yes; then
551 AC_DEFINE(CONFIG_SMALL,1,[Define to reduce code size even if it means more cpu usage])
553 # -Wno-long-long, if needed, for k5-platform.h without inttypes.h etc.
554 extra_gcc_warn_opts="-Wall -Wcast-qual -Wcast-align -Wshadow"
555 # -Wmissing-prototypes
556 if test "$GCC" = yes ; then
557 # Putting this here means we get -Os after -O2, which works.
558 if test "$with_size_optimizations" = yes && test "x$krb5_ac_cflags_set" != xset; then
559 AC_MSG_NOTICE(adding -Os optimization option)
561 "-g -O2") CFLAGS="-g -Os" ;;
562 "-O2") CFLAGS="-Os" ;;
563 *) CFLAGS="$CFLAGS -Os" ;;
566 if test "x$krb5_ac_warn_cflags_set" = xset ; then
567 AC_MSG_NOTICE(not adding extra gcc warning flags because WARN_CFLAGS was set)
569 AC_MSG_NOTICE(adding extra warning flags for gcc)
570 WARN_CFLAGS="$WARN_CFLAGS $extra_gcc_warn_opts -Wmissing-prototypes"
571 if test "`uname -s`" = Darwin ; then
572 AC_MSG_NOTICE(skipping pedantic warnings on Darwin)
573 elif test "`uname -s`" = Linux ; then
574 AC_MSG_NOTICE(skipping pedantic warnings on Linux)
576 WARN_CFLAGS="$WARN_CFLAGS -pedantic"
578 if test "$ac_cv_cxx_compiler_gnu" = yes; then
579 if test "x$krb5_ac_warn_cxxflags_set" = xset ; then
580 AC_MSG_NOTICE(not adding extra g++ warnings because WARN_CXXFLAGS was set)
582 AC_MSG_NOTICE(adding extra warning flags for g++)
583 WARN_CXXFLAGS="$WARN_CXXFLAGS $extra_gcc_warn_opts"
586 # Currently, G++ does not support -Wno-format-zero-length.
587 TRY_WARN_CC_FLAG(-Wno-format-zero-length)
588 # Other flags here may not be supported on some versions of
589 # gcc that people want to use.
590 for flag in overflow strict-overflow missing-format-attribute missing-prototypes return-type missing-braces parentheses switch unused-function unused-label unused-variable unused-value unknown-pragmas sign-compare newline-eof ; do
591 TRY_WARN_CC_FLAG(-W$flag)
593 # old-style-definition? generates many, many warnings
595 # Warnings that we'd like to turn into errors on versions of gcc
596 # that support promoting only specific warnings to errors, but
597 # we'll take as warnings on older compilers. (If such a warning
598 # is added after the -Werror=foo feature, you can just put
599 # error=foo in the above list, and skip the test for the
600 # warning-only form.) At least in some versions, -Werror= doesn't
601 # seem to make the conditions actual errors, but still issues
602 # warnings; I guess we'll take what we can get.
604 # We're currently targeting C89+, not C99, so disallow some
606 for flag in declaration-after-statement variadic-macros ; do
607 TRY_WARN_CC_FLAG(-Werror=$flag)
608 if test "$flag_supported" = no; then
609 TRY_WARN_CC_FLAG(-W$flag)
612 # missing-prototypes? maybe someday
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)
660 if test "`uname -s`" = SunOS ; then
661 # Using Solaris but not GCC, assume Sunsoft compiler.
662 # We have some error-out-on-warning options available.
663 # Sunsoft 12 compiler defaults to -xc99=all, it appears, so "inline"
664 # works, but it also means that declaration-in-code warnings won't
666 # -v -fd -errwarn=E_DECLARATION_IN_CODE ...
667 WARN_CFLAGS="-errtags=yes -errwarn=E_BAD_PTR_INT_COMBINATION,E_BAD_PTR_INT_COMB_ARG,E_PTR_TO_VOID_IN_ARITHMETIC,E_NO_IMPLICIT_DECL_ALLOWED,E_ATTRIBUTE_PARAM_UNDEFINED"
668 WARN_CXXFLAGS="-errtags=yes +w +w2 -xport64"
671 AC_SUBST(WARN_CFLAGS)
672 AC_SUBST(WARN_CXXFLAGS)
676 dnl check for yylineno -- HAVE_YYLINENO
678 AC_DEFUN(HAVE_YYLINENO,[dnl
679 AC_REQUIRE_CPP()AC_REQUIRE([AC_PROG_LEX])dnl
680 AC_MSG_CHECKING([for yylineno declaration])
681 AC_CACHE_VAL(krb5_cv_type_yylineno,
682 # some systems have yylineno, others don't...
684 %%' | ${LEX} -t > conftest.out
685 if egrep yylineno conftest.out >/dev/null 2>&1; then
686 krb5_cv_type_yylineno=yes
688 krb5_cv_type_yylineno=no
691 AC_MSG_RESULT($krb5_cv_type_yylineno)
692 if test $krb5_cv_type_yylineno = no; then
693 AC_DEFINE(NO_YYLINENO, 1, [Define if lex produes code with yylineno])
697 dnl K5_GEN_MAKEFILE([dir, [frags]])
699 AC_DEFUN(K5_GEN_MAKEFILE,[dnl
700 ifelse($1, ,[_K5_GEN_MAKEFILE(.,$2)],[_K5_GEN_MAKEFILE($1,$2)])
703 dnl _K5_GEN_MAKEFILE(dir, [frags])
704 dnl dir must be present in this case
705 dnl Note: Be careful in quoting.
706 dnl The ac_foreach generates the list of fragments to include
707 dnl or "" if $2 is empty
708 AC_DEFUN(_K5_GEN_MAKEFILE,[dnl
709 AC_CONFIG_FILES([$1/Makefile:$srcdir/]K5_TOPDIR[/config/pre.in:$1/Makefile.in:$1/deps:$srcdir/]K5_TOPDIR[/config/post.in])
712 dnl K5_GEN_FILE( <ac_output arguments> )
714 AC_DEFUN(K5_GEN_FILE,[AC_CONFIG_FILES($1)])dnl
717 dnl Note: Adds the variables to config.status for individual
718 dnl Makefile generation from config.status
719 AC_DEFUN(K5_AC_OUTPUT,[AC_OUTPUT])dnl
721 dnl V5_AC_OUTPUT_MAKEFILE
723 AC_DEFUN(V5_AC_OUTPUT_MAKEFILE,
724 [ifelse($1, , [_V5_AC_OUTPUT_MAKEFILE(.,$2)],[_V5_AC_OUTPUT_MAKEFILE($1,$2)])])
726 define(_V5_AC_OUTPUT_MAKEFILE,
727 [ifelse($2, , ,AC_CONFIG_FILES($2))
728 AC_FOREACH([DIR], [$1],dnl
729 [AC_CONFIG_FILES(DIR[/Makefile:$srcdir/]K5_TOPDIR[/config/pre.in:]DIR[/Makefile.in:]DIR[/deps:$srcdir/]K5_TOPDIR[/config/post.in])])
733 dnl KRB5_SOCKADDR_SA_LEN: define HAVE_SA_LEN if sockaddr contains the sa_len
736 AC_DEFUN([KRB5_SOCKADDR_SA_LEN],[ dnl
737 AC_CHECK_MEMBER(struct sockaddr.sa_len,
738 AC_DEFINE(HAVE_SA_LEN,1,[Define if struct sockaddr contains sa_len])
739 ,,[#include <sys/types.h>
740 #include <sys/socket.h>])])
743 dnl CHECK_UTMP: check utmp structure and functions
745 AC_DEFUN(CHECK_UTMP,[
746 AC_CHECK_MEMBERS([struct utmp.ut_pid, struct utmp.ut_type, struct utmp.ut_host, struct utmp.ut_exit],,,
747 [#include <sys/types.h>
750 # Define the names actually used in the krb5 code currently:
751 if test $ac_cv_member_struct_utmp_ut_pid = no; then
752 AC_DEFINE(NO_UT_PID,1,[Define if ut_pid field not found])
754 if test $ac_cv_member_struct_utmp_ut_type = no; then
755 AC_DEFINE(NO_UT_TYPE,1,[Define if ut_type field not found])
757 if test $ac_cv_member_struct_utmp_ut_host = no; then
758 AC_DEFINE(NO_UT_HOST,1,[Define if ut_host field not found])
760 if test $ac_cv_member_struct_utmp_ut_exit = no; then
761 AC_DEFINE(NO_UT_EXIT,1,[Define if ut_exit field not found])
764 AC_CHECK_FUNCS(setutent setutxent updwtmp updwtmpx)
770 AC_DEFUN(WITH_NETLIB,[
771 AC_ARG_WITH([netlib],
772 AC_HELP_STRING([--with-netlib=LIBS], use user defined resolver library),
773 [ if test "$withval" = yes -o "$withval" = no ; then
774 AC_MSG_RESULT("netlib will link with C library resolver only")
776 LIBS="$LIBS $withval"
777 AC_MSG_RESULT("netlib will use \'$withval\'")
784 AC_DEFUN(KRB5_AC_NEED_DAEMON, [
785 KRB5_NEED_PROTO([#ifdef HAVE_UNISTD_H
787 #endif],daemon,1)])dnl
789 dnl Check if stdarg or varargs is available *and compiles*; prefer stdarg.
790 dnl (This was sent to djm for incorporation into autoconf 3/12/1996. KR)
792 AC_DEFUN(AC_HEADER_STDARG, [
794 AC_MSG_CHECKING([for stdarg.h])
795 AC_CACHE_VAL(ac_cv_header_stdarg_h,
796 [AC_TRY_COMPILE([#include <stdarg.h>], [
797 } /* ac_try_compile will have started a function body */
798 int aoeu (char *format, ...) {
801 va_start (v, format);
804 ],ac_cv_header_stdarg_h=yes,ac_cv_header_stdarg_h=no)])dnl
805 AC_MSG_RESULT($ac_cv_header_stdarg_h)
806 if test $ac_cv_header_stdarg_h = yes; then
807 AC_DEFINE(HAVE_STDARG_H, 1, [Define if stdarg available and compiles])
810 AC_MSG_CHECKING([for varargs.h])
811 AC_CACHE_VAL(ac_cv_header_varargs_h,
812 [AC_TRY_COMPILE([#include <varargs.h>],[
813 } /* ac_try_compile will have started a function body */
814 int aoeu (va_alist) va_dcl {
820 ],ac_cv_header_varargs_h=yes,ac_cv_header_varargs_h=no)])dnl
821 AC_MSG_RESULT($ac_cv_header_varargs_h)
822 if test $ac_cv_header_varargs_h = yes; then
823 AC_DEFINE(HAVE_VARARGS_H, 1, [Define if varargs available and compiles])
825 AC_MSG_ERROR(Neither stdarg nor varargs compile?)
828 fi dnl stdarg test failure
833 dnl KRB5_AC_NEED_LIBGEN --- check if libgen needs to be linked in for
837 AC_DEFUN(KRB5_AC_NEED_LIBGEN,[
838 AC_REQUIRE([AC_PROG_CC])dnl
840 dnl regcomp is present but non-functional on Solaris 2.4
842 AC_MSG_CHECKING(for working regcomp)
843 AC_CACHE_VAL(ac_cv_func_regcomp,[
845 #include <sys/types.h>
847 regex_t x; regmatch_t m;
848 int main() { return regcomp(&x,"pat.*",0) || regexec(&x,"pattern",1,&m,0); }
849 ], ac_cv_func_regcomp=yes, ac_cv_func_regcomp=no, AC_MSG_ERROR([Cannot test regcomp when cross compiling]))])
850 AC_MSG_RESULT($ac_cv_func_regcomp)
851 test $ac_cv_func_regcomp = yes && AC_DEFINE(HAVE_REGCOMP,1,[Define if regcomp exists and functions])
853 dnl Check for the compile and step functions - only if regcomp is not available
855 if test $ac_cv_func_regcomp = no; then
858 dnl this will fail if there's no compile/step in -lgen, or if there's
859 dnl no -lgen. This is fine.
860 AC_CHECK_FUNCS(compile step)
863 dnl Set GEN_LIB if necessary
865 AC_CHECK_LIB(gen, compile, GEN_LIB=-lgen, GEN_LIB=)
870 dnl KRB5_AC_REGEX_FUNCS --- check for different regular expression
871 dnl support functions
873 AC_DEFUN(KRB5_AC_REGEX_FUNCS,[
874 AC_CHECK_FUNCS(re_comp re_exec regexec)
875 AC_REQUIRE([KRB5_AC_NEED_LIBGEN])dnl
878 dnl AC_KRB5_TCL_FIND_CONFIG (uses tcl_dir)
880 AC_DEFUN(AC_KRB5_TCL_FIND_CONFIG,[
881 AC_REQUIRE([KRB5_LIB_AUX])dnl
882 AC_MSG_CHECKING(for tclConfig.sh)
883 dnl On Debian, we might be given --with-tcl=/usr, or tclsh might
884 dnl point us to /usr/lib/tcl8.4; either way, we need to find
885 dnl /usr/lib/tcl8.4/tclConfig.sh.
886 dnl On NetBSD, we might be given --with-tcl=/usr/pkg, or tclsh
887 dnl might point us to /usr/pkg/lib/tcl8.4; we need to find
888 dnl /usr/pkg/lib/tclConfig.sh.
889 if test -r "$tcl_dir/lib/tclConfig.sh" ; then
890 tcl_conf="$tcl_dir/lib/tclConfig.sh"
891 elif test -r "$tcl_dir/tclConfig.sh" ; then
892 tcl_conf="$tcl_dir/tclConfig.sh"
893 elif test -r "$tcl_dir/../tclConfig.sh" ; then
894 tcl_conf="$tcl_dir/../tclConfig.sh"
898 changequote(<<,>>)dnl
899 for d in "$lib" "$lib"/tcl7.[0-9] "$lib"/tcl8.[0-9] ; do
900 if test -r "$d/tclConfig.sh" ; then
901 tcl_conf="$tcl_conf $d/tclConfig.sh"
906 if test -n "$tcl_conf" ; then
907 AC_MSG_RESULT($tcl_conf)
909 AC_MSG_RESULT(not found)
914 old_CPPFLAGS=$CPPFLAGS
917 if test -n "$tcl_conf" ; then
918 for file in $tcl_conf ; do
919 TCL_MAJOR_VERSION=x ; TCL_MINOR_VERSION=x
920 AC_MSG_CHECKING(Tcl info in $file)
922 v=$TCL_MAJOR_VERSION.$TCL_MINOR_VERSION
923 if test -z "$tcl_vers_maj" \
924 || test "$tcl_vers_maj" -lt "$TCL_MAJOR_VERSION" \
925 || test "$tcl_vers_maj" = "$TCL_MAJOR_VERSION" -a "$tcl_vers_min" -lt "$TCL_MINOR_VERSION" ; then
926 for incdir in "$TCL_PREFIX/include/tcl$v" "$TCL_PREFIX/include" ; do
927 if test -r "$incdir/tcl.h" -o -r "$incdir/tcl/tcl.h" ; then
928 CPPFLAGS="$old_CPPFLAGS -I$incdir"
932 LIBS="$old_LIBS `eval echo x $TCL_LIB_SPEC $TCL_LIBS | sed 's/^x//'`"
933 LDFLAGS="$old_LDFLAGS $TCL_LD_FLAGS"
934 AC_TRY_LINK( , [Tcl_CreateInterp ();],
936 tcl_vers_maj=$TCL_MAJOR_VERSION
937 tcl_vers_min=$TCL_MINOR_VERSION
938 AC_MSG_RESULT($v - working),
939 AC_MSG_RESULT($v - compilation failed)
942 AC_MSG_RESULT(older version $v)
946 CPPFLAGS=$old_CPPFLAGS
951 if test -n "$tcl_ok_conf" ; then
954 for incdir in "$TCL_PREFIX/include/tcl$v" "$TCL_PREFIX/include" ; do
955 if test -r "$incdir/tcl.h" -o -r "$incdir/tcl/tcl.h" ; then
956 if test "$incdir" != "/usr/include" ; then
957 TCL_INCLUDES=-I$incdir
962 # Need eval because the first-level expansion could reference
963 # variables like ${TCL_DBGX}.
964 eval TCL_LIBS='"'$TCL_LIB_SPEC $TCL_LIBS $TCL_DL_LIBS'"'
965 TCL_LIBPATH="-L$TCL_EXEC_PREFIX/lib"
966 TCL_RPATH=":$TCL_EXEC_PREFIX/lib"
967 if test "$DEPLIBEXT" != "$SHLIBEXT" && test -n "$RPATH_FLAG"; then
968 TCL_MAYBE_RPATH='$(RPATH_FLAG)'"$TCL_EXEC_PREFIX/lib$RPATH_TAIL"
972 CPPFLAGS="$old_CPPFLAGS $TCL_INCLUDES"
973 AC_CHECK_HEADER(tcl.h,AC_DEFINE(HAVE_TCL_H,1,[Define if tcl.h is available]) tcl_header=yes)
974 if test $tcl_header=no; then
975 AC_CHECK_HEADER(tcl/tcl.h,AC_DEFINE(HAVE_TCL_TCL_H,1,[Define if tcl/tcl.h is available]) tcl_header=yes)
977 CPPFLAGS="$old_CPPFLAGS"
980 # If we read a tclConfig.sh file, it probably set this.
983 AC_SUBST(TCL_INCLUDES)
985 AC_SUBST(TCL_LIBPATH)
987 AC_SUBST(TCL_MAYBE_RPATH)
990 dnl AC_KRB5_TCL_TRYOLD
991 dnl attempt to use old search algorithm for locating tcl
993 AC_DEFUN(AC_KRB5_TCL_TRYOLD, [
994 AC_REQUIRE([KRB5_AC_FIND_DLOPEN])
995 AC_MSG_WARN([trying old tcl search code])
996 if test "$with_tcl" != yes -a "$with_tcl" != no; then
997 TCL_INCLUDES=-I$with_tcl/include
998 TCL_LIBPATH=-L$with_tcl/lib
999 TCL_RPATH=:$with_tcl/lib
1001 if test "$with_tcl" != no ; then
1002 krb5_save_CPPFLAGS="$CPPFLAGS"
1003 krb5_save_LDFLAGS="$LDFLAGS"
1004 CPPFLAGS="$CPPFLAGS $TCL_INCLUDES"
1005 LDFLAGS="$LDFLAGS $TCL_LIBPATH"
1007 AC_CHECK_HEADER(tcl.h,AC_DEFINE(HAVE_TCL_H,1,[Define if tcl.h found]) tcl_header=yes)
1008 if test $tcl_header=no; then
1009 AC_CHECK_HEADER(tcl/tcl.h,AC_DEFINE(HAVE_TCL_TCL_H,1,[Define if tcl/tcl.h found]) tcl_header=yes)
1012 if test $tcl_header = yes ; then
1015 if test $tcl_lib = no; then
1016 AC_CHECK_LIB(tcl8.0, Tcl_CreateCommand,
1017 TCL_LIBS="$TCL_LIBS -ltcl8.0 -lm $DL_LIB $LIBS"
1018 tcl_lib=yes,,-lm $DL_LIB)
1020 if test $tcl_lib = no; then
1021 AC_CHECK_LIB(tcl7.6, Tcl_CreateCommand,
1022 TCL_LIBS="$TCL_LIBS -ltcl7.6 -lm $DL_LIB $LIBS"
1023 tcl_lib=yes,,-lm $DL_LIB)
1025 if test $tcl_lib = no; then
1026 AC_CHECK_LIB(tcl7.5, Tcl_CreateCommand,
1027 TCL_LIBS="$TCL_LIBS -ltcl7.5 -lm $DL_LIB $LIBS"
1028 tcl_lib=yes,,-lm $DL_LIB)
1031 if test $tcl_lib = no ; then
1032 AC_CHECK_LIB(tcl, Tcl_CreateCommand,
1033 TCL_LIBS="$TCL_LIBS -ltcl -lm $DL_LIB $LIBS"
1034 tcl_lib=yes,,-lm $DL_LIB)
1037 if test $tcl_lib = no ; then
1038 AC_MSG_WARN("tcl.h found but not library")
1041 AC_MSG_WARN(Could not find Tcl which is needed for the kadm5 tests)
1044 CPPFLAGS="$krb5_save_CPPFLAGS"
1045 LDFLAGS="$krb5_save_LDFLAGS"
1046 AC_SUBST(TCL_INCLUDES)
1048 AC_SUBST(TCL_LIBPATH)
1051 AC_MSG_RESULT("Not looking for Tcl library")
1055 dnl AC_KRB5_TCL - determine if the TCL library is present on system
1057 AC_DEFUN(AC_KRB5_TCL,[
1065 [ --with-tcl=path where Tcl resides], , with_tcl=try)
1066 if test "$with_tcl" = no ; then
1068 elif test "$with_tcl" = yes -o "$with_tcl" = try ; then
1070 if test ! -r /usr/lib/tclConfig.sh; then
1071 cat >> conftest <<\EOF
1072 puts "tcl_dir=$tcl_library"
1074 if tclsh conftest >conftest.out 2>/dev/null; then
1075 if grep tcl_dir= conftest.out >/dev/null 2>&1; then
1076 t=`sed s/tcl_dir=// conftest.out`
1079 fi # tclsh ran script okay
1080 rm -f conftest conftest.out
1081 fi # no /usr/lib/tclConfig.sh
1085 if test "$with_tcl" != no ; then
1086 AC_KRB5_TCL_FIND_CONFIG
1087 if test $tcl_lib = no ; then
1088 if test "$with_tcl" != try ; then
1091 AC_MSG_WARN(Could not find Tcl which is needed for some tests)
1095 # If "yes" or pathname, error out if not found.
1096 if test "$with_tcl" != no -a "$with_tcl" != try ; then
1097 if test "$tcl_header $tcl_lib" != "yes yes" ; then
1098 AC_MSG_ERROR(Could not find Tcl)
1106 AC_DEFUN(WITH_HESIOD,
1107 [AC_ARG_WITH(hesiod, AC_HELP_STRING(--with-hesiod[=path], compile with hesiod support @<:@omitted@:>@),
1108 hesiod=$with_hesiod, with_hesiod=no)
1109 if test "$with_hesiod" != "no"; then
1110 HESIOD_DEFS=-DHESIOD
1111 AC_CHECK_LIB(resolv, res_send, res_lib=-lresolv)
1112 if test "$hesiod" != "yes"; then
1113 HESIOD_LIBS="-L${hesiod}/lib -lhesiod $res_lib"
1115 HESIOD_LIBS="-lhesiod $res_lib"
1121 AC_SUBST(HESIOD_DEFS)
1122 AC_SUBST(HESIOD_LIBS)])
1126 dnl KRB5_BUILD_LIBRARY
1128 dnl Pull in the necessary stuff to create the libraries.
1130 AC_DEFUN(KRB5_BUILD_LIBRARY,
1131 [AC_REQUIRE([KRB5_LIB_AUX])dnl
1132 AC_REQUIRE([AC_PROG_LN_S])dnl
1133 AC_REQUIRE([AC_PROG_RANLIB])dnl
1134 AC_REQUIRE([AC_PROG_ARCHIVE])dnl
1135 AC_REQUIRE([AC_PROG_ARCHIVE_ADD])dnl
1136 AC_REQUIRE([AC_PROG_INSTALL])dnl
1137 AC_CHECK_PROG(AR, ar, ar, false)
1138 AC_CHECK_PROG(PERL, perl, perl, false)
1139 if test "$ac_cv_prog_PERL" = "false"; then
1140 AC_MSG_ERROR(Perl is now required for Kerberos builds.)
1145 AC_SUBST(PLUGINLINK)
1146 AC_SUBST(PLUGININST)
1147 AC_SUBST(KDB5_PLUGIN_DEPLIBS)
1148 AC_SUBST(KDB5_PLUGIN_LIBS)
1149 AC_SUBST(MAKE_SHLIB_COMMAND)
1150 AC_SUBST(SHLIB_RPATH_FLAGS)
1151 AC_SUBST(SHLIB_EXPFLAGS)
1152 AC_SUBST(SHLIB_EXPORT_FILE_DEP)
1153 AC_SUBST(DYNOBJ_EXPDEPS)
1154 AC_SUBST(DYNOBJ_EXPFLAGS)
1155 AC_SUBST(INSTALL_SHLIB)
1162 AC_SUBST(LIBINSTLIST)
1164 AC_SUBST(MAKE_DYNOBJ_COMMAND)
1168 dnl KRB5_BUILD_LIBOBJS
1170 dnl Pull in the necessary stuff to build library objects.
1172 AC_DEFUN(KRB5_BUILD_LIBOBJS,
1173 [AC_REQUIRE([KRB5_LIB_AUX])dnl
1179 AC_SUBST(PROFFLAGS)])
1182 dnl KRB5_BUILD_PROGRAM
1184 dnl Set variables to build a program.
1186 AC_DEFUN(KRB5_BUILD_PROGRAM,
1187 [AC_REQUIRE([KRB5_LIB_AUX])dnl
1188 AC_REQUIRE([KRB5_AC_NEED_LIBGEN])dnl
1191 AC_SUBST(RPATH_FLAG)
1192 AC_SUBST(PROG_RPATH_FLAGS)
1193 AC_SUBST(DEPLIBEXT)])
1198 dnl Set up environment for running dynamic executables out of build tree
1200 AC_DEFUN(KRB5_RUN_FLAGS,
1201 [AC_REQUIRE([KRB5_LIB_AUX])dnl
1202 KRB5_RUN_ENV="$RUN_ENV"
1203 AC_SUBST(KRB5_RUN_ENV)])
1208 dnl Parse configure options related to library building.
1210 AC_DEFUN(KRB5_LIB_AUX,
1211 [AC_REQUIRE([KRB5_LIB_PARAMS])dnl
1213 AC_ARG_ENABLE([static],,, [enable_static=no])
1214 AC_ARG_ENABLE([shared],,, [enable_shared=yes])
1216 if test "x$enable_static" = "x$enable_shared"; then
1217 AC_MSG_ERROR([--enable-static must be specified with --disable-shared])
1220 AC_ARG_ENABLE([rpath],
1221 AC_HELP_STRING([--disable-rpath],[suppress run path flags in link lines]),,
1224 if test "x$enable_rpath" != xyes ; then
1225 # Unset the rpath flag values set by shlib.conf
1231 if test "$SHLIBEXT" = ".so-nobuild"; then
1232 AC_MSG_ERROR([Shared libraries are not yet supported on this platform.])
1237 if test "x$enable_static" = xyes; then
1238 AC_MSG_NOTICE([using static libraries])
1239 LIBLIST='lib$(LIBBASE)$(STLIBEXT)'
1240 LIBLINKS='$(TOPLIBD)/lib$(LIBBASE)$(STLIBEXT)'
1241 PLUGIN='libkrb5_$(LIBBASE)$(STLIBEXT)'
1242 PLUGINLINK='$(TOPLIBD)/libkrb5_$(LIBBASE)$(STLIBEXT)'
1243 PLUGININST=install-static
1245 LIBINSTLIST=install-static
1247 AC_DEFINE([STATIC_PLUGINS], 1, [Define for static plugin linkage])
1249 KDB5_PLUGIN_DEPLIBS='$(TOPLIBD)/libkrb5_db2$(DEPLIBEXT)'
1250 KDB5_PLUGIN_LIBS='-lkrb5_db2'
1251 if test "x$OPENLDAP_PLUGIN" = xyes; then
1252 KDB5_PLUGIN_DEBLIBS=$KDB5_PLUGIN_DEPLIBS' $(TOPLIBD)/libkrb5_ldap$(DEPLIBEXT)'
1253 KDB5_PLUGIN_LIBS=$KDB_LUGIN_LIBS' -lkrb5_ldap'
1256 # avoid duplicate rules generation for AIX and such
1257 SHLIBEXT=.so-nobuild
1258 SHLIBVEXT=.so.v-nobuild
1259 SHLIBSEXT=.so.s-nobuild
1261 AC_MSG_NOTICE([using shared libraries])
1263 # Clear some stuff in case of AIX, etc.
1264 if test "$STLIBEXT" = "$SHLIBEXT" ; then
1267 case "$SHLIBSEXT" in
1269 LIBLIST='lib$(LIBBASE)$(SHLIBEXT)'
1270 LIBLINKS='$(TOPLIBD)/lib$(LIBBASE)$(SHLIBEXT) $(TOPLIBD)/lib$(LIBBASE)$(SHLIBVEXT)'
1271 LIBINSTLIST="install-shared"
1274 LIBLIST='lib$(LIBBASE)$(SHLIBEXT) lib$(LIBBASE)$(SHLIBSEXT)'
1275 LIBLINKS='$(TOPLIBD)/lib$(LIBBASE)$(SHLIBEXT) $(TOPLIBD)/lib$(LIBBASE)$(SHLIBVEXT) $(TOPLIBD)/lib$(LIBBASE)$(SHLIBSEXT)'
1276 LIBINSTLIST="install-shlib-soname"
1280 PLUGIN='$(LIBBASE)$(DYNOBJEXT)'
1282 PLUGININST=install-plugin
1283 KDB5_PLUGIN_DEPLIBS=
1286 CC_LINK="$CC_LINK_SHARED"
1287 CXX_LINK="$CXX_LINK_SHARED"
1289 if test -z "$LIBLIST"; then
1290 AC_MSG_ERROR([must enable one of shared or static libraries])
1293 # Check whether to build profiled libraries.
1294 AC_ARG_ENABLE([profiled],
1295 dnl [ --enable-profiled build profiled libraries @<:@disabled@:>@]
1297 [if test "$enableval" = yes; then
1298 AC_MSG_ERROR([Sorry, profiled libraries do not work in this release.])
1304 dnl Determine parameters related to libraries, e.g. various extensions.
1306 AC_DEFUN(KRB5_LIB_PARAMS,
1307 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
1309 AC_SUBST(krb5_cv_host)
1310 AC_REQUIRE([AC_PROG_CC])dnl
1311 AC_REQUIRE([V5_SET_TOPDIR])dnl
1312 . $ac_topdir/config/shlib.conf])
1314 dnl The following was written by jhawk@mit.edu
1316 dnl AC_LIBRARY_NET: Id: net.m4,v 1.4 1997/10/25 20:49:53 jhawk Exp
1318 dnl This test is for network applications that need socket() and
1319 dnl gethostbyname() -ish functions. Under Solaris, those applications need to
1320 dnl link with "-lsocket -lnsl". Under IRIX, they should *not* link with
1321 dnl "-lsocket" because libsocket.a breaks a number of things (for instance:
1322 dnl gethostbyname() under IRIX 5.2, and snoop sockets under most versions of
1325 dnl Unfortunately, many application developers are not aware of this, and
1326 dnl mistakenly write tests that cause -lsocket to be used under IRIX. It is
1327 dnl also easy to write tests that cause -lnsl to be used under operating
1328 dnl systems where neither are necessary (or useful), such as SunOS 4.1.4, which
1329 dnl uses -lnsl for TLI.
1331 dnl This test exists so that every application developer does not test this in
1332 dnl a different, and subtly broken fashion.
1334 dnl It has been argued that this test should be broken up into two seperate
1335 dnl tests, one for the resolver libraries, and one for the libraries necessary
1336 dnl for using Sockets API. Unfortunately, the two are carefully intertwined and
1337 dnl allowing the autoconf user to use them independantly potentially results in
1338 dnl unfortunate ordering dependancies -- as such, such component macros would
1339 dnl have to carefully use indirection and be aware if the other components were
1340 dnl executed. Since other autoconf macros do not go to this trouble, and almost
1341 dnl no applications use sockets without the resolver, this complexity has not
1342 dnl been implemented.
1344 dnl The check for libresolv is in case you are attempting to link statically
1345 dnl and happen to have a libresolv.a lying around (and no libnsl.a).
1347 AC_DEFUN(AC_LIBRARY_NET, [
1348 # Most operating systems have gethostbyname() in the default searched
1349 # libraries (i.e. libc):
1350 AC_CHECK_FUNC(gethostbyname, , [
1351 # Some OSes (eg. Solaris) place it in libnsl:
1352 AC_CHECK_LIB(nsl, gethostbyname, , [
1353 # Some strange OSes (SINIX) have it in libsocket:
1354 AC_CHECK_LIB(socket, gethostbyname, , [
1355 # Unfortunately libsocket sometimes depends on libnsl.
1356 # AC_CHECK_LIB's API is essentially broken so the following
1357 # ugliness is necessary:
1358 AC_CHECK_LIB(socket, gethostbyname,
1359 LIBS="-lsocket -lnsl $LIBS",
1360 [AC_CHECK_LIB(resolv, gethostbyname,
1361 LIBS="-lresolv $LIBS" )],
1366 AC_CHECK_FUNC(socket, , AC_CHECK_LIB(socket, socket, ,
1367 AC_CHECK_LIB(socket, socket, LIBS="-lsocket -lnsl $LIBS", , -lnsl)))
1369 if test "$enable_dns" = yes ; then
1370 # We assume that if libresolv exists we can link against it.
1371 # This may get us a gethostby* that doesn't respect nsswitch.
1372 AC_CHECK_LIB(resolv, main)
1374 _KRB5_AC_CHECK_RES_FUNCS(res_ninit res_nclose res_ndestroy res_nsearch dnl
1375 ns_initparse ns_name_uncompress dn_skipname res_search)
1376 if test $krb5_cv_func_res_nsearch = no \
1377 && test $krb5_cv_func_res_search = no; then
1378 # Attempt to link with res_search(), in case it's not prototyped.
1379 AC_CHECK_FUNC(res_search,
1380 [AC_DEFINE(HAVE_RES_SEARCH, 1,
1381 [Define to 1 if you have the `res_search' function])],
1382 [AC_ERROR([cannot find res_nsearch or res_search])])
1386 AC_DEFUN([_KRB5_AC_CHECK_RES_FUNCS],
1387 [AC_FOREACH([AC_Func], [$1],
1388 [AH_TEMPLATE(AS_TR_CPP(HAVE_[]AC_Func),
1389 [Define to 1 if you have the `]AC_Func[' function.])])dnl
1390 for krb5_func in $1; do
1391 _KRB5_AC_CHECK_RES_FUNC($krb5_func)
1394 AC_DEFUN([_KRB5_AC_CHECK_RES_FUNC], [
1395 # Solaris 9 prototypes ns_name_uncompress() in arpa/nameser.h, but
1396 # doesn't export it from libresolv.so, so we use extreme paranoia here
1397 # and check both for the declaration and that we can link against the
1399 AC_CACHE_CHECK([for $1], [krb5_cv_func_$1], [AC_TRY_LINK(
1400 [#include <sys/types.h>
1401 #include <netinet/in.h>
1402 #include <arpa/nameser.h>
1403 @%:@include <resolv.h>],
1405 * Use volatile, or else optimization can cause false positives.
1407 void (* volatile p)() = (void (*)())$1;],
1408 [AS_VAR_SET(krb5_cv_func_$1, yes)],
1409 [AS_VAR_SET(krb5_cv_func_$1, no)])])
1410 AS_IF([test AS_VAR_GET(krb5_cv_func_$1) = yes],
1411 [AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_$1]), 1,
1412 [Define to 1 if you have the `$1' function])])[]dnl
1416 dnl KRB5_AC_ENABLE_DNS
1418 AC_DEFUN(KRB5_AC_ENABLE_DNS, [
1420 enable_dns_for_kdc=yes
1421 AC_DEFINE(KRB5_DNS_LOOKUP_KDC,1,[Define to enable DNS lookups of Kerberos KDCs])
1423 AC_ARG_ENABLE([dns-for-realm],
1424 [ --enable-dns-for-realm enable DNS lookups of Kerberos realm names], ,
1425 [enable_dns_for_realm=no])
1426 if test "$enable_dns_for_realm" = yes; then
1427 AC_DEFINE(KRB5_DNS_LOOKUP_REALM,1,[Define to enable DNS lookups of Kerberos realm names])
1430 AC_DEFINE(KRB5_DNS_LOOKUP, 1,[Define for DNS support of locating realms and KDCs])
1435 dnl Check if we need the prototype for a function - we give it a bogus
1436 dnl prototype and if it complains - then a valid prototype exists on the
1439 dnl KRB5_NEED_PROTO(includes, function, [bypass])
1440 dnl if $3 set, don't see if library defined.
1441 dnl Useful for case where we will define in libkrb5 the function if need be
1442 dnl but want to know if a prototype exists in either case on system.
1444 AC_DEFUN([KRB5_NEED_PROTO], [
1445 ifelse([$3], ,[if test "x$ac_cv_func_$2" = xyes; then])
1446 AC_CACHE_CHECK([if $2 needs a prototype provided], krb5_cv_func_$2_noproto,
1447 AC_TRY_COMPILE([$1],
1449 struct k5foo {int foo; } xx;
1450 extern int $2 (struct k5foo*);
1453 krb5_cv_func_$2_noproto=yes,krb5_cv_func_$2_noproto=no))
1454 if test $krb5_cv_func_$2_noproto = yes; then
1455 AC_DEFINE([NEED_]translit($2, [a-z], [A-Z])[_PROTO], 1, dnl
1456 [define if the system header files are missing prototype for $2()])
1461 dnl =============================================================
1462 dnl Internal function for testing for getpeername prototype
1464 AC_DEFUN([KRB5_GETPEERNAME_ARGS],[
1465 AC_DEFINE([GETPEERNAME_ARG2_TYPE],GETSOCKNAME_ARG2_TYPE,[Type of getpeername second argument.])
1466 AC_DEFINE([GETPEERNAME_ARG3_TYPE],GETSOCKNAME_ARG3_TYPE,[Type of getpeername second argument.])
1469 dnl =============================================================
1470 dnl Internal function for testing for getsockname arguments
1472 AC_DEFUN([TRY_GETSOCK_INT],[
1473 krb5_lib_var=`echo "$1 $2" | sed 'y% ./+-*%___p_p%'`
1474 AC_MSG_CHECKING([if getsockname() takes arguments $1 and $2])
1475 AC_CACHE_VAL(krb5_cv_getsockname_proto_$krb5_lib_var,
1477 AC_TRY_COMPILE([#include <sys/types.h>
1478 #include <sys/socket.h>
1479 extern int getsockname(int, $1, $2);
1480 ],,eval "krb5_cv_getsockname_proto_$krb5_lib_var=yes",
1481 eval "krb5_cv_getsockname_proto_$krb5_lib_var=no")])
1482 if eval "test \"`echo '$krb5_cv_getsockname_proto_'$krb5_lib_var`\" = yes"; then
1484 sock_set=yes; res1="$1"; res2="$2"
1490 dnl Determines the types of the second and third arguments to getsockname().
1492 AC_DEFUN([KRB5_GETSOCKNAME_ARGS],[
1494 for sock_arg1 in "struct sockaddr *" "void *"
1496 for sock_arg2 in "size_t *" "int *" "socklen_t *"
1498 if test $sock_set = no; then
1499 TRY_GETSOCK_INT($sock_arg1, $sock_arg2)
1503 if test "$sock_set" = no; then
1504 AC_MSG_NOTICE(assuming struct sockaddr and socklen_t for getsockname args)
1505 res1="struct sockaddr *"
1508 res1=`echo "$res1" | tr -d '*' | sed -e 's/ *$//'`
1509 res2=`echo "$res2" | tr -d '*' | sed -e 's/ *$//'`
1510 AC_DEFINE_UNQUOTED([GETSOCKNAME_ARG2_TYPE],$res1,[Type of pointer target for argument 2 to getsockname])
1511 AC_DEFINE_UNQUOTED([GETSOCKNAME_ARG3_TYPE],$res2,[Type of pointer target for argument 3 to getsockname])
1515 AC_DEFUN([KRB5_AC_CHOOSE_ET],[
1516 AC_ARG_WITH([system-et],
1517 AC_HELP_STRING(--with-system-et,use system compile_et and -lcom_err @<:@default: build and install a local version@:>@))
1518 AC_MSG_CHECKING(which version of com_err to use)
1519 if test "x$with_system_et" = xyes ; then
1521 AC_MSG_RESULT(system)
1526 if test $COM_ERR_VERSION = sys; then
1527 # check for various functions we need
1528 AC_CHECK_LIB(com_err, add_error_table, :, AC_MSG_ERROR(cannot find add_error_table in com_err library))
1529 AC_CHECK_LIB(com_err, remove_error_table, :, AC_MSG_ERROR(cannot find remove_error_table in com_err library))
1530 # make sure compile_et provides "et_foo" name
1531 cat >> conf$$e.et <<EOF
1533 error_code ERR_FOO, "foo"
1536 AC_CHECK_PROGS(compile_et,compile_et,false)
1537 if test "$compile_et" = false; then
1538 AC_MSG_ERROR(cannot find compile_et)
1540 AC_CACHE_CHECK(whether compile_et is useful,krb5_cv_compile_et_useful,[
1541 if compile_et conf$$e.et >/dev/null 2>&1 ; then true ; else
1542 AC_MSG_ERROR(execution failed)
1544 AC_TRY_COMPILE([#include "conf$$e.h"
1545 ],[ &et_foo_error_table; ],:,
1546 [AC_MSG_ERROR(cannot use et_foo_error_table)])
1547 # Anything else we need to test for?
1548 rm -f conf$$e.et conf$$e.c conf$$e.h
1549 krb5_cv_compile_et_useful=yes
1552 AC_SUBST(COM_ERR_VERSION)
1554 AC_DEFUN([KRB5_AC_CHOOSE_SS],[
1555 AC_ARG_WITH(system-ss,
1556 AC_HELP_STRING(--with-system-ss,use system -lss and mk_cmds @<:@private version@:>@))
1557 AC_ARG_VAR(SS_LIB,[system libraries for 'ss' package [-lss]])
1558 AC_MSG_CHECKING(which version of subsystem package to use)
1559 if test "x$with_system_ss" = xyes ; then
1561 AC_MSG_RESULT(system)
1562 # todo: check for various libraries we might need
1563 # in the meantime...
1564 test "x${SS_LIB+set}" = xset || SS_LIB=-lss
1566 LIBS="$LIBS $SS_LIB"
1567 AC_CACHE_CHECK(whether system ss package works, krb5_cv_system_ss_okay,[
1570 int main(int argc, char *argv[]) {
1573 i = ss_create_invocation("foo","foo","",0,&err);
1577 }], krb5_cv_system_ss_okay=yes, AC_MSG_ERROR(cannot run test program),
1578 krb5_cv_system_ss_okay="assumed")])
1585 AC_SUBST(SS_VERSION)
1588 AC_DEFUN([KRB5_AC_CHOOSE_DB],[
1589 AC_ARG_WITH(system-db,
1590 AC_HELP_STRING(--with-system-db,use system Berkeley db @<:@private version@:>@))
1591 AC_ARG_VAR(DB_HEADER,[header file for system Berkeley db package [db.h]])
1592 AC_ARG_VAR(DB_LIB,[library for system Berkeley db package [-ldb]])
1593 if test "x$with_system_db" = xyes ; then
1595 # TODO: Do we have specific routines we should check for?
1596 # How about known, easily recognizable bugs?
1597 # We want to use bt_rseq in some cases, but no other version but
1598 # ours has it right now.
1600 # Okay, check the variables.
1601 test "x${DB_HEADER+set}" = xset || DB_HEADER=db.h
1602 test "x${DB_LIB+set}" = xset || DB_LIB=-ldb
1604 if test "x${DB_HEADER}" = xdb.h ; then
1605 DB_HEADER_VERSION=sys
1607 DB_HEADER_VERSION=redirect
1609 KDB5_DB_LIB="$DB_LIB"
1612 AC_DEFINE(HAVE_BT_RSEQ,1,[Define if bt_rseq is available, for recursive btree traversal.])
1614 DB_HEADER_VERSION=k5
1615 # libdb gets sucked into libkdb
1617 # needed for a couple of things that need libdb for its own sake
1620 AC_SUBST(DB_VERSION)
1622 AC_SUBST(DB_HEADER_VERSION)
1624 AC_SUBST(KDB5_DB_LIB)
1627 dnl KRB5_AC_PRIOCNTL_HACK
1630 AC_DEFUN([KRB5_AC_PRIOCNTL_HACK],
1631 [AC_REQUIRE([AC_PROG_AWK])dnl
1632 AC_REQUIRE([AC_LANG_COMPILER_REQUIRE])dnl
1633 AC_CACHE_CHECK([whether to use priocntl hack], [krb5_cv_priocntl_hack],
1634 [case $krb5_cv_host in
1636 if test "$cross_compiling" = yes; then
1637 krb5_cv_priocntl_hack=yes
1639 # Solaris patch 117171-11 (sparc) or 117172-11 (x86)
1640 # fixes the Solaris 9 bug where final pty output
1641 # gets lost on close.
1642 if showrev -p | $AWK 'BEGIN { e = 1 }
1643 /Patch: 11717[[12]]/ { x = index[]([$]2, "-");
1644 if (substr[]([$]2, x + 1, length([$]2) - x) >= 11)
1645 { e = 0 } else { e = 1 } }
1646 END { exit e; }'; then
1647 krb5_cv_priocntl_hack=no
1649 krb5_cv_priocntl_hack=yes
1654 krb5_cv_priocntl_hack=no
1657 if test "$krb5_cv_priocntl_hack" = yes; then
1662 AC_SUBST(PRIOCNTL_HACK)])
1665 dnl KRB5_AC_GCC_ATTRS
1666 AC_DEFUN([KRB5_AC_GCC_ATTRS],
1667 [AC_CACHE_CHECK([for constructor/destructor attribute support],krb5_cv_attr_constructor_destructor,
1668 [rm -f conftest.1 conftest.2
1669 if test -r conftest.1 || test -r conftest.2 ; then
1670 AC_MSG_ERROR(write error in local file system?)
1674 if test -r conftest.1 && test -r conftest.2 ; then true ; else
1675 AC_MSG_ERROR(write error in local file system?)
1679 # blindly assume we have 'unlink'...
1680 AC_TRY_RUN([void foo1() __attribute__((constructor));
1681 void foo1() { unlink("conftest.1"); }
1682 void foo2() __attribute__((destructor));
1683 void foo2() { unlink("conftest.2"); }
1684 int main () { return 0; }],
1685 [test -r conftest.1 || a=yes
1686 test -r conftest.2 || b=yes], , AC_MSG_ERROR(Cannot test for constructor/destructor support when cross compiling))
1687 case $krb5_cv_host in
1689 # Under AIX 4.3.3, at least, shared library destructor functions
1690 # appear to get executed in reverse link order (right to left),
1691 # so that a library's destructor function may run after that of
1692 # libraries it depends on, and may still have to access in the
1695 # That counts as "not working", for me, but it's a much more
1696 # complicated test case to set up.
1700 krb5_cv_attr_constructor_destructor="$a,$b"
1702 # Okay, krb5_cv_... should be set now.
1703 case $krb5_cv_attr_constructor_destructor in
1705 AC_DEFINE(CONSTRUCTOR_ATTR_WORKS,1,[Define if __attribute__((constructor)) works]) ;;
1707 case $krb5_cv_attr_constructor_destructor in
1709 AC_DEFINE(DESTRUCTOR_ATTR_WORKS,1,[Define if __attribute__((destructor)) works]) ;;
1711 dnl End of attributes we care about right now.
1715 dnl KRB5_AC_PRAGMA_WEAK_REF
1716 AC_DEFUN([KRB5_AC_PRAGMA_WEAK_REF],
1717 [AC_CACHE_CHECK([whether pragma weak references are supported],
1718 krb5_cv_pragma_weak_ref,
1719 [AC_TRY_LINK([#pragma weak flurbl
1720 extern int flurbl(void);],[if (&flurbl != 0) return flurbl();],
1721 krb5_cv_pragma_weak_ref=yes,krb5_cv_pragma_weak_ref=no)])
1722 if test $krb5_cv_pragma_weak_ref = yes ; then
1723 AC_DEFINE(HAVE_PRAGMA_WEAK_REF,1,[Define if #pragma weak references work])
1727 m4_include(config/ac-archive/acx_pthread.m4)
1731 # Check for libutil, for NetBSD, et al.; needed for openpty() and
1732 # logwtmp() on some platforms.
1734 AC_DEFUN([KRB5_AC_LIBUTIL],
1735 [AC_CHECK_LIB(util, main,
1736 [AC_DEFINE(HAVE_LIBUTIL,1,[Define if util library is available with openpty, logwtmp, etc])
1737 UTIL_LIB=-lutil])dnl
1743 dnl --with-ldap=value
1745 AC_DEFUN(WITH_LDAP,[
1747 [ --with-ldap compile OpenLDAP database backend module],
1749 OPENLDAP) with_ldap=yes ;;
1751 EDIRECTORY) AC_MSG_ERROR(Option --with-ldap=EDIRECTORY is deprecated; use --with-edirectory instead.) ;;
1752 *) AC_MSG_ERROR(Invalid option value --with-ldap="$withval") ;;
1753 esac], with_ldap=no)dnl
1754 AC_ARG_WITH([edirectory],
1755 [ --with-edirectory compile eDirectory database backend module],
1758 *) AC_MSG_ERROR(Invalid option value --with-edirectory="$withval") ;;
1759 esac], with_edirectory=no)dnl
1761 if test $with_ldap = yes; then
1762 if test $with_edirectory = yes; then
1763 AC_MSG_ERROR(Cannot enable both OpenLDAP and eDirectory backends; choose one.)
1765 AC_MSG_NOTICE(enabling OpenLDAP database backend module support)
1767 elif test $with_edirectory = yes; then
1768 AC_MSG_NOTICE(enabling eDirectory database backend module support)
1770 AC_DEFINE(HAVE_EDIRECTORY,1,[Define if LDAP KDB interface should assume eDirectory.])
1773 dnl AC_MSG_NOTICE(disabling ldap backend module support)
1777 dnl If libkeyutils exists (on Linux) include it and use keyring ccache
1778 AC_DEFUN(KRB5_AC_KEYRING_CCACHE,[
1779 AC_CHECK_HEADERS([keyutils.h],
1780 AC_CHECK_LIB(keyutils, add_key,
1781 [dnl Pre-reqs were found
1782 AC_DEFINE(USE_KEYRING_CCACHE, 1, [Define if the keyring ccache should be enabled])
1783 LIBS="-lkeyutils $LIBS"