Don't output krb5_config_prefix commands into config.status; do the substitutions
[krb5.git] / src / aclocal.m4
1 AC_PREREQ(2.52)
2 AC_COPYRIGHT([Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
3 Massachusetts Institute of Technology.
4 ])
5 dnl
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.
9 dnl
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.
14 ifelse(x,[YES
15 ],[YES],x,[NO
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])])])])]))
26 dnl
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])
31 fi
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)
37 else
38   AC_MSG_ERROR([can not find config/ directory in $ac_reltopdir])
39 fi
40 ])dnl
41 dnl
42 dnl Version info.
43 dnl
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?
48 builtin(m4exit,1)])
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?
52 builtin(m4exit,1)])
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?
56 builtin(m4exit,1)])
57 define([PL_KRB5_RELTAIL],regexp(x,[KRB5_RELTAIL="\(.*\)"],[\1]))
58 dnl RELTAIL is allowed to not be defined.
59 popdef([x])
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)
63 AC_CONFIG_SRCDIR($1)
64 build_dynobj=no])
65 dnl
66 dnl drop in standard rules for all configure files -- CONFIG_RULES
67 dnl
68 AC_DEFUN(CONFIG_RULES,[dnl
69 AC_REQUIRE([V5_SET_TOPDIR]) dnl
70 EXTRA_FILES=""
71 AC_SUBST(EXTRA_FILES)
72 WITH_CC dnl
73 AC_REQUIRE_CPP
74 if test -z "$LD" ; then LD=$CC; fi
75 AC_ARG_VAR(LD,[linker command [CC]])
76 AC_SUBST(LDFLAGS) dnl
77 WITH_KRB4 dnl
78 KRB5_AC_CHOOSE_ET dnl
79 KRB5_AC_CHOOSE_SS dnl
80 KRB5_AC_CHOOSE_DB dnl
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])
84 AC_C_CONST dnl
85 WITH_NETLIB dnl
86 WITH_HESIOD dnl
87 KRB5_AC_MAINTAINER_MODE dnl
88 AC_ARG_PROGRAM dnl
89 dnl
90 dnl This identifies the top of the source tree relative to the directory 
91 dnl in which the configure file lives.
92 dnl
93 CONFIG_RELTOPDIR=$ac_reltopdir
94 AC_SUBST(CONFIG_RELTOPDIR)
95 AC_SUBST(subdirs)
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)
102 dnl
103 KRB5_AC_PRAGMA_WEAK_REF
104 KRB5_LIB_PARAMS
105 KRB5_AC_INITFINI
106 KRB5_AC_ENABLE_THREADS
107 KRB5_AC_FIND_DLOPEN
108 ])dnl
109
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)
121 else
122   MAINTAINER_MODE_TRUE='#'
123   MAINTAINER_MODE_FALSE=
124 fi
125 MAINT=$MAINTAINER_MODE_TRUE
126 AC_SUBST(MAINTAINER_MODE_TRUE)
127 AC_SUBST(MAINTAINER_MODE_FALSE)
128 AC_SUBST(MAINT)
129 ])
130
131 dnl
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
137   yes)
138     AC_DEFINE(DELAY_INITIALIZER,1,[Define if library initialization should be delayed until first use]) ;;
139   no) ;;
140   *)  AC_MSG_ERROR(invalid option $enable_delayed_initialization for delayed-initialization) ;;
141 esac
142 dnl We always want finalization at unload time.
143 dnl
144 dnl Can we do things through gcc?
145 KRB5_AC_GCC_ATTRS
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?)
149 fi
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])
152 fi
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])
155 fi
156 ])
157
158 dnl find dlopen
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)
163 AC_SUBST(DL_LIB)
164 ])
165
166
167 dnl Hack for now.
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])
174 fi
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.
185   case "${host_os}" in
186     aix* | osf*)
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...
191       PTHREAD_LIBS=
192       PTHREAD_CFLAGS=
193       ;;
194     hpux*)
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"
199       ;;
200     solaris*)
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"
205       fi
206       ;;
207   esac
208   THREAD_SUPPORT=1
209 else
210   PTHREAD_CC="$CC"
211   PTHREAD_CFLAGS=""
212   PTHREAD_LIBS=""
213   THREAD_SUPPORT=0
214 fi
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)
221 old_CC="$CC"
222 test "$PTHREAD_CC" != "" && test "$ac_cv_c_compiler_gnu" = no && CC=$PTHREAD_CC
223 old_CFLAGS="$CFLAGS"
224 # On Solaris, -pthreads is added to CFLAGS, no extra explicit libraries.
225 CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
226 AC_SUBST(PTHREAD_CFLAGS)
227 old_LIBS="$LIBS"
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.])])
232 LIBS="$old_LIBS"
233 CC="$old_CC"
234 CFLAGS="$old_CFLAGS"
235 ])
236
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
240 dnl
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])
250 else
251   # This means that sys_errlist is not declared in errno.h, but may still
252   # be in libc.
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])
260   else
261     AC_MSG_WARN([sys_errlist is neither in errno.h nor in libc])
262   fi
263 fi])
264
265 dnl
266 dnl check for sigmask/sigprocmask -- CHECK_SIGPROCMASK
267 dnl
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])
278 fi
279 ])dnl
280 dnl
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
283 dnl
284 dnl check for <dirent.h> -- CHECK_DIRENT
285 dnl (may need to be more complex later)
286 dnl
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
289 dnl
290 dnl check if union wait is defined, or if WAIT_USES_INT -- CHECK_WAIT_TYPE
291 dnl
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
300 [AC_TRY_COMPILE(
301 [#include <sys/wait.h>], [union wait i;
302 #ifdef WEXITSTATUS
303   WEXITSTATUS (i);
304 #endif
305 ], 
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])
310 fi
311 ])dnl
312 dnl
313 dnl check for POSIX signal handling -- CHECK_SIGNALS
314 dnl
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,
319 [AC_TRY_COMPILE(
320 [#include <signal.h>],
321 [sigset_t x],
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])
326 fi
327 )])dnl
328 dnl
329 dnl check for signal type
330 dnl
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,
335 [AC_TRY_COMPILE(
336 [#include <sys/types.h>
337 #include <signal.h>
338 #ifdef signal
339 #undef signal
340 #endif
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
345    stype=void
346    AC_DEFINE(POSIX_SIGTYPE, 1, [Define if POSIX signal handlers are used])
347 else
348   if test $ac_cv_type_signal = void; then
349      stype=void
350   else
351      stype=int
352   fi
353 fi
354 AC_DEFINE_UNQUOTED(krb5_sigtype, $stype, [Define krb5_sigtype to type of signal handler])dnl
355 ])dnl
356 dnl
357 dnl check for POSIX setjmp/longjmp -- CHECK_SETJMP
358 dnl
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,
363 [AC_TRY_COMPILE(
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])
369 fi
370 )])dnl
371 dnl
372 dnl Check for IPv6 compile-time support.
373 dnl
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
379 dnl a macro
380 AC_MSG_CHECKING(for getaddrinfo)
381 AC_CACHE_VAL(ac_cv_func_getaddrinfo,
382 [AC_TRY_LINK([#ifdef HAVE_NETDB_H
383 #include <netdb.h>
384 #endif],[
385 struct addrinfo *ai;
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])
391 fi
392 dnl
393 AC_REQUIRE([KRB5_SOCKADDR_SA_LEN])dnl
394 AC_ARG_ENABLE([ipv6], , AC_MSG_WARN(enable/disable-ipv6 option is deprecated))dnl
395 KRB5_AC_CHECK_INET6
396 ])dnl
397 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'`
402 changequote([,])dnl
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"
406 AC_MSG_RESULT($x)
407 if eval test "$x" = yes ; then
408   AC_DEFINE_UNQUOTED(HAVE_`echo $varname | tr '[[[a-z]]]' '[[[A-Z]]]'`)
409 fi])
410 dnl
411 dnl
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>
416 #endif
417 #include <sys/socket.h>
418 #include <netinet/in.h>
419 ])])dnl
420 dnl
421 dnl
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
427   krb5_cv_inet6=no
428 else
429 AC_TRY_COMPILE([
430 #ifdef HAVE_SYS_TYPES_H
431 #include <sys/types.h>
432 #endif
433 #include <sys/socket.h>
434 #include <netinet/in.h>
435 #include <netdb.h>
436 ],[
437   struct sockaddr_in6 in;
438   AF_INET6;
439   IN6_IS_ADDR_LINKLOCAL (&in.sin6_addr);
440 ],krb5_cv_inet6=yes,krb5_cv_inet6=no)])
441 fi
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,[
446 old_CC="$CC"
447 CC="$CC -DINET6"
448 AC_TRY_COMPILE([
449 #ifdef HAVE_SYS_TYPES_H
450 #include <sys/types.h>
451 #endif
452 #include <sys/socket.h>
453 #include <netinet/in.h>
454 #include <netdb.h>
455 ],[
456   struct sockaddr_in6 in;
457   AF_INET6;
458   IN6_IS_ADDR_LINKLOCAL (&in.sin6_addr);
459 ],krb5_cv_inet6_with_dinet6=yes,krb5_cv_inet6_with_dinet6=no)
460 CC="$old_CC"])
461 AC_MSG_RESULT($krb5_cv_inet6_with_dinet6)
462 fi
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])
466   fi
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)])
468 fi
469 ])dnl
470 dnl
471 dnl Generic File existence tests
472 dnl 
473 dnl K5_AC_CHECK_FILE(FILE, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
474 dnl
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
483 )dnl
484   AC_MSG_ERROR(Cannot check for file existence when cross compiling)
485 else
486   if test -r $1; then
487     eval "ac_cv_file_$ac_safe=yes"
488   else
489     eval "ac_cv_file_$ac_safe=no"
490   fi
491 fi])dnl
492 if eval "test \"`echo '$ac_cv_file_'$ac_safe`\" = yes"; then
493   AC_MSG_RESULT(yes)
494   ifelse([$2], , :, [$2])
495 else
496   AC_MSG_RESULT(no)
497 ifelse([$3], , , [$3
498 np])dnl
499 fi
500 ])
501 dnl
502 dnl K5_AC_CHECK_FILES(FILE... [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
503 dnl
504 AC_DEFUN(K5_AC_CHECK_FILES,
505 [AC_REQUIRE([AC_PROG_CC])dnl
506 for ac_file in $1
507 do
508 K5_AC_CHECK_FILE($ac_file,
509 [changequote(, )dnl
510   ac_tr_file=HAVE`echo $ac_file | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
511 changequote([, ])dnl
512   AC_DEFINE_UNQUOTED($ac_tr_file) $2], $3)dnl
513 done
514 ])
515 dnl
516 dnl set $(KRB4) from --with-krb4=value -- WITH_KRB4
517 dnl
518 AC_DEFUN(WITH_KRB4,[
519 AC_ARG_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],
523 ,
524 withval=yes
525 )dnl
526 if test $withval = no; then
527         AC_MSG_NOTICE(no krb4 support)
528         KRB4_LIB=
529         KRB4_DEPLIB=
530         KRB4_INCLUDES=
531         KRB4_LIBPATH=
532         KRB_ERR_H_DEP=
533         krb5_cv_build_krb4_libs=no
534         krb5_cv_krb4_libdir=
535 else
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)'
540         KRB4_LIB=-lkrb4
541         KRB4_INCLUDES='-I$(SRCTOP)/include/kerberosIV -I$(BUILDTOP)/include/kerberosIV'
542         KRB4_LIBPATH=
543         KRB_ERR_H_DEP='$(BUILDTOP)/include/kerberosIV/krb_err.h'
544         krb5_cv_build_krb4_libs=yes
545         krb5_cv_krb4_libdir=
546  else
547         AC_MSG_NOTICE(using preinstalled krb4 in $withval)
548         KRB4_LIB="-lkrb"
549 dnl     DEPKRB4_LIB="$withval/lib/libkrb.a"
550         KRB4_INCLUDES="-I$withval/include"
551         KRB4_LIBPATH="-L$withval/lib"
552         KRB_ERR_H_DEP=
553         krb5_cv_build_krb4_libs=no
554         krb5_cv_krb4_libdir="$withval/lib"
555  fi
556 fi
557 AC_SUBST(KRB4_INCLUDES)
558 AC_SUBST(KRB4_LIBPATH)
559 AC_SUBST(KRB4_LIB)
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)'
564 DES425_LIB=-ldes425
565 AC_SUBST(DES425_DEPLIB)
566 AC_SUBST(DES425_LIB)
567 ])dnl
568 dnl
569 dnl
570 AC_DEFUN(KRB5_AC_CHECK_FOR_CFLAGS,[
571 AC_BEFORE([$0],[AC_PROG_CC])
572 krb5_ac_cflags_set=${CFLAGS+set}
573 ])
574 dnl
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
580      HAVE_GCC=yes
581      else HAVE_GCC=
582 fi
583 AC_SUBST(HAVE_GCC)
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
590   fi
591 fi])
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)
600   else
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)
607     else
608       CFLAGS="$CFLAGS -pedantic"
609     fi
610   fi
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
621     *)
622       AC_MSG_NOTICE(disabling the use of common storage on Darwin)
623       CFLAGS="$CFLAGS -fno-common"
624       ;;
625     esac
626     case "$LD $LDFLAGS" in
627     *-Wl,-search_paths_first*) ;;
628     *) LDFLAGS="${LDFLAGS} -Wl,-search_paths_first" ;;
629     esac
630   fi
631 else
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
638       *-qhalt=*) ;;
639       *)
640         CFLAGS="$CFLAGS -qhalt=e"
641         AC_MSG_NOTICE(adding -qhalt=e for better error reporting)
642         ;;
643     esac
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
649       *-O*) ;;
650       *)
651         CFLAGS="$CFLAGS -O"
652         AC_MSG_NOTICE(adding -O for inline thread-support function elimination)
653         ;;
654     esac
655   fi
656 fi
657 ])dnl
658 dnl
659 dnl
660 dnl check for yylineno -- HAVE_YYLINENO
661 dnl
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...
667   echo '%%
668 %%' | ${LEX} -t > conftest.out
669   if egrep yylineno conftest.out >/dev/null 2>&1; then
670         krb5_cv_type_yylineno=yes
671   else
672         krb5_cv_type_yylineno=no
673   fi
674   rm -f conftest.out)
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])
678   fi
679 ])dnl
680 dnl
681 dnl K5_GEN_MAKEFILE([dir, [frags]])
682 dnl
683 AC_DEFUN(K5_GEN_MAKEFILE,[dnl
684 ifelse($1, ,[_K5_GEN_MAKEFILE(.,$2)],[_K5_GEN_MAKEFILE($1,$2)])
685 ])
686 dnl
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])
694 ])
695 dnl
696 dnl K5_GEN_FILE( <ac_output arguments> )
697 dnl
698 AC_DEFUN(K5_GEN_FILE,[AC_CONFIG_FILES($1)])dnl
699 dnl
700 dnl K5_AC_OUTPUT
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
704 dnl
705 dnl V5_AC_OUTPUT_MAKEFILE
706 dnl
707 AC_DEFUN(V5_AC_OUTPUT_MAKEFILE,
708 [ifelse($1, , [_V5_AC_OUTPUT_MAKEFILE(.,$2)],[_V5_AC_OUTPUT_MAKEFILE($1,$2)])])
709 dnl
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])])
714 K5_AC_OUTPUT])dnl
715 dnl
716 dnl
717 dnl KRB5_SOCKADDR_SA_LEN: define HAVE_SA_LEN if sockaddr contains the sa_len
718 dnl component
719 dnl
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>])])
725 dnl
726 dnl
727 dnl CHECK_UTMP: check utmp structure and functions
728 dnl
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>
732 #include <utmp.h>])
733
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])
737 fi
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])
740 fi
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])
743 fi
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])
746 fi
747
748 AC_CHECK_FUNCS(setutent setutxent updwtmp updwtmpx)
749 ])dnl
750 dnl
751 dnl WITH_NETLIB
752 dnl 
753 dnl
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")
759   else
760         LIBS="$LIBS $withval"
761         AC_MSG_RESULT("netlib will use \'$withval\'")
762   fi
763 ],dnl
764 [AC_LIBRARY_NET]
765 )])dnl
766 dnl
767 dnl
768 AC_DEFUN(KRB5_AC_NEED_DAEMON, [
769 KRB5_NEED_PROTO([#ifdef HAVE_UNISTD_H
770 #include <unistd.h>
771 #endif],daemon,1)])dnl
772 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)
775 dnl
776 AC_DEFUN(AC_HEADER_STDARG, [
777
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, ...) {
783     va_list v;
784     int i;
785     va_start (v, format);
786     i = va_arg (v, int);
787     va_end (v);
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])
792 else
793
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 {
799     va_list v;
800     int i;
801     va_start (v);
802     i = va_arg (v, int);
803     va_end (v);
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])
808 else
809   AC_MSG_ERROR(Neither stdarg nor varargs compile?)
810 fi
811
812 fi dnl stdarg test failure
813
814 ])dnl
815
816 dnl
817 dnl KRB5_AC_NEED_LIBGEN --- check if libgen needs to be linked in for
818 dnl                             compile/step    
819 dnl
820 dnl
821 AC_DEFUN(KRB5_AC_NEED_LIBGEN,[
822 AC_REQUIRE([AC_PROG_CC])dnl
823 dnl
824 dnl regcomp is present but non-functional on Solaris 2.4
825 dnl
826 AC_MSG_CHECKING(for working regcomp)
827 AC_CACHE_VAL(ac_cv_func_regcomp,[
828 AC_TRY_RUN([
829 #include <sys/types.h>
830 #include <regex.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])
836 dnl
837 dnl Check for the compile and step functions - only if regcomp is not available
838 dnl
839 if test $ac_cv_func_regcomp = no; then
840  save_LIBS="$LIBS"
841  LIBS=-lgen
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)
845  LIBS="$save_LIBS"
846 dnl
847 dnl Set GEN_LIB if necessary 
848 dnl
849  AC_CHECK_LIB(gen, compile, GEN_LIB=-lgen, GEN_LIB=)
850  AC_SUBST(GEN_LIB)
851 fi
852 ])
853 dnl
854 dnl KRB5_AC_REGEX_FUNCS --- check for different regular expression 
855 dnl                             support functions
856 dnl
857 AC_DEFUN(KRB5_AC_REGEX_FUNCS,[
858 AC_CHECK_FUNCS(re_comp re_exec regexec)
859 AC_REQUIRE([KRB5_AC_NEED_LIBGEN])dnl
860 ])dnl
861 dnl
862 dnl AC_KRB5_TCL_FIND_CONFIG (uses tcl_dir)
863 dnl
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"
871 else
872   tcl_conf=
873   lib="$tcl_dir/lib"
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"
878     fi
879   done
880   changequote([,])dnl
881 fi
882 if test -n "$tcl_conf" ; then
883   AC_MSG_RESULT($tcl_conf)
884 else
885   AC_MSG_RESULT(not found)
886 fi
887 tcl_ok_conf=
888 tcl_vers_maj=
889 tcl_vers_min=
890 old_CPPFLAGS=$CPPFLAGS
891 old_LIBS=$LIBS
892 old_LDFLAGS=$LDFLAGS
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)
897     . $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"
905           break
906         fi
907       done
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 ();],
911         tcl_ok_conf=$file
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)
916       )
917     else
918       AC_MSG_RESULT(older version $v)
919     fi
920   done
921 fi
922 CPPFLAGS=$old_CPPFLAGS
923 LIBS=$old_LIBS
924 LDFLAGS=$old_LDFLAGS
925 tcl_header=no
926 tcl_lib=no
927 if test -n "$tcl_ok_conf" ; then
928   . $tcl_ok_conf
929   TCL_INCLUDES=
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
934       fi
935       break
936     fi
937   done
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"
945   else
946     TCL_MAYBE_RPATH=
947   fi
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)
952   fi
953   CPPFLAGS="$old_CPPFLAGS"
954   tcl_lib=yes
955 else
956   # If we read a tclConfig.sh file, it probably set this.
957   TCL_LIBS=
958 fi  
959 AC_SUBST(TCL_INCLUDES)
960 AC_SUBST(TCL_LIBS)
961 AC_SUBST(TCL_LIBPATH)
962 AC_SUBST(TCL_RPATH)
963 AC_SUBST(TCL_MAYBE_RPATH)
964 ])dnl
965 dnl
966 dnl AC_KRB5_TCL_TRYOLD
967 dnl attempt to use old search algorithm for locating tcl
968 dnl
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
976 fi
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"
982         tcl_header=no
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)
986         fi
987
988         if test $tcl_header = yes ; then
989                 tcl_lib=no
990
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)
995                 fi
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)
1000                 fi
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)
1005
1006                 fi
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)
1011
1012                 fi
1013                 if test $tcl_lib = no ; then            
1014                         AC_MSG_WARN("tcl.h found but not library")
1015                 fi
1016         else
1017                 AC_MSG_WARN(Could not find Tcl which is needed for the kadm5 tests)
1018                 TCL_LIBS=
1019         fi
1020         CPPFLAGS="$krb5_save_CPPFLAGS"
1021         LDFLAGS="$krb5_save_LDFLAGS"
1022         AC_SUBST(TCL_INCLUDES)
1023         AC_SUBST(TCL_LIBS)
1024         AC_SUBST(TCL_LIBPATH)
1025         AC_SUBST(TCL_RPATH)
1026 else
1027         AC_MSG_RESULT("Not looking for Tcl library")
1028 fi
1029 ])dnl
1030 dnl
1031 dnl AC_KRB5_TCL - determine if the TCL library is present on system
1032 dnl
1033 AC_DEFUN(AC_KRB5_TCL,[
1034 TCL_INCLUDES=
1035 TCL_LIBPATH=
1036 TCL_RPATH=
1037 TCL_LIBS=
1038 TCL_WITH=
1039 tcl_dir=
1040 AC_ARG_WITH(tcl,
1041 [  --with-tcl=path         where Tcl resides], , with_tcl=try)
1042 if test "$with_tcl" = no ; then
1043   true
1044 elif test "$with_tcl" = yes -o "$with_tcl" = try ; then
1045   tcl_dir=/usr
1046   if test ! -r /usr/lib/tclConfig.sh; then
1047     cat >> conftest <<\EOF
1048 puts "tcl_dir=$tcl_library"
1049 EOF
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`
1053         tcl_dir=$t
1054       fi
1055     fi # tclsh ran script okay
1056   rm -f conftest conftest.out
1057   fi # no /usr/lib/tclConfig.sh
1058 else
1059   tcl_dir=$with_tcl
1060 fi
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
1065       AC_KRB5_TCL_TRYOLD
1066     else
1067       AC_MSG_WARN(Could not find Tcl which is needed for some tests)
1068     fi
1069   fi
1070 fi
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)
1075   fi
1076 fi
1077 ])dnl
1078
1079 dnl
1080 dnl WITH_HESIOD
1081 dnl
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"
1090         else
1091                 HESIOD_LIBS="-lhesiod $res_lib"
1092         fi
1093 else
1094         HESIOD_DEFS=
1095         HESIOD_LIBS=
1096 fi
1097 AC_SUBST(HESIOD_DEFS)
1098 AC_SUBST(HESIOD_LIBS)])
1099
1100
1101 dnl
1102 dnl KRB5_BUILD_LIBRARY
1103 dnl
1104 dnl Pull in the necessary stuff to create the libraries.
1105
1106 AC_DEFUN(KRB5_BUILD_LIBRARY,
1107 [KRB5_BUILD_LIBRARY_WITH_DEPS
1108 # null out SHLIB_EXPFLAGS because we lack any dependencies
1109 SHLIB_EXPFLAGS=])
1110
1111 dnl
1112 dnl KRB5_BUILD_LIBRARY_STATIC
1113 dnl
1114 dnl Force static library build.
1115
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
1122 KRB5_BUILD_LIBRARY
1123 # If we're only building static libraries, they're for build-time use only,
1124 # so don't install.
1125 LIBINSTLIST=])
1126
1127 dnl
1128 dnl KRB5_BUILD_LIBRARY_WITH_DEPS
1129 dnl
1130 dnl Like KRB5_BUILD_LIBRARY, but adds in explicit dependencies in the
1131 dnl generated shared library.
1132
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.)
1144 fi
1145 AC_SUBST(LIBLIST)
1146 AC_SUBST(LIBLINKS)
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)
1153 AC_SUBST(STLIBEXT)
1154 AC_SUBST(SHLIBEXT)
1155 AC_SUBST(SHLIBVEXT)
1156 AC_SUBST(SHLIBSEXT)
1157 AC_SUBST(DEPLIBEXT)
1158 AC_SUBST(PFLIBEXT)
1159 AC_SUBST(LIBINSTLIST)
1160 AC_SUBST(DYNOBJEXT)
1161 AC_SUBST(MAKE_DYNOBJ_COMMAND)
1162 ])
1163
1164 dnl
1165 dnl KRB5_BUILD_LIBOBJS
1166 dnl
1167 dnl Pull in the necessary stuff to build library objects.
1168
1169 AC_DEFUN(KRB5_BUILD_LIBOBJS,
1170 [AC_REQUIRE([KRB5_LIB_AUX])dnl
1171 AC_SUBST(OBJLISTS)
1172 AC_SUBST(STOBJEXT)
1173 AC_SUBST(SHOBJEXT)
1174 AC_SUBST(PFOBJEXT)
1175 AC_SUBST(PICFLAGS)
1176 AC_SUBST(PROFFLAGS)])
1177
1178 dnl
1179 dnl KRB5_BUILD_PROGRAM
1180 dnl
1181 dnl Set variables to build a program.
1182
1183 AC_DEFUN(KRB5_BUILD_PROGRAM,
1184 [AC_REQUIRE([KRB5_LIB_AUX])dnl
1185 AC_REQUIRE([KRB5_AC_NEED_LIBGEN])dnl
1186 AC_SUBST(CC_LINK)
1187 AC_SUBST(RPATH_FLAG)
1188 AC_SUBST(DEPLIBEXT)])
1189
1190 dnl
1191 dnl KRB5_RUN_FLAGS
1192 dnl
1193 dnl Set up environment for running dynamic executables out of build tree
1194
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)])
1199
1200 dnl
1201 dnl KRB5_LIB_AUX
1202 dnl
1203 dnl Parse configure options related to library building.
1204
1205 AC_DEFUN(KRB5_LIB_AUX,
1206 [AC_REQUIRE([KRB5_LIB_PARAMS])dnl
1207
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])
1213
1214 if test "$enable_static" = no && test "$krb5_force_static" != yes; then
1215         AC_MSG_NOTICE([disabling static libraries])
1216         LIBLINKS=
1217         LIBLIST=
1218         OBJLISTS=
1219 else
1220         LIBLIST='lib$(LIBBASE)$(STLIBEXT)'
1221         LIBLINKS='$(TOPLIBD)/lib$(LIBBASE)$(STLIBEXT)'
1222         OBJLISTS=OBJS.ST
1223         LIBINSTLIST=install-static
1224         DEPLIBEXT=$STLIBEXT
1225 #       CFLAGS="$CFLAGS -D_KDB5_STATIC_LINK"
1226 fi
1227
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])
1233
1234 if test "$enable_shared" = yes; then
1235         case "$SHLIBEXT" in
1236         .so-nobuild)
1237                 AC_MSG_WARN([shared libraries not supported on this architecture])
1238                 RUN_ENV=
1239                 CC_LINK="$CC_LINK_STATIC"
1240                 ;;
1241         *)
1242                 # set this now because some logic below may reset SHLIBEXT
1243                 DEPLIBEXT=$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
1250                 else
1251                         AC_MSG_NOTICE([enabling shared libraries])
1252                         # Clear some stuff in case of AIX, etc.
1253                         if test "$STLIBEXT" = "$SHLIBEXT" ; then
1254                                 STLIBEXT=.a-nobuild
1255                                 LIBLIST=
1256                                 LIBLINKS=
1257                                 OBJLISTS=
1258                                 LIBINSTLIST=
1259                         fi
1260                         LIBLIST="$LIBLIST "'lib$(LIBBASE)$(SHLIBEXT)'
1261                         LIBLINKS="$LIBLINKS "'$(TOPLIBD)/lib$(LIBBASE)$(SHLIBEXT) $(TOPLIBD)/lib$(LIBBASE)$(SHLIBVEXT)'
1262                         case "$SHLIBSEXT" in
1263                         .so.s-nobuild)
1264                                 LIBINSTLIST="$LIBINSTLIST install-shared"
1265                                 ;;
1266                         *)
1267                                 LIBLIST="$LIBLIST "'lib$(LIBBASE)$(SHLIBSEXT)'
1268                                 LIBLINKS="$LIBLINKS "'$(TOPLIBD)/lib$(LIBBASE)$(SHLIBSEXT)'
1269                                 LIBINSTLIST="$LIBINSTLIST install-shlib-soname"
1270                                 ;;
1271                         esac
1272                         OBJLISTS="$OBJLISTS OBJS.SH"
1273                 fi
1274                 CC_LINK="$CC_LINK_SHARED"
1275                 ;;
1276         esac
1277 else
1278         RUN_ENV=
1279         CC_LINK="$CC_LINK_STATIC"
1280         SHLIBEXT=.so-nobuild
1281         SHLIBVEXT=.so.v-nobuild
1282         SHLIBSEXT=.so.s-nobuild
1283 fi
1284
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"
1288 fi
1289
1290 if test -z "$LIBLIST"; then
1291         AC_MSG_ERROR([must enable one of shared or static libraries])
1292 fi
1293
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
1298         case $PFLIBEXT in
1299         .po-nobuild)
1300                 AC_MSG_WARN([Profiled libraries not supported on this architecture.])
1301                 ;;
1302         *)
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"
1308                 ;;
1309         esac
1310 fi])])
1311
1312 dnl
1313 dnl KRB5_LIB_PARAMS
1314 dnl
1315 dnl Determine parameters related to libraries, e.g. various extensions.
1316
1317 AC_DEFUN(KRB5_LIB_PARAMS,
1318 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
1319 krb5_cv_host=$host
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])
1324 dnl
1325 dnl The following was written by jhawk@mit.edu
1326 dnl
1327 dnl AC_LIBRARY_NET: Id: net.m4,v 1.4 1997/10/25 20:49:53 jhawk Exp 
1328 dnl
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
1334 dnl IRIX).
1335 dnl 
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.
1341 dnl 
1342 dnl This test exists so that every application developer does not test this in
1343 dnl a different, and subtly broken fashion.
1344 dnl 
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.
1354 dnl
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).
1357 dnl
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" )],
1373              -lnsl)
1374        ])
1375      ])
1376    ])
1377   AC_CHECK_FUNC(socket, , AC_CHECK_LIB(socket, socket, ,
1378     AC_CHECK_LIB(socket, socket, LIBS="-lsocket -lnsl $LIBS", , -lnsl)))
1379   KRB5_AC_ENABLE_DNS
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)
1384
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])])
1394     fi
1395   fi
1396 ])
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)
1403 done
1404 ])
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
1409 # function.
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>],
1415 [/*
1416  * Use volatile, or else optimization can cause false positives.
1417  */
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
1424 ])
1425 dnl
1426 dnl
1427 dnl KRB5_AC_ENABLE_DNS
1428 dnl
1429 AC_DEFUN(KRB5_AC_ENABLE_DNS, [
1430 enable_dns=yes
1431 enable_dns_for_kdc=yes
1432 AC_DEFINE(KRB5_DNS_LOOKUP_KDC,1,[Define to enable DNS lookups of Kerberos KDCs])
1433
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])
1439   fi
1440
1441 AC_DEFINE(KRB5_DNS_LOOKUP, 1,[Define for DNS support of locating realms and KDCs])
1442
1443 ])
1444 dnl
1445 dnl
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 
1448 dnl system.
1449 dnl
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.
1454 dnl
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*);
1461 $2(&xx);
1462 ],
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()])
1467 fi
1468 ifelse([$3], ,[fi])
1469 ])
1470 dnl
1471 dnl =============================================================
1472 dnl Internal function for testing for getpeername prototype
1473 dnl
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.])
1477 ])
1478 dnl
1479 dnl =============================================================
1480 dnl Internal function for testing for getsockname arguments
1481 dnl
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,
1486 [
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
1493         AC_MSG_RESULT(yes)
1494         sock_set=yes; res1="$1"; res2="$2"
1495 else
1496         AC_MSG_RESULT(no)
1497 fi
1498 ])
1499 dnl
1500 dnl Determines the types of the second and third arguments to getsockname().
1501 dnl
1502 AC_DEFUN([KRB5_GETSOCKNAME_ARGS],[
1503 sock_set=no
1504 for sock_arg1 in "struct sockaddr *" "void *"
1505 do
1506   for sock_arg2 in "size_t *" "int *" "socklen_t *"
1507   do
1508         if test $sock_set = no; then
1509           TRY_GETSOCK_INT($sock_arg1, $sock_arg2)
1510         fi
1511   done 
1512 done
1513 if test "$sock_set" = no; then
1514   AC_MSG_NOTICE(assuming struct sockaddr and socklen_t for getsockname args)
1515   res1="struct sockaddr *"
1516   res2="socklen_t *"
1517 fi
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])
1522 ])
1523 dnl
1524 dnl
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
1530   COM_ERR_VERSION=sys
1531   AC_MSG_RESULT(system)
1532 else
1533   COM_ERR_VERSION=k5
1534   AC_MSG_RESULT(krb5)
1535 fi
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
1542 error_table foo
1543 error_code ERR_FOO, "foo"
1544 end
1545 EOF
1546   AC_CHECK_PROGS(compile_et,compile_et,false)
1547   if test "$compile_et" = false; then
1548     AC_MSG_ERROR(cannot find compile_et)
1549   fi
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)
1553   fi
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
1560   ])
1561 fi
1562 AC_SUBST(COM_ERR_VERSION)
1563 ])
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
1570   SS_VERSION=sys
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
1575   old_LIBS="$LIBS"
1576   LIBS="$LIBS $SS_LIB"
1577   AC_CACHE_CHECK(whether system ss package works, krb5_cv_system_ss_okay,[
1578   AC_TRY_RUN([
1579 #include <ss/ss.h>
1580 int main(int argc, char *argv[]) {
1581   if (argc == 42) {
1582     int i, err;
1583     i = ss_create_invocation("foo","foo","",0,&err);
1584     ss_listen(i);
1585   }
1586   return 0;
1587 }], krb5_cv_system_ss_okay=yes, AC_MSG_ERROR(cannot run test program),
1588   krb5_cv_system_ss_okay="assumed")])
1589   LIBS="$old_LIBS"
1590 else
1591   SS_VERSION=k5
1592   AC_MSG_RESULT(krb5)
1593 fi
1594 AC_SUBST(SS_LIB)
1595 AC_SUBST(SS_VERSION)
1596 ])
1597 dnl
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
1604   DB_VERSION=sys
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.
1609   #
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
1613   #
1614   if test "x${DB_HEADER}" = xdb.h ; then
1615     DB_HEADER_VERSION=sys
1616   else
1617     DB_HEADER_VERSION=redirect
1618   fi
1619   KDB5_DB_LIB="$DB_LIB"
1620 else
1621   DB_VERSION=k5
1622   AC_DEFINE(HAVE_BT_RSEQ,1,[Define if bt_rseq is available, for recursive btree traversal.])
1623   DB_HEADER=db.h
1624   DB_HEADER_VERSION=k5
1625   # libdb gets sucked into libkdb
1626   KDB5_DB_LIB=
1627   # needed for a couple of things that need libdb for its own sake
1628   DB_LIB=-ldb
1629 fi
1630 AC_SUBST(DB_VERSION)
1631 AC_SUBST(DB_HEADER)
1632 AC_SUBST(DB_HEADER_VERSION)
1633 AC_SUBST(DB_LIB)
1634 AC_SUBST(KDB5_DB_LIB)
1635 ])
1636 dnl
1637 dnl KRB5_AC_PRIOCNTL_HACK
1638 dnl
1639 dnl
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
1645 *-*-solaris2.9*)
1646         if test "$cross_compiling" = yes; then
1647                 krb5_cv_priocntl_hack=yes
1648         else
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
1658                 else
1659                         krb5_cv_priocntl_hack=yes
1660                 fi
1661         fi
1662         ;;
1663 *)
1664         krb5_cv_priocntl_hack=no
1665         ;;
1666 esac])
1667 if test "$krb5_cv_priocntl_hack" = yes; then
1668         PRIOCNTL_HACK=1
1669 else
1670         PRIOCNTL_HACK=0
1671 fi
1672 AC_SUBST(PRIOCNTL_HACK)])
1673 dnl
1674 dnl
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?)
1681 fi
1682 true > conftest.1
1683 true > conftest.2
1684 if test -r conftest.1 && test -r conftest.2 ; then true ; else
1685   AC_MSG_ERROR(write error in local file system?)
1686 fi
1687 a=no
1688 b=no
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
1698 *-*-aix4.*)
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
1703         # destructor.
1704         #
1705         # That counts as "not working", for me, but it's a much more
1706         # complicated test case to set up.
1707         b=no
1708         ;;
1709 esac
1710 krb5_cv_attr_constructor_destructor="$a,$b"
1711 ])
1712 # Okay, krb5_cv_... should be set now.
1713 case $krb5_cv_attr_constructor_destructor in
1714   yes,*)
1715     AC_DEFINE(CONSTRUCTOR_ATTR_WORKS,1,[Define if __attribute__((constructor)) works]) ;;
1716 esac
1717 case $krb5_cv_attr_constructor_destructor in
1718   *,yes)
1719     AC_DEFINE(DESTRUCTOR_ATTR_WORKS,1,[Define if __attribute__((destructor)) works]) ;;
1720 esac
1721 dnl End of attributes we care about right now.
1722 ])
1723 dnl
1724 dnl
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])
1734 fi])
1735 dnl
1736 dnl
1737 m4_include(config/ac-archive/acx_pthread.m4)
1738 #
1739 # KRB5_AC_LIBUTIL
1740 #
1741 # Check for libutil, for NetBSD, et al.; needed for openpty() and
1742 # logwtmp() on some platforms.
1743 #
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
1748 AC_SUBST(UTIL_LIB)
1749 ])