Add a configure option --disable-rpath to suppress rpath flags in
[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 fi
718 AC_SUBST(WARN_CFLAGS)
719 AC_SUBST(WARN_CXXFLAGS)
720 ])dnl
721 dnl
722 dnl
723 dnl check for yylineno -- HAVE_YYLINENO
724 dnl
725 AC_DEFUN(HAVE_YYLINENO,[dnl
726 AC_REQUIRE_CPP()AC_REQUIRE([AC_PROG_LEX])dnl
727 AC_MSG_CHECKING([for yylineno declaration])
728 AC_CACHE_VAL(krb5_cv_type_yylineno,
729 # some systems have yylineno, others don't...
730   echo '%%
731 %%' | ${LEX} -t > conftest.out
732   if egrep yylineno conftest.out >/dev/null 2>&1; then
733         krb5_cv_type_yylineno=yes
734   else
735         krb5_cv_type_yylineno=no
736   fi
737   rm -f conftest.out)
738   AC_MSG_RESULT($krb5_cv_type_yylineno)
739   if test $krb5_cv_type_yylineno = no; then
740         AC_DEFINE(NO_YYLINENO, 1, [Define if lex produes code with yylineno])
741   fi
742 ])dnl
743 dnl
744 dnl K5_GEN_MAKEFILE([dir, [frags]])
745 dnl
746 AC_DEFUN(K5_GEN_MAKEFILE,[dnl
747 ifelse($1, ,[_K5_GEN_MAKEFILE(.,$2)],[_K5_GEN_MAKEFILE($1,$2)])
748 ])
749 dnl
750 dnl _K5_GEN_MAKEFILE(dir, [frags])
751 dnl  dir must be present in this case
752 dnl  Note: Be careful in quoting. 
753 dnl        The ac_foreach generates the list of fragments to include
754 dnl        or "" if $2 is empty
755 AC_DEFUN(_K5_GEN_MAKEFILE,[dnl
756 AC_CONFIG_FILES([$1/Makefile:$srcdir/]K5_TOPDIR[/config/pre.in:$1/Makefile.in:$srcdir/]K5_TOPDIR[/config/post.in])
757 ])
758 dnl
759 dnl K5_GEN_FILE( <ac_output arguments> )
760 dnl
761 AC_DEFUN(K5_GEN_FILE,[AC_CONFIG_FILES($1)])dnl
762 dnl
763 dnl K5_AC_OUTPUT
764 dnl    Note: Adds the variables to config.status for individual 
765 dnl          Makefile generation from config.status
766 AC_DEFUN(K5_AC_OUTPUT,[AC_OUTPUT])dnl
767 dnl
768 dnl V5_AC_OUTPUT_MAKEFILE
769 dnl
770 AC_DEFUN(V5_AC_OUTPUT_MAKEFILE,
771 [ifelse($1, , [_V5_AC_OUTPUT_MAKEFILE(.,$2)],[_V5_AC_OUTPUT_MAKEFILE($1,$2)])])
772 dnl
773 define(_V5_AC_OUTPUT_MAKEFILE,
774 [ifelse($2, , ,AC_CONFIG_FILES($2))
775 AC_FOREACH([DIR], [$1],dnl
776  [AC_CONFIG_FILES(DIR[/Makefile:$srcdir/]K5_TOPDIR[/config/pre.in:]DIR[/Makefile.in:$srcdir/]K5_TOPDIR[/config/post.in])])
777 K5_AC_OUTPUT])dnl
778 dnl
779 dnl
780 dnl KRB5_SOCKADDR_SA_LEN: define HAVE_SA_LEN if sockaddr contains the sa_len
781 dnl component
782 dnl
783 AC_DEFUN([KRB5_SOCKADDR_SA_LEN],[ dnl
784 AC_CHECK_MEMBER(struct sockaddr.sa_len,
785   AC_DEFINE(HAVE_SA_LEN,1,[Define if struct sockaddr contains sa_len])
786 ,,[#include <sys/types.h>
787 #include <sys/socket.h>])])
788 dnl
789 dnl
790 dnl CHECK_UTMP: check utmp structure and functions
791 dnl
792 AC_DEFUN(CHECK_UTMP,[
793 AC_CHECK_MEMBERS([struct utmp.ut_pid, struct utmp.ut_type, struct utmp.ut_host, struct utmp.ut_exit],,,
794 [#include <sys/types.h>
795 #include <utmp.h>])
796
797 # Define the names actually used in the krb5 code currently:
798 if test $ac_cv_member_struct_utmp_ut_pid = no; then
799   AC_DEFINE(NO_UT_PID,1,[Define if ut_pid field not found])
800 fi
801 if test $ac_cv_member_struct_utmp_ut_type = no; then
802   AC_DEFINE(NO_UT_TYPE,1,[Define if ut_type field not found])
803 fi
804 if test $ac_cv_member_struct_utmp_ut_host = no; then
805   AC_DEFINE(NO_UT_HOST,1,[Define if ut_host field not found])
806 fi
807 if test $ac_cv_member_struct_utmp_ut_exit = no; then
808   AC_DEFINE(NO_UT_EXIT,1,[Define if ut_exit field not found])
809 fi
810
811 AC_CHECK_FUNCS(setutent setutxent updwtmp updwtmpx)
812 ])dnl
813 dnl
814 dnl WITH_NETLIB
815 dnl 
816 dnl
817 AC_DEFUN(WITH_NETLIB,[
818 AC_ARG_WITH([netlib],
819 AC_HELP_STRING([--with-netlib=LIBS], use user defined resolver library),
820 [  if test "$withval" = yes -o "$withval" = no ; then
821         AC_MSG_RESULT("netlib will link with C library resolver only")
822   else
823         LIBS="$LIBS $withval"
824         AC_MSG_RESULT("netlib will use \'$withval\'")
825   fi
826 ],dnl
827 [AC_LIBRARY_NET]
828 )])dnl
829 dnl
830 dnl
831 AC_DEFUN(KRB5_AC_NEED_DAEMON, [
832 KRB5_NEED_PROTO([#ifdef HAVE_UNISTD_H
833 #include <unistd.h>
834 #endif],daemon,1)])dnl
835 dnl
836 dnl Check if stdarg or varargs is available *and compiles*; prefer stdarg.
837 dnl (This was sent to djm for incorporation into autoconf 3/12/1996.  KR)
838 dnl
839 AC_DEFUN(AC_HEADER_STDARG, [
840
841 AC_MSG_CHECKING([for stdarg.h])
842 AC_CACHE_VAL(ac_cv_header_stdarg_h,
843 [AC_TRY_COMPILE([#include <stdarg.h>], [
844   } /* ac_try_compile will have started a function body */
845   int aoeu (char *format, ...) {
846     va_list v;
847     int i;
848     va_start (v, format);
849     i = va_arg (v, int);
850     va_end (v);
851 ],ac_cv_header_stdarg_h=yes,ac_cv_header_stdarg_h=no)])dnl
852 AC_MSG_RESULT($ac_cv_header_stdarg_h)
853 if test $ac_cv_header_stdarg_h = yes; then
854   AC_DEFINE(HAVE_STDARG_H, 1, [Define if stdarg available and compiles])
855 else
856
857 AC_MSG_CHECKING([for varargs.h])
858 AC_CACHE_VAL(ac_cv_header_varargs_h,
859 [AC_TRY_COMPILE([#include <varargs.h>],[
860   } /* ac_try_compile will have started a function body */
861   int aoeu (va_alist) va_dcl {
862     va_list v;
863     int i;
864     va_start (v);
865     i = va_arg (v, int);
866     va_end (v);
867 ],ac_cv_header_varargs_h=yes,ac_cv_header_varargs_h=no)])dnl
868 AC_MSG_RESULT($ac_cv_header_varargs_h)
869 if test $ac_cv_header_varargs_h = yes; then
870   AC_DEFINE(HAVE_VARARGS_H, 1, [Define if varargs available and compiles])
871 else
872   AC_MSG_ERROR(Neither stdarg nor varargs compile?)
873 fi
874
875 fi dnl stdarg test failure
876
877 ])dnl
878
879 dnl
880 dnl KRB5_AC_NEED_LIBGEN --- check if libgen needs to be linked in for
881 dnl                             compile/step    
882 dnl
883 dnl
884 AC_DEFUN(KRB5_AC_NEED_LIBGEN,[
885 AC_REQUIRE([AC_PROG_CC])dnl
886 dnl
887 dnl regcomp is present but non-functional on Solaris 2.4
888 dnl
889 AC_MSG_CHECKING(for working regcomp)
890 AC_CACHE_VAL(ac_cv_func_regcomp,[
891 AC_TRY_RUN([
892 #include <sys/types.h>
893 #include <regex.h>
894 regex_t x; regmatch_t m;
895 int main() { return regcomp(&x,"pat.*",0) || regexec(&x,"pattern",1,&m,0); }
896 ], ac_cv_func_regcomp=yes, ac_cv_func_regcomp=no, AC_MSG_ERROR([Cannot test regcomp when cross compiling]))])
897 AC_MSG_RESULT($ac_cv_func_regcomp)
898 test $ac_cv_func_regcomp = yes && AC_DEFINE(HAVE_REGCOMP,1,[Define if regcomp exists and functions])
899 dnl
900 dnl Check for the compile and step functions - only if regcomp is not available
901 dnl
902 if test $ac_cv_func_regcomp = no; then
903  save_LIBS="$LIBS"
904  LIBS=-lgen
905 dnl this will fail if there's no compile/step in -lgen, or if there's
906 dnl no -lgen.  This is fine.
907  AC_CHECK_FUNCS(compile step)
908  LIBS="$save_LIBS"
909 dnl
910 dnl Set GEN_LIB if necessary 
911 dnl
912  AC_CHECK_LIB(gen, compile, GEN_LIB=-lgen, GEN_LIB=)
913  AC_SUBST(GEN_LIB)
914 fi
915 ])
916 dnl
917 dnl KRB5_AC_REGEX_FUNCS --- check for different regular expression 
918 dnl                             support functions
919 dnl
920 AC_DEFUN(KRB5_AC_REGEX_FUNCS,[
921 AC_CHECK_FUNCS(re_comp re_exec regexec)
922 AC_REQUIRE([KRB5_AC_NEED_LIBGEN])dnl
923 ])dnl
924 dnl
925 dnl AC_KRB5_TCL_FIND_CONFIG (uses tcl_dir)
926 dnl
927 AC_DEFUN(AC_KRB5_TCL_FIND_CONFIG,[
928 AC_REQUIRE([KRB5_LIB_AUX])dnl
929 AC_MSG_CHECKING(for tclConfig.sh)
930 dnl On Debian, we might be given --with-tcl=/usr, or tclsh might
931 dnl point us to /usr/lib/tcl8.4; either way, we need to find
932 dnl /usr/lib/tcl8.4/tclConfig.sh.
933 dnl On NetBSD, we might be given --with-tcl=/usr/pkg, or tclsh
934 dnl might point us to /usr/pkg/lib/tcl8.4; we need to find
935 dnl /usr/pkg/lib/tclConfig.sh.
936 if test -r "$tcl_dir/lib/tclConfig.sh" ; then
937   tcl_conf="$tcl_dir/lib/tclConfig.sh"
938 elif test -r "$tcl_dir/tclConfig.sh" ; then
939   tcl_conf="$tcl_dir/tclConfig.sh"
940 elif test -r "$tcl_dir/../tclConfig.sh" ; then
941   tcl_conf="$tcl_dir/../tclConfig.sh"
942 else
943   tcl_conf=
944   lib="$tcl_dir/lib"
945   changequote(<<,>>)dnl
946   for d in "$lib" "$lib"/tcl7.[0-9] "$lib"/tcl8.[0-9] ; do
947     if test -r "$d/tclConfig.sh" ; then
948       tcl_conf="$tcl_conf $d/tclConfig.sh"
949     fi
950   done
951   changequote([,])dnl
952 fi
953 if test -n "$tcl_conf" ; then
954   AC_MSG_RESULT($tcl_conf)
955 else
956   AC_MSG_RESULT(not found)
957 fi
958 tcl_ok_conf=
959 tcl_vers_maj=
960 tcl_vers_min=
961 old_CPPFLAGS=$CPPFLAGS
962 old_LIBS=$LIBS
963 old_LDFLAGS=$LDFLAGS
964 if test -n "$tcl_conf" ; then
965   for file in $tcl_conf ; do
966     TCL_MAJOR_VERSION=x ; TCL_MINOR_VERSION=x
967     AC_MSG_CHECKING(Tcl info in $file)
968     . $file
969     v=$TCL_MAJOR_VERSION.$TCL_MINOR_VERSION
970     if test -z "$tcl_vers_maj" \
971         || test "$tcl_vers_maj" -lt "$TCL_MAJOR_VERSION" \
972         || test "$tcl_vers_maj" = "$TCL_MAJOR_VERSION" -a "$tcl_vers_min" -lt "$TCL_MINOR_VERSION" ; then
973       for incdir in "$TCL_PREFIX/include/tcl$v" "$TCL_PREFIX/include" ; do
974         if test -r "$incdir/tcl.h" -o -r "$incdir/tcl/tcl.h" ; then
975           CPPFLAGS="$old_CPPFLAGS -I$incdir"
976           break
977         fi
978       done
979       LIBS="$old_LIBS `eval echo x $TCL_LIB_SPEC $TCL_LIBS | sed 's/^x//'`"
980       LDFLAGS="$old_LDFLAGS $TCL_LD_FLAGS"
981       AC_TRY_LINK( , [Tcl_CreateInterp ();],
982         tcl_ok_conf=$file
983         tcl_vers_maj=$TCL_MAJOR_VERSION
984         tcl_vers_min=$TCL_MINOR_VERSION
985         AC_MSG_RESULT($v - working),
986         AC_MSG_RESULT($v - compilation failed)
987       )
988     else
989       AC_MSG_RESULT(older version $v)
990     fi
991   done
992 fi
993 CPPFLAGS=$old_CPPFLAGS
994 LIBS=$old_LIBS
995 LDFLAGS=$old_LDFLAGS
996 tcl_header=no
997 tcl_lib=no
998 if test -n "$tcl_ok_conf" ; then
999   . $tcl_ok_conf
1000   TCL_INCLUDES=
1001   for incdir in "$TCL_PREFIX/include/tcl$v" "$TCL_PREFIX/include" ; do
1002     if test -r "$incdir/tcl.h" -o -r "$incdir/tcl/tcl.h" ; then
1003       if test "$incdir" != "/usr/include" ; then
1004         TCL_INCLUDES=-I$incdir
1005       fi
1006       break
1007     fi
1008   done
1009   # Need eval because the first-level expansion could reference
1010   # variables like ${TCL_DBGX}.
1011   eval TCL_LIBS='"'$TCL_LIB_SPEC $TCL_LIBS $TCL_DL_LIBS'"'
1012   TCL_LIBPATH="-L$TCL_EXEC_PREFIX/lib"
1013   TCL_RPATH=":$TCL_EXEC_PREFIX/lib"
1014   if test "$DEPLIBEXT" != "$SHLIBEXT" && test -n "$RPATH_FLAG"; then
1015     TCL_MAYBE_RPATH='$(RPATH_FLAG)'"$TCL_EXEC_PREFIX/lib$RPATH_TAIL"
1016   else
1017     TCL_MAYBE_RPATH=
1018   fi
1019   CPPFLAGS="$old_CPPFLAGS $TCL_INCLUDES"
1020   AC_CHECK_HEADER(tcl.h,AC_DEFINE(HAVE_TCL_H,1,[Define if tcl.h is available]) tcl_header=yes)
1021   if test $tcl_header=no; then
1022      AC_CHECK_HEADER(tcl/tcl.h,AC_DEFINE(HAVE_TCL_TCL_H,1,[Define if tcl/tcl.h is available]) tcl_header=yes)
1023   fi
1024   CPPFLAGS="$old_CPPFLAGS"
1025   tcl_lib=yes
1026 else
1027   # If we read a tclConfig.sh file, it probably set this.
1028   TCL_LIBS=
1029 fi  
1030 AC_SUBST(TCL_INCLUDES)
1031 AC_SUBST(TCL_LIBS)
1032 AC_SUBST(TCL_LIBPATH)
1033 AC_SUBST(TCL_RPATH)
1034 AC_SUBST(TCL_MAYBE_RPATH)
1035 ])dnl
1036 dnl
1037 dnl AC_KRB5_TCL_TRYOLD
1038 dnl attempt to use old search algorithm for locating tcl
1039 dnl
1040 AC_DEFUN(AC_KRB5_TCL_TRYOLD, [
1041 AC_REQUIRE([KRB5_AC_FIND_DLOPEN])
1042 AC_MSG_WARN([trying old tcl search code])
1043 if test "$with_tcl" != yes -a "$with_tcl" != no; then
1044         TCL_INCLUDES=-I$with_tcl/include
1045         TCL_LIBPATH=-L$with_tcl/lib
1046         TCL_RPATH=:$with_tcl/lib
1047 fi
1048 if test "$with_tcl" != no ; then
1049         krb5_save_CPPFLAGS="$CPPFLAGS"
1050         krb5_save_LDFLAGS="$LDFLAGS"
1051         CPPFLAGS="$CPPFLAGS $TCL_INCLUDES"
1052         LDFLAGS="$LDFLAGS $TCL_LIBPATH"
1053         tcl_header=no
1054         AC_CHECK_HEADER(tcl.h,AC_DEFINE(HAVE_TCL_H,1,[Define if tcl.h found]) tcl_header=yes)
1055         if test $tcl_header=no; then
1056            AC_CHECK_HEADER(tcl/tcl.h,AC_DEFINE(HAVE_TCL_TCL_H,1,[Define if tcl/tcl.h found]) tcl_header=yes)
1057         fi
1058
1059         if test $tcl_header = yes ; then
1060                 tcl_lib=no
1061
1062                 if test $tcl_lib = no; then
1063                         AC_CHECK_LIB(tcl8.0, Tcl_CreateCommand, 
1064                                 TCL_LIBS="$TCL_LIBS -ltcl8.0 -lm $DL_LIB $LIBS"
1065                                 tcl_lib=yes,,-lm $DL_LIB)
1066                 fi
1067                 if test $tcl_lib = no; then
1068                         AC_CHECK_LIB(tcl7.6, Tcl_CreateCommand, 
1069                                 TCL_LIBS="$TCL_LIBS -ltcl7.6 -lm $DL_LIB $LIBS"
1070                                 tcl_lib=yes,,-lm $DL_LIB)
1071                 fi
1072                 if test $tcl_lib = no; then
1073                         AC_CHECK_LIB(tcl7.5, Tcl_CreateCommand, 
1074                                 TCL_LIBS="$TCL_LIBS -ltcl7.5 -lm $DL_LIB $LIBS"
1075                                 tcl_lib=yes,,-lm $DL_LIB)
1076
1077                 fi
1078                 if test $tcl_lib = no ; then
1079                         AC_CHECK_LIB(tcl, Tcl_CreateCommand, 
1080                                 TCL_LIBS="$TCL_LIBS -ltcl -lm $DL_LIB $LIBS"
1081                                 tcl_lib=yes,,-lm $DL_LIB)
1082
1083                 fi
1084                 if test $tcl_lib = no ; then            
1085                         AC_MSG_WARN("tcl.h found but not library")
1086                 fi
1087         else
1088                 AC_MSG_WARN(Could not find Tcl which is needed for the kadm5 tests)
1089                 TCL_LIBS=
1090         fi
1091         CPPFLAGS="$krb5_save_CPPFLAGS"
1092         LDFLAGS="$krb5_save_LDFLAGS"
1093         AC_SUBST(TCL_INCLUDES)
1094         AC_SUBST(TCL_LIBS)
1095         AC_SUBST(TCL_LIBPATH)
1096         AC_SUBST(TCL_RPATH)
1097 else
1098         AC_MSG_RESULT("Not looking for Tcl library")
1099 fi
1100 ])dnl
1101 dnl
1102 dnl AC_KRB5_TCL - determine if the TCL library is present on system
1103 dnl
1104 AC_DEFUN(AC_KRB5_TCL,[
1105 TCL_INCLUDES=
1106 TCL_LIBPATH=
1107 TCL_RPATH=
1108 TCL_LIBS=
1109 TCL_WITH=
1110 tcl_dir=
1111 AC_ARG_WITH(tcl,
1112 [  --with-tcl=path         where Tcl resides], , with_tcl=try)
1113 if test "$with_tcl" = no ; then
1114   true
1115 elif test "$with_tcl" = yes -o "$with_tcl" = try ; then
1116   tcl_dir=/usr
1117   if test ! -r /usr/lib/tclConfig.sh; then
1118     cat >> conftest <<\EOF
1119 puts "tcl_dir=$tcl_library"
1120 EOF
1121     if tclsh conftest >conftest.out 2>/dev/null; then
1122       if grep tcl_dir= conftest.out >/dev/null 2>&1; then
1123         t=`sed s/tcl_dir=// conftest.out`
1124         tcl_dir=$t
1125       fi
1126     fi # tclsh ran script okay
1127   rm -f conftest conftest.out
1128   fi # no /usr/lib/tclConfig.sh
1129 else
1130   tcl_dir=$with_tcl
1131 fi
1132 if test "$with_tcl" != no ; then
1133   AC_KRB5_TCL_FIND_CONFIG
1134   if test $tcl_lib = no ; then
1135     if test "$with_tcl" != try ; then
1136       AC_KRB5_TCL_TRYOLD
1137     else
1138       AC_MSG_WARN(Could not find Tcl which is needed for some tests)
1139     fi
1140   fi
1141 fi
1142 # If "yes" or pathname, error out if not found.
1143 if test "$with_tcl" != no -a "$with_tcl" != try ; then
1144   if test "$tcl_header $tcl_lib" != "yes yes" ; then
1145     AC_MSG_ERROR(Could not find Tcl)
1146   fi
1147 fi
1148 ])dnl
1149
1150 dnl
1151 dnl WITH_HESIOD
1152 dnl
1153 AC_DEFUN(WITH_HESIOD,
1154 [AC_ARG_WITH(hesiod, AC_HELP_STRING(--with-hesiod[=path], compile with hesiod support @<:@omitted@:>@),
1155         hesiod=$with_hesiod, with_hesiod=no)
1156 if test "$with_hesiod" != "no"; then
1157         HESIOD_DEFS=-DHESIOD
1158         AC_CHECK_LIB(resolv, res_send, res_lib=-lresolv)
1159         if test "$hesiod" != "yes"; then
1160                 HESIOD_LIBS="-L${hesiod}/lib -lhesiod $res_lib"
1161         else
1162                 HESIOD_LIBS="-lhesiod $res_lib"
1163         fi
1164 else
1165         HESIOD_DEFS=
1166         HESIOD_LIBS=
1167 fi
1168 AC_SUBST(HESIOD_DEFS)
1169 AC_SUBST(HESIOD_LIBS)])
1170
1171
1172 dnl
1173 dnl KRB5_BUILD_LIBRARY
1174 dnl
1175 dnl Pull in the necessary stuff to create the libraries.
1176
1177 AC_DEFUN(KRB5_BUILD_LIBRARY,
1178 [AC_REQUIRE([KRB5_LIB_AUX])dnl
1179 AC_REQUIRE([AC_PROG_LN_S])dnl
1180 AC_REQUIRE([AC_PROG_RANLIB])dnl
1181 AC_REQUIRE([AC_PROG_ARCHIVE])dnl
1182 AC_REQUIRE([AC_PROG_ARCHIVE_ADD])dnl
1183 AC_REQUIRE([AC_PROG_INSTALL])dnl
1184 AC_CHECK_PROG(AR, ar, ar, false)
1185 AC_CHECK_PROG(PERL, perl, perl, false)
1186 if test "$ac_cv_prog_PERL" = "false"; then
1187   AC_MSG_ERROR(Perl is now required for Kerberos builds.)
1188 fi
1189 AC_SUBST(LIBLIST)
1190 AC_SUBST(LIBLINKS)
1191 AC_SUBST(MAKE_SHLIB_COMMAND)
1192 AC_SUBST(SHLIB_RPATH_FLAGS)
1193 AC_SUBST(SHLIB_EXPFLAGS)
1194 AC_SUBST(SHLIB_EXPORT_FILE_DEP)
1195 AC_SUBST(DYNOBJ_EXPDEPS)
1196 AC_SUBST(DYNOBJ_EXPFLAGS)
1197 AC_SUBST(INSTALL_SHLIB)
1198 AC_SUBST(STLIBEXT)
1199 AC_SUBST(SHLIBEXT)
1200 AC_SUBST(SHLIBVEXT)
1201 AC_SUBST(SHLIBSEXT)
1202 AC_SUBST(DEPLIBEXT)
1203 AC_SUBST(PFLIBEXT)
1204 AC_SUBST(LIBINSTLIST)
1205 AC_SUBST(DYNOBJEXT)
1206 AC_SUBST(MAKE_DYNOBJ_COMMAND)
1207 ])
1208
1209 dnl
1210 dnl KRB5_BUILD_LIBOBJS
1211 dnl
1212 dnl Pull in the necessary stuff to build library objects.
1213
1214 AC_DEFUN(KRB5_BUILD_LIBOBJS,
1215 [AC_REQUIRE([KRB5_LIB_AUX])dnl
1216 AC_SUBST(OBJLISTS)
1217 AC_SUBST(STOBJEXT)
1218 AC_SUBST(SHOBJEXT)
1219 AC_SUBST(PFOBJEXT)
1220 AC_SUBST(PICFLAGS)
1221 AC_SUBST(PROFFLAGS)])
1222
1223 dnl
1224 dnl KRB5_BUILD_PROGRAM
1225 dnl
1226 dnl Set variables to build a program.
1227
1228 AC_DEFUN(KRB5_BUILD_PROGRAM,
1229 [AC_REQUIRE([KRB5_LIB_AUX])dnl
1230 AC_REQUIRE([KRB5_AC_NEED_LIBGEN])dnl
1231 AC_SUBST(CC_LINK)
1232 AC_SUBST(CXX_LINK)
1233 AC_SUBST(RPATH_FLAG)
1234 AC_SUBST(PROG_RPATH_FLAGS)
1235 AC_SUBST(DEPLIBEXT)])
1236
1237 dnl
1238 dnl KRB5_RUN_FLAGS
1239 dnl
1240 dnl Set up environment for running dynamic executables out of build tree
1241
1242 AC_DEFUN(KRB5_RUN_FLAGS,
1243 [AC_REQUIRE([KRB5_LIB_AUX])dnl
1244 KRB5_RUN_ENV="$RUN_ENV"
1245 AC_SUBST(KRB5_RUN_ENV)])
1246
1247 dnl
1248 dnl KRB5_LIB_AUX
1249 dnl
1250 dnl Parse configure options related to library building.
1251
1252 AC_DEFUN(KRB5_LIB_AUX,
1253 [AC_REQUIRE([KRB5_LIB_PARAMS])dnl
1254
1255 AC_ARG_ENABLE([static],,
1256 [if test "$enableval" != no; then
1257   AC_MSG_ERROR([Sorry, static libraries do not work in this release.])
1258 fi])
1259 AC_ARG_ENABLE([shared], , 
1260 [if test "$enableval" != yes; then
1261   AC_MSG_ERROR([Sorry, this release builds only shared libraries, cannot disable them.])
1262 fi])
1263 AC_ARG_ENABLE([rpath],
1264 AC_HELP_STRING([--disable-rpath],[suppress run path flags in link lines]),
1265 [enable_rpath=$withval],
1266 [enable_rpath=yes])
1267
1268 if test "x$enable_rpath" != xyes ; then
1269         # Unset the rpath flag values set by shlib.conf
1270         SHLIB_RPATH_FLAGS=
1271         RPATH_FLAG=
1272         PROG_RPATH_FLAGS=
1273 fi
1274
1275 if test "$SHLIBEXT" = ".so-nobuild"; then
1276    AC_MSG_ERROR([Shared libraries are not yet supported on this platform.])
1277 fi
1278
1279 DEPLIBEXT=$SHLIBEXT
1280
1281 if test "$krb5_force_static" = "yes"; then
1282         LIBLIST='lib$(LIBBASE)$(STLIBEXT)'
1283         LIBLINKS='$(TOPLIBD)/lib$(LIBBASE)$(STLIBEXT)'
1284         OBJLISTS=OBJS.ST
1285         # This used to be install-static, but now we only follow this
1286         # path for internal libraries we don't want installed, not for
1287         # configure-time requests for installed static libraries.
1288         LIBINSTLIST=
1289 #       CFLAGS="$CFLAGS -D_KDB5_STATIC_LINK"
1290
1291         AC_MSG_RESULT([Forcing static libraries.])
1292         # avoid duplicate rules generation for AIX and such
1293         SHLIBEXT=.so-nobuild
1294         SHLIBVEXT=.so.v-nobuild
1295         SHLIBSEXT=.so.s-nobuild
1296 else
1297         AC_MSG_NOTICE([using shared libraries])
1298
1299         # Clear some stuff in case of AIX, etc.
1300         if test "$STLIBEXT" = "$SHLIBEXT" ; then
1301                 STLIBEXT=.a-nobuild
1302         fi
1303         case "$SHLIBSEXT" in
1304         .so.s-nobuild)
1305                 SHLIB_HAVE_MINOR_VERS=no
1306                 LIBLIST='lib$(LIBBASE)$(SHLIBEXT)'
1307                 LIBLINKS='$(TOPLIBD)/lib$(LIBBASE)$(SHLIBEXT) $(TOPLIBD)/lib$(LIBBASE)$(SHLIBVEXT)'
1308                 LIBINSTLIST="install-shared"
1309                 ;;
1310         *)
1311                 SHLIB_HAVE_MINOR_VERS=yes
1312                 LIBLIST='lib$(LIBBASE)$(SHLIBEXT) lib$(LIBBASE)$(SHLIBSEXT)'
1313                 LIBLINKS='$(TOPLIBD)/lib$(LIBBASE)$(SHLIBEXT) $(TOPLIBD)/lib$(LIBBASE)$(SHLIBVEXT) $(TOPLIBD)/lib$(LIBBASE)$(SHLIBSEXT)'
1314                 LIBINSTLIST="install-shlib-soname"
1315                 ;;
1316         esac
1317         OBJLISTS="OBJS.SH"
1318 fi
1319 CC_LINK="$CC_LINK_SHARED"
1320 CXX_LINK="$CXX_LINK_SHARED"
1321 AC_SUBST(SHLIB_HAVE_MINOR_VERS)
1322
1323 if test -z "$LIBLIST"; then
1324         AC_MSG_ERROR([must enable one of shared or static libraries])
1325 fi
1326
1327 # Check whether to build profiled libraries.
1328 AC_ARG_ENABLE([profiled],
1329 dnl [  --enable-profiled       build profiled libraries @<:@disabled@:>@]
1330 ,
1331 [if test "$enableval" = yes; then
1332   AC_MSG_ERROR([Sorry, profiled libraries do not work in this release.])
1333 fi])])
1334
1335 dnl
1336 dnl KRB5_LIB_PARAMS
1337 dnl
1338 dnl Determine parameters related to libraries, e.g. various extensions.
1339
1340 AC_DEFUN(KRB5_LIB_PARAMS,
1341 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
1342 krb5_cv_host=$host
1343 AC_SUBST(krb5_cv_host)
1344 AC_REQUIRE([AC_PROG_CC])dnl
1345 AC_REQUIRE([V5_SET_TOPDIR])dnl
1346 . $ac_topdir/config/shlib.conf])
1347 dnl
1348 dnl The following was written by jhawk@mit.edu
1349 dnl
1350 dnl AC_LIBRARY_NET: Id: net.m4,v 1.4 1997/10/25 20:49:53 jhawk Exp 
1351 dnl
1352 dnl This test is for network applications that need socket() and
1353 dnl gethostbyname() -ish functions.  Under Solaris, those applications need to
1354 dnl link with "-lsocket -lnsl".  Under IRIX, they should *not* link with
1355 dnl "-lsocket" because libsocket.a breaks a number of things (for instance:
1356 dnl gethostbyname() under IRIX 5.2, and snoop sockets under most versions of
1357 dnl IRIX).
1358 dnl 
1359 dnl Unfortunately, many application developers are not aware of this, and
1360 dnl mistakenly write tests that cause -lsocket to be used under IRIX.  It is
1361 dnl also easy to write tests that cause -lnsl to be used under operating
1362 dnl systems where neither are necessary (or useful), such as SunOS 4.1.4, which
1363 dnl uses -lnsl for TLI.
1364 dnl 
1365 dnl This test exists so that every application developer does not test this in
1366 dnl a different, and subtly broken fashion.
1367 dnl 
1368 dnl It has been argued that this test should be broken up into two seperate
1369 dnl tests, one for the resolver libraries, and one for the libraries necessary
1370 dnl for using Sockets API. Unfortunately, the two are carefully intertwined and
1371 dnl allowing the autoconf user to use them independantly potentially results in
1372 dnl unfortunate ordering dependancies -- as such, such component macros would
1373 dnl have to carefully use indirection and be aware if the other components were
1374 dnl executed. Since other autoconf macros do not go to this trouble, and almost
1375 dnl no applications use sockets without the resolver, this complexity has not
1376 dnl been implemented.
1377 dnl
1378 dnl The check for libresolv is in case you are attempting to link statically
1379 dnl and happen to have a libresolv.a lying around (and no libnsl.a).
1380 dnl
1381 AC_DEFUN(AC_LIBRARY_NET, [
1382    # Most operating systems have gethostbyname() in the default searched
1383    # libraries (i.e. libc):
1384    AC_CHECK_FUNC(gethostbyname, , [
1385      # Some OSes (eg. Solaris) place it in libnsl:
1386      AC_CHECK_LIB(nsl, gethostbyname, , [
1387        # Some strange OSes (SINIX) have it in libsocket:
1388        AC_CHECK_LIB(socket, gethostbyname, , [
1389           # Unfortunately libsocket sometimes depends on libnsl.
1390           # AC_CHECK_LIB's API is essentially broken so the following
1391           # ugliness is necessary:
1392           AC_CHECK_LIB(socket, gethostbyname,
1393              LIBS="-lsocket -lnsl $LIBS",
1394                [AC_CHECK_LIB(resolv, gethostbyname,
1395                              LIBS="-lresolv $LIBS" )],
1396              -lnsl)
1397        ])
1398      ])
1399    ])
1400   AC_CHECK_FUNC(socket, , AC_CHECK_LIB(socket, socket, ,
1401     AC_CHECK_LIB(socket, socket, LIBS="-lsocket -lnsl $LIBS", , -lnsl)))
1402   KRB5_AC_ENABLE_DNS
1403   if test "$enable_dns" = yes ; then
1404     # We assume that if libresolv exists we can link against it.
1405     # This may get us a gethostby* that doesn't respect nsswitch.
1406     AC_CHECK_LIB(resolv, main)
1407
1408 _KRB5_AC_CHECK_RES_FUNCS(res_ninit res_nclose res_ndestroy res_nsearch dnl
1409 ns_initparse ns_name_uncompress dn_skipname res_search)
1410     if test $krb5_cv_func_res_nsearch = no \
1411       && test $krb5_cv_func_res_search = no; then
1412         # Attempt to link with res_search(), in case it's not prototyped.
1413         AC_CHECK_FUNC(res_search,
1414           [AC_DEFINE(HAVE_RES_SEARCH, 1,
1415             [Define to 1 if you have the `res_search' function])],
1416           [AC_ERROR([cannot find res_nsearch or res_search])])
1417     fi
1418   fi
1419 ])
1420 AC_DEFUN([_KRB5_AC_CHECK_RES_FUNCS],
1421 [AC_FOREACH([AC_Func], [$1],
1422   [AH_TEMPLATE(AS_TR_CPP(HAVE_[]AC_Func),
1423                [Define to 1 if you have the `]AC_Func[' function.])])dnl
1424 for krb5_func in $1; do
1425 _KRB5_AC_CHECK_RES_FUNC($krb5_func)
1426 done
1427 ])
1428 AC_DEFUN([_KRB5_AC_CHECK_RES_FUNC], [
1429 # Solaris 9 prototypes ns_name_uncompress() in arpa/nameser.h, but
1430 # doesn't export it from libresolv.so, so we use extreme paranoia here
1431 # and check both for the declaration and that we can link against the
1432 # function.
1433 AC_CACHE_CHECK([for $1], [krb5_cv_func_$1], [AC_TRY_LINK(
1434 [#include <sys/types.h>
1435 #include <netinet/in.h>
1436 #include <arpa/nameser.h>
1437 @%:@include <resolv.h>],
1438 [/*
1439  * Use volatile, or else optimization can cause false positives.
1440  */
1441 void (* volatile p)() = (void (*)())$1;],
1442                              [AS_VAR_SET(krb5_cv_func_$1, yes)],
1443                              [AS_VAR_SET(krb5_cv_func_$1, no)])])
1444 AS_IF([test AS_VAR_GET(krb5_cv_func_$1) = yes],
1445       [AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_$1]), 1,
1446                           [Define to 1 if you have the `$1' function])])[]dnl
1447 ])
1448 dnl
1449 dnl
1450 dnl KRB5_AC_ENABLE_DNS
1451 dnl
1452 AC_DEFUN(KRB5_AC_ENABLE_DNS, [
1453 enable_dns=yes
1454 enable_dns_for_kdc=yes
1455 AC_DEFINE(KRB5_DNS_LOOKUP_KDC,1,[Define to enable DNS lookups of Kerberos KDCs])
1456
1457   AC_ARG_ENABLE([dns-for-realm],
1458 [  --enable-dns-for-realm  enable DNS lookups of Kerberos realm names], ,
1459 [enable_dns_for_realm=no])
1460   if test "$enable_dns_for_realm" = yes; then
1461     AC_DEFINE(KRB5_DNS_LOOKUP_REALM,1,[Define to enable DNS lookups of Kerberos realm names])
1462   fi
1463
1464 AC_DEFINE(KRB5_DNS_LOOKUP, 1,[Define for DNS support of locating realms and KDCs])
1465
1466 ])
1467 dnl
1468 dnl
1469 dnl Check if we need the prototype for a function - we give it a bogus 
1470 dnl prototype and if it complains - then a valid prototype exists on the 
1471 dnl system.
1472 dnl
1473 dnl KRB5_NEED_PROTO(includes, function, [bypass])
1474 dnl if $3 set, don't see if library defined. 
1475 dnl Useful for case where we will define in libkrb5 the function if need be
1476 dnl but want to know if a prototype exists in either case on system.
1477 dnl
1478 AC_DEFUN([KRB5_NEED_PROTO], [
1479 ifelse([$3], ,[if test "x$ac_cv_func_$2" = xyes; then])
1480 AC_CACHE_CHECK([if $2 needs a prototype provided], krb5_cv_func_$2_noproto,
1481 AC_TRY_COMPILE([$1],
1482 [#undef $2
1483 struct k5foo {int foo; } xx;
1484 extern int $2 (struct k5foo*);
1485 $2(&xx);
1486 ],
1487 krb5_cv_func_$2_noproto=yes,krb5_cv_func_$2_noproto=no))
1488 if test $krb5_cv_func_$2_noproto = yes; then
1489         AC_DEFINE([NEED_]translit($2, [a-z], [A-Z])[_PROTO], 1, dnl
1490 [define if the system header files are missing prototype for $2()])
1491 fi
1492 ifelse([$3], ,[fi])
1493 ])
1494 dnl
1495 dnl =============================================================
1496 dnl Internal function for testing for getpeername prototype
1497 dnl
1498 AC_DEFUN([KRB5_GETPEERNAME_ARGS],[
1499 AC_DEFINE([GETPEERNAME_ARG2_TYPE],GETSOCKNAME_ARG2_TYPE,[Type of getpeername second argument.])
1500 AC_DEFINE([GETPEERNAME_ARG3_TYPE],GETSOCKNAME_ARG3_TYPE,[Type of getpeername second argument.])
1501 ])
1502 dnl
1503 dnl =============================================================
1504 dnl Internal function for testing for getsockname arguments
1505 dnl
1506 AC_DEFUN([TRY_GETSOCK_INT],[
1507 krb5_lib_var=`echo "$1 $2" | sed 'y% ./+-*%___p_p%'`
1508 AC_MSG_CHECKING([if getsockname() takes arguments $1 and $2])
1509 AC_CACHE_VAL(krb5_cv_getsockname_proto_$krb5_lib_var,
1510 [
1511 AC_TRY_COMPILE([#include <sys/types.h>
1512 #include <sys/socket.h>
1513 extern int getsockname(int, $1, $2);
1514 ],,eval "krb5_cv_getsockname_proto_$krb5_lib_var=yes",
1515     eval "krb5_cv_getsockname_proto_$krb5_lib_var=no")])
1516 if eval "test \"`echo '$krb5_cv_getsockname_proto_'$krb5_lib_var`\" = yes"; then
1517         AC_MSG_RESULT(yes)
1518         sock_set=yes; res1="$1"; res2="$2"
1519 else
1520         AC_MSG_RESULT(no)
1521 fi
1522 ])
1523 dnl
1524 dnl Determines the types of the second and third arguments to getsockname().
1525 dnl
1526 AC_DEFUN([KRB5_GETSOCKNAME_ARGS],[
1527 sock_set=no
1528 for sock_arg1 in "struct sockaddr *" "void *"
1529 do
1530   for sock_arg2 in "size_t *" "int *" "socklen_t *"
1531   do
1532         if test $sock_set = no; then
1533           TRY_GETSOCK_INT($sock_arg1, $sock_arg2)
1534         fi
1535   done 
1536 done
1537 if test "$sock_set" = no; then
1538   AC_MSG_NOTICE(assuming struct sockaddr and socklen_t for getsockname args)
1539   res1="struct sockaddr *"
1540   res2="socklen_t *"
1541 fi
1542 res1=`echo "$res1" | tr -d '*' | sed -e 's/ *$//'`
1543 res2=`echo "$res2" | tr -d '*' | sed -e 's/ *$//'`
1544 AC_DEFINE_UNQUOTED([GETSOCKNAME_ARG2_TYPE],$res1,[Type of pointer target for argument 2 to getsockname])
1545 AC_DEFINE_UNQUOTED([GETSOCKNAME_ARG3_TYPE],$res2,[Type of pointer target for argument 3 to getsockname])
1546 ])
1547 dnl
1548 dnl
1549 AC_DEFUN([KRB5_AC_CHOOSE_ET],[
1550 AC_ARG_WITH([system-et],
1551 AC_HELP_STRING(--with-system-et,use system compile_et and -lcom_err @<:@default: build and install a local version@:>@))
1552 AC_MSG_CHECKING(which version of com_err to use)
1553 if test "x$with_system_et" = xyes ; then
1554   COM_ERR_VERSION=sys
1555   AC_MSG_RESULT(system)
1556 else
1557   COM_ERR_VERSION=k5
1558   AC_MSG_RESULT(krb5)
1559 fi
1560 if test $COM_ERR_VERSION = sys; then
1561   # check for various functions we need
1562   AC_CHECK_LIB(com_err, add_error_table, :, AC_MSG_ERROR(cannot find add_error_table in com_err library))
1563   AC_CHECK_LIB(com_err, remove_error_table, :, AC_MSG_ERROR(cannot find remove_error_table in com_err library))
1564   # make sure compile_et provides "et_foo" name
1565   cat >> conf$$e.et <<EOF
1566 error_table foo
1567 error_code ERR_FOO, "foo"
1568 end
1569 EOF
1570   AC_CHECK_PROGS(compile_et,compile_et,false)
1571   if test "$compile_et" = false; then
1572     AC_MSG_ERROR(cannot find compile_et)
1573   fi
1574   AC_CACHE_CHECK(whether compile_et is useful,krb5_cv_compile_et_useful,[
1575   if compile_et conf$$e.et >/dev/null 2>&1 ; then true ; else
1576     AC_MSG_ERROR(execution failed)
1577   fi
1578   AC_TRY_COMPILE([#include "conf$$e.h"
1579                  ],[ &et_foo_error_table; ],:,
1580                  [AC_MSG_ERROR(cannot use et_foo_error_table)])
1581   # Anything else we need to test for?
1582   rm -f conf$$e.et conf$$e.c conf$$e.h
1583   krb5_cv_compile_et_useful=yes
1584   ])
1585 fi
1586 AC_SUBST(COM_ERR_VERSION)
1587 ])
1588 AC_DEFUN([KRB5_AC_CHOOSE_SS],[
1589 AC_ARG_WITH(system-ss,
1590             AC_HELP_STRING(--with-system-ss,use system -lss and mk_cmds @<:@private version@:>@))
1591 AC_ARG_VAR(SS_LIB,[system libraries for 'ss' package [-lss]])
1592 AC_MSG_CHECKING(which version of subsystem package to use)
1593 if test "x$with_system_ss" = xyes ; then
1594   SS_VERSION=sys
1595   AC_MSG_RESULT(system)
1596   # todo: check for various libraries we might need
1597   # in the meantime...
1598   test "x${SS_LIB+set}" = xset || SS_LIB=-lss
1599   old_LIBS="$LIBS"
1600   LIBS="$LIBS $SS_LIB"
1601   AC_CACHE_CHECK(whether system ss package works, krb5_cv_system_ss_okay,[
1602   AC_TRY_RUN([
1603 #include <ss/ss.h>
1604 int main(int argc, char *argv[]) {
1605   if (argc == 42) {
1606     int i, err;
1607     i = ss_create_invocation("foo","foo","",0,&err);
1608     ss_listen(i);
1609   }
1610   return 0;
1611 }], krb5_cv_system_ss_okay=yes, AC_MSG_ERROR(cannot run test program),
1612   krb5_cv_system_ss_okay="assumed")])
1613   LIBS="$old_LIBS"
1614 else
1615   SS_VERSION=k5
1616   AC_MSG_RESULT(krb5)
1617 fi
1618 AC_SUBST(SS_LIB)
1619 AC_SUBST(SS_VERSION)
1620 ])
1621 dnl
1622 AC_DEFUN([KRB5_AC_CHOOSE_DB],[
1623 AC_ARG_WITH(system-db,
1624             AC_HELP_STRING(--with-system-db,use system Berkeley db @<:@private version@:>@))
1625 AC_ARG_VAR(DB_HEADER,[header file for system Berkeley db package [db.h]])
1626 AC_ARG_VAR(DB_LIB,[library for system Berkeley db package [-ldb]])
1627 if test "x$with_system_db" = xyes ; then
1628   DB_VERSION=sys
1629   # TODO: Do we have specific routines we should check for?
1630   # How about known, easily recognizable bugs?
1631   # We want to use bt_rseq in some cases, but no other version but
1632   # ours has it right now.
1633   #
1634   # Okay, check the variables.
1635   test "x${DB_HEADER+set}" = xset || DB_HEADER=db.h
1636   test "x${DB_LIB+set}" = xset || DB_LIB=-ldb
1637   #
1638   if test "x${DB_HEADER}" = xdb.h ; then
1639     DB_HEADER_VERSION=sys
1640   else
1641     DB_HEADER_VERSION=redirect
1642   fi
1643   KDB5_DB_LIB="$DB_LIB"
1644 else
1645   DB_VERSION=k5
1646   AC_DEFINE(HAVE_BT_RSEQ,1,[Define if bt_rseq is available, for recursive btree traversal.])
1647   DB_HEADER=db.h
1648   DB_HEADER_VERSION=k5
1649   # libdb gets sucked into libkdb
1650   KDB5_DB_LIB=
1651   # needed for a couple of things that need libdb for its own sake
1652   DB_LIB=-ldb
1653 fi
1654 AC_SUBST(DB_VERSION)
1655 AC_SUBST(DB_HEADER)
1656 AC_SUBST(DB_HEADER_VERSION)
1657 AC_SUBST(DB_LIB)
1658 AC_SUBST(KDB5_DB_LIB)
1659 ])
1660 dnl
1661 dnl KRB5_AC_PRIOCNTL_HACK
1662 dnl
1663 dnl
1664 AC_DEFUN([KRB5_AC_PRIOCNTL_HACK],
1665 [AC_REQUIRE([AC_PROG_AWK])dnl
1666 AC_REQUIRE([AC_LANG_COMPILER_REQUIRE])dnl
1667 AC_CACHE_CHECK([whether to use priocntl hack], [krb5_cv_priocntl_hack],
1668 [case $krb5_cv_host in
1669 *-*-solaris2.9*)
1670         if test "$cross_compiling" = yes; then
1671                 krb5_cv_priocntl_hack=yes
1672         else
1673                 # Solaris patch 117171-11 (sparc) or 117172-11 (x86)
1674                 # fixes the Solaris 9 bug where final pty output
1675                 # gets lost on close.
1676                 if showrev -p | $AWK 'BEGIN { e = 1 }
1677 /Patch: 11717[[12]]/ { x = index[]([$]2, "-");
1678 if (substr[]([$]2, x + 1, length([$]2) - x) >= 11)
1679 { e = 0 } else { e = 1 } }
1680 END { exit e; }'; then
1681                         krb5_cv_priocntl_hack=no
1682                 else
1683                         krb5_cv_priocntl_hack=yes
1684                 fi
1685         fi
1686         ;;
1687 *)
1688         krb5_cv_priocntl_hack=no
1689         ;;
1690 esac])
1691 if test "$krb5_cv_priocntl_hack" = yes; then
1692         PRIOCNTL_HACK=1
1693 else
1694         PRIOCNTL_HACK=0
1695 fi
1696 AC_SUBST(PRIOCNTL_HACK)])
1697 dnl
1698 dnl
1699 dnl KRB5_AC_GCC_ATTRS
1700 AC_DEFUN([KRB5_AC_GCC_ATTRS],
1701 [AC_CACHE_CHECK([for constructor/destructor attribute support],krb5_cv_attr_constructor_destructor,
1702 [rm -f conftest.1 conftest.2
1703 if test -r conftest.1 || test -r conftest.2 ; then
1704   AC_MSG_ERROR(write error in local file system?)
1705 fi
1706 true > conftest.1
1707 true > conftest.2
1708 if test -r conftest.1 && test -r conftest.2 ; then true ; else
1709   AC_MSG_ERROR(write error in local file system?)
1710 fi
1711 a=no
1712 b=no
1713 # blindly assume we have 'unlink'...
1714 AC_TRY_RUN([void foo1() __attribute__((constructor));
1715 void foo1() { unlink("conftest.1"); }
1716 void foo2() __attribute__((destructor));
1717 void foo2() { unlink("conftest.2"); }
1718 int main () { return 0; }],
1719 [test -r conftest.1 || a=yes
1720 test -r conftest.2 || b=yes], , AC_MSG_ERROR(Cannot test for constructor/destructor support when cross compiling))
1721 case $krb5_cv_host in
1722 *-*-aix4.*)
1723         # Under AIX 4.3.3, at least, shared library destructor functions
1724         # appear to get executed in reverse link order (right to left),
1725         # so that a library's destructor function may run after that of
1726         # libraries it depends on, and may still have to access in the
1727         # destructor.
1728         #
1729         # That counts as "not working", for me, but it's a much more
1730         # complicated test case to set up.
1731         b=no
1732         ;;
1733 esac
1734 krb5_cv_attr_constructor_destructor="$a,$b"
1735 ])
1736 # Okay, krb5_cv_... should be set now.
1737 case $krb5_cv_attr_constructor_destructor in
1738   yes,*)
1739     AC_DEFINE(CONSTRUCTOR_ATTR_WORKS,1,[Define if __attribute__((constructor)) works]) ;;
1740 esac
1741 case $krb5_cv_attr_constructor_destructor in
1742   *,yes)
1743     AC_DEFINE(DESTRUCTOR_ATTR_WORKS,1,[Define if __attribute__((destructor)) works]) ;;
1744 esac
1745 dnl End of attributes we care about right now.
1746 ])
1747 dnl
1748 dnl
1749 dnl KRB5_AC_PRAGMA_WEAK_REF
1750 AC_DEFUN([KRB5_AC_PRAGMA_WEAK_REF],
1751 [AC_CACHE_CHECK([whether pragma weak references are supported],
1752 krb5_cv_pragma_weak_ref,
1753 [AC_TRY_LINK([#pragma weak flurbl
1754 extern int flurbl(void);],[if (&flurbl != 0) return flurbl();],
1755 krb5_cv_pragma_weak_ref=yes,krb5_cv_pragma_weak_ref=no)])
1756 if test $krb5_cv_pragma_weak_ref = yes ; then
1757   AC_DEFINE(HAVE_PRAGMA_WEAK_REF,1,[Define if #pragma weak references work])
1758 fi])
1759 dnl
1760 dnl
1761 m4_include(config/ac-archive/acx_pthread.m4)
1762 #
1763 # KRB5_AC_LIBUTIL
1764 #
1765 # Check for libutil, for NetBSD, et al.; needed for openpty() and
1766 # logwtmp() on some platforms.
1767 #
1768 AC_DEFUN([KRB5_AC_LIBUTIL],
1769         [AC_CHECK_LIB(util, main,
1770                 [AC_DEFINE(HAVE_LIBUTIL,1,[Define if util library is available with openpty, logwtmp, etc])
1771   UTIL_LIB=-lutil])dnl
1772 AC_SUBST(UTIL_LIB)
1773 ])
1774 dnl
1775 dnl
1776 dnl
1777 dnl --with-ldap=value
1778 dnl
1779 AC_DEFUN(WITH_LDAP,[
1780 AC_ARG_WITH([ldap],
1781 [  --with-ldap             compile OpenLDAP database backend module],
1782 [case "$withval" in
1783     OPENLDAP) with_ldap=yes ;;
1784     yes | no) ;;
1785     EDIRECTORY) AC_MSG_ERROR(Option --with-ldap=EDIRECTORY is deprecated; use --with-edirectory instead.) ;;
1786     *)  AC_MSG_ERROR(Invalid option value --with-ldap="$withval") ;;
1787 esac], with_ldap=no)dnl
1788 AC_ARG_WITH([edirectory],
1789 [  --with-edirectory       compile eDirectory database backend module],
1790 [case "$withval" in
1791     yes | no) ;;
1792     *)  AC_MSG_ERROR(Invalid option value --with-edirectory="$withval") ;;
1793 esac], with_edirectory=no)dnl
1794
1795 if test $with_ldap = yes; then
1796   if test $with_edirectory = yes; then
1797     AC_MSG_ERROR(Cannot enable both OpenLDAP and eDirectory backends; choose one.)
1798   fi
1799   AC_MSG_NOTICE(enabling OpenLDAP database backend module support)
1800   OPENLDAP_PLUGIN=yes
1801 elif test $with_edirectory = yes; then
1802   AC_MSG_NOTICE(enabling eDirectory database backend module support)
1803   OPENLDAP_PLUGIN=yes
1804   AC_DEFINE(HAVE_EDIRECTORY,1,[Define if LDAP KDB interface should assume eDirectory.])
1805 else
1806   : # neither enabled
1807 dnl  AC_MSG_NOTICE(disabling ldap backend module support)
1808 fi
1809 AC_SUBST(OPENLDAP_PLUGIN)
1810 ])dnl
1811 dnl
1812 dnl If libkeyutils exists (on Linux) include it and use keyring ccache
1813 AC_DEFUN(KRB5_AC_KEYRING_CCACHE,[
1814   AC_CHECK_HEADERS([keyutils.h],
1815     AC_CHECK_LIB(keyutils, add_key, 
1816       [dnl Pre-reqs were found
1817        AC_DEFINE(USE_KEYRING_CCACHE, 1, [Define if the keyring ccache should be enabled])
1818        LIBS="-lkeyutils $LIBS"
1819       ]))
1820 ])dnl
1821 dnl