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