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 define([K5_TOPDIR],[.])dnl
8 AC_DEFUN(V5_SET_TOPDIR,[dnl
9 ac_reltopdir="K5_TOPDIR"
10 if test ! -r "$srcdir/K5_TOPDIR/aclocal.m4"; then
11 AC_MSG_ERROR([Configure could not determine the relative topdir])
13 ac_topdir=$srcdir/$ac_reltopdir
14 ac_config_fragdir=$ac_reltopdir/config
15 # echo "Looking for $srcdir/$ac_config_fragdir"
16 if test -d "$srcdir/$ac_config_fragdir"; then
17 AC_CONFIG_AUX_DIR(K5_TOPDIR/config)
19 AC_MSG_ERROR([can not find config/ directory in $ac_reltopdir])
25 pushdef([x],esyscmd([sed -n 's/#define \([A-Z0-9_]*\)[ \t]*\(.*\)/\1=\2/p' < ]K5_TOPDIR/patchlevel.h))
26 define([PL_KRB5_MAJOR_RELEASE],regexp(x,[KRB5_MAJOR_RELEASE=\(.*\)],[\1]))
27 ifelse(PL_KRB5_MAJOR_RELEASE,,[errprint([Can't determine KRB5_MAJOR_RELEASE value from patchlevel.h.
28 ]) m4exit(1) dnl sometimes that does not work?
30 define([PL_KRB5_MINOR_RELEASE],regexp(x,[KRB5_MINOR_RELEASE=\(.*\)],[\1]))
31 ifelse(PL_KRB5_MINOR_RELEASE,,[errprint([Can't determine KRB5_MINOR_RELEASE value from patchlevel.h.
32 ]) m4exit(1) dnl sometimes that does not work?
34 define([PL_KRB5_PATCHLEVEL],regexp(x,[KRB5_PATCHLEVEL=\(.*\)],[\1]))
35 ifelse(PL_KRB5_PATCHLEVEL,,[errprint([Can't determine KRB5_PATCHLEVEL value from patchlevel.h.
36 ]) m4exit(1) dnl sometimes that does not work?
38 define([PL_KRB5_RELTAIL],regexp(x,[KRB5_RELTAIL="\(.*\)"],[\1]))
39 dnl RELTAIL is allowed to not be defined.
41 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))
42 define([K5_BUGADDR],krb5-bugs@mit.edu)
43 define([K5_AC_INIT],[AC_INIT(Kerberos 5, K5_VERSION, K5_BUGADDR, krb5)
47 dnl drop in standard rules for all configure files -- CONFIG_RULES
49 AC_DEFUN(CONFIG_RULES,[dnl
50 AC_REQUIRE([V5_SET_TOPDIR]) dnl
53 dnl Consider using AC_USE_SYSTEM_EXTENSIONS when we require autoconf
54 dnl 2.59c or later, but be sure to test on Solaris first.
55 AC_DEFINE([_GNU_SOURCE], 1, [Define to enable extensions in glibc])
56 AC_DEFINE([__STDC_WANT_LIB_EXT1__], 1, [Define to enable C11 extensions])
60 if test -z "$LD" ; then LD=$CC; fi
61 AC_ARG_VAR(LD,[linker command [CC]])
66 dnl allow stuff in tree to access deprecated stuff for now
67 dnl AC_DEFINE([KRB5_DEPRECATED], 1, [Define only if building in-tree])
71 KRB5_AC_MAINTAINER_MODE dnl
74 dnl This identifies the top of the source tree relative to the directory
75 dnl in which the configure file lives.
77 CONFIG_RELTOPDIR=$ac_reltopdir
78 AC_SUBST(CONFIG_RELTOPDIR)
79 lib_frag=$srcdir/$ac_config_fragdir/lib.in
80 AC_SUBST_FILE(lib_frag)
81 libobj_frag=$srcdir/$ac_config_fragdir/libobj.in
82 AC_SUBST_FILE(libobj_frag)
83 libnover_frag=$srcdir/$ac_config_fragdir/libnover.in
84 AC_SUBST_FILE(libnover_frag)
85 libpriv_frag=$srcdir/$ac_config_fragdir/libpriv.in
86 AC_SUBST_FILE(libpriv_frag)
87 libnodeps_frag=$srcdir/$ac_config_fragdir/libnodeps.in
88 AC_SUBST_FILE(libnodeps_frag)
90 KRB5_AC_PRAGMA_WEAK_REF
94 KRB5_AC_ENABLE_THREADS
96 KRB5_AC_KEYRING_CCACHE
97 KRB5_AC_PERSISTENT_KEYRING
100 dnl Maintainer mode, akin to what automake provides, 'cept we don't
101 dnl want to use automake right now.
102 AC_DEFUN([KRB5_AC_MAINTAINER_MODE],
103 [AC_ARG_ENABLE([maintainer-mode],
104 AC_HELP_STRING([--enable-maintainer-mode],[enable rebuilding of source files, Makefiles, etc]),
105 USE_MAINTAINER_MODE=$enableval,
106 USE_MAINTAINER_MODE=no)
107 if test "$USE_MAINTAINER_MODE" = yes; then
108 MAINTAINER_MODE_TRUE=
109 MAINTAINER_MODE_FALSE='#'
110 AC_MSG_NOTICE(enabling maintainer mode)
112 MAINTAINER_MODE_TRUE='#'
113 MAINTAINER_MODE_FALSE=
115 MAINT=$MAINTAINER_MODE_TRUE
116 AC_SUBST(MAINTAINER_MODE_TRUE)
117 AC_SUBST(MAINTAINER_MODE_FALSE)
122 AC_DEFUN([KRB5_AC_INITFINI],[
123 dnl Do we want initialization at load time?
124 AC_ARG_ENABLE([delayed-initialization],
125 AC_HELP_STRING([--disable-delayed-initialization],initialize library code when loaded @<:@delay until first use@:>@), , enable_delayed_initialization=yes)
126 case "$enable_delayed_initialization" in
128 AC_DEFINE(DELAY_INITIALIZER,1,[Define if library initialization should be delayed until first use]) ;;
130 *) AC_MSG_ERROR(invalid option $enable_delayed_initialization for delayed-initialization) ;;
132 dnl We always want finalization at unload time.
134 dnl Can we do things through gcc?
136 dnl How about with the linker?
137 if test -z "$use_linker_init_option" ; then
138 AC_MSG_ERROR(ran INITFINI before checking shlib.conf?)
140 if test "$use_linker_init_option" = yes; then
141 AC_DEFINE(USE_LINKER_INIT_OPTION,1,[Define if link-time options for library initialization will be used])
143 if test "$use_linker_fini_option" = yes; then
144 AC_DEFINE(USE_LINKER_FINI_OPTION,1,[Define if link-time options for library finalization will be used])
149 AC_DEFUN([KRB5_AC_FIND_DLOPEN],[
152 AC_SEARCH_LIBS(dlopen, dl, [
153 if test "$ac_cv_search_dlopen" != "none required"; then
154 DL_LIB=$ac_cv_search_dlopen
157 AC_DEFINE(USE_DLOPEN,1,[Define if dlopen should be used])])
163 AC_DEFUN([KRB5_AC_ENABLE_THREADS],[
164 AC_ARG_ENABLE([thread-support],
165 AC_HELP_STRING([--disable-thread-support],don't enable thread support @<:@enabled@:>@), , enable_thread_support=yes)
166 if test "$enable_thread_support" = yes ; then
167 AC_MSG_NOTICE(enabling thread support)
168 AC_DEFINE(ENABLE_THREADS,1,[Define if thread support enabled])
170 dnl Maybe this should be inside the conditional above? Doesn't cache....
171 if test "$enable_thread_support" = yes; then
172 AX_PTHREAD(,[AC_MSG_ERROR([cannot determine options for enabling thread support; try --disable-thread-support])])
173 AC_MSG_NOTICE(PTHREAD_CC = $PTHREAD_CC)
174 AC_MSG_NOTICE(PTHREAD_CFLAGS = $PTHREAD_CFLAGS)
175 AC_MSG_NOTICE(PTHREAD_LIBS = $PTHREAD_LIBS)
176 dnl Not really needed -- if pthread.h isn't found, ACX_PTHREAD will fail.
177 dnl AC_CHECK_HEADERS(pthread.h)
178 # AIX and Tru64 don't support weak references, and don't have
179 # stub versions of the pthread code in libc.
182 # On these platforms, we'll always pull in the thread support.
183 LIBS="$LIBS $PTHREAD_LIBS"
184 CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
185 # We don't need to sometimes add the flags we've just folded in...
190 # These are the flags that "gcc -pthread" adds. But we don't
191 # want "-pthread" because that has link-time effects, and we
192 # don't exclude CFLAGS when linking. *sigh*
193 PTHREAD_CFLAGS="-D_REENTRANT -D_THREAD_SAFE -D_POSIX_C_SOURCE=199506L"
196 # On Solaris 10 with gcc 3.4.3, the autoconf archive macro doesn't
197 # get the right result. XXX What about Solaris 9 and earlier?
198 if test "$GCC" = yes ; then
199 PTHREAD_CFLAGS="-D_REENTRANT -pthreads"
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"
208 # On Solaris 10, the thread support is always available in libc.
209 AC_DEFINE(NO_WEAK_PTHREADS,1,[Define if references to pthread routines should be non-weak.])
219 AC_SUBST(THREAD_SUPPORT)
220 dnl We want to know where these routines live, so on systems with weak
221 dnl reference support we can figure out whether or not the pthread library
222 dnl has been linked in.
223 dnl If we don't add any libraries for thread support, don't bother.
224 AC_CHECK_FUNCS(pthread_once pthread_rwlock_init)
226 test "$PTHREAD_CC" != "" && test "$ac_cv_c_compiler_gnu" = no && CC=$PTHREAD_CC
228 # On Solaris, -pthreads is added to CFLAGS, no extra explicit libraries.
229 CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
230 AC_SUBST(PTHREAD_CFLAGS)
232 LIBS="$PTHREAD_LIBS $LIBS"
233 AC_MSG_NOTICE(rechecking with PTHREAD_... options)
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_MSG_CHECKING(for IPv6 compile-time support without -DINET6)
399 AC_CACHE_VAL(krb5_cv_inet6,[
400 if test "$ac_cv_func_inet_ntop" != "yes" ; then
404 #ifdef HAVE_SYS_TYPES_H
405 #include <sys/types.h>
407 #include <sys/socket.h>
408 #include <netinet/in.h>
411 struct sockaddr_in6 in;
413 IN6_IS_ADDR_LINKLOCAL (&in.sin6_addr);
414 ],krb5_cv_inet6=yes,krb5_cv_inet6=no)])
416 AC_MSG_RESULT($krb5_cv_inet6)
417 if test "$krb5_cv_inet6" = no && test "$ac_cv_func_inet_ntop" = yes; then
418 AC_MSG_CHECKING(for IPv6 compile-time support with -DINET6)
419 AC_CACHE_VAL(krb5_cv_inet6_with_dinet6,[
423 #ifdef HAVE_SYS_TYPES_H
424 #include <sys/types.h>
426 #include <sys/socket.h>
427 #include <netinet/in.h>
430 struct sockaddr_in6 in;
432 IN6_IS_ADDR_LINKLOCAL (&in.sin6_addr);
433 ],krb5_cv_inet6_with_dinet6=yes,krb5_cv_inet6_with_dinet6=no)
435 AC_MSG_RESULT($krb5_cv_inet6_with_dinet6)
437 if test $krb5_cv_inet6 = yes || test "$krb5_cv_inet6_with_dinet6" = yes; then
438 if test "$krb5_cv_inet6_with_dinet6" = yes; then
439 AC_DEFINE(INET6,1,[May need to be defined to enable IPv6 support, for example on IRIX])
444 AC_DEFUN(KRB5_AC_CHECK_FOR_CFLAGS,[
445 AC_BEFORE([$0],[AC_PROG_CC])
446 AC_BEFORE([$0],[AC_PROG_CXX])
447 krb5_ac_cflags_set=${CFLAGS+set}
448 krb5_ac_cxxflags_set=${CXXFLAGS+set}
449 krb5_ac_warn_cflags_set=${WARN_CFLAGS+set}
450 krb5_ac_warn_cxxflags_set=${WARN_CXXFLAGS+set}
453 AC_DEFUN(TRY_WARN_CC_FLAG_1,[dnl
454 cachevar=`echo "krb5_cv_cc_flag_$1" | sed -e s/=/_eq_/g -e s/-/_dash_/g -e s/[[^a-zA-Z0-9_]]/_/g`
455 AC_CACHE_CHECK([if C compiler supports $1], [$cachevar],
456 [# first try without, then with
457 AC_TRY_COMPILE([], 1;,
458 [old_cflags="$CFLAGS"
459 CFLAGS="$CFLAGS $cflags_warning_test_flags $1"
460 AC_TRY_COMPILE([], 1;, eval $cachevar=yes, eval $cachevar=no)
461 CFLAGS="$old_cflags"],
462 [AC_MSG_ERROR(compiling simple test program with $CFLAGS failed)])])
463 if eval test '"${'$cachevar'}"' = yes; then
464 WARN_CFLAGS="$WARN_CFLAGS $1"
466 eval flag_supported='${'$cachevar'}'
469 dnl Are additional flags needed to make unsupported warning options
470 dnl get reported as errors?
471 AC_DEFUN(CHECK_CC_WARNING_TEST_FLAGS,[dnl
472 cflags_warning_test_flags=
473 TRY_WARN_CC_FLAG_1(-Werror=unknown-warning-option)
474 if test $flag_supported = yes; then
475 cflags_warning_test_flags=-Werror=unknown-warning-option
479 AC_DEFUN(TRY_WARN_CC_FLAG,[dnl
480 AC_REQUIRE([CHECK_CC_WARNING_TEST_FLAGS])dnl
481 TRY_WARN_CC_FLAG_1($1)dnl
484 AC_DEFUN(WITH_CC,[dnl
485 AC_REQUIRE([KRB5_AC_CHECK_FOR_CFLAGS])dnl
486 AC_REQUIRE([AC_PROG_CC])dnl
487 AC_REQUIRE([AC_PROG_CXX])dnl
488 if test $ac_cv_c_compiler_gnu = yes ; then
493 AC_CACHE_CHECK([for GNU linker], krb5_cv_prog_gnu_ld,
494 [krb5_cv_prog_gnu_ld=no
495 if test "$GCC" = yes; then
496 if AC_TRY_COMMAND([$CC -Wl,-v 2>&1 dnl
497 | grep "GNU ld" > /dev/null]); then
498 krb5_cv_prog_gnu_ld=yes
501 AC_ARG_WITH([size-optimizations],
502 [ --with-size-optimizations enable a few optimizations to reduce code size
503 possibly at some run-time cost],
506 if test "$withval" = yes; then
507 AC_DEFINE(CONFIG_SMALL,1,[Define to reduce code size even if it means more cpu usage])
509 # -Wno-long-long, if needed, for k5-platform.h without inttypes.h etc.
510 extra_gcc_warn_opts="-Wall -Wcast-align -Wshadow"
511 # -Wmissing-prototypes
512 if test "$GCC" = yes ; then
513 # Putting this here means we get -Os after -O2, which works.
514 if test "$with_size_optimizations" = yes && test "x$krb5_ac_cflags_set" != xset; then
515 AC_MSG_NOTICE(adding -Os optimization option)
517 "-g -O2") CFLAGS="-g -Os" ;;
518 "-O2") CFLAGS="-Os" ;;
519 *) CFLAGS="$CFLAGS -Os" ;;
522 if test "x$krb5_ac_warn_cflags_set" = xset ; then
523 AC_MSG_NOTICE(not adding extra gcc warning flags because WARN_CFLAGS was set)
525 AC_MSG_NOTICE(adding extra warning flags for gcc)
526 WARN_CFLAGS="$WARN_CFLAGS $extra_gcc_warn_opts -Wmissing-prototypes"
527 if test "`uname -s`" = Darwin ; then
528 AC_MSG_NOTICE(skipping pedantic warnings on Darwin)
529 elif test "`uname -s`" = Linux ; then
530 AC_MSG_NOTICE(skipping pedantic warnings on Linux)
532 WARN_CFLAGS="$WARN_CFLAGS -pedantic"
534 if test "$ac_cv_cxx_compiler_gnu" = yes; then
535 if test "x$krb5_ac_warn_cxxflags_set" = xset ; then
536 AC_MSG_NOTICE(not adding extra g++ warnings because WARN_CXXFLAGS was set)
538 AC_MSG_NOTICE(adding extra warning flags for g++)
539 WARN_CXXFLAGS="$WARN_CXXFLAGS $extra_gcc_warn_opts"
542 # Currently, G++ does not support -Wno-format-zero-length.
543 TRY_WARN_CC_FLAG(-Wno-format-zero-length)
544 # Other flags here may not be supported on some versions of
545 # gcc that people want to use.
546 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 error=uninitialized no-maybe-uninitialized error=pointer-arith error=int-conversion error=incompatible-pointer-types error=discarded-qualifiers error=implicit-int ; do
547 TRY_WARN_CC_FLAG(-W$flag)
549 # old-style-definition? generates many, many warnings
551 # Warnings that we'd like to turn into errors on versions of gcc
552 # that support promoting only specific warnings to errors, but
553 # we'll take as warnings on older compilers. (If such a warning
554 # is added after the -Werror=foo feature, you can just put
555 # error=foo in the above list, and skip the test for the
556 # warning-only form.) At least in some versions, -Werror= doesn't
557 # seem to make the conditions actual errors, but still issues
558 # warnings; I guess we'll take what we can get.
560 # We're currently targeting C89+, not C99, so disallow some
562 for flag in declaration-after-statement ; do
563 TRY_WARN_CC_FLAG(-Werror=$flag)
564 if test "$flag_supported" = no; then
565 TRY_WARN_CC_FLAG(-W$flag)
568 # We require function declarations now.
570 # In some compiler versions -- e.g., "gcc version 4.2.1 (Apple
571 # Inc. build 5664)" -- the -Werror- option works, but the -Werror=
572 # version doesn't cause implicitly declared functions to be
573 # flagged as errors. If neither works, -Wall implies
574 # -Wimplicit-function-declaration so don't bother.
575 TRY_WARN_CC_FLAG(-Werror-implicit-function-declaration)
576 if test "implicit-function-declaration_supported" = no; then
577 TRY_WARN_CC_FLAG(-Werror=implicit-function-declaration)
581 if test "`uname -s`" = Darwin ; then
582 # Someday this should be a feature test.
583 # One current (Jaguar = OS 10.2) problem:
584 # Archive library with foo.o undef sym X and bar.o common sym X,
585 # if foo.o is pulled in at link time, bar.o may not be, causing
586 # the linker to complain.
587 # Dynamic library problems too?
588 case "$CC $CFLAGS" in
589 *-fcommon*) ;; # why someone would do this, I don't know
590 *-fno-common*) ;; # okay, they're already doing the right thing
592 AC_MSG_NOTICE(disabling the use of common storage on Darwin)
593 CFLAGS="$CFLAGS -fno-common"
596 case "$LD $LDFLAGS" in
597 *-Wl,-search_paths_first*) ;;
598 *) LDFLAGS="${LDFLAGS} -Wl,-search_paths_first" ;;
602 if test "`uname -s`" = AIX ; then
603 # Using AIX but not GCC, assume native compiler.
604 # The native compiler appears not to give a nonzero exit
605 # status for certain classes of errors, like missing arguments
606 # in function calls. Let's try to fix that with -qhalt=e.
607 case "$CC $CFLAGS" in
610 CFLAGS="$CFLAGS -qhalt=e"
611 AC_MSG_NOTICE(adding -qhalt=e for better error reporting)
614 # Also, the optimizer isn't turned on by default, which means
615 # the static inline functions get left in random object files,
616 # leading to references to pthread_mutex_lock from anything that
617 # includes k5-int.h whether it uses threads or not.
618 case "$CC $CFLAGS" in
622 AC_MSG_NOTICE(adding -O for inline thread-support function elimination)
626 if test "`uname -s`" = SunOS ; then
627 # Using Solaris but not GCC, assume Sunsoft compiler.
628 # We have some error-out-on-warning options available.
629 # Sunsoft 12 compiler defaults to -xc99=all, it appears, so "inline"
630 # works, but it also means that declaration-in-code warnings won't
632 # -v -fd -errwarn=E_DECLARATION_IN_CODE ...
633 if test "x$krb5_ac_warn_cflags_set" = xset ; then
634 AC_MSG_NOTICE(not adding extra warning flags because WARN_CFLAGS was set)
636 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"
638 if test "x$krb5_ac_warn_cxxflags_set" = xset ; then
639 AC_MSG_NOTICE(not adding extra warning flags because WARN_CXXFLAGS was set)
641 WARN_CXXFLAGS="-errtags=yes +w +w2 -xport64"
645 AC_SUBST(WARN_CFLAGS)
646 AC_SUBST(WARN_CXXFLAGS)
650 dnl check for yylineno -- HAVE_YYLINENO
652 AC_DEFUN(HAVE_YYLINENO,[dnl
653 AC_REQUIRE_CPP()AC_REQUIRE([AC_PROG_LEX])dnl
654 AC_MSG_CHECKING([for yylineno declaration])
655 AC_CACHE_VAL(krb5_cv_type_yylineno,
656 # some systems have yylineno, others don't...
658 %%' | ${LEX} -t > conftest.out
659 if egrep yylineno conftest.out >/dev/null 2>&1; then
660 krb5_cv_type_yylineno=yes
662 krb5_cv_type_yylineno=no
665 AC_MSG_RESULT($krb5_cv_type_yylineno)
666 if test $krb5_cv_type_yylineno = no; then
667 AC_DEFINE(NO_YYLINENO, 1, [Define if lex produes code with yylineno])
671 dnl K5_GEN_MAKEFILE([dir, [frags]])
673 AC_DEFUN(K5_GEN_MAKEFILE,[dnl
674 ifelse($1, ,[_K5_GEN_MAKEFILE(.,$2)],[_K5_GEN_MAKEFILE($1,$2)])
677 dnl _K5_GEN_MAKEFILE(dir, [frags])
678 dnl dir must be present in this case
679 dnl Note: Be careful in quoting.
680 dnl The ac_foreach generates the list of fragments to include
681 dnl or "" if $2 is empty
682 AC_DEFUN(_K5_GEN_MAKEFILE,[dnl
683 AC_CONFIG_FILES([$1/Makefile:$srcdir/]K5_TOPDIR[/config/pre.in:$1/Makefile.in:$1/deps:$srcdir/]K5_TOPDIR[/config/post.in])
686 dnl K5_GEN_FILE( <ac_output arguments> )
688 AC_DEFUN(K5_GEN_FILE,[AC_CONFIG_FILES($1)])dnl
691 dnl Note: Adds the variables to config.status for individual
692 dnl Makefile generation from config.status
693 AC_DEFUN(K5_AC_OUTPUT,[AC_OUTPUT])dnl
695 dnl V5_AC_OUTPUT_MAKEFILE
697 AC_DEFUN(V5_AC_OUTPUT_MAKEFILE,
698 [ifelse($1, , [_V5_AC_OUTPUT_MAKEFILE(.,$2)],[_V5_AC_OUTPUT_MAKEFILE($1,$2)])])
700 define(_V5_AC_OUTPUT_MAKEFILE,
701 [ifelse($2, , ,AC_CONFIG_FILES($2))
702 AC_FOREACH([DIR], [$1],dnl
703 [AC_CONFIG_FILES(DIR[/Makefile:$srcdir/]K5_TOPDIR[/config/pre.in:]DIR[/Makefile.in:]DIR[/deps:$srcdir/]K5_TOPDIR[/config/post.in])])
707 dnl KRB5_SOCKADDR_SA_LEN: define HAVE_SA_LEN if sockaddr contains the sa_len
710 AC_DEFUN([KRB5_SOCKADDR_SA_LEN],[ dnl
711 AC_CHECK_MEMBER(struct sockaddr.sa_len,
712 AC_DEFINE(HAVE_SA_LEN,1,[Define if struct sockaddr contains sa_len])
713 ,,[#include <sys/types.h>
714 #include <sys/socket.h>])])
719 AC_DEFUN(WITH_NETLIB,[
720 AC_ARG_WITH([netlib],
721 AC_HELP_STRING([--with-netlib=LIBS], use user defined resolver library),
722 [ if test "$withval" = yes -o "$withval" = no ; then
723 AC_MSG_RESULT("netlib will link with C library resolver only")
725 LIBS="$LIBS $withval"
726 AC_MSG_RESULT("netlib will use \'$withval\'")
733 AC_DEFUN(KRB5_AC_NEED_DAEMON, [
734 KRB5_NEED_PROTO([#ifdef HAVE_UNISTD_H
736 #endif],daemon,1)])dnl
739 dnl KRB5_AC_NEED_LIBGEN --- check if libgen needs to be linked in for
743 AC_DEFUN(KRB5_AC_NEED_LIBGEN,[
744 AC_REQUIRE([AC_PROG_CC])dnl
746 dnl regcomp is present but non-functional on Solaris 2.4
748 AC_MSG_CHECKING(for working regcomp)
749 AC_CACHE_VAL(ac_cv_func_regcomp,[
751 #include <sys/types.h>
753 regex_t x; regmatch_t m;
754 int main() { return regcomp(&x,"pat.*",0) || regexec(&x,"pattern",1,&m,0); }
755 ], ac_cv_func_regcomp=yes, ac_cv_func_regcomp=no, AC_MSG_ERROR([Cannot test regcomp when cross compiling]))])
756 AC_MSG_RESULT($ac_cv_func_regcomp)
757 test $ac_cv_func_regcomp = yes && AC_DEFINE(HAVE_REGCOMP,1,[Define if regcomp exists and functions])
759 dnl Check for the compile and step functions - only if regcomp is not available
761 if test $ac_cv_func_regcomp = no; then
764 dnl this will fail if there's no compile/step in -lgen, or if there's
765 dnl no -lgen. This is fine.
766 AC_CHECK_FUNCS(compile step)
769 dnl Set GEN_LIB if necessary
771 AC_CHECK_LIB(gen, compile, GEN_LIB=-lgen, GEN_LIB=)
776 dnl KRB5_AC_REGEX_FUNCS --- check for different regular expression
777 dnl support functions
779 AC_DEFUN(KRB5_AC_REGEX_FUNCS,[
780 AC_CHECK_FUNCS(re_comp re_exec regexec)
781 AC_REQUIRE([KRB5_AC_NEED_LIBGEN])dnl
784 dnl AC_KRB5_TCL_FIND_CONFIG (uses tcl_dir)
786 AC_DEFUN(AC_KRB5_TCL_FIND_CONFIG,[
787 AC_REQUIRE([KRB5_LIB_AUX])dnl
788 AC_MSG_CHECKING(for tclConfig.sh)
789 dnl On Debian, we might be given --with-tcl=/usr, or tclsh might
790 dnl point us to /usr/lib/tcl8.4; either way, we need to find
791 dnl /usr/lib/tcl8.4/tclConfig.sh.
792 dnl On NetBSD, we might be given --with-tcl=/usr/pkg, or tclsh
793 dnl might point us to /usr/pkg/lib/tcl8.4; we need to find
794 dnl /usr/pkg/lib/tclConfig.sh.
795 if test -r "$tcl_dir/lib/tclConfig.sh" ; then
796 tcl_conf="$tcl_dir/lib/tclConfig.sh"
797 elif test -r "$tcl_dir/tclConfig.sh" ; then
798 tcl_conf="$tcl_dir/tclConfig.sh"
799 elif test -r "$tcl_dir/../tclConfig.sh" ; then
800 tcl_conf="$tcl_dir/../tclConfig.sh"
804 changequote(<<,>>)dnl
805 for d in "$lib" "$lib"/tcl7.[0-9] "$lib"/tcl8.[0-9] ; do
806 if test -r "$d/tclConfig.sh" ; then
807 tcl_conf="$tcl_conf $d/tclConfig.sh"
812 if test -n "$tcl_conf" ; then
813 AC_MSG_RESULT($tcl_conf)
815 AC_MSG_RESULT(not found)
820 old_CPPFLAGS=$CPPFLAGS
823 if test -n "$tcl_conf" ; then
824 for file in $tcl_conf ; do
825 TCL_MAJOR_VERSION=x ; TCL_MINOR_VERSION=x
826 AC_MSG_CHECKING(Tcl info in $file)
828 v=$TCL_MAJOR_VERSION.$TCL_MINOR_VERSION
829 if test -z "$tcl_vers_maj" \
830 || test "$tcl_vers_maj" -lt "$TCL_MAJOR_VERSION" \
831 || test "$tcl_vers_maj" = "$TCL_MAJOR_VERSION" -a "$tcl_vers_min" -lt "$TCL_MINOR_VERSION" ; then
832 for incdir in "$TCL_PREFIX/include/tcl$v" "$TCL_PREFIX/include" ; do
833 if test -r "$incdir/tcl.h" -o -r "$incdir/tcl/tcl.h" ; then
834 CPPFLAGS="$old_CPPFLAGS -I$incdir"
838 LIBS="$old_LIBS `eval echo x $TCL_LIB_SPEC $TCL_LIBS | sed 's/^x//'`"
839 LDFLAGS="$old_LDFLAGS $TCL_LD_FLAGS"
840 AC_TRY_LINK( , [Tcl_CreateInterp ();],
842 tcl_vers_maj=$TCL_MAJOR_VERSION
843 tcl_vers_min=$TCL_MINOR_VERSION
844 AC_MSG_RESULT($v - working),
845 AC_MSG_RESULT($v - compilation failed)
848 AC_MSG_RESULT(older version $v)
852 CPPFLAGS=$old_CPPFLAGS
857 if test -n "$tcl_ok_conf" ; then
860 for incdir in "$TCL_PREFIX/include/tcl$v" "$TCL_PREFIX/include" ; do
861 if test -r "$incdir/tcl.h" -o -r "$incdir/tcl/tcl.h" ; then
862 if test "$incdir" != "/usr/include" ; then
863 TCL_INCLUDES=-I$incdir
868 # Need eval because the first-level expansion could reference
869 # variables like ${TCL_DBGX}.
870 eval TCL_LIBS='"'$TCL_LIB_SPEC $TCL_LIBS $TCL_DL_LIBS'"'
871 TCL_LIBPATH="-L$TCL_EXEC_PREFIX/lib"
872 TCL_RPATH=":$TCL_EXEC_PREFIX/lib"
873 if test "$DEPLIBEXT" != "$SHLIBEXT" && test -n "$RPATH_FLAG"; then
874 TCL_MAYBE_RPATH='$(RPATH_FLAG)'"$TCL_EXEC_PREFIX/lib$RPATH_TAIL"
878 CPPFLAGS="$old_CPPFLAGS $TCL_INCLUDES"
879 AC_CHECK_HEADER(tcl.h,AC_DEFINE(HAVE_TCL_H,1,[Define if tcl.h is available]) tcl_header=yes)
880 if test $tcl_header=no; then
881 AC_CHECK_HEADER(tcl/tcl.h,AC_DEFINE(HAVE_TCL_TCL_H,1,[Define if tcl/tcl.h is available]) tcl_header=yes)
883 CPPFLAGS="$old_CPPFLAGS"
886 # If we read a tclConfig.sh file, it probably set this.
889 AC_SUBST(TCL_INCLUDES)
891 AC_SUBST(TCL_LIBPATH)
893 AC_SUBST(TCL_MAYBE_RPATH)
896 dnl AC_KRB5_TCL_TRYOLD
897 dnl attempt to use old search algorithm for locating tcl
899 AC_DEFUN(AC_KRB5_TCL_TRYOLD, [
900 AC_REQUIRE([KRB5_AC_FIND_DLOPEN])
901 AC_MSG_WARN([trying old tcl search code])
902 if test "$with_tcl" != yes -a "$with_tcl" != no; then
903 TCL_INCLUDES=-I$with_tcl/include
904 TCL_LIBPATH=-L$with_tcl/lib
905 TCL_RPATH=:$with_tcl/lib
907 if test "$with_tcl" != no ; then
908 krb5_save_CPPFLAGS="$CPPFLAGS"
909 krb5_save_LDFLAGS="$LDFLAGS"
910 CPPFLAGS="$CPPFLAGS $TCL_INCLUDES"
911 LDFLAGS="$LDFLAGS $TCL_LIBPATH"
913 AC_CHECK_HEADER(tcl.h,AC_DEFINE(HAVE_TCL_H,1,[Define if tcl.h found]) tcl_header=yes)
914 if test $tcl_header=no; then
915 AC_CHECK_HEADER(tcl/tcl.h,AC_DEFINE(HAVE_TCL_TCL_H,1,[Define if tcl/tcl.h found]) tcl_header=yes)
918 if test $tcl_header = yes ; then
921 if test $tcl_lib = no; then
922 AC_CHECK_LIB(tcl8.0, Tcl_CreateCommand,
923 TCL_LIBS="$TCL_LIBS -ltcl8.0 -lm $DL_LIB $LIBS"
924 tcl_lib=yes,,-lm $DL_LIB)
926 if test $tcl_lib = no; then
927 AC_CHECK_LIB(tcl7.6, Tcl_CreateCommand,
928 TCL_LIBS="$TCL_LIBS -ltcl7.6 -lm $DL_LIB $LIBS"
929 tcl_lib=yes,,-lm $DL_LIB)
931 if test $tcl_lib = no; then
932 AC_CHECK_LIB(tcl7.5, Tcl_CreateCommand,
933 TCL_LIBS="$TCL_LIBS -ltcl7.5 -lm $DL_LIB $LIBS"
934 tcl_lib=yes,,-lm $DL_LIB)
937 if test $tcl_lib = no ; then
938 AC_CHECK_LIB(tcl, Tcl_CreateCommand,
939 TCL_LIBS="$TCL_LIBS -ltcl -lm $DL_LIB $LIBS"
940 tcl_lib=yes,,-lm $DL_LIB)
943 if test $tcl_lib = no ; then
944 AC_MSG_WARN("tcl.h found but not library")
947 AC_MSG_WARN(Could not find Tcl which is needed for the kadm5 tests)
950 CPPFLAGS="$krb5_save_CPPFLAGS"
951 LDFLAGS="$krb5_save_LDFLAGS"
952 AC_SUBST(TCL_INCLUDES)
954 AC_SUBST(TCL_LIBPATH)
957 AC_MSG_RESULT("Not looking for Tcl library")
961 dnl AC_KRB5_TCL - determine if the TCL library is present on system
963 AC_DEFUN(AC_KRB5_TCL,[
971 [ --with-tcl=path where Tcl resides], , with_tcl=try)
972 if test "$with_tcl" = no ; then
974 elif test "$with_tcl" = yes -o "$with_tcl" = try ; then
976 if test ! -r /usr/lib/tclConfig.sh; then
977 cat >> conftest <<\EOF
978 puts "tcl_dir=$tcl_library"
980 if tclsh conftest >conftest.out 2>/dev/null; then
981 if grep tcl_dir= conftest.out >/dev/null 2>&1; then
982 t=`sed s/tcl_dir=// conftest.out`
985 fi # tclsh ran script okay
986 rm -f conftest conftest.out
987 fi # no /usr/lib/tclConfig.sh
991 if test "$with_tcl" != no ; then
992 AC_KRB5_TCL_FIND_CONFIG
993 if test $tcl_lib = no ; then
994 if test "$with_tcl" != try ; then
997 AC_MSG_WARN(Could not find Tcl which is needed for some tests)
1001 # If "yes" or pathname, error out if not found.
1002 if test "$with_tcl" != no -a "$with_tcl" != try ; then
1003 if test "$tcl_header $tcl_lib" != "yes yes" ; then
1004 AC_MSG_ERROR(Could not find Tcl)
1012 AC_DEFUN(WITH_HESIOD,
1013 [AC_ARG_WITH(hesiod, AC_HELP_STRING(--with-hesiod[=path], compile with hesiod support @<:@omitted@:>@),
1014 hesiod=$with_hesiod, with_hesiod=no)
1015 if test "$with_hesiod" != "no"; then
1016 HESIOD_DEFS=-DHESIOD
1017 AC_CHECK_LIB(resolv, res_send, res_lib=-lresolv)
1018 if test "$hesiod" != "yes"; then
1019 HESIOD_LIBS="-L${hesiod}/lib -lhesiod $res_lib"
1021 HESIOD_LIBS="-lhesiod $res_lib"
1027 AC_SUBST(HESIOD_DEFS)
1028 AC_SUBST(HESIOD_LIBS)])
1032 dnl KRB5_BUILD_LIBRARY
1034 dnl Pull in the necessary stuff to create the libraries.
1036 AC_DEFUN(KRB5_BUILD_LIBRARY,
1037 [AC_REQUIRE([KRB5_LIB_AUX])dnl
1038 AC_REQUIRE([AC_PROG_LN_S])dnl
1039 AC_REQUIRE([AC_PROG_RANLIB])dnl
1040 AC_REQUIRE([AC_PROG_ARCHIVE])dnl
1041 AC_REQUIRE([AC_PROG_ARCHIVE_ADD])dnl
1042 AC_REQUIRE([AC_PROG_INSTALL])dnl
1043 AC_CHECK_PROG(AR, ar, ar, false)
1044 if test "$AR" = "false"; then
1045 AC_MSG_ERROR([ar not found in PATH])
1047 AC_CHECK_PROG(PERL, perl, perl, false)
1048 if test "$ac_cv_prog_PERL" = "false"; then
1049 AC_MSG_ERROR(Perl is now required for Kerberos builds.)
1054 AC_SUBST(PLUGINLINK)
1055 AC_SUBST(PLUGININST)
1056 AC_SUBST(KDB5_PLUGIN_DEPLIBS)
1057 AC_SUBST(KDB5_PLUGIN_LIBS)
1058 AC_SUBST(MAKE_SHLIB_COMMAND)
1059 AC_SUBST(SHLIB_RPATH_FLAGS)
1060 AC_SUBST(SHLIB_EXPFLAGS)
1061 AC_SUBST(SHLIB_EXPORT_FILE_DEP)
1062 AC_SUBST(DYNOBJ_EXPDEPS)
1063 AC_SUBST(DYNOBJ_EXPFLAGS)
1064 AC_SUBST(INSTALL_SHLIB)
1071 AC_SUBST(LIBINSTLIST)
1073 AC_SUBST(MAKE_DYNOBJ_COMMAND)
1074 AC_SUBST(UNDEF_CHECK)
1078 dnl KRB5_BUILD_LIBOBJS
1080 dnl Pull in the necessary stuff to build library objects.
1082 AC_DEFUN(KRB5_BUILD_LIBOBJS,
1083 [AC_REQUIRE([KRB5_LIB_AUX])dnl
1089 AC_SUBST(PROFFLAGS)])
1092 dnl KRB5_BUILD_PROGRAM
1094 dnl Set variables to build a program.
1096 AC_DEFUN(KRB5_BUILD_PROGRAM,
1097 [AC_REQUIRE([KRB5_LIB_AUX])dnl
1098 AC_REQUIRE([KRB5_AC_NEED_LIBGEN])dnl
1101 AC_SUBST(RPATH_FLAG)
1102 AC_SUBST(PROG_RPATH_FLAGS)
1103 AC_SUBST(DEPLIBEXT)])
1108 dnl Set up environment for running dynamic executables out of build tree
1110 AC_DEFUN(KRB5_RUN_FLAGS,
1111 [AC_REQUIRE([KRB5_LIB_AUX])dnl
1112 KRB5_RUN_ENV="$RUN_ENV"
1113 KRB5_RUN_VARS="$RUN_VARS"
1114 AC_SUBST(KRB5_RUN_ENV)
1115 AC_SUBST(KRB5_RUN_VARS)])
1120 dnl Parse configure options related to library building.
1122 AC_DEFUN(KRB5_LIB_AUX,
1123 [AC_REQUIRE([KRB5_LIB_PARAMS])dnl
1125 AC_ARG_ENABLE([static],,, [enable_static=no])
1126 AC_ARG_ENABLE([shared],,, [enable_shared=yes])
1128 if test "x$enable_static" = "x$enable_shared"; then
1129 AC_MSG_ERROR([--enable-static must be specified with --disable-shared])
1132 AC_ARG_ENABLE([rpath],
1133 AC_HELP_STRING([--disable-rpath],[suppress run path flags in link lines]),,
1136 if test "x$enable_rpath" != xyes ; then
1137 # Unset the rpath flag values set by shlib.conf
1143 if test "$SHLIBEXT" = ".so-nobuild"; then
1144 AC_MSG_ERROR([Shared libraries are not yet supported on this platform.])
1149 if test "x$enable_static" = xyes; then
1150 AC_MSG_NOTICE([using static libraries])
1151 LIBLIST='lib$(LIBBASE)$(STLIBEXT)'
1152 LIBLINKS='$(TOPLIBD)/lib$(LIBBASE)$(STLIBEXT)'
1153 PLUGIN='libkrb5_$(LIBBASE)$(STLIBEXT)'
1154 PLUGINLINK='$(TOPLIBD)/libkrb5_$(LIBBASE)$(STLIBEXT)'
1155 PLUGININST=install-static
1157 LIBINSTLIST=install-static
1159 AC_DEFINE([STATIC_PLUGINS], 1, [Define for static plugin linkage])
1161 KDB5_PLUGIN_DEPLIBS='$(TOPLIBD)/libkrb5_db2$(DEPLIBEXT)'
1162 KDB5_PLUGIN_LIBS='-lkrb5_db2'
1163 if test "x$OPENLDAP_PLUGIN" = xyes; then
1164 KDB5_PLUGIN_DEBLIBS=$KDB5_PLUGIN_DEPLIBS' $(TOPLIBD)/libkrb5_ldap$(DEPLIBEXT) $(TOPLIBD)/libkdb_ldap$(DEPLIBEXT)'
1165 KDB5_PLUGIN_LIBS=$KDB5_PLUGIN_LIBS' -lkrb5_kldap -lkdb_ldap $(LDAP_LIBS)'
1167 # kadm5srv_mit normally comes before kdb on the link line. Add it
1168 # again after the KDB plugins, since they depend on it for XDR stuff.
1169 KDB5_PLUGIN_DEPLIBS=$KDB5_PLUGIN_DEPLIBS' $(TOPLIBD)/libkadm5srv_mit$(DEPLIBEXT)'
1170 KDB5_PLUGIN_LIBS=$KDB5_PLUGIN_LIBS' -lkadm5srv_mit'
1172 # avoid duplicate rules generation for AIX and such
1173 SHLIBEXT=.so-nobuild
1174 SHLIBVEXT=.so.v-nobuild
1175 SHLIBSEXT=.so.s-nobuild
1177 AC_MSG_NOTICE([using shared libraries])
1179 # Clear some stuff in case of AIX, etc.
1180 if test "$STLIBEXT" = "$SHLIBEXT" ; then
1183 case "$SHLIBSEXT" in
1185 LIBLIST='lib$(LIBBASE)$(SHLIBEXT)'
1186 LIBLINKS='$(TOPLIBD)/lib$(LIBBASE)$(SHLIBEXT) $(TOPLIBD)/lib$(LIBBASE)$(SHLIBVEXT)'
1187 LIBINSTLIST="install-shared"
1190 LIBLIST='lib$(LIBBASE)$(SHLIBEXT) lib$(LIBBASE)$(SHLIBSEXT)'
1191 LIBLINKS='$(TOPLIBD)/lib$(LIBBASE)$(SHLIBEXT) $(TOPLIBD)/lib$(LIBBASE)$(SHLIBVEXT) $(TOPLIBD)/lib$(LIBBASE)$(SHLIBSEXT)'
1192 LIBINSTLIST="install-shlib-soname"
1196 PLUGIN='$(LIBBASE)$(DYNOBJEXT)'
1197 PLUGINLINK='../$(PLUGIN)'
1198 PLUGININST=install-plugin
1199 KDB5_PLUGIN_DEPLIBS=
1202 CC_LINK="$CC_LINK_SHARED"
1203 CXX_LINK="$CXX_LINK_SHARED"
1205 if test -z "$LIBLIST"; then
1206 AC_MSG_ERROR([must enable one of shared or static libraries])
1209 # Check whether to build profiled libraries.
1210 AC_ARG_ENABLE([profiled],
1211 dnl [ --enable-profiled build profiled libraries @<:@disabled@:>@]
1213 [if test "$enableval" = yes; then
1214 AC_MSG_ERROR([Sorry, profiled libraries do not work in this release.])
1220 dnl Determine parameters related to libraries, e.g. various extensions.
1222 AC_DEFUN(KRB5_LIB_PARAMS,
1223 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
1225 AC_SUBST(krb5_cv_host)
1226 AC_REQUIRE([AC_PROG_CC])dnl
1227 AC_REQUIRE([V5_SET_TOPDIR])dnl
1228 . $ac_topdir/config/shlib.conf])
1230 dnl The following was written by jhawk@mit.edu
1232 dnl AC_LIBRARY_NET: Id: net.m4,v 1.4 1997/10/25 20:49:53 jhawk Exp
1234 dnl This test is for network applications that need socket() and
1235 dnl gethostbyname() -ish functions. Under Solaris, those applications need to
1236 dnl link with "-lsocket -lnsl". Under IRIX, they should *not* link with
1237 dnl "-lsocket" because libsocket.a breaks a number of things (for instance:
1238 dnl gethostbyname() under IRIX 5.2, and snoop sockets under most versions of
1241 dnl Unfortunately, many application developers are not aware of this, and
1242 dnl mistakenly write tests that cause -lsocket to be used under IRIX. It is
1243 dnl also easy to write tests that cause -lnsl to be used under operating
1244 dnl systems where neither are necessary (or useful), such as SunOS 4.1.4, which
1245 dnl uses -lnsl for TLI.
1247 dnl This test exists so that every application developer does not test this in
1248 dnl a different, and subtly broken fashion.
1250 dnl It has been argued that this test should be broken up into two seperate
1251 dnl tests, one for the resolver libraries, and one for the libraries necessary
1252 dnl for using Sockets API. Unfortunately, the two are carefully intertwined and
1253 dnl allowing the autoconf user to use them independantly potentially results in
1254 dnl unfortunate ordering dependancies -- as such, such component macros would
1255 dnl have to carefully use indirection and be aware if the other components were
1256 dnl executed. Since other autoconf macros do not go to this trouble, and almost
1257 dnl no applications use sockets without the resolver, this complexity has not
1258 dnl been implemented.
1260 dnl The check for libresolv is in case you are attempting to link statically
1261 dnl and happen to have a libresolv.a lying around (and no libnsl.a).
1263 AC_DEFUN(AC_LIBRARY_NET, [
1264 # Most operating systems have gethostbyname() in the default searched
1265 # libraries (i.e. libc):
1266 AC_CHECK_FUNC(gethostbyname, , [
1267 # Some OSes (eg. Solaris) place it in libnsl:
1268 AC_CHECK_LIB(nsl, gethostbyname, , [
1269 # Some strange OSes (SINIX) have it in libsocket:
1270 AC_CHECK_LIB(socket, gethostbyname, , [
1271 # Unfortunately libsocket sometimes depends on libnsl.
1272 # AC_CHECK_LIB's API is essentially broken so the following
1273 # ugliness is necessary:
1274 AC_CHECK_LIB(socket, gethostbyname,
1275 LIBS="-lsocket -lnsl $LIBS",
1276 [AC_CHECK_LIB(resolv, gethostbyname,
1277 LIBS="-lresolv $LIBS" )],
1282 AC_CHECK_FUNC(socket, , AC_CHECK_LIB(socket, socket, ,
1283 AC_CHECK_LIB(socket, socket, LIBS="-lsocket -lnsl $LIBS", , -lnsl)))
1285 if test "$enable_dns" = yes ; then
1286 # We assume that if libresolv exists we can link against it.
1287 # This may get us a gethostby* that doesn't respect nsswitch.
1288 AC_CHECK_LIB(resolv, main)
1290 _KRB5_AC_CHECK_RES_FUNCS(res_ninit res_nclose res_ndestroy res_nsearch dnl
1291 ns_initparse ns_name_uncompress dn_skipname res_search)
1292 if test $krb5_cv_func_res_nsearch = no \
1293 && test $krb5_cv_func_res_search = no; then
1294 # Attempt to link with res_search(), in case it's not prototyped.
1295 AC_CHECK_FUNC(res_search,
1296 [AC_DEFINE(HAVE_RES_SEARCH, 1,
1297 [Define to 1 if you have the `res_search' function])],
1298 [AC_ERROR([cannot find res_nsearch or res_search])])
1302 AC_DEFUN([_KRB5_AC_CHECK_RES_FUNCS],
1303 [AC_FOREACH([AC_Func], [$1],
1304 [AH_TEMPLATE(AS_TR_CPP(HAVE_[]AC_Func),
1305 [Define to 1 if you have the `]AC_Func[' function.])])dnl
1306 for krb5_func in $1; do
1307 _KRB5_AC_CHECK_RES_FUNC($krb5_func)
1310 AC_DEFUN([_KRB5_AC_CHECK_RES_FUNC], [
1311 # Solaris 9 prototypes ns_name_uncompress() in arpa/nameser.h, but
1312 # doesn't export it from libresolv.so, so we use extreme paranoia here
1313 # and check both for the declaration and that we can link against the
1315 AC_CACHE_CHECK([for $1], [krb5_cv_func_$1], [AC_TRY_LINK(
1316 [#include <sys/types.h>
1317 #include <netinet/in.h>
1318 #include <arpa/nameser.h>
1319 @%:@include <resolv.h>],
1321 * Use volatile, or else optimization can cause false positives.
1323 void (* volatile p)() = (void (*)())$1;],
1324 [AS_VAR_SET(krb5_cv_func_$1, yes)],
1325 [AS_VAR_SET(krb5_cv_func_$1, no)])])
1326 AS_IF([test AS_VAR_GET(krb5_cv_func_$1) = yes],
1327 [AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_$1]), 1,
1328 [Define to 1 if you have the `$1' function])])[]dnl
1332 dnl KRB5_AC_ENABLE_DNS
1334 AC_DEFUN(KRB5_AC_ENABLE_DNS, [
1336 AC_ARG_ENABLE([dns-for-realm],
1337 [ --enable-dns-for-realm enable DNS lookups of Kerberos realm names], ,
1338 [enable_dns_for_realm=no])
1339 if test "$enable_dns_for_realm" = yes; then
1340 AC_DEFINE(KRB5_DNS_LOOKUP_REALM,1,[Define to enable DNS lookups of Kerberos realm names])
1343 AC_DEFINE(KRB5_DNS_LOOKUP, 1,[Define for DNS support of locating realms and KDCs])
1348 dnl Check if we need the prototype for a function - we give it a bogus
1349 dnl prototype and if it complains - then a valid prototype exists on the
1352 dnl KRB5_NEED_PROTO(includes, function, [bypass])
1353 dnl if $3 set, don't see if library defined.
1354 dnl Useful for case where we will define in libkrb5 the function if need be
1355 dnl but want to know if a prototype exists in either case on system.
1357 AC_DEFUN([KRB5_NEED_PROTO], [
1358 ifelse([$3], ,[if test "x$ac_cv_func_$2" = xyes; then])
1359 AC_CACHE_CHECK([if $2 needs a prototype provided], krb5_cv_func_$2_noproto,
1360 AC_TRY_COMPILE([$1],
1362 struct k5foo {int foo; } xx;
1363 extern int $2 (struct k5foo*);
1366 krb5_cv_func_$2_noproto=yes,krb5_cv_func_$2_noproto=no))
1367 if test $krb5_cv_func_$2_noproto = yes; then
1368 AC_DEFINE([NEED_]translit($2, [a-z], [A-Z])[_PROTO], 1, dnl
1369 [define if the system header files are missing prototype for $2()])
1374 dnl =============================================================
1375 dnl Internal function for testing for getpeername prototype
1377 AC_DEFUN([KRB5_GETPEERNAME_ARGS],[
1378 AC_DEFINE([GETPEERNAME_ARG3_TYPE],GETSOCKNAME_ARG3_TYPE,[Type of getpeername second argument.])
1381 dnl =============================================================
1382 dnl Internal function for testing for getsockname arguments
1384 AC_DEFUN([TRY_GETSOCK_INT],[
1385 krb5_lib_var=`echo "$1 $2" | sed 'y% ./+-*%___p_p%'`
1386 AC_MSG_CHECKING([if getsockname() takes arguments $1 and $2])
1387 AC_CACHE_VAL(krb5_cv_getsockname_proto_$krb5_lib_var,
1389 AC_TRY_COMPILE([#include <sys/types.h>
1390 #include <sys/socket.h>
1391 extern int getsockname(int, $1, $2);
1392 ],,eval "krb5_cv_getsockname_proto_$krb5_lib_var=yes",
1393 eval "krb5_cv_getsockname_proto_$krb5_lib_var=no")])
1394 if eval "test \"`echo '$krb5_cv_getsockname_proto_'$krb5_lib_var`\" = yes"; then
1396 sock_set=yes; res1="$1"; res2="$2"
1402 dnl Determines the types of the second and third arguments to getsockname().
1404 AC_DEFUN([KRB5_GETSOCKNAME_ARGS],[
1406 for sock_arg1 in "struct sockaddr *" "void *"
1408 for sock_arg2 in "size_t *" "int *" "socklen_t *"
1410 if test $sock_set = no; then
1411 TRY_GETSOCK_INT($sock_arg1, $sock_arg2)
1415 if test "$sock_set" = no; then
1416 AC_MSG_NOTICE(assuming struct sockaddr and socklen_t for getsockname args)
1417 res1="struct sockaddr *"
1420 res1=`echo "$res1" | tr -d '*' | sed -e 's/ *$//'`
1421 res2=`echo "$res2" | tr -d '*' | sed -e 's/ *$//'`
1422 AC_DEFINE_UNQUOTED([GETSOCKNAME_ARG3_TYPE],$res2,[Type of pointer target for argument 3 to getsockname])
1426 AC_DEFUN([KRB5_AC_CHOOSE_ET],[
1427 AC_ARG_WITH([system-et],
1428 AC_HELP_STRING(--with-system-et,use system compile_et and -lcom_err @<:@default: build and install a local version@:>@))
1429 AC_MSG_CHECKING(which version of com_err to use)
1430 if test "x$with_system_et" = xyes ; then
1431 # This will be changed to "intlsys" if textdomain support is present.
1433 AC_MSG_RESULT(system)
1438 if test $COM_ERR_VERSION = sys; then
1439 # check for various functions we need
1440 AC_CHECK_LIB(com_err, add_error_table, :, AC_MSG_ERROR(cannot find add_error_table in com_err library))
1441 AC_CHECK_LIB(com_err, remove_error_table, :, AC_MSG_ERROR(cannot find remove_error_table in com_err library))
1442 # make sure compile_et provides "et_foo" name
1443 cat >> conf$$e.et <<EOF
1445 error_code ERR_FOO, "foo"
1448 AC_CHECK_PROGS(compile_et,compile_et,false)
1449 if test "$compile_et" = false; then
1450 AC_MSG_ERROR(cannot find compile_et)
1452 AC_CACHE_CHECK(whether compile_et is useful,krb5_cv_compile_et_useful,[
1453 if compile_et conf$$e.et >/dev/null 2>&1 ; then true ; else
1454 AC_MSG_ERROR(execution failed)
1456 AC_TRY_COMPILE([#include "conf$$e.h"
1457 ],[ &et_foo_error_table; ],:,
1458 [AC_MSG_ERROR(cannot use et_foo_error_table)])
1459 # Anything else we need to test for?
1460 rm -f conf$$e.c conf$$e.h
1461 krb5_cv_compile_et_useful=yes
1463 AC_CACHE_CHECK(whether compile_et supports --textdomain,
1464 krb5_cv_compile_et_textdomain,[
1465 krb5_cv_compile_et_textdomain=no
1466 if compile_et --textdomain=xyzw conf$$e.et >/dev/null 2>&1 ; then
1467 if grep -q xyzw conf$$e.c; then
1468 krb5_cv_compile_et_textdomain=yes
1471 rm -f conf$$e.c conf$$e.h
1473 if test "$krb5_cv_compile_et_textdomain" = yes; then
1474 COM_ERR_VERSION=intlsys
1478 AC_SUBST(COM_ERR_VERSION)
1479 if test "$COM_ERR_VERSION" = k5 -o "$COM_ERR_VERSION" = intlsys; then
1480 AC_DEFINE(HAVE_COM_ERR_INTL,1,
1481 [Define if com_err has compatible gettext support])
1484 AC_DEFUN([KRB5_AC_CHOOSE_SS],[
1485 AC_ARG_WITH(system-ss,
1486 AC_HELP_STRING(--with-system-ss,use system -lss and mk_cmds @<:@private version@:>@))
1487 AC_ARG_VAR(SS_LIB,[system libraries for 'ss' package [-lss]])
1488 AC_MSG_CHECKING(which version of subsystem package to use)
1489 if test "x$with_system_ss" = xyes ; then
1491 AC_MSG_RESULT(system)
1492 # todo: check for various libraries we might need
1493 # in the meantime...
1494 test "x${SS_LIB+set}" = xset || SS_LIB=-lss
1496 LIBS="$LIBS $SS_LIB"
1497 AC_CACHE_CHECK(whether system ss package works, krb5_cv_system_ss_okay,[
1500 int main(int argc, char *argv[]) {
1503 i = ss_create_invocation("foo","foo","",0,&err);
1507 }], krb5_cv_system_ss_okay=yes, AC_MSG_ERROR(cannot run test program),
1508 krb5_cv_system_ss_okay="assumed")])
1510 KRB5_NEED_PROTO([#include <ss/ss.h>],ss_execute_command,1)
1516 AC_SUBST(SS_VERSION)
1519 AC_DEFUN([KRB5_AC_CHOOSE_DB],[
1520 AC_ARG_WITH(system-db,
1521 AC_HELP_STRING(--with-system-db,use system Berkeley db @<:@private version@:>@))
1522 AC_ARG_VAR(DB_HEADER,[header file for system Berkeley db package [db.h]])
1523 AC_ARG_VAR(DB_LIB,[library for system Berkeley db package [-ldb]])
1524 if test "x$with_system_db" = xyes ; then
1526 # TODO: Do we have specific routines we should check for?
1527 # How about known, easily recognizable bugs?
1528 # We want to use bt_rseq in some cases, but no other version but
1529 # ours has it right now.
1531 # Okay, check the variables.
1532 test "x${DB_HEADER+set}" = xset || DB_HEADER=db.h
1533 test "x${DB_LIB+set}" = xset || DB_LIB=-ldb
1535 if test "x${DB_HEADER}" = xdb.h ; then
1536 DB_HEADER_VERSION=sys
1538 DB_HEADER_VERSION=redirect
1540 KDB5_DB_LIB="$DB_LIB"
1543 AC_DEFINE(HAVE_BT_RSEQ,1,[Define if bt_rseq is available, for recursive btree traversal.])
1545 DB_HEADER_VERSION=k5
1546 # libdb gets sucked into libkdb
1548 # needed for a couple of things that need libdb for its own sake
1551 AC_SUBST(DB_VERSION)
1553 AC_SUBST(DB_HEADER_VERSION)
1555 AC_SUBST(KDB5_DB_LIB)
1558 dnl KRB5_AC_PRIOCNTL_HACK
1561 AC_DEFUN([KRB5_AC_PRIOCNTL_HACK],
1562 [AC_REQUIRE([AC_PROG_AWK])dnl
1563 AC_REQUIRE([AC_LANG_COMPILER_REQUIRE])dnl
1564 AC_CACHE_CHECK([whether to use priocntl hack], [krb5_cv_priocntl_hack],
1565 [case $krb5_cv_host in
1567 if test "$cross_compiling" = yes; then
1568 krb5_cv_priocntl_hack=yes
1570 # Solaris patch 117171-11 (sparc) or 117172-11 (x86)
1571 # fixes the Solaris 9 bug where final pty output
1572 # gets lost on close.
1573 if showrev -p | $AWK 'BEGIN { e = 1 }
1574 /Patch: 11717[[12]]/ { x = index[]([$]2, "-");
1575 if (substr[]([$]2, x + 1, length([$]2) - x) >= 11)
1576 { e = 0 } else { e = 1 } }
1577 END { exit e; }'; then
1578 krb5_cv_priocntl_hack=no
1580 krb5_cv_priocntl_hack=yes
1585 krb5_cv_priocntl_hack=no
1588 if test "$krb5_cv_priocntl_hack" = yes; then
1593 AC_SUBST(PRIOCNTL_HACK)])
1596 dnl KRB5_AC_GCC_ATTRS
1597 AC_DEFUN([KRB5_AC_GCC_ATTRS],
1598 [AC_CACHE_CHECK([for constructor/destructor attribute support],krb5_cv_attr_constructor_destructor,
1599 [rm -f conftest.1 conftest.2
1600 if test -r conftest.1 || test -r conftest.2 ; then
1601 AC_MSG_ERROR(write error in local file system?)
1605 if test -r conftest.1 && test -r conftest.2 ; then true ; else
1606 AC_MSG_ERROR(write error in local file system?)
1610 # blindly assume we have 'unlink'...
1611 AC_TRY_RUN([void foo1() __attribute__((constructor));
1612 void foo1() { unlink("conftest.1"); }
1613 void foo2() __attribute__((destructor));
1614 void foo2() { unlink("conftest.2"); }
1615 int main () { return 0; }],
1616 [test -r conftest.1 || a=yes
1617 test -r conftest.2 || b=yes], , AC_MSG_ERROR(Cannot test for constructor/destructor support when cross compiling))
1618 case $krb5_cv_host in
1620 # Under AIX 4.3.3, at least, shared library destructor functions
1621 # appear to get executed in reverse link order (right to left),
1622 # so that a library's destructor function may run after that of
1623 # libraries it depends on, and may still have to access in the
1626 # That counts as "not working", for me, but it's a much more
1627 # complicated test case to set up.
1631 krb5_cv_attr_constructor_destructor="$a,$b"
1633 # Okay, krb5_cv_... should be set now.
1634 case $krb5_cv_attr_constructor_destructor in
1636 AC_DEFINE(CONSTRUCTOR_ATTR_WORKS,1,[Define if __attribute__((constructor)) works]) ;;
1638 case $krb5_cv_attr_constructor_destructor in
1640 AC_DEFINE(DESTRUCTOR_ATTR_WORKS,1,[Define if __attribute__((destructor)) works]) ;;
1642 dnl End of attributes we care about right now.
1646 dnl KRB5_AC_PRAGMA_WEAK_REF
1647 AC_DEFUN([KRB5_AC_PRAGMA_WEAK_REF],
1648 [AC_CACHE_CHECK([whether pragma weak references are supported],
1649 krb5_cv_pragma_weak_ref,
1650 [AC_TRY_LINK([#pragma weak flurbl
1651 extern int flurbl(void);],[if (&flurbl != 0) return flurbl();],
1652 krb5_cv_pragma_weak_ref=yes,krb5_cv_pragma_weak_ref=no)])
1653 if test $krb5_cv_pragma_weak_ref = yes ; then
1654 AC_DEFINE(HAVE_PRAGMA_WEAK_REF,1,[Define if #pragma weak references work])
1658 m4_include(config/ac-archive/ax_pthread.m4)
1659 m4_include(config/ac-archive/ax_recursive_eval.m4)
1660 m4_include(config/pkg.m4)
1664 dnl --with-ldap=value
1666 AC_DEFUN(WITH_LDAP,[
1668 [ --with-ldap compile OpenLDAP database backend module],
1670 OPENLDAP) with_ldap=yes ;;
1672 *) AC_MSG_ERROR(Invalid option value --with-ldap="$withval") ;;
1673 esac], with_ldap=no)dnl
1675 if test "$with_ldap" = yes; then
1676 AC_MSG_NOTICE(enabling OpenLDAP database backend module support)
1681 dnl If libkeyutils exists (on Linux) include it and use keyring ccache
1682 AC_DEFUN(KRB5_AC_KEYRING_CCACHE,[
1683 AC_CHECK_HEADERS([keyutils.h],
1684 AC_CHECK_LIB(keyutils, add_key,
1685 [dnl Pre-reqs were found
1686 AC_DEFINE(USE_KEYRING_CCACHE, 1, [Define if the keyring ccache should be enabled])
1687 LIBS="-lkeyutils $LIBS"
1691 dnl If libkeyutils supports persistent keyrings, use them
1692 AC_DEFUN(KRB5_AC_PERSISTENT_KEYRING,[
1693 AC_CHECK_HEADERS([keyutils.h],
1694 AC_CHECK_LIB(keyutils, keyctl_get_persistent,
1695 [AC_DEFINE(HAVE_PERSISTENT_KEYRING, 1,
1696 [Define if persistent keyrings are supported])