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