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