xref: /freebsd/crypto/krb5/src/configure.ac (revision 7f2fe78b9dd5f51c821d771b63d2e096f6fd49e9)
1K5_AC_INIT([aclocal.m4])
2
3# If $runstatedir isn't set by autoconf (<2.70), set it manually.
4if test x"$runstatedir" = x; then
5  runstatedir='${localstatedir}/run'
6fi
7AC_SUBST(runstatedir)
8
9# Don't make duplicate profile path entries for /etc/krb5.conf if
10# $sysconfdir is /etc
11if test "$sysconfdir" = /etc; then
12  SYSCONFCONF=""
13else
14  SYSCONFCONF=":${sysconfdir}/krb5.conf"
15fi
16AC_SUBST(SYSCONFCONF)
17
18CONFIG_RULES
19KRB5_VERSION=K5_VERSION
20AC_SUBST(KRB5_VERSION)
21
22
23AC_REQUIRE_CPP
24
25PKG_PROG_PKG_CONFIG
26
27AC_CHECK_HEADER([stdint.h], [],
28  [AC_MSG_ERROR([stdint.h is required])])
29
30AC_CACHE_CHECK([whether integers are two's complement],
31  [krb5_cv_ints_twos_compl],
32  [AC_COMPILE_IFELSE(
33    [AC_LANG_BOOL_COMPILE_TRY(
34[#include <limits.h>
35],
36	[/* Basic two's complement check */
37	  ~(-1) == 0 && ~(-1L) == 0L &&
38	  /* Check that values with sign bit 1 and value bits 0 are valid */
39	  -(INT_MIN + 1) == INT_MAX && -(LONG_MIN + 1) == LONG_MAX &&
40	  /* Check that unsigned-to-signed conversions preserve bit patterns */
41	  (int)((unsigned int)INT_MAX + 1) == INT_MIN &&
42	  (long)((unsigned long)LONG_MAX + 1) == LONG_MIN])],
43    [krb5_cv_ints_twos_compl=yes],
44    [krb5_cv_ints_twos_compl=no])])
45
46if test "$krb5_cv_ints_twos_compl" = "no"; then
47  AC_MSG_ERROR([integers are not two's complement])
48fi
49
50AC_CACHE_CHECK([whether CHAR_BIT is 8],
51  [krb5_cv_char_bit_8],
52  [AC_PREPROC_IFELSE([AC_LANG_SOURCE(
53[[#include <limits.h>
54#if CHAR_BIT != 8
55  #error CHAR_BIT != 8
56#endif
57]])],
58    [krb5_cv_char_bit_8=yes], [krb5_cv_char_bit_8=no])])
59
60if test "$krb5_cv_char_bit_8" = "no"; then
61  AC_MSG_ERROR([CHAR_BIT is not 8])
62fi
63
64AC_CACHE_CHECK(if va_copy is available, krb5_cv_va_copy,
65[AC_LINK_IFELSE([AC_LANG_SOURCE([
66#include <stdarg.h>
67void f(va_list ap) {
68  va_list ap2;
69  va_copy(ap2, ap);
70  va_end(ap2);
71}
72va_list x;
73int main()
74{
75  f(x);
76  return 0;
77}])], krb5_cv_va_copy=yes, krb5_cv_va_copy=no)])
78if test "$krb5_cv_va_copy" = yes; then
79  AC_DEFINE(HAS_VA_COPY,1,[Define if va_copy macro or function is available.])
80fi
81
82# Note that this isn't checking if the copied value *works*, just
83# whether the C language constraints permit the copying.  If
84# va_list is defined as an array type, it can't be assigned.
85AC_CACHE_CHECK(if va_list objects can be copied by assignment,
86	       krb5_cv_va_simple_copy,
87[AC_COMPILE_IFELSE([
88AC_LANG_SOURCE([#include <stdarg.h>
89void f(va_list va2) {
90  va_list va1;
91  va1 = va2;
92}])], krb5_cv_va_simple_copy=yes, krb5_cv_va_simple_copy=no)])
93if test "$krb5_cv_va_simple_copy" = yes; then
94  AC_DEFINE(CAN_COPY_VA_LIST,1,[Define if va_list objects can be simply copied by assignment.])
95fi
96
97# The following lines are so that configure --help gives some global
98# configuration options.
99
100KRB5_LIB_AUX
101AC_ARG_ENABLE([athena],
102[  --enable-athena         build with MIT Project Athena configuration],,)
103
104# Begin autoconf tests for the Makefiles generated out of the top-level
105# configure.in...
106
107KRB5_BUILD_LIBOBJS
108KRB5_BUILD_LIBRARY
109KRB5_BUILD_PROGRAM
110# for kprop
111AC_TYPE_MODE_T
112AC_PROG_INSTALL
113KRB5_AC_NEED_DAEMON
114KRB5_GETSOCKNAME_ARGS
115KRB5_GETPEERNAME_ARGS
116LIBUTIL=
117AC_CHECK_LIB(util,main,[AC_DEFINE(HAVE_LIBUTIL,1,[Define if the util library is available])
118LIBUTIL=-lutil
119])
120AC_SUBST(LIBUTIL)
121
122# Determine if NLS is desired and supported.
123po=
124AC_ARG_ENABLE([nls],
125  [AS_HELP_STRING([--disable-nls], [disable native language support])],
126  [], [enable_nls=check])
127if test "$enable_nls" != no; then
128  AC_CHECK_HEADER(libintl.h, [
129    AC_SEARCH_LIBS(dgettext, intl, [
130      AC_DEFINE(ENABLE_NLS, 1,
131                [Define if translation functions should be used.])
132      nls_enabled=yes])])
133
134  AC_CHECK_PROG(MSGFMT,msgfmt,msgfmt)
135  if test x"$MSGFMT" != x; then
136    K5_GEN_MAKEFILE(po)
137    po=po
138  fi
139
140  # Error out if --enable-nls was explicitly requested but can't be enabled.
141  if test "$enable_nls" = yes; then
142    if test "$nls_enabled" != yes -o "x$po" = x; then
143      AC_MSG_ERROR([NLS support requested but cannot be built])
144    fi
145  fi
146fi
147AC_SUBST(po)
148
149# for kdc
150AC_CHECK_HEADERS(sys/sockio.h ifaddrs.h unistd.h fnmatch.h)
151AC_CHECK_FUNCS(vsprintf vasprintf vsnprintf strlcpy fnmatch secure_getenv)
152
153EXTRA_SUPPORT_SYMS=
154AC_CHECK_FUNC(strlcpy,
155[STRLCPY_ST_OBJ=
156STRLCPY_OBJ=],
157[STRLCPY_ST_OBJ=strlcpy.o
158STRLCPY_OBJ='$(OUTPRE)strlcpy.$(OBJEXT)'
159EXTRA_SUPPORT_SYMS="$EXTRA_SUPPORT_SYMS krb5int_strlcpy krb5int_strlcat"])
160AC_SUBST(STRLCPY_OBJ)
161AC_SUBST(STRLCPY_ST_OBJ)
162
163AC_CHECK_FUNC(getopt,
164[GETOPT_ST_OBJ=
165GETOPT_OBJ=
166AC_DEFINE(HAVE_GETOPT, 1, [Define if system getopt should be used.])],
167[GETOPT_ST_OBJ='getopt.o'
168GETOPT_OBJ='$(OUTPRE)getopt.$(OBJEXT)'
169EXTRA_SUPPORT_SYMS="$EXTRA_SUPPORT_SYMS k5_optind k5_optarg k5_opterr k5_optopt k5_getopt"])
170AC_SUBST(GETOPT_OBJ)
171AC_SUBST(GETOPT_ST_OBJ)
172
173AC_CHECK_FUNC(getopt_long,
174[GETOPT_LONG_ST_OBJ=
175GETOPT_LONG_OBJ=
176AC_DEFINE(HAVE_GETOPT_LONG, 1, [Define if system getopt_long should be used.])],
177[GETOPT_LONG_ST_OBJ='getopt_long.o'
178GETOPT_LONG_OBJ='$(OUTPRE)getopt_long.$(OBJEXT)'
179EXTRA_SUPPORT_SYMS="$EXTRA_SUPPORT_SYMS k5_getopt_long"])
180AC_SUBST(GETOPT_LONG_OBJ)
181AC_SUBST(GETOPT_LONG_ST_OBJ)
182
183AC_CHECK_FUNC(fnmatch,
184[FNMATCH_ST_OBJ=
185FNMATCH_OBJ=],
186[FNMATCH_ST_OBJ=fnmatch.o
187FNMATCH_OBJ='$(OUTPRE)fnmatch.$(OBJEXT)'
188EXTRA_SUPPORT_SYMS="$EXTRA_SUPPORT_SYMS k5_fnmatch"])
189AC_SUBST(FNMATCH_OBJ)
190AC_SUBST(FNMATCH_ST_OBJ)
191
192AC_CHECK_FUNC(vasprintf,
193[PRINTF_ST_OBJ=
194PRINTF_OBJ=],
195[PRINTF_ST_OBJ=printf.o
196PRINTF_OBJ='$(OUTPRE)printf.$(OBJEXT)'
197EXTRA_SUPPORT_SYMS="$EXTRA_SUPPORT_SYMS krb5int_asprintf krb5int_vasprintf"])
198AC_SUBST(PRINTF_OBJ)
199AC_SUBST(PRINTF_ST_OBJ)
200KRB5_NEED_PROTO([#include <stdarg.h>
201#include <stdio.h>
202],vasprintf)
203KRB5_NEED_PROTO([#include <string.h>
204#ifdef HAVE_UNISTD_H
205#include <unistd.h>
206#endif
207/* Solaris 8 declares swab in stdlib.h.  */
208#include <stdlib.h>
209],swab,1)
210
211AC_CHECK_FUNC(secure_getenv,
212[SECURE_GETENV_ST_OBJ=
213SECURE_GETENV_OBJ=
214SECURE_GETENV_INIT=],
215[SECURE_GETENV_ST_OBJ=secure_getenv.o
216SECURE_GETENV_OBJ='$(OUTPRE)secure_getenv.$(OBJEXT)'
217SECURE_GETENV_INIT=k5_secure_getenv_init
218EXTRA_SUPPORT_SYMS="$EXTRA_SUPPORT_SYMS k5_secure_getenv"])
219AC_SUBST(SECURE_GETENV_OBJ)
220AC_SUBST(SECURE_GETENV_ST_OBJ)
221AC_SUBST(SECURE_GETENV_INIT)
222
223AC_PROG_AWK
224KRB5_AC_INET6
225KRB5_SOCKADDR_SA_LEN
226CHECK_SIGNALS
227
228# --with-vague-errors disables useful error messages.
229
230AC_ARG_WITH([vague-errors],
231  [AS_HELP_STRING([--with-vague-errors],
232    [Do not @<:@do@:>@ send helpful errors to client])],
233  [], [withval=no])
234if test "$withval" = yes; then
235	AC_MSG_NOTICE(Supplying vague error messages to KDC clients)
236	AC_DEFINE(KRBCONF_VAGUE_ERRORS,1,[Define if the KDC should return only vague error codes to clients])
237fi
238
239# Check which (if any) audit plugin to build
240audit_plugin=""
241AC_ARG_ENABLE([audit-plugin],
242  [AS_HELP_STRING([--enable-audit-plugin=IMPL],
243    [use audit plugin @<:@ do not use audit @:>@])],
244  [], enableval=no)
245if test "$enableval" != no; then
246    case "$enableval" in
247    simple)
248        # if audit_log_user_message is found, we assume
249        # that audit_open and audit_close are also defined.
250        AC_CHECK_LIB(audit, audit_log_user_message,
251                     [AUDIT_IMPL_LIBS=-laudit
252                     K5_GEN_MAKEFILE(plugins/audit/simple)
253                     audit_plugin=plugins/audit/simple ],
254                     AC_MSG_ERROR([libaudit not found or undefined symbol audit_log_user_message]))
255        ;;
256    *)
257        AC_MSG_ERROR([Unknown audit plugin implementation $enableval.])
258        ;;
259    esac
260fi
261AC_SUBST(AUDIT_IMPL_LIBS)
262AC_SUBST(audit_plugin)
263
264# WITH_CRYPTO_IMPL
265
266CRYPTO_IMPL=builtin
267AC_ARG_WITH([crypto-impl],
268  [AS_HELP_STRING([--with-crypto-impl=IMPL],
269    [use specified crypto implementation @<:@builtin@:>@])],
270  [CRYPTO_IMPL=$withval
271   AC_MSG_NOTICE(k5crypto will use '$withval')])
272
273CRYPTO_BUILTIN_TESTS=no
274case $CRYPTO_IMPL in
275builtin)
276  CRYPTO_BUILTIN_TESTS=yes
277  ;;
278openssl)
279  AC_CHECK_LIB(crypto, PKCS7_get_signer_info)
280  AC_DEFINE([CRYPTO_OPENSSL], 1, [Define to use OpenSSL crypto library])
281  ;;
282*)
283  AC_MSG_ERROR([Unknown crypto implementation $withval])
284  ;;
285esac
286AC_SUBST([CRYPTO_IMPL_CFLAGS])
287AC_SUBST([CRYPTO_IMPL_LIBS])
288AC_SUBST([CRYPTO_BUILTIN_TESTS])
289
290# WITH_TLS_IMPL
291
292AC_ARG_WITH([tls-impl],
293  [AS_HELP_STRING([--with-tls-impl=IMPL],
294    [use specified TLS implementation @<:@auto@:>@])],
295  [TLS_IMPL=$withval], [TLS_IMPL=auto])
296case "$TLS_IMPL" in
297openssl|auto)
298  AC_CHECK_LIB(ssl,SSL_CTX_new,[have_lib_ssl=true],[have_lib_ssl=false],
299               -lcrypto)
300  AC_MSG_CHECKING([for OpenSSL])
301  if test x$have_lib_ssl = xtrue ; then
302    AC_DEFINE(TLS_IMPL_OPENSSL,1,[Define if TLS implementation is OpenSSL])
303    AC_MSG_RESULT([yes])
304    TLS_IMPL_LIBS="-lssl -lcrypto"
305    TLS_IMPL=openssl
306    AC_MSG_NOTICE([TLS module will use OpenSSL])
307  else
308    if test "$TLS_IMPL" = openssl ; then
309      AC_MSG_ERROR([OpenSSL not found!])
310    else
311      AC_MSG_WARN([OpenSSL not found!])
312    fi
313    TLS_IMPL=no
314    AC_MSG_NOTICE(building without TLS support)
315  fi
316  ;;
317no)
318  AC_MSG_NOTICE(building without TLS support)
319  ;;
320*)
321  AC_MSG_ERROR([Unsupported TLS implementation $withval])
322  ;;
323esac
324
325if test "$TLS_IMPL" = no; then
326   AC_DEFINE(TLS_IMPL_NONE,1,[Define if no TLS implementation is selected])
327fi
328
329AC_SUBST(TLS_IMPL)
330AC_SUBST(TLS_IMPL_CFLAGS)
331AC_SUBST(TLS_IMPL_LIBS)
332
333AC_ARG_WITH([keyutils],
334  [AS_HELP_STRING([--without-keyutils], [do not link with libkeyutils])],
335  [], [with_keyutils=check])
336if test "$with_keyutils" != no; then
337  have_keyutils=false
338  AC_CHECK_HEADERS([keyutils.h],
339    AC_CHECK_LIB(keyutils, add_key, [have_keyutils=true]))
340  if test "$have_keyutils" = true; then
341    AC_DEFINE(USE_KEYRING_CCACHE, 1,
342              [Define if the keyring ccache should be enabled])
343    LIBS="-lkeyutils $LIBS"
344    # If libkeyutils supports persistent keyrings, use them.
345    AC_CHECK_LIB(keyutils, keyctl_get_persistent,
346      [AC_DEFINE(HAVE_PERSISTENT_KEYRING, 1,
347                 [Define if persistent keyrings are supported])
348      ])
349  elif test "$with_keyutils" = yes; then
350    AC_MSG_ERROR([libkeyutils not found])
351  fi
352fi
353
354# The SPAKE preauth plugin currently supports edwards25519 natively,
355# and can support three NIST groups using OpenSSL.
356HAVE_SPAKE_OPENSSL=no
357AC_ARG_WITH([spake-openssl],
358  [AS_HELP_STRING([--with-spake-openssl],
359    [use OpenSSL for SPAKE preauth @<:@auto@:>@])],
360  [], [withval=auto])
361if test "$withval" = auto -o "$withval" = yes; then
362  AC_CHECK_LIB([crypto],[EC_POINT_new],[have_crypto=true],[have_crypto=false])
363  if test "$have_crypto" = true; then
364    AC_DEFINE(SPAKE_OPENSSL,1,[Define to use OpenSSL for SPAKE preauth])
365    SPAKE_OPENSSL_LIBS=-lcrypto
366    HAVE_SPAKE_OPENSSL=yes
367  elif test "$withval" = yes; then
368    AC_MSG_ERROR([OpenSSL libcrypto not found])
369  fi
370fi
371AC_SUBST(HAVE_SPAKE_OPENSSL)
372AC_SUBST(SPAKE_OPENSSL_LIBS)
373
374AC_ARG_ENABLE([aesni],
375  [AS_HELP_STRING([--disable-aesni], [Do not build with AES-NI support])],
376  [], [enable_aesni=check])
377if test "$CRYPTO_IMPL" = builtin -a "x$enable_aesni" != xno; then
378    case "$host" in
379    i686-*)
380	aesni_obj=iaesx86.o
381	aesni_machine=x86
382	;;
383    x86_64-*)
384	aesni_obj=iaesx64.o
385	aesni_machine=amd64
386	;;
387    esac
388    case "$host" in
389    *-*-linux* | *-*-gnu* | *-*-*bsd* | *-*-solaris*)
390	# All Unix-like platforms need -D__linux__ for iaesx64.s to
391	# use the System V x86-64 calling convention.
392	aesni_flags="-D__linux__ -f elf -m $aesni_machine"
393	;;
394    esac
395    if test "x$aesni_obj" != x && test "x$aesni_flags" != x; then
396	AC_CHECK_PROG(YASM,yasm,yasm)
397	AC_CHECK_HEADERS(cpuid.h)
398	if test x"$YASM" != x -a "x$ac_cv_header_cpuid_h" = xyes; then
399	    AESNI_OBJ=$aesni_obj
400	    AESNI_FLAGS=$aesni_flags
401	    AC_DEFINE(AESNI,1,[Define if AES-NI support is enabled])
402	    AC_MSG_NOTICE([Building with AES-NI support])
403	fi
404    fi
405    if test "x$enable_aesni" = xyes -a "x$AESNI_OBJ" = x; then
406	AC_MSG_ERROR([AES-NI support requested but cannot be built])
407    fi
408fi
409AC_SUBST(AESNI_OBJ)
410AC_SUBST(AESNI_FLAGS)
411
412AC_ARG_ENABLE([kdc-lookaside-cache],
413  AS_HELP_STRING([--disable-kdc-lookaside-cache],
414    [Disable the cache which detects client retransmits]),
415  [], [enableval=yes])
416if test "$enableval" = no ; then
417	AC_DEFINE(NOCACHE,1,[Define if the KDC should use no lookaside cache])
418fi
419KRB5_RUN_FLAGS
420
421# asan is a gcc and clang facility to instrument the code with memory
422# error checking.  To use it, we compile C and C++ source files with
423# -fsanitize=address, and set ASAN=yes to suppress the undefined
424# symbols check when building shared libraries.
425AC_ARG_ENABLE([asan],
426  [AS_HELP_STRING([--enable-asan], [Build with asan memory checking])],
427  [], [enable_asan=no])
428if test "$enable_asan" != no; then
429    if test "$enable_asan" = yes; then
430        enable_asan=address
431    fi
432    ASAN_FLAGS="$DEFS -fsanitize=$enable_asan"
433    ASAN=yes
434    UNDEF_CHECK=
435else
436    ASAN_FLAGS=
437    ASAN=no
438fi
439AC_SUBST(ASAN_FLAGS)
440AC_SUBST(ASAN)
441
442# from old include/configure.in
443AH_TEMPLATE([HAVE_STRUCT_SOCKADDR_STORAGE],
444[Define if "struct sockaddr_storage" is available.])
445
446AC_CONFIG_HEADERS(include/autoconf.h, [echo timestamp > include/autoconf.stamp])
447AC_C_CONST
448AC_HEADER_DIRENT
449AC_FUNC_STRERROR_R
450AC_CHECK_FUNCS(strdup setvbuf seteuid setresuid setreuid setegid setresgid setregid setsid flock fchmod chmod strptime geteuid setenv unsetenv getenv gmtime_r localtime_r bswap16 bswap64 mkstemp getusershell access getcwd srand48 srand srandom stat strchr strerror timegm explicit_bzero explicit_memset getresuid getresgid)
451
452AC_CHECK_FUNC(mkstemp,
453[MKSTEMP_ST_OBJ=
454MKSTEMP_OBJ=],
455[MKSTEMP_ST_OBJ='mkstemp.o'
456MKSTEMP_OBJ='$(OUTPRE)mkstemp.$(OBJEXT)'
457EXTRA_SUPPORT_SYMS="$EXTRA_SUPPORT_SYMS krb5int_mkstemp"])
458AC_SUBST(MKSTEMP_OBJ)
459AC_SUBST(MKSTEMP_ST_OBJ)
460
461AC_CHECK_FUNC(gettimeofday,
462	[GETTIMEOFDAY_ST_OBJ=
463	GETTIMEOFDAY_OBJ=
464	AC_DEFINE(HAVE_GETTIMEOFDAY, 1, [Have the gettimeofday function])
465],
466	[GETTIMEOFDAY_ST_OBJ='gettimeofday.o'
467	GETTIMEOFDAY_OBJ='$(OUTPRE)gettimeofday.$(OBJEXT)'
468	EXTRA_SUPPORT_SYMS="$EXTRA_SUPPORT_SYMS krb5int_gettimeofday"])
469AC_SUBST(GETTIMEOFDAY_OBJ)
470AC_SUBST(GETTIMEOFDAY_ST_OBJ)
471AC_SUBST(EXTRA_SUPPORT_SYMS)
472
473DECLARE_SYS_ERRLIST
474AC_CHECK_HEADERS(unistd.h paths.h regex.h regexpr.h fcntl.h memory.h ifaddrs.h sys/filio.h byteswap.h machine/endian.h machine/byte_order.h sys/bswap.h endian.h pwd.h arpa/inet.h alloca.h dlfcn.h limits.h)
475AC_CHECK_HEADER(regexp.h, [], [],
476[#define INIT char *sp = instring;
477#define GETC() (*sp++)
478#define PEEKC() (*sp)
479#define UNGETC(c) (--sp)
480#define RETURN(c) return(c)
481#define ERROR(c)
482])
483AC_CHECK_MEMBERS([struct stat.st_mtimensec,struct stat.st_mtimespec.tv_nsec,struct stat.st_mtim.tv_nsec],,,[#include <sys/types.h>
484#include <sys/stat.h>])
485KRB5_AC_REGEX_FUNCS
486AC_TYPE_OFF_T
487
488# Fancy caching of perror result...
489AC_MSG_CHECKING(for perror declaration)
490AC_CACHE_VAL(krb5_cv_decl_perror,
491[AC_EGREP_HEADER(perror, errno.h,
492  krb5_cv_decl_perror=yes, krb5_cv_decl_perror=no)])
493AC_MSG_RESULT($krb5_cv_decl_perror)
494if test $krb5_cv_decl_perror = yes; then
495	AC_DEFINE(HDR_HAS_PERROR,1,[Define if errno.h declares perror])
496fi
497
498KRB5_NEED_PROTO([#include <time.h>],strptime)
499CHECK_WAIT_TYPE
500CHECK_SIGPROCMASK
501AC_TYPE_GETGROUPS
502CHECK_SETJMP
503
504# *rpcent return types needed for lib/rpc
505
506AC_MSG_CHECKING([return type of setrpcent])
507AC_CACHE_VAL(k5_cv_type_setrpcent,
508[AC_COMPILE_IFELSE(
509  [AC_LANG_SOURCE([[#include <netdb.h>
510                    extern void setrpcent();]])],
511  [k5_cv_type_setrpcent=void],
512  [k5_cv_type_setrpcent=int])])
513AC_MSG_RESULT($k5_cv_type_setrpcent)
514AC_DEFINE_UNQUOTED(SETRPCENT_TYPE, $k5_cv_type_setrpcent, [Define as return type of setrpcent])
515
516AC_MSG_CHECKING([return type of endrpcent])
517AC_CACHE_VAL(k5_cv_type_endrpcent,
518[AC_COMPILE_IFELSE(
519  [AC_LANG_SOURCE(
520    [[#include <netdb.h>
521      extern void endrpcent();]])],
522  [k5_cv_type_endrpcent=void], [k5_cv_type_endrpcent=int])])
523AC_MSG_RESULT($k5_cv_type_endrpcent)
524AC_DEFINE_UNQUOTED(ENDRPCENT_TYPE, $k5_cv_type_endrpcent, [Define as return type of endrpcent])
525
526
527# bswap_16 is a macro in byteswap.h under GNU libc
528AC_MSG_CHECKING(for bswap_16)
529AC_CACHE_VAL(krb5_cv_bswap_16,
530[AC_LINK_IFELSE(
531  [AC_LANG_PROGRAM(
532    [[#if HAVE_BYTESWAP_H
533      #include <byteswap.h>
534      #endif
535    ]],
536    [[bswap_16(37);]])],
537  [krb5_cv_bswap_16=yes], [krb5_cv_bswap_16=no])])
538AC_MSG_RESULT($krb5_cv_bswap_16)
539if test "$krb5_cv_bswap_16" = yes; then
540  AC_DEFINE(HAVE_BSWAP_16,1,[Define to 1 if bswap_16 is available via byteswap.h])
541fi
542AC_MSG_CHECKING(for bswap_64)
543AC_CACHE_VAL(krb5_cv_bswap_64,
544[AC_LINK_IFELSE(
545  [AC_LANG_PROGRAM(
546    [[#if HAVE_BYTESWAP_H
547      #include <byteswap.h>
548      #endif
549    ]],
550    [[bswap_64(37);]])],
551  [krb5_cv_bswap_64=yes], [krb5_cv_bswap_64=no])])
552AC_MSG_RESULT($krb5_cv_bswap_64)
553if test "$krb5_cv_bswap_64" = yes; then
554  AC_DEFINE(HAVE_BSWAP_64,1,[Define to 1 if bswap_64 is available via byteswap.h])
555fi
556
557# Needed for ksu and some appl stuff.
558
559case $krb5_cv_host in
560alpha*-dec-osf*)
561	AC_CHECK_LIB(security,setluid,
562		AC_DEFINE(HAVE_SETLUID,1,[Define if setluid provided in OSF/1 security library])
563		KSU_LIBS="-lsecurity"
564	)
565	;;
566esac
567AC_SUBST(KSU_LIBS)
568
569if test $ac_cv_func_setenv = no || test $ac_cv_func_unsetenv = no \
570  || test $ac_cv_func_getenv = no; then
571  SETENVOBJ=setenv.o
572else
573  SETENVOBJ=
574fi
575AC_SUBST(SETENVOBJ)
576
577# Check what the return types for gethostbyname_r and getservbyname_r are.
578
579AC_CHECK_FUNC(gethostbyname_r,[
580ac_cv_func_gethostbyname_r=yes
581if test "$ac_cv_func_gethostbyname_r" = yes; then
582  AC_MSG_CHECKING([if gethostbyname_r returns an int])
583  AC_CACHE_VAL(krb5_cv_gethostbyname_r_returns_int,
584  [AC_COMPILE_IFELSE(
585    [AC_LANG_SOURCE(
586      [[#include <netdb.h>
587        extern int gethostbyname_r();]])],
588    [krb5_cv_gethostbyname_r_returns_int=yes],
589    [krb5_cv_gethostbyname_r_returns_int=no])])
590  AC_MSG_RESULT($krb5_cv_gethostbyname_r_returns_int)
591
592  AC_MSG_CHECKING([if gethostbyname_r returns a pointer])
593  AC_CACHE_VAL(krb5_cv_gethostbyname_r_returns_ptr,
594  [AC_COMPILE_IFELSE(
595    [AC_LANG_SOURCE(
596      [[#include <netdb.h>
597        extern struct hostent *gethostbyname_r();]])],
598    [krb5_cv_gethostbyname_r_returns_ptr=yes],
599    [krb5_cv_gethostbyname_r_returns_ptr=no])])
600  AC_MSG_RESULT($krb5_cv_gethostbyname_r_returns_ptr)
601
602  if test "$krb5_cv_gethostbyname_r_returns_int" = "$krb5_cv_gethostbyname_r_returns_ptr"; then
603    AC_MSG_WARN(cannot determine return type of gethostbyname_r -- disabling)
604    ac_cv_func_gethostbyname_r=no
605  fi
606  if test "$krb5_cv_gethostbyname_r_returns_int" = yes; then
607    AC_DEFINE(GETHOSTBYNAME_R_RETURNS_INT, 1, [Define if gethostbyname_r returns int rather than struct hostent * ])
608  fi
609fi
610if test "$ac_cv_func_gethostbyname_r" = yes; then
611  AC_DEFINE(HAVE_GETHOSTBYNAME_R, 1, [Define if gethostbyname_r exists and its return type is known])
612  AC_CHECK_FUNC(gethostbyaddr_r)
613fi
614])
615
616
617# PTHREAD_CFLAGS changes which variant of these functions is declared
618# on Solaris 11, so use it for these tests.
619old_CFLAGS=$CFLAGS
620CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
621AC_CHECK_FUNC(getpwnam_r,ac_cv_func_getpwnam_r=yes,ac_cv_func_getpwnam_r=no)
622AC_CHECK_FUNC(getpwuid_r,ac_cv_func_getpwuid_r=yes,ac_cv_func_getpwuid_r=no)
623if test "$ac_cv_func_getpwnam_r" = yes; then
624  AC_MSG_CHECKING([return type of getpwnam_r])
625  AC_CACHE_VAL(krb5_cv_getpwnam_r_return_type,
626  [AC_COMPILE_IFELSE(
627    [AC_LANG_SOURCE(
628      [[#include <pwd.h>
629        extern int getpwnam_r();]])],
630    [getpwnam_r_returns_int=yes], [getpwnam_r_returns_int=no])
631   AC_COMPILE_IFELSE(
632    [AC_LANG_SOURCE(
633      [[#include <pwd.h>
634        extern struct passwd *getpwnam_r();]])],
635    [getpwnam_r_returns_ptr=yes], [getpwnam_r_returns_ptr=no])
636   case "$getpwnam_r_returns_int/$getpwnam_r_returns_ptr" in
637     yes/no) krb5_cv_getpwnam_r_return_type=int ;;
638     no/yes) krb5_cv_getpwnam_r_return_type=ptr ;;
639     *) krb5_cv_getpwnam_r_return_type=unknown ;;
640   esac])
641  AC_MSG_RESULT($krb5_cv_getpwnam_r_return_type)
642  if test $krb5_cv_getpwnam_r_return_type = int; then
643    AC_DEFINE(GETPWNAM_R_RETURNS_INT, 1, [Define if getpwnam_r returns an int])
644  elif test $krb5_cv_getpwnam_r_return_type = unknown; then
645    AC_MSG_WARN([Cannot determine getpwnam_r return type, disabling getpwnam_r])
646    ac_cv_func_getpwnam_r=no
647  fi
648fi
649if test "$ac_cv_func_getpwnam_r" = yes; then
650  AC_MSG_CHECKING([number of arguments to getpwnam_r])
651  AC_CACHE_VAL(krb5_cv_getpwnam_r_args,
652  [AC_COMPILE_IFELSE(
653    [AC_LANG_PROGRAM(
654      [[#include <pwd.h>
655        struct passwd pwx; char buf[1024];]],
656      [[getpwnam_r("", &pwx, buf, sizeof(buf));]])],
657    [args4=yes], [args4=no])
658   AC_COMPILE_IFELSE(
659     [AC_LANG_PROGRAM(
660       [[#include <pwd.h>
661         struct passwd pwx, *p;
662         char buf[1024];]],
663       [[getpwnam_r("", &pwx, buf, sizeof(buf), &p);]])],
664     [args5=yes], [args5=no])
665   case $args4/$args5 in
666     yes/no) krb5_cv_getpwnam_r_args=4 ;;
667     no/yes) krb5_cv_getpwnam_r_args=5 ;;
668     *) krb5_cv_getpwnam_r_args=unknown ;;
669   esac])
670  AC_MSG_RESULT($krb5_cv_getpwnam_r_args)
671  if test "$krb5_cv_getpwnam_r_args" = unknown; then
672    AC_MSG_WARN([Cannot determine number of arguments to getpwnam_r, disabling its use.])
673    ac_cv_func_getpwnam_r=no
674  else
675    AC_DEFINE(HAVE_GETPWNAM_R,1,[Define if getpwnam_r is available and useful.])
676    if test "$krb5_cv_getpwnam_r_args" = 4; then
677      AC_DEFINE(GETPWNAM_R_4_ARGS,1,[Define if getpwnam_r exists but takes only 4 arguments (e.g., POSIX draft 6 implementations like some Solaris releases).])
678    fi
679  fi
680fi
681CFLAGS=$old_CFLAGS
682
683if test "$ac_cv_func_getpwnam_r" = no && test "$ac_cv_func_getpwuid_r" = yes; then
684  # Actually, we could do this check, and the corresponding checks
685  # for return type and number of arguments, but I doubt we'll run
686  # into a system where we'd get to use getpwuid_r but not getpwnam_r.
687  AC_MSG_NOTICE([getpwnam_r not useful, so disabling getpwuid_r too])
688  ac_cv_func_getpwuid_r=no
689fi
690if test "$ac_cv_func_getpwuid_r" = yes; then
691  AC_DEFINE(HAVE_GETPWUID_R,1,[Define if getpwuid_r is available and useful.])
692  # Hack: Assume getpwuid_r is the shorter form if getpwnam_r is.
693  if test "$krb5_cv_getpwnam_r_args" = 4; then
694    AC_DEFINE(GETPWUID_R_4_ARGS,1,[Define if getpwuid_r exists but takes only 4 arguments (e.g., POSIX draft 6 implementations like some Solaris releases).])
695  fi
696fi
697
698if test "$ac_cv_func_gmtime_r" = yes; then
699  AC_MSG_CHECKING([whether gmtime_r returns int])
700  AC_CACHE_VAL(krb5_cv_gmtime_r_returns_int,
701  [AC_COMPILE_IFELSE(
702    [AC_LANG_SOURCE(
703      [[#include <time.h>
704        extern int gmtime_r();]])],
705    [return_int=yes], [return_int=no])
706   AC_COMPILE_IFELSE([
707     AC_LANG_SOURCE(
708       [[#include <time.h>
709         extern struct tm *gmtime_r();]])],
710     [return_ptr=yes], [return_ptr=no])
711   case $return_int/$return_ptr in
712     yes/no) krb5_cv_gmtime_r_returns_int=yes ;;
713     no/yes) krb5_cv_gmtime_r_returns_int=no ;;
714     *)      # Can't figure it out, punt the function.
715             ac_cv_func_gmtime_r=no ;;
716   esac])
717  if test "$ac_cv_func_gmtime_r" = no; then
718    AC_MSG_RESULT(unknown -- ignoring gmtime_r)
719  else
720    AC_MSG_RESULT($krb5_cv_gmtime_r_returns_int)
721    if test "$krb5_cv_gmtime_r_returns_int" = yes; then
722      AC_DEFINE(GMTIME_R_RETURNS_INT,1,[Define if gmtime_r returns int instead of struct tm pointer, as on old HP-UX systems.])
723    fi
724  fi
725fi
726
727AC_CHECK_FUNC(getservbyname_r,[
728ac_cv_func_getservbyname_r=yes
729if test "$ac_cv_func_getservbyname_r" = yes; then
730  AC_MSG_CHECKING([if getservbyname_r returns an int])
731  AC_CACHE_VAL(krb5_cv_getservbyname_r_returns_int,
732  [AC_COMPILE_IFELSE(
733    [AC_LANG_SOURCE(
734      [[#include <netdb.h>
735        extern int getservbyname_r();]])],
736    [krb5_cv_getservbyname_r_returns_int=yes],
737    [krb5_cv_getservbyname_r_returns_int=no])])
738  AC_MSG_RESULT($krb5_cv_getservbyname_r_returns_int)
739
740  AC_MSG_CHECKING([if getservbyname_r returns a pointer])
741  AC_CACHE_VAL(krb5_cv_getservbyname_r_returns_ptr,
742  [AC_COMPILE_IFELSE(
743    [AC_LANG_SOURCE(
744      [[#include <netdb.h>
745        extern struct servent *getservbyname_r();]])],
746    [krb5_cv_getservbyname_r_returns_ptr=yes],
747    [krb5_cv_getservbyname_r_returns_ptr=no])])
748  AC_MSG_RESULT($krb5_cv_getservbyname_r_returns_ptr)
749
750  if test "$krb5_cv_getservbyname_r_returns_int" = "$krb5_cv_getservbyname_r_returns_ptr"; then
751    AC_MSG_WARN(cannot determine return type of getservbyname_r -- disabling)
752    ac_cv_func_getservbyname_r=no
753  fi
754  if test "$krb5_cv_getservbyname_r_returns_int" = yes; then
755    AC_DEFINE(GETSERVBYNAME_R_RETURNS_INT, 1, [Define if getservbyname_r returns int rather than struct servent * ])
756  fi
757fi
758if test "$ac_cv_func_getservbyname_r" = yes; then
759  AC_DEFINE(HAVE_GETSERVBYNAME_R, 1, [Define if getservbyname_r exists and its return type is known])
760  AC_CHECK_FUNC(getservbyport_r)
761fi
762])
763
764CHECK_DIRENT
765AC_TYPE_UID_T
766
767AC_CHECK_HEADER(termios.h,
768[AC_CHECK_FUNC([tcsetattr],
769  AC_DEFINE(POSIX_TERMIOS,1,[Define if termios.h exists and tcsetattr exists]))])
770
771AC_CHECK_HEADERS(poll.h stdlib.h string.h stddef.h sys/types.h sys/file.h sys/param.h sys/stat.h sys/time.h netinet/in.h sys/uio.h sys/filio.h sys/select.h time.h paths.h errno.h)
772
773# If compiling with IPv6 support, test if in6addr_any functions.
774# Irix 6.5.16 defines it, but lacks support in the C library.
775if test $krb5_cv_inet6 = yes || test "$krb5_cv_inet6_with_dinet6" = yes ; then
776  AC_CACHE_CHECK([for in6addr_any definition in library],
777  [krb5_cv_var_in6addr_any],
778  [AC_LINK_IFELSE(
779    [AC_LANG_PROGRAM(
780      [[#ifdef HAVE_SYS_TYPES_H
781        #include <sys/types.h>
782        #endif
783        #include <sys/socket.h>
784        #include <netinet/in.h>
785        #include <netdb.h>
786        #include <stdio.h>
787      ]],
788      [[struct sockaddr_in6 in;
789        in.sin6_addr = in6addr_any;
790        printf("%x", &in);]])],
791    [krb5_cv_var_in6addr_any=yes], [krb5_cv_var_in6addr_any=no])])
792  if test $krb5_cv_var_in6addr_any = no; then
793    AC_DEFINE(NEED_INSIXADDR_ANY,1,[Define if in6addr_any is not defined in libc])
794  fi
795fi
796
797# then from osconf.h, we have
798
799AC_CHECK_TYPE(time_t, long)
800AC_CHECK_SIZEOF(time_t)
801SIZEOF_TIME_T=$ac_cv_sizeof_time_t
802AC_SUBST(SIZEOF_TIME_T)
803
804# Determine where to put the replay cache.
805
806AC_MSG_CHECKING([for replay cache directory])
807AC_CACHE_VAL(krb5_cv_sys_rcdir,
808[
809if test $cross_compiling = yes; then
810	krb5_cv_sys_rcdir=/var/tmp
811else
812	for t_dir in /var/tmp /usr/tmp /var/usr/tmp /tmp ; do
813		test -d $t_dir || continue
814		krb5_cv_sys_rcdir=$t_dir
815		break
816	done
817fi])
818AC_MSG_RESULT($krb5_cv_sys_rcdir)
819KRB5_RCTMPDIR=$krb5_cv_sys_rcdir
820AC_SUBST(KRB5_RCTMPDIR)
821
822
823AC_MSG_CHECKING(for socklen_t)
824AC_CACHE_VAL(krb5_cv_has_type_socklen_t,
825[AC_COMPILE_IFELSE(
826  [AC_LANG_PROGRAM(
827    [[#include <sys/types.h>
828      #include <sys/socket.h>
829    ]],
830    [[sizeof(socklen_t);]])],
831  [krb5_cv_has_type_socklen_t=yes], [krb5_cv_has_type_socklen_t=no])])
832AC_MSG_RESULT($krb5_cv_has_type_socklen_t)
833if test $krb5_cv_has_type_socklen_t = yes; then
834    AC_DEFINE(HAVE_SOCKLEN_T,1,[Define if there is a socklen_t type. If not, probably use size_t])
835fi
836
837AC_MSG_CHECKING(for struct lifconf)
838AC_CACHE_VAL(krb5_cv_has_struct_lifconf,
839[AC_COMPILE_IFELSE(
840  [AC_LANG_PROGRAM(
841    [[#include <sys/socket.h>
842      #include <net/if.h>
843    ]],
844    [[sizeof (struct lifconf);]])],
845  [krb5_cv_has_struct_lifconf=yes], [krb5_cv_has_struct_lifconf=no])])
846AC_MSG_RESULT($krb5_cv_has_struct_lifconf)
847if test $krb5_cv_has_struct_lifconf = yes; then
848    AC_DEFINE(HAVE_STRUCT_LIFCONF,1,[Define if there is a struct lifconf.])
849fi
850# HP-UX 11 uses stuct if_laddrconf
851AC_MSG_CHECKING(for struct if_laddrconf)
852AC_CACHE_VAL(krb5_cv_has_struct_if_laddrconf,
853[AC_COMPILE_IFELSE(
854  [AC_LANG_PROGRAM(
855    [[#include <sys/socket.h>
856      #include <net/if.h>
857      #include <net/if6.h>
858    ]],
859    [[sizeof(struct if_laddrconf);]])],
860  [krb5_cv_has_struct_if_laddrconf=yes],
861  [krb5_cv_has_struct_if_laddrconf=no])])
862AC_MSG_RESULT($krb5_cv_has_struct_if_laddrconf)
863if test $krb5_cv_has_struct_if_laddrconf = yes; then
864    AC_DEFINE(HAVE_STRUCT_IF_LADDRCONF,1,[Define if there is a struct if_laddrconf.])
865fi
866
867
868AC_MSG_CHECKING([for h_errno in netdb.h])
869AC_CACHE_VAL(krb5_cv_header_netdb_h_h_errno,
870[AC_COMPILE_IFELSE(
871  [AC_LANG_PROGRAM(
872    [[#include <netdb.h>]],
873    [[int x = h_errno;]])],
874    [krb5_cv_header_netdb_h_h_errno=yes],
875    [krb5_cv_header_netdb_h_h_errno=no])])
876AC_MSG_RESULT($krb5_cv_header_netdb_h_h_errno)
877if test $krb5_cv_header_netdb_h_h_errno = yes; then
878    AC_DEFINE([HAVE_NETDB_H_H_ERRNO], 1,
879	[Define if netdb.h declares h_errno])
880fi
881
882
883AC_ARG_ENABLE([athena],
884[  --enable-athena         build with MIT Project Athena configuration],
885AC_DEFINE(KRB5_ATHENA_COMPAT,1,[Define if MIT Project Athena default configuration should be used]),)
886
887
888AC_C_INLINE
889AH_TOP([
890#ifndef KRB5_AUTOCONF_H
891#define KRB5_AUTOCONF_H
892])
893AH_BOTTOM([
894#if defined(__GNUC__) && !defined(inline)
895/* Silence gcc pedantic warnings about ANSI C.  */
896# define inline __inline__
897#endif
898#endif /* KRB5_AUTOCONF_H */
899])
900
901AC_CHECK_TYPES([struct cmsghdr, struct in_pktinfo, struct in6_pktinfo, struct sockaddr_storage], , , [
902#include <sys/types.h>
903#include <sys/socket.h>
904#include <netinet/in.h>
905])
906AC_CHECK_TYPES([struct rt_msghdr], , , [
907#include <sys/socket.h>
908#include <net/if.h>
909#include <net/route.h>
910])
911
912# Tests for 64-bit edwards25519 code.
913AC_CHECK_SIZEOF([size_t])
914AC_CHECK_TYPES([__int128_t, __uint128_t])
915
916# types libdb2 wants
917
918AC_CHECK_TYPES([ssize_t, u_char, u_int, u_long, u_int8_t, u_int16_t, u_int32_t, int8_t, int16_t, int32_t])
919
920# Some libdb2 test programs want a shell that supports functions.
921FCTSH=false
922AC_PATH_PROG(SH,sh,false)
923AC_PATH_PROG(SH5,sh5,false)
924AC_PATH_PROG(BASH,bash,false)
925for prog in $SH $SH5 $BASH; do
926  AC_MSG_CHECKING(if $prog supports functions)
927  if $prog -c 'foo() { true; }; foo' >/dev/null 2>&1; then
928    AC_MSG_RESULT(yes)
929    FCTSH=$prog
930    break
931  else
932    AC_MSG_RESULT(no)
933  fi
934done
935AC_SUBST(FCTSH)
936
937# Test for POSIX 2001 *printf support (X/Open System Interfaces extension
938# to ANSI/ISO C 1999 specification).  Specifically, positional
939# specifications; not checking for other features like %zx at present.
940AC_MSG_CHECKING(for POSIX printf positional specification support)
941AC_CACHE_VAL(ac_cv_printf_positional,
942[AC_RUN_IFELSE(
943  [AC_LANG_SOURCE(
944    [[#include <stdio.h>
945      #include <string.h>
946      const char expected[] = "200 100";
947      int main()
948      {
949          char buf[30];
950          sprintf(buf, "%2\$x %1\$d", 100, 512);
951          if (strcmp(expected, buf)) {
952              fprintf(stderr, "bad result: <%s> wanted: <%s>\n",
953                      buf, expected);
954              return 1;
955          }
956          return 0;
957      }]])],
958  [ac_cv_printf_positional=yes], [ac_cv_printf_positional=no],
959  [AC_MSG_ERROR(Cannot test for printf positional argument support when cross compiling)])])
960# Nothing for autoconf.h for now.
961AC_MSG_RESULT($ac_cv_printf_positional)
962
963
964# for t_locate_kdc test
965
966AC_PATH_PROG(DIG, dig, false)
967AC_PATH_PROG(NSLOOKUP, nslookup, false)
968
969# for kadmin
970
971AC_PROG_YACC
972ath_compat=
973AC_ARG_ENABLE([athena],
974[  --enable-athena         build with MIT Project Athena configuration],
975ath_compat=compat,)
976
977KRB5_AC_PRIOCNTL_HACK
978
979AC_CHECK_PROG(PERL,perl,perl)
980
981# lib/gssapi
982AC_CHECK_HEADER(xom.h,[
983	include_xom='awk '\''END{printf("%cinclude <xom.h>\n", 35);}'\'' < /dev/null'], [
984	include_xom='echo "/* no xom.h */"'])
985AC_SUBST(include_xom)
986
987
988# lib/rpc
989### Check where struct rpcent is declared.
990
991# This is necessary to determine:
992# 1. If /usr/include/netdb.h declares struct rpcent
993# 2. If /usr/include/rpc/netdb.h declares struct rpcent
994
995# We have our own rpc/netdb.h, and if /usr/include/netdb.h includes
996# rpc/netdb.h, then nastiness could happen.
997
998# Logic: If /usr/include/netdb.h declares struct rpcent, then check
999# rpc/netdb.h.  If /usr/include/rpc/netdb.h declares struct rpcent,
1000# then define STRUCT_RPCENT_IN_RPC_NETDB_H, otherwise do not.  If
1001# neither netdb.h nor rpc/netdb.h declares struct rpcent, then define
1002# STRUCT_RPCENT_IN_RPC_NETDB_H anyway.
1003
1004AC_MSG_CHECKING([where struct rpcent is declared])
1005AC_COMPILE_IFELSE(
1006  [AC_LANG_PROGRAM(
1007    [[#include <netdb.h>
1008    ]],
1009    [[struct rpcent e;
1010      char c = e.r_name[0];
1011      int i = e.r_number;]])],
1012    [netdb_rpcent=yes], [netdb_rpcent=no])
1013if test "$netdb_rpcent" = yes; then
1014  AC_COMPILE_IFELSE(
1015    [AC_LANG_PROGRAM(
1016      [[#include <rpc/netdb.h>
1017      ]],
1018      [[struct rpcent e;
1019        char c = e.r_name[0];
1020        int i = e.r_number;]])],
1021    [rpc_netdb_rpcent=yes], [rpc_netdb_rpcent=no])
1022  if test "$rpc_netdb_rpcent" = yes; then
1023    AC_MSG_RESULT([rpc/netdb.h])
1024    rpcent_define='#define STRUCT_RPCENT_IN_RPC_NETDB_H'
1025  else
1026    AC_MSG_RESULT([netdb.h])
1027  fi
1028else
1029  AC_MSG_RESULT([nowhere])
1030  rpcent_define='#define STRUCT_RPCENT_IN_RPC_NETDB_H'
1031fi
1032AC_SUBST(rpcent_define)
1033
1034AC_CHECK_HEADERS(sys/select.h sys/time.h unistd.h)
1035if test $ac_cv_header_sys_select_h = yes; then
1036  GSSRPC__SYS_SELECT_H='#include <sys/select.h>'
1037else
1038  GSSRPC__SYS_SELECT_H='/* #include <sys/select.h> */'
1039fi
1040AC_SUBST(GSSRPC__SYS_SELECT_H)
1041if test $ac_cv_header_sys_time_h = yes; then
1042  GSSRPC__SYS_TIME_H='#include <sys/time.h>'
1043else
1044  GSSRPC__SYS_TIME_H='/* #include <sys/time.h> */'
1045fi
1046AC_SUBST(GSSRPC__SYS_TIME_H)
1047if test $ac_cv_header_unistd_h = yes; then
1048  GSSRPC__UNISTD_H='#include <unistd.h>'
1049else
1050  GSSRPC__UNISTD_H='/* #include <unistd.h> */'
1051fi
1052AC_SUBST(GSSRPC__UNISTD_H)
1053
1054AC_CACHE_CHECK([for MAXHOSTNAMELEN in sys/param.h],
1055[krb5_cv_header_sys_param_h_maxhostnamelen],
1056[AC_COMPILE_IFELSE(
1057  [AC_LANG_PROGRAM(
1058    [[#include <sys/param.h>
1059    ]],
1060    [[int i = MAXHOSTNAMELEN;]])],
1061    [krb5_cv_header_sys_param_h_maxhostnamelen=yes],
1062    [krb5_cv_header_sys_param_h_maxhostnamelen=no])])
1063AC_CACHE_CHECK([for MAXHOSTNAMELEN in netdb.h],
1064[krb5_cv_header_netdb_h_maxhostnamelen],
1065[AC_COMPILE_IFELSE(
1066  [AC_LANG_PROGRAM(
1067    [[#include <netdb.h>
1068    ]],
1069    [[int i = MAXHOSTNAMELEN;]])],
1070    [krb5_cv_header_netdb_h_maxhostnamelen=yes],
1071    [krb5_cv_header_netdb_h_maxhostnamelen=no])])
1072
1073GSSRPC__SYS_PARAM_H='/* #include <sys/param.h> */'
1074GSSRPC__NETDB_H='/* #include <netdb.h> */'
1075if test $krb5_cv_header_sys_param_h_maxhostnamelen = yes; then
1076  GSSRPC__SYS_PARAM_H='#include <sys/param.h>'
1077else
1078  if test $krb5_cv_header_netdb_h_maxhostnamelen = yes; then
1079    GSSRPC__NETDB_H='#include <netdb.h>'
1080  else
1081    AC_MSG_WARN([can't find MAXHOSTNAMELEN definition; faking it])
1082  fi
1083fi
1084AC_SUBST(GSSRPC__SYS_PARAM_H)
1085AC_SUBST(GSSRPC__NETDB_H)
1086
1087AC_CACHE_CHECK([for BSD type aliases], [krb5_cv_type_bsdaliases],
1088[AC_COMPILE_IFELSE(
1089  [AC_LANG_PROGRAM(
1090    [[#include <sys/types.h>
1091      #if HAVE_UNISTD_H
1092      #include <unistd.h>
1093      #endif
1094    ]],
1095    [[u_char c;
1096      u_int i;
1097      u_long l;]])],
1098  [krb5_cv_type_bsdaliases=yes], [krb5_cv_type_bsdaliases=no])])
1099if test $krb5_cv_type_bsdaliases = yes; then
1100  GSSRPC__BSD_TYPEALIASES='/* #undef GSSRPC__BSD_TYPEALIASES */'
1101else
1102  GSSRPC__BSD_TYPEALIASES='#define GSSRPC__BSD_TYPEALIASES 1'
1103fi
1104AC_SUBST(GSSRPC__BSD_TYPEALIASES)
1105
1106AC_MSG_CHECKING([return type of setrpcent])
1107AC_CACHE_VAL(k5_cv_type_setrpcent,
1108[AC_COMPILE_IFELSE(
1109  [AC_LANG_SOURCE(
1110    [[#include <netdb.h>
1111      extern void setrpcent();]])],
1112  [k5_cv_type_setrpcent=void], [k5_cv_type_setrpcent=int])])
1113AC_MSG_RESULT($k5_cv_type_setrpcent)
1114AC_DEFINE_UNQUOTED(SETRPCENT_TYPE, $k5_cv_type_setrpcent, [Define as return type of setrpcent])
1115
1116AC_MSG_CHECKING([return type of endrpcent])
1117AC_CACHE_VAL(k5_cv_type_endrpcent,
1118[AC_COMPILE_IFELSE(
1119  [AC_LANG_SOURCE(
1120    [[#include <netdb.h>
1121      extern void endrpcent();]])],
1122  [k5_cv_type_endrpcent=void], [k5_cv_type_endrpcent=int])])
1123AC_MSG_RESULT($k5_cv_type_endrpcent)
1124AC_DEFINE_UNQUOTED(ENDRPCENT_TYPE, $k5_cv_type_endrpcent, [Define as return type of endrpcent])
1125K5_GEN_FILE(include/gssrpc/types.h:include/gssrpc/types.hin)
1126
1127# for pkinit
1128AC_ARG_ENABLE([pkinit],
1129[  --disable-pkinit        disable PKINIT plugin support],,
1130enable_pkinit=try)
1131if test "$enable_pkinit" = yes || test "$enable_pkinit" = try; then
1132  AC_CACHE_CHECK(for a recent enough OpenSSL, k5_cv_openssl_version_okay,
1133[AC_COMPILE_IFELSE([AC_LANG_SOURCE([#include <openssl/opensslv.h>
1134#if OPENSSL_VERSION_NUMBER < 0x10000000L
1135# error openssl is too old, need 1.0.0
1136#endif
1137int i = 1;
1138])], k5_cv_openssl_version_okay=yes, k5_cv_openssl_version_okay=no)])
1139  old_LIBS="$LIBS"
1140  AC_CHECK_LIB(crypto, PKCS7_get_signer_info)
1141  AC_CHECK_FUNCS(EVP_PKEY_get_bn_param)
1142  LIBS="$old_LIBS"
1143fi
1144if test "$k5_cv_openssl_version_okay" = yes && (test "$enable_pkinit" = yes || test "$enable_pkinit" = try); then
1145  K5_GEN_MAKEFILE(plugins/preauth/pkinit)
1146  K5_GEN_MAKEFILE(tests/softpkcs11)
1147  PKINIT=yes
1148elif test "$k5_cv_openssl_version_okay" = no && test "$enable_pkinit" = yes; then
1149  AC_MSG_ERROR([Version of OpenSSL is too old; cannot enable PKINIT.])
1150else
1151  AC_DEFINE([DISABLE_PKINIT], 1, [Define to disable PKINIT plugin support])
1152  AC_MSG_NOTICE([Disabling PKINIT support.])
1153  PKINIT=no
1154fi
1155AC_SUBST(PKINIT)
1156
1157# for lib/apputils
1158AC_REPLACE_FUNCS(daemon)
1159
1160# For Python tests.  Python version 3.2.4 is required as prior
1161# versions do not accept string input to subprocess.Popen.communicate
1162# when universal_newlines is set.
1163PYTHON_MINVERSION=3.2.4
1164AC_SUBST(PYTHON_MINVERSION)
1165AC_CHECK_PROG(PYTHON,python3,python3)
1166if test x"$PYTHON" = x; then
1167	AC_CHECK_PROG(PYTHON,python,python)
1168fi
1169HAVE_PYTHON=no
1170if test x"$PYTHON" != x; then
1171	wantver="(sys.hexversion >= 0x30204F0)"
1172	if "$PYTHON" -c "import sys; sys.exit(not $wantver and 1 or 0)"; then
1173		HAVE_PYTHON=yes
1174	fi
1175fi
1176AC_SUBST(HAVE_PYTHON)
1177
1178# For cmocka tests.
1179CMOCKA_LIBS=
1180HAVE_CMOCKA=no
1181HAVE_CMOCKA_H=no
1182HAVE_CMOCKA_LIB=no
1183AC_CHECK_HEADER(cmocka.h, [HAVE_CMOCKA_H=yes], :, [
1184#include <stdarg.h>
1185#include <stddef.h>
1186#include <setjmp.h> ])
1187AC_CHECK_LIB(cmocka, _cmocka_run_group_tests, [HAVE_CMOCKA_LIB=yes])
1188if test "$HAVE_CMOCKA_LIB" = yes && test "$HAVE_CMOCKA_H" = yes; then
1189    HAVE_CMOCKA=yes
1190    CMOCKA_LIBS='-lcmocka'
1191    AC_DEFINE([HAVE_CMOCKA],1,[Define if cmocka library is available.])
1192fi
1193AC_SUBST(HAVE_CMOCKA)
1194AC_SUBST(CMOCKA_LIBS)
1195
1196# For URI lookup tests. Requires resolv_wrapper >= 1.1.5 for URI
1197# support.
1198HAVE_RESOLV_WRAPPER=0
1199PKG_CHECK_EXISTS([resolv_wrapper >= 1.1.5], [HAVE_RESOLV_WRAPPER=1])
1200AC_SUBST(HAVE_RESOLV_WRAPPER)
1201
1202# for plugins/kdb/db2
1203
1204# AIX is unusual in that it wants all symbols resolved at link time
1205#  Fortunately, it will allow us to link the kdb library now, even if
1206# it is linked again later.
1207case $krb5_cv_host in
1208*-*-aix*)
1209	DB_EXTRA_LIBS=-ldb
1210	;;
1211*)
1212	DB_EXTRA_LIBS=
1213	;;
1214esac
1215AC_SUBST(DB_EXTRA_LIBS)
1216
1217
1218
1219# Warn about possible thread safety issues.  These functions have all
1220# been checked for previously.
1221tsfuncs="getpwnam_r getpwuid_r gethostbyname_r getservbyname_r gmtime_r localtime_r"
1222if test "$enable_thread_support" = yes; then
1223  tsmissing=""
1224  for ts in $tsfuncs; do
1225    if eval "test \"\${ac_cv_func_$ts}\" != yes"; then
1226      tsmissing="$tsmissing $ts"
1227    fi
1228  done
1229  if test "$ac_cv_func_res_nsearch/$ac_cv_lib_resolv_res_nsearch" = "no/no"; then
1230    tsmissing="$tsmissing res_nsearch"
1231  fi
1232  if test "$tsmissing" != ""; then
1233    AC_MSG_WARN([Some functions that are needed for library thread])
1234    AC_MSG_WARN([safety appear to be missing.])
1235    for ts in $tsmissing; do
1236      AC_MSG_WARN([  missing thread-safe function: $ts])
1237    done
1238    AC_MSG_WARN([Without these functions, the installed libraries])
1239    AC_MSG_WARN([may not be thread-safe.])
1240  fi # tsmissing not empty
1241fi # enable_thread_support
1242
1243# Sadly, we seem to have accidentally committed ourselves in 1.4 to
1244# an ABI that includes the existence of libkrb5support.0 even
1245# though random apps should never use anything from it.  And on
1246# the Mac, to which that didn't apply, we can't use major version 0.
1247
1248case $krb5_cv_host in
1249*-*-darwin* | *-*-rhapsody*) SUPPORTLIB_MAJOR=1 ;;
1250*)			     SUPPORTLIB_MAJOR=0 ;;
1251esac
1252AC_SUBST(SUPPORTLIB_MAJOR)
1253
1254
1255if test "$COM_ERR_VERSION" = k5 ; then
1256  K5_GEN_MAKEFILE(util/et)
1257fi
1258if test "$SS_VERSION" = k5 ; then
1259  K5_GEN_MAKEFILE(util/ss)
1260fi
1261
1262
1263ldap_plugin_dir=""
1264ldap_lib=""
1265if test -n "$OPENLDAP_PLUGIN"; then
1266  AC_CHECK_HEADERS(ldap.h lber.h, :, [AC_MSG_ERROR($ac_header not found)])
1267  AC_CHECK_LIB(ldap, ldap_str2dn, :, [AC_MSG_ERROR(libldap not found or missing ldap_str2dn)])
1268
1269  BER_OKAY=0
1270  AC_CHECK_LIB(ldap, ber_init, [BER_OKAY=1])
1271  if test "$BER_OKAY" = "1"; then
1272    LDAP_LIBS='-lldap'
1273  else
1274    AC_CHECK_LIB(lber, ber_init, [BER_OKAY=1], [AC_MSG_WARN([libber not found])])
1275    if test "$BER_OKAY" = "1"; then
1276      LDAP_LIBS='-lldap -llber'
1277    else
1278      AC_MSG_ERROR("BER library missing - cannot build LDAP database module")
1279    fi
1280  fi
1281  AC_DEFINE([ENABLE_LDAP], 1, [Define if LDAP KDB support within the Kerberos library (mainly ASN.1 code) should be enabled.])
1282  AC_SUBST(LDAP_LIBS)
1283
1284  AC_CHECK_HEADERS([sasl/sasl.h], [HAVE_SASL=yes], [HAVE_SASL=no])
1285  AC_SUBST(HAVE_SASL)
1286  if test "$HAVE_SASL" = no; then
1287    AC_MSG_WARN([not building LDAP SASL support])
1288  fi
1289
1290  K5_GEN_MAKEFILE(plugins/kdb/ldap)
1291  K5_GEN_MAKEFILE(plugins/kdb/ldap/ldap_util)
1292  K5_GEN_MAKEFILE(plugins/kdb/ldap/libkdb_ldap)
1293  ldap_plugin_dir='plugins/kdb/ldap plugins/kdb/ldap/ldap_util'
1294  LDAP=yes
1295else
1296  LDAP=no
1297fi
1298AC_SUBST(ldap_plugin_dir)
1299AC_SUBST(LDAP)
1300# This check is for plugins/preauth/securid_sam2
1301sam2_plugin=""
1302old_CFLAGS=$CFLAGS
1303CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
1304AC_CHECK_LIB(aceclnt, SD_Init, [
1305	     AC_MSG_NOTICE([Enabling RSA securID support])
1306	     K5_GEN_MAKEFILE(plugins/preauth/securid_sam2)
1307	     sam2_plugin=plugins/preauth/securid_sam2
1308	     ])
1309AC_SUBST(sam2_plugin)
1310CFLAGS=$old_CFLAGS
1311
1312lmdb_plugin_dir=""
1313HAVE_LMDB=no
1314AC_ARG_WITH([lmdb],
1315  [AS_HELP_STRING([--with-lmdb],
1316    [compile LMDB database backend module @<:@auto@:>@])],
1317  [], [withval=auto])
1318if test "$withval" = auto -o "$withval" = yes; then
1319  AC_CHECK_LIB([lmdb],[mdb_env_create],[have_lmdb=true],[have_lmdb=false])
1320  if test "$have_lmdb" = true; then
1321    LMDB_LIBS=-llmdb
1322    HAVE_LMDB=yes
1323    lmdb_plugin_dir='plugins/kdb/lmdb'
1324    K5_GEN_MAKEFILE(plugins/kdb/lmdb)
1325  elif test "$withval" = yes; then
1326    AC_MSG_ERROR([liblmdb not found])
1327  fi
1328fi
1329AC_SUBST(HAVE_LMDB)
1330AC_SUBST(LMDB_LIBS)
1331AC_SUBST(lmdb_plugin_dir)
1332
1333# Kludge for simple server --- FIXME is this the best way to do this?
1334
1335if test "$ac_cv_lib_socket" = "yes" -a "$ac_cv_lib_nsl" = "yes"; then
1336	AC_DEFINE(BROKEN_STREAMS_SOCKETS,1,[Define if socket can't be bound to 0.0.0.0])
1337fi
1338
1339# Compile with libedit support in ss by default if available.  Compile
1340# with readline only if asked, to avoid a default GPL dependency.
1341AC_ARG_WITH([libedit],
1342  [AS_HELP_STRING([--without-libedit], [do not compile with libedit])],
1343  [], [with_libedit=default])
1344AC_ARG_WITH([readline],
1345  [AS_HELP_STRING([--with-readline], [compile with GNU Readline])],
1346  [], [with_readline=no])
1347if test "x$with_readline" = xyes; then
1348  with_libedit=no
1349fi
1350RL_CFLAGS=
1351RL_LIBS=
1352if test "x$with_libedit" != xno; then
1353  PKG_CHECK_MODULES(LIBEDIT, libedit, [have_libedit=yes], [have_libedit=no])
1354  if test "x$have_libedit" = xyes; then
1355    RL_CFLAGS=$LIBEDIT_CFLAGS
1356    RL_LIBS=$LIBEDIT_LIBS
1357    AC_DEFINE([HAVE_LIBEDIT], 1, [Define if building with libedit.])
1358    AC_MSG_NOTICE([Using libedit for readline support])
1359  elif test "x$with_libedit" = xyes; then
1360    # We were explicitly asked for libedit and couldn't find it.
1361    AC_MSG_ERROR([Could not detect libedit with pkg-config])
1362  else
1363    AC_MSG_NOTICE([Not using any readline support])
1364  fi
1365elif test "x$with_readline" = xyes; then
1366  AC_MSG_NOTICE([Using GNU Readline])
1367  AC_CHECK_LIB([readline], [main], :,
1368	       AC_MSG_FAILURE([Cannot find readline library.]))
1369  AC_DEFINE([HAVE_READLINE], 1, [Define if building with GNU Readline.])
1370  RL_LIBS='-lreadline'
1371else
1372  AC_MSG_RESULT([Not using any readline support])
1373fi
1374AC_SUBST([RL_CFLAGS])
1375AC_SUBST([RL_LIBS])
1376
1377AC_ARG_WITH([system-verto],
1378  [AS_HELP_STRING([--with-system-verto], [always use system verto library])],
1379  [], [with_system_verto=default])
1380VERTO_VERSION=k5
1381if test "x$with_system_verto" != xno; then
1382  PKG_CHECK_MODULES(VERTO, libverto, [have_sysverto=yes], [have_sysverto=no])
1383  if test "x$have_sysverto" = xyes; then
1384    VERTO_VERSION=sys
1385  elif test "x$with_system_verto" = xyes; then
1386    AC_MSG_ERROR([cannot detect system libverto])
1387  fi
1388fi
1389if test "x$VERTO_VERSION" = xsys; then
1390  AC_MSG_NOTICE([Using system libverto])
1391else
1392  VERTO_CFLAGS=
1393  VERTO_LIBS="-lverto"
1394  AC_MSG_NOTICE([Using built-in libverto])
1395fi
1396AC_SUBST([VERTO_CFLAGS])
1397AC_SUBST([VERTO_LIBS])
1398AC_SUBST([VERTO_VERSION])
1399
1400AC_PATH_PROG(GROFF, groff)
1401
1402# Make localedir work in autoconf 2.5x.
1403if test "${localedir+set}" != set; then
1404    localedir='$(datadir)/locale'
1405fi
1406AC_SUBST(localedir)
1407
1408# Determine the default macOS ccache type and whether to build the KCM
1409# Mach RPC support.
1410MACOS_FRAMEWORK=
1411dnl The outer brackets around the case statement prevent m4 from
1412dnl eating the brackets in the glob patterns, but also prevent us from
1413dnl using AC_DEFINE within the body.
1414[case $host in
1415*-*-darwin[0-9].* | *-*-darwin10.*)
1416  # Use the normal default cache type for macOS 10.6 (Darwin 10) and
1417  # prior.  Build the KCM Mach RPC support.
1418  OSX=osx
1419  ;;
1420*-*-darwin*)
1421  # macOS 10.6 (Darwin 11) uses the KCM type by default.  macOS 11
1422  # (Darwin 20) uses an xpc-based cache type called XCACHE by default.
1423  # We can access either of these collections via a macos-specific
1424  # implementation of the API cache type.  Build the KCM Mach RPC
1425  # support.
1426  OSX=osx
1427  macos_defccname=API:
1428  MACOS_FRAMEWORK="-framework Kerberos"
1429  ;;
1430*)
1431  # This is not macOS; do not build the Mach RPC support and use the
1432  # normal default cache type.
1433  OSX=no
1434  ;;
1435esac]
1436if test "$macos_defccname" = API:; then
1437  AC_DEFINE(USE_CCAPI_MACOS, 1, [Define to build macOS CCAPI client])
1438fi
1439AC_SUBST(OSX)
1440AC_SUBST(MACOS_FRAMEWORK)
1441
1442# Build-time default ccache, keytab, and client keytab names.  These
1443# can be given as variable arguments DEFCCNAME, DEFKTNAME, and
1444# DEFCKTNAME.  Otherwise, we try to get the OS defaults from
1445# krb5-config if we can, or fall back to hardcoded defaults.
1446AC_ARG_VAR(DEFCCNAME, [Default ccache name])
1447AC_ARG_VAR(DEFKTNAME, [Default keytab name])
1448AC_ARG_VAR(DEFCKTNAME, [Default client keytab name])
1449AC_ARG_WITH([krb5-config],
1450  [AS_HELP_STRING([--with-krb5-config=PATH],
1451    [path to existing krb5-config program for defaults])],
1452  [], [with_krb5_config=krb5-config])
1453if test "x$with_krb5_config" != xno; then
1454	if test "x$with_krb5_config" = xyes; then
1455		with_krb5_config=krb5-config
1456	fi
1457	if $with_krb5_config --help 2>&1 | grep defccname >/dev/null; then
1458		AC_MSG_NOTICE([Using $with_krb5_config for build defaults])
1459		: "${DEFCCNAME=`$with_krb5_config --defccname`}"
1460		: "${DEFKTNAME=`$with_krb5_config --defktname`}"
1461		: "${DEFCKTNAME=`$with_krb5_config --defcktname`}"
1462	fi
1463fi
1464if test "${DEFCCNAME+set}" != set; then
1465	if test "${macos_defccname+set}" = set; then
1466		DEFCCNAME=$macos_defccname
1467	else
1468		DEFCCNAME=FILE:/tmp/krb5cc_%{uid}
1469	fi
1470fi
1471if test "${DEFKTNAME+set}" != set; then
1472	DEFKTNAME=FILE:/etc/krb5.keytab
1473fi
1474if test "${DEFCKTNAME+set}" != set; then
1475	AX_RECURSIVE_EVAL($localstatedir, exp_localstatedir)
1476	DEFCKTNAME=FILE:$exp_localstatedir/krb5/user/%{euid}/client.keytab
1477fi
1478AC_MSG_NOTICE([Default ccache name: $DEFCCNAME])
1479AC_MSG_NOTICE([Default keytab name: $DEFKTNAME])
1480AC_MSG_NOTICE([Default client keytab name: $DEFCKTNAME])
1481AC_DEFINE_UNQUOTED(DEFCCNAME, ["$DEFCCNAME"], [Define to default ccache name])
1482AC_DEFINE_UNQUOTED(DEFKTNAME, ["$DEFKTNAME"], [Define to default keytab name])
1483AC_DEFINE_UNQUOTED(DEFCKTNAME, ["$DEFCKTNAME"],
1484                   [Define to default client keytab name])
1485
1486AC_ARG_VAR(PKCS11_MODNAME, [Default PKCS11 module name])
1487if test "${PKCS11_MODNAME+set}" != set; then
1488	PKCS11_MODNAME=opensc-pkcs11.so
1489fi
1490AC_MSG_NOTICE([Default PKCS11 module name: $PKCS11_MODNAME])
1491AC_DEFINE_UNQUOTED(PKCS11_MODNAME, ["$PKCS11_MODNAME"],
1492                   [Default PKCS11 module name])
1493
1494AC_CONFIG_FILES([build-tools/krb5-config], [chmod +x build-tools/krb5-config])
1495AC_CONFIG_FILES([build-tools/kadm-server.pc
1496	build-tools/kadm-client.pc
1497	build-tools/kdb.pc
1498	build-tools/krb5.pc
1499	build-tools/krb5-gssapi.pc
1500	build-tools/mit-krb5.pc
1501	build-tools/mit-krb5-gssapi.pc
1502	build-tools/gssrpc.pc
1503])
1504V5_AC_OUTPUT_MAKEFILE(.
1505
1506	util util/support util/profile util/profile/testmod
1507	util/verto
1508
1509	lib lib/kdb
1510
1511	lib/crypto lib/crypto/krb lib/crypto/crypto_tests
1512	lib/crypto/builtin lib/crypto/builtin/des
1513	lib/crypto/builtin/aes lib/crypto/builtin/camellia
1514	lib/crypto/builtin/md4 lib/crypto/builtin/md5
1515	lib/crypto/builtin/sha1 lib/crypto/builtin/sha2
1516	lib/crypto/builtin/enc_provider lib/crypto/builtin/hash_provider
1517	lib/crypto/openssl lib/crypto/openssl/des
1518	lib/crypto/openssl/enc_provider lib/crypto/openssl/hash_provider
1519
1520	lib/krb5 lib/krb5/error_tables lib/krb5/asn.1 lib/krb5/ccache
1521	lib/krb5/keytab lib/krb5/krb lib/krb5/rcache lib/krb5/os
1522	lib/krb5/unicode
1523
1524	lib/gssapi lib/gssapi/generic lib/gssapi/krb5 lib/gssapi/spnego
1525	lib/gssapi/mechglue
1526
1527	lib/rpc lib/rpc/unit-test
1528
1529	lib/kadm5 lib/kadm5/clnt lib/kadm5/srv
1530	lib/krad
1531	lib/apputils
1532
1533	kdc kprop config-files build-tools man doc include
1534
1535	plugins/certauth/test
1536	plugins/gssapi/negoextest
1537	plugins/hostrealm/test
1538	plugins/localauth/test
1539	plugins/kadm5_hook/test
1540	plugins/kadm5_auth/test
1541	plugins/pwqual/test
1542	plugins/audit
1543	plugins/audit/test
1544	plugins/kdb/db2
1545	plugins/kdb/db2/libdb2
1546	plugins/kdb/db2/libdb2/hash
1547	plugins/kdb/db2/libdb2/btree
1548	plugins/kdb/db2/libdb2/db
1549	plugins/kdb/db2/libdb2/mpool
1550	plugins/kdb/db2/libdb2/recno
1551	plugins/kdb/db2/libdb2/test
1552	plugins/kdb/test
1553	plugins/kdcpolicy/test
1554	plugins/preauth/otp
1555	plugins/preauth/spake
1556	plugins/preauth/test
1557	plugins/authdata/greet_client
1558	plugins/authdata/greet_server
1559	plugins/tls/k5tls
1560
1561	clients clients/klist clients/kinit clients/kvno
1562	clients/kdestroy clients/kpasswd clients/ksu clients/kswitch
1563
1564	kadmin kadmin/cli kadmin/dbutil kadmin/ktutil kadmin/server
1565
1566	appl
1567	appl/sample appl/sample/sclient appl/sample/sserver
1568	appl/simple appl/simple/client appl/simple/server
1569	appl/gss-sample appl/user_user
1570
1571	tests tests/asn.1 tests/create tests/hammer tests/verify tests/gssapi
1572	tests/threads tests/shlib tests/gss-threads tests/misc
1573)
1574