2 AC_COPYRIGHT([Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
3 Massachusetts Institute of Technology.
6 dnl Figure out the top of the source and build trees. We depend on localdir
7 dnl being a relative pathname; we could make it general later, but for now
8 dnl this is good enough.
10 dnl esyscmd([test -r aclocal.m4 && echo YES])
11 define([fileexists],[dnl
12 pushdef([x],esyscmd([if test -r $1; then echo YES;else echo NO; fi]))dnl
13 dnl Strip out newline.
16 ],[NO],UNKNOWN)[]popdef([x])])
17 define([K5_TOPDIR],dnl
18 ifelse(fileexists(./aclocal.m4),YES,[.],[dnl
19 ifelse(fileexists(../aclocal.m4),YES,[..],[dnl
20 ifelse(fileexists(../../aclocal.m4),YES,[../..],[dnl
21 ifelse(fileexists(../../../aclocal.m4),YES,[../../..],[dnl
22 ifelse(fileexists(../../../../aclocal.m4),YES,[../../../..],[dnl
23 errprint(__file__:__line__: Cannot find path to aclocal.m4[
24 ]) m4exit(1) dnl sometimes that does not work?
25 builtin(m4exit,1)UNKNOWN])])])])]))
27 AC_DEFUN(V5_SET_TOPDIR,[dnl
28 ac_reltopdir="K5_TOPDIR"
29 if test ! -r "$srcdir/K5_TOPDIR/aclocal.m4"; then
30 AC_MSG_ERROR([Configure could not determine the relative topdir])
32 ac_topdir=$srcdir/$ac_reltopdir
33 ac_config_fragdir=$ac_reltopdir/config
34 # 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]])
81 dnl allow stuff in tree to access deprecated/private stuff for now
82 dnl AC_DEFINE([KRB5_PRIVATE], 1, [Define only if building in-tree])
83 dnl AC_DEFINE([KRB5_DEPRECATED], 1, [Define only if building in-tree])
87 KRB5_AC_MAINTAINER_MODE dnl
90 dnl This identifies the top of the source tree relative to the directory
91 dnl in which the configure file lives.
93 CONFIG_RELTOPDIR=$ac_reltopdir
94 AC_SUBST(CONFIG_RELTOPDIR)
96 lib_frag=$srcdir/$ac_config_fragdir/lib.in
97 AC_SUBST_FILE(lib_frag)
98 libobj_frag=$srcdir/$ac_config_fragdir/libobj.in
99 AC_SUBST_FILE(libobj_frag)
100 libnover_frag=$srcdir/$ac_config_fragdir/libnover.in
101 AC_SUBST_FILE(libnover_frag)
103 KRB5_AC_PRAGMA_WEAK_REF
106 KRB5_AC_ENABLE_THREADS
110 dnl Maintainer mode, akin to what automake provides, 'cept we don't
111 dnl want to use automake right now.
112 AC_DEFUN([KRB5_AC_MAINTAINER_MODE],
113 [AC_ARG_ENABLE([maintainer-mode],
114 AC_HELP_STRING([--enable-maintainer-mode],[enable rebuilding of source files, Makefiles, etc]),
115 USE_MAINTAINER_MODE=$enableval,
116 USE_MAINTAINER_MODE=no)
117 if test "$USE_MAINTAINER_MODE" = yes; then
118 MAINTAINER_MODE_TRUE=
119 MAINTAINER_MODE_FALSE='#'
120 AC_MSG_NOTICE(enabling maintainer mode)
122 MAINTAINER_MODE_TRUE='#'
123 MAINTAINER_MODE_FALSE=
125 MAINT=$MAINTAINER_MODE_TRUE
126 AC_SUBST(MAINTAINER_MODE_TRUE)
127 AC_SUBST(MAINTAINER_MODE_FALSE)
132 AC_DEFUN([KRB5_AC_INITFINI],[
133 dnl Do we want initialization at load time?
134 AC_ARG_ENABLE([delayed-initialization],
135 AC_HELP_STRING([--disable-delayed-initialization],initialize library code when loaded @<:@delay until first use@:>@), , enable_delayed_initialization=yes)
136 case "$enable_delayed_initialization" in
138 AC_DEFINE(DELAY_INITIALIZER,1,[Define if library initialization should be delayed until first use]) ;;
140 *) AC_MSG_ERROR(invalid option $enable_delayed_initialization for delayed-initialization) ;;
142 dnl We always want finalization at unload time.
144 dnl Can we do things through gcc?
146 dnl How about with the linker?
147 if test -z "$use_linker_init_option" ; then
148 AC_MSG_ERROR(ran INITFINI before checking shlib.conf?)
150 if test "$use_linker_init_option" = yes; then
151 AC_DEFINE(USE_LINKER_INIT_OPTION,1,[Define if link-time options for library initialization will be used])
153 if test "$use_linker_fini_option" = yes; then
154 AC_DEFINE(USE_LINKER_FINI_OPTION,1,[Define if link-time options for library finalization will be used])
159 AC_DEFUN([KRB5_AC_FIND_DLOPEN],[
160 AC_CHECK_LIB(dl, dlopen,[DL_LIB=-ldl
161 AC_DEFINE(USE_DLOPEN,1,[Define if dlopen should be used])])
162 dnl AC_CHECK_LIB(ld, main, DL_LIB=-lld)
168 AC_DEFUN([KRB5_AC_ENABLE_THREADS],[
169 AC_ARG_ENABLE([thread-support],
170 AC_HELP_STRING([--disable-thread-support],don't enable thread support @<:@enabled@:>@), , enable_thread_support=yes)
171 if test "$enable_thread_support" = yes ; then
172 AC_MSG_NOTICE(enabling thread support)
173 AC_DEFINE(ENABLE_THREADS,1,[Define if thread support enabled])
175 dnl Maybe this should be inside the conditional above? Doesn't cache....
176 if test "$enable_thread_support" = yes; then
177 ACX_PTHREAD(,[AC_MSG_ERROR([cannot determine options for enabling thread support; try --disable-thread-support])])
178 AC_MSG_NOTICE(PTHREAD_CC = $PTHREAD_CC)
179 AC_MSG_NOTICE(PTHREAD_CFLAGS = $PTHREAD_CFLAGS)
180 AC_MSG_NOTICE(PTHREAD_LIBS = $PTHREAD_LIBS)
181 dnl Not really needed -- if pthread.h isn't found, ACX_PTHREAD will fail.
182 dnl AC_CHECK_HEADERS(pthread.h)
183 # AIX and Tru64 don't support weak references, and don't have
184 # stub versions of the pthread code in libc.
187 # On these platforms, we'll always pull in the thread support.
188 LIBS="$LIBS $PTHREAD_LIBS"
189 CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
190 # We don't need to sometimes add the flags we've just folded in...
195 # These are the flags that "gcc -pthread" adds. But we don't
196 # want "-pthread" because that has link-time effects, and we
197 # don't exclude CFLAGS when linking. *sigh*
198 PTHREAD_CFLAGS="-D_REENTRANT -D_THREAD_SAFE -D_POSIX_C_SOURCE=199506L"
201 # On Solaris 10 with gcc 3.4.3, the autoconf archive macro doesn't
202 # get the right result.
203 if test "$GCC" = yes ; then
204 PTHREAD_CFLAGS="-D_REENTRANT -pthreads"
215 AC_SUBST(THREAD_SUPPORT)
216 dnl We want to know where these routines live, so on systems with weak
217 dnl reference support we can figure out whether or not the pthread library
218 dnl has been linked in.
219 dnl If we don't add any libraries for thread support, don't bother.
220 AC_CHECK_FUNCS(pthread_once pthread_rwlock_init)
222 test "$PTHREAD_CC" != "" && test "$ac_cv_c_compiler_gnu" = no && CC=$PTHREAD_CC
224 # On Solaris, -pthreads is added to CFLAGS, no extra explicit libraries.
225 CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
226 AC_SUBST(PTHREAD_CFLAGS)
228 LIBS="$PTHREAD_LIBS $LIBS"
229 AC_MSG_NOTICE(rechecking with PTHREAD_... options)
230 AC_CHECK_LIB(c, pthread_rwlock_init,
231 [AC_DEFINE(HAVE_PTHREAD_RWLOCK_INIT_IN_THREAD_LIB,1,[Define if pthread_rwlock_init is provided in the thread library.])])
237 dnl This is somewhat gross and should go away when the build system
238 dnl is revamped. -- tlyu
239 dnl DECLARE_SYS_ERRLIST - check for sys_errlist in libc
241 AC_DEFUN([DECLARE_SYS_ERRLIST],
242 [AC_CACHE_CHECK([for sys_errlist declaration], krb5_cv_decl_sys_errlist,
243 [AC_TRY_COMPILE([#include <stdio.h>
244 #include <errno.h>], [1+sys_nerr;],
245 krb5_cv_decl_sys_errlist=yes, krb5_cv_decl_sys_errlist=no)])
246 # assume sys_nerr won't be declared w/o being in libc
247 if test $krb5_cv_decl_sys_errlist = yes; then
248 AC_DEFINE(SYS_ERRLIST_DECLARED,1,[Define if sys_errlist is defined in errno.h])
249 AC_DEFINE(HAVE_SYS_ERRLIST,1,[Define if sys_errlist in libc])
251 # This means that sys_errlist is not declared in errno.h, but may still
253 AC_CACHE_CHECK([for sys_errlist in libc], krb5_cv_var_sys_errlist,
254 [AC_TRY_LINK([extern int sys_nerr;], [if (1+sys_nerr < 0) return 1;],
255 krb5_cv_var_sys_errlist=yes, krb5_cv_var_sys_errlist=no;)])
256 if test $krb5_cv_var_sys_errlist = yes; then
257 AC_DEFINE(HAVE_SYS_ERRLIST,1,[Define if sys_errlist in libc])
258 # Do this cruft for backwards compatibility for now.
259 AC_DEFINE(NEED_SYS_ERRLIST,1,[Define if need to declare sys_errlist])
261 AC_MSG_WARN([sys_errlist is neither in errno.h nor in libc])
266 dnl check for sigmask/sigprocmask -- CHECK_SIGPROCMASK
268 AC_DEFUN(CHECK_SIGPROCMASK,[
269 AC_MSG_CHECKING([for use of sigprocmask])
270 AC_CACHE_VAL(krb5_cv_func_sigprocmask_use,
271 [AC_TRY_LINK([#include <signal.h>], [sigprocmask(SIG_SETMASK,0,0);],
272 krb5_cv_func_sigprocmask_use=yes,
273 AC_TRY_LINK([#include <signal.h>], [sigmask(1);],
274 krb5_cv_func_sigprocmask_use=no, krb5_cv_func_sigprocmask_use=yes))])
275 AC_MSG_RESULT($krb5_cv_func_sigprocmask_use)
276 if test $krb5_cv_func_sigprocmask_use = yes; then
277 AC_DEFINE(USE_SIGPROCMASK,1,[Define if sigprocmask should be used])
281 AC_DEFUN(AC_PROG_ARCHIVE, [AC_CHECK_PROG(ARCHIVE, ar, ar cqv, false)])dnl
282 AC_DEFUN(AC_PROG_ARCHIVE_ADD, [AC_CHECK_PROG(ARADD, ar, ar cruv, false)])dnl
284 dnl check for <dirent.h> -- CHECK_DIRENT
285 dnl (may need to be more complex later)
287 AC_DEFUN(CHECK_DIRENT,[
288 AC_CHECK_HEADER(dirent.h,AC_DEFINE(USE_DIRENT_H,1,[Define if you have dirent.h functionality]))])dnl
290 dnl check if union wait is defined, or if WAIT_USES_INT -- CHECK_WAIT_TYPE
292 AC_DEFUN(CHECK_WAIT_TYPE,[
293 AC_MSG_CHECKING([if argument to wait is int *])
294 AC_CACHE_VAL(krb5_cv_struct_wait,
295 dnl Test for prototype clash - if there is none - then assume int * works
296 [AC_TRY_COMPILE([#include <sys/types.h>
297 #include <sys/wait.h>
298 extern pid_t wait(int *);],[], krb5_cv_struct_wait=no,dnl
299 dnl Else fallback on old stuff
301 [#include <sys/wait.h>], [union wait i;
306 krb5_cv_struct_wait=yes, krb5_cv_struct_wait=no)])])
307 AC_MSG_RESULT($krb5_cv_struct_wait)
308 if test $krb5_cv_struct_wait = no; then
309 AC_DEFINE(WAIT_USES_INT,1,[Define if wait takes int as a argument])
313 dnl check for POSIX signal handling -- CHECK_SIGNALS
315 AC_DEFUN(CHECK_SIGNALS,[
316 AC_CHECK_FUNC(sigprocmask,
317 AC_MSG_CHECKING(for sigset_t and POSIX_SIGNALS)
318 AC_CACHE_VAL(krb5_cv_type_sigset_t,
320 [#include <signal.h>],
322 krb5_cv_type_sigset_t=yes, krb5_cv_type_sigset_t=no)])
323 AC_MSG_RESULT($krb5_cv_type_sigset_t)
324 if test $krb5_cv_type_sigset_t = yes; then
325 AC_DEFINE(POSIX_SIGNALS,1,[Define if POSIX signal handling is used])
329 dnl check for signal type
331 dnl AC_RETSIGTYPE isn't quite right, but almost.
332 AC_DEFUN(KRB5_SIGTYPE,[
333 AC_MSG_CHECKING([POSIX signal handlers])
334 AC_CACHE_VAL(krb5_cv_has_posix_signals,
336 [#include <sys/types.h>
341 extern void (*signal ()) ();], [],
342 krb5_cv_has_posix_signals=yes, krb5_cv_has_posix_signals=no)])
343 AC_MSG_RESULT($krb5_cv_has_posix_signals)
344 if test $krb5_cv_has_posix_signals = yes; then
346 AC_DEFINE(POSIX_SIGTYPE, 1, [Define if POSIX signal handlers are used])
348 if test $ac_cv_type_signal = void; then
354 AC_DEFINE_UNQUOTED(krb5_sigtype, $stype, [Define krb5_sigtype to type of signal handler])dnl
357 dnl check for POSIX setjmp/longjmp -- CHECK_SETJMP
359 AC_DEFUN(CHECK_SETJMP,[
360 AC_CHECK_FUNC(sigsetjmp,
361 AC_MSG_CHECKING(for sigjmp_buf)
362 AC_CACHE_VAL(krb5_cv_struct_sigjmp_buf,
364 [#include <setjmp.h>],[sigjmp_buf x],
365 krb5_cv_struct_sigjmp_buf=yes,krb5_cv_struct_sigjmp_buf=no)])
366 AC_MSG_RESULT($krb5_cv_struct_sigjmp_buf)
367 if test $krb5_cv_struct_sigjmp_buf = yes; then
368 AC_DEFINE(POSIX_SETJMP,1,[Define if setjmp indicates POSIX interface])
372 dnl Check for IPv6 compile-time support.
374 AC_DEFUN(KRB5_AC_INET6,[
375 AC_CHECK_HEADERS(sys/types.h sys/socket.h netinet/in.h netdb.h)
376 AC_CHECK_FUNCS(inet_ntop inet_pton getnameinfo)
377 dnl getaddrinfo test needs netdb.h, for proper compilation on alpha
378 dnl under OSF/1^H^H^H^H^HDigital^H^H^H^H^H^H^HTru64 UNIX, where it's
380 AC_MSG_CHECKING(for getaddrinfo)
381 AC_CACHE_VAL(ac_cv_func_getaddrinfo,
382 [AC_TRY_LINK([#ifdef HAVE_NETDB_H
386 getaddrinfo("kerberos.mit.edu", "echo", 0, &ai);
387 ], ac_cv_func_getaddrinfo=yes, ac_cv_func_getaddrinfo=no)])
388 AC_MSG_RESULT($ac_cv_func_getaddrinfo)
389 if test $ac_cv_func_getaddrinfo = yes; then
390 AC_DEFINE(HAVE_GETADDRINFO,1,[Define if you have the getaddrinfo function])
393 AC_REQUIRE([KRB5_SOCKADDR_SA_LEN])dnl
394 AC_ARG_ENABLE([ipv6], , AC_MSG_WARN(enable/disable-ipv6 option is deprecated))dnl
398 AC_DEFUN(KRB5_AC_CHECK_TYPE_WITH_HEADERS,[
399 AC_MSG_CHECKING(for type $1)
400 changequote(<<,>>)dnl
401 varname=`echo $1 | sed 's,[ -],_,g'`
403 AC_CACHE_VAL(krb5_cv_$varname,[
404 AC_TRY_COMPILE([$2],[ $1 foo; ], eval krb5_cv_$varname=yes, eval krb5_cv_$varname=no)])
405 eval x="\$krb5_cv_$varname"
407 if eval test "$x" = yes ; then
408 AC_DEFINE_UNQUOTED(HAVE_`echo $varname | tr '[[[a-z]]]' '[[[A-Z]]]'`)
412 AC_DEFUN(KRB5_AC_CHECK_SOCKADDR_STORAGE,[
413 KRB5_AC_CHECK_TYPE_WITH_HEADERS(struct sockaddr_storage, [
414 #ifdef HAVE_SYS_TYPES_H
415 #include <sys/types.h>
417 #include <sys/socket.h>
418 #include <netinet/in.h>
422 AC_DEFUN(KRB5_AC_CHECK_INET6,[
423 AC_REQUIRE([KRB5_AC_CHECK_SOCKADDR_STORAGE])dnl
424 AC_MSG_CHECKING(for IPv6 compile-time support)
425 AC_CACHE_VAL(krb5_cv_inet6,[
426 if test "$ac_cv_func_inet_ntop" != "yes" ; then
430 #ifdef HAVE_SYS_TYPES_H
431 #include <sys/types.h>
433 #include <sys/socket.h>
434 #include <netinet/in.h>
437 struct sockaddr_in6 in;
439 IN6_IS_ADDR_LINKLOCAL (&in.sin6_addr);
440 ],krb5_cv_inet6=yes,krb5_cv_inet6=no)])
442 AC_MSG_RESULT($krb5_cv_inet6)
443 if test "$krb5_cv_inet6" = no && test "$ac_cv_func_inet_ntop" = yes; then
444 AC_MSG_CHECKING(for IPv6 compile-time support with -DINET6)
445 AC_CACHE_VAL(krb5_cv_inet6_with_dinet6,[
449 #ifdef HAVE_SYS_TYPES_H
450 #include <sys/types.h>
452 #include <sys/socket.h>
453 #include <netinet/in.h>
456 struct sockaddr_in6 in;
458 IN6_IS_ADDR_LINKLOCAL (&in.sin6_addr);
459 ],krb5_cv_inet6_with_dinet6=yes,krb5_cv_inet6_with_dinet6=no)
461 AC_MSG_RESULT($krb5_cv_inet6_with_dinet6)
463 if test $krb5_cv_inet6 = yes || test "$krb5_cv_inet6_with_dinet6" = yes; then
464 if test "$krb5_cv_inet6_with_dinet6" = yes; then
465 AC_DEFINE(INET6,1,[May need to be defined to enable IPv6 support, for example on IRIX])
467 AC_DEFINE(KRB5_USE_INET6,1,[Define if we should compile in IPv6 support (even if we can't use it at run time)])
471 dnl Generic File existence tests
473 dnl K5_AC_CHECK_FILE(FILE, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
475 AC_DEFUN(K5_AC_CHECK_FILE,
476 [AC_REQUIRE([AC_PROG_CC])dnl
477 dnl Do the transliteration at runtime so arg 1 can be a shell variable.
478 ac_safe=`echo "$1" | sed 'y%./+-%__p_%'`
479 AC_MSG_CHECKING([for $1])
480 AC_CACHE_VAL(ac_cv_file_$ac_safe,
481 [if test "$cross_compiling" = yes; then
482 errprint(__file__:__line__: warning: Cannot check for file existence when cross compiling
484 AC_MSG_ERROR(Cannot check for file existence when cross compiling)
487 eval "ac_cv_file_$ac_safe=yes"
489 eval "ac_cv_file_$ac_safe=no"
492 if eval "test \"`echo '$ac_cv_file_'$ac_safe`\" = yes"; then
494 ifelse([$2], , :, [$2])
502 dnl K5_AC_CHECK_FILES(FILE... [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
504 AC_DEFUN(K5_AC_CHECK_FILES,
505 [AC_REQUIRE([AC_PROG_CC])dnl
508 K5_AC_CHECK_FILE($ac_file,
510 ac_tr_file=HAVE`echo $ac_file | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
512 AC_DEFINE_UNQUOTED($ac_tr_file) $2], $3)dnl
516 dnl set $(KRB4) from --with-krb4=value -- WITH_KRB4
520 [ --without-krb4 don't include Kerberos V4 backwards compatibility
521 --with-krb4 use V4 libraries included with V5 (default)
522 --with-krb4=KRB4DIR use preinstalled V4 libraries],
526 if test $withval = no; then
527 AC_MSG_NOTICE(no krb4 support)
533 krb5_cv_build_krb4_libs=no
536 AC_DEFINE([KRB5_KRB4_COMPAT], 1, [Define this if building with krb4 compat])
537 if test $withval = yes; then
538 AC_MSG_NOTICE(enabling built in krb4 support)
539 KRB4_DEPLIB='$(TOPLIBD)/libkrb4$(DEPLIBEXT)'
541 KRB4_INCLUDES='-I$(SRCTOP)/include/kerberosIV -I$(BUILDTOP)/include/kerberosIV'
543 KRB_ERR_H_DEP='$(BUILDTOP)/include/kerberosIV/krb_err.h'
544 krb5_cv_build_krb4_libs=yes
547 AC_MSG_NOTICE(using preinstalled krb4 in $withval)
549 dnl DEPKRB4_LIB="$withval/lib/libkrb.a"
550 KRB4_INCLUDES="-I$withval/include"
551 KRB4_LIBPATH="-L$withval/lib"
553 krb5_cv_build_krb4_libs=no
554 krb5_cv_krb4_libdir="$withval/lib"
557 AC_SUBST(KRB4_INCLUDES)
558 AC_SUBST(KRB4_LIBPATH)
560 AC_SUBST(KRB4_DEPLIB)
561 AC_SUBST(KRB_ERR_H_DEP)
562 dnl We always compile the des425 library
563 DES425_DEPLIB='$(TOPLIBD)/libdes425$(DEPLIBEXT)'
565 AC_SUBST(DES425_DEPLIB)
570 AC_DEFUN(KRB5_AC_CHECK_FOR_CFLAGS,[
571 AC_BEFORE([$0],[AC_PROG_CC])
572 krb5_ac_cflags_set=${CFLAGS+set}
575 AC_DEFUN(WITH_CC,[dnl
576 AC_REQUIRE([KRB5_AC_CHECK_FOR_CFLAGS])dnl
577 AC_REQUIRE([AC_PROG_CC])dnl
578 krb5_cv_prog_gcc=$ac_cv_c_compiler_gnu
579 if test $ac_cv_c_compiler_gnu = yes ; then
584 AC_CACHE_CHECK([for GNU linker], krb5_cv_prog_gnu_ld,
585 [krb5_cv_prog_gnu_ld=no
586 if test "$GCC" = yes; then
587 if AC_TRY_COMMAND([$CC -Wl,-v 2>&1 dnl
588 | grep "GNU ld" > /dev/null]); then
589 krb5_cv_prog_gnu_ld=yes
592 # maybe add -Waggregate-return, or can we assume that actually works by now?
593 # -Wno-comment used to be used for SunOS system header <sys/stream.h>
594 # -Wno-long-long, if needed, for k5-platform.h without inttypes.h etc.
595 extra_gcc_warn_opts="-Wall -Wmissing-prototypes -Wcast-qual \
596 -Wcast-align -Wconversion -Wshadow"
597 if test "$GCC" = yes ; then
598 if test "x$krb5_ac_cflags_set" = xset ; then
599 AC_MSG_NOTICE(not adding extra gcc warning flags because CFLAGS was set)
601 AC_MSG_NOTICE(adding extra warning flags for gcc)
602 CFLAGS="$CFLAGS $extra_gcc_warn_opts"
603 if test "`uname -s`" = Darwin ; then
604 AC_MSG_NOTICE(skipping pedantic warnings on Darwin)
605 elif test "`uname -s`" = Linux ; then
606 AC_MSG_NOTICE(skipping pedantic warnings on Linux)
608 CFLAGS="$CFLAGS -pedantic"
611 if test "`uname -s`" = Darwin ; then
612 # Someday this should be a feature test.
613 # One current (Jaguar = OS 10.2) problem:
614 # Archive library with foo.o undef sym X and bar.o common sym X,
615 # if foo.o is pulled in at link time, bar.o may not be, causing
616 # the linker to complain.
617 # Dynamic library problems too?
618 case "$CC $CFLAGS" in
619 *-fcommon*) ;; # why someone would do this, I don't know
620 *-fno-common*) ;; # okay, they're already doing the right thing
622 AC_MSG_NOTICE(disabling the use of common storage on Darwin)
623 CFLAGS="$CFLAGS -fno-common"
626 case "$LD $LDFLAGS" in
627 *-Wl,-search_paths_first*) ;;
628 *) LDFLAGS="${LDFLAGS} -Wl,-search_paths_first" ;;
632 if test "`uname -s`" = AIX ; then
633 # Using AIX but not GCC, assume native compiler.
634 # The native compiler appears not to give a nonzero exit
635 # status for certain classes of errors, like missing arguments
636 # in function calls. Let's try to fix that with -qhalt=e.
637 case "$CC $CFLAGS" in
640 CFLAGS="$CFLAGS -qhalt=e"
641 AC_MSG_NOTICE(adding -qhalt=e for better error reporting)
644 # Also, the optimizer isn't turned on by default, which means
645 # the static inline functions get left in random object files,
646 # leading to references to pthread_mutex_lock from anything that
647 # includes k5-int.h whether it uses threads or not.
648 case "$CC $CFLAGS" in
652 AC_MSG_NOTICE(adding -O for inline thread-support function elimination)
660 dnl check for yylineno -- HAVE_YYLINENO
662 AC_DEFUN(HAVE_YYLINENO,[dnl
663 AC_REQUIRE_CPP()AC_REQUIRE([AC_PROG_LEX])dnl
664 AC_MSG_CHECKING([for yylineno declaration])
665 AC_CACHE_VAL(krb5_cv_type_yylineno,
666 # some systems have yylineno, others don't...
668 %%' | ${LEX} -t > conftest.out
669 if egrep yylineno conftest.out >/dev/null 2>&1; then
670 krb5_cv_type_yylineno=yes
672 krb5_cv_type_yylineno=no
675 AC_MSG_RESULT($krb5_cv_type_yylineno)
676 if test $krb5_cv_type_yylineno = no; then
677 AC_DEFINE(NO_YYLINENO, 1, [Define if lex produes code with yylineno])
681 dnl K5_GEN_MAKEFILE([dir, [frags]])
683 AC_DEFUN(K5_GEN_MAKEFILE,[dnl
684 ifelse($1, ,[_K5_GEN_MAKEFILE(.,$2)],[_K5_GEN_MAKEFILE($1,$2)])
687 dnl _K5_GEN_MAKEFILE(dir, [frags])
688 dnl dir must be present in this case
689 dnl Note: Be careful in quoting.
690 dnl The ac_foreach generates the list of fragments to include
691 dnl or "" if $2 is empty
692 AC_DEFUN(_K5_GEN_MAKEFILE,[dnl
693 AC_CONFIG_FILES([$1/Makefile:$srcdir/]K5_TOPDIR[/config/pre.in:$1/Makefile.in:$srcdir/]K5_TOPDIR[/config/post.in])
696 dnl K5_GEN_FILE( <ac_output arguments> )
698 AC_DEFUN(K5_GEN_FILE,[AC_CONFIG_FILES($1)])dnl
701 dnl Note: Adds the variables to config.status for individual
702 dnl Makefile generation from config.status
703 AC_DEFUN(K5_AC_OUTPUT,[AC_OUTPUT])dnl
705 dnl V5_AC_OUTPUT_MAKEFILE
707 AC_DEFUN(V5_AC_OUTPUT_MAKEFILE,
708 [ifelse($1, , [_V5_AC_OUTPUT_MAKEFILE(.,$2)],[_V5_AC_OUTPUT_MAKEFILE($1,$2)])])
710 define(_V5_AC_OUTPUT_MAKEFILE,
711 [ifelse($2, , ,AC_CONFIG_FILES($2))
712 AC_FOREACH([DIR], [$1],dnl
713 [AC_CONFIG_FILES(DIR[/Makefile:$srcdir/]K5_TOPDIR[/config/pre.in:]DIR[/Makefile.in:$srcdir/]K5_TOPDIR[/config/post.in])])
717 dnl KRB5_SOCKADDR_SA_LEN: define HAVE_SA_LEN if sockaddr contains the sa_len
720 AC_DEFUN([KRB5_SOCKADDR_SA_LEN],[ dnl
721 AC_CHECK_MEMBER(struct sockaddr.sa_len,
722 AC_DEFINE(HAVE_SA_LEN,1,[Define if struct sockaddr contains sa_len])
723 ,,[#include <sys/types.h>
724 #include <sys/socket.h>])])
727 dnl CHECK_UTMP: check utmp structure and functions
729 AC_DEFUN(CHECK_UTMP,[
730 AC_CHECK_MEMBERS([struct utmp.ut_pid, struct utmp.ut_type, struct utmp.ut_host, struct utmp.ut_exit],,,
731 [#include <sys/types.h>
734 # Define the names actually used in the krb5 code currently:
735 if test $ac_cv_member_struct_utmp_ut_pid = no; then
736 AC_DEFINE(NO_UT_PID,1,[Define if ut_pid field not found])
738 if test $ac_cv_member_struct_utmp_ut_type = no; then
739 AC_DEFINE(NO_UT_TYPE,1,[Define if ut_type field not found])
741 if test $ac_cv_member_struct_utmp_ut_host = no; then
742 AC_DEFINE(NO_UT_HOST,1,[Define if ut_host field not found])
744 if test $ac_cv_member_struct_utmp_ut_exit = no; then
745 AC_DEFINE(NO_UT_EXIT,1,[Define if ut_exit field not found])
748 AC_CHECK_FUNCS(setutent setutxent updwtmp updwtmpx)
754 AC_DEFUN(WITH_NETLIB,[
755 AC_ARG_WITH([netlib],
756 AC_HELP_STRING([--with-netlib=LIBS], use user defined resolver library),
757 [ if test "$withval" = yes -o "$withval" = no ; then
758 AC_MSG_RESULT("netlib will link with C library resolver only")
760 LIBS="$LIBS $withval"
761 AC_MSG_RESULT("netlib will use \'$withval\'")
768 AC_DEFUN(KRB5_AC_NEED_DAEMON, [
769 KRB5_NEED_PROTO([#ifdef HAVE_UNISTD_H
771 #endif],daemon,1)])dnl
773 dnl Check if stdarg or varargs is available *and compiles*; prefer stdarg.
774 dnl (This was sent to djm for incorporation into autoconf 3/12/1996. KR)
776 AC_DEFUN(AC_HEADER_STDARG, [
778 AC_MSG_CHECKING([for stdarg.h])
779 AC_CACHE_VAL(ac_cv_header_stdarg_h,
780 [AC_TRY_COMPILE([#include <stdarg.h>], [
781 } /* ac_try_compile will have started a function body */
782 int aoeu (char *format, ...) {
785 va_start (v, format);
788 ],ac_cv_header_stdarg_h=yes,ac_cv_header_stdarg_h=no)])dnl
789 AC_MSG_RESULT($ac_cv_header_stdarg_h)
790 if test $ac_cv_header_stdarg_h = yes; then
791 AC_DEFINE(HAVE_STDARG_H, 1, [Define if stdarg available and compiles])
794 AC_MSG_CHECKING([for varargs.h])
795 AC_CACHE_VAL(ac_cv_header_varargs_h,
796 [AC_TRY_COMPILE([#include <varargs.h>],[
797 } /* ac_try_compile will have started a function body */
798 int aoeu (va_alist) va_dcl {
804 ],ac_cv_header_varargs_h=yes,ac_cv_header_varargs_h=no)])dnl
805 AC_MSG_RESULT($ac_cv_header_varargs_h)
806 if test $ac_cv_header_varargs_h = yes; then
807 AC_DEFINE(HAVE_VARARGS_H, 1, [Define if varargs available and compiles])
809 AC_MSG_ERROR(Neither stdarg nor varargs compile?)
812 fi dnl stdarg test failure
817 dnl KRB5_AC_NEED_LIBGEN --- check if libgen needs to be linked in for
821 AC_DEFUN(KRB5_AC_NEED_LIBGEN,[
822 AC_REQUIRE([AC_PROG_CC])dnl
824 dnl regcomp is present but non-functional on Solaris 2.4
826 AC_MSG_CHECKING(for working regcomp)
827 AC_CACHE_VAL(ac_cv_func_regcomp,[
829 #include <sys/types.h>
831 regex_t x; regmatch_t m;
832 int main() { return regcomp(&x,"pat.*",0) || regexec(&x,"pattern",1,&m,0); }
833 ], ac_cv_func_regcomp=yes, ac_cv_func_regcomp=no, AC_MSG_ERROR([Cannot test regcomp when cross compiling]))])
834 AC_MSG_RESULT($ac_cv_func_regcomp)
835 test $ac_cv_func_regcomp = yes && AC_DEFINE(HAVE_REGCOMP,1,[Define if regcomp exists and functions])
837 dnl Check for the compile and step functions - only if regcomp is not available
839 if test $ac_cv_func_regcomp = no; then
842 dnl this will fail if there's no compile/step in -lgen, or if there's
843 dnl no -lgen. This is fine.
844 AC_CHECK_FUNCS(compile step)
847 dnl Set GEN_LIB if necessary
849 AC_CHECK_LIB(gen, compile, GEN_LIB=-lgen, GEN_LIB=)
854 dnl KRB5_AC_REGEX_FUNCS --- check for different regular expression
855 dnl support functions
857 AC_DEFUN(KRB5_AC_REGEX_FUNCS,[
858 AC_CHECK_FUNCS(re_comp re_exec regexec)
859 AC_REQUIRE([KRB5_AC_NEED_LIBGEN])dnl
862 dnl AC_KRB5_TCL_FIND_CONFIG (uses tcl_dir)
864 AC_DEFUN(AC_KRB5_TCL_FIND_CONFIG,[
865 AC_REQUIRE([KRB5_LIB_AUX])dnl
866 AC_MSG_CHECKING(for tclConfig.sh)
867 if test -r "$tcl_dir/lib/tclConfig.sh" ; then
868 tcl_conf="$tcl_dir/lib/tclConfig.sh"
869 elif test -r "$tcl_dir/tclConfig.sh" ; then
870 tcl_conf="$tcl_dir/tclConfig.sh"
874 changequote(<<,>>)dnl
875 for d in "$lib" "$lib"/tcl7.[0-9] "$lib"/tcl8.[0-9] ; do
876 if test -r "$d/tclConfig.sh" ; then
877 tcl_conf="$tcl_conf $d/tclConfig.sh"
882 if test -n "$tcl_conf" ; then
883 AC_MSG_RESULT($tcl_conf)
885 AC_MSG_RESULT(not found)
890 old_CPPFLAGS=$CPPFLAGS
893 if test -n "$tcl_conf" ; then
894 for file in $tcl_conf ; do
895 TCL_MAJOR_VERSION=x ; TCL_MINOR_VERSION=x
896 AC_MSG_CHECKING(Tcl info in $file)
898 v=$TCL_MAJOR_VERSION.$TCL_MINOR_VERSION
899 if test -z "$tcl_vers_maj" \
900 || test "$tcl_vers_maj" -lt "$TCL_MAJOR_VERSION" \
901 || test "$tcl_vers_maj" = "$TCL_MAJOR_VERSION" -a "$tcl_vers_min" -lt "$TCL_MINOR_VERSION" ; then
902 for incdir in "$TCL_PREFIX/include/tcl$v" "$TCL_PREFIX/include" ; do
903 if test -r "$incdir/tcl.h" -o -r "$incdir/tcl/tcl.h" ; then
904 CPPFLAGS="$old_CPPFLAGS -I$incdir"
908 LIBS="$old_LIBS `eval echo x $TCL_LIB_SPEC $TCL_LIBS | sed 's/^x//'`"
909 LDFLAGS="$old_LDFLAGS $TCL_LD_FLAGS"
910 AC_TRY_LINK( , [Tcl_CreateInterp ();],
912 tcl_vers_maj=$TCL_MAJOR_VERSION
913 tcl_vers_min=$TCL_MINOR_VERSION
914 AC_MSG_RESULT($v - working),
915 AC_MSG_RESULT($v - compilation failed)
918 AC_MSG_RESULT(older version $v)
922 CPPFLAGS=$old_CPPFLAGS
927 if test -n "$tcl_ok_conf" ; then
930 for incdir in "$TCL_PREFIX/include/tcl$v" "$TCL_PREFIX/include" ; do
931 if test -r "$incdir/tcl.h" -o -r "$incdir/tcl/tcl.h" ; then
932 if test "$incdir" != "/usr/include" ; then
933 TCL_INCLUDES=-I$incdir
938 # Need eval because the first-level expansion could reference
939 # variables like ${TCL_DBGX}.
940 eval TCL_LIBS='"'$TCL_LIB_SPEC $TCL_LIBS $TCL_DL_LIBS'"'
941 TCL_LIBPATH="-L$TCL_EXEC_PREFIX/lib"
942 TCL_RPATH=":$TCL_EXEC_PREFIX/lib"
943 if test "$DEPLIBEXT" != "$SHLIBEXT" && test -n "$RPATH_FLAG"; then
944 TCL_MAYBE_RPATH='$(RPATH_FLAG)'"$TCL_EXEC_PREFIX/lib$RPATH_TAIL"
948 CPPFLAGS="$old_CPPFLAGS $TCL_INCLUDES"
949 AC_CHECK_HEADER(tcl.h,AC_DEFINE(HAVE_TCL_H,1,[Define if tcl.h is available]) tcl_header=yes)
950 if test $tcl_header=no; then
951 AC_CHECK_HEADER(tcl/tcl.h,AC_DEFINE(HAVE_TCL_TCL_H,1,[Define if tcl/tcl.h is available]) tcl_header=yes)
953 CPPFLAGS="$old_CPPFLAGS"
956 # If we read a tclConfig.sh file, it probably set this.
959 AC_SUBST(TCL_INCLUDES)
961 AC_SUBST(TCL_LIBPATH)
963 AC_SUBST(TCL_MAYBE_RPATH)
966 dnl AC_KRB5_TCL_TRYOLD
967 dnl attempt to use old search algorithm for locating tcl
969 AC_DEFUN(AC_KRB5_TCL_TRYOLD, [
970 AC_REQUIRE([KRB5_AC_FIND_DLOPEN])
971 AC_MSG_WARN([trying old tcl search code])
972 if test "$with_tcl" != yes -a "$with_tcl" != no; then
973 TCL_INCLUDES=-I$with_tcl/include
974 TCL_LIBPATH=-L$with_tcl/lib
975 TCL_RPATH=:$with_tcl/lib
977 if test "$with_tcl" != no ; then
978 krb5_save_CPPFLAGS="$CPPFLAGS"
979 krb5_save_LDFLAGS="$LDFLAGS"
980 CPPFLAGS="$CPPFLAGS $TCL_INCLUDES"
981 LDFLAGS="$LDFLAGS $TCL_LIBPATH"
983 AC_CHECK_HEADER(tcl.h,AC_DEFINE(HAVE_TCL_H,1,[Define if tcl.h found]) tcl_header=yes)
984 if test $tcl_header=no; then
985 AC_CHECK_HEADER(tcl/tcl.h,AC_DEFINE(HAVE_TCL_TCL_H,1,[Define if tcl/tcl.h found]) tcl_header=yes)
988 if test $tcl_header = yes ; then
991 if test $tcl_lib = no; then
992 AC_CHECK_LIB(tcl8.0, Tcl_CreateCommand,
993 TCL_LIBS="$TCL_LIBS -ltcl8.0 -lm $DL_LIB $LIBS"
994 tcl_lib=yes,,-lm $DL_LIB)
996 if test $tcl_lib = no; then
997 AC_CHECK_LIB(tcl7.6, Tcl_CreateCommand,
998 TCL_LIBS="$TCL_LIBS -ltcl7.6 -lm $DL_LIB $LIBS"
999 tcl_lib=yes,,-lm $DL_LIB)
1001 if test $tcl_lib = no; then
1002 AC_CHECK_LIB(tcl7.5, Tcl_CreateCommand,
1003 TCL_LIBS="$TCL_LIBS -ltcl7.5 -lm $DL_LIB $LIBS"
1004 tcl_lib=yes,,-lm $DL_LIB)
1007 if test $tcl_lib = no ; then
1008 AC_CHECK_LIB(tcl, Tcl_CreateCommand,
1009 TCL_LIBS="$TCL_LIBS -ltcl -lm $DL_LIB $LIBS"
1010 tcl_lib=yes,,-lm $DL_LIB)
1013 if test $tcl_lib = no ; then
1014 AC_MSG_WARN("tcl.h found but not library")
1017 AC_MSG_WARN(Could not find Tcl which is needed for the kadm5 tests)
1020 CPPFLAGS="$krb5_save_CPPFLAGS"
1021 LDFLAGS="$krb5_save_LDFLAGS"
1022 AC_SUBST(TCL_INCLUDES)
1024 AC_SUBST(TCL_LIBPATH)
1027 AC_MSG_RESULT("Not looking for Tcl library")
1031 dnl AC_KRB5_TCL - determine if the TCL library is present on system
1033 AC_DEFUN(AC_KRB5_TCL,[
1041 [ --with-tcl=path where Tcl resides], , with_tcl=try)
1042 if test "$with_tcl" = no ; then
1044 elif test "$with_tcl" = yes -o "$with_tcl" = try ; then
1046 if test ! -r /usr/lib/tclConfig.sh; then
1047 cat >> conftest <<\EOF
1048 puts "tcl_dir=$tcl_library"
1050 if tclsh conftest >conftest.out 2>/dev/null; then
1051 if grep tcl_dir= conftest.out >/dev/null 2>&1; then
1052 t=`sed s/tcl_dir=// conftest.out`
1055 fi # tclsh ran script okay
1056 rm -f conftest conftest.out
1057 fi # no /usr/lib/tclConfig.sh
1061 if test "$with_tcl" != no ; then
1062 AC_KRB5_TCL_FIND_CONFIG
1063 if test $tcl_lib = no ; then
1064 if test "$with_tcl" != try ; then
1067 AC_MSG_WARN(Could not find Tcl which is needed for some tests)
1071 # If "yes" or pathname, error out if not found.
1072 if test "$with_tcl" != no -a "$with_tcl" != try ; then
1073 if test "$tcl_header $tcl_lib" != "yes yes" ; then
1074 AC_MSG_ERROR(Could not find Tcl)
1082 AC_DEFUN(WITH_HESIOD,
1083 [AC_ARG_WITH(hesiod, AC_HELP_STRING(--with-hesiod[=path], compile with hesiod support @<:@omitted@:>@),
1084 hesiod=$with_hesiod, with_hesiod=no)
1085 if test "$with_hesiod" != "no"; then
1086 HESIOD_DEFS=-DHESIOD
1087 AC_CHECK_LIB(resolv, res_send, res_lib=-lresolv)
1088 if test "$hesiod" != "yes"; then
1089 HESIOD_LIBS="-L${hesiod}/lib -lhesiod $res_lib"
1091 HESIOD_LIBS="-lhesiod $res_lib"
1097 AC_SUBST(HESIOD_DEFS)
1098 AC_SUBST(HESIOD_LIBS)])
1102 dnl KRB5_BUILD_LIBRARY
1104 dnl Pull in the necessary stuff to create the libraries.
1106 AC_DEFUN(KRB5_BUILD_LIBRARY,
1107 [KRB5_BUILD_LIBRARY_WITH_DEPS
1108 # null out SHLIB_EXPFLAGS because we lack any dependencies
1112 dnl KRB5_BUILD_LIBRARY_STATIC
1114 dnl Force static library build.
1116 AC_DEFUN(KRB5_AC_FORCE_STATIC,[dnl
1117 AC_BEFORE([$0],[KRB5_LIB_AUX])dnl
1118 krb5_force_static=yes])
1119 AC_DEFUN(KRB5_BUILD_LIBRARY_STATIC,
1120 dnl Use define rather than AC_DEFUN to avoid ordering problems.
1121 [AC_REQUIRE([KRB5_AC_FORCE_STATIC])dnl
1123 # If we're only building static libraries, they're for build-time use only,
1128 dnl KRB5_BUILD_LIBRARY_WITH_DEPS
1130 dnl Like KRB5_BUILD_LIBRARY, but adds in explicit dependencies in the
1131 dnl generated shared library.
1133 AC_DEFUN(KRB5_BUILD_LIBRARY_WITH_DEPS,
1134 [AC_REQUIRE([KRB5_LIB_AUX])dnl
1135 AC_REQUIRE([AC_PROG_LN_S])dnl
1136 AC_REQUIRE([AC_PROG_RANLIB])dnl
1137 AC_REQUIRE([AC_PROG_ARCHIVE])dnl
1138 AC_REQUIRE([AC_PROG_ARCHIVE_ADD])dnl
1139 AC_REQUIRE([AC_PROG_INSTALL])dnl
1140 AC_CHECK_PROG(AR, ar, ar, false)
1141 AC_CHECK_PROG(PERL, perl, perl, false)
1142 if test "$ac_cv_prog_PERL" = "false"; then
1143 AC_MSG_ERROR(Perl is now required for Kerberos builds.)
1147 AC_SUBST(MAKE_SHLIB_COMMAND)
1148 AC_SUBST(SHLIB_EXPFLAGS)
1149 AC_SUBST(SHLIB_EXPORT_FILE_DEP)
1150 AC_SUBST(DYNOBJ_EXPDEPS)
1151 AC_SUBST(DYNOBJ_EXPFLAGS)
1152 AC_SUBST(INSTALL_SHLIB)
1159 AC_SUBST(LIBINSTLIST)
1161 AC_SUBST(MAKE_DYNOBJ_COMMAND)
1165 dnl KRB5_BUILD_LIBOBJS
1167 dnl Pull in the necessary stuff to build library objects.
1169 AC_DEFUN(KRB5_BUILD_LIBOBJS,
1170 [AC_REQUIRE([KRB5_LIB_AUX])dnl
1176 AC_SUBST(PROFFLAGS)])
1179 dnl KRB5_BUILD_PROGRAM
1181 dnl Set variables to build a program.
1183 AC_DEFUN(KRB5_BUILD_PROGRAM,
1184 [AC_REQUIRE([KRB5_LIB_AUX])dnl
1185 AC_REQUIRE([KRB5_AC_NEED_LIBGEN])dnl
1187 AC_SUBST(RPATH_FLAG)
1188 AC_SUBST(DEPLIBEXT)])
1193 dnl Set up environment for running dynamic executables out of build tree
1195 AC_DEFUN(KRB5_RUN_FLAGS,
1196 [AC_REQUIRE([KRB5_LIB_AUX])dnl
1197 KRB5_RUN_ENV="$RUN_ENV"
1198 AC_SUBST(KRB5_RUN_ENV)])
1203 dnl Parse configure options related to library building.
1205 AC_DEFUN(KRB5_LIB_AUX,
1206 [AC_REQUIRE([KRB5_LIB_PARAMS])dnl
1208 # Check whether to build static libraries.
1209 AC_ARG_ENABLE([static],
1210 AC_HELP_STRING([--enable-static],[build static libraries @<:@disabled for most platforms@:>@])
1211 AC_HELP_STRING([--disable-static],[don't build static libraries]), ,
1212 [enable_static=$default_static])
1214 if test "$enable_static" = no && test "$krb5_force_static" != yes; then
1215 AC_MSG_NOTICE([disabling static libraries])
1220 LIBLIST='lib$(LIBBASE)$(STLIBEXT)'
1221 LIBLINKS='$(TOPLIBD)/lib$(LIBBASE)$(STLIBEXT)'
1223 LIBINSTLIST=install-static
1225 # CFLAGS="$CFLAGS -D_KDB5_STATIC_LINK"
1228 # Check whether to build shared libraries.
1229 AC_ARG_ENABLE([shared],
1230 AC_HELP_STRING([--enable-shared],[build shared libraries @<:@enabled for most platforms@:>@])
1231 AC_HELP_STRING([--disable-shared],[don't build shared libraries]), ,
1232 [enable_shared=$default_shared])
1234 if test "$enable_shared" = yes; then
1237 AC_MSG_WARN([shared libraries not supported on this architecture])
1239 CC_LINK="$CC_LINK_STATIC"
1242 # set this now because some logic below may reset SHLIBEXT
1244 if test "$krb5_force_static" = "yes"; then
1245 AC_MSG_RESULT([Forcing static libraries.])
1246 # avoid duplicate rules generation for AIX and such
1247 SHLIBEXT=.so-nobuild
1248 SHLIBVEXT=.so.v-nobuild
1249 SHLIBSEXT=.so.s-nobuild
1251 AC_MSG_NOTICE([enabling shared libraries])
1252 # Clear some stuff in case of AIX, etc.
1253 if test "$STLIBEXT" = "$SHLIBEXT" ; then
1260 LIBLIST="$LIBLIST "'lib$(LIBBASE)$(SHLIBEXT)'
1261 LIBLINKS="$LIBLINKS "'$(TOPLIBD)/lib$(LIBBASE)$(SHLIBEXT) $(TOPLIBD)/lib$(LIBBASE)$(SHLIBVEXT)'
1262 case "$SHLIBSEXT" in
1264 LIBINSTLIST="$LIBINSTLIST install-shared"
1267 LIBLIST="$LIBLIST "'lib$(LIBBASE)$(SHLIBSEXT)'
1268 LIBLINKS="$LIBLINKS "'$(TOPLIBD)/lib$(LIBBASE)$(SHLIBSEXT)'
1269 LIBINSTLIST="$LIBINSTLIST install-shlib-soname"
1272 OBJLISTS="$OBJLISTS OBJS.SH"
1274 CC_LINK="$CC_LINK_SHARED"
1279 CC_LINK="$CC_LINK_STATIC"
1280 SHLIBEXT=.so-nobuild
1281 SHLIBVEXT=.so.v-nobuild
1282 SHLIBSEXT=.so.s-nobuild
1285 if test "$build_dynobj" = yes; then
1286 OBJLISTS=`echo $OBJLISTS | sed -e s/OBJS.ST//g -e s/OBJS.SH//g`
1287 OBJLISTS="$OBJLISTS OBJS.SH"
1290 if test -z "$LIBLIST"; then
1291 AC_MSG_ERROR([must enable one of shared or static libraries])
1294 # Check whether to build profiled libraries.
1295 AC_ARG_ENABLE([profiled],
1296 [ --enable-profiled build profiled libraries @<:@disabled@:>@],
1297 [if test "$enableval" = yes; then
1300 AC_MSG_WARN([Profiled libraries not supported on this architecture.])
1303 AC_MSG_NOTICE([enabling profiled libraries])
1304 LIBLIST="$LIBLIST "'lib$(LIBBASE)$(PFLIBEXT)'
1305 LIBLINKS="$LIBLINKS "'$(TOPLIBD)/lib$(LIBBASE)$(PFLIBEXT)'
1306 OBJLISTS="$OBJLISTS OBJS.PF"
1307 LIBINSTLIST="$LIBINSTLIST install-profiled"
1315 dnl Determine parameters related to libraries, e.g. various extensions.
1317 AC_DEFUN(KRB5_LIB_PARAMS,
1318 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
1320 AC_SUBST(krb5_cv_host)
1321 AC_REQUIRE([AC_PROG_CC])dnl
1322 AC_REQUIRE([V5_SET_TOPDIR])dnl
1323 . $ac_topdir/config/shlib.conf])
1325 dnl The following was written by jhawk@mit.edu
1327 dnl AC_LIBRARY_NET: Id: net.m4,v 1.4 1997/10/25 20:49:53 jhawk Exp
1329 dnl This test is for network applications that need socket() and
1330 dnl gethostbyname() -ish functions. Under Solaris, those applications need to
1331 dnl link with "-lsocket -lnsl". Under IRIX, they should *not* link with
1332 dnl "-lsocket" because libsocket.a breaks a number of things (for instance:
1333 dnl gethostbyname() under IRIX 5.2, and snoop sockets under most versions of
1336 dnl Unfortunately, many application developers are not aware of this, and
1337 dnl mistakenly write tests that cause -lsocket to be used under IRIX. It is
1338 dnl also easy to write tests that cause -lnsl to be used under operating
1339 dnl systems where neither are necessary (or useful), such as SunOS 4.1.4, which
1340 dnl uses -lnsl for TLI.
1342 dnl This test exists so that every application developer does not test this in
1343 dnl a different, and subtly broken fashion.
1345 dnl It has been argued that this test should be broken up into two seperate
1346 dnl tests, one for the resolver libraries, and one for the libraries necessary
1347 dnl for using Sockets API. Unfortunately, the two are carefully intertwined and
1348 dnl allowing the autoconf user to use them independantly potentially results in
1349 dnl unfortunate ordering dependancies -- as such, such component macros would
1350 dnl have to carefully use indirection and be aware if the other components were
1351 dnl executed. Since other autoconf macros do not go to this trouble, and almost
1352 dnl no applications use sockets without the resolver, this complexity has not
1353 dnl been implemented.
1355 dnl The check for libresolv is in case you are attempting to link statically
1356 dnl and happen to have a libresolv.a lying around (and no libnsl.a).
1358 AC_DEFUN(AC_LIBRARY_NET, [
1359 # Most operating systems have gethostbyname() in the default searched
1360 # libraries (i.e. libc):
1361 AC_CHECK_FUNC(gethostbyname, , [
1362 # Some OSes (eg. Solaris) place it in libnsl:
1363 AC_CHECK_LIB(nsl, gethostbyname, , [
1364 # Some strange OSes (SINIX) have it in libsocket:
1365 AC_CHECK_LIB(socket, gethostbyname, , [
1366 # Unfortunately libsocket sometimes depends on libnsl.
1367 # AC_CHECK_LIB's API is essentially broken so the following
1368 # ugliness is necessary:
1369 AC_CHECK_LIB(socket, gethostbyname,
1370 LIBS="-lsocket -lnsl $LIBS",
1371 [AC_CHECK_LIB(resolv, gethostbyname,
1372 LIBS="-lresolv $LIBS" )],
1377 AC_CHECK_FUNC(socket, , AC_CHECK_LIB(socket, socket, ,
1378 AC_CHECK_LIB(socket, socket, LIBS="-lsocket -lnsl $LIBS", , -lnsl)))
1380 if test "$enable_dns" = yes ; then
1381 # We assume that if libresolv exists we can link against it.
1382 # This may get us a gethostby* that doesn't respect nsswitch.
1383 AC_CHECK_LIB(resolv, main)
1385 _KRB5_AC_CHECK_RES_FUNCS(res_ninit res_nclose res_ndestroy res_nsearch dnl
1386 ns_initparse ns_name_uncompress dn_skipname res_search)
1387 if test $krb5_cv_func_res_nsearch = no \
1388 && test $krb5_cv_func_res_search = no; then
1389 # Attempt to link with res_search(), in case it's not prototyped.
1390 AC_CHECK_FUNC(res_search,
1391 [AC_DEFINE(HAVE_RES_SEARCH, 1,
1392 [Define to 1 if you have the `res_search' function])],
1393 [AC_ERROR([cannot find res_nsearch or res_search])])
1397 AC_DEFUN([_KRB5_AC_CHECK_RES_FUNCS],
1398 [AC_FOREACH([AC_Func], [$1],
1399 [AH_TEMPLATE(AS_TR_CPP(HAVE_[]AC_Func),
1400 [Define to 1 if you have the `]AC_Func[' function.])])dnl
1401 for krb5_func in $1; do
1402 _KRB5_AC_CHECK_RES_FUNC($krb5_func)
1405 AC_DEFUN([_KRB5_AC_CHECK_RES_FUNC], [
1406 # Solaris 9 prototypes ns_name_uncompress() in arpa/nameser.h, but
1407 # doesn't export it from libresolv.so, so we use extreme paranoia here
1408 # and check both for the declaration and that we can link against the
1410 AC_CACHE_CHECK([for $1], [krb5_cv_func_$1], [AC_TRY_LINK(
1411 [#include <sys/types.h>
1412 #include <netinet/in.h>
1413 #include <arpa/nameser.h>
1414 @%:@include <resolv.h>],
1416 * Use volatile, or else optimization can cause false positives.
1418 void (* volatile p)() = (void (*)())$1;],
1419 [AS_VAR_SET(krb5_cv_func_$1, yes)],
1420 [AS_VAR_SET(krb5_cv_func_$1, no)])])
1421 AS_IF([test AS_VAR_GET(krb5_cv_func_$1) = yes],
1422 [AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_$1]), 1,
1423 [Define to 1 if you have the `$1' function])])[]dnl
1427 dnl KRB5_AC_ENABLE_DNS
1429 AC_DEFUN(KRB5_AC_ENABLE_DNS, [
1431 enable_dns_for_kdc=yes
1432 AC_DEFINE(KRB5_DNS_LOOKUP_KDC,1,[Define to enable DNS lookups of Kerberos KDCs])
1434 AC_ARG_ENABLE([dns-for-realm],
1435 [ --enable-dns-for-realm enable DNS lookups of Kerberos realm names], ,
1436 [enable_dns_for_realm=no])
1437 if test "$enable_dns_for_realm" = yes; then
1438 AC_DEFINE(KRB5_DNS_LOOKUP_REALM,1,[Define to enable DNS lookups of Kerberos realm names])
1441 AC_DEFINE(KRB5_DNS_LOOKUP, 1,[Define for DNS support of locating realms and KDCs])
1446 dnl Check if we need the prototype for a function - we give it a bogus
1447 dnl prototype and if it complains - then a valid prototype exists on the
1450 dnl KRB5_NEED_PROTO(includes, function, [bypass])
1451 dnl if $3 set, don't see if library defined.
1452 dnl Useful for case where we will define in libkrb5 the function if need be
1453 dnl but want to know if a prototype exists in either case on system.
1455 AC_DEFUN([KRB5_NEED_PROTO], [
1456 ifelse([$3], ,[if test "x$ac_cv_func_$2" = xyes; then])
1457 AC_CACHE_CHECK([if $2 needs a prototype provided], krb5_cv_func_$2_noproto,
1458 AC_TRY_COMPILE([$1],
1459 [struct k5foo {int foo; } xx;
1460 extern int $2 (struct k5foo*);
1463 krb5_cv_func_$2_noproto=yes,krb5_cv_func_$2_noproto=no))
1464 if test $krb5_cv_func_$2_noproto = yes; then
1465 AC_DEFINE([NEED_]translit($2, [a-z], [A-Z])[_PROTO], 1, dnl
1466 [define if the system header files are missing prototype for $2()])
1471 dnl =============================================================
1472 dnl Internal function for testing for getpeername prototype
1474 AC_DEFUN([KRB5_GETPEERNAME_ARGS],[
1475 AC_DEFINE([GETPEERNAME_ARG2_TYPE],GETSOCKNAME_ARG2_TYPE,[Type of getpeername second argument.])
1476 AC_DEFINE([GETPEERNAME_ARG3_TYPE],GETSOCKNAME_ARG3_TYPE,[Type of getpeername second argument.])
1479 dnl =============================================================
1480 dnl Internal function for testing for getsockname arguments
1482 AC_DEFUN([TRY_GETSOCK_INT],[
1483 krb5_lib_var=`echo "$1 $2" | sed 'y% ./+-*%___p_p%'`
1484 AC_MSG_CHECKING([if getsockname() takes arguments $1 and $2])
1485 AC_CACHE_VAL(krb5_cv_getsockname_proto_$krb5_lib_var,
1487 AC_TRY_COMPILE([#include <sys/types.h>
1488 #include <sys/socket.h>
1489 extern int getsockname(int, $1, $2);
1490 ],,eval "krb5_cv_getsockname_proto_$krb5_lib_var=yes",
1491 eval "krb5_cv_getsockname_proto_$krb5_lib_var=no")])
1492 if eval "test \"`echo '$krb5_cv_getsockname_proto_'$krb5_lib_var`\" = yes"; then
1494 sock_set=yes; res1="$1"; res2="$2"
1500 dnl Determines the types of the second and third arguments to getsockname().
1502 AC_DEFUN([KRB5_GETSOCKNAME_ARGS],[
1504 for sock_arg1 in "struct sockaddr *" "void *"
1506 for sock_arg2 in "size_t *" "int *" "socklen_t *"
1508 if test $sock_set = no; then
1509 TRY_GETSOCK_INT($sock_arg1, $sock_arg2)
1513 if test "$sock_set" = no; then
1514 AC_MSG_NOTICE(assuming struct sockaddr and socklen_t for getsockname args)
1515 res1="struct sockaddr *"
1518 res1=`echo "$res1" | tr -d '*' | sed -e 's/ *$//'`
1519 res2=`echo "$res2" | tr -d '*' | sed -e 's/ *$//'`
1520 AC_DEFINE_UNQUOTED([GETSOCKNAME_ARG2_TYPE],$res1,[Type of pointer target for argument 2 to getsockname])
1521 AC_DEFINE_UNQUOTED([GETSOCKNAME_ARG3_TYPE],$res2,[Type of pointer target for argument 3 to getsockname])
1525 AC_DEFUN([KRB5_AC_CHOOSE_ET],[
1526 AC_ARG_WITH([system-et],
1527 AC_HELP_STRING(--with-system-et,use system compile_et and -lcom_err @<:@default: build and install a local version@:>@))
1528 AC_MSG_CHECKING(which version of com_err to use)
1529 if test "x$with_system_et" = xyes ; then
1531 AC_MSG_RESULT(system)
1536 if test $COM_ERR_VERSION = sys; then
1537 # check for various functions we need
1538 AC_CHECK_LIB(com_err, add_error_table, :, AC_MSG_ERROR(cannot find add_error_table in com_err library))
1539 AC_CHECK_LIB(com_err, remove_error_table, :, AC_MSG_ERROR(cannot find remove_error_table in com_err library))
1540 # make sure compile_et provides "et_foo" name
1541 cat >> conf$$e.et <<EOF
1543 error_code ERR_FOO, "foo"
1546 AC_CHECK_PROGS(compile_et,compile_et,false)
1547 if test "$compile_et" = false; then
1548 AC_MSG_ERROR(cannot find compile_et)
1550 AC_CACHE_CHECK(whether compile_et is useful,krb5_cv_compile_et_useful,[
1551 if compile_et conf$$e.et >/dev/null 2>&1 ; then true ; else
1552 AC_MSG_ERROR(execution failed)
1554 AC_TRY_COMPILE([#include "conf$$e.h"
1555 ],[ &et_foo_error_table; ],:,
1556 [AC_MSG_ERROR(cannot use et_foo_error_table)])
1557 # Anything else we need to test for?
1558 rm -f conf$$e.et conf$$e.c conf$$e.h
1559 krb5_cv_compile_et_useful=yes
1562 AC_SUBST(COM_ERR_VERSION)
1564 AC_DEFUN([KRB5_AC_CHOOSE_SS],[
1565 AC_ARG_WITH(system-ss,
1566 AC_HELP_STRING(--with-system-ss,use system -lss and mk_cmds @<:@private version@:>@))
1567 AC_ARG_VAR(SS_LIB,[system libraries for 'ss' package [-lss]])
1568 AC_MSG_CHECKING(which version of subsystem package to use)
1569 if test "x$with_system_ss" = xyes ; then
1571 AC_MSG_RESULT(system)
1572 # todo: check for various libraries we might need
1573 # in the meantime...
1574 test "x${SS_LIB+set}" = xset || SS_LIB=-lss
1576 LIBS="$LIBS $SS_LIB"
1577 AC_CACHE_CHECK(whether system ss package works, krb5_cv_system_ss_okay,[
1580 int main(int argc, char *argv[]) {
1583 i = ss_create_invocation("foo","foo","",0,&err);
1587 }], krb5_cv_system_ss_okay=yes, AC_MSG_ERROR(cannot run test program),
1588 krb5_cv_system_ss_okay="assumed")])
1595 AC_SUBST(SS_VERSION)
1598 AC_DEFUN([KRB5_AC_CHOOSE_DB],[
1599 AC_ARG_WITH(system-db,
1600 AC_HELP_STRING(--with-system-db,use system Berkeley db @<:@private version@:>@))
1601 AC_ARG_VAR(DB_HEADER,[header file for system Berkeley db package [db.h]])
1602 AC_ARG_VAR(DB_LIB,[library for system Berkeley db package [-ldb]])
1603 if test "x$with_system_db" = xyes ; then
1605 # TODO: Do we have specific routines we should check for?
1606 # How about known, easily recognizable bugs?
1607 # We want to use bt_rseq in some cases, but no other version but
1608 # ours has it right now.
1610 # Okay, check the variables.
1611 test "x${DB_HEADER+set}" = xset || DB_HEADER=db.h
1612 test "x${DB_LIB+set}" = xset || DB_LIB=-ldb
1614 if test "x${DB_HEADER}" = xdb.h ; then
1615 DB_HEADER_VERSION=sys
1617 DB_HEADER_VERSION=redirect
1619 KDB5_DB_LIB="$DB_LIB"
1622 AC_DEFINE(HAVE_BT_RSEQ,1,[Define if bt_rseq is available, for recursive btree traversal.])
1624 DB_HEADER_VERSION=k5
1625 # libdb gets sucked into libkdb
1627 # needed for a couple of things that need libdb for its own sake
1630 AC_SUBST(DB_VERSION)
1632 AC_SUBST(DB_HEADER_VERSION)
1634 AC_SUBST(KDB5_DB_LIB)
1637 dnl KRB5_AC_PRIOCNTL_HACK
1640 AC_DEFUN([KRB5_AC_PRIOCNTL_HACK],
1641 [AC_REQUIRE([AC_PROG_AWK])dnl
1642 AC_REQUIRE([AC_LANG_COMPILER_REQUIRE])dnl
1643 AC_CACHE_CHECK([whether to use priocntl hack], [krb5_cv_priocntl_hack],
1644 [case $krb5_cv_host in
1646 if test "$cross_compiling" = yes; then
1647 krb5_cv_priocntl_hack=yes
1649 # Solaris patch 117171-11 (sparc) or 117172-11 (x86)
1650 # fixes the Solaris 9 bug where final pty output
1651 # gets lost on close.
1652 if showrev -p | $AWK 'BEGIN { e = 1 }
1653 /Patch: 11717[[12]]/ { x = index[]([$]2, "-");
1654 if (substr[]([$]2, x + 1, length([$]2) - x) >= 11)
1655 { e = 0 } else { e = 1 } }
1656 END { exit e; }'; then
1657 krb5_cv_priocntl_hack=no
1659 krb5_cv_priocntl_hack=yes
1664 krb5_cv_priocntl_hack=no
1667 if test "$krb5_cv_priocntl_hack" = yes; then
1672 AC_SUBST(PRIOCNTL_HACK)])
1675 dnl KRB5_AC_GCC_ATTRS
1676 AC_DEFUN([KRB5_AC_GCC_ATTRS],
1677 [AC_CACHE_CHECK([for constructor/destructor attribute support],krb5_cv_attr_constructor_destructor,
1678 [rm -f conftest.1 conftest.2
1679 if test -r conftest.1 || test -r conftest.2 ; then
1680 AC_MSG_ERROR(write error in local file system?)
1684 if test -r conftest.1 && test -r conftest.2 ; then true ; else
1685 AC_MSG_ERROR(write error in local file system?)
1689 # blindly assume we have 'unlink'...
1690 AC_TRY_RUN([void foo1() __attribute__((constructor));
1691 void foo1() { unlink("conftest.1"); }
1692 void foo2() __attribute__((destructor));
1693 void foo2() { unlink("conftest.2"); }
1694 int main () { return 0; }],
1695 [test -r conftest.1 || a=yes
1696 test -r conftest.2 || b=yes], , AC_MSG_ERROR(Cannot test for constructor/destructor support when cross compiling))
1697 case $krb5_cv_host in
1699 # Under AIX 4.3.3, at least, shared library destructor functions
1700 # appear to get executed in reverse link order (right to left),
1701 # so that a library's destructor function may run after that of
1702 # libraries it depends on, and may still have to access in the
1705 # That counts as "not working", for me, but it's a much more
1706 # complicated test case to set up.
1710 krb5_cv_attr_constructor_destructor="$a,$b"
1712 # Okay, krb5_cv_... should be set now.
1713 case $krb5_cv_attr_constructor_destructor in
1715 AC_DEFINE(CONSTRUCTOR_ATTR_WORKS,1,[Define if __attribute__((constructor)) works]) ;;
1717 case $krb5_cv_attr_constructor_destructor in
1719 AC_DEFINE(DESTRUCTOR_ATTR_WORKS,1,[Define if __attribute__((destructor)) works]) ;;
1721 dnl End of attributes we care about right now.
1725 dnl KRB5_AC_PRAGMA_WEAK_REF
1726 AC_DEFUN([KRB5_AC_PRAGMA_WEAK_REF],
1727 [AC_CACHE_CHECK([whether pragma weak references are supported],
1728 krb5_cv_pragma_weak_ref,
1729 [AC_TRY_LINK([#pragma weak flurbl
1730 extern int flurbl(void);],[if (&flurbl != 0) return flurbl();],
1731 krb5_cv_pragma_weak_ref=yes,krb5_cv_pragma_weak_ref=no)])
1732 if test $krb5_cv_pragma_weak_ref = yes ; then
1733 AC_DEFINE(HAVE_PRAGMA_WEAK_REF,1,[Define if #pragma weak references work])
1737 m4_include(config/ac-archive/acx_pthread.m4)
1741 # Check for libutil, for NetBSD, et al.; needed for openpty() and
1742 # logwtmp() on some platforms.
1744 AC_DEFUN([KRB5_AC_LIBUTIL],
1745 [AC_CHECK_LIB(util, main,
1746 [AC_DEFINE(HAVE_LIBUTIL,1,[Define if util library is available with openpty, logwtmp, etc])
1747 UTIL_LIB=-lutil])dnl