For Sun Studio compilers, set WARN_CFLAGS to emit warning tag names
[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, 2007, 2008
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 stuff for now
82 dnl AC_DEFINE([KRB5_DEPRECATED], 1, [Define only if building in-tree])
83 AC_C_CONST dnl
84 WITH_NETLIB dnl
85 WITH_HESIOD dnl
86 KRB5_AC_MAINTAINER_MODE dnl
87 AC_ARG_PROGRAM dnl
88 dnl
89 dnl This identifies the top of the source tree relative to the directory 
90 dnl in which the configure file lives.
91 dnl
92 CONFIG_RELTOPDIR=$ac_reltopdir
93 AC_SUBST(CONFIG_RELTOPDIR)
94 AC_SUBST(subdirs)
95 lib_frag=$srcdir/$ac_config_fragdir/lib.in
96 AC_SUBST_FILE(lib_frag)
97 libobj_frag=$srcdir/$ac_config_fragdir/libobj.in
98 AC_SUBST_FILE(libobj_frag)
99 libnover_frag=$srcdir/$ac_config_fragdir/libnover.in
100 AC_SUBST_FILE(libnover_frag)
101 libpriv_frag=$srcdir/$ac_config_fragdir/libpriv.in
102 AC_SUBST_FILE(libpriv_frag)
103 libnodeps_frag=$srcdir/$ac_config_fragdir/libnodeps.in
104 AC_SUBST_FILE(libnodeps_frag)
105 dnl
106 KRB5_AC_PRAGMA_WEAK_REF
107 WITH_LDAP
108 KRB5_LIB_PARAMS
109 KRB5_AC_INITFINI
110 KRB5_AC_ENABLE_THREADS
111 KRB5_AC_FIND_DLOPEN
112 KRB5_AC_KEYRING_CCACHE
113 ])dnl
114
115 dnl Maintainer mode, akin to what automake provides, 'cept we don't
116 dnl want to use automake right now.
117 AC_DEFUN([KRB5_AC_MAINTAINER_MODE],
118 [AC_ARG_ENABLE([maintainer-mode],
119 AC_HELP_STRING([--enable-maintainer-mode],[enable rebuilding of source files, Makefiles, etc]),
120 USE_MAINTAINER_MODE=$enableval,
121 USE_MAINTAINER_MODE=no)
122 if test "$USE_MAINTAINER_MODE" = yes; then
123   MAINTAINER_MODE_TRUE=
124   MAINTAINER_MODE_FALSE='#'
125   AC_MSG_NOTICE(enabling maintainer mode)
126 else
127   MAINTAINER_MODE_TRUE='#'
128   MAINTAINER_MODE_FALSE=
129 fi
130 MAINT=$MAINTAINER_MODE_TRUE
131 AC_SUBST(MAINTAINER_MODE_TRUE)
132 AC_SUBST(MAINTAINER_MODE_FALSE)
133 AC_SUBST(MAINT)
134 ])
135
136 dnl
137 AC_DEFUN([KRB5_AC_INITFINI],[
138 dnl Do we want initialization at load time?
139 AC_ARG_ENABLE([delayed-initialization],
140 AC_HELP_STRING([--disable-delayed-initialization],initialize library code when loaded @<:@delay until first use@:>@), , enable_delayed_initialization=yes)
141 case "$enable_delayed_initialization" in
142   yes)
143     AC_DEFINE(DELAY_INITIALIZER,1,[Define if library initialization should be delayed until first use]) ;;
144   no) ;;
145   *)  AC_MSG_ERROR(invalid option $enable_delayed_initialization for delayed-initialization) ;;
146 esac
147 dnl We always want finalization at unload time.
148 dnl
149 dnl Can we do things through gcc?
150 KRB5_AC_GCC_ATTRS
151 dnl How about with the linker?
152 if test -z "$use_linker_init_option" ; then
153   AC_MSG_ERROR(ran INITFINI before checking shlib.conf?)
154 fi
155 if test "$use_linker_init_option" = yes; then
156   AC_DEFINE(USE_LINKER_INIT_OPTION,1,[Define if link-time options for library initialization will be used])
157 fi
158 if test "$use_linker_fini_option" = yes; then
159   AC_DEFINE(USE_LINKER_FINI_OPTION,1,[Define if link-time options for library finalization will be used])
160 fi
161 ])
162
163 dnl find dlopen
164 AC_DEFUN([KRB5_AC_FIND_DLOPEN],[
165 old_LIBS="$LIBS"
166 DL_LIB=
167 AC_SEARCH_LIBS(dlopen, dl, [
168 if test "$ac_cv_search_dlopen" != "none required"; then
169   DL_LIB=$ac_cv_search_dlopen
170 fi
171 LIBS="$old_LIBS"
172 AC_DEFINE(USE_DLOPEN,1,[Define if dlopen should be used])])
173 AC_SUBST(DL_LIB)
174 ])
175
176
177 dnl Hack for now.
178 AC_DEFUN([KRB5_AC_ENABLE_THREADS],[
179 AC_ARG_ENABLE([thread-support],
180 AC_HELP_STRING([--disable-thread-support],don't enable thread support @<:@enabled@:>@), , enable_thread_support=yes)
181 if test "$enable_thread_support" = yes ; then
182   AC_MSG_NOTICE(enabling thread support)
183   AC_DEFINE(ENABLE_THREADS,1,[Define if thread support enabled])
184 fi
185 dnl Maybe this should be inside the conditional above?  Doesn't cache....
186 if test "$enable_thread_support" = yes; then
187   ACX_PTHREAD(,[AC_MSG_ERROR([cannot determine options for enabling thread support; try --disable-thread-support])])
188   AC_MSG_NOTICE(PTHREAD_CC = $PTHREAD_CC)
189   AC_MSG_NOTICE(PTHREAD_CFLAGS = $PTHREAD_CFLAGS)
190   AC_MSG_NOTICE(PTHREAD_LIBS = $PTHREAD_LIBS)
191   dnl Not really needed -- if pthread.h isn't found, ACX_PTHREAD will fail.
192   dnl AC_CHECK_HEADERS(pthread.h)
193   # AIX and Tru64 don't support weak references, and don't have
194   # stub versions of the pthread code in libc.
195   case "${host_os}" in
196     aix* | osf*)
197       # On these platforms, we'll always pull in the thread support.
198       LIBS="$LIBS $PTHREAD_LIBS"
199       CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
200       # We don't need to sometimes add the flags we've just folded in...
201       PTHREAD_LIBS=
202       PTHREAD_CFLAGS=
203       ;;
204     hpux*)
205       # These are the flags that "gcc -pthread" adds.  But we don't
206       # want "-pthread" because that has link-time effects, and we
207       # don't exclude CFLAGS when linking.  *sigh*
208       PTHREAD_CFLAGS="-D_REENTRANT -D_THREAD_SAFE -D_POSIX_C_SOURCE=199506L"
209       ;;
210     solaris2.[1-9])
211       # On Solaris 10 with gcc 3.4.3, the autoconf archive macro doesn't
212       # get the right result.   XXX What about Solaris 9 and earlier?
213       if test "$GCC" = yes ; then
214         PTHREAD_CFLAGS="-D_REENTRANT -pthreads"
215       fi
216       ;;
217     solaris*)
218       # On Solaris 10 with gcc 3.4.3, the autoconf archive macro doesn't
219       # get the right result.
220       if test "$GCC" = yes ; then
221         PTHREAD_CFLAGS="-D_REENTRANT -pthreads"
222       fi
223       # On Solaris 10, the thread support is always available in libc.
224       AC_DEFINE(NO_WEAK_PTHREADS,1,[Define if references to pthread routines should be non-weak.])
225       ;;
226   esac
227   THREAD_SUPPORT=1
228 else
229   PTHREAD_CC="$CC"
230   PTHREAD_CFLAGS=""
231   PTHREAD_LIBS=""
232   THREAD_SUPPORT=0
233 fi
234 AC_SUBST(THREAD_SUPPORT)
235 dnl We want to know where these routines live, so on systems with weak
236 dnl reference support we can figure out whether or not the pthread library
237 dnl has been linked in.
238 dnl If we don't add any libraries for thread support, don't bother.
239 AC_CHECK_FUNCS(pthread_once pthread_rwlock_init)
240 old_CC="$CC"
241 test "$PTHREAD_CC" != "" && test "$ac_cv_c_compiler_gnu" = no && CC=$PTHREAD_CC
242 old_CFLAGS="$CFLAGS"
243 # On Solaris, -pthreads is added to CFLAGS, no extra explicit libraries.
244 CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
245 AC_SUBST(PTHREAD_CFLAGS)
246 old_LIBS="$LIBS"
247 LIBS="$PTHREAD_LIBS $LIBS"
248 AC_MSG_NOTICE(rechecking with PTHREAD_... options)
249 AC_CHECK_LIB(c, pthread_rwlock_init,
250   [AC_DEFINE(HAVE_PTHREAD_RWLOCK_INIT_IN_THREAD_LIB,1,[Define if pthread_rwlock_init is provided in the thread library.])])
251 LIBS="$old_LIBS"
252 CC="$old_CC"
253 CFLAGS="$old_CFLAGS"
254 ])
255
256 dnl This is somewhat gross and should go away when the build system
257 dnl is revamped. -- tlyu
258 dnl DECLARE_SYS_ERRLIST - check for sys_errlist in libc
259 dnl
260 AC_DEFUN([DECLARE_SYS_ERRLIST],
261 [AC_CACHE_CHECK([for sys_errlist declaration], krb5_cv_decl_sys_errlist,
262 [AC_TRY_COMPILE([#include <stdio.h>
263 #include <errno.h>], [1+sys_nerr;],
264 krb5_cv_decl_sys_errlist=yes, krb5_cv_decl_sys_errlist=no)])
265 # assume sys_nerr won't be declared w/o being in libc
266 if test $krb5_cv_decl_sys_errlist = yes; then
267   AC_DEFINE(SYS_ERRLIST_DECLARED,1,[Define if sys_errlist is defined in errno.h])
268   AC_DEFINE(HAVE_SYS_ERRLIST,1,[Define if sys_errlist in libc])
269 else
270   # This means that sys_errlist is not declared in errno.h, but may still
271   # be in libc.
272   AC_CACHE_CHECK([for sys_errlist in libc], krb5_cv_var_sys_errlist,
273   [AC_TRY_LINK([extern int sys_nerr;], [if (1+sys_nerr < 0) return 1;],
274   krb5_cv_var_sys_errlist=yes, krb5_cv_var_sys_errlist=no;)])
275   if test $krb5_cv_var_sys_errlist = yes; then
276     AC_DEFINE(HAVE_SYS_ERRLIST,1,[Define if sys_errlist in libc])
277     # Do this cruft for backwards compatibility for now.
278     AC_DEFINE(NEED_SYS_ERRLIST,1,[Define if need to declare sys_errlist])
279   else
280     AC_MSG_WARN([sys_errlist is neither in errno.h nor in libc])
281   fi
282 fi])
283
284 dnl
285 dnl check for sigmask/sigprocmask -- CHECK_SIGPROCMASK
286 dnl
287 AC_DEFUN(CHECK_SIGPROCMASK,[
288 AC_MSG_CHECKING([for use of sigprocmask])
289 AC_CACHE_VAL(krb5_cv_func_sigprocmask_use,
290 [AC_TRY_LINK([#include <signal.h>], [sigprocmask(SIG_SETMASK,0,0);],
291  krb5_cv_func_sigprocmask_use=yes,
292 AC_TRY_LINK([#include <signal.h>], [sigmask(1);], 
293  krb5_cv_func_sigprocmask_use=no, krb5_cv_func_sigprocmask_use=yes))])
294 AC_MSG_RESULT($krb5_cv_func_sigprocmask_use)
295 if test $krb5_cv_func_sigprocmask_use = yes; then
296  AC_DEFINE(USE_SIGPROCMASK,1,[Define if sigprocmask should be used])
297 fi
298 ])dnl
299 dnl
300 AC_DEFUN(AC_PROG_ARCHIVE, [AC_CHECK_PROG(ARCHIVE, ar, ar cqv, false)])dnl
301 AC_DEFUN(AC_PROG_ARCHIVE_ADD, [AC_CHECK_PROG(ARADD, ar, ar cruv, false)])dnl
302 dnl
303 dnl check for <dirent.h> -- CHECK_DIRENT
304 dnl (may need to be more complex later)
305 dnl
306 AC_DEFUN(CHECK_DIRENT,[
307 AC_CHECK_HEADER(dirent.h,AC_DEFINE(USE_DIRENT_H,1,[Define if you have dirent.h functionality]))])dnl
308 dnl
309 dnl check if union wait is defined, or if WAIT_USES_INT -- CHECK_WAIT_TYPE
310 dnl
311 AC_DEFUN(CHECK_WAIT_TYPE,[
312 AC_MSG_CHECKING([if argument to wait is int *])
313 AC_CACHE_VAL(krb5_cv_struct_wait,
314 dnl Test for prototype clash - if there is none - then assume int * works
315 [AC_TRY_COMPILE([#include <sys/types.h>
316 #include <sys/wait.h>
317 extern pid_t wait(int *);],[], krb5_cv_struct_wait=no,dnl
318 dnl Else fallback on old stuff
319 [AC_TRY_COMPILE(
320 [#include <sys/wait.h>], [union wait i;
321 #ifdef WEXITSTATUS
322   WEXITSTATUS (i);
323 #endif
324 ], 
325         krb5_cv_struct_wait=yes, krb5_cv_struct_wait=no)])])
326 AC_MSG_RESULT($krb5_cv_struct_wait)
327 if test $krb5_cv_struct_wait = no; then
328         AC_DEFINE(WAIT_USES_INT,1,[Define if wait takes int as a argument])
329 fi
330 ])dnl
331 dnl
332 dnl check for POSIX signal handling -- CHECK_SIGNALS
333 dnl
334 AC_DEFUN(CHECK_SIGNALS,[
335 AC_CHECK_FUNC(sigprocmask,
336 AC_MSG_CHECKING(for sigset_t and POSIX_SIGNALS)
337 AC_CACHE_VAL(krb5_cv_type_sigset_t,
338 [AC_TRY_COMPILE(
339 [#include <signal.h>],
340 [sigset_t x],
341 krb5_cv_type_sigset_t=yes, krb5_cv_type_sigset_t=no)])
342 AC_MSG_RESULT($krb5_cv_type_sigset_t)
343 if test $krb5_cv_type_sigset_t = yes; then
344   AC_DEFINE(POSIX_SIGNALS,1,[Define if POSIX signal handling is used])
345 fi
346 )])dnl
347 dnl
348 dnl check for signal type
349 dnl
350 dnl AC_RETSIGTYPE isn't quite right, but almost.
351 AC_DEFUN(KRB5_SIGTYPE,[
352 AC_MSG_CHECKING([POSIX signal handlers])
353 AC_CACHE_VAL(krb5_cv_has_posix_signals,
354 [AC_TRY_COMPILE(
355 [#include <sys/types.h>
356 #include <signal.h>
357 #ifdef signal
358 #undef signal
359 #endif
360 extern void (*signal ()) ();], [],
361 krb5_cv_has_posix_signals=yes, krb5_cv_has_posix_signals=no)])
362 AC_MSG_RESULT($krb5_cv_has_posix_signals)
363 if test $krb5_cv_has_posix_signals = yes; then
364    stype=void
365    AC_DEFINE(POSIX_SIGTYPE, 1, [Define if POSIX signal handlers are used])
366 else
367   if test $ac_cv_type_signal = void; then
368      stype=void
369   else
370      stype=int
371   fi
372 fi
373 AC_DEFINE_UNQUOTED(krb5_sigtype, $stype, [Define krb5_sigtype to type of signal handler])dnl
374 ])dnl
375 dnl
376 dnl check for POSIX setjmp/longjmp -- CHECK_SETJMP
377 dnl
378 AC_DEFUN(CHECK_SETJMP,[
379 AC_CHECK_FUNC(sigsetjmp,
380 AC_MSG_CHECKING(for sigjmp_buf)
381 AC_CACHE_VAL(krb5_cv_struct_sigjmp_buf,
382 [AC_TRY_COMPILE(
383 [#include <setjmp.h>],[sigjmp_buf x],
384 krb5_cv_struct_sigjmp_buf=yes,krb5_cv_struct_sigjmp_buf=no)])
385 AC_MSG_RESULT($krb5_cv_struct_sigjmp_buf)
386 if test $krb5_cv_struct_sigjmp_buf = yes; then
387   AC_DEFINE(POSIX_SETJMP,1,[Define if setjmp indicates POSIX interface])
388 fi
389 )])dnl
390 dnl
391 dnl Check for IPv6 compile-time support.
392 dnl
393 AC_DEFUN(KRB5_AC_INET6,[
394 AC_CHECK_HEADERS(sys/types.h sys/socket.h netinet/in.h netdb.h)
395 AC_CHECK_FUNCS(inet_ntop inet_pton getnameinfo)
396 dnl getaddrinfo test needs netdb.h, for proper compilation on alpha
397 dnl under OSF/1^H^H^H^H^HDigital^H^H^H^H^H^H^HTru64 UNIX, where it's
398 dnl a macro
399 AC_MSG_CHECKING(for getaddrinfo)
400 AC_CACHE_VAL(ac_cv_func_getaddrinfo,
401 [AC_TRY_LINK([#ifdef HAVE_NETDB_H
402 #include <netdb.h>
403 #endif],[
404 struct addrinfo *ai;
405 getaddrinfo("kerberos.mit.edu", "echo", 0, &ai);
406 ], ac_cv_func_getaddrinfo=yes, ac_cv_func_getaddrinfo=no)])
407 AC_MSG_RESULT($ac_cv_func_getaddrinfo)
408 if test $ac_cv_func_getaddrinfo = yes; then
409   AC_DEFINE(HAVE_GETADDRINFO,1,[Define if you have the getaddrinfo function])
410 fi
411 dnl
412 AC_REQUIRE([KRB5_SOCKADDR_SA_LEN])dnl
413 AC_ARG_ENABLE([ipv6], , AC_MSG_WARN(enable/disable-ipv6 option is deprecated))dnl
414 AC_MSG_CHECKING(for IPv6 compile-time support)
415 AC_CACHE_VAL(krb5_cv_inet6,[
416 if test "$ac_cv_func_inet_ntop" != "yes" ; then
417   krb5_cv_inet6=no
418 else
419 AC_TRY_COMPILE([
420 #ifdef HAVE_SYS_TYPES_H
421 #include <sys/types.h>
422 #endif
423 #include <sys/socket.h>
424 #include <netinet/in.h>
425 #include <netdb.h>
426 ],[
427   struct sockaddr_in6 in;
428   AF_INET6;
429   IN6_IS_ADDR_LINKLOCAL (&in.sin6_addr);
430 ],krb5_cv_inet6=yes,krb5_cv_inet6=no)])
431 fi
432 AC_MSG_RESULT($krb5_cv_inet6)
433 if test "$krb5_cv_inet6" = no && test "$ac_cv_func_inet_ntop" = yes; then
434 AC_MSG_CHECKING(for IPv6 compile-time support with -DINET6)
435 AC_CACHE_VAL(krb5_cv_inet6_with_dinet6,[
436 old_CC="$CC"
437 CC="$CC -DINET6"
438 AC_TRY_COMPILE([
439 #ifdef HAVE_SYS_TYPES_H
440 #include <sys/types.h>
441 #endif
442 #include <sys/socket.h>
443 #include <netinet/in.h>
444 #include <netdb.h>
445 ],[
446   struct sockaddr_in6 in;
447   AF_INET6;
448   IN6_IS_ADDR_LINKLOCAL (&in.sin6_addr);
449 ],krb5_cv_inet6_with_dinet6=yes,krb5_cv_inet6_with_dinet6=no)
450 CC="$old_CC"])
451 AC_MSG_RESULT($krb5_cv_inet6_with_dinet6)
452 fi
453 if test $krb5_cv_inet6 = yes || test "$krb5_cv_inet6_with_dinet6" = yes; then
454   if test "$krb5_cv_inet6_with_dinet6" = yes; then
455     AC_DEFINE(INET6,1,[May need to be defined to enable IPv6 support, for example on IRIX])
456   fi
457   AC_DEFINE(KRB5_USE_INET6,1,[Define if we should compile in IPv6 support (even if we can't use it at run time)])
458 fi
459 ])dnl
460 dnl
461 dnl Generic File existence tests
462 dnl 
463 dnl K5_AC_CHECK_FILE(FILE, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
464 dnl
465 AC_DEFUN(K5_AC_CHECK_FILE,
466 [AC_REQUIRE([AC_PROG_CC])dnl
467 dnl Do the transliteration at runtime so arg 1 can be a shell variable.
468 ac_safe=`echo "$1" | sed 'y%./+-%__p_%'`
469 AC_MSG_CHECKING([for $1])
470 AC_CACHE_VAL(ac_cv_file_$ac_safe,
471 [if test "$cross_compiling" = yes; then
472   errprint(__file__:__line__: warning: Cannot check for file existence when cross compiling
473 )dnl
474   AC_MSG_ERROR(Cannot check for file existence when cross compiling)
475 else
476   if test -r $1; then
477     eval "ac_cv_file_$ac_safe=yes"
478   else
479     eval "ac_cv_file_$ac_safe=no"
480   fi
481 fi])dnl
482 if eval "test \"`echo '$ac_cv_file_'$ac_safe`\" = yes"; then
483   AC_MSG_RESULT(yes)
484   ifelse([$2], , :, [$2])
485 else
486   AC_MSG_RESULT(no)
487 ifelse([$3], , , [$3
488 np])dnl
489 fi
490 ])
491 dnl
492 dnl K5_AC_CHECK_FILES(FILE... [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
493 dnl
494 AC_DEFUN(K5_AC_CHECK_FILES,
495 [AC_REQUIRE([AC_PROG_CC])dnl
496 for ac_file in $1
497 do
498 K5_AC_CHECK_FILE($ac_file,
499 [changequote(, )dnl
500   ac_tr_file=HAVE`echo $ac_file | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
501 changequote([, ])dnl
502   AC_DEFINE_UNQUOTED($ac_tr_file) $2], $3)dnl
503 done
504 ])
505 dnl
506 dnl set $(KRB4) from --with-krb4=value -- WITH_KRB4
507 dnl
508 AC_DEFUN(WITH_KRB4,[
509 AC_ARG_WITH([krb4],
510 [  --without-krb4          omit Kerberos V4 backwards compatibility (default)
511   --with-krb4             use V4 libraries included with V5
512   --with-krb4=KRB4DIR     use preinstalled V4 libraries],
513 ,
514 withval=no
515 )dnl
516 if test $withval = no; then
517         AC_MSG_NOTICE(no krb4 support)
518         KRB4_LIB=
519         KRB4_DEPLIB=
520         KRB4_INCLUDES=
521         KRB4_LIBPATH=
522         KRB_ERR_H_DEP=
523         krb5_cv_build_krb4_libs=no
524         krb5_cv_krb4_libdir=
525 else
526  AC_DEFINE([KRB5_KRB4_COMPAT], 1, [Define this if building with krb4 compat])
527  if test $withval = yes; then
528         AC_MSG_NOTICE(enabling built in krb4 support)
529         KRB4_DEPLIB='$(TOPLIBD)/libkrb4$(DEPLIBEXT)'
530         KRB4_LIB=-lkrb4
531         KRB4_INCLUDES='-I$(SRCTOP)/include/kerberosIV -I$(BUILDTOP)/include/kerberosIV'
532         KRB4_LIBPATH=
533         KRB_ERR_H_DEP='$(BUILDTOP)/include/kerberosIV/krb_err.h'
534         krb5_cv_build_krb4_libs=yes
535         krb5_cv_krb4_libdir=
536  else
537         AC_MSG_NOTICE(using preinstalled krb4 in $withval)
538         KRB4_LIB="-lkrb"
539 dnl     DEPKRB4_LIB="$withval/lib/libkrb.a"
540         KRB4_INCLUDES="-I$withval/include"
541         KRB4_LIBPATH="-L$withval/lib"
542         KRB_ERR_H_DEP=
543         krb5_cv_build_krb4_libs=no
544         krb5_cv_krb4_libdir="$withval/lib"
545  fi
546 fi
547 AC_SUBST(KRB4_INCLUDES)
548 AC_SUBST(KRB4_LIBPATH)
549 AC_SUBST(KRB4_LIB)
550 AC_SUBST(KRB4_DEPLIB)
551 AC_SUBST(KRB_ERR_H_DEP)
552 dnl We always compile the des425 library
553 DES425_DEPLIB='$(TOPLIBD)/libdes425$(DEPLIBEXT)'
554 DES425_LIB=-ldes425
555 AC_SUBST(DES425_DEPLIB)
556 AC_SUBST(DES425_LIB)
557 ])dnl
558 dnl
559 dnl
560 AC_DEFUN(KRB5_AC_CHECK_FOR_CFLAGS,[
561 AC_BEFORE([$0],[AC_PROG_CC])
562 AC_BEFORE([$0],[AC_PROG_CXX])
563 krb5_ac_cflags_set=${CFLAGS+set}
564 krb5_ac_cxxflags_set=${CXXFLAGS+set}
565 krb5_ac_warn_cflags_set=${WARN_CFLAGS+set}
566 krb5_ac_warn_cxxflags_set=${WARN_CXXFLAGS+set}
567 ])
568 dnl
569 AC_DEFUN(TRY_WARN_CC_FLAG,[dnl
570   cachevar=`echo "krb5_cv_cc_flag_$1" | sed s/[[^a-zA-Z0-9_]]/_/g`
571   AC_CACHE_CHECK([if C compiler supports $1], [$cachevar],
572   [# first try without, then with
573   AC_TRY_COMPILE([], 1;,
574     [old_cflags="$CFLAGS"
575      CFLAGS="$CFLAGS $1"
576      AC_TRY_COMPILE([], 1;, eval $cachevar=yes, eval $cachevar=no)
577      CFLAGS="$old_cflags"],
578     [AC_MSG_ERROR(compiling simple test program with $CFLAGS failed)])])
579   if eval test '"${'$cachevar'}"' = yes; then
580     WARN_CFLAGS="$WARN_CFLAGS $1"
581   fi
582   eval flag_supported='${'$cachevar'}'
583 ])dnl
584 dnl
585 AC_DEFUN(WITH_CC,[dnl
586 AC_REQUIRE([KRB5_AC_CHECK_FOR_CFLAGS])dnl
587 AC_REQUIRE([AC_PROG_CC])dnl
588 AC_REQUIRE([AC_PROG_CXX])dnl
589 if test $ac_cv_c_compiler_gnu = yes ; then
590      HAVE_GCC=yes
591      else HAVE_GCC=
592 fi
593 AC_SUBST(HAVE_GCC)
594 AC_CACHE_CHECK([for GNU linker], krb5_cv_prog_gnu_ld,
595 [krb5_cv_prog_gnu_ld=no
596 if test "$GCC" = yes; then
597   if AC_TRY_COMMAND([$CC -Wl,-v 2>&1 dnl
598                         | grep "GNU ld" > /dev/null]); then
599     krb5_cv_prog_gnu_ld=yes
600   fi
601 fi])
602 AC_ARG_WITH([size-optimizations],
603 [  --with-size-optimizations enable a few optimizations to reduce code size
604                           possibly at some run-time cost],
605 ,
606 withval=no)
607 if test "$withval" = yes; then
608   AC_DEFINE(CONFIG_SMALL,1,[Define to reduce code size even if it means more cpu usage])
609 fi
610 # -Wno-long-long, if needed, for k5-platform.h without inttypes.h etc.
611 extra_gcc_warn_opts="-Wall -Wcast-qual -Wcast-align -Wshadow"
612 # -Wmissing-prototypes
613 if test "$GCC" = yes ; then
614   # Putting this here means we get -Os after -O2, which works.
615   if test "$with_size_optimizations" = yes && test "x$krb5_ac_cflags_set" != xset; then
616     AC_MSG_NOTICE(adding -Os optimization option)
617     case "$CFLAGS" in
618       "-g -O2") CFLAGS="-g -Os" ;;
619       "-O2")    CFLAGS="-Os" ;;
620       *)        CFLAGS="$CFLAGS -Os" ;;
621     esac
622   fi
623   if test "x$krb5_ac_warn_cflags_set" = xset ; then
624     AC_MSG_NOTICE(not adding extra gcc warning flags because WARN_CFLAGS was set)
625   else
626     AC_MSG_NOTICE(adding extra warning flags for gcc)
627     WARN_CFLAGS="$WARN_CFLAGS $extra_gcc_warn_opts -Wmissing-prototypes"
628     if test "`uname -s`" = Darwin ; then
629       AC_MSG_NOTICE(skipping pedantic warnings on Darwin)
630     elif test "`uname -s`" = Linux ; then
631       AC_MSG_NOTICE(skipping pedantic warnings on Linux)
632     else
633       WARN_CFLAGS="$WARN_CFLAGS -pedantic"
634     fi
635     if test "$ac_cv_cxx_compiler_gnu" = yes; then
636       if test "x$krb5_ac_warn_cxxflags_set" = xset ; then
637         AC_MSG_NOTICE(not adding extra g++ warnings because WARN_CXXFLAGS was set)
638       else
639         AC_MSG_NOTICE(adding extra warning flags for g++)
640         WARN_CXXFLAGS="$WARN_CXXFLAGS $extra_gcc_warn_opts"
641       fi
642     fi
643     # Currently, G++ does not support -Wno-format-zero-length.
644     TRY_WARN_CC_FLAG(-Wno-format-zero-length)
645     # Other flags here may not be supported on some versions of
646     # gcc that people want to use.
647     for flag in overflow strict-overflow missing-format-attribute missing-prototypes return-type missing-braces parentheses switch unused-function unused-label unused-variable unused-value unknown-pragmas sign-compare newline-eof ; do
648       TRY_WARN_CC_FLAG(-W$flag)
649     done
650     #  old-style-definition? generates many, many warnings
651     #
652     # Warnings that we'd like to turn into errors on versions of gcc
653     # that support promoting only specific warnings to errors, but
654     # we'll take as warnings on older compilers.  (If such a warning
655     # is added after the -Werror=foo feature, you can just put
656     # error=foo in the above list, and skip the test for the
657     # warning-only form.)  At least in some versions, -Werror= doesn't
658     # seem to make the conditions actual errors, but still issues
659     # warnings; I guess we'll take what we can get.
660     #
661     # We're currently targeting C89+, not C99, so disallow some
662     # constructs.
663     for flag in declaration-after-statement variadic-macros ; do
664       TRY_WARN_CC_FLAG(-Werror=$flag)
665       if test "$flag_supported" = no; then
666         TRY_WARN_CC_FLAG(-W$flag)
667       fi
668     done
669     #  missing-prototypes? maybe someday
670     #
671   fi
672   if test "`uname -s`" = Darwin ; then
673     # Someday this should be a feature test.
674     # One current (Jaguar = OS 10.2) problem:
675     # Archive library with foo.o undef sym X and bar.o common sym X,
676     # if foo.o is pulled in at link time, bar.o may not be, causing
677     # the linker to complain.
678     # Dynamic library problems too?
679     case "$CC $CFLAGS" in
680     *-fcommon*) ;; # why someone would do this, I don't know
681     *-fno-common*) ;; # okay, they're already doing the right thing
682     *)
683       AC_MSG_NOTICE(disabling the use of common storage on Darwin)
684       CFLAGS="$CFLAGS -fno-common"
685       ;;
686     esac
687     case "$LD $LDFLAGS" in
688     *-Wl,-search_paths_first*) ;;
689     *) LDFLAGS="${LDFLAGS} -Wl,-search_paths_first" ;;
690     esac
691   fi
692 else
693   if test "`uname -s`" = AIX ; then
694     # Using AIX but not GCC, assume native compiler.
695     # The native compiler appears not to give a nonzero exit
696     # status for certain classes of errors, like missing arguments
697     # in function calls.  Let's try to fix that with -qhalt=e.
698     case "$CC $CFLAGS" in
699       *-qhalt=*) ;;
700       *)
701         CFLAGS="$CFLAGS -qhalt=e"
702         AC_MSG_NOTICE(adding -qhalt=e for better error reporting)
703         ;;
704     esac
705     # Also, the optimizer isn't turned on by default, which means
706     # the static inline functions get left in random object files,
707     # leading to references to pthread_mutex_lock from anything that
708     # includes k5-int.h whether it uses threads or not.
709     case "$CC $CFLAGS" in
710       *-O*) ;;
711       *)
712         CFLAGS="$CFLAGS -O"
713         AC_MSG_NOTICE(adding -O for inline thread-support function elimination)
714         ;;
715     esac
716   fi
717   if test "`uname -s`" = SunOS ; then
718     # Using Solaris but not GCC, assume Sunsoft compiler.
719     # We have some error-out-on-warning options available.
720     # Sunsoft 12 compiler defaults to -xc99=all, it appears, so "inline"
721     # works, but it also means that declaration-in-code warnings won't
722     # be issued.
723     # -v -fd -errwarn=E_DECLARATION_IN_CODE ...
724     WARN_CFLAGS="-errtags=yes -errwarn=E_BAD_PTR_INT_COMBINATION"
725     WARN_CXXFLAGS="-errtags=yes +w +w2 -xport64"
726   fi
727 fi
728 AC_SUBST(WARN_CFLAGS)
729 AC_SUBST(WARN_CXXFLAGS)
730 ])dnl
731 dnl
732 dnl
733 dnl check for yylineno -- HAVE_YYLINENO
734 dnl
735 AC_DEFUN(HAVE_YYLINENO,[dnl
736 AC_REQUIRE_CPP()AC_REQUIRE([AC_PROG_LEX])dnl
737 AC_MSG_CHECKING([for yylineno declaration])
738 AC_CACHE_VAL(krb5_cv_type_yylineno,
739 # some systems have yylineno, others don't...
740   echo '%%
741 %%' | ${LEX} -t > conftest.out
742   if egrep yylineno conftest.out >/dev/null 2>&1; then
743         krb5_cv_type_yylineno=yes
744   else
745         krb5_cv_type_yylineno=no
746   fi
747   rm -f conftest.out)
748   AC_MSG_RESULT($krb5_cv_type_yylineno)
749   if test $krb5_cv_type_yylineno = no; then
750         AC_DEFINE(NO_YYLINENO, 1, [Define if lex produes code with yylineno])
751   fi
752 ])dnl
753 dnl
754 dnl K5_GEN_MAKEFILE([dir, [frags]])
755 dnl
756 AC_DEFUN(K5_GEN_MAKEFILE,[dnl
757 ifelse($1, ,[_K5_GEN_MAKEFILE(.,$2)],[_K5_GEN_MAKEFILE($1,$2)])
758 ])
759 dnl
760 dnl _K5_GEN_MAKEFILE(dir, [frags])
761 dnl  dir must be present in this case
762 dnl  Note: Be careful in quoting. 
763 dnl        The ac_foreach generates the list of fragments to include
764 dnl        or "" if $2 is empty
765 AC_DEFUN(_K5_GEN_MAKEFILE,[dnl
766 AC_CONFIG_FILES([$1/Makefile:$srcdir/]K5_TOPDIR[/config/pre.in:$1/Makefile.in:$srcdir/]K5_TOPDIR[/config/post.in])
767 ])
768 dnl
769 dnl K5_GEN_FILE( <ac_output arguments> )
770 dnl
771 AC_DEFUN(K5_GEN_FILE,[AC_CONFIG_FILES($1)])dnl
772 dnl
773 dnl K5_AC_OUTPUT
774 dnl    Note: Adds the variables to config.status for individual 
775 dnl          Makefile generation from config.status
776 AC_DEFUN(K5_AC_OUTPUT,[AC_OUTPUT])dnl
777 dnl
778 dnl V5_AC_OUTPUT_MAKEFILE
779 dnl
780 AC_DEFUN(V5_AC_OUTPUT_MAKEFILE,
781 [ifelse($1, , [_V5_AC_OUTPUT_MAKEFILE(.,$2)],[_V5_AC_OUTPUT_MAKEFILE($1,$2)])])
782 dnl
783 define(_V5_AC_OUTPUT_MAKEFILE,
784 [ifelse($2, , ,AC_CONFIG_FILES($2))
785 AC_FOREACH([DIR], [$1],dnl
786  [AC_CONFIG_FILES(DIR[/Makefile:$srcdir/]K5_TOPDIR[/config/pre.in:]DIR[/Makefile.in:$srcdir/]K5_TOPDIR[/config/post.in])])
787 K5_AC_OUTPUT])dnl
788 dnl
789 dnl
790 dnl KRB5_SOCKADDR_SA_LEN: define HAVE_SA_LEN if sockaddr contains the sa_len
791 dnl component
792 dnl
793 AC_DEFUN([KRB5_SOCKADDR_SA_LEN],[ dnl
794 AC_CHECK_MEMBER(struct sockaddr.sa_len,
795   AC_DEFINE(HAVE_SA_LEN,1,[Define if struct sockaddr contains sa_len])
796 ,,[#include <sys/types.h>
797 #include <sys/socket.h>])])
798 dnl
799 dnl
800 dnl CHECK_UTMP: check utmp structure and functions
801 dnl
802 AC_DEFUN(CHECK_UTMP,[
803 AC_CHECK_MEMBERS([struct utmp.ut_pid, struct utmp.ut_type, struct utmp.ut_host, struct utmp.ut_exit],,,
804 [#include <sys/types.h>
805 #include <utmp.h>])
806
807 # Define the names actually used in the krb5 code currently:
808 if test $ac_cv_member_struct_utmp_ut_pid = no; then
809   AC_DEFINE(NO_UT_PID,1,[Define if ut_pid field not found])
810 fi
811 if test $ac_cv_member_struct_utmp_ut_type = no; then
812   AC_DEFINE(NO_UT_TYPE,1,[Define if ut_type field not found])
813 fi
814 if test $ac_cv_member_struct_utmp_ut_host = no; then
815   AC_DEFINE(NO_UT_HOST,1,[Define if ut_host field not found])
816 fi
817 if test $ac_cv_member_struct_utmp_ut_exit = no; then
818   AC_DEFINE(NO_UT_EXIT,1,[Define if ut_exit field not found])
819 fi
820
821 AC_CHECK_FUNCS(setutent setutxent updwtmp updwtmpx)
822 ])dnl
823 dnl
824 dnl WITH_NETLIB
825 dnl 
826 dnl
827 AC_DEFUN(WITH_NETLIB,[
828 AC_ARG_WITH([netlib],
829 AC_HELP_STRING([--with-netlib=LIBS], use user defined resolver library),
830 [  if test "$withval" = yes -o "$withval" = no ; then
831         AC_MSG_RESULT("netlib will link with C library resolver only")
832   else
833         LIBS="$LIBS $withval"
834         AC_MSG_RESULT("netlib will use \'$withval\'")
835   fi
836 ],dnl
837 [AC_LIBRARY_NET]
838 )])dnl
839 dnl
840 dnl
841 AC_DEFUN(KRB5_AC_NEED_DAEMON, [
842 KRB5_NEED_PROTO([#ifdef HAVE_UNISTD_H
843 #include <unistd.h>
844 #endif],daemon,1)])dnl
845 dnl
846 dnl Check if stdarg or varargs is available *and compiles*; prefer stdarg.
847 dnl (This was sent to djm for incorporation into autoconf 3/12/1996.  KR)
848 dnl
849 AC_DEFUN(AC_HEADER_STDARG, [
850
851 AC_MSG_CHECKING([for stdarg.h])
852 AC_CACHE_VAL(ac_cv_header_stdarg_h,
853 [AC_TRY_COMPILE([#include <stdarg.h>], [
854   } /* ac_try_compile will have started a function body */
855   int aoeu (char *format, ...) {
856     va_list v;
857     int i;
858     va_start (v, format);
859     i = va_arg (v, int);
860     va_end (v);
861 ],ac_cv_header_stdarg_h=yes,ac_cv_header_stdarg_h=no)])dnl
862 AC_MSG_RESULT($ac_cv_header_stdarg_h)
863 if test $ac_cv_header_stdarg_h = yes; then
864   AC_DEFINE(HAVE_STDARG_H, 1, [Define if stdarg available and compiles])
865 else
866
867 AC_MSG_CHECKING([for varargs.h])
868 AC_CACHE_VAL(ac_cv_header_varargs_h,
869 [AC_TRY_COMPILE([#include <varargs.h>],[
870   } /* ac_try_compile will have started a function body */
871   int aoeu (va_alist) va_dcl {
872     va_list v;
873     int i;
874     va_start (v);
875     i = va_arg (v, int);
876     va_end (v);
877 ],ac_cv_header_varargs_h=yes,ac_cv_header_varargs_h=no)])dnl
878 AC_MSG_RESULT($ac_cv_header_varargs_h)
879 if test $ac_cv_header_varargs_h = yes; then
880   AC_DEFINE(HAVE_VARARGS_H, 1, [Define if varargs available and compiles])
881 else
882   AC_MSG_ERROR(Neither stdarg nor varargs compile?)
883 fi
884
885 fi dnl stdarg test failure
886
887 ])dnl
888
889 dnl
890 dnl KRB5_AC_NEED_LIBGEN --- check if libgen needs to be linked in for
891 dnl                             compile/step    
892 dnl
893 dnl
894 AC_DEFUN(KRB5_AC_NEED_LIBGEN,[
895 AC_REQUIRE([AC_PROG_CC])dnl
896 dnl
897 dnl regcomp is present but non-functional on Solaris 2.4
898 dnl
899 AC_MSG_CHECKING(for working regcomp)
900 AC_CACHE_VAL(ac_cv_func_regcomp,[
901 AC_TRY_RUN([
902 #include <sys/types.h>
903 #include <regex.h>
904 regex_t x; regmatch_t m;
905 int main() { return regcomp(&x,"pat.*",0) || regexec(&x,"pattern",1,&m,0); }
906 ], ac_cv_func_regcomp=yes, ac_cv_func_regcomp=no, AC_MSG_ERROR([Cannot test regcomp when cross compiling]))])
907 AC_MSG_RESULT($ac_cv_func_regcomp)
908 test $ac_cv_func_regcomp = yes && AC_DEFINE(HAVE_REGCOMP,1,[Define if regcomp exists and functions])
909 dnl
910 dnl Check for the compile and step functions - only if regcomp is not available
911 dnl
912 if test $ac_cv_func_regcomp = no; then
913  save_LIBS="$LIBS"
914  LIBS=-lgen
915 dnl this will fail if there's no compile/step in -lgen, or if there's
916 dnl no -lgen.  This is fine.
917  AC_CHECK_FUNCS(compile step)
918  LIBS="$save_LIBS"
919 dnl
920 dnl Set GEN_LIB if necessary 
921 dnl
922  AC_CHECK_LIB(gen, compile, GEN_LIB=-lgen, GEN_LIB=)
923  AC_SUBST(GEN_LIB)
924 fi
925 ])
926 dnl
927 dnl KRB5_AC_REGEX_FUNCS --- check for different regular expression 
928 dnl                             support functions
929 dnl
930 AC_DEFUN(KRB5_AC_REGEX_FUNCS,[
931 AC_CHECK_FUNCS(re_comp re_exec regexec)
932 AC_REQUIRE([KRB5_AC_NEED_LIBGEN])dnl
933 ])dnl
934 dnl
935 dnl AC_KRB5_TCL_FIND_CONFIG (uses tcl_dir)
936 dnl
937 AC_DEFUN(AC_KRB5_TCL_FIND_CONFIG,[
938 AC_REQUIRE([KRB5_LIB_AUX])dnl
939 AC_MSG_CHECKING(for tclConfig.sh)
940 dnl On Debian, we might be given --with-tcl=/usr, or tclsh might
941 dnl point us to /usr/lib/tcl8.4; either way, we need to find
942 dnl /usr/lib/tcl8.4/tclConfig.sh.
943 dnl On NetBSD, we might be given --with-tcl=/usr/pkg, or tclsh
944 dnl might point us to /usr/pkg/lib/tcl8.4; we need to find
945 dnl /usr/pkg/lib/tclConfig.sh.
946 if test -r "$tcl_dir/lib/tclConfig.sh" ; then
947   tcl_conf="$tcl_dir/lib/tclConfig.sh"
948 elif test -r "$tcl_dir/tclConfig.sh" ; then
949   tcl_conf="$tcl_dir/tclConfig.sh"
950 elif test -r "$tcl_dir/../tclConfig.sh" ; then
951   tcl_conf="$tcl_dir/../tclConfig.sh"
952 else
953   tcl_conf=
954   lib="$tcl_dir/lib"
955   changequote(<<,>>)dnl
956   for d in "$lib" "$lib"/tcl7.[0-9] "$lib"/tcl8.[0-9] ; do
957     if test -r "$d/tclConfig.sh" ; then
958       tcl_conf="$tcl_conf $d/tclConfig.sh"
959     fi
960   done
961   changequote([,])dnl
962 fi
963 if test -n "$tcl_conf" ; then
964   AC_MSG_RESULT($tcl_conf)
965 else
966   AC_MSG_RESULT(not found)
967 fi
968 tcl_ok_conf=
969 tcl_vers_maj=
970 tcl_vers_min=
971 old_CPPFLAGS=$CPPFLAGS
972 old_LIBS=$LIBS
973 old_LDFLAGS=$LDFLAGS
974 if test -n "$tcl_conf" ; then
975   for file in $tcl_conf ; do
976     TCL_MAJOR_VERSION=x ; TCL_MINOR_VERSION=x
977     AC_MSG_CHECKING(Tcl info in $file)
978     . $file
979     v=$TCL_MAJOR_VERSION.$TCL_MINOR_VERSION
980     if test -z "$tcl_vers_maj" \
981         || test "$tcl_vers_maj" -lt "$TCL_MAJOR_VERSION" \
982         || test "$tcl_vers_maj" = "$TCL_MAJOR_VERSION" -a "$tcl_vers_min" -lt "$TCL_MINOR_VERSION" ; then
983       for incdir in "$TCL_PREFIX/include/tcl$v" "$TCL_PREFIX/include" ; do
984         if test -r "$incdir/tcl.h" -o -r "$incdir/tcl/tcl.h" ; then
985           CPPFLAGS="$old_CPPFLAGS -I$incdir"
986           break
987         fi
988       done
989       LIBS="$old_LIBS `eval echo x $TCL_LIB_SPEC $TCL_LIBS | sed 's/^x//'`"
990       LDFLAGS="$old_LDFLAGS $TCL_LD_FLAGS"
991       AC_TRY_LINK( , [Tcl_CreateInterp ();],
992         tcl_ok_conf=$file
993         tcl_vers_maj=$TCL_MAJOR_VERSION
994         tcl_vers_min=$TCL_MINOR_VERSION
995         AC_MSG_RESULT($v - working),
996         AC_MSG_RESULT($v - compilation failed)
997       )
998     else
999       AC_MSG_RESULT(older version $v)
1000     fi
1001   done
1002 fi
1003 CPPFLAGS=$old_CPPFLAGS
1004 LIBS=$old_LIBS
1005 LDFLAGS=$old_LDFLAGS
1006 tcl_header=no
1007 tcl_lib=no
1008 if test -n "$tcl_ok_conf" ; then
1009   . $tcl_ok_conf
1010   TCL_INCLUDES=
1011   for incdir in "$TCL_PREFIX/include/tcl$v" "$TCL_PREFIX/include" ; do
1012     if test -r "$incdir/tcl.h" -o -r "$incdir/tcl/tcl.h" ; then
1013       if test "$incdir" != "/usr/include" ; then
1014         TCL_INCLUDES=-I$incdir
1015       fi
1016       break
1017     fi
1018   done
1019   # Need eval because the first-level expansion could reference
1020   # variables like ${TCL_DBGX}.
1021   eval TCL_LIBS='"'$TCL_LIB_SPEC $TCL_LIBS $TCL_DL_LIBS'"'
1022   TCL_LIBPATH="-L$TCL_EXEC_PREFIX/lib"
1023   TCL_RPATH=":$TCL_EXEC_PREFIX/lib"
1024   if test "$DEPLIBEXT" != "$SHLIBEXT" && test -n "$RPATH_FLAG"; then
1025     TCL_MAYBE_RPATH='$(RPATH_FLAG)'"$TCL_EXEC_PREFIX/lib$RPATH_TAIL"
1026   else
1027     TCL_MAYBE_RPATH=
1028   fi
1029   CPPFLAGS="$old_CPPFLAGS $TCL_INCLUDES"
1030   AC_CHECK_HEADER(tcl.h,AC_DEFINE(HAVE_TCL_H,1,[Define if tcl.h is available]) tcl_header=yes)
1031   if test $tcl_header=no; then
1032      AC_CHECK_HEADER(tcl/tcl.h,AC_DEFINE(HAVE_TCL_TCL_H,1,[Define if tcl/tcl.h is available]) tcl_header=yes)
1033   fi
1034   CPPFLAGS="$old_CPPFLAGS"
1035   tcl_lib=yes
1036 else
1037   # If we read a tclConfig.sh file, it probably set this.
1038   TCL_LIBS=
1039 fi  
1040 AC_SUBST(TCL_INCLUDES)
1041 AC_SUBST(TCL_LIBS)
1042 AC_SUBST(TCL_LIBPATH)
1043 AC_SUBST(TCL_RPATH)
1044 AC_SUBST(TCL_MAYBE_RPATH)
1045 ])dnl
1046 dnl
1047 dnl AC_KRB5_TCL_TRYOLD
1048 dnl attempt to use old search algorithm for locating tcl
1049 dnl
1050 AC_DEFUN(AC_KRB5_TCL_TRYOLD, [
1051 AC_REQUIRE([KRB5_AC_FIND_DLOPEN])
1052 AC_MSG_WARN([trying old tcl search code])
1053 if test "$with_tcl" != yes -a "$with_tcl" != no; then
1054         TCL_INCLUDES=-I$with_tcl/include
1055         TCL_LIBPATH=-L$with_tcl/lib
1056         TCL_RPATH=:$with_tcl/lib
1057 fi
1058 if test "$with_tcl" != no ; then
1059         krb5_save_CPPFLAGS="$CPPFLAGS"
1060         krb5_save_LDFLAGS="$LDFLAGS"
1061         CPPFLAGS="$CPPFLAGS $TCL_INCLUDES"
1062         LDFLAGS="$LDFLAGS $TCL_LIBPATH"
1063         tcl_header=no
1064         AC_CHECK_HEADER(tcl.h,AC_DEFINE(HAVE_TCL_H,1,[Define if tcl.h found]) tcl_header=yes)
1065         if test $tcl_header=no; then
1066            AC_CHECK_HEADER(tcl/tcl.h,AC_DEFINE(HAVE_TCL_TCL_H,1,[Define if tcl/tcl.h found]) tcl_header=yes)
1067         fi
1068
1069         if test $tcl_header = yes ; then
1070                 tcl_lib=no
1071
1072                 if test $tcl_lib = no; then
1073                         AC_CHECK_LIB(tcl8.0, Tcl_CreateCommand, 
1074                                 TCL_LIBS="$TCL_LIBS -ltcl8.0 -lm $DL_LIB $LIBS"
1075                                 tcl_lib=yes,,-lm $DL_LIB)
1076                 fi
1077                 if test $tcl_lib = no; then
1078                         AC_CHECK_LIB(tcl7.6, Tcl_CreateCommand, 
1079                                 TCL_LIBS="$TCL_LIBS -ltcl7.6 -lm $DL_LIB $LIBS"
1080                                 tcl_lib=yes,,-lm $DL_LIB)
1081                 fi
1082                 if test $tcl_lib = no; then
1083                         AC_CHECK_LIB(tcl7.5, Tcl_CreateCommand, 
1084                                 TCL_LIBS="$TCL_LIBS -ltcl7.5 -lm $DL_LIB $LIBS"
1085                                 tcl_lib=yes,,-lm $DL_LIB)
1086
1087                 fi
1088                 if test $tcl_lib = no ; then
1089                         AC_CHECK_LIB(tcl, Tcl_CreateCommand, 
1090                                 TCL_LIBS="$TCL_LIBS -ltcl -lm $DL_LIB $LIBS"
1091                                 tcl_lib=yes,,-lm $DL_LIB)
1092
1093                 fi
1094                 if test $tcl_lib = no ; then            
1095                         AC_MSG_WARN("tcl.h found but not library")
1096                 fi
1097         else
1098                 AC_MSG_WARN(Could not find Tcl which is needed for the kadm5 tests)
1099                 TCL_LIBS=
1100         fi
1101         CPPFLAGS="$krb5_save_CPPFLAGS"
1102         LDFLAGS="$krb5_save_LDFLAGS"
1103         AC_SUBST(TCL_INCLUDES)
1104         AC_SUBST(TCL_LIBS)
1105         AC_SUBST(TCL_LIBPATH)
1106         AC_SUBST(TCL_RPATH)
1107 else
1108         AC_MSG_RESULT("Not looking for Tcl library")
1109 fi
1110 ])dnl
1111 dnl
1112 dnl AC_KRB5_TCL - determine if the TCL library is present on system
1113 dnl
1114 AC_DEFUN(AC_KRB5_TCL,[
1115 TCL_INCLUDES=
1116 TCL_LIBPATH=
1117 TCL_RPATH=
1118 TCL_LIBS=
1119 TCL_WITH=
1120 tcl_dir=
1121 AC_ARG_WITH(tcl,
1122 [  --with-tcl=path         where Tcl resides], , with_tcl=try)
1123 if test "$with_tcl" = no ; then
1124   true
1125 elif test "$with_tcl" = yes -o "$with_tcl" = try ; then
1126   tcl_dir=/usr
1127   if test ! -r /usr/lib/tclConfig.sh; then
1128     cat >> conftest <<\EOF
1129 puts "tcl_dir=$tcl_library"
1130 EOF
1131     if tclsh conftest >conftest.out 2>/dev/null; then
1132       if grep tcl_dir= conftest.out >/dev/null 2>&1; then
1133         t=`sed s/tcl_dir=// conftest.out`
1134         tcl_dir=$t
1135       fi
1136     fi # tclsh ran script okay
1137   rm -f conftest conftest.out
1138   fi # no /usr/lib/tclConfig.sh
1139 else
1140   tcl_dir=$with_tcl
1141 fi
1142 if test "$with_tcl" != no ; then
1143   AC_KRB5_TCL_FIND_CONFIG
1144   if test $tcl_lib = no ; then
1145     if test "$with_tcl" != try ; then
1146       AC_KRB5_TCL_TRYOLD
1147     else
1148       AC_MSG_WARN(Could not find Tcl which is needed for some tests)
1149     fi
1150   fi
1151 fi
1152 # If "yes" or pathname, error out if not found.
1153 if test "$with_tcl" != no -a "$with_tcl" != try ; then
1154   if test "$tcl_header $tcl_lib" != "yes yes" ; then
1155     AC_MSG_ERROR(Could not find Tcl)
1156   fi
1157 fi
1158 ])dnl
1159
1160 dnl
1161 dnl WITH_HESIOD
1162 dnl
1163 AC_DEFUN(WITH_HESIOD,
1164 [AC_ARG_WITH(hesiod, AC_HELP_STRING(--with-hesiod[=path], compile with hesiod support @<:@omitted@:>@),
1165         hesiod=$with_hesiod, with_hesiod=no)
1166 if test "$with_hesiod" != "no"; then
1167         HESIOD_DEFS=-DHESIOD
1168         AC_CHECK_LIB(resolv, res_send, res_lib=-lresolv)
1169         if test "$hesiod" != "yes"; then
1170                 HESIOD_LIBS="-L${hesiod}/lib -lhesiod $res_lib"
1171         else
1172                 HESIOD_LIBS="-lhesiod $res_lib"
1173         fi
1174 else
1175         HESIOD_DEFS=
1176         HESIOD_LIBS=
1177 fi
1178 AC_SUBST(HESIOD_DEFS)
1179 AC_SUBST(HESIOD_LIBS)])
1180
1181
1182 dnl
1183 dnl KRB5_BUILD_LIBRARY
1184 dnl
1185 dnl Pull in the necessary stuff to create the libraries.
1186
1187 AC_DEFUN(KRB5_BUILD_LIBRARY,
1188 [AC_REQUIRE([KRB5_LIB_AUX])dnl
1189 AC_REQUIRE([AC_PROG_LN_S])dnl
1190 AC_REQUIRE([AC_PROG_RANLIB])dnl
1191 AC_REQUIRE([AC_PROG_ARCHIVE])dnl
1192 AC_REQUIRE([AC_PROG_ARCHIVE_ADD])dnl
1193 AC_REQUIRE([AC_PROG_INSTALL])dnl
1194 AC_CHECK_PROG(AR, ar, ar, false)
1195 AC_CHECK_PROG(PERL, perl, perl, false)
1196 if test "$ac_cv_prog_PERL" = "false"; then
1197   AC_MSG_ERROR(Perl is now required for Kerberos builds.)
1198 fi
1199 AC_SUBST(LIBLIST)
1200 AC_SUBST(LIBLINKS)
1201 AC_SUBST(MAKE_SHLIB_COMMAND)
1202 AC_SUBST(SHLIB_RPATH_FLAGS)
1203 AC_SUBST(SHLIB_EXPFLAGS)
1204 AC_SUBST(SHLIB_EXPORT_FILE_DEP)
1205 AC_SUBST(DYNOBJ_EXPDEPS)
1206 AC_SUBST(DYNOBJ_EXPFLAGS)
1207 AC_SUBST(INSTALL_SHLIB)
1208 AC_SUBST(STLIBEXT)
1209 AC_SUBST(SHLIBEXT)
1210 AC_SUBST(SHLIBVEXT)
1211 AC_SUBST(SHLIBSEXT)
1212 AC_SUBST(DEPLIBEXT)
1213 AC_SUBST(PFLIBEXT)
1214 AC_SUBST(LIBINSTLIST)
1215 AC_SUBST(DYNOBJEXT)
1216 AC_SUBST(MAKE_DYNOBJ_COMMAND)
1217 ])
1218
1219 dnl
1220 dnl KRB5_BUILD_LIBOBJS
1221 dnl
1222 dnl Pull in the necessary stuff to build library objects.
1223
1224 AC_DEFUN(KRB5_BUILD_LIBOBJS,
1225 [AC_REQUIRE([KRB5_LIB_AUX])dnl
1226 AC_SUBST(OBJLISTS)
1227 AC_SUBST(STOBJEXT)
1228 AC_SUBST(SHOBJEXT)
1229 AC_SUBST(PFOBJEXT)
1230 AC_SUBST(PICFLAGS)
1231 AC_SUBST(PROFFLAGS)])
1232
1233 dnl
1234 dnl KRB5_BUILD_PROGRAM
1235 dnl
1236 dnl Set variables to build a program.
1237
1238 AC_DEFUN(KRB5_BUILD_PROGRAM,
1239 [AC_REQUIRE([KRB5_LIB_AUX])dnl
1240 AC_REQUIRE([KRB5_AC_NEED_LIBGEN])dnl
1241 AC_SUBST(CC_LINK)
1242 AC_SUBST(CXX_LINK)
1243 AC_SUBST(RPATH_FLAG)
1244 AC_SUBST(PROG_RPATH_FLAGS)
1245 AC_SUBST(DEPLIBEXT)])
1246
1247 dnl
1248 dnl KRB5_RUN_FLAGS
1249 dnl
1250 dnl Set up environment for running dynamic executables out of build tree
1251
1252 AC_DEFUN(KRB5_RUN_FLAGS,
1253 [AC_REQUIRE([KRB5_LIB_AUX])dnl
1254 KRB5_RUN_ENV="$RUN_ENV"
1255 AC_SUBST(KRB5_RUN_ENV)])
1256
1257 dnl
1258 dnl KRB5_LIB_AUX
1259 dnl
1260 dnl Parse configure options related to library building.
1261
1262 AC_DEFUN(KRB5_LIB_AUX,
1263 [AC_REQUIRE([KRB5_LIB_PARAMS])dnl
1264
1265 AC_ARG_ENABLE([static],,
1266 [if test "$enableval" != no; then
1267   AC_MSG_ERROR([Sorry, static libraries do not work in this release.])
1268 fi])
1269 AC_ARG_ENABLE([shared], , 
1270 [if test "$enableval" != yes; then
1271   AC_MSG_ERROR([Sorry, this release builds only shared libraries, cannot disable them.])
1272 fi])
1273 AC_ARG_ENABLE([rpath],
1274 AC_HELP_STRING([--disable-rpath],[suppress run path flags in link lines]),
1275 [enable_rpath=$withval],
1276 [enable_rpath=yes])
1277
1278 if test "x$enable_rpath" != xyes ; then
1279         # Unset the rpath flag values set by shlib.conf
1280         SHLIB_RPATH_FLAGS=
1281         RPATH_FLAG=
1282         PROG_RPATH_FLAGS=
1283 fi
1284
1285 if test "$SHLIBEXT" = ".so-nobuild"; then
1286    AC_MSG_ERROR([Shared libraries are not yet supported on this platform.])
1287 fi
1288
1289 DEPLIBEXT=$SHLIBEXT
1290
1291 if test "$krb5_force_static" = "yes"; then
1292         LIBLIST='lib$(LIBBASE)$(STLIBEXT)'
1293         LIBLINKS='$(TOPLIBD)/lib$(LIBBASE)$(STLIBEXT)'
1294         OBJLISTS=OBJS.ST
1295         # This used to be install-static, but now we only follow this
1296         # path for internal libraries we don't want installed, not for
1297         # configure-time requests for installed static libraries.
1298         LIBINSTLIST=
1299 #       CFLAGS="$CFLAGS -D_KDB5_STATIC_LINK"
1300
1301         AC_MSG_RESULT([Forcing static libraries.])
1302         # avoid duplicate rules generation for AIX and such
1303         SHLIBEXT=.so-nobuild
1304         SHLIBVEXT=.so.v-nobuild
1305         SHLIBSEXT=.so.s-nobuild
1306 else
1307         AC_MSG_NOTICE([using shared libraries])
1308
1309         # Clear some stuff in case of AIX, etc.
1310         if test "$STLIBEXT" = "$SHLIBEXT" ; then
1311                 STLIBEXT=.a-nobuild
1312         fi
1313         case "$SHLIBSEXT" in
1314         .so.s-nobuild)
1315                 SHLIB_HAVE_MINOR_VERS=no
1316                 LIBLIST='lib$(LIBBASE)$(SHLIBEXT)'
1317                 LIBLINKS='$(TOPLIBD)/lib$(LIBBASE)$(SHLIBEXT) $(TOPLIBD)/lib$(LIBBASE)$(SHLIBVEXT)'
1318                 LIBINSTLIST="install-shared"
1319                 ;;
1320         *)
1321                 SHLIB_HAVE_MINOR_VERS=yes
1322                 LIBLIST='lib$(LIBBASE)$(SHLIBEXT) lib$(LIBBASE)$(SHLIBSEXT)'
1323                 LIBLINKS='$(TOPLIBD)/lib$(LIBBASE)$(SHLIBEXT) $(TOPLIBD)/lib$(LIBBASE)$(SHLIBVEXT) $(TOPLIBD)/lib$(LIBBASE)$(SHLIBSEXT)'
1324                 LIBINSTLIST="install-shlib-soname"
1325                 ;;
1326         esac
1327         OBJLISTS="OBJS.SH"
1328 fi
1329 CC_LINK="$CC_LINK_SHARED"
1330 CXX_LINK="$CXX_LINK_SHARED"
1331 AC_SUBST(SHLIB_HAVE_MINOR_VERS)
1332
1333 if test -z "$LIBLIST"; then
1334         AC_MSG_ERROR([must enable one of shared or static libraries])
1335 fi
1336
1337 # Check whether to build profiled libraries.
1338 AC_ARG_ENABLE([profiled],
1339 dnl [  --enable-profiled       build profiled libraries @<:@disabled@:>@]
1340 ,
1341 [if test "$enableval" = yes; then
1342   AC_MSG_ERROR([Sorry, profiled libraries do not work in this release.])
1343 fi])])
1344
1345 dnl
1346 dnl KRB5_LIB_PARAMS
1347 dnl
1348 dnl Determine parameters related to libraries, e.g. various extensions.
1349
1350 AC_DEFUN(KRB5_LIB_PARAMS,
1351 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
1352 krb5_cv_host=$host
1353 AC_SUBST(krb5_cv_host)
1354 AC_REQUIRE([AC_PROG_CC])dnl
1355 AC_REQUIRE([V5_SET_TOPDIR])dnl
1356 . $ac_topdir/config/shlib.conf])
1357 dnl
1358 dnl The following was written by jhawk@mit.edu
1359 dnl
1360 dnl AC_LIBRARY_NET: Id: net.m4,v 1.4 1997/10/25 20:49:53 jhawk Exp 
1361 dnl
1362 dnl This test is for network applications that need socket() and
1363 dnl gethostbyname() -ish functions.  Under Solaris, those applications need to
1364 dnl link with "-lsocket -lnsl".  Under IRIX, they should *not* link with
1365 dnl "-lsocket" because libsocket.a breaks a number of things (for instance:
1366 dnl gethostbyname() under IRIX 5.2, and snoop sockets under most versions of
1367 dnl IRIX).
1368 dnl 
1369 dnl Unfortunately, many application developers are not aware of this, and
1370 dnl mistakenly write tests that cause -lsocket to be used under IRIX.  It is
1371 dnl also easy to write tests that cause -lnsl to be used under operating
1372 dnl systems where neither are necessary (or useful), such as SunOS 4.1.4, which
1373 dnl uses -lnsl for TLI.
1374 dnl 
1375 dnl This test exists so that every application developer does not test this in
1376 dnl a different, and subtly broken fashion.
1377 dnl 
1378 dnl It has been argued that this test should be broken up into two seperate
1379 dnl tests, one for the resolver libraries, and one for the libraries necessary
1380 dnl for using Sockets API. Unfortunately, the two are carefully intertwined and
1381 dnl allowing the autoconf user to use them independantly potentially results in
1382 dnl unfortunate ordering dependancies -- as such, such component macros would
1383 dnl have to carefully use indirection and be aware if the other components were
1384 dnl executed. Since other autoconf macros do not go to this trouble, and almost
1385 dnl no applications use sockets without the resolver, this complexity has not
1386 dnl been implemented.
1387 dnl
1388 dnl The check for libresolv is in case you are attempting to link statically
1389 dnl and happen to have a libresolv.a lying around (and no libnsl.a).
1390 dnl
1391 AC_DEFUN(AC_LIBRARY_NET, [
1392    # Most operating systems have gethostbyname() in the default searched
1393    # libraries (i.e. libc):
1394    AC_CHECK_FUNC(gethostbyname, , [
1395      # Some OSes (eg. Solaris) place it in libnsl:
1396      AC_CHECK_LIB(nsl, gethostbyname, , [
1397        # Some strange OSes (SINIX) have it in libsocket:
1398        AC_CHECK_LIB(socket, gethostbyname, , [
1399           # Unfortunately libsocket sometimes depends on libnsl.
1400           # AC_CHECK_LIB's API is essentially broken so the following
1401           # ugliness is necessary:
1402           AC_CHECK_LIB(socket, gethostbyname,
1403              LIBS="-lsocket -lnsl $LIBS",
1404                [AC_CHECK_LIB(resolv, gethostbyname,
1405                              LIBS="-lresolv $LIBS" )],
1406              -lnsl)
1407        ])
1408      ])
1409    ])
1410   AC_CHECK_FUNC(socket, , AC_CHECK_LIB(socket, socket, ,
1411     AC_CHECK_LIB(socket, socket, LIBS="-lsocket -lnsl $LIBS", , -lnsl)))
1412   KRB5_AC_ENABLE_DNS
1413   if test "$enable_dns" = yes ; then
1414     # We assume that if libresolv exists we can link against it.
1415     # This may get us a gethostby* that doesn't respect nsswitch.
1416     AC_CHECK_LIB(resolv, main)
1417
1418 _KRB5_AC_CHECK_RES_FUNCS(res_ninit res_nclose res_ndestroy res_nsearch dnl
1419 ns_initparse ns_name_uncompress dn_skipname res_search)
1420     if test $krb5_cv_func_res_nsearch = no \
1421       && test $krb5_cv_func_res_search = no; then
1422         # Attempt to link with res_search(), in case it's not prototyped.
1423         AC_CHECK_FUNC(res_search,
1424           [AC_DEFINE(HAVE_RES_SEARCH, 1,
1425             [Define to 1 if you have the `res_search' function])],
1426           [AC_ERROR([cannot find res_nsearch or res_search])])
1427     fi
1428   fi
1429 ])
1430 AC_DEFUN([_KRB5_AC_CHECK_RES_FUNCS],
1431 [AC_FOREACH([AC_Func], [$1],
1432   [AH_TEMPLATE(AS_TR_CPP(HAVE_[]AC_Func),
1433                [Define to 1 if you have the `]AC_Func[' function.])])dnl
1434 for krb5_func in $1; do
1435 _KRB5_AC_CHECK_RES_FUNC($krb5_func)
1436 done
1437 ])
1438 AC_DEFUN([_KRB5_AC_CHECK_RES_FUNC], [
1439 # Solaris 9 prototypes ns_name_uncompress() in arpa/nameser.h, but
1440 # doesn't export it from libresolv.so, so we use extreme paranoia here
1441 # and check both for the declaration and that we can link against the
1442 # function.
1443 AC_CACHE_CHECK([for $1], [krb5_cv_func_$1], [AC_TRY_LINK(
1444 [#include <sys/types.h>
1445 #include <netinet/in.h>
1446 #include <arpa/nameser.h>
1447 @%:@include <resolv.h>],
1448 [/*
1449  * Use volatile, or else optimization can cause false positives.
1450  */
1451 void (* volatile p)() = (void (*)())$1;],
1452                              [AS_VAR_SET(krb5_cv_func_$1, yes)],
1453                              [AS_VAR_SET(krb5_cv_func_$1, no)])])
1454 AS_IF([test AS_VAR_GET(krb5_cv_func_$1) = yes],
1455       [AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_$1]), 1,
1456                           [Define to 1 if you have the `$1' function])])[]dnl
1457 ])
1458 dnl
1459 dnl
1460 dnl KRB5_AC_ENABLE_DNS
1461 dnl
1462 AC_DEFUN(KRB5_AC_ENABLE_DNS, [
1463 enable_dns=yes
1464 enable_dns_for_kdc=yes
1465 AC_DEFINE(KRB5_DNS_LOOKUP_KDC,1,[Define to enable DNS lookups of Kerberos KDCs])
1466
1467   AC_ARG_ENABLE([dns-for-realm],
1468 [  --enable-dns-for-realm  enable DNS lookups of Kerberos realm names], ,
1469 [enable_dns_for_realm=no])
1470   if test "$enable_dns_for_realm" = yes; then
1471     AC_DEFINE(KRB5_DNS_LOOKUP_REALM,1,[Define to enable DNS lookups of Kerberos realm names])
1472   fi
1473
1474 AC_DEFINE(KRB5_DNS_LOOKUP, 1,[Define for DNS support of locating realms and KDCs])
1475
1476 ])
1477 dnl
1478 dnl
1479 dnl Check if we need the prototype for a function - we give it a bogus 
1480 dnl prototype and if it complains - then a valid prototype exists on the 
1481 dnl system.
1482 dnl
1483 dnl KRB5_NEED_PROTO(includes, function, [bypass])
1484 dnl if $3 set, don't see if library defined. 
1485 dnl Useful for case where we will define in libkrb5 the function if need be
1486 dnl but want to know if a prototype exists in either case on system.
1487 dnl
1488 AC_DEFUN([KRB5_NEED_PROTO], [
1489 ifelse([$3], ,[if test "x$ac_cv_func_$2" = xyes; then])
1490 AC_CACHE_CHECK([if $2 needs a prototype provided], krb5_cv_func_$2_noproto,
1491 AC_TRY_COMPILE([$1],
1492 [#undef $2
1493 struct k5foo {int foo; } xx;
1494 extern int $2 (struct k5foo*);
1495 $2(&xx);
1496 ],
1497 krb5_cv_func_$2_noproto=yes,krb5_cv_func_$2_noproto=no))
1498 if test $krb5_cv_func_$2_noproto = yes; then
1499         AC_DEFINE([NEED_]translit($2, [a-z], [A-Z])[_PROTO], 1, dnl
1500 [define if the system header files are missing prototype for $2()])
1501 fi
1502 ifelse([$3], ,[fi])
1503 ])
1504 dnl
1505 dnl =============================================================
1506 dnl Internal function for testing for getpeername prototype
1507 dnl
1508 AC_DEFUN([KRB5_GETPEERNAME_ARGS],[
1509 AC_DEFINE([GETPEERNAME_ARG2_TYPE],GETSOCKNAME_ARG2_TYPE,[Type of getpeername second argument.])
1510 AC_DEFINE([GETPEERNAME_ARG3_TYPE],GETSOCKNAME_ARG3_TYPE,[Type of getpeername second argument.])
1511 ])
1512 dnl
1513 dnl =============================================================
1514 dnl Internal function for testing for getsockname arguments
1515 dnl
1516 AC_DEFUN([TRY_GETSOCK_INT],[
1517 krb5_lib_var=`echo "$1 $2" | sed 'y% ./+-*%___p_p%'`
1518 AC_MSG_CHECKING([if getsockname() takes arguments $1 and $2])
1519 AC_CACHE_VAL(krb5_cv_getsockname_proto_$krb5_lib_var,
1520 [
1521 AC_TRY_COMPILE([#include <sys/types.h>
1522 #include <sys/socket.h>
1523 extern int getsockname(int, $1, $2);
1524 ],,eval "krb5_cv_getsockname_proto_$krb5_lib_var=yes",
1525     eval "krb5_cv_getsockname_proto_$krb5_lib_var=no")])
1526 if eval "test \"`echo '$krb5_cv_getsockname_proto_'$krb5_lib_var`\" = yes"; then
1527         AC_MSG_RESULT(yes)
1528         sock_set=yes; res1="$1"; res2="$2"
1529 else
1530         AC_MSG_RESULT(no)
1531 fi
1532 ])
1533 dnl
1534 dnl Determines the types of the second and third arguments to getsockname().
1535 dnl
1536 AC_DEFUN([KRB5_GETSOCKNAME_ARGS],[
1537 sock_set=no
1538 for sock_arg1 in "struct sockaddr *" "void *"
1539 do
1540   for sock_arg2 in "size_t *" "int *" "socklen_t *"
1541   do
1542         if test $sock_set = no; then
1543           TRY_GETSOCK_INT($sock_arg1, $sock_arg2)
1544         fi
1545   done 
1546 done
1547 if test "$sock_set" = no; then
1548   AC_MSG_NOTICE(assuming struct sockaddr and socklen_t for getsockname args)
1549   res1="struct sockaddr *"
1550   res2="socklen_t *"
1551 fi
1552 res1=`echo "$res1" | tr -d '*' | sed -e 's/ *$//'`
1553 res2=`echo "$res2" | tr -d '*' | sed -e 's/ *$//'`
1554 AC_DEFINE_UNQUOTED([GETSOCKNAME_ARG2_TYPE],$res1,[Type of pointer target for argument 2 to getsockname])
1555 AC_DEFINE_UNQUOTED([GETSOCKNAME_ARG3_TYPE],$res2,[Type of pointer target for argument 3 to getsockname])
1556 ])
1557 dnl
1558 dnl
1559 AC_DEFUN([KRB5_AC_CHOOSE_ET],[
1560 AC_ARG_WITH([system-et],
1561 AC_HELP_STRING(--with-system-et,use system compile_et and -lcom_err @<:@default: build and install a local version@:>@))
1562 AC_MSG_CHECKING(which version of com_err to use)
1563 if test "x$with_system_et" = xyes ; then
1564   COM_ERR_VERSION=sys
1565   AC_MSG_RESULT(system)
1566 else
1567   COM_ERR_VERSION=k5
1568   AC_MSG_RESULT(krb5)
1569 fi
1570 if test $COM_ERR_VERSION = sys; then
1571   # check for various functions we need
1572   AC_CHECK_LIB(com_err, add_error_table, :, AC_MSG_ERROR(cannot find add_error_table in com_err library))
1573   AC_CHECK_LIB(com_err, remove_error_table, :, AC_MSG_ERROR(cannot find remove_error_table in com_err library))
1574   # make sure compile_et provides "et_foo" name
1575   cat >> conf$$e.et <<EOF
1576 error_table foo
1577 error_code ERR_FOO, "foo"
1578 end
1579 EOF
1580   AC_CHECK_PROGS(compile_et,compile_et,false)
1581   if test "$compile_et" = false; then
1582     AC_MSG_ERROR(cannot find compile_et)
1583   fi
1584   AC_CACHE_CHECK(whether compile_et is useful,krb5_cv_compile_et_useful,[
1585   if compile_et conf$$e.et >/dev/null 2>&1 ; then true ; else
1586     AC_MSG_ERROR(execution failed)
1587   fi
1588   AC_TRY_COMPILE([#include "conf$$e.h"
1589                  ],[ &et_foo_error_table; ],:,
1590                  [AC_MSG_ERROR(cannot use et_foo_error_table)])
1591   # Anything else we need to test for?
1592   rm -f conf$$e.et conf$$e.c conf$$e.h
1593   krb5_cv_compile_et_useful=yes
1594   ])
1595 fi
1596 AC_SUBST(COM_ERR_VERSION)
1597 ])
1598 AC_DEFUN([KRB5_AC_CHOOSE_SS],[
1599 AC_ARG_WITH(system-ss,
1600             AC_HELP_STRING(--with-system-ss,use system -lss and mk_cmds @<:@private version@:>@))
1601 AC_ARG_VAR(SS_LIB,[system libraries for 'ss' package [-lss]])
1602 AC_MSG_CHECKING(which version of subsystem package to use)
1603 if test "x$with_system_ss" = xyes ; then
1604   SS_VERSION=sys
1605   AC_MSG_RESULT(system)
1606   # todo: check for various libraries we might need
1607   # in the meantime...
1608   test "x${SS_LIB+set}" = xset || SS_LIB=-lss
1609   old_LIBS="$LIBS"
1610   LIBS="$LIBS $SS_LIB"
1611   AC_CACHE_CHECK(whether system ss package works, krb5_cv_system_ss_okay,[
1612   AC_TRY_RUN([
1613 #include <ss/ss.h>
1614 int main(int argc, char *argv[]) {
1615   if (argc == 42) {
1616     int i, err;
1617     i = ss_create_invocation("foo","foo","",0,&err);
1618     ss_listen(i);
1619   }
1620   return 0;
1621 }], krb5_cv_system_ss_okay=yes, AC_MSG_ERROR(cannot run test program),
1622   krb5_cv_system_ss_okay="assumed")])
1623   LIBS="$old_LIBS"
1624 else
1625   SS_VERSION=k5
1626   AC_MSG_RESULT(krb5)
1627 fi
1628 AC_SUBST(SS_LIB)
1629 AC_SUBST(SS_VERSION)
1630 ])
1631 dnl
1632 AC_DEFUN([KRB5_AC_CHOOSE_DB],[
1633 AC_ARG_WITH(system-db,
1634             AC_HELP_STRING(--with-system-db,use system Berkeley db @<:@private version@:>@))
1635 AC_ARG_VAR(DB_HEADER,[header file for system Berkeley db package [db.h]])
1636 AC_ARG_VAR(DB_LIB,[library for system Berkeley db package [-ldb]])
1637 if test "x$with_system_db" = xyes ; then
1638   DB_VERSION=sys
1639   # TODO: Do we have specific routines we should check for?
1640   # How about known, easily recognizable bugs?
1641   # We want to use bt_rseq in some cases, but no other version but
1642   # ours has it right now.
1643   #
1644   # Okay, check the variables.
1645   test "x${DB_HEADER+set}" = xset || DB_HEADER=db.h
1646   test "x${DB_LIB+set}" = xset || DB_LIB=-ldb
1647   #
1648   if test "x${DB_HEADER}" = xdb.h ; then
1649     DB_HEADER_VERSION=sys
1650   else
1651     DB_HEADER_VERSION=redirect
1652   fi
1653   KDB5_DB_LIB="$DB_LIB"
1654 else
1655   DB_VERSION=k5
1656   AC_DEFINE(HAVE_BT_RSEQ,1,[Define if bt_rseq is available, for recursive btree traversal.])
1657   DB_HEADER=db.h
1658   DB_HEADER_VERSION=k5
1659   # libdb gets sucked into libkdb
1660   KDB5_DB_LIB=
1661   # needed for a couple of things that need libdb for its own sake
1662   DB_LIB=-ldb
1663 fi
1664 AC_SUBST(DB_VERSION)
1665 AC_SUBST(DB_HEADER)
1666 AC_SUBST(DB_HEADER_VERSION)
1667 AC_SUBST(DB_LIB)
1668 AC_SUBST(KDB5_DB_LIB)
1669 ])
1670 dnl
1671 dnl KRB5_AC_PRIOCNTL_HACK
1672 dnl
1673 dnl
1674 AC_DEFUN([KRB5_AC_PRIOCNTL_HACK],
1675 [AC_REQUIRE([AC_PROG_AWK])dnl
1676 AC_REQUIRE([AC_LANG_COMPILER_REQUIRE])dnl
1677 AC_CACHE_CHECK([whether to use priocntl hack], [krb5_cv_priocntl_hack],
1678 [case $krb5_cv_host in
1679 *-*-solaris2.9*)
1680         if test "$cross_compiling" = yes; then
1681                 krb5_cv_priocntl_hack=yes
1682         else
1683                 # Solaris patch 117171-11 (sparc) or 117172-11 (x86)
1684                 # fixes the Solaris 9 bug where final pty output
1685                 # gets lost on close.
1686                 if showrev -p | $AWK 'BEGIN { e = 1 }
1687 /Patch: 11717[[12]]/ { x = index[]([$]2, "-");
1688 if (substr[]([$]2, x + 1, length([$]2) - x) >= 11)
1689 { e = 0 } else { e = 1 } }
1690 END { exit e; }'; then
1691                         krb5_cv_priocntl_hack=no
1692                 else
1693                         krb5_cv_priocntl_hack=yes
1694                 fi
1695         fi
1696         ;;
1697 *)
1698         krb5_cv_priocntl_hack=no
1699         ;;
1700 esac])
1701 if test "$krb5_cv_priocntl_hack" = yes; then
1702         PRIOCNTL_HACK=1
1703 else
1704         PRIOCNTL_HACK=0
1705 fi
1706 AC_SUBST(PRIOCNTL_HACK)])
1707 dnl
1708 dnl
1709 dnl KRB5_AC_GCC_ATTRS
1710 AC_DEFUN([KRB5_AC_GCC_ATTRS],
1711 [AC_CACHE_CHECK([for constructor/destructor attribute support],krb5_cv_attr_constructor_destructor,
1712 [rm -f conftest.1 conftest.2
1713 if test -r conftest.1 || test -r conftest.2 ; then
1714   AC_MSG_ERROR(write error in local file system?)
1715 fi
1716 true > conftest.1
1717 true > conftest.2
1718 if test -r conftest.1 && test -r conftest.2 ; then true ; else
1719   AC_MSG_ERROR(write error in local file system?)
1720 fi
1721 a=no
1722 b=no
1723 # blindly assume we have 'unlink'...
1724 AC_TRY_RUN([void foo1() __attribute__((constructor));
1725 void foo1() { unlink("conftest.1"); }
1726 void foo2() __attribute__((destructor));
1727 void foo2() { unlink("conftest.2"); }
1728 int main () { return 0; }],
1729 [test -r conftest.1 || a=yes
1730 test -r conftest.2 || b=yes], , AC_MSG_ERROR(Cannot test for constructor/destructor support when cross compiling))
1731 case $krb5_cv_host in
1732 *-*-aix4.*)
1733         # Under AIX 4.3.3, at least, shared library destructor functions
1734         # appear to get executed in reverse link order (right to left),
1735         # so that a library's destructor function may run after that of
1736         # libraries it depends on, and may still have to access in the
1737         # destructor.
1738         #
1739         # That counts as "not working", for me, but it's a much more
1740         # complicated test case to set up.
1741         b=no
1742         ;;
1743 esac
1744 krb5_cv_attr_constructor_destructor="$a,$b"
1745 ])
1746 # Okay, krb5_cv_... should be set now.
1747 case $krb5_cv_attr_constructor_destructor in
1748   yes,*)
1749     AC_DEFINE(CONSTRUCTOR_ATTR_WORKS,1,[Define if __attribute__((constructor)) works]) ;;
1750 esac
1751 case $krb5_cv_attr_constructor_destructor in
1752   *,yes)
1753     AC_DEFINE(DESTRUCTOR_ATTR_WORKS,1,[Define if __attribute__((destructor)) works]) ;;
1754 esac
1755 dnl End of attributes we care about right now.
1756 ])
1757 dnl
1758 dnl
1759 dnl KRB5_AC_PRAGMA_WEAK_REF
1760 AC_DEFUN([KRB5_AC_PRAGMA_WEAK_REF],
1761 [AC_CACHE_CHECK([whether pragma weak references are supported],
1762 krb5_cv_pragma_weak_ref,
1763 [AC_TRY_LINK([#pragma weak flurbl
1764 extern int flurbl(void);],[if (&flurbl != 0) return flurbl();],
1765 krb5_cv_pragma_weak_ref=yes,krb5_cv_pragma_weak_ref=no)])
1766 if test $krb5_cv_pragma_weak_ref = yes ; then
1767   AC_DEFINE(HAVE_PRAGMA_WEAK_REF,1,[Define if #pragma weak references work])
1768 fi])
1769 dnl
1770 dnl
1771 m4_include(config/ac-archive/acx_pthread.m4)
1772 #
1773 # KRB5_AC_LIBUTIL
1774 #
1775 # Check for libutil, for NetBSD, et al.; needed for openpty() and
1776 # logwtmp() on some platforms.
1777 #
1778 AC_DEFUN([KRB5_AC_LIBUTIL],
1779         [AC_CHECK_LIB(util, main,
1780                 [AC_DEFINE(HAVE_LIBUTIL,1,[Define if util library is available with openpty, logwtmp, etc])
1781   UTIL_LIB=-lutil])dnl
1782 AC_SUBST(UTIL_LIB)
1783 ])
1784 dnl
1785 dnl
1786 dnl
1787 dnl --with-ldap=value
1788 dnl
1789 AC_DEFUN(WITH_LDAP,[
1790 AC_ARG_WITH([ldap],
1791 [  --with-ldap             compile OpenLDAP database backend module],
1792 [case "$withval" in
1793     OPENLDAP) with_ldap=yes ;;
1794     yes | no) ;;
1795     EDIRECTORY) AC_MSG_ERROR(Option --with-ldap=EDIRECTORY is deprecated; use --with-edirectory instead.) ;;
1796     *)  AC_MSG_ERROR(Invalid option value --with-ldap="$withval") ;;
1797 esac], with_ldap=no)dnl
1798 AC_ARG_WITH([edirectory],
1799 [  --with-edirectory       compile eDirectory database backend module],
1800 [case "$withval" in
1801     yes | no) ;;
1802     *)  AC_MSG_ERROR(Invalid option value --with-edirectory="$withval") ;;
1803 esac], with_edirectory=no)dnl
1804
1805 if test $with_ldap = yes; then
1806   if test $with_edirectory = yes; then
1807     AC_MSG_ERROR(Cannot enable both OpenLDAP and eDirectory backends; choose one.)
1808   fi
1809   AC_MSG_NOTICE(enabling OpenLDAP database backend module support)
1810   OPENLDAP_PLUGIN=yes
1811 elif test $with_edirectory = yes; then
1812   AC_MSG_NOTICE(enabling eDirectory database backend module support)
1813   OPENLDAP_PLUGIN=yes
1814   AC_DEFINE(HAVE_EDIRECTORY,1,[Define if LDAP KDB interface should assume eDirectory.])
1815 else
1816   : # neither enabled
1817 dnl  AC_MSG_NOTICE(disabling ldap backend module support)
1818 fi
1819 AC_SUBST(OPENLDAP_PLUGIN)
1820 ])dnl
1821 dnl
1822 dnl If libkeyutils exists (on Linux) include it and use keyring ccache
1823 AC_DEFUN(KRB5_AC_KEYRING_CCACHE,[
1824   AC_CHECK_HEADERS([keyutils.h],
1825     AC_CHECK_LIB(keyutils, add_key, 
1826       [dnl Pre-reqs were found
1827        AC_DEFINE(USE_KEYRING_CCACHE, 1, [Define if the keyring ccache should be enabled])
1828        LIBS="-lkeyutils $LIBS"
1829       ]))
1830 ])dnl
1831 dnl