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