s3-auth: Remove auth_netlogond
[kai/samba.git] / source3 / configure.in
1 dnl Process this file with autoconf to produce a configure script.
2
3 dnl We must use autotools 2.54 or above
4 AC_PREREQ(2.54)
5
6 AC_INIT([Samba],[3],[samba-technical@samba.org])
7
8 AC_CONFIG_SRCDIR([include/includes.h])
9 AC_CONFIG_HEADER(include/autoconf/config.h)
10 AC_DEFINE(CONFIG_H_IS_FROM_SAMBA,1,[Marker for samba's config.h])
11
12 case "$PATH" in
13     */usr/ucb*)
14         AC_MSG_WARN([\$PATH contains /usr/ucb - build errors may follow])
15         ;;
16 esac 
17
18 builddir=`pwd`
19 AC_SUBST(builddir)
20
21 m4_include(m4/samba_version.m4)
22 m4_include(m4/check_path.m4)
23 m4_include(pkg.m4)
24
25 AC_LIBREPLACE_CC_CHECKS
26 AC_LIBREPLACE_RUNTIME_LIB_PATH_VAR
27
28 m4_include(../lib/tevent/libtevent.m4)
29 m4_include(../lib/ccan/libccan.m4)
30
31 LIBTEVENT_OBJ0=""
32 for obj in ${TEVENT_OBJ}; do
33         LIBTEVENT_OBJ0="${LIBTEVENT_OBJ0} ${teventdir}/${obj}"
34 done
35 AC_SUBST(LIBTEVENT_OBJ0)
36 LIBS="${LIBS} ${TEVENT_LIBS}"
37
38 SAMBA_CPPFLAGS="-Iinclude/autoconf -Iinclude -I${srcdir-.}/include  -I. -I${srcdir-.}"
39 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/../lib/replace"
40 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${TEVENT_CFLAGS}"
41 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${CCAN_CFLAGS}"
42 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/librpc"
43 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/.."
44 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/../lib/tdb_compat"
45
46 SAMBA_CONFIGURE_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/../lib/popt"
47
48 ## cleanup the $(srcdir) in the Makefile if we are outside of the tree
49 if test "x${srcdir-.}" != "x."; then
50         SAMBA_CPPFLAGS=`echo ${SAMBA_CPPFLAGS} | sed -e "s;${srcdir};\$\(srcdir\);g"`
51 fi
52
53 dnl Unique-to-Samba variables we'll be playing with.
54 AC_SUBST(SAMBA_CPPFLAGS)
55 AC_SUBST(SHELL)
56 AC_SUBST(LDSHFLAGS)
57 AC_SUBST(SONAMEFLAG)
58 AC_SUBST(SHLD)
59 AC_SUBST(MODULE_EXPORTS)
60 AC_SUBST(DSO_EXPORTS)
61 AC_SUBST(HOST_OS)
62 AC_SUBST(PICFLAG)
63 AC_SUBST(PIE_CFLAGS)
64 AC_SUBST(PIE_LDFLAGS)
65 AC_SUBST(RELRO_LDFLAGS)
66 AC_SUBST(SHLIBEXT)
67 AC_SUBST(INSTALLLIBCMD_SH)
68 AC_SUBST(INSTALLLIBCMD_A)
69 AC_SUBST(UNINSTALLLIBCMD_SH)
70 AC_SUBST(UNINSTALLLIBCMD_A)
71
72 AC_SUBST(INSTALL_LIBWBCLIENT)
73 AC_SUBST(UNINSTALL_LIBWBCLIENT)
74 AC_SUBST(LIBWBCLIENT_SHARED_TARGET)
75 AC_SUBST(LIBWBCLIENT_SHARED_TARGET_SOVER)
76 AC_SUBST(LIBWBCLIENT_SHARED_TARGET_FULLVER)
77 AC_SUBST(LIBWBCLIENT_SHARED)
78 AC_SUBST(LIBWBCLIENT_STATIC_TARGET)
79 AC_SUBST(LIBWBCLIENT_STATIC)
80 AC_SUBST(LIBWBCLIENT_SOVER)
81 AC_SUBST(LIBWBCLIENT_FULLVER)
82 AC_SUBST(LIBWBCLIENT)
83 AC_SUBST(LIBWBCLIENT_LIBS)
84
85 AC_SUBST(LIBSAMBAUTIL_SHARED)
86
87 AC_SUBST(PRINT_LIBS)
88 AC_SUBST(AUTH_LIBS)
89 AC_SUBST(ACL_LIBS)
90 AC_SUBST(PASSDB_LIBS)
91 AC_SUBST(IDMAP_LIBS)
92 AC_SUBST(KRB5_LIBS)
93 AC_SUBST(LDAP_LIBS)
94 AC_SUBST(GPEXT_LIBS)
95 AC_SUBST(PAM_MODULES)
96 AC_SUBST(INSTALL_PAM_MODULES)
97 AC_SUBST(UNINSTALL_PAM_MODULES)
98 AC_SUBST(NSS_MODULES)
99 AC_SUBST(EXTRA_BIN_PROGS)
100 AC_SUBST(CIFSMOUNT_PROGS)
101 AC_SUBST(INSTALL_CIFSMOUNT)
102 AC_SUBST(UNINSTALL_CIFSMOUNT)
103 AC_SUBST(CIFSUMOUNT_PROGS)
104 AC_SUBST(INSTALL_CIFSUMOUNT)
105 AC_SUBST(UNINSTALL_CIFSUMOUNT)
106 AC_SUBST(CIFSUPCALL_PROGS)
107 AC_SUBST(INSTALL_CIFSUPCALL)
108 AC_SUBST(UNINSTALL_CIFSUPCALL)
109 AC_SUBST(EXTRA_SBIN_PROGS)
110 AC_SUBST(EXTRA_ALL_TARGETS)
111 AC_SUBST(CONFIG_LIBS)
112 AC_SUBST(NSCD_LIBS)
113
114 # compile with optimization and without debugging by default, but
115 # allow people to set their own preference.
116 # do this here since AC_CACHE_CHECK apparently sets the CFLAGS to "-g -O2"
117 # if it has no value.  This prevent *very* large debug binaries from occurring
118 # by default.
119 if test "x$debug" = "xyes" ; then
120         CFLAGS="${CFLAGS} -g"
121 fi
122 if test "x$CFLAGS" = x; then
123   CFLAGS="-O"
124 fi
125
126 m4_include(../lib/socket_wrapper/config.m4)
127 m4_include(../lib/nss_wrapper/config.m4)
128 m4_include(../lib/uid_wrapper/config.m4)
129
130 m4_include(m4/swat.m4)
131
132 DEVELOPER_CFLAGS="-DDEBUG_PASSWORD -DDEVELOPER"
133
134 # Probe the gcc version for extra CFLAGS. We always stash these in
135 # DEVELOPER_CFLAGS, so that you can turn them on and off with a simple
136 # Makefile edit, avoiding the need to re-run configure.
137 if test x"$ac_cv_prog_gcc" = x"yes" ; then
138         DEVELOPER_CFLAGS="${DEVELOPER_CFLAGS} -g -Wall -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings"
139         # Add -Wdeclaration-after-statement if compiler supports it
140         AC_CACHE_CHECK(
141           [that the C compiler understands -Wdeclaration-after-statement],
142           samba_cv_HAVE_Wdeclaration_after_statement, [
143           AC_TRY_RUN_STRICT([
144             int main(void)
145             {
146                 return 0;
147             }],[$CFLAGS -Wdeclaration-after-statement],[$CPPFLAGS],[$LDFLAGS],
148             samba_cv_HAVE_Wdeclaration_after_statement=yes,
149             samba_cv_HAVE_Wdeclaration_after_statement=no,
150             samba_cv_HAVE_Wdeclaration_after_statement=cross)
151        ])
152
153         if test x"$samba_cv_HAVE_Wdeclaration_after_statement" = x"yes"; then
154             DEVELOPER_CFLAGS="${DEVELOPER_CFLAGS} -Wdeclaration-after-statement"
155         fi
156
157         #-Werror-implicit-function-declaration
158         AC_CACHE_CHECK(
159           [that the C compiler understands -Werror-implicit-function-declaration],
160           samba_cv_HAVE_Werror_implicit_function_declaration, [
161           AC_TRY_RUN_STRICT([
162             int main(void)
163             {
164                 return 0;
165             }],[$CFLAGS -Werror-implicit-function-declaration],[$CPPFLAGS],[$LDFLAGS],
166             samba_cv_HAVE_Werror_implicit_function_declaration=yes,
167             samba_cv_HAVE_Werror_implicit_function_declaration=no,
168             samba_cv_HAVE_Werror_implicit_function_declaration=cross)
169        ])
170        if test x"$samba_cv_HAVE_Werror_implicit_function_declaration" = x"yes"; then
171             DEVELOPER_CFLAGS="${DEVELOPER_CFLAGS} -Werror-implicit-function-declaration"
172        fi
173
174         # krb5developer is like developer, except we don't get
175         # -Wstrict-prototypes.
176        if test x"$krb5_developer" != x"$yes" ; then
177             DEVELOPER_CFLAGS="$DEVELOPER_CFLAGS -Wstrict-prototypes"
178        fi
179
180        if test x"$picky_developer" = x"yes"; then
181             DEVELOPER_CFLAGS="$DEVELOPER_CFLAGS -Werror"
182        fi
183 fi
184
185 #################################################
186 # check for a shared memory profiling support
187 AC_MSG_CHECKING(whether to use profiling)
188 AC_ARG_WITH(profiling-data,
189 [AS_HELP_STRING([--with-profiling-data], [Include gathering source code profile information (default=no)])],
190 [ case "$withval" in
191   yes)
192     AC_MSG_RESULT(yes)
193     AC_DEFINE(WITH_PROFILE,1,[Whether to use profiling])
194     samba_cv_WITH_PROFILE=yes
195     ;;
196   *)
197     AC_MSG_RESULT(no)
198     samba_cv_WITH_PROFILE=no
199     ;;
200   esac ],
201   AC_MSG_RESULT(no)
202 )
203
204 dnl Checks for programs.
205 AC_ARG_ENABLE(smbtorture4,
206         [AS_HELP_STRING([--enable-smbtorture4], [Enable building smbtorture4 (default=auto)])])
207
208 if test x$enable_smbtorture4 != xno; then
209         smbtorture4_possible=yes
210 else
211         smbtorture4_possible=no
212 fi
213
214 AC_PROG_INSTALL
215 AC_PROG_AWK
216 # Check for GNU make
217 m4_include(../m4/check_make.m4)
218 AC_SAMBA_GNU_MAKE([true], [true])
219
220 # Check for perl
221 m4_include(../m4/check_perl.m4)
222 AC_SAMBA_PERL([true], [smbtorture4_possible=no])
223
224 # Check for python
225 m4_include(../m4/check_python.m4)
226 AC_SAMBA_PYTHON_DEVEL([true], [smbtorture4_possible=no])
227
228 AC_CHECK_TOOL(AR, ar)
229
230 dnl Check if we (actually our C compiler!) use GNU ld
231 AC_PROG_LD_GNU
232
233 dnl Certain versions of GNU ld the default is not to have the
234 dnl --allow-shlib-undefined flag defined.  This causes a stackload of
235 dnl warnings when building modules.
236 if test "$ac_cv_prog_gnu_ld" = "yes"; then
237         ac_cv_gnu_ld_version=`$CC -Wl,-v /dev/null 2>&1 < /dev/null | grep "GNU ld"`
238         AC_MSG_CHECKING(GNU ld release date)
239         changequote(,)dnl
240         ac_cv_gnu_ld_date=`echo $ac_cv_gnu_ld_version | sed -n 's,^.*\([2-9][0-9][0-9][0-9]\)[-]*\([01][0-9]\)[-]*\([0-3][0-9]\).*$,\1\2\3,p'`
241         changequote([,])dnl
242         AC_MSG_RESULT(${ac_cv_gnu_ld_date})
243         if test -n "$ac_cv_gnu_ld_date"; then
244         if test "$ac_cv_gnu_ld_date" -lt 20030217; then
245                 ac_cv_gnu_ld_no_default_allow_shlib_undefined=yes
246         fi
247         if test "$ac_cv_gnu_ld_date" -gt 20030101; then
248                 ac_cv_gnu_ld_version_script=yes
249         fi
250         else
251            AC_MSG_CHECKING(GNU ld release version)
252            changequote(,)dnl
253            ac_cv_gnu_ld_vernr=`echo $ac_cv_gnu_ld_version | awk '{print $NF}' | sed -n 's,\([1-9][0-9]*\.[0-9][0-9]*\).*$,\1,p'`
254            ac_cv_gnu_ld_vernr_major=`echo $ac_cv_gnu_ld_vernr | cut -d '.' -f 1`
255            ac_cv_gnu_ld_vernr_minor=`echo $ac_cv_gnu_ld_vernr | cut -d '.' -f 2`
256            changequote([,])dnl
257            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr})
258            AC_MSG_CHECKING(GNU ld release version major)
259            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr_major})
260            AC_MSG_CHECKING(GNU ld release version minor)
261            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr_minor})
262            if test "$ac_cv_gnu_ld_vernr_major" -lt 2 || test "$ac_cv_gnu_ld_vernr_minor" -lt 14; then
263              ac_cv_gnu_ld_no_default_allow_shlib_undefined=yes
264            fi
265            if test "$ac_cv_gnu_ld_vernr_major" -gt 2 || test "$ac_cv_gnu_ld_vernr_major" = 2 && test "$ac_cv_gnu_ld_vernr_minor" -ge 12; then
266              ac_cv_gnu_ld_version_script=yes
267            fi
268         fi
269 fi
270
271 dnl Check if C compiler understands -c and -o at the same time
272 AC_PROG_CC_C_O
273 if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = no"; then
274       BROKEN_CC=
275 else
276       BROKEN_CC=#
277 fi
278 AC_SUBST(BROKEN_CC)
279
280 dnl Check if the C compiler understands -Werror (GNU)
281 AC_CACHE_CHECK([that the C compiler understands -Werror],samba_cv_HAVE_Werror, [
282  AC_TRY_RUN_STRICT([
283   int main(void)
284   {
285         return 0;
286   }],[$CFLAGS -Werror],[$CPPFLAGS],[$LDFLAGS],
287   samba_cv_HAVE_Werror=yes,samba_cv_HAVE_Werror=no,samba_cv_HAVE_Werror=cross)])
288 if test x"$samba_cv_HAVE_Werror" = x"yes"; then
289    Werror_FLAGS="-Werror"
290 else
291 dnl Check if the C compiler understands -w2
292 AC_CACHE_CHECK([that the C compiler understands -w2],samba_cv_HAVE_w2, [
293  AC_TRY_RUN_STRICT([
294   int main(void)
295   {
296         return 0;
297   }],[$CFLAGS -w2],[$CPPFLAGS],[$LDFLAGS],
298   samba_cv_HAVE_w2=yes,samba_cv_HAVE_w2=no,samba_cv_HAVE_w2=cross)])
299 if test x"$samba_cv_HAVE_w2" = x"yes"; then
300    Werror_FLAGS="-w2"
301 else
302 dnl Check if the C compiler understands -errwarn (Sun)
303 AC_CACHE_CHECK([that the C compiler understands -errwarn],samba_cv_HAVE_errwarn, [
304   AC_TRY_RUN_STRICT([
305    int main(void)
306    {
307         return 0;
308    }],[$CFLAGS -errwarn=%all],[$CPPFLAGS],[$LDFLAGS],
309    samba_cv_HAVE_errwarn=yes,samba_cv_HAVE_errwarn=no,samba_cv_HAVE_errwarn=cross)])
310 if test x"$samba_cv_HAVE_errwarn" = x"yes"; then
311    Werror_FLAGS="-errwarn=%all"
312 else
313 dnl Check if the C compiler understands -qhalt (IBM)
314 AC_CACHE_CHECK([that the C compiler understands -qhalt],samba_cv_HAVE_qhalt, [
315   AC_TRY_RUN_STRICT([
316    int main(void)
317    {
318         return 0;
319    }],[$CFLAGS -qhalt=w],[$CPPFLAGS],[$LDFLAGS],
320    samba_cv_HAVE_qhalt=yes,samba_cv_HAVE_qhalt=no,samba_cv_HAVE_qhalt=cross)])
321 if test x"$samba_cv_HAVE_qhalt" = x"yes"; then
322    Werror_FLAGS="-qhalt=w"
323 fi
324 fi
325 fi
326 fi
327
328 ############################################
329 # check if the compiler can handle negative enum values
330 # and don't truncate the values to INT_MAX
331 # a runtime test is needed here
332 AC_SUBST(PIDL_ARGS)
333 AC_CACHE_CHECK([that the C compiler understands negative enum values],samba_cv_CC_NEGATIVE_ENUM_VALUES, [
334     AC_TRY_RUN(
335 [
336         #include <stdio.h>
337         enum negative_values { NEGATIVE_VALUE = 0xFFFFFFFF };
338         int main(void) {
339                 enum negative_values v1 = NEGATIVE_VALUE;
340                 unsigned v2 = NEGATIVE_VALUE;
341
342                 if (v1 != 0xFFFFFFFF) {
343                         printf("%u != 0xFFFFFFFF\n", v1);
344                         return 1;
345                 }
346                 if (v2 != 0xFFFFFFFF) {
347                         printf("%u != 0xFFFFFFFF\n", v2);
348                         return 1;
349                 }
350
351                 return 0;
352         }
353 ],
354         samba_cv_CC_NEGATIVE_ENUM_VALUES=yes,samba_cv_CC_NEGATIVE_ENUM_VALUES=no)])
355 if test x"$samba_cv_CC_NEGATIVE_ENUM_VALUES" != x"yes"; then
356         AC_MSG_WARN([using --uint-enums for pidl])
357         PIDL_ARGS="$PIDL_ARGS --uint-enums"
358 fi
359
360 dnl Figure out the flags to support named structure initializers
361
362 LIBREPLACE_C99_STRUCT_INIT([],[AC_MSG_ERROR([c99 structure initializer are not supported])])
363
364 UNAME_S=`(uname -s) 2>/dev/null` || UNAME_S="unknown"
365 AC_MSG_CHECKING(uname -s)
366 AC_MSG_RESULT(${UNAME_S})
367
368 UNAME_R=`(uname -r) 2>/dev/null` || UNAME_R="unknown"
369 AC_MSG_CHECKING(uname -r)
370 AC_MSG_RESULT(${UNAME_R})
371
372 UNAME_M=`(uname -m) 2>/dev/null` || UNAME_M="unknown"
373 AC_MSG_CHECKING(uname -m)
374 AC_MSG_RESULT(${UNAME_M})
375
376 UNAME_P=`(uname -p) 2>/dev/null` || UNAME_P="unknown"
377 AC_MSG_CHECKING(uname -p)
378 AC_MSG_RESULT(${UNAME_P})
379
380 UNAME_I=`(uname -i) 2>/dev/null` || UNAME_I="unknown"
381 AC_MSG_CHECKING(uname -i)
382 AC_MSG_RESULT(${UNAME_I})
383
384 dnl Add #include for broken IRIX header files
385   case "$host_os" in
386         *irix6*)
387                 #TODO add to libreplace
388                 if test x"$ac_cv_prog_gcc" != x"yes" ; then
389                         dnl Fix sensible defaults for MIPSPro compilers. The
390                         dnl error numbers are valid for the 7.3 compilers,
391                         dnl hopefully also valid for the 7.4 series.
392                         dnl
393                         dnl Bugzilla 3801. Force an error on warning 1035
394                         dnl so we don't incorrectly detect stdint.h. This
395                         dnl warning is emitted for #error directives.
396                         CFLAGS="$CFLAGS -diag_error 1035"
397                         dnl 1209: Controlling expression is constant
398                         dnl 1174: Function foo declared but never referenced
399                         dnl 3201: Parameter foo was never referenced
400                         CFLAGS="$CFLAGS -woff 1209,1174,3201"
401                 fi
402         ;;
403 esac
404
405 DYNEXP=
406 AC_SUBST(DYNEXP)
407 LDSHFLAGS_Z_DEFS=
408 AC_SUBST(LDSHFLAGS_Z_DEFS)
409 LDSHFLAGS_Z_NODEFS=
410 AC_SUBST(LDSHFLAGS_Z_NODEFS)
411
412 dnl Add modules that have to be built by default here
413 dnl These have to be built static:
414 default_static_modules=""
415 default_static_modules="$default_static_modules pdb_smbpasswd"
416 default_static_modules="$default_static_modules pdb_tdbsam"
417 default_static_modules="$default_static_modules pdb_wbc_sam"
418 default_static_modules="$default_static_modules rpc_lsarpc"
419 default_static_modules="$default_static_modules rpc_samr"
420 default_static_modules="$default_static_modules rpc_winreg"
421 default_static_modules="$default_static_modules rpc_initshutdown"
422 default_static_modules="$default_static_modules rpc_dssetup"
423 default_static_modules="$default_static_modules rpc_wkssvc"
424 default_static_modules="$default_static_modules rpc_svcctl"
425 default_static_modules="$default_static_modules rpc_ntsvcs"
426 default_static_modules="$default_static_modules rpc_netlogon"
427 default_static_modules="$default_static_modules rpc_netdfs"
428 default_static_modules="$default_static_modules rpc_srvsvc"
429 default_static_modules="$default_static_modules rpc_spoolss"
430 default_static_modules="$default_static_modules rpc_eventlog"
431 default_static_modules="$default_static_modules auth_sam"
432 default_static_modules="$default_static_modules auth_unix"
433 default_static_modules="$default_static_modules auth_winbind"
434 default_static_modules="$default_static_modules auth_wbc"
435 default_static_modules="$default_static_modules auth_domain"
436 default_static_modules="$default_static_modules auth_builtin"
437 default_static_modules="$default_static_modules vfs_default"
438 default_static_modules="$default_static_modules nss_info_template"
439
440 dnl These are preferably build shared, and static if dlopen() is not available
441 default_shared_modules=""
442 default_shared_modules="$default_shared_modules vfs_recycle"
443 default_shared_modules="$default_shared_modules vfs_audit"
444 default_shared_modules="$default_shared_modules vfs_extd_audit"
445 default_shared_modules="$default_shared_modules vfs_full_audit"
446 default_shared_modules="$default_shared_modules vfs_netatalk"
447 default_shared_modules="$default_shared_modules vfs_fake_perms"
448 default_shared_modules="$default_shared_modules vfs_default_quota"
449 default_shared_modules="$default_shared_modules vfs_readonly"
450 default_shared_modules="$default_shared_modules vfs_cap"
451 default_shared_modules="$default_shared_modules vfs_expand_msdfs"
452 default_shared_modules="$default_shared_modules vfs_shadow_copy"
453 default_shared_modules="$default_shared_modules vfs_shadow_copy2"
454 default_shared_modules="$default_shared_modules auth_script"
455 default_shared_modules="$default_shared_modules vfs_readahead"
456 default_shared_modules="$default_shared_modules vfs_xattr_tdb"
457 default_shared_modules="$default_shared_modules vfs_streams_xattr"
458 default_shared_modules="$default_shared_modules vfs_streams_depot"
459 default_shared_modules="$default_shared_modules vfs_acl_xattr"
460 default_shared_modules="$default_shared_modules vfs_acl_tdb"
461 default_shared_modules="$default_shared_modules vfs_smb_traffic_analyzer"
462 default_shared_modules="$default_shared_modules vfs_preopen"
463 default_shared_modules="$default_shared_modules vfs_catia"
464 default_shared_modules="$default_shared_modules vfs_scannedonly"
465 default_shared_modules="$default_shared_modules vfs_crossrename"
466 default_shared_modules="$default_shared_modules vfs_linux_xfs_sgid"
467 default_shared_modules="$default_shared_modules vfs_time_audit"
468 default_shared_modules="$default_shared_modules idmap_autorid"
469
470 if test "x$developer" = xyes; then
471    default_shared_modules="$default_shared_modules perfcount_test"
472 fi
473
474
475 #
476 # Config CPPFLAG settings for strange OS's that must be set
477 # before other tests. Do NOT invoke AC_CHECK_HEADERS within this
478 # case statement; its first reference must be unconditional.
479 #
480 case "$host_os" in
481     *hpux*)
482 #
483 # Defines needed for HPUX support.
484 # HPUX has bigcrypt but (sometimes?) doesn't use it for
485 # password hashing - hence the USE_BOTH_CRYPT_CALLS define.
486 #
487       case `uname -r` in
488                 *9*|*10*|*11)
489                         AC_DEFINE(USE_BOTH_CRYPT_CALLS, 1, [Whether to use both of HPUX' crypt calls])
490                 ;;
491       esac
492       ;;
493
494 #
495 # CRAY Unicos has broken const handling
496        *unicos*)
497           AC_MSG_RESULT([disabling const])
498           CPPFLAGS="$CPPFLAGS -Dconst="
499           ;;
500         
501 #
502 # AIX4.x doesn't even admit to having large
503 # files *at all* unless the -D_LARGE_FILE or -D_LARGE_FILE_API flags are set.
504 #
505     *aix4*)
506           AC_MSG_RESULT([enabling large file support])
507           CPPFLAGS="$CPPFLAGS -D_LARGE_FILES"
508           AC_DEFINE(_LARGE_FILES, 1, [Whether to enable large file support])
509       ;;
510 #
511 # Defines needed for Solaris 2.6/2.7 aka 7.0 to make it admit
512 # to the existance of large files..
513 #
514 # Solaris uses SYSV printing.  Make sure to set that here.  --jerry
515 #
516         *solaris*)
517                 AC_DEFINE(SYSV, 1, [Whether to enable System V compatibility])
518                 LDFLAGS="$LDFLAGS -lthread"
519                 CPPFLAGS="$CPPFLAGS -D_REENTRANT"
520                 ;;
521 #
522 # IRIX uses SYSV printing.  Make sure to set that here
523 #
524         *irix*)
525                 AC_DEFINE(SYSV, 1, [Whether to enable System V compatibility])
526                 ;;
527         *freebsd*|*dragonfly*)
528                 AC_DEFINE(FREEBSD, 1, [Whether the host os is FreeBSD])
529                 ;;
530 #
531 # VOS may need to have POSIX support and System V compatibility enabled.
532 #
533     *vos*)
534     case "$CPPFLAGS" in
535           *-D_POSIX_C_SOURCE*)
536                 ;;
537           *)
538                 CPPFLAGS="$CPPFLAGS -D_POSIX_C_SOURCE=200112L"
539                 AC_DEFINE(_POSIX_C_SOURCE, 200112L, [Whether to enable POSIX support])
540                 ;;
541     esac
542     case "$CPPFLAGS" in
543           *-D_SYSV*|*-D_SVID_SOURCE*)
544                 ;;
545           *)
546                 CPPFLAGS="$CPPFLAGS -D_SYSV"
547                 AC_DEFINE(_SYSV, 1, [Whether to enable System V compatibility])
548     esac
549     ;;
550 # GNU systems
551 #
552     *linux* | *hurd* | gnu* | k*bsd*-gnu | kopensolaris*-gnu)
553         CPPFLAGS="-D_GNU_SOURCE $CPPFLAGS"
554         AC_DEFINE(_GNU_SOURCE, 1, [Whether to use GNU libc extensions])
555         ;;
556
557 #
558 # MacOS X is the *only* system that uses compose character in utf8. This
559 # is so horribly broken....
560 #
561     *darwin*)
562         AC_DEFINE(BROKEN_UNICODE_COMPOSE_CHARACTERS, 1, [Does this system use unicode compose characters])
563
564 # Add a system specific charset module.
565         default_shared_modules="$default_shared_modules"
566
567         ;;
568     *qnx*)
569         ;;
570
571 esac
572
573 SAVE_CPPFLAGS="${CPPFLAGS}"
574 CPPFLAGS="${CPPFLAGS} ${SAMBA_CONFIGURE_CPPFLAGS}"
575
576 AC_LIBREPLACE_BROKEN_CHECKS
577 AC_CHECK_FUNCS([syslog],[],[AC_MSG_ERROR([Required function not found])])
578 AC_LIBREPLACE_NETWORK_CHECKS
579
580 CPPFLAGS="${SAVE_CPPFLAGS}"
581
582 LIBREPLACE_DIR=`echo ${libreplacedir} | sed -e "s;${srcdir};;" -e "s;^/;;"`
583
584 LIBREPLACE_OBJS="${LIBREPLACEOBJ}"
585 AC_SUBST(LIBREPLACE_OBJS)
586
587 LIBREPLACE_LIBS="${LIBREPLACE_NETWORK_LIBS} ${LIBREPLACE_FILESYS_LIBS}"
588 AC_SUBST(LIBREPLACE_LIBS)
589
590
591 # add -ldl to the global LIBS
592 LIBS="${LIBS} ${LIBDL} ${LIBREPLACE_NETWORK_LIBS}"
593 AUTH_LIBS="${AUTH_LIBS} ${CRYPT_LIBS}"
594
595
596 AC_CHECK_HEADERS(aio.h sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd.h rpc/nettype.h)
597 AC_CHECK_HEADERS(unistd.h grp.h sys/id.h memory.h alloca.h)
598 AC_CHECK_HEADERS(limits.h float.h libintl.h)
599 AC_CHECK_HEADERS(rpc/rpc.h rpcsvc/nis.h rpcsvc/ypclnt.h)
600 AC_CHECK_HEADERS(sys/param.h ctype.h sys/wait.h sys/resource.h sys/ioctl.h sys/ipc.h sys/prctl.h sys/sysctl.h)
601 AC_CHECK_HEADERS(sys/mman.h sys/filio.h sys/priv.h sys/shm.h string.h strings.h stdlib.h)
602 AC_CHECK_HEADERS(sys/mount.h sys/vfs.h sys/fs/s5param.h sys/filsys.h termios.h termio.h)
603 AC_CHECK_HEADERS(sys/termio.h sys/statfs.h sys/dustat.h sys/statvfs.h stdarg.h)
604 AC_CHECK_HEADERS(sys/sysmacros.h)
605 AC_CHECK_HEADERS(sys/syslog.h syslog.h)
606 AC_CHECK_HEADERS(langinfo.h locale.h)
607 AC_CHECK_HEADERS(xfs/libxfs.h)
608 AC_CHECK_HEADERS(netgroup.h)
609 AC_CHECK_HEADERS(linux/falloc.h)
610 AC_CHECK_HEADERS(CommonCrypto/CommonDigest.h)
611
612 AC_CHECK_HEADERS(rpcsvc/yp_prot.h,,,[[
613 #if HAVE_RPC_RPC_H
614 #include <rpc/rpc.h>
615 #endif
616 ]])
617 CRYPTO_MD5_OBJ=
618 if test "x$ac_cv_header_CommonCrypto_CommonDigest_h" != "xyes"
619 then
620         CRYPTO_MD5_OBJ="../lib/crypto/md5.o"
621 fi
622 AC_SUBST(CRYPTO_MD5_OBJ)
623
624 ## These fail to compile on IRIX so just check for their presence
625 AC_CHECK_HEADERS(sys/mode.h,,,)
626
627 # Look for Darwin headers
628 old_CPPFLAGS="$CPPFLAGS"
629 CPPFLAGS="-Iinclude $CPPFLAGS"
630 AC_CHECK_HEADERS([CoreFoundation/CFStringEncodingConverter.h], [], [AC_CHECK_HEADERS([CFStringEncodingConverter.h])])
631 CPPFLAGS="$old_CPPFLAGS"
632
633 # To link lib/util/charset/charset_macosxfs.c, we need to tell the linker
634 # about CoreFoundation, at least on os X 10.6 and 10.7
635 case "$host_os" in
636     *darwin11*|*darwin10*)
637                 LDFLAGS="$LDFLAGS -framework CoreFoundation"
638         ;;
639 esac
640
641 # In valgrind 1.0.x, it's just valgrind.h.  In 1.9.x+ there's a
642 # subdirectory of headers.
643 AC_CHECK_HEADERS(valgrind.h valgrind/valgrind.h valgrind/memcheck.h)
644
645 if test x"$enable_developer" = x"yes" ; then
646    if test x"$ac_cv_header_valgrind_h" = xyes -o \
647            x"$ac_cv_header_valgrind_valgrind_h" = xyes ; then
648       AC_DEFINE(VALGRIND,1,[Whether we have valgrind headers])
649    fi
650 fi
651
652 #
653 # HPUX has a bug in that including shadow.h causes a re-definition of MAXINT.
654 # This causes configure to fail to detect it. Check for shadow separately on HPUX.
655 #
656 case "$host_os" in
657     *hpux*)
658                 AC_TRY_COMPILE([#include <shadow.h>],[struct spwd testme],
659                         ac_cv_header_shadow_h=yes,ac_cv_header_shadow_h=no)
660                 if test x"$ac_cv_header_shadow_h" = x"yes"; then
661                    AC_DEFINE(HAVE_SHADOW_H,1,[Whether we have shadow.h])
662                 fi
663         ;;
664 esac
665 AC_CHECK_HEADERS(shadow.h)
666 AC_CHECK_HEADERS(nss.h nss_common.h nsswitch.h ns_api.h sys/security.h)
667 AC_CHECK_HEADERS(syscall.h sys/syscall.h)
668
669 AC_CHECK_HEADERS(sys/cdefs.h glob.h)
670
671 # For experimental utmp support (lastlog on some BSD-like systems)
672 AC_CHECK_HEADERS(utmp.h utmpx.h lastlog.h)
673
674 AC_CHECK_SIZEOF(int,cross)
675 AC_CHECK_SIZEOF(long,cross)
676 AC_CHECK_SIZEOF(long long,cross)
677 AC_CHECK_SIZEOF(short,cross)
678
679 AC_C_CONST
680 AC_C_INLINE
681 AC_C_BIGENDIAN
682 AC_C_CHAR_UNSIGNED
683
684 AC_TYPE_SIGNAL
685 AC_TYPE_UID_T
686 AC_TYPE_MODE_T
687 AC_TYPE_OFF_T
688 AC_TYPE_SIZE_T
689 AC_TYPE_PID_T
690 AC_STRUCT_ST_RDEV
691 AC_DIRENT_D_OFF
692 AC_CHECK_TYPE(ssize_t, int)
693 AC_CHECK_TYPE(wchar_t, unsigned short)
694
695 ############################################
696 # for cups support we need libcups, and a handful of header files
697
698 AC_ARG_ENABLE(cups,
699 [AS_HELP_STRING([--enable-cups], [Turn on CUPS support (default=auto)])])
700
701 if test x$enable_cups != xno; then
702         AC_PATH_PROG(CUPS_CONFIG, cups-config)
703
704         if test "x$CUPS_CONFIG" != x; then
705
706                 ac_save_LDFLAGS=$LDFLAGS
707                 ac_save_PRINT_LIBS=$PRINT_LIBS
708                 AC_CHECK_HEADERS(cups/cups.h cups/language.h)
709
710                 if test x"$ac_cv_header_cups_cups_h" = xyes -a \
711                         x"$ac_cv_header_cups_language_h" = xyes; then
712                         # try linking with -lcups alone first. That should work unless libcups is
713                         # underlinked. With cups-config --libs we pull in unwanted and unneeded
714                         # dendencies including thread libraries - use cups-config only if really
715                         # required. 
716                         AC_CHECK_LIB_EXT(cups, ac_save_PRINT_LIBS , httpConnect,
717                                 [PRINT_LIBS="$ac_save_PRINT_LIBS -lcups"],
718                                 [AC_MSG_WARN([your cups library doesn't link with -lcups alone, it might be underlinked.]) ;
719                                  PRINT_LIBS="$ac_save_PRINT_LIBS `$CUPS_CONFIG --libs`"])
720
721                         AC_DEFINE(HAVE_CUPS,1,[Whether we have CUPS])
722                         samba_cv_HAVE_CUPS=yes
723                         AC_CHECK_LIB_EXT(cups, PRINT_LIBS, httpConnectEncrypt)
724                 else
725                         AC_MSG_WARN([cups-config around but cups-devel not installed])
726                         CFLAGS=$ac_save_CFLAGS
727                         LDFLAGS=$ac_save_LDFLAGS
728                         PRINT_LIBS=$ac_save_PRINT_LIBS
729                 fi
730
731         elif test x"$enable_cups" = x"yes"; then
732                 AC_MSG_ERROR(Cups support required but cups-config not located.  Make sure cups-devel related files are installed.)
733         fi
734 fi
735
736 AC_ARG_ENABLE(iprint,
737 [AS_HELP_STRING([--enable-iprint], [Turn on iPrint support (default=yes if cups is yes)])])
738
739 if test x$enable_iprint != xno; then
740         if test x"$samba_cv_HAVE_CUPS" = xyes; then
741                 AC_DEFINE(HAVE_IPRINT,1,[Whether we have iPrint])
742         elif test x"$enable_iprint" = x"yes"; then
743                 AC_MSG_ERROR(iPrint support required but cups not enabled.  Make sure cups-devel related files are installed and that cups is enabled.)
744         fi
745 fi
746
747 ############################################
748 # check if the compiler will optimize out function calls
749 AC_CACHE_CHECK([if the compiler will optimize out function calls],samba_cv_optimize_out_funcation_calls, [
750     AC_TRY_LINK([
751 #include <stdio.h>],
752 [
753                 if (0) {
754                    this_function_does_not_exist();
755                 } else {
756                   return 1;
757                 }
758
759 ],
760         samba_cv_optimize_out_funcation_calls=yes,samba_cv_optimize_out_funcation_calls=no)])
761 if test x"$samba_cv_optimize_out_funcation_calls" = x"yes"; then
762    AC_DEFINE(HAVE_COMPILER_WILL_OPTIMIZE_OUT_FNS,1,[Whether the compiler will optimize out function calls])
763 fi
764
765 #############################################
766 # check for fd passing struct via msg_control
767 AC_CACHE_CHECK([for fd passing via msg_control],samba_cv_msghdr_msg_control, [
768     AC_TRY_COMPILE([
769 #include <sys/types.h>
770 #include <stdlib.h>
771 #include <stddef.h>
772 #include <sys/socket.h>
773 #include <sys/un.h>],
774 [
775         struct msghdr msg;
776         union {
777               struct cmsghdr cm;
778               char control[CMSG_SPACE(sizeof(int))];
779         } control_un;
780         msg.msg_control = control_un.control;
781         msg.msg_controllen = sizeof(control_un.control);
782 ],
783         samba_cv_msghdr_msg_control=yes,samba_cv_msghdr_msg_control=no)])
784 if test x"$samba_cv_msghdr_msg_control" = x"yes"; then
785    AC_DEFINE(HAVE_MSGHDR_MSG_CONTROL,1,
786              [If we can use msg_control for passing file descriptors])
787 fi
788
789 #############################################
790 # check for fd passing struct via msg_acctrights
791 AC_CACHE_CHECK([for fd passing via msg_acctrights],
792                 samba_cv_msghdr_msg_acctrights, [
793     AC_TRY_COMPILE([
794 #include <sys/types.h>
795 #include <stdlib.h>
796 #include <stddef.h>
797 #include <sys/socket.h>
798 #include <sys/un.h>],
799 [
800         struct msghdr msg;
801         int fd;
802         msg.msg_acctrights = (caddr_t) &fd;
803         msg.msg_acctrightslen = sizeof(fd);
804 ],
805         samba_cv_msghdr_msg_acctrights=yes,samba_cv_msghdr_msg_acctrights=no)])
806 if test x"$samba_cv_msghdr_msg_acctrights" = x"yes"; then
807    AC_DEFINE(HAVE_MSGHDR_MSG_ACCTRIGHTS,1,
808              [If we can use msg_acctrights for passing file descriptors])
809 fi
810
811 AC_CHECK_FUNCS(dirfd)
812 if test x"$ac_cv_func_dirfd" = x"yes"; then
813         default_shared_modules="$default_shared_modules vfs_syncops vfs_dirsort"
814 fi
815
816 AC_CACHE_CHECK([for struct sigevent type],samba_cv_struct_sigevent, [
817     AC_TRY_COMPILE([
818 #include <sys/types.h>
819 #if STDC_HEADERS
820 #include <stdlib.h>
821 #include <stddef.h>
822 #endif
823 #include <signal.h>],[struct sigevent s;],
824         samba_cv_struct_sigevent=yes,samba_cv_struct_sigevent=no)])
825 if test x"$samba_cv_struct_sigevent" = x"yes"; then
826    AC_DEFINE(HAVE_STRUCT_SIGEVENT,1,[Whether we have the struct sigevent])
827    AC_CHECK_MEMBERS([struct sigevent.sigev_value.sival_ptr,struct sigevent.sigev_value.sigval_ptr], , ,
828         [#include <signal.h>])
829 fi
830
831 # and glibc has setresuid under linux but the function does
832 # nothing until kernel 2.1.44! very dumb.
833 AC_CACHE_CHECK([for real setresuid],samba_cv_have_setresuid,[
834     AC_TRY_RUN([#include <errno.h>
835 main() { setresuid(1,1,1); setresuid(2,2,2); exit(errno==EPERM?0:1);}],
836         samba_cv_have_setresuid=yes,samba_cv_have_setresuid=no,samba_cv_have_setresuid=cross)])
837 if test x"$samba_cv_have_setresuid" = x"yes"; then
838     AC_DEFINE(HAVE_SETRESUID,1,[Whether the system has setresuid])
839 fi
840
841 # Do the same check for setresguid...
842 #
843 AC_CACHE_CHECK([for real setresgid],samba_cv_have_setresgid,[
844     AC_TRY_RUN([#include <unistd.h>
845 #include <errno.h>
846 main() { errno = 0; setresgid(1,1,1); exit(errno != 0 ? (errno==EPERM ? 0 : 1) : 0);}],
847         samba_cv_have_setresgid=yes,samba_cv_have_setresgid=no,samba_cv_have_setresgid=cross)])
848 if test x"$samba_cv_have_setresgid" = x"yes"; then
849     AC_DEFINE(HAVE_SETRESGID,1,[Whether the system has setresgid])
850 fi
851
852 AC_FUNC_MEMCMP
853
854 ###############################################
855 # Readline included by default unless explicitly asked not to
856 test "${with_readline+set}" != "set" && with_readline=yes
857
858 # test for where we get readline() from
859 AC_MSG_CHECKING(whether to use readline)
860 AC_ARG_WITH(readline,
861 [AS_HELP_STRING([--with-readline[=DIR]], [Look for readline include/libs in DIR (default=auto)])],
862 [  case "$with_readline" in
863   yes)
864     AC_MSG_RESULT(yes)
865
866     AC_CHECK_HEADERS(readline.h history.h readline/readline.h)
867     AC_CHECK_HEADERS(readline/history.h)
868
869     AC_CHECK_HEADERS(readline.h readline/readline.h,[
870       for termlib in ncurses curses termcap terminfo termlib tinfo; do
871        AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break])
872       done
873       AC_CHECK_LIB(readline, rl_callback_handler_install,
874        [TERMLIBS="-lreadline $TERMLIBS"
875        AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline])
876        break], [TERMLIBS=], $TERMLIBS)])
877     ;;
878   no)
879     AC_MSG_RESULT(no)
880     ;;
881   *)
882     AC_MSG_RESULT(yes)
883
884     # Needed for AC_CHECK_HEADERS and AC_CHECK_LIB to look at
885     # alternate readline path
886     _ldflags=${LDFLAGS}
887     _cppflags=${CPPFLAGS}
888
889     # Add additional search path
890     LDFLAGS="-L$with_readline/lib $LDFLAGS"
891     CPPFLAGS="-I$with_readline/include $CPPFLAGS"
892
893     AC_CHECK_HEADERS(readline.h history.h readline/readline.h)
894     AC_CHECK_HEADERS(readline/history.h)
895
896     AC_CHECK_HEADERS(readline.h readline/readline.h,[
897       for termlib in ncurses curses termcap terminfo termlib; do
898        AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break])
899       done
900       AC_CHECK_LIB(readline, rl_callback_handler_install,
901        [TERMLDFLAGS="-L$with_readline/lib"
902        TERMCPPFLAGS="-I$with_readline/include"
903        CPPFLAGS="-I$with_readline/include $CPPFLAGS"
904        TERMLIBS="-lreadline $TERMLIBS"
905        AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline])
906        break], [TERMLIBS= CPPFLAGS=$_cppflags], $TERMLIBS)])
907
908     LDFLAGS=$_ldflags
909     ;;
910   esac],
911   AC_MSG_RESULT(no)
912 )
913 AC_SUBST(TERMLIBS)
914 AC_SUBST(TERMLDFLAGS)
915
916 # The readline API changed slightly from readline3 to readline4, so
917 # code will generate warnings on one of them unless we have a few
918 # special cases.
919 AC_CHECK_LIB(readline, rl_completion_matches,
920              [AC_DEFINE(HAVE_NEW_LIBREADLINE, 1,
921                         [Do we have rl_completion_matches?])],
922              [],
923              [$TERMLIBS])
924
925 # not all readline libs have rl_event_hook or history_list
926 AC_CHECK_DECLS(rl_event_hook, [], [], [#include <readline/readline.h>])
927 AC_CHECK_LIB(readline, history_list,
928              [AC_DEFINE(HAVE_HISTORY_LIST, 1, [Do we have history_list?])],
929              [],
930              [$TERMLIBS])
931
932 ###############################################
933 # test for where we get yp_get_default_domain() from
934 AC_SEARCH_LIBS(yp_get_default_domain, [nsl])
935 AC_CHECK_FUNCS(yp_get_default_domain)
936
937 # Check if we have execl, if not we need to compile smbrun.
938 AC_CHECK_FUNCS(execl)
939 if test x"$ac_cv_func_execl" = x"no"; then
940     EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/smbrun"
941 fi
942
943 AC_CHECK_FUNCS(getcwd fchown chmod fchmod mknod mknod64)
944 AC_CHECK_FUNCS(strtol)
945 AC_CHECK_FUNCS(strchr chflags)
946 AC_CHECK_FUNCS(getrlimit fsync setpgid)
947 AC_CHECK_FUNCS(fdatasync,,[AC_CHECK_LIB_EXT(rt, LIBS, fdatasync)])
948 AC_CHECK_FUNCS(setsid glob strpbrk crypt16 getauthuid)
949 AC_CHECK_FUNCS(sigprocmask sigblock sigaction sigset innetgr setnetgrent getnetgrent endnetgrent)
950 AC_CHECK_FUNCS(initgroups select rdchk getgrnam getgrent pathconf)
951 AC_CHECK_FUNCS(getgrset)
952 AC_CHECK_FUNCS(setpriv setgidx setuidx setgroups sysconf)
953 AC_CHECK_FUNCS(atexit grantpt posix_fallocate)
954 AC_CHECK_FUNCS(fallocate)
955 AC_CHECK_FUNCS(fseeko setluid getpwanam)
956 AC_CHECK_FUNCS(fdopendir)
957 AC_CHECK_FUNCS(getpwent_r)
958 AC_CHECK_FUNCS(setenv strcasecmp fcvt fcvtl)
959 AC_CHECK_FUNCS(syslog vsyslog timegm)
960 AC_CHECK_FUNCS(setlocale)
961 AC_CHECK_FUNCS(nanosleep,,[AC_CHECK_LIB_EXT(rt, LIBS, nanosleep)])
962 AC_CHECK_FUNCS(lutimes futimes utimensat futimens)
963 AC_CHECK_FUNCS(mlock munlock mlockall munlockall)
964 AC_CHECK_FUNCS(memalign posix_memalign hstrerror)
965 AC_CHECK_HEADERS(sys/mman.h)
966 # setbuffer, shmget, shm_open are needed for smbtorture
967 AC_CHECK_FUNCS(shmget shm_open)
968 AC_CHECK_FUNCS(gettext dgettext)
969 AC_CHECK_FUNCS(bindtextdomain textdomain bind_textdomain_codeset)
970 AC_CHECK_FUNCS(strupr)
971
972 # Find a method of generating a stack trace
973 AC_CHECK_HEADERS(execinfo.h libexc.h libunwind.h)
974 # libexecinfo provides backtrace_symbols on FreeBSD
975 AC_SEARCH_LIBS(backtrace_symbols, [execinfo])
976 AC_CHECK_FUNCS(backtrace_symbols)
977 AC_CHECK_LIB(exc, trace_back_stack)
978
979 # check for sysctlbyname and sysctl for BSD systems
980 AC_CHECK_FUNCS(sysctlbyname)
981 AC_CHECK_FUNCS(sysctl)
982
983 #################################################
984 # Check to see if core dump directory is defined in linux
985 # with /proc/sys/kernel/core_pattern
986
987 AC_CHECK_FILE([/proc/sys/kernel/core_pattern],
988         AC_DEFINE(HAVE_SYS_KERNEL_PROC_CORE_PATTERN, 1,
989         [Whether Linux kernel uses core_pattern for core files]),
990          [])
991
992 #############################
993 # check if building with gpfs
994 AC_CHECK_HEADERS(gpfs_gpl.h)
995 if test x"$ac_cv_header_gpfs_gpl_h" = x"yes"; then
996     AC_DEFINE(HAVE_GPFS,1,[Whether GPFS GPL headers are available])
997     default_shared_modules="$default_shared_modules vfs_gpfs"
998     default_shared_modules="$default_shared_modules vfs_gpfs_hsm_notify"
999 fi
1000
1001 # Note that all the libunwind symbols in the API are defined to internal
1002 # platform-specific version, so we must include libunwind.h before checking
1003 # any of them.
1004 AC_MSG_CHECKING([for libunwind])
1005 save_LIBS=$LIBS
1006
1007 UNWIND_ARCH="unknown"
1008 if test x"$UNAME_I" != x"unknown"; then
1009         UNWIND_ARCH="$UNAME_I"
1010 elif test x"$UNAME_M" != x"unknown"; then
1011         UNWIND_ARCH="$UNAME_M"
1012 elif test x"$UNAME_P" != x"unknown"; then
1013         UNWIND_ARCH="$UNAME_P"
1014 fi
1015
1016 case "$UNWIND_ARCH" in
1017         unknown)
1018                 # This probably won't link without
1019                 # the platform-specific libunwind.
1020                 LIBS="$LIBS -lunwind"
1021                 ;;
1022         i386|i586|i686)
1023                 # Add the platform-specific libunwind module.
1024                 LIBS="$LIBS -lunwind -lunwind-x86"
1025                 ;;
1026         *)
1027                 # Add the platform-specific libunwind module.
1028                 # based on uname -i, uname -m or uname -p
1029                 LIBS="$LIBS -lunwind -lunwind-$UNWIND_ARCH"
1030                 ;;
1031 esac
1032
1033 AC_TRY_LINK(
1034     [
1035 #ifdef HAVE_LIBUNWIND_H
1036 #include <libunwind.h>
1037 #endif
1038     ],
1039     [
1040         unw_context_t ctx; unw_cursor_t cur;
1041         char buf[256]; unw_word_t off;
1042         unw_getcontext(&ctx); unw_init_local(&cur, &ctx);
1043         unw_get_proc_name(&cur, buf, sizeof(buf), &off);
1044     ],
1045     [
1046         AC_MSG_RESULT(yes)
1047         AC_DEFINE(HAVE_LIBUNWIND, 1, [Whether libunwind is available])
1048
1049         # If we have libunwind, test whether we also have libunwind-ptrace
1050         # which would let us unwind arbitrary processes.
1051         save_LIBS=$LIBS
1052         AC_CHECK_HEADERS(libunwind-ptrace.h)
1053         AC_CHECK_LIB(unwind-ptrace, _UPT_create,
1054             [
1055                 LIBUNWIND_PTRACE="-lunwind-ptrace";
1056                 AC_DEFINE(HAVE_LIBUNWIND_PTRACE, 1,
1057                     [Whether libunwind-ptrace.a is available.])
1058             ],
1059             [ LIBUNWIND_PTRACE="" ])
1060
1061         LIBS=$save_LIBS
1062     ],
1063     [
1064         AC_MSG_RESULT(no)
1065         LIBS=$save_LIBS
1066     ])
1067
1068 # To use libunwind-ptrace, we also need to make some ptrace system calls.
1069 if test x"$LIBUNWIND_PTRACE" != x"" ; then
1070     AC_CHECK_HEADERS(sys/ptrace.h)
1071     AC_MSG_CHECKING([for the Linux ptrace(2) interface])
1072     AC_TRY_LINK(
1073             [
1074 #if HAVE_SYS_TYPES_H
1075 #include <sys/types.h>
1076 #endif
1077 #if HAVE_SYS_PTRACE_H
1078 #include <sys/ptrace.h>
1079 #endif
1080             ],
1081             [
1082                 pid_t me = (pid_t)-1;
1083                 ptrace(PTRACE_ATTACH, me, 0, 0);
1084                 ptrace(PTRACE_DETACH, me, 0, 0);
1085                 return 0;
1086             ],
1087             [
1088                 AC_MSG_RESULT(yes)
1089                 AC_DEFINE(HAVE_LINUX_PTRACE, 1,
1090                     [Whether the Linux ptrace(2) interface is available.])
1091             ],
1092             [
1093                 AC_MSG_RESULT(no)
1094                 LIBUNWIND_PTRACE=""
1095             ])
1096 fi
1097
1098 AC_SUBST(LIBUNWIND_PTRACE)
1099
1100 AC_CHECK_FUNCS(_dup _dup2 _opendir _readdir _seekdir _telldir _closedir)
1101 AC_CHECK_FUNCS(__dup __dup2 __opendir __readdir __seekdir __telldir __closedir)
1102 AC_CHECK_FUNCS(__getcwd _getcwd)
1103 AC_CHECK_FUNCS(__xstat __fxstat __lxstat)
1104 AC_CHECK_FUNCS(_stat _lstat _fstat __stat __lstat __fstat)
1105 AC_CHECK_FUNCS(_acl __acl _facl __facl _open __open _chdir __chdir)
1106 AC_CHECK_FUNCS(_close __close _fchdir __fchdir _fcntl __fcntl)
1107 AC_CHECK_FUNCS(getdents __getdents _lseek __lseek _read __read)
1108 AC_CHECK_FUNCS(getdirentries _write __write _fork __fork)
1109 AC_CHECK_FUNCS(__sys_llseek llseek _llseek __llseek)
1110 AC_CHECK_FUNCS(pread _pread __pread)
1111 AC_CHECK_FUNCS(pwrite _pwrite __pwrite)
1112 AC_CHECK_FUNCS(prctl)
1113
1114 AC_TRY_COMPILE([
1115 #ifdef HAVE_SYS_PRCTL_H
1116 #include <sys/prctl.h>
1117 #endif
1118 ],
1119 [int i; i = prtcl(0); ],
1120 AC_DEFINE(HAVE_PRCTL, 1, [Whether prctl is available]),[])
1121
1122 #
1123 #
1124 #
1125 case "$host_os" in
1126     *linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu)
1127        # glibc <= 2.3.2 has a broken getgrouplist
1128        AC_CACHE_CHECK([for good getgrouplist],samba_cv_linux_getgrouplist_ok,[AC_TRY_RUN([
1129 #include <unistd.h>
1130 #include <sys/utsname.h>
1131 main() {
1132        /* glibc up to 2.3 has a broken getgrouplist */
1133 #if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
1134        int libc_major = __GLIBC__;
1135        int libc_minor = __GLIBC_MINOR__;
1136
1137        if (libc_major < 2)
1138               exit(1);
1139        if ((libc_major == 2) && (libc_minor <= 3))
1140               exit(1);
1141 #endif
1142        exit(0);
1143 }
1144 ], [samba_cv_linux_getgrouplist_ok=yes],
1145    [samba_cv_linux_getgrouplist_ok=no],
1146    [samba_cv_linux_getgrouplist_ok=cross])])
1147        if test x"$samba_cv_linux_getgrouplist_ok" = x"yes"; then
1148           AC_DEFINE(HAVE_GETGROUPLIST, 1, [Have good getgrouplist])
1149        fi
1150        ;;
1151     *)
1152        AC_CHECK_FUNCS(getgrouplist)
1153        ;;
1154 esac
1155
1156 #################################################
1157 # Check whether struct stat has timestamps with sub-second resolution.
1158 #
1159
1160 samba_cv_stat_hires=no
1161 AC_CHECK_MEMBERS([struct stat.st_mtim.tv_nsec], # Linux, Solaris
1162         [samba_cv_stat_hires=yes])
1163 AC_CHECK_MEMBERS([struct stat.st_mtimensec], # BSD, if defined _POSIX_SOURCE
1164         [samba_cv_stat_hires=yes])
1165 AC_CHECK_MEMBERS([struct stat.st_mtimespec.tv_nsec], # BSD, if not defined _POSIX_SOURCE
1166         [samba_cv_stat_hires=yes])
1167 AC_CHECK_MEMBERS([struct stat.st_mtime_n], # AIX
1168         [samba_cv_stat_hires=yes])
1169 AC_CHECK_MEMBERS([struct stat.st_umtime], # Tru64
1170         [samba_cv_stat_hires=yes])
1171
1172 if test x"$samba_cv_stat_hires" = x"yes" ; then
1173     AC_DEFINE(HAVE_STAT_HIRES_TIMESTAMPS, 1,
1174             [whether struct stat has sub-second timestamps])
1175 fi
1176
1177 # recent FreeBSD, NetBSD have creation timestamps called birthtime:
1178 AC_CHECK_MEMBERS([struct stat.st_birthtimespec.tv_nsec])
1179 AC_CHECK_MEMBERS([struct stat.st_birthtime], AC_CHECK_MEMBERS([struct stat.st_birthtimensec]))
1180
1181
1182 AC_CACHE_CHECK([whether there is DOS flags support in the stat struct], samba_cv_stat_dos_flags,
1183     [
1184         AC_TRY_COMPILE(
1185             [#include <sys/stat.h>],
1186             [
1187                 int a = UF_DOS_ARCHIVE;
1188                 int h = UF_DOS_HIDDEN;
1189                 int r = UF_DOS_RO;
1190                 int s = UF_DOS_SYSTEM;
1191                 int i = UF_DOS_NOINDEX;
1192                 int f = UF_DOS_FLAGS;
1193             ],
1194             samba_cv_stat_dos_flags=yes, samba_cv_stat_dos_flags=no)
1195     ])
1196
1197 if test x"$samba_cv_stat_dos_flags" = x"yes" ; then
1198     AC_DEFINE(HAVE_STAT_DOS_FLAGS, 1, [whether there is DOS flags support in the stat struct])
1199 fi
1200
1201 AC_CACHE_CHECK([whether we can compile with __attribute__((destructor))],
1202                samba_cv_function_attribute_destructor,
1203                [
1204                  AC_COMPILE_IFELSE([AC_LANG_SOURCE(
1205                         [
1206                                 __attribute__((destructor))
1207                                 static void cleanup(void) { }
1208                         ])],
1209                         samba_cv_function_attribute_destructor=yes)
1210                 ])
1211
1212 if test x"$samba_cv_function_attribute_destructor" = xyes ; then
1213    AC_DEFINE(HAVE_FUNCTION_ATTRIBUTE_DESTRUCTOR, 1,
1214              [whether we can compile with __attribute__((destructor))])
1215 fi
1216
1217 #####################################
1218 # needed for SRV lookups
1219 AC_CHECK_LIB(resolv, dn_expand)
1220 AC_CHECK_LIB(resolv, _dn_expand)
1221 AC_CHECK_LIB(resolv, __dn_expand)
1222
1223 #
1224 # Check for the functions putprpwnam, set_auth_parameters,
1225 # getspnam, bigcrypt and getprpwnam in -lsec and -lsecurity
1226 # Needed for OSF1 and HPUX.
1227 #
1228
1229 AC_LIBTESTFUNC(security, putprpwnam)
1230 AC_LIBTESTFUNC(sec, putprpwnam)
1231
1232 AC_LIBTESTFUNC(security, set_auth_parameters)
1233 AC_LIBTESTFUNC(sec, set_auth_parameters)
1234
1235 # UnixWare 7.x has its getspnam in -lgen
1236 AC_LIBTESTFUNC(gen, getspnam)
1237
1238 AC_LIBTESTFUNC(security, getspnam)
1239 AC_LIBTESTFUNC(sec, getspnam)
1240
1241 AC_LIBTESTFUNC(security, bigcrypt)
1242 AC_LIBTESTFUNC(sec, bigcrypt)
1243
1244 AC_LIBTESTFUNC(security, getprpwnam)
1245 AC_LIBTESTFUNC(sec, getprpwnam)
1246
1247 AC_CHECK_FUNCS(strsignal)
1248
1249 AC_DISABLE_STATIC
1250 AC_ENABLE_SHARED
1251
1252 # Set defaults
1253 PIE_CFLAGS=""
1254 PIE_LDFLAGS=""
1255 AC_ARG_ENABLE(pie, [AS_HELP_STRING([--enable-pie], [Turn on pie support if available (default=yes)])])
1256
1257 if test "x$enable_pie" != xno
1258 then
1259         AC_CACHE_CHECK(for -pie and -fPIE, samba_cv_fpie,
1260         [
1261                 cat > conftest.c <<EOF
1262 int foo;
1263 int main () { return 0;}
1264 EOF
1265                 if AC_TRY_COMMAND_NO_STDERR([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -pie -fPIE -o conftest conftest.c])
1266                 then
1267                         samba_cv_fpie=yes
1268                 else
1269                         samba_cv_fpie=no
1270                 fi
1271                 rm -f conftest*
1272         ])
1273         if test x"${samba_cv_fpie}" = x"yes"
1274         then
1275                 PIE_CFLAGS="-fPIE"
1276                 PIE_LDFLAGS="-pie"
1277         fi
1278 fi
1279
1280 # Set defaults
1281 RELRO_LDFLAGS=""
1282 AC_ARG_ENABLE(relro, [AS_HELP_STRING([--enable-relro], [Turn on Relocations Read-Only (relro) support if available (default=yes)])])
1283
1284 if test "x$enable_relro" != xno
1285 then
1286         AC_CACHE_CHECK([for -Wl,-z,relro], samba_cv_relro,
1287         [
1288                 cat > conftest.c <<EOF
1289 int foo;
1290 main () { return 0;}
1291 EOF
1292                 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -Wl,-z,relro -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD])
1293                 then
1294                         samba_cv_relro=yes
1295                 else
1296                         samba_cv_relro=no
1297                 fi
1298                 rm -f conftest*
1299         ])
1300         if test x"${samba_cv_relro}" = x"yes"
1301         then
1302                 RELRO_LDFLAGS="-Wl,-z,relro"
1303         fi
1304 fi
1305
1306 # Set defaults
1307 SYMSEXT="syms"
1308 AC_SUBST(SYMSEXT)
1309
1310 # Assume non-shared by default and override below
1311 BLDSHARED="false"
1312
1313 # these are the defaults, good for lots of systems
1314 HOST_OS="$host_os"
1315 LDSHFLAGS="-shared"
1316 MODULE_EXPORTS=""
1317 SONAMEFLAG="#"
1318 SHLD="\${CC} \${CFLAGS}"
1319 PICFLAG="${PIE_CFLAGS}"
1320 SHLIBEXT="so"
1321 DSO_EXPORTS=""
1322
1323 # this bit needs to be modified for each OS that supports share libs
1324 # You need to specify how to create a shared library and
1325   # how to compile C code to produce PIC object files
1326
1327   AC_MSG_CHECKING([ability to build shared libraries])
1328
1329   # and these are for particular systems
1330   case "$host_os" in
1331                 *linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu | *qnx*)
1332                         case "$host_os" in
1333                                 *linux*) AC_DEFINE(LINUX,1,[Whether the host os is linux]) ;;
1334                                 *qnx*) AC_DEFINE(QNX,1,[Whether the host os is qnx]) ;;
1335                         esac
1336                         BLDSHARED="true"
1337                         LDSHFLAGS="-shared -Wl,-Bsymbolic"
1338                         if test "${ac_cv_gnu_ld_no_default_allow_shlib_undefined}" = "yes"; then
1339                                 LDSHFLAGS_Z_NODEFS="-Wl,--allow-shlib-undefined"
1340                         fi
1341                         DYNEXP="-Wl,--export-dynamic"
1342                         PICFLAG="-fPIC"
1343                         SONAMEFLAG="-Wl,-soname="
1344                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1345                         ;;
1346                 *solaris*) AC_DEFINE(SUNOS5,1,[Whether the host os is solaris])
1347                         BLDSHARED="true"
1348                         if test "${GCC}" = "yes"; then
1349                                 PICFLAG="-fPIC"
1350                                 SONAMEFLAG="-Wl,-soname="
1351                                 if test "${ac_cv_prog_gnu_ld}" = "yes"; then
1352                                         DYNEXP="-Wl,-E"
1353                                 fi
1354                                 LDSHFLAGS="-shared"
1355                         else
1356                                 PICFLAG="-KPIC"
1357                                 LDSHFLAGS="-G"
1358                         fi
1359                         if test "$ac_cv_prog_gnu_ld" = "yes"; then
1360                                 SONAMEFLAG="-Wl,-soname="
1361                         else
1362                                 SONAMEFLAG="-Wl,-h,"
1363                         fi
1364                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1365                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1366                         ;;
1367                 *sunos*) AC_DEFINE(SUNOS4,1,[Whether the host os is sunos4])
1368                         BLDSHARED="true"
1369                         LDSHFLAGS="-G"
1370                         SONAMEFLAG="-Wl,-h,"
1371                         PICFLAG="-KPIC"   # Is this correct for SunOS
1372                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1373                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1374                         ;;
1375                 *netbsd* | *freebsd* | *dragonfly* )
1376                         BLDSHARED="true"
1377                         LDSHFLAGS="-shared"
1378                         DYNEXP="-Wl,--export-dynamic"
1379                         SONAMEFLAG="-Wl,-soname,"
1380                         PICFLAG="-fPIC -DPIC"
1381                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1382                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1383                         ;;
1384                 *openbsd*)  BLDSHARED="true"
1385                         LDSHFLAGS="-shared"
1386                         DYNEXP="-Wl,-Bdynamic"
1387                         SONAMEFLAG="-Wl,-soname,"
1388                         PICFLAG="-fPIC"
1389                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1390                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1391                         ;;
1392                 *irix*) AC_DEFINE(IRIX,1,[Whether the host os is irix])
1393                         case "$host_os" in
1394                         *irix6*) AC_DEFINE(IRIX6,1,[Whether the host os is irix6])
1395                         ;;
1396                         esac
1397                         BLDSHARED="true"
1398                         LDSHFLAGS="-Wl,-set_version,sgi1.0 -shared"
1399                         SONAMEFLAG="-Wl,-soname,"
1400                         if test "${GCC}" = "yes"; then
1401                                 PICFLAG="-fPIC"
1402                         else
1403                                 PICFLAG="-KPIC"
1404                         fi
1405                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1406                         ;;
1407                 *aix*) AC_DEFINE(AIX,1,[Whether the host os is aix])
1408                         BLDSHARED="true"
1409                         # use expfull to export underscored symbols
1410                         # add rtl to remove /lib/crt0.o warning
1411                         LDSHFLAGS="-Wl,-G,-bexpfull,-bbigtoc,-brtl"
1412                         DYNEXP="-Wl,-brtl,-bexpfull,-bbigtoc"
1413                         PICFLAG="-O2"
1414                         # as AIX code is always position independent...
1415                         # .po will just create compile warnings, use po.o:
1416                         if test "${GCC}" != "yes"; then
1417                                 ## for funky AIX compiler using strncpy()
1418                                 CFLAGS="$CFLAGS -D_LINUX_SOURCE_COMPAT -qmaxmem=32000 -qhalt=e"
1419                         fi
1420
1421                         AC_DEFINE(STAT_ST_BLOCKSIZE,DEV_BSIZE,[The size of a block])
1422                         AC_DEFINE(BROKEN_STRNLEN,1,[Does strnlen work correctly])
1423                         AC_DEFINE(BROKEN_STRNDUP,1,[Does strndup work correctly])
1424                         ;;
1425                 *hpux*) AC_DEFINE(HPUX,1,[Whether the host os is HPUX])
1426                         # ia64: 64bit build using gcc with CFLAGS="-mpl64"
1427                         #       64bit build using HP's cc with CFLAGS="+DD64"
1428                         # hppa: 64bit build unsupported by gcc
1429                         #       64bit build using HP's cc with CFLAGS="+DA2.0w"
1430                         # HP-UX 11.00 ld needs PHSS_33034
1431                         BLDSHARED="true"
1432                         if test "${GCC}" = "yes"; then
1433                                 PICFLAG="-fPIC"
1434                                 LDSHFLAGS="-shared"
1435                         else
1436                                 PICFLAG="+z"
1437                                 LDSHFLAGS="-b"
1438                                 # "Uses depth-first symbol resolution"
1439                                 LDSHFLAGS="$LDSHFLAGS -Wl,-B,symbolic,-b"
1440                                 if test "$host_cpu" != "ia64"; then
1441                                         # "don't store literals in read-only memory" (?):
1442                                         PICFLAG="$PICFLAG +ESnolit"
1443                                 fi
1444                         fi
1445                         if test "$host_cpu" = "ia64"; then
1446                                 SHLIBEXT="so"
1447                                 # TODO: does the linker find the right 32/64 bit version of the libs? :
1448                                 DYNEXP="-Wl,-E,+b/usr/local/lib/hpux32:/usr/lib/hpux32:/usr/local/lib/hpux64:/usr/lib/hpux64"
1449                         else
1450                                 SHLIBEXT="sl"
1451                                 DYNEXP="-Wl,-E,+b/usr/local/lib:/usr/lib"
1452                         fi
1453                         if test "$ac_cv_prog_gnu_ld" = "yes"; then
1454                                 SONAMEFLAG="-Wl,-soname="
1455                         else
1456                                 SONAMEFLAG="-Wl,+h,"
1457                         fi
1458                         # PIE/PIC flags at link time are required on HP-UX because
1459                         # linking requires a temporary source file, which is being
1460                         # compiled with the indicated flags - which need to contain
1461                         # PIC flags when we don't support PIE flags:
1462                         if test "$PIE_LDFLAGS" = "" ; then
1463                                 PIE_LDFLAGS=\${PICFLAG}
1464                         fi
1465                         AC_DEFINE(STAT_ST_BLOCKSIZE,8192,[The size of a block])
1466                         AC_DEFINE(POSIX_ACL_NEEDS_MASK,1,[Does a POSIX ACL need a mask element])
1467                         ;;
1468                 *osf*) AC_DEFINE(OSF1,1,[Whether the host os is osf1])
1469                         BLDSHARED="true"
1470                         LDSHFLAGS="-shared"
1471                         SONAMEFLAG="-Wl,-soname,"
1472                         if test "${GCC}" = "yes"; then
1473                                 PICFLAG="-fPIC"
1474                         fi
1475                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1476                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1477                         for flags in "-expect_unresolved '*'" "-Wl,-expect_unresolved,'*'" ; do
1478                                 saved_ldflags="$LDFLAGS"
1479                                 AC_MSG_CHECKING([if $flags works])
1480                                 LDFLAGS="$flags $saved_ldflags"
1481                                 AC_TRY_LINK([],[],
1482                                         [AC_MSG_RESULT([yes])
1483                                         LDSHFLAGS_Z_NODEFS=$flags],
1484                                         AC_MSG_RESULT([no]))
1485                                 LDFLAGS="$saved_ldflags"
1486                                 test x"$LDSHFLAGS_Z_NODEFS" != x && break
1487                         done
1488                         ;;
1489                 *sco*) AC_DEFINE(SCO,1,[Whether the host os is sco unix])
1490                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1491                         ;;
1492                 *unixware*) AC_DEFINE(UNIXWARE,1,[Whether the host os is unixware])
1493                         BLDSHARED="true"
1494                         LDSHFLAGS="-shared"
1495                         SONAMEFLAG="-Wl,-soname,"
1496                         PICFLAG="-KPIC"
1497                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1498                         ;;
1499                 *next2*) AC_DEFINE(NEXT2,1,[Whether the host os is NeXT v2])
1500                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1501                         ;;
1502                 *dgux*) AC_CHECK_PROG( ROFF, groff, [groff -etpsR -Tascii -man])
1503                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1504                         ;;
1505                 *sysv4*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1506                         case "$host" in
1507                                 *-univel-*)     if [ test "$GCC" != yes ]; then
1508                                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1509                                         fi
1510                                         LDSHFLAGS="-G"
1511                                         DYNEXP="-Bexport"
1512                                 ;;
1513                                 *mips-sni-sysv4*) AC_DEFINE(RELIANTUNIX,1,[Whether the host os is reliantunix]);;
1514                         esac
1515                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1516                         ;;
1517
1518                 *sysv5*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1519                         if [ test "$GCC" != yes ]; then
1520                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1521                         fi
1522                         LDSHFLAGS="-G"
1523                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1524                         ;;
1525                 *vos*) AC_DEFINE(STAT_ST_BLOCKSIZE,4096)
1526                         BLDSHARED="false"
1527                         LDSHFLAGS=""
1528                         ;;
1529
1530                 *darwin*)   AC_DEFINE(DARWINOS,1,[Whether the host os is Darwin/MacOSX])
1531                         BLDSHARED="true"
1532                         LDSHFLAGS="-dynamiclib -flat_namespace -undefined suppress"
1533                         CFLAGS="$CFLAGS -fno-common"
1534                         SHLD="\${CC}"
1535                         SHLIBEXT="dylib"
1536                         MODULE_EXPORTS="-exported_symbols_list \$(srcdir)/exports/modules-darwin.syms"
1537                         SHLIBEXT="dylib"
1538                         # Since gcc doesn't fail on unrecognised options, the
1539                         # PIE test incorrectly succeeds. Darwin gcc does not
1540                         # actually support the PIE stuff.
1541                         PIE_LDFLAGS=
1542                         PIE_CFLAGS=
1543                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1544                         ;;
1545
1546                 *)
1547                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1548                         ;;
1549   esac
1550
1551 if test "$enable_shared" != "yes"; then
1552         BLDSHARED=false
1553 fi
1554
1555 if test "$enable_shared" = yes -a "${ac_cv_gnu_ld_version_script}" = yes; then
1556         DSO_EXPORTS=\$\(DSO_EXPORTS_CMD\)
1557 fi
1558
1559 if test x"$BLDSHARED" = x"true" ; then
1560         LDFLAGS="$LDFLAGS -L./bin"
1561 fi
1562
1563 AC_MSG_RESULT($BLDSHARED)
1564
1565 if test x"$enable_developer" = x"yes" ; then
1566         default_as_needed=auto
1567 else
1568         default_as_needed=no
1569 fi
1570 AC_ARG_ENABLE(as-needed,
1571         AS_HELP_STRING([--enable-as-needed],
1572         [Turn on as-needed support if available (default=no)]),
1573         [enable_as_needed=$enableval],
1574         [enable_as_needed=$default_as_needed])
1575 if test "x$enable_as_needed" != xno; then
1576     saved_before_as_needed_ldflags="$LDFLAGS"
1577     for flags in "-Wl,--as-needed" "-Wl,-z,ignore" "-z ignore" ; do
1578         saved_ldflags="$LDFLAGS"
1579         AC_MSG_CHECKING([if $flags works])
1580         LDFLAGS="$flags $saved_ldflags"
1581         AC_TRY_LINK([],[],
1582                 [AC_MSG_RESULT([yes])
1583                 LD_AS_NEEDED_FLAG=$flags
1584                 ld_as_needed_flag_found=yes],
1585                 AC_MSG_RESULT([no]))
1586         LDFLAGS="$LD_AS_NEEDED_FLAG $saved_ldflags"
1587         test x"$ld_as_needed_flag_found" = xyes && break
1588     done
1589 fi
1590
1591 if test x$ld_as_needed_flag_found = xyes -a x$enable_as_needed = xauto ; then
1592 # check if ld has bug described in https://bugzilla.samba.org/show_bug.cgi?id=7209#c17
1593         AC_MSG_CHECKING([if $LD_AS_NEEDED_FLAG has explicit external libs bug])
1594 cat > conftest_shb.c <<END
1595 void b() {}
1596 END
1597 cat > conftest_sha.c <<END
1598 extern void b();
1599 void a() {
1600         b();
1601 }
1602 END
1603 cat > conftest.c <<END
1604 extern void a();
1605 int main() {
1606         a();
1607         return 0;
1608 }
1609 END
1610
1611         rm -fr conftest
1612         AC_TRY_COMMAND([$CC $CPPFLAGS $CFLAGS $PICFLAG -c -o conftest_sha.o conftest_sha.c 1>&AS_MESSAGE_LOG_FD 2>&1])
1613         AC_TRY_COMMAND([$CC $CPPFLAGS $CFLAGS $PICFLAG -c -o conftest_shb.o conftest_shb.c 1>&AS_MESSAGE_LOG_FD 2>&1])
1614         TESTCMD="`eval echo \"$SHLD $LDSHFLAGS $PICFLAG\"`"
1615         AC_TRY_COMMAND([$TESTCMD -o libconftest_shb.$SHLIBEXT conftest_shb.o 1>&AS_MESSAGE_LOG_FD 2>&1])
1616         AC_TRY_COMMAND([$TESTCMD -o libconftest_sha.$SHLIBEXT conftest_sha.o 1>&AS_MESSAGE_LOG_FD 2>&1])
1617         AC_TRY_COMMAND([$CC -o conftest conftest.c $LDFLAGS -L. -lconftest_sha -lconftest_shb 1>&AS_MESSAGE_LOG_FD 2>&1])
1618         if AC_TRY_COMMAND([eval "$LIB_PATH_VAR=. ./conftest 1>&AS_MESSAGE_LOG_FD 2>&1"])
1619         then
1620                 AC_MSG_RESULT([no])
1621         else
1622                 ld_as_needed_flag_found=no
1623                 LDFLAGS="$saved_before_as_needed_ldflags"
1624                 AC_MSG_RESULT([yes])
1625         fi
1626         rm conftest* libconftest*
1627 fi
1628
1629 # check if we have to disable LD_AS_NEEDED_FLAG:
1630 # On some systems for a veriety of reasons linking with
1631 # -Wl,--as-needed -lreadline -lncurses fails
1632 # we have to retest, if these combination is detected before.
1633 # Bugzilla #7209
1634
1635 if test x$ac_cv_lib_readline_rl_callback_handler_install = xyes ; then
1636         if test x$ld_as_needed_flag_found = xyes ; then
1637                 AC_MSG_CHECKING([if $LD_AS_NEEDED_FLAG works with readline])
1638                 # try if check no fails
1639                 save_LIBS=$LIBS
1640                 LIBS="$LIBS $TERMLIBS"
1641                 AC_TRY_LINK([], [rl_callback_handler_install();], [AC_MSG_RESULT([yes])],[ AC_MSG_RESULT([no]); LDFLAGS="$saved_before_as_needed_ldflags"])
1642                 LIBS="$save_LIBS"
1643         fi
1644 fi
1645
1646
1647
1648 # for historical reasons almost all linkers don't complain about unresolved
1649 # symbols in shared libs. Except for the internal samba modules we want to get
1650 # errors when we produce a shared lib with unresolved symbols. On some
1651 # platforms unresolved symbols might be intended, so we might have to add
1652 # platform specific exceptions here.
1653
1654 for flags in "-Wl,-z,defs" "-error_unresolved" "-Wl,-error_unresolved" ; do
1655         saved_ldflags="$LDFLAGS"
1656         AC_MSG_CHECKING([if $flags works])
1657         LDFLAGS="$flags $saved_ldflags"
1658         AC_TRY_LINK([],[],
1659         [AC_MSG_RESULT([yes])
1660         LDSHFLAGS_Z_DEFS=$flags
1661         ldshflags_z_defs_found=yes],
1662         AC_MSG_RESULT([no]))
1663         LDFLAGS=$saved_ldflags
1664         test x"$ldshflags_z_defs_found" = xyes && break
1665 done
1666
1667 AC_MSG_CHECKING([LDSHFLAGS_Z_DEFS])
1668 AC_MSG_RESULT([$LDSHFLAGS_Z_DEFS])
1669 AC_MSG_CHECKING([LDFLAGS])
1670 AC_MSG_RESULT([$LDFLAGS])
1671 AC_MSG_CHECKING([DYNEXP])
1672 AC_MSG_RESULT([$DYNEXP])
1673
1674 #######################################################
1675 # test whether building a shared library actually works
1676 if test $BLDSHARED = true; then
1677
1678 AC_MSG_CHECKING([SHLD])
1679 AC_MSG_RESULT([$SHLD])
1680 AC_MSG_CHECKING([LDSHFLAGS])
1681 AC_MSG_RESULT([$LDSHFLAGS])
1682
1683 AC_MSG_CHECKING([SHLIBEXT])
1684 AC_MSG_RESULT([$SHLIBEXT])
1685 AC_MSG_CHECKING([SONAMEFLAG])
1686 AC_MSG_RESULT([$SONAMEFLAG])
1687
1688 AC_MSG_CHECKING([PICFLAG])
1689 AC_MSG_RESULT([$PICFLAG])
1690
1691 AC_MSG_CHECKING([NSSSONAMEVERSIONSUFFIX])
1692 AC_MSG_RESULT([$NSSSONAMEVERSIONSUFFIX])
1693
1694 AC_CACHE_CHECK([whether building shared libraries actually works],
1695                [ac_cv_shlib_works],[
1696    # try building a trivial shared library
1697    ac_cv_shlib_works=no
1698    # The $SHLD and $LDSHFLAGS variables may contain references to other
1699    # variables so they need to be eval'ed.
1700    if AC_TRY_COMMAND([$CC $CPPFLAGS $CFLAGS $PICFLAG -c -o shlib.o ${srcdir-.}/../tests/shlib.c 1>&AS_MESSAGE_LOG_FD])
1701    then
1702      TESTCMD="`eval echo \"$SHLD $LDSHFLAGS $PICFLAG\"`"
1703      TESTCMD="$TESTCMD -o \"shlib.$SHLIBEXT\" shlib.o"
1704      if AC_TRY_COMMAND([eval $TESTCMD 1>&AS_MESSAGE_LOG_FD 2>&1])
1705      then
1706        ac_cv_shlib_works=yes
1707      fi
1708    fi
1709    rm -f "shlib.$SHLIBEXT" shlib.o
1710
1711 ])
1712 if test $ac_cv_shlib_works = no; then
1713    BLDSHARED=false
1714 fi
1715 fi
1716
1717 if test x"$BLDSHARED" != x"true"; then
1718         LDSHFLAGS="shared-libraries-disabled"
1719         SONAMEFLAG="shared-libraries-disabled"
1720         NSSSONAMEVERSIONSUFFIX="shared-libraries-disabled"
1721         SHLD="shared-libraries-disabled"
1722         PICFLAG="${PIE_CFLAGS}"
1723         SHLIBEXT="shared_libraries_disabled"
1724         smbtorture4_possible=no
1725 fi
1726
1727 AC_MSG_CHECKING([used PICFLAG])
1728 AC_MSG_RESULT([$PICFLAG])
1729
1730 AC_DEFINE_UNQUOTED(SHLIBEXT, "$SHLIBEXT", [Shared library extension])
1731
1732
1733
1734 ###########################################################
1735 #
1736 # Configuration of subsystems / libraries
1737 #
1738 ###########################################################
1739
1740 INSTALLLIBCMD_SH=:
1741 INSTALLLIBCMD_A=:
1742 UNINSTALLLIBCMD_SH=:
1743 UNINSTALLLIBCMD_A=:
1744
1745 if test $BLDSHARED = true; then
1746         INSTALLLIBCMD_SH="\$(INSTALLCMD)"
1747         UNINSTALLLIBCMD_SH="rm -f"
1748 fi
1749 if test $enable_static = yes; then
1750         INSTALLLIBCMD_A="\$(INSTALLCMD)"
1751         UNINSTALLLIBCMD_A="rm -f"
1752 fi
1753
1754 #################################################
1755 # --disable-shared-libs
1756 # can be used to disable the internal use of shared libs altogether
1757 # (this only has an effect when building shared libs is enabled)
1758 #
1759 USESHARED=false
1760 AC_SUBST(USESHARED)
1761
1762 AC_MSG_CHECKING(whether to use shared libraries internally)
1763 AC_ARG_ENABLE([shared-libs],
1764         AS_HELP_STRING([--enable-shared-libs],
1765                 [Use shared libraries internally (default=yes)]),
1766         [enable_shared_libs=$enableval],
1767         [enable_shared_libs=yes])
1768
1769 if test x"$enable_shared_libs" != x"no" ; then
1770         USESHARED=$BLDSHARED
1771 fi
1772
1773 AC_MSG_RESULT([$USESHARED])
1774
1775 if test x"$enable_shared_libs" = x"yes" -a x"$BLDSHARED" != x"true" ; then
1776         AC_MSG_WARN([--enable-shared-libs: no support for shared libraries])
1777 fi
1778
1779 #################################################
1780 # --with-static-libs=LIBS:
1781 #   link (internal) libs dynamically or statically?
1782 #
1783 # If a subsystem is built as a library then this controls whether they are
1784 # linked into Samba targets statically or dynamically:
1785 #
1786 # * If we build the shared library at all, we link dynamically by default.
1787 #
1788 # * We only link statically if we don't build shared or if the library
1789 #   appears in the --with-static-libs configure option.
1790 #
1791 # Example:
1792 #   --with-static-libs=libtalloc makes use of libtalloc.a instead
1793 #   of linking the dynamic variant with -ltalloc.
1794 #
1795 # NOTE: This option only affects libraries that we do not only build
1796 # but that samba also links against as libraries (as opposed to linking
1797 # the plain object files. - This has to be configured in Makefile.in.
1798 # So in particular it does not harm to give invalid or unknown names here.
1799 #
1800
1801 AC_ARG_WITH([static-libs],
1802         [AS_HELP_STRING([--with-static-libs=LIBS],
1803                 [Comma-separated list of names of (internal) libraries to link statically (instead of dynamically)])],
1804         [AS_IF([test $withval],
1805                 [for lib in `echo $withval | sed -e 's/,/ /g'` ; do
1806                         [lib=`echo $lib | tr '[a-z]' '[A-Z]'`]
1807                         eval LINK_$lib=STATIC
1808                 done], [])],
1809         [])
1810
1811 #
1812 # WORKAROUND:
1813 #   until we have organized other internal subsystems (as util, registry
1814 #   and smbconf) into shared libraries, we CAN NOT link libnetapi
1815 #   dynamically to samba programs.
1816 #
1817 LINK_LIBNETAPI=STATIC
1818
1819 LINK_LIBSMBCLIENT=STATIC
1820
1821 #
1822 #  The library versions are hardcoded here
1823 #  and filled into the LIBFOO_SOVER variable.
1824 #
1825 #  TODO: for talloc and tdb (at least), these should
1826 #  be extracted from their respective source directories
1827 #
1828 AC_ARG_ENABLE(external_libtalloc,
1829         [AS_HELP_STRING([--enable-external-libtalloc],
1830                 [Enable external talloc [default=auto]])],
1831         [ enable_external_libtalloc=$enableval ],
1832         [ enable_external_libtalloc=auto ])
1833
1834 if test "x$enable_external_libtalloc" != xno
1835 then
1836         PKG_CHECK_MODULES(LIBTALLOC, talloc >= 2.0.1,
1837                 [ enable_external_libtalloc=yes ],
1838                 [ if test x$enable_external_libtalloc = xyes; then
1839                         AC_MSG_ERROR([Unable to find libtalloc])
1840                   else
1841                         enable_external_libtalloc=no
1842                   fi
1843                 ])
1844 fi
1845
1846 if test "x$enable_external_libtalloc" = xno
1847 then
1848         m4_include(../lib/talloc/libtalloc.m4)
1849         LINK_LIBTALLOC=STATIC
1850         LIBTALLOCVERSION=`grep ^VERSION ${tallocdir}/wscript | sed -e "s/'//g" -e 's/.* //'`
1851         SMB_LIBRARY(talloc, 2, ${LIBTALLOCVERSION})
1852         LIBTALLOC_OBJ0=""
1853         for obj in ${TALLOC_OBJ}; do
1854                 LIBTALLOC_OBJ0="${LIBTALLOC_OBJ0} ${tallocdir}/${obj}"
1855         done
1856         SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${TALLOC_CFLAGS}"
1857         SAMBA_CONFIGURE_CPPFLAGS="${SAMBA_CONFIGURE_CPPFLAGS} ${TALLOC_CFLAGS}"
1858         AC_SUBST(LIBTALLOC_OBJ0)
1859
1860         TALLOCTORT="bin/talloctort"
1861         AC_SUBST(TALLOCTORT)
1862 fi
1863
1864
1865 AC_ARG_ENABLE(external_libtdb,
1866         [AS_HELP_STRING([--enable-external-libtdb],
1867                 [Enable external tdb [default=auto]])],
1868                 [ enable_external_libtdb=$enableval ],
1869                 [ enable_external_libtdb=auto ])
1870
1871 if test "x$enable_external_libtdb" != xno
1872 then
1873         PKG_CHECK_MODULES(LIBTDB, tdb >= 1.2.6,
1874                 [ enable_external_libtdb=yes ],
1875                 [
1876                 if test x$enable_external_libtdb = xyes; then
1877                         AC_MSG_ERROR([Unable to find libtdb])
1878                 else
1879                         enable_external_libtdb=no
1880                 fi
1881                 ])
1882 fi
1883
1884 AC_SUBST(LIBTDB_OBJ0)
1885 if test "x$enable_external_libtdb" = xno
1886 then
1887         m4_include(../lib/tdb/libtdb.m4)
1888         LINK_LIBTDB=STATIC
1889         LIBTDBVERSION=`grep ^VERSION ${tdbdir}/wscript | sed -e "s/'//g" -e 's/.* //'`
1890         SMB_LIBRARY(tdb, 1, ${LIBTDBVERSION})
1891         LIBTDB_OBJ0=""
1892         LIBTDB_LIBS="$LIBTDB_LIBS $TDB_DEPS"
1893         for obj in ${TDB_OBJ}; do
1894                 LIBTDB_OBJ0="${LIBTDB_OBJ0} ${tdbdir}/${obj}"
1895         done
1896         AC_SUBST(LIBTDB_OBJ0)
1897         SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${TDB_CFLAGS}"
1898         SAMBA_CONFIGURE_CPPFLAGS="${SAMBA_CONFIGURE_CPPFLAGS} ${TDB_CFLAGS}"
1899
1900         TDBBACKUP="bin/tdbbackup"
1901         AC_SUBST(TDBBACKUP)
1902         TDBDUMP="bin/tdbdump"
1903         AC_SUBST(TDBDUMP)
1904         TDBRESTORE="bin/tdbrestore"
1905         AC_SUBST(TDBRESTORE)
1906         TDBTOOL="bin/tdbtool"
1907         AC_SUBST(TDBTOOL)
1908         TDBTORTURE="bin/tdbtorture"
1909         AC_SUBST(TDBTORTURE)
1910 fi
1911
1912 SMB_LIBRARY(netapi, 0)
1913 SMB_LIBRARY(smbclient, 0)
1914 SMB_LIBRARY(smbsharemodes, 0)
1915
1916
1917 ################
1918
1919 AC_CACHE_CHECK([for long long],samba_cv_have_longlong,[
1920 AC_TRY_RUN([#include <stdio.h>
1921 main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); }],
1922 samba_cv_have_longlong=yes,samba_cv_have_longlong=no,samba_cv_have_longlong=cross)])
1923 if test x"$samba_cv_have_longlong" = x"yes"; then
1924     AC_DEFINE(HAVE_LONGLONG,1,[Whether the host supports long long's])
1925     AC_CHECK_TYPE(intptr_t, unsigned long long)
1926 else
1927     AC_CHECK_TYPE(intptr_t, unsigned long)
1928 fi
1929
1930 #
1931 # Check if the compiler supports the LL prefix on long long integers.
1932 # AIX needs this.
1933
1934 AC_CACHE_CHECK([for LL suffix on long long integers],samba_cv_compiler_supports_ll, [
1935     AC_TRY_COMPILE([#include <stdio.h>],[long long i = 0x8000000000LL],
1936         samba_cv_compiler_supports_ll=yes,samba_cv_compiler_supports_ll=no)])
1937 if test x"$samba_cv_compiler_supports_ll" = x"yes"; then
1938    AC_DEFINE(COMPILER_SUPPORTS_LL,1,[Whether the compiler supports the LL prefix on long long integers])
1939 fi
1940
1941
1942 AC_CACHE_CHECK([for 64 bit time_t],samba_cv_SIZEOF_TIME_T,[
1943 AC_TRY_RUN([#include <time.h>
1944 main() { exit((sizeof(time_t) == 8) ? 0 : 1); }],
1945 samba_cv_SIZEOF_TIME_T=yes,samba_cv_SIZEOF_TIME_T=no,samba_cv_SIZEOF_TIME_T=cross)])
1946 if test x"$samba_cv_SIZEOF_TIME_T" = x"yes"; then
1947     AC_DEFINE(SIZEOF_TIME_T,8,[The size of the 'time_t' type])
1948 fi
1949
1950 AC_CACHE_CHECK([for TIME_T_MAX],samba_cv_TIME_T_MAX,[
1951 AC_TRY_RUN([#include <time.h>
1952 main() {
1953         struct tm *tm;
1954         if (sizeof(time_t) == 8) {
1955                 time_t max_time = 0x7fffffffffffffffll;
1956                 tm = gmtime(&max_time);
1957                 /* This should fail with 32-bit tm_year. */
1958                 if (tm == NULL) {
1959                         /* Max time_t that works with 32-bit int tm_year in struct tm. */
1960                         max_time = 67768036191676799ll;
1961                         tm = gmtime(&max_time);
1962                         if (tm) {
1963                                 exit(0);
1964                         }
1965                 }
1966         }
1967         exit(1);
1968 }],
1969 samba_cv_TIME_T_MAX=yes,samba_cv_TIME_T_MAX=no,samba_cv_TIME_T_MAX=cross)])
1970 if test x"$samba_cv_TIME_T_MAX" = x"yes"; then
1971     AC_DEFINE(TIME_T_MAX,67768036191676799ll,[The maximum value of the 'time_t' type])
1972 fi
1973
1974
1975 #
1976 # As a gating factor for large file support, in order to
1977 # use >4GB files we must have the following minimal support
1978 # available: a 64 bit off_t
1979 # If we don't have all of these then fail the build
1980 #
1981
1982 AC_MSG_CHECKING([if large file support can be enabled])
1983 AC_CACHE_CHECK([for 64 bit off_t],samba_cv_SIZEOF_OFF_T,[
1984 AC_TRY_RUN([#include <stdio.h>
1985 #include <sys/stat.h>
1986 main() { exit((sizeof(off_t) == 8) ? 0 : 1); }],
1987 samba_cv_SIZEOF_OFF_T=yes,samba_cv_SIZEOF_OFF_T=no,samba_cv_SIZEOF_OFF_T=cross)])
1988 if test x"$samba_cv_SIZEOF_OFF_T" = x"no"; then
1989     AC_MSG_ERROR(["large file support support not available: sizeof(off_t) != 8"])
1990 fi
1991
1992 AC_CACHE_CHECK([for 64 bit ino_t],samba_cv_SIZEOF_INO_T,[
1993 AC_TRY_RUN([
1994 #if defined(HAVE_UNISTD_H)
1995 #include <unistd.h>
1996 #endif
1997 #include <stdio.h>
1998 #include <sys/stat.h>
1999 main() { exit((sizeof(ino_t) == 8) ? 0 : 1); }],
2000 samba_cv_SIZEOF_INO_T=yes,samba_cv_SIZEOF_INO_T=no,samba_cv_SIZEOF_INO_T=cross)])
2001 if test x"$samba_cv_SIZEOF_INO_T" = x"yes"; then
2002     AC_DEFINE(SIZEOF_INO_T,8,[The size of the 'ino_t' type])
2003 fi
2004
2005 AC_CACHE_CHECK([for 64 bit dev_t],samba_cv_SIZEOF_DEV_T,[
2006 AC_TRY_RUN([
2007 #if defined(HAVE_UNISTD_H)
2008 #include <unistd.h>
2009 #endif
2010 #include <stdio.h>
2011 #include <sys/stat.h>
2012 main() { exit((sizeof(dev_t) == 8) ? 0 : 1); }],
2013 samba_cv_SIZEOF_DEV_T=yes,samba_cv_SIZEOF_DEV_T=no,samba_cv_SIZEOF_DEV_T=cross)])
2014 if test x"$samba_cv_SIZEOF_DEV_T" = x"yes"; then
2015     AC_DEFINE(SIZEOF_DEV_T,8,[The size of the 'dev_t' type])
2016 fi
2017
2018 AC_CACHE_CHECK([for major macro],samba_cv_HAVE_DEVICE_MAJOR_FN,[
2019 AC_TRY_RUN([
2020 #if defined(HAVE_UNISTD_H)
2021 #include <unistd.h>
2022 #endif
2023 #include <sys/types.h>
2024 main() { dev_t dev; int i = major(dev); return 0; }],
2025 samba_cv_HAVE_DEVICE_MAJOR_FN=yes,samba_cv_HAVE_DEVICE_MAJOR_FN=no,samba_cv_HAVE_DEVICE_MAJOR_FN=cross)])
2026 if test x"$samba_cv_HAVE_DEVICE_MAJOR_FN" = x"yes"; then
2027     AC_DEFINE(HAVE_DEVICE_MAJOR_FN,1,[Whether the major macro for dev_t is available])
2028 fi
2029
2030 AC_CACHE_CHECK([for minor macro],samba_cv_HAVE_DEVICE_MINOR_FN,[
2031 AC_TRY_RUN([
2032 #if defined(HAVE_UNISTD_H)
2033 #include <unistd.h>
2034 #endif
2035 #include <sys/types.h>
2036 main() { dev_t dev; int i = minor(dev); return 0; }],
2037 samba_cv_HAVE_DEVICE_MINOR_FN=yes,samba_cv_HAVE_DEVICE_MINOR_FN=no,samba_cv_HAVE_DEVICE_MINOR_FN=cross)])
2038 if test x"$samba_cv_HAVE_DEVICE_MINOR_FN" = x"yes"; then
2039     AC_DEFINE(HAVE_DEVICE_MINOR_FN,1,[Whether the minor macro for dev_t is available])
2040 fi
2041
2042 AC_CACHE_CHECK([for makedev macro],samba_cv_HAVE_MAKEDEV,[
2043 AC_TRY_RUN([
2044 #if defined(HAVE_UNISTD_H)
2045 #include <unistd.h>
2046 #endif
2047 #include <sys/types.h>
2048 main() { dev_t dev = makedev(1,2); return 0; }],
2049 samba_cv_HAVE_MAKEDEV=yes,samba_cv_HAVE_MAKEDEV=no,samba_cv_HAVE_MAKEDEV=cross)])
2050 if test x"$samba_cv_HAVE_MAKEDEV" = x"yes"; then
2051     AC_DEFINE(HAVE_MAKEDEV,1,[Whether the macro for makedev is available])
2052 fi
2053
2054 AC_CACHE_CHECK([whether seekdir returns void],samba_cv_SEEKDIR_RETURNS_VOID,[
2055 AC_TRY_COMPILE([#include <sys/types.h>
2056 #include <dirent.h>
2057 void seekdir(DIR *d, long loc) { return; }],[return 0;],
2058 samba_cv_SEEKDIR_RETURNS_VOID=yes,samba_cv_SEEKDIR_RETURNS_VOID=no)])
2059 if test x"$samba_cv_SEEKDIR_RETURNS_VOID" = x"yes"; then
2060     AC_DEFINE(SEEKDIR_RETURNS_VOID,1,[Whether seekdir returns void])
2061 fi
2062
2063 AC_CACHE_CHECK([for __FUNCTION__ macro],samba_cv_HAVE_FUNCTION_MACRO,[
2064 AC_TRY_COMPILE([#include <stdio.h>], [printf("%s\n", __FUNCTION__);],
2065 samba_cv_HAVE_FUNCTION_MACRO=yes,samba_cv_HAVE_FUNCTION_MACRO=no)])
2066 if test x"$samba_cv_HAVE_FUNCTION_MACRO" = x"yes"; then
2067     AC_DEFINE(HAVE_FUNCTION_MACRO,1,[Whether there is a __FUNCTION__ macro])
2068 fi
2069
2070 if test x"$libreplace_cv_HAVE_CLOCK_GETTIME_IN_LIBRT" = xyes ; then
2071         LIBS="$LIBS -lrt"
2072 fi
2073
2074 AC_CACHE_CHECK([for broken readdir name],samba_cv_HAVE_BROKEN_READDIR_NAME,[
2075 AC_TRY_RUN([#include <sys/types.h>
2076 #include <dirent.h>
2077 main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d);
2078 if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 &&
2079 di->d_name[0] == 0) exit(0); exit(1);} ],
2080 samba_cv_HAVE_BROKEN_READDIR_NAME=yes,samba_cv_HAVE_BROKEN_READDIR_NAME=no,samba_cv_HAVE_BROKEN_READDIR_NAME=cross)])
2081 if test x"$samba_cv_HAVE_BROKEN_READDIR_NAME" = x"yes"; then
2082     AC_DEFINE(HAVE_BROKEN_READDIR_NAME,1,[Whether readdir() returns the wrong name offset])
2083 fi
2084
2085 AC_CACHE_CHECK([for utimbuf],samba_cv_HAVE_UTIMBUF,[
2086 AC_TRY_COMPILE([#include <sys/types.h>
2087 #include <utime.h>],
2088 [struct utimbuf tbuf;  tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf));],
2089 samba_cv_HAVE_UTIMBUF=yes,samba_cv_HAVE_UTIMBUF=no,samba_cv_HAVE_UTIMBUF=cross)])
2090 if test x"$samba_cv_HAVE_UTIMBUF" = x"yes"; then
2091     AC_DEFINE(HAVE_UTIMBUF,1,[Whether struct utimbuf is available])
2092 fi
2093
2094 ##############
2095 # Check utmp details, but only if our OS offers utmp.h
2096 if test x"$ac_cv_header_utmp_h" = x"yes"; then
2097 dnl  utmp and utmpx come in many flavours
2098 dnl  We need to check for many of them
2099 dnl  But we don't need to do each and every one, because our code uses
2100 dnl  mostly just the utmp (not utmpx) fields.
2101
2102 AC_CHECK_FUNCS(pututline pututxline updwtmp updwtmpx getutmpx getutxent)
2103
2104 AC_CACHE_CHECK([for ut_name in utmp],samba_cv_HAVE_UT_UT_NAME,[
2105 AC_TRY_COMPILE([#include <sys/types.h>
2106 #include <utmp.h>],
2107 [struct utmp ut;  ut.ut_name[0] = 'a';],
2108 samba_cv_HAVE_UT_UT_NAME=yes,samba_cv_HAVE_UT_UT_NAME=no,samba_cv_HAVE_UT_UT_NAME=cross)])
2109 if test x"$samba_cv_HAVE_UT_UT_NAME" = x"yes"; then
2110     AC_DEFINE(HAVE_UT_UT_NAME,1,[Whether the utmp struct has a property ut_name])
2111 fi
2112
2113 AC_CACHE_CHECK([for ut_user in utmp],samba_cv_HAVE_UT_UT_USER,[
2114 AC_TRY_COMPILE([#include <sys/types.h>
2115 #include <utmp.h>],
2116 [struct utmp ut;  ut.ut_user[0] = 'a';],
2117 samba_cv_HAVE_UT_UT_USER=yes,samba_cv_HAVE_UT_UT_USER=no,samba_cv_HAVE_UT_UT_USER=cross)])
2118 if test x"$samba_cv_HAVE_UT_UT_USER" = x"yes"; then
2119     AC_DEFINE(HAVE_UT_UT_USER,1,[Whether the utmp struct has a property ut_user])
2120 fi
2121
2122 AC_CACHE_CHECK([for ut_id in utmp],samba_cv_HAVE_UT_UT_ID,[
2123 AC_TRY_COMPILE([#include <sys/types.h>
2124 #include <utmp.h>],
2125 [struct utmp ut;  ut.ut_id[0] = 'a';],
2126 samba_cv_HAVE_UT_UT_ID=yes,samba_cv_HAVE_UT_UT_ID=no,samba_cv_HAVE_UT_UT_ID=cross)])
2127 if test x"$samba_cv_HAVE_UT_UT_ID" = x"yes"; then
2128     AC_DEFINE(HAVE_UT_UT_ID,1,[Whether the utmp struct has a property ut_id])
2129 fi
2130
2131 AC_CACHE_CHECK([for ut_host in utmp],samba_cv_HAVE_UT_UT_HOST,[
2132 AC_TRY_COMPILE([#include <sys/types.h>
2133 #include <utmp.h>],
2134 [struct utmp ut;  ut.ut_host[0] = 'a';],
2135 samba_cv_HAVE_UT_UT_HOST=yes,samba_cv_HAVE_UT_UT_HOST=no,samba_cv_HAVE_UT_UT_HOST=cross)])
2136 if test x"$samba_cv_HAVE_UT_UT_HOST" = x"yes"; then
2137     AC_DEFINE(HAVE_UT_UT_HOST,1,[Whether the utmp struct has a property ut_host])
2138 fi
2139
2140 AC_CACHE_CHECK([for ut_time in utmp],samba_cv_HAVE_UT_UT_TIME,[
2141 AC_TRY_COMPILE([#include <sys/types.h>
2142 #include <utmp.h>],
2143 [struct utmp ut;  time_t t; ut.ut_time = t;],
2144 samba_cv_HAVE_UT_UT_TIME=yes,samba_cv_HAVE_UT_UT_TIME=no,samba_cv_HAVE_UT_UT_TIME=cross)])
2145 if test x"$samba_cv_HAVE_UT_UT_TIME" = x"yes"; then
2146     AC_DEFINE(HAVE_UT_UT_TIME,1,[Whether the utmp struct has a property ut_time])
2147 fi
2148
2149 AC_CACHE_CHECK([for ut_tv in utmp],samba_cv_HAVE_UT_UT_TV,[
2150 AC_TRY_COMPILE([#include <sys/types.h>
2151 #include <utmp.h>],
2152 [struct utmp ut;  struct timeval tv; ut.ut_tv = tv;],
2153 samba_cv_HAVE_UT_UT_TV=yes,samba_cv_HAVE_UT_UT_TV=no,samba_cv_HAVE_UT_UT_TV=cross)])
2154 if test x"$samba_cv_HAVE_UT_UT_TV" = x"yes"; then
2155     AC_DEFINE(HAVE_UT_UT_TV,1,[Whether the utmp struct has a property ut_tv])
2156 fi
2157
2158 AC_CACHE_CHECK([for ut_type in utmp],samba_cv_HAVE_UT_UT_TYPE,[
2159 AC_TRY_COMPILE([#include <sys/types.h>
2160 #include <utmp.h>],
2161 [struct utmp ut;  ut.ut_type = 0;],
2162 samba_cv_HAVE_UT_UT_TYPE=yes,samba_cv_HAVE_UT_UT_TYPE=no,samba_cv_HAVE_UT_UT_TYPE=cross)])
2163 if test x"$samba_cv_HAVE_UT_UT_TYPE" = x"yes"; then
2164     AC_DEFINE(HAVE_UT_UT_TYPE,1,[Whether the utmp struct has a property ut_type])
2165 fi
2166
2167 AC_CACHE_CHECK([for ut_pid in utmp],samba_cv_HAVE_UT_UT_PID,[
2168 AC_TRY_COMPILE([#include <sys/types.h>
2169 #include <utmp.h>],
2170 [struct utmp ut;  ut.ut_pid = 0;],
2171 samba_cv_HAVE_UT_UT_PID=yes,samba_cv_HAVE_UT_UT_PID=no,samba_cv_HAVE_UT_UT_PID=cross)])
2172 if test x"$samba_cv_HAVE_UT_UT_PID" = x"yes"; then
2173     AC_DEFINE(HAVE_UT_UT_PID,1,[Whether the utmp struct has a property ut_pid])
2174 fi
2175
2176 AC_CACHE_CHECK([for ut_exit in utmp],samba_cv_HAVE_UT_UT_EXIT,[
2177 AC_TRY_COMPILE([#include <sys/types.h>
2178 #include <utmp.h>],
2179 [struct utmp ut;  ut.ut_exit.e_exit = 0;],
2180 samba_cv_HAVE_UT_UT_EXIT=yes,samba_cv_HAVE_UT_UT_EXIT=no,samba_cv_HAVE_UT_UT_EXIT=cross)])
2181 if test x"$samba_cv_HAVE_UT_UT_EXIT" = x"yes"; then
2182     AC_DEFINE(HAVE_UT_UT_EXIT,1,[Whether the utmp struct has a property ut_exit])
2183 fi
2184
2185 dnl Look for the IPv6 varient by preference. Many systems have both.
2186 AC_CACHE_CHECK([for ut_addr_v6 in utmp],samba_cv_HAVE_UT_UT_ADDR_V6,[
2187 AC_TRY_COMPILE([#include <sys/types.h>
2188 #include <utmp.h>],
2189 [struct utmp ut;  ut.ut_addr_v6[0] = 0;],
2190 samba_cv_HAVE_UT_UT_ADDR_V6=yes,samba_cv_HAVE_UT_UT_ADDR_V6=no,samba_cv_HAVE_UT_UT_ADDR_V6=cross)])
2191 if test x"$samba_cv_HAVE_UT_UT_ADDR_V6" = x"yes"; then
2192     AC_DEFINE(HAVE_UT_UT_ADDR_V6,1,[Whether the utmp struct has a property ut_addr_v6])
2193 fi
2194
2195 AC_CACHE_CHECK([for ut_addr in utmp],samba_cv_HAVE_UT_UT_ADDR,[
2196 AC_TRY_COMPILE([#include <sys/types.h>
2197 #include <utmp.h>],
2198 [struct utmp ut;  ut.ut_addr = 0;],
2199 samba_cv_HAVE_UT_UT_ADDR=yes,samba_cv_HAVE_UT_UT_ADDR=no,samba_cv_HAVE_UT_UT_ADDR=cross)])
2200 if test x"$samba_cv_HAVE_UT_UT_ADDR" = x"yes"; then
2201     AC_DEFINE(HAVE_UT_UT_ADDR,1,[Whether the utmp struct has a property ut_addr])
2202 fi
2203
2204 if test x$ac_cv_func_pututline = xyes ; then
2205   AC_CACHE_CHECK([whether pututline returns pointer],samba_cv_PUTUTLINE_RETURNS_UTMP,[
2206   AC_TRY_COMPILE([#include <sys/types.h>
2207 #include <utmp.h>],
2208   [struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg);],
2209   samba_cv_PUTUTLINE_RETURNS_UTMP=yes,samba_cv_PUTUTLINE_RETURNS_UTMP=no)])
2210   if test x"$samba_cv_PUTUTLINE_RETURNS_UTMP" = x"yes"; then
2211       AC_DEFINE(PUTUTLINE_RETURNS_UTMP,1,[Whether pututline returns pointer])
2212   fi
2213 fi
2214
2215 AC_CACHE_CHECK([for ut_syslen in utmpx],samba_cv_HAVE_UX_UT_SYSLEN,[
2216 AC_TRY_COMPILE([#include <sys/types.h>
2217 #include <utmpx.h>],
2218 [struct utmpx ux;  ux.ut_syslen = 0;],
2219 samba_cv_HAVE_UX_UT_SYSLEN=yes,samba_cv_HAVE_UX_UT_SYSLEN=no,samba_cv_HAVE_UX_UT_SYSLEN=cross)])
2220 if test x"$samba_cv_HAVE_UX_UT_SYSLEN" = x"yes"; then
2221     AC_DEFINE(HAVE_UX_UT_SYSLEN,1,[Whether the utmpx struct has a property ut_syslen])
2222 fi
2223
2224 fi
2225 # end utmp details
2226
2227 AC_CACHE_CHECK([for linux fallocate],samba_cv_HAVE_LINUX_FALLOCATE,[
2228 AC_TRY_COMPILE([
2229 #if defined(HAVE_UNISTD_H)
2230 #include <unistd.h>
2231 #endif
2232 #include <sys/types.h>
2233 #define _GNU_SOURCE
2234 #include <fcntl.h>
2235 #if defined(HAVE_LINUX_FALLOC_H)
2236 #include <linux/falloc.h>
2237 #endif],
2238 [int ret = fallocate(0, FALLOC_FL_KEEP_SIZE, 0, 10);],
2239 samba_cv_HAVE_LINUX_FALLOCATE=yes,samba_cv_HAVE_LINUX_FALLOCATE=no)])
2240 if test x"$samba_cv_HAVE_LINUX_FALLOCATE" = x"yes" && test x"$ac_cv_func_fallocate" = x"yes"; then
2241     AC_DEFINE(HAVE_LINUX_FALLOCATE,1,[Whether the Linux 'fallocate' function is available])
2242 fi
2243
2244 AC_CACHE_CHECK([for getcwd takes NULL],samba_cv_GETCWD_TAKES_NULL,[
2245 AC_TRY_RUN([
2246 #if defined(HAVE_UNISTD_H)
2247 #include <unistd.h>
2248 #endif
2249 main() { char *s = getcwd(NULL,0); if (s) exit(0); exit(1); }],
2250 samba_cv_GETCWD_TAKES_NULL=yes,samba_cv_GETCWD_TAKES_NULL=no,samba_cv_GETCWD_TAKES_NULL=cross)])
2251 if test x"$samba_cv_GETCWD_TAKES_NULL" = x"yes"; then
2252     AC_DEFINE(GETCWD_TAKES_NULL,1,[Whether the getcwd function takes NULL as an argument])
2253 fi
2254
2255 ICONV_LOOK_DIRS="/usr /usr/local /sw /opt"
2256 AC_ARG_WITH(libiconv,
2257 [AS_HELP_STRING([--with-libiconv=BASEDIR], [Use libiconv in BASEDIR/lib and BASEDIR/include (default=auto)])],
2258 [
2259   if test "$withval" = "no" ; then
2260     AC_MSG_ERROR([argument to --with-libiconv must be a directory])
2261   else
2262      if test "$withval" != "yes" ; then
2263         ICONV_PATH_SPEC=yes
2264         ICONV_LOOK_DIRS="$withval"
2265      fi
2266   fi
2267 ])
2268
2269 for i in $ICONV_LOOK_DIRS ; do
2270
2271     save_LIBS="$LIBS"
2272     save_LDFLAGS="$LDFLAGS"
2273     save_CPPFLAGS="$CPPFLAGS"
2274
2275     iconv_current_LIBS=""
2276     iconv_current_LDFLAGS=""
2277     iconv_current_CPPFLAGS=""
2278
2279     ICONV_FOUND="no"
2280     unset libext
2281
2282     #  This is here to handle -withval stuff for --with-libiconv
2283     #  Perhaps we should always add a -L
2284     CPPFLAGS="$save_CPPFLAGS -I$i/include"
2285
2286     # Check lib and lib32 library variants to cater for IRIX ABI-specific
2287     # installation paths. This gets a little tricky since we might have iconv
2288     # in both libiconv and in libc. In this case the jm_ICONV test will always
2289     # succeed when the header is found. To counter this, make sure the
2290     # library directory is there and check the ABI directory first (which
2291     # should be harmless on other systems, but causes tons of linker warnings on
2292     # 64bit Ubuntu systems).
2293     # As the build farm doesn't seem to have any IRIX machines with iconv.h
2294     # installed, I've decided to fix the linker warnings.
2295     # -- Kai
2296     # For IA64 HPUX systems, the libs are located in lib/hpux32 instead of lib.
2297     for l in "lib" "lib32" "lib/hpux32"; do
2298         if test -d "$i/$l" ; then
2299                 LDFLAGS="$save_LDFLAGS -L$i/$l"
2300                 LIBS=
2301                 export LDFLAGS LIBS CPPFLAGS
2302                 # Try to find iconv(3)
2303                 jm_ICONV($i/$l)
2304                 if test x"$ICONV_FOUND" = "xyes" ; then
2305                     libext="$l"
2306                     break
2307                 fi
2308         fi
2309     done
2310
2311     if test x"$ICONV_FOUND" = "xyes" ; then
2312         iconv_current_LDFLAGS="-L$i/$libext"
2313         iconv_current_CPPFLAGS="-I$i/include"
2314
2315         if test x"$jm_cv_lib_iconv" != x; then
2316             iconv_current_LIBS="$LIBS -l$jm_cv_lib_iconv"
2317         else
2318             # We found iconv in libc.
2319             iconv_current_LIBS=""
2320         fi
2321
2322     fi
2323
2324     if test x"$ICONV_FOUND" = "xyes" ; then
2325
2326         LDFLAGS="$save_LDFLAGS $iconv_current_LDFLAGS"
2327         CPPFLAGS="$save_CPPFLAGS $iconv_current_CPPFLAGS"
2328         LIBS="$save_LIBS $iconv_current_LIBS"
2329         export LDFLAGS LIBS CPPFLAGS
2330
2331         default_dos_charset=no
2332         default_unix_charset=no
2333
2334         # check for default dos charset name
2335         for j in CP850 IBM850 ; do
2336             rjs_CHARSET($j)
2337             default_dos_charset="$ICONV_CHARSET"
2338             if test x"$default_dos_charset" = x"$j"; then
2339                 break
2340             fi
2341         done
2342
2343         # check for default unix charset name
2344         for j in UTF-8 UTF8 ; do
2345             rjs_CHARSET($j)
2346             default_unix_charset="$ICONV_CHARSET"
2347             if test x"$default_unix_charset" = x"$j"; then
2348                 break
2349             fi
2350         done
2351
2352         if test "$default_dos_charset" != "no" -a \
2353                 "$default_dos_charset" != "cross" -a \
2354                 "$default_unix_charset" != "no" -a \
2355                 "$default_unix_charset" != "cross"
2356         then
2357                 samba_cv_HAVE_NATIVE_ICONV=yes
2358         else
2359             if test "$default_dos_charset" = "cross" -o \
2360                      "$default_unix_charset" = "cross"
2361             then
2362                     samba_cv_HAVE_NATIVE_ICONV=cross
2363             else
2364                     samba_cv_HAVE_NATIVE_ICONV=no
2365             fi
2366         fi
2367
2368         # At this point, we have a libiconv candidate. We know that
2369         # we have the right headers and libraries, but we don't know
2370         # whether it does the conversions we want. We can't test this
2371         # because we are cross-compiling. This is not necessarily a big
2372         # deal, since we can't guarantee that the results we get now will
2373         # match the results we get at runtime anyway.
2374         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"cross" ; then
2375             default_dos_charset="CP850"
2376             default_unix_charset="UTF-8"
2377             samba_cv_HAVE_NATIVE_ICONV=yes
2378             AC_MSG_WARN(assuming the libiconv in $iconv_current_LDFLAGS can convert)
2379             AC_MSG_WARN([$default_dos_charset and $default_unix_charset to UCS-16LE])
2380         fi
2381
2382         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"yes" ; then
2383
2384             CPPFLAGS=$save_CPPFLAGS
2385             LDFLAGS=$save_LDFLAGS
2386             LIBS=$save_LIBS
2387
2388             if test x"$iconv_current_LIBS" != x; then
2389                 LIBS="$LIBS $iconv_current_LIBS"
2390             fi
2391
2392             # Add the flags we need to CPPFLAGS and LDFLAGS
2393             CPPFLAGS="$CPPFLAGS $iconv_current_CPPFLAGS"
2394             LDFLAGS="$LDFLAGS $iconv_current_LDFLAGS"
2395
2396             # Turn the #defines into string literals
2397             default_dos_charset="\"$default_dos_charset\""
2398             default_unix_charset="\"$default_unix_charset\""
2399
2400             AC_DEFINE(HAVE_NATIVE_ICONV,1,[Whether to use native iconv])
2401             AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,$default_dos_charset,[Default dos charset name])
2402             AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,$default_unix_charset,[Default unix charset name])
2403
2404            break
2405         fi
2406
2407     # We didn't find a working iconv, so keep going
2408     fi
2409
2410     #  We only need to clean these up here for the next pass through the loop
2411     CPPFLAGS=$save_CPPFLAGS
2412     LDFLAGS=$save_LDFLAGS
2413     LIBS=$save_LIBS
2414     export LDFLAGS LIBS CPPFLAGS
2415 done
2416 unset libext
2417
2418
2419 if test x"$ICONV_FOUND" = x"no" -o x"$samba_cv_HAVE_NATIVE_ICONV" != x"yes" ; then
2420     AC_MSG_WARN([Sufficient support for iconv function was not found.
2421     Install libiconv from http://freshmeat.net/projects/libiconv/ for better charset compatibility!])
2422    AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,"ASCII",[Default dos charset name])
2423    AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,"UTF8",[Default unix charset name])
2424 fi
2425
2426
2427 AC_CACHE_CHECK([for Linux kernel oplocks],samba_cv_HAVE_KERNEL_OPLOCKS_LINUX,[
2428 AC_TRY_RUN([
2429 #include <sys/types.h>
2430 #include <fcntl.h>
2431 #ifndef F_GETLEASE
2432 #define F_GETLEASE      1025
2433 #endif
2434 main() {
2435        int fd = open("/dev/null", O_RDONLY);
2436        return fcntl(fd, F_GETLEASE, 0) == -1;
2437 }
2438 ],
2439 samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=no,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross)])
2440 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
2441     AC_DEFINE(HAVE_KERNEL_OPLOCKS_LINUX,1,[Whether to use linux kernel oplocks])
2442 fi
2443
2444 AC_CACHE_CHECK([for kernel change notify support],samba_cv_HAVE_KERNEL_CHANGE_NOTIFY,[
2445 AC_TRY_RUN([
2446 #include <sys/types.h>
2447 #include <fcntl.h>
2448 #include <signal.h>
2449 #ifndef F_NOTIFY
2450 #define F_NOTIFY 1026
2451 #endif
2452 main() {
2453         exit(fcntl(open("/tmp", O_RDONLY), F_NOTIFY, 0) == -1 ?  1 : 0);
2454 }
2455 ],
2456 samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=no,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross)])
2457 if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
2458     AC_DEFINE(HAVE_KERNEL_CHANGE_NOTIFY,1,[Whether kernel notifies changes])
2459 fi
2460
2461 AC_CHECK_HEADER(sys/inotify.h)
2462
2463 if test x"ac_cv_header_sys_inotify_h" = x"yes"; then
2464     AC_DEFINE(HAVE_INOTIFY,1,[For inotify support])
2465 fi
2466
2467 #################################################
2468 # Check if FAM notifications are available. For FAM info, see
2469 #       http://oss.sgi.com/projects/fam/
2470 #       http://savannah.nongnu.org/projects/fam/
2471 AC_ARG_ENABLE(fam,
2472 [AS_HELP_STRING([--enable-fam], [Turn on FAM support (default=auto)])])
2473
2474 if test x$enable_fam != xno; then
2475     AC_CHECK_HEADERS(fam.h, [samba_cv_HAVE_FAM_H=yes], [samba_cv_HAVE_FAM_H=no])
2476     if test x"$samba_cv_HAVE_FAM_H" = x"yes"; then
2477         # On IRIX, libfam requires libC, but other FAM implementations
2478         # might not need it.
2479         AC_CHECK_LIB(fam, FAMOpen2,
2480             [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam";
2481             AC_DEFINE(HAVE_FAMOPEN2, 1, Define to 1 if there is support for FAMOpen2)],
2482             [samba_cv_HAVE_LIBFAM=no])
2483
2484         if test x"$samba_cv_HAVE_LIBFAM" = x"no" ; then
2485             samba_fam_xtra=-lC
2486             AC_CHECK_LIB_EXT(fam, samba_fam_xtra, FAMOpen2,
2487                 [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam -lC";
2488                 AC_DEFINE(HAVE_FAMOPEN2, 1, Define to 1 if there is support for FAMOpen2)],
2489                 [samba_cv_HAVE_LIBFAM=no])
2490             unset samba_fam_xtra
2491         fi
2492     fi
2493     if test x"$samba_cv_HAVE_LIBFAM" = x"yes" ; then
2494         default_shared_modules="$default_shared_modules vfs_notify_fam"
2495         AC_TRY_COMPILE([#include <fam.h>],
2496                     [enum FAMCodes code = FAMChanged;],
2497                     AC_DEFINE(HAVE_FAM_H_FAMCODES_TYPEDEF, 1,
2498                         [Whether fam.h contains a typedef for enum FAMCodes]),
2499                     [])
2500     fi
2501
2502     if test x"$samba_cv_HAVE_LIBFAM" = x"yes" ; then
2503         AC_CHECK_LIB(fam, FAMNoExists,
2504             [AC_DEFINE(HAVE_FAMNOEXISTS, 1, Define to 1 if there is support for FAMNoExists)])
2505     fi
2506
2507     if test x$enable_fam = xyes && test x"$samba_cv_HAVE_LIBFAM" != xyes ; then
2508         AC_MSG_ERROR(FAM support requested but FAM library not available )
2509     fi
2510 fi
2511
2512 AC_SUBST(SMB_FAM_LIBS)
2513
2514 #################################################
2515 # Check for DMAPI interfaces in libdm/libjfsdm/libxsdm
2516
2517
2518 with_dmapi_support=auto
2519 AC_MSG_CHECKING(whether to use DMAPI support)
2520 AC_ARG_WITH(dmapi,
2521 [AS_HELP_STRING([--with-dmapi], [Include DMAPI/XDSM support (default=auto)])],
2522 [ case "$withval" in
2523   yes|no)
2524     with_dmapi_support=$withval
2525     ;;
2526   esac ]
2527 )
2528 AC_MSG_RESULT([$with_dmapi_support])
2529
2530 if test x"$with_dmapi_support" != xno ; then
2531         SMB_CHECK_DMAPI([], [
2532                 AC_MSG_NOTICE(DMAPI support not present)
2533                 if test x"$with_dmapi_support" = xyes ; then
2534                         AC_MSG_ERROR(no DMAPI support found but requested!)
2535                 fi
2536                 ]
2537         )
2538 fi
2539
2540 # Add TSM SM VFS module only if there are both GPFS and DMAPI support
2541 # Theoretically it should work with AIX JFS2 too but this needs testing
2542 if test x"$ac_cv_header_gpfs_gpl_h" = x"yes" && test x"$samba_dmapi_libs" != x"" ; then
2543     default_shared_modules="$default_shared_modules vfs_tsmsm"
2544 fi
2545
2546 AC_CACHE_CHECK([for kernel share modes],samba_cv_HAVE_KERNEL_SHARE_MODES,[
2547 AC_TRY_RUN([
2548 #include <sys/types.h>
2549 #include <fcntl.h>
2550 #include <signal.h>
2551 #include <sys/file.h>
2552 #ifndef LOCK_MAND
2553 #define LOCK_MAND       32
2554 #define LOCK_READ       64
2555 #endif
2556 main() {
2557         exit(flock(open("/dev/null", O_RDWR), LOCK_MAND|LOCK_READ) != 0);
2558 }
2559 ],
2560 samba_cv_HAVE_KERNEL_SHARE_MODES=yes,samba_cv_HAVE_KERNEL_SHARE_MODES=no,samba_cv_HAVE_KERNEL_SHARE_MODES=cross)])
2561 if test x"$samba_cv_HAVE_KERNEL_SHARE_MODES" = x"yes"; then
2562     AC_DEFINE(HAVE_KERNEL_SHARE_MODES,1,[Whether the kernel supports share modes])
2563 fi
2564
2565
2566 AC_CACHE_CHECK([for IRIX kernel oplock type definitions],samba_cv_HAVE_KERNEL_OPLOCKS_IRIX,[
2567 AC_TRY_COMPILE([#include <sys/types.h>
2568 #include <fcntl.h>],
2569 [oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1;],
2570 samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=no)])
2571 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_IRIX" = x"yes"; then
2572     AC_DEFINE(HAVE_KERNEL_OPLOCKS_IRIX,1,[Whether IRIX kernel oplock type definitions are available])
2573 fi
2574
2575 #################################################
2576 # Check for POSIX capability support
2577
2578 AC_CHECK_HEADER(sys/capability.h, [samba_cv_HAVE_SYS_CAPABILITY_H=yes;
2579     AC_DEFINE(HAVE_SYS_CAPABILITY_H, 1, Whether sys/capability.h is present)],
2580     [], [])
2581
2582 if test x"$samba_cv_HAVE_SYS_CAPABILITY_H" = x"yes"; then
2583
2584     ac_save_LIBS=$LIBS
2585     AC_LIBTESTFUNC(cap, cap_get_proc)
2586
2587     AC_CACHE_CHECK([for POSIX capabilities],
2588             samba_cv_HAVE_POSIX_CAPABILITIES,
2589             [
2590                 AC_TRY_RUN([
2591 #include <sys/types.h>
2592 #include <sys/capability.h>
2593 main() {
2594  cap_t cap;
2595  cap_value_t vals[1];
2596  if (!(cap = cap_get_proc()))
2597    exit(1);
2598  vals[0] = CAP_CHOWN;
2599  cap_set_flag(cap, CAP_INHERITABLE, 1, vals, CAP_CLEAR);
2600  cap_set_proc(cap);
2601  exit(0);
2602 }],
2603                 samba_cv_HAVE_POSIX_CAPABILITIES=yes,
2604                 samba_cv_HAVE_POSIX_CAPABILITIES=no,
2605                 samba_cv_HAVE_POSIX_CAPABILITIES=cross)
2606             ])
2607
2608 if test x"$samba_cv_HAVE_POSIX_CAPABILITIES" = x"yes"; then
2609     AC_DEFINE(HAVE_POSIX_CAPABILITIES, 1,
2610             [Whether POSIX capabilities are available])
2611 else
2612     LIBS=$ac_save_LIBS
2613 fi
2614
2615 fi
2616
2617 #
2618 # Check for int16, uint16, int32 and uint32 in rpc/types.h included from rpc/rpc.h
2619 # This is *really* broken but some systems (DEC OSF1) do this.... JRA.
2620 #
2621
2622 AC_CACHE_CHECK([for int16 typedef included by rpc/rpc.h],samba_cv_HAVE_INT16_FROM_RPC_RPC_H,[
2623 AC_TRY_COMPILE([#include <sys/types.h>
2624 #if defined(HAVE_RPC_RPC_H)
2625 #include <rpc/rpc.h>
2626 #endif],
2627 [int16 testvar;],
2628 samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT16_FROM_RPC_RPC_H=no)])
2629 if test x"$samba_cv_HAVE_INT16_FROM_RPC_RPC_H" = x"yes"; then
2630     AC_DEFINE(HAVE_INT16_FROM_RPC_RPC_H,1,[Whether int16 typedef is included by rpc/rpc.h])
2631 fi
2632
2633 AC_CACHE_CHECK([for uint16 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT16_FROM_RPC_RPC_H,[
2634 AC_TRY_COMPILE([#include <sys/types.h>
2635 #if defined(HAVE_RPC_RPC_H)
2636 #include <rpc/rpc.h>
2637 #endif],
2638 [uint16 testvar;],
2639 samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=no)])
2640 if test x"$samba_cv_HAVE_UINT16_FROM_RPC_RPC_H" = x"yes"; then
2641     AC_DEFINE(HAVE_UINT16_FROM_RPC_RPC_H,1,[Whether uint16 typedef is included by rpc/rpc.h])
2642 fi
2643
2644 AC_CACHE_CHECK([for int32 typedef included by rpc/rpc.h],samba_cv_HAVE_INT32_FROM_RPC_RPC_H,[
2645 AC_TRY_COMPILE([#include <sys/types.h>
2646 #if defined(HAVE_RPC_RPC_H)
2647 #include <rpc/rpc.h>
2648 #endif],
2649 [int32 testvar;],
2650 samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT32_FROM_RPC_RPC_H=no)])
2651 if test x"$samba_cv_HAVE_INT32_FROM_RPC_RPC_H" = x"yes"; then
2652     AC_DEFINE(HAVE_INT32_FROM_RPC_RPC_H,1,[Whether int32 typedef is included by rpc/rpc.h])
2653 fi
2654
2655 AC_CACHE_CHECK([for uint32 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT32_FROM_RPC_RPC_H,[
2656 AC_TRY_COMPILE([#include <sys/types.h>
2657 #if defined(HAVE_RPC_RPC_H)
2658 #include <rpc/rpc.h>
2659 #endif],
2660 [uint32 testvar;],
2661 samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=no)])
2662 if test x"$samba_cv_HAVE_UINT32_FROM_RPC_RPC_H" = x"yes"; then
2663     AC_DEFINE(HAVE_UINT32_FROM_RPC_RPC_H,1,[Whether uint32 typedef is included by rpc/rpc.h])
2664 fi
2665
2666 dnl
2667 dnl Some systems (SCO) have a problem including
2668 dnl <prot.h> and <rpc/rpc.h> due to AUTH_ERROR being defined
2669 dnl as a #define in <prot.h> and as part of an enum
2670 dnl in <rpc/rpc.h>.
2671 dnl
2672
2673 AC_CACHE_CHECK([for conflicting AUTH_ERROR define in rpc/rpc.h],samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT,[
2674 AC_TRY_COMPILE([#include <sys/types.h>
2675 #ifdef HAVE_SYS_SECURITY_H
2676 #include <sys/security.h>
2677 #include <prot.h>
2678 #endif  /* HAVE_SYS_SECURITY_H */
2679 #if defined(HAVE_RPC_RPC_H)
2680 #include <rpc/rpc.h>
2681 #endif],
2682 [int testvar;],
2683 samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no,samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=yes)])
2684 if test x"$samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT" = x"yes"; then
2685     AC_DEFINE(HAVE_RPC_AUTH_ERROR_CONFLICT,1,[Whether there is a conflicting AUTH_ERROR define in rpc/rpc.h])
2686 fi
2687
2688 AC_MSG_CHECKING([for test routines])
2689 AC_TRY_RUN([#include "${srcdir-.}/../tests/trivial.c"],
2690            AC_MSG_RESULT(yes),
2691            AC_MSG_ERROR([cant find test code. Aborting config]),
2692            AC_MSG_WARN([cannot run when cross-compiling]))
2693
2694 AC_CACHE_CHECK([for ftruncate extend],samba_cv_HAVE_FTRUNCATE_EXTEND,[
2695 AC_TRY_RUN([#include "${srcdir-.}/../tests/ftruncate.c"],
2696            samba_cv_HAVE_FTRUNCATE_EXTEND=yes,samba_cv_HAVE_FTRUNCATE_EXTEND=no,samba_cv_HAVE_FTRUNCATE_EXTEND=cross)])
2697 if test x"$samba_cv_HAVE_FTRUNCATE_EXTEND" = x"yes"; then
2698     AC_DEFINE(HAVE_FTRUNCATE_EXTEND,1,[Truncate extend])
2699 fi
2700
2701 AC_CACHE_CHECK([for broken getgroups],samba_cv_HAVE_BROKEN_GETGROUPS,[
2702 AC_TRY_RUN([#include "${srcdir-.}/../tests/getgroups.c"],
2703            samba_cv_HAVE_BROKEN_GETGROUPS=yes,samba_cv_HAVE_BROKEN_GETGROUPS=no,samba_cv_HAVE_BROKEN_GETGROUPS=cross)])
2704 if test x"$samba_cv_HAVE_BROKEN_GETGROUPS" = x"yes"; then
2705     AC_DEFINE(HAVE_BROKEN_GETGROUPS,1,[Whether getgroups is broken])
2706 fi
2707
2708 SMB_CHECK_SYSCONF(_SC_NGROUPS_MAX)
2709 SMB_CHECK_SYSCONF(_SC_NPROC_ONLN)
2710 SMB_CHECK_SYSCONF(_SC_NPROCESSORS_ONLN)
2711 SMB_CHECK_SYSCONF(_SC_PAGESIZE)
2712 AC_CHECK_FUNCS(getpagesize)
2713
2714 ################################################
2715 # look for a method of setting the effective uid
2716 seteuid=no;
2717
2718 if test $seteuid = no; then
2719 AC_CACHE_CHECK([for setreuid],samba_cv_USE_SETREUID,[
2720 AC_TRY_RUN([
2721 #define AUTOCONF_TEST 1
2722 #define USE_SETREUID 1
2723 #include "confdefs.h"
2724 #include "${srcdir-.}/lib/util_sec.c"],
2725            samba_cv_USE_SETREUID=yes,samba_cv_USE_SETREUID=no,samba_cv_USE_SETREUID=cross)])
2726 if test x"$samba_cv_USE_SETREUID" = x"yes"; then
2727     seteuid=yes;AC_DEFINE(USE_SETREUID,1,[Whether setreuid() is available])
2728 fi
2729 fi
2730
2731 # we check for setresuid second as it conflicts with AIO on Linux. 
2732 # see http://samba.org/~tridge/junkcode/aio_uid.c
2733 if test $seteuid = no; then
2734 AC_CACHE_CHECK([for setresuid],samba_cv_USE_SETRESUID,[
2735 AC_TRY_RUN([
2736 #define AUTOCONF_TEST 1
2737 #define USE_SETRESUID 1
2738 #include "confdefs.h"
2739 #include "${srcdir-.}/lib/util_sec.c"],
2740            samba_cv_USE_SETRESUID=yes,samba_cv_USE_SETRESUID=no,samba_cv_USE_SETRESUID=cross)])
2741 if test x"$samba_cv_USE_SETRESUID" = x"yes"; then
2742     seteuid=yes;AC_DEFINE(USE_SETRESUID,1,[Whether setresuid() is available])
2743 fi
2744 fi
2745
2746 if test $seteuid = no; then
2747 AC_CACHE_CHECK([for seteuid],samba_cv_USE_SETEUID,[
2748 AC_TRY_RUN([
2749 #define AUTOCONF_TEST 1
2750 #define USE_SETEUID 1
2751 #include "confdefs.h"
2752 #include "${srcdir-.}/lib/util_sec.c"],
2753            samba_cv_USE_SETEUID=yes,samba_cv_USE_SETEUID=no,samba_cv_USE_SETEUID=cross)])
2754 if test x"$samba_cv_USE_SETEUID" = x"yes"; then
2755     seteuid=yes;AC_DEFINE(USE_SETEUID,1,[Whether seteuid() is available])
2756 fi
2757 fi
2758
2759 if test $seteuid = no; then
2760 AC_CACHE_CHECK([for setuidx],samba_cv_USE_SETUIDX,[
2761 AC_TRY_RUN([
2762 #define AUTOCONF_TEST 1
2763 #define USE_SETUIDX 1
2764 #include "confdefs.h"
2765 #include "${srcdir-.}/lib/util_sec.c"],
2766            samba_cv_USE_SETUIDX=yes,samba_cv_USE_SETUIDX=no,samba_cv_USE_SETUIDX=cross)])
2767 if test x"$samba_cv_USE_SETUIDX" = x"yes"; then
2768     seteuid=yes;AC_DEFINE(USE_SETUIDX,1,[Whether setuidx() is available])
2769 fi
2770 fi
2771
2772 AC_CACHE_CHECK([for the Darwin initgroups system call],
2773         samba_cv_DARWIN_INITGROUPS,
2774         AC_TRY_LINK([
2775 #include <sys/syscall.h>
2776 #include <unistd.h>
2777         ],
2778         [ syscall(SYS_initgroups, 16, NULL, NULL, 0); ],
2779         samba_cv_DARWIN_INITGROUPS=yes,
2780         samba_cv_DARWIN_INITGROUPS=no)
2781 )
2782
2783 if test x"$samba_cv_DARWIN_INITGROUPS" = x"yes" ; then
2784     AC_DEFINE(HAVE_DARWIN_INITGROUPS, 1,
2785         [Whether to use the Darwin-specific initgroups system call])
2786 fi
2787
2788 AC_CACHE_CHECK([for fcntl locking],samba_cv_HAVE_FCNTL_LOCK,[
2789 AC_TRY_RUN([#include "${srcdir-.}/../tests/fcntl_lock.c"],
2790            samba_cv_HAVE_FCNTL_LOCK=yes,samba_cv_HAVE_FCNTL_LOCK=no,samba_cv_HAVE_FCNTL_LOCK=cross)])
2791 if test x"$samba_cv_HAVE_FCNTL_LOCK" = x"yes"; then
2792     AC_DEFINE(HAVE_FCNTL_LOCK,1,[Whether fcntl locking is available])
2793 fi
2794
2795 # glibc up to 2.3.6 had dangerously broken posix_fallocate(). DON'T USE IT.
2796 AC_CACHE_CHECK([for broken posix_fallocate],samba_cv_HAVE_BROKEN_POSIX_FALLOCATE,[
2797 AC_TRY_COMPILE([
2798   #define _XOPEN_SOURCE 600
2799   #include <stdlib.h>
2800   #if defined(__GLIBC__) && ((__GLIBC__ < 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4))
2801   #error probably broken posix_fallocate
2802   #endif
2803 ], [
2804 ], 
2805 samba_cv_HAVE_BROKEN_POSIX_FALLOCATE=no,samba_cv_HAVE_BROKEN_POSIX_FALLOCATE=yes)])
2806 if test x"$samba_cv_HAVE_BROKEN_POSIX_FALLOCATE" = xyes; then
2807         AC_DEFINE(HAVE_BROKEN_POSIX_FALLOCATE, 1, Whether we have a broken posix_fallocate)
2808 fi
2809
2810
2811 AC_CACHE_CHECK([for st_blocks in struct stat],samba_cv_HAVE_STAT_ST_BLOCKS,[
2812 AC_TRY_COMPILE([#include <sys/types.h>
2813 #include <sys/stat.h>
2814 #include <unistd.h>],
2815 [struct stat st;  st.st_blocks = 0;],
2816 samba_cv_HAVE_STAT_ST_BLOCKS=yes,samba_cv_HAVE_STAT_ST_BLOCKS=no,samba_cv_HAVE_STAT_ST_BLOCKS=cross)])
2817 if test x"$samba_cv_HAVE_STAT_ST_BLOCKS" = x"yes"; then
2818     AC_DEFINE(HAVE_STAT_ST_BLOCKS,1,[Whether the stat struct has a st_block property])
2819 fi
2820
2821 AC_CACHE_CHECK([for 32 bit blkcnt_t],samba_cv_SIZEOF_BLKCNT_T_4,[
2822 AC_TRY_RUN([
2823 #if defined(HAVE_UNISTD_H)
2824 #include <unistd.h>
2825 #endif
2826 #include <stdio.h>
2827 #include <sys/types.h>
2828 #include <sys/stat.h>
2829 main() { exit((sizeof(blkcnt_t) == 4) ? 0 : 1); }],
2830 samba_cv_SIZEOF_BLKCNT_T_4=yes,samba_cv_SIZEOF_BLKCNT_T_4=no,samba_cv_SIZEOF_BLKCNT_T_4=cross)])
2831 if test x"$samba_cv_SIZEOF_BLKCNT_T_4" = x"yes"; then
2832     AC_DEFINE(SIZEOF_BLKCNT_T_4,1,[The size of the 'blkcnt_t' type])
2833 fi
2834
2835 AC_CACHE_CHECK([for 64 bit blkcnt_t],samba_cv_SIZEOF_BLKCNT_T_8,[
2836 AC_TRY_RUN([
2837 #if defined(HAVE_UNISTD_H)
2838 #include <unistd.h>
2839 #endif
2840 #include <stdio.h>
2841 #include <sys/types.h>
2842 #include <sys/stat.h>
2843 main() { exit((sizeof(blkcnt_t) == 8) ? 0 : 1); }],
2844 samba_cv_SIZEOF_BLKCNT_T_8=yes,samba_cv_SIZEOF_BLKCNT_T_8=no,samba_cv_SIZEOF_BLKCNT_T_8=cross)])
2845 if test x"$samba_cv_SIZEOF_BLKCNT_T_8" = x"yes"; then
2846     AC_DEFINE(SIZEOF_BLKCNT_T_8,1,[The size of the 'blkcnt_t' type])
2847 fi
2848
2849 AC_CACHE_CHECK([for st_blksize in struct stat],samba_cv_HAVE_STAT_ST_BLKSIZE,[
2850 AC_TRY_COMPILE([#include <sys/types.h>
2851 #include <sys/stat.h>
2852 #include <unistd.h>],
2853 [struct stat st;  st.st_blksize = 0;],
2854 samba_cv_HAVE_STAT_ST_BLKSIZE=yes,samba_cv_HAVE_STAT_ST_BLKSIZE=no,samba_cv_HAVE_STAT_ST_BLKSIZE=cross)])
2855 if test x"$samba_cv_HAVE_STAT_ST_BLKSIZE" = x"yes"; then
2856     AC_DEFINE(HAVE_STAT_ST_BLKSIZE,1,[Whether the stat struct has a st_blksize property])
2857 fi
2858
2859 AC_CACHE_CHECK([for st_flags in struct stat],
2860         samba_cv_HAVE_STAT_ST_FLAGS,
2861         [
2862             AC_TRY_COMPILE([#include <sys/types.h>
2863 #include <sys/stat.h>
2864 #include <unistd.h>],
2865             [struct stat st;  st.st_flags = 0;],
2866             samba_cv_HAVE_STAT_ST_FLAGS=yes,
2867             samba_cv_HAVE_STAT_ST_FLAGS=no,
2868             samba_cv_HAVE_STAT_ST_FLAGS=cross)
2869         ])
2870
2871 if test x"$samba_cv_HAVE_STAT_ST_FLAGS" = x"yes"; then
2872     AC_DEFINE(HAVE_STAT_ST_FLAGS, 1,
2873                 [Whether the stat struct has a st_flags member])
2874 fi
2875
2876 AC_CACHE_CHECK([for broken nisplus include files],samba_cv_BROKEN_NISPLUS_INCLUDE_FILES,[
2877 AC_TRY_COMPILE([
2878 #include <sys/types.h>
2879 #include <sys/acl.h>
2880 #if defined(HAVE_RPCSVC_NIS_H)
2881 #include <rpcsvc/nis.h>
2882 #endif],
2883 [int i;],
2884 samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no,samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=yes)])
2885 if test x"$samba_cv_BROKEN_NISPLUS_INCLUDE_FILES" = x"yes"; then
2886         AC_DEFINE(BROKEN_NISPLUS_INCLUDE_FILES,1,[Whether the nisplus include files are broken])
2887 fi
2888
2889 AC_CACHE_CHECK([if the realpath function allows a NULL argument],samba_cv_REALPATH_TAKES_NULL,[
2890 AC_TRY_RUN([
2891 #include <stdio.h>
2892 #include <limits.h>
2893 #include <signal.h>
2894
2895 void exit_on_core(int ignored) {
2896         exit(1);
2897 }
2898
2899 main() {
2900         char *newpath;
2901         signal(SIGSEGV, exit_on_core);
2902         newpath = realpath("/tmp", NULL);
2903         exit((newpath != NULL) ? 0 : 1);
2904 }
2905 ],
2906 samba_cv_REALPATH_TAKES_NULL=yes,samba_cv_REALPATH_TAKES_NULL=no,samba_cv_REALPATH_TAKES_NULL=cross)])
2907 if test x"$samba_cv_REALPATH_TAKES_NULL" = x"yes"; then
2908     AC_DEFINE(REALPATH_TAKES_NULL,1,[Whether the realpath function allows NULL])
2909 fi
2910
2911 #################################################
2912 # check for AFS clear-text auth support
2913 samba_cv_WITH_AFS=no
2914 AC_MSG_CHECKING(whether to use AFS clear-text auth)
2915 AC_ARG_WITH(afs,
2916 [AS_HELP_STRING([--with-afs], [Include AFS clear-text auth support (default=no)])],
2917 [ case "$withval" in
2918   yes|auto)
2919     AC_MSG_RESULT($withval)
2920     samba_cv_WITH_AFS=$withval
2921     ;;
2922   *)
2923     AC_MSG_RESULT(no)
2924     ;;
2925   esac ],
2926   AC_MSG_RESULT(no)
2927 )
2928
2929 ####################################################
2930 # check for Linux-specific AFS fake-kaserver support
2931 samba_cv_WITH_FAKE_KASERVER=no
2932 AC_MSG_CHECKING(whether to use AFS fake-kaserver)
2933 AC_ARG_WITH(fake-kaserver,
2934 [AS_HELP_STRING([--with-fake-kaserver], [Include AFS fake-kaserver support (default=no)])],
2935 [ case "$withval" in
2936   yes|auto)
2937     AC_MSG_RESULT($withval)
2938     samba_cv_WITH_FAKE_KASERVER=$withval
2939     ;;
2940   *)
2941     AC_MSG_RESULT(no)
2942     ;;
2943   esac ],
2944   AC_MSG_RESULT(no)
2945 )
2946
2947 #################################################
2948 # decide whether we can support WITH_AFS and / or WITH_FAKE_KASERVER
2949 if test x"$samba_cv_WITH_AFS" != x"no" ||
2950    test x"$samba_cv_WITH_FAKE_KASERVER" != x"no"; then
2951
2952     # see if this box has the OpenSSL DES libraries
2953     AC_CHECK_LIB( crypto, DES_pcbc_encrypt, LIBS="$LIBS -lcrypto" , [AC_ERROR(OpenSSL library: libcrypto ot found!)] )
2954
2955     # see if this box has the afs-headers in /usr/include/afs
2956     AC_MSG_CHECKING(for /usr/include/afs)
2957     if test -d /usr/include/afs; then
2958           AC_MSG_RESULT(yes)
2959     else
2960       AC_MSG_RESULT(no)
2961     fi
2962
2963     # check for afs.h
2964     have_afs_headers=no
2965     AC_CHECK_HEADERS(afs.h afs/afs.h)
2966     if test x"$ac_cv_header_afs_h" = x"no" && test x"$ac_cv_header_afs_afs_h" = x"no"; then
2967         if test x"$samba_cv_WITH_FAKE_KASERVER" = x"auto" ||
2968            test x"$samba_cv_WITH_AFS" = x"auto"; then
2969                 AC_MSG_WARN([AFS cannot be supported without afs.h])
2970         else
2971                 AC_MSG_ERROR([AFS cannot be supported without afs.h])
2972         fi
2973     else
2974         have_afs_headers=yes
2975     fi
2976 fi
2977
2978 FAKE_KASERVER_OBJ=""
2979 if test x"$samba_cv_WITH_FAKE_KASERVER" != x"no" && test x"$have_afs_headers" = x"yes"; then
2980     AC_DEFINE(WITH_FAKE_KASERVER,1,[Whether to include AFS fake-kaserver support])
2981     FAKE_KASERVER_OBJ="utils/net_afs.o"
2982 fi
2983 AC_SUBST(FAKE_KASERVER_OBJ)
2984
2985 #################################################
2986 # check whether to compile AFS/NT ACL mapping module
2987 samba_cv_WITH_VFS_AFSACL=no
2988 AC_MSG_CHECKING(whether to use AFS ACL mapping module)
2989 AC_ARG_WITH(vfs-afsacl,
2990 [AS_HELP_STRING([--with-vfs-afsacl], [Include AFS to NT ACL mapping module (default=no)])],
2991 [ case "$withval" in
2992   yes|auto)
2993     AC_MSG_RESULT($withval)
2994     samba_cv_WITH_VFS_AFSACL=yes
2995     ;;
2996   *)
2997     AC_MSG_RESULT(no)
2998     ;;
2999   esac ],
3000   AC_MSG_RESULT(no)
3001 )
3002
3003 if test x"$samba_cv_WITH_VFS_AFSACL" = x"yes"; then
3004    default_shared_modules="$default_shared_modules vfs_afsacl"
3005 fi
3006         
3007 if test x"$samba_cv_WITH_AFS" != x"no" && test x"$have_afs_headers" = x"yes"; then
3008     AC_DEFINE(WITH_AFS,1,[Whether to include AFS clear-text auth support])
3009 fi
3010
3011 #################################################
3012 # check for the DFS clear-text auth system
3013 AC_MSG_CHECKING(whether to use DFS clear-text auth)
3014 AC_ARG_WITH(dfs,
3015 [AS_HELP_STRING([--with-dce-dfs], [Include DCE/DFS clear-text auth support (default=no)])],
3016 [ case "$withval" in
3017   yes)
3018     AC_MSG_RESULT(yes)
3019     AC_DEFINE(WITH_DFS,1,[Whether to include DFS support])
3020     ;;
3021   *)
3022     AC_MSG_RESULT(no)
3023     ;;
3024   esac ],
3025   AC_MSG_RESULT(no)
3026 )
3027
3028 ########################################################
3029 # Compile with LDAP support?
3030
3031 with_ldap_support=auto
3032 AC_MSG_CHECKING([for LDAP support])
3033
3034 AC_ARG_WITH(ldap,
3035 [AS_HELP_STRING([--with-ldap], [LDAP support (default=auto)])],
3036 [ case "$withval" in
3037     yes|no)
3038         with_ldap_support=$withval
3039         ;;
3040   esac ])
3041
3042 AC_MSG_RESULT($with_ldap_support)
3043
3044 SMBLDAP=""
3045 AC_SUBST(SMBLDAP)
3046
3047 if test x"$with_ldap_support" != x"no"; then
3048
3049   ##################################################################
3050   # first test for ldap.h and lber.h
3051   # (ldap.h is required for this test)
3052   AC_CHECK_HEADERS(ldap.h lber.h)
3053
3054   if test x"$ac_cv_header_ldap_h" != x"yes"; then
3055         if test x"$with_ldap_support" = x"yes"; then
3056          AC_MSG_ERROR(ldap.h is needed for LDAP support)
3057         else
3058          AC_MSG_WARN(ldap.h is needed for LDAP support)
3059         fi
3060         
3061         with_ldap_support=no
3062   fi
3063
3064   ##################################################################
3065   # HP/UX does not have ber_tag_t in lber.h - it must be configured as
3066   # unsigned int in include/includes.h
3067   case $host_os in
3068         *hpux*)
3069          AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3070          AC_MSG_WARN(ber_tag_t must be configured in includes.h for hpux)
3071         with_ldap_support=yes
3072         ;;
3073         *)
3074         AC_CHECK_TYPE(ber_tag_t,,,[#include <lber.h>])
3075         if test x"$ac_cv_type_ber_tag_t" != x"yes"; then
3076                 if test x"$with_ldap_support" = x"yes"; then
3077                 AC_MSG_ERROR(ber_tag_t is needed for LDAP support)
3078                 else
3079                 AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3080                 fi
3081                 with_ldap_support=no
3082         fi
3083         ;;
3084   esac
3085 fi
3086
3087 if test x"$with_ldap_support" != x"no"; then
3088   ac_save_LIBS=$LIBS
3089
3090   ##################################################################
3091   # we might need the lber lib on some systems. To avoid link errors
3092   # this test must be before the libldap test
3093   AC_CHECK_LIB_EXT(lber, LDAP_LIBS, ber_scanf)
3094
3095   ########################################################
3096   # If ber_sockbuf_add_io() is available we can add
3097   # SASL wrapping hooks
3098   AC_CHECK_FUNC_EXT(ber_sockbuf_add_io,$LDAP_LIBS)
3099
3100   AC_CACHE_CHECK([for LDAP_OPT_SOCKBUF],samba_cv_HAVE_LDAP_OPT_SOCKBUF,[
3101                  AC_TRY_COMPILE([#include <ldap.h>],
3102                                 [int val = LDAP_OPT_SOCKBUF;],
3103                         samba_cv_HAVE_LDAP_OPT_SOCKBUF=yes,
3104                         samba_cv_HAVE_LDAP_OPT_SOCKBUF=no)])
3105
3106   if test x"$ac_cv_func_ext_ber_sockbuf_add_io" = x"yes" -a \
3107           x"$samba_cv_HAVE_LDAP_OPT_SOCKBUF" = x"yes"; then
3108         AC_DEFINE(HAVE_LDAP_SASL_WRAPPING, 1, [Support for SASL wrapping])
3109   fi
3110
3111   #######################################################
3112   # if we have LBER_OPT_LOG_PRINT_FN, we can intercept
3113   # ldap logging and print it out in the samba logs
3114   AC_CACHE_CHECK([for LBER_OPT_LOG_PRINT_FN],
3115                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN,
3116                  [AC_TRY_COMPILE([#include <lber.h>],
3117                                  [int val = LBER_OPT_LOG_PRINT_FN;],
3118                                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN=yes,
3119                                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN=no)])
3120
3121   if test x"$samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN" = x"yes"; then
3122         AC_DEFINE(HAVE_LBER_LOG_PRINT_FN, 1,
3123                   [Support for LDAP/LBER logging interception])
3124   fi
3125
3126   ########################################################
3127   # now see if we can find the ldap libs in standard paths
3128   AC_CHECK_LIB_EXT(ldap, LDAP_LIBS, ldap_init)
3129
3130   ########################################################
3131   # If we have LDAP, does it's rebind procedure take 2 or 3 arguments?
3132   # Check found in pam_ldap 145.
3133   AC_CHECK_FUNC_EXT(ldap_set_rebind_proc,$LDAP_LIBS)
3134
3135   LIBS="$LIBS $LDAP_LIBS"
3136   AC_CACHE_CHECK(whether ldap_set_rebind_proc takes 3 arguments, smb_ldap_cv_ldap_set_rebind_proc, [
3137     AC_TRY_COMPILE([
3138         #include <lber.h>
3139         #include <ldap.h>],
3140         [ldap_set_rebind_proc(0, 0, 0);],
3141         [smb_ldap_cv_ldap_set_rebind_proc=3],
3142         [smb_ldap_cv_ldap_set_rebind_proc=2]
3143     )
3144   ])
3145
3146   AC_DEFINE_UNQUOTED(LDAP_SET_REBIND_PROC_ARGS, $smb_ldap_cv_ldap_set_rebind_proc, [Number of arguments to ldap_set_rebind_proc])
3147
3148   AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3149
3150   if test x"$ac_cv_lib_ext_ldap_ldap_init" = x"yes"; then
3151     AC_DEFINE(HAVE_LDAP,1,[Whether ldap is available])
3152     CPPFLAGS="$CPPFLAGS -DLDAP_DEPRECATED"
3153     default_static_modules="$default_static_modules pdb_ldap idmap_ldap";
3154     default_shared_modules="$default_shared_modules";
3155     SMBLDAP="lib/smbldap.o"
3156     with_ldap_support=yes
3157     AC_MSG_CHECKING(whether LDAP support is used)
3158     AC_MSG_RESULT(yes)
3159   else
3160     if test x"$with_ldap_support" = x"yes"; then
3161         AC_MSG_ERROR(libldap is needed for LDAP support)
3162     else
3163         AC_MSG_WARN(libldap is needed for LDAP support)
3164     fi
3165
3166     LDAP_LIBS=""
3167     with_ldap_support=no
3168   fi
3169   LIBS=$ac_save_LIBS
3170 fi
3171
3172
3173 #################################################
3174 # active directory support
3175
3176 with_ads_support=auto
3177 AC_MSG_CHECKING([for Active Directory and krb5 support])
3178
3179 AC_ARG_WITH(ads,
3180 [AS_HELP_STRING([--with-ads], [Active Directory support (default=auto)])],
3181 [ case "$withval" in
3182     yes|no)
3183         with_ads_support="$withval"
3184         ;;
3185   esac ])
3186
3187 AC_MSG_RESULT($with_ads_support)
3188
3189 FOUND_KRB5=no
3190 KRB5_LIBS=""
3191
3192 if test x"$with_ldap_support" != x"yes"; then
3193
3194     if test x"$with_ads_support" = x"yes"; then
3195         AC_MSG_ERROR(Active Directory Support requires LDAP support)
3196     elif test x"$with_ads_support" = x"auto"; then
3197         AC_MSG_WARN(Disabling Active Directory support (requires LDAP support))
3198         with_ads_support=no
3199     fi
3200
3201 else
3202
3203     # Check to see whether there is enough LDAP functionality to be able
3204     # to build AD support.
3205
3206 # HPUX and Solaris only has ldap_init; ok, we take care of this in smbldap.c
3207 case "$host_os" in
3208         *hpux* | *solaris*)
3209     AC_CHECK_FUNC_EXT(ldap_init,$LDAP_LIBS)
3210
3211     if test x"$ac_cv_func_ext_ldap_init" != x"yes"; then
3212         if test x"$with_ads_support" = x"yes"; then
3213             AC_MSG_ERROR(Active Directory support on HPUX or Solaris requires ldap_init)
3214         elif test x"$with_ads_support" = x"auto"; then
3215             AC_MSG_WARN(Disabling Active Directory support (requires ldap_init on HPUX or Solaris))
3216             with_ads_support=no
3217         fi
3218     fi
3219     ;;
3220         *)
3221     AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3222
3223     if test x"$ac_cv_func_ext_ldap_initialize" != x"yes"; then
3224         if test x"$with_ads_support" = x"yes"; then
3225             AC_MSG_ERROR(Active Directory support requires ldap_initialize)
3226         elif test x"$with_ads_support" = x"auto"; then
3227             AC_MSG_WARN(Disabling Active Directory support (requires ldap_initialize))
3228             with_ads_support=no
3229         fi
3230     fi
3231     ;;
3232 esac
3233
3234
3235     AC_CHECK_FUNC_EXT(ldap_add_result_entry,$LDAP_LIBS)
3236
3237     if test x"$ac_cv_func_ext_ldap_add_result_entry" != x"yes"; then
3238         if test x"$with_ads_support" = x"yes"; then
3239             AC_MSG_ERROR(Active Directory support requires ldap_add_result_entry)
3240         elif test x"$with_ads_support" = x"auto"; then
3241             AC_MSG_WARN(Disabling Active Directory support (requires ldap_add_result_entry))
3242             with_ads_support=no
3243         fi
3244     fi
3245
3246 fi
3247
3248 if test x"$with_ads_support" != x"no"; then
3249
3250   # Do no harm to the values of CFLAGS and LIBS while testing for
3251   # Kerberos support.
3252
3253   if test x$FOUND_KRB5 = x"no"; then
3254     #################################################
3255     # check for location of Kerberos 5 install
3256     AC_MSG_CHECKING(for kerberos 5 install path)
3257     AC_ARG_WITH(krb5,
3258     [AS_HELP_STRING([--with-krb5=base-dir], [Locate Kerberos 5 support (default=/usr)])],
3259     [ case "$withval" in
3260       no)
3261         AC_MSG_RESULT(no krb5-path given)
3262         ;;
3263       yes)
3264         AC_MSG_RESULT(/usr)
3265         ;;
3266       *)
3267         AC_MSG_RESULT($withval)
3268         KRB5_CFLAGS="-I$withval/include"
3269         KRB5_CPPFLAGS="-I$withval/include"
3270         KRB5_LDFLAGS="-L$withval/lib"
3271         FOUND_KRB5=yes
3272         if test -x "$withval/bin/krb5-config"; then
3273                 KRB5CONFIG=$withval/bin/krb5-config
3274         fi
3275         ;;
3276       esac ],
3277       AC_MSG_RESULT(no krb5-path given)
3278     )
3279   fi
3280
3281   #################################################
3282   # check for krb5-config from recent MIT and Heimdal kerberos 5
3283   AC_PATH_PROG(KRB5CONFIG, krb5-config)
3284   AC_MSG_CHECKING(for working krb5-config)
3285   if test -x "$KRB5CONFIG" && $KRB5CONFIG --libs gssapi > /dev/null ; then
3286     ac_save_CFLAGS=$CFLAGS
3287     CFLAGS="";export CFLAGS
3288     ac_save_LDFLAGS=$LDFLAGS
3289     LDFLAGS="";export LDFLAGS
3290     KRB5_LIBS="`$KRB5CONFIG --libs gssapi`"
3291     KRB5_LDFLAGS="`$KRB5CONFIG --libs gssapi | sed s/-lgss.*//`"
3292     KRB5_CFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
3293     KRB5_CPPFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
3294     CFLAGS=$ac_save_CFLAGS;export CFLAGS
3295     LDFLAGS=$ac_save_LDFLAGS;export LDFLAGS
3296     FOUND_KRB5=yes
3297     AC_MSG_RESULT(yes)
3298   else
3299     AC_MSG_RESULT(no. Fallback to previous krb5 detection strategy)
3300   fi
3301
3302   if test x$FOUND_KRB5 = x"no"; then
3303     #################################################
3304     # see if this box has the SuSE location for the heimdal krb implementation
3305     AC_MSG_CHECKING(for /usr/include/heimdal)
3306     if test -d /usr/include/heimdal; then
3307       if test -f /usr/lib/heimdal/lib/libkrb5.a; then
3308           KRB5_CFLAGS="-I/usr/include/heimdal"
3309           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3310           KRB5_LDFLAGS="-L/usr/lib/heimdal/lib"
3311           FOUND_KRB5=yes
3312           AC_MSG_RESULT(yes)
3313       else
3314           KRB5_CFLAGS="-I/usr/include/heimdal"
3315           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3316           FOUND_KRB5=yes
3317           AC_MSG_RESULT(yes)
3318       fi
3319     else
3320       AC_MSG_RESULT(no)
3321     fi
3322   fi
3323
3324   if test x$FOUND_KRB5 = x"no"; then
3325     #################################################
3326     # see if this box has the RedHat location for kerberos
3327     AC_MSG_CHECKING(for /usr/kerberos)
3328     if test -d /usr/kerberos -a -f /usr/kerberos/lib/libkrb5.a; then
3329       KRB5_LDFLAGS="-L/usr/kerberos/lib"
3330       KRB5_CFLAGS="-I/usr/kerberos/include"
3331       KRB5_CPPFLAGS="-I/usr/kerberos/include"
3332       FOUND_KRB5=yes
3333       AC_MSG_RESULT(yes)
3334     else
3335       AC_MSG_RESULT(no)
3336     fi
3337   fi
3338
3339   if test x$FOUND_KRB5 = x"no"; then
3340     #################################################
3341     # see if this box has the OpenBSD location for heimdal krb5
3342     AC_MSG_CHECKING(for /usr/include/kerberosV)
3343     if test -d /usr/include/kerberosV; then
3344       KRB5_CPPFLAGS="-I/usr/include/kerberosV"
3345       KRB5_LIBS="-lcrypto"
3346       FOUND_KRB5=yes
3347       AC_MSG_RESULT(yes)
3348     else
3349       AC_MSG_RESULT(no)
3350     fi
3351   fi
3352
3353   if test x$FOUND_KRB5 = x"no"; then
3354     #################################################
3355     # see if this box has Solaris MIT kerberos implementation
3356     AC_MSG_CHECKING(for Solaris MIT kerberos)
3357     if test -x "$KRB5CONFIG" && $KRB5CONFIG --version | grep -s Solaris | grep -s MIT > /dev/null ; then
3358        FOUND_KRB5=yes
3359        KRB5_LIBS="-lgss -lkrb5"
3360        KRB5_CFLAGS="`$KRB5CONFIG --cflags`"
3361        KRB5_CPPFLAGS="`$KRB5CONFIG --cflags`"
3362        AC_MSG_RESULT(yes)
3363     else
3364       AC_MSG_RESULT(no)
3365     fi
3366   fi
3367
3368   ac_save_CFLAGS=$CFLAGS
3369   ac_save_CPPFLAGS=$CPPFLAGS
3370   ac_save_LDFLAGS=$LDFLAGS
3371
3372   # remove needless evil rpath stuff as early as possible:
3373   LIB_REMOVE_USR_LIB(KRB5_LIBS)
3374   LIB_REMOVE_USR_LIB(KRB5_LDFLAGS)
3375   CFLAGS="$KRB5_CFLAGS $CFLAGS"
3376   CPPFLAGS="$KRB5_CPPFLAGS $CPPFLAGS"
3377   LDFLAGS="$KRB5_LDFLAGS $LDFLAGS"
3378
3379   KRB5_LIBS="$KRB5_LDFLAGS $KRB5_LIBS"
3380
3381   # now check for krb5.h. Some systems have the libraries without the headers!
3382   # note that this check is done here to allow for different kerberos
3383   # include paths
3384   AC_CHECK_HEADERS(krb5.h)
3385
3386   if test x"$ac_cv_header_krb5_h" = x"no"; then
3387
3388     # Give a warning if AD support was not explicitly requested,
3389     # i.e with_ads_support = auto, otherwise die with an error.
3390
3391     if test x"$with_ads_support" = x"yes"; then
3392       AC_MSG_ERROR([Active Directory cannot be supported without krb5.h])
3393     else
3394       AC_MSG_WARN([Active Directory cannot be supported without krb5.h])
3395     fi
3396
3397     # Turn off AD support and restore CFLAGS and LIBS variables
3398
3399     with_ads_support="no"
3400
3401     CFLAGS=$ac_save_CFLAGS
3402     CPPFLAGS=$ac_save_CPPFLAGS
3403     LDFLAGS=$ac_save_LDFLAGS
3404   fi
3405
3406   # check for new heimdal KRB5_DEPRECATED handling
3407
3408   AC_CACHE_CHECK([for KRB5_DEPRECATED define taking an identifier],
3409                 samba_cv_HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER,[
3410     AC_TRY_COMPILE(
3411       [#define KRB5_DEPRECATED 1
3412       #include <krb5.h>],
3413       [],
3414       samba_cv_HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER=yes,
3415       samba_cv_HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER=no)])
3416
3417   if test x"$samba_cv_HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER" = x"yes"; then
3418     AC_DEFINE(HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER, 1,
3419                [Whether to use deprecated krb5 interfaces])
3420   fi
3421 fi
3422
3423 # Now we have determined whether we really want ADS support
3424 use_ads=no
3425 if test x"$with_ads_support" != x"no"; then
3426   use_ads=yes
3427   have_gssapi=no
3428   ac_save_LIBS=$LIBS
3429
3430   # now check for gssapi headers.  This is also done here to allow for
3431   # different kerberos include paths
3432   AC_CHECK_HEADERS(gssapi.h gssapi/gssapi_generic.h gssapi/gssapi.h gssapi/gssapi_ext.h gssapi/gssapi_krb5.h com_err.h)
3433
3434   ##################################################################
3435   # we might need the k5crypto and com_err libraries on some systems
3436   AC_CHECK_LIB_EXT(com_err, KRB5_LIBS, _et_list)
3437   AC_CHECK_LIB_EXT(k5crypto, KRB5_LIBS, krb5_encrypt_data)
3438
3439   # Heimdal checks.
3440   AC_CHECK_LIB_EXT(crypto, KRB5_LIBS, des_set_key)
3441   AC_CHECK_LIB_EXT(asn1, KRB5_LIBS, copy_Authenticator)
3442   AC_CHECK_LIB_EXT(roken, KRB5_LIBS, roken_getaddrinfo_hostspec)
3443
3444   # Heimdal checks. On static Heimdal gssapi must be linked before krb5.
3445   AC_CHECK_LIB_EXT(gssapi, KRB5_LIBS, gss_display_status,[],[],have_gssapi=yes)
3446
3447   ########################################################
3448   # now see if we can find the krb5 libs in standard paths
3449   # or as specified above
3450   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_mk_req_extended)
3451   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_kt_compare)
3452
3453   ########################################################
3454   # now see if we can find the gssapi libs in standard paths
3455   if test x"$have_gssapi" != x"yes"; then
3456      AC_CHECK_LIB_EXT(gssapi_krb5, KRB5_LIBS,gss_display_status,[],[],have_gssapi=yes)
3457      AC_CHECK_LIB_EXT(gss, KRB5_LIBS,gss_display_status,[],[],have_gssapi=yes)
3458   fi
3459   ################################################################
3460   # test for AD / GSSAPI support being enabled
3461   if test x"$have_gssapi" != xyes ; then
3462         AC_MSG_WARN([Samba cannot be supported without GSSAPI])
3463         use_ads=no
3464   else
3465         AC_DEFINE(HAVE_GSSAPI, , [Whether the platform has GSSAPI support])
3466   fi
3467
3468   # This is for FreeBSD (and possibly others). gss_mech_krb5 is a
3469   # #define to GSS_KRB5_MECHANISM, which is defined in -lgssapi_krb5
3470   # Also, gsskrb5_extract_authz_data_from_sec_context is in -lgssapi_krb5
3471   AC_CHECK_LIB_EXT(gssapi_krb5, KRB5_LIBS, GSS_KRB5_MECHANISM,
3472                    [KRB5_LIBS="$KRB5_LIBS -lgssapi_krb5"])
3473
3474   AC_CHECK_FUNC_EXT(krb5_set_real_time, $KRB5_LIBS)
3475   AC_CHECK_FUNC_EXT(krb5_set_default_in_tkt_etypes, $KRB5_LIBS)
3476   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_enctypes, $KRB5_LIBS)
3477   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_ktypes, $KRB5_LIBS)
3478   AC_CHECK_FUNC_EXT(krb5_principal2salt, $KRB5_LIBS)
3479   AC_CHECK_FUNC_EXT(krb5_c_string_to_key, $KRB5_LIBS)
3480   AC_CHECK_FUNC_EXT(krb5_get_pw_salt, $KRB5_LIBS)
3481   AC_CHECK_FUNC_EXT(krb5_string_to_key_salt, $KRB5_LIBS)
3482   AC_CHECK_FUNC_EXT(krb5_auth_con_setkey, $KRB5_LIBS)
3483   AC_CHECK_FUNC_EXT(krb5_auth_con_setuseruserkey, $KRB5_LIBS)
3484   AC_CHECK_FUNC_EXT(krb5_get_permitted_enctypes, $KRB5_LIBS)
3485   AC_CHECK_FUNC_EXT(krb5_get_default_in_tkt_etypes, $KRB5_LIBS)
3486   AC_CHECK_FUNC_EXT(krb5_free_data_contents, $KRB5_LIBS)
3487   AC_CHECK_FUNC_EXT(krb5_principal_get_comp_string, $KRB5_LIBS)
3488   AC_CHECK_FUNC_EXT(krb5_free_unparsed_name, $KRB5_LIBS)
3489   AC_CHECK_FUNC_EXT(krb5_free_keytab_entry_contents, $KRB5_LIBS)
3490   AC_CHECK_FUNC_EXT(krb5_kt_free_entry, $KRB5_LIBS)
3491   AC_CHECK_FUNC_EXT(krb5_krbhst_init, $KRB5_LIBS)
3492   AC_CHECK_FUNC_EXT(krb5_krbhst_get_addrinfo, $KRB5_LIBS)
3493   AC_CHECK_FUNC_EXT(krb5_crypto_init, $KRB5_LIBS)
3494   AC_CHECK_FUNC_EXT(krb5_crypto_destroy, $KRB5_LIBS)
3495   AC_CHECK_FUNC_EXT(krb5_c_verify_checksum, $KRB5_LIBS)
3496   AC_CHECK_FUNC_EXT(krb5_principal_compare_any_realm, $KRB5_LIBS)
3497   AC_CHECK_FUNC_EXT(krb5_parse_name_norealm, $KRB5_LIBS)
3498   AC_CHECK_FUNC_EXT(krb5_princ_size, $KRB5_LIBS)
3499   AC_CHECK_FUNC_EXT(krb5_make_principal, $KRB5_LIBS)
3500   AC_CHECK_FUNC_EXT(krb5_principal_get_num_comp, $KRB5_LIBS)
3501   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_set_pac_request, $KRB5_LIBS)
3502   AC_CHECK_FUNC_EXT(krb5_get_renewed_creds, $KRB5_LIBS)
3503   AC_CHECK_FUNC_EXT(krb5_free_error_contents, $KRB5_LIBS)
3504   AC_CHECK_FUNC_EXT(initialize_krb5_error_table, $KRB5_LIBS)
3505   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_alloc, $KRB5_LIBS)
3506   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_free, $KRB5_LIBS)
3507   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_get_error, $KRB5_LIBS)
3508   AC_CHECK_FUNC_EXT(krb5_enctype_to_string, $KRB5_LIBS)
3509   AC_CHECK_FUNC_EXT(krb5_fwd_tgt_creds, $KRB5_LIBS)
3510   AC_CHECK_FUNC_EXT(krb5_auth_con_set_req_cksumtype, $KRB5_LIBS)
3511   AC_CHECK_FUNC_EXT(krb5_get_creds_opt_alloc, $KRB5_LIBS)
3512   AC_CHECK_FUNC_EXT(krb5_get_creds_opt_set_impersonate, $KRB5_LIBS)
3513   AC_CHECK_FUNC_EXT(krb5_get_creds, $KRB5_LIBS)
3514   AC_CHECK_FUNC_EXT(krb5_get_credentials_for_user, $KRB5_LIBS)
3515   AC_CHECK_FUNC_EXT(krb5_get_host_realm, $KRB5_LIBS)
3516   AC_CHECK_FUNC_EXT(krb5_free_host_realm, $KRB5_LIBS)
3517   AC_CHECK_FUNC_EXT(krb5_get_init_creds_keytab, $KRB5_LIBS)
3518   AC_CHECK_FUNC_EXT(krb5_build_principal_alloc_va, $KRB5_LIBS)
3519   AC_CHECK_FUNC_EXT(krb5_cc_get_lifetime, $KRB5_LIBS)
3520   AC_CHECK_FUNC_EXT(krb5_cc_retrieve_cred, $KRB5_LIBS)
3521   AC_CHECK_FUNC_EXT(krb5_free_checksum_contents, $KRB5_LIBS)
3522   AC_CHECK_FUNC_EXT(krb5_create_checksum, $KRB5_LIBS)
3523   AC_CHECK_FUNC_EXT(krb5_c_make_checksum, $KRB5_LIBS)
3524   AC_CHECK_FUNC_EXT(gss_krb5_import_cred, $KRB5_LIBS)
3525   AC_CHECK_FUNC_EXT(gss_get_name_attribute, $KRB5_LIBS)
3526   AC_CHECK_FUNC_EXT(gsskrb5_extract_authz_data_from_sec_context, $KRB5_LIBS)
3527   AC_CHECK_FUNC_EXT(gss_mech_krb5, $KRB5_LIBS)
3528   AC_CHECK_FUNC_EXT(gss_oid_equal, $KRB5_LIBS)
3529   AC_CHECK_FUNC_EXT(gss_inquire_sec_context_by_oid, $KRB5_LIBS)
3530   AC_CHECK_FUNC_EXT(gss_wrap_iov, $KRB5_LIBS)
3531
3532   # MIT krb5 1.8 does not expose this call (yet)
3533   AC_CHECK_DECLS(krb5_get_credentials_for_user, [], [], [#include <krb5.h>])
3534
3535   # MIT krb5 1.7beta3 (in Ubuntu Karmic) does not have this declaration
3536   # but does have the symbol
3537   AC_CHECK_DECLS(krb5_auth_con_set_req_cksumtype, [], [], [#include <krb5.h>])
3538
3539   LIBS="$KRB5_LIBS $LIBS"
3540
3541   AC_CACHE_CHECK(whether krb5_get_init_creds_opt_free takes a context argument,
3542           smb_krb5_cv_creds_opt_free_context,
3543           [
3544                 AC_TRY_COMPILE([
3545                     #include <krb5.h>],
3546                     [
3547                         krb5_context ctx;
3548                         krb5_get_init_creds_opt *opt = NULL;
3549                         krb5_get_init_creds_opt_free(ctx, opt);
3550                     ],
3551                     [smb_krb5_cv_creds_opt_free_context=yes],
3552                     [smb_krb5_cv_creds_opt_free_context=no]
3553                 )
3554           ])
3555
3556   if test x"$smb_krb5_cv_creds_opt_free_context" = x"yes" ; then
3557         AC_DEFINE(KRB5_CREDS_OPT_FREE_REQUIRES_CONTEXT, 1,
3558             [Whether krb5_get_init_creds_opt_free takes a context argument])
3559   fi
3560
3561   AC_CACHE_CHECK([for checksum in krb5_checksum],
3562                 samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM,[
3563     AC_TRY_COMPILE([#include <krb5.h>],
3564       [krb5_checksum cksum; cksum.checksum.length = 0;],
3565       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=yes,
3566       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=no)])
3567
3568   if test x"$samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM" = x"yes"; then
3569     AC_DEFINE(HAVE_CHECKSUM_IN_KRB5_CHECKSUM,1,
3570                [Whether the krb5_checksum struct has a checksum property])
3571   fi
3572
3573   AC_CACHE_CHECK([for etype in EncryptedData],
3574                 samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA,[
3575     AC_TRY_COMPILE([#include <krb5.h>],
3576       [EncryptedData edata; edata.etype = 0;],
3577       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=yes,
3578       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=no)])
3579
3580   if test x"$samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA" = x"yes"; then
3581     AC_DEFINE(HAVE_ETYPE_IN_ENCRYPTEDDATA,1,
3582                [Whether the EncryptedData struct has a etype property])
3583   fi
3584
3585   AC_CACHE_CHECK([for ticket pointer in krb5_ap_req],
3586                 samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,[
3587     AC_TRY_COMPILE([#include <krb5.h>],
3588       [krb5_ap_req *ap_req; ap_req->ticket = NULL;],
3589       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=yes,
3590       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=no)])
3591
3592   if test x"$samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ" = x"yes"; then
3593     AC_DEFINE(HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,1,
3594                [Whether the krb5_ap_req struct has a ticket pointer])
3595   fi
3596
3597   AC_CACHE_CHECK([for e_data pointer in krb5_error],
3598                 samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR,[
3599     AC_TRY_COMPILE([#include <krb5.h>],
3600       [krb5_error err; err.e_data = NULL;],
3601       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=yes,
3602       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=no)])
3603
3604   if test x"$samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR" = x"yes"; then
3605     AC_DEFINE(HAVE_E_DATA_POINTER_IN_KRB5_ERROR,1,
3606                [Whether the krb5_error struct has a e_data pointer])
3607   fi
3608
3609   AC_CACHE_CHECK([for krb5_crypto type],
3610                 samba_cv_HAVE_KRB5_CRYPTO,[
3611     AC_TRY_COMPILE([#include <krb5.h>],
3612       [krb5_crypto crypto;],
3613       samba_cv_HAVE_KRB5_CRYPTO=yes,
3614       samba_cv_HAVE_KRB5_CRYPTO=no)])
3615
3616   if test x"$samba_cv_HAVE_KRB5_CRYPTO" = x"yes"; then
3617     AC_DEFINE(HAVE_KRB5_CRYPTO,1,
3618                [Whether the type krb5_crypto exists])
3619   fi
3620
3621   AC_CACHE_CHECK([for addrtype in krb5_address],
3622                 samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS,[
3623     AC_TRY_COMPILE([#include <krb5.h>],
3624       [krb5_address kaddr; kaddr.addrtype = ADDRTYPE_INET;],
3625       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=yes,
3626       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=no)])
3627
3628   if test x"$samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS" = x"yes"; then
3629     AC_DEFINE(HAVE_ADDRTYPE_IN_KRB5_ADDRESS,1,
3630                [Whether the krb5_address struct has a addrtype property])
3631   fi
3632
3633   AC_CACHE_CHECK([for addr_type in krb5_address],
3634                  samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,[
3635     AC_TRY_COMPILE([#include <krb5.h>],
3636       [krb5_address kaddr; kaddr.addr_type = KRB5_ADDRESS_INET;],
3637       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=yes,
3638       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=no)])
3639
3640   if test x"$samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS" = x"yes"; then
3641     AC_DEFINE(HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,1,
3642               [Whether the krb5_address struct has a addr_type property])
3643   fi
3644
3645   AC_CACHE_CHECK([for keyvalue in krb5_keyblock],
3646                  samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE,[
3647     AC_TRY_COMPILE([#include <krb5.h>],
3648       [krb5_keyblock key; key.keyvalue.data = NULL;],
3649       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=yes,
3650       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=no)])
3651
3652   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE" = x"yes"; then
3653     AC_DEFINE(HAVE_KRB5_KEYBLOCK_KEYVALUE,1,
3654               [Whether the krb5_keyblock struct has a keyvalue property])
3655   fi
3656
3657   found_arcfour_hmac=no
3658   AC_CACHE_CHECK([for ENCTYPE_ARCFOUR_HMAC_MD5],
3659                  samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,[
3660     AC_TRY_COMPILE([#include <krb5.h>],
3661       [krb5_enctype enctype; enctype = ENCTYPE_ARCFOUR_HMAC_MD5;],
3662       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=yes,
3663       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=no)])
3664   AC_CACHE_CHECK([for KEYTYPE_ARCFOUR_56],
3665                  samba_cv_HAVE_KEYTYPE_ARCFOUR_56,[
3666     AC_TRY_COMPILE([#include <krb5.h>],
3667       [krb5_keytype keytype; keytype = KEYTYPE_ARCFOUR_56;],
3668       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=yes,
3669       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=no)])
3670 # Heimdals with KEYTYPE_ARCFOUR but not KEYTYPE_ARCFOUR_56 are broken
3671 # w.r.t. arcfour and windows, so we must not enable it here
3672   if test x"$samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5" = x"yes" -a\
3673           x"$samba_cv_HAVE_KEYTYPE_ARCFOUR_56" = x"yes"; then
3674     AC_DEFINE(HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,1,
3675               [Whether the ENCTYPE_ARCFOUR_HMAC_MD5 key type definition is available])
3676     found_arcfour_hmac=yes
3677   fi
3678   AC_CACHE_CHECK([for ENCTYPE_ARCFOUR_HMAC],
3679                  samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC,[
3680     AC_TRY_COMPILE([#include <krb5.h>],
3681       [krb5_enctype enctype; enctype = ENCTYPE_ARCFOUR_HMAC;],
3682       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC=yes,
3683       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC=no)])
3684   if test x"$samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC" = x"yes"; then
3685     AC_DEFINE(HAVE_ENCTYPE_ARCFOUR_HMAC,1,
3686               [Whether the ENCTYPE_ARCFOUR_HMAC key type definition is available])
3687     found_arcfour_hmac=yes
3688   fi
3689
3690   AC_CACHE_CHECK([for ENCTYPE_AES128_CTS_HMAC_SHA1_96],
3691                  samba_cv_HAVE_ENCTYPE_AES128_CTS_HMAC_SHA1_96,[
3692     AC_TRY_COMPILE([#include <krb5.h>],
3693       [krb5_enctype enctype; enctype = ENCTYPE_AES128_CTS_HMAC_SHA1_96;],
3694       samba_cv_HAVE_ENCTYPE_AES128_CTS_HMAC_SHA1_96=yes,
3695       samba_cv_HAVE_ENCTYPE_AES128_CTS_HMAC_SHA1_96=no)])
3696   if test x"$samba_cv_HAVE_ENCTYPE_AES128_CTS_HMAC_SHA1_96" = x"yes"; then
3697     AC_DEFINE(HAVE_ENCTYPE_AES128_CTS_HMAC_SHA1_96,1,
3698               [Whether the ENCTYPE_AES128_CTS_HMAC_SHA1_96 key type definition is available])
3699   fi
3700   AC_CACHE_CHECK([for ENCTYPE_AES256_CTS_HMAC_SHA1_96],
3701                  samba_cv_HAVE_ENCTYPE_AES256_CTS_HMAC_SHA1_96,[
3702     AC_TRY_COMPILE([#include <krb5.h>],
3703       [krb5_enctype enctype; enctype = ENCTYPE_AES256_CTS_HMAC_SHA1_96;],
3704       samba_cv_HAVE_ENCTYPE_AES256_CTS_HMAC_SHA1_96=yes,
3705       samba_cv_HAVE_ENCTYPE_AES256_CTS_HMAC_SHA1_96=no)])
3706   if test x"$samba_cv_HAVE_ENCTYPE_AES256_CTS_HMAC_SHA1_96" = x"yes"; then
3707     AC_DEFINE(HAVE_ENCTYPE_AES256_CTS_HMAC_SHA1_96,1,
3708               [Whether the ENCTYPE_AES256_CTS_HMAC_SHA1_96 key type definition is available])
3709   fi
3710
3711   AC_CACHE_CHECK([for AP_OPTS_USE_SUBKEY],
3712                  samba_cv_HAVE_AP_OPTS_USE_SUBKEY,[
3713     AC_TRY_COMPILE([#include <krb5.h>],
3714       [krb5_flags ap_options; ap_options = AP_OPTS_USE_SUBKEY;],
3715       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=yes,
3716       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=no)])
3717
3718   if test x"$samba_cv_HAVE_AP_OPTS_USE_SUBKEY" = x"yes"; then
3719     AC_DEFINE(HAVE_AP_OPTS_USE_SUBKEY,1,
3720               [Whether the AP_OPTS_USE_SUBKEY ap option is available])
3721   fi
3722
3723   AC_CACHE_CHECK([for KV5M_KEYTAB],
3724                  samba_cv_HAVE_KV5M_KEYTAB,[
3725     AC_TRY_COMPILE([#include <krb5.h>],
3726       [krb5_keytab_entry entry; entry.magic = KV5M_KEYTAB;],
3727       samba_cv_HAVE_KV5M_KEYTAB=yes,
3728       samba_cv_HAVE_KV5M_KEYTAB=no)])
3729
3730   if test x"$samba_cv_HAVE_KV5M_KEYTAB" = x"yes"; then
3731       AC_DEFINE(HAVE_KV5M_KEYTAB,1,
3732              [Whether the KV5M_KEYTAB option is available])
3733   fi
3734
3735   AC_CACHE_CHECK([for KRB5_KU_OTHER_CKSUM],
3736                  samba_cv_HAVE_KRB5_KU_OTHER_CKSUM,[
3737     AC_TRY_COMPILE([#include <krb5.h>],
3738       [krb5_keyusage usage = KRB5_KU_OTHER_CKSUM;],
3739       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=yes,
3740       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=no)])
3741
3742   if test x"$samba_cv_HAVE_KRB5_KU_OTHER_CKSUM" = x"yes"; then
3743     AC_DEFINE(HAVE_KRB5_KU_OTHER_CKSUM,1,
3744               [Whether KRB5_KU_OTHER_CKSUM is available])
3745   fi
3746
3747   AC_CACHE_CHECK([for KRB5_KEYUSAGE_APP_DATA_CKSUM],
3748                  samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,[
3749     AC_TRY_COMPILE([#include <krb5.h>],
3750       [krb5_keyusage usage = KRB5_KEYUSAGE_APP_DATA_CKSUM;],
3751       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=yes,
3752       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=no)])
3753
3754   if test x"$samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM" = x"yes"; then
3755     AC_DEFINE(HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,1,
3756               [Whether KRB5_KEYUSAGE_APP_DATA_CKSUM is available])
3757   fi
3758
3759   AC_CACHE_CHECK([for the krb5_princ_component macro],
3760                 samba_cv_HAVE_KRB5_PRINC_COMPONENT,[
3761     AC_TRY_LINK([#include <krb5.h>],
3762       [const krb5_data *pkdata; krb5_context context; krb5_principal principal; pkdata = krb5_princ_component(context, principal, 0);],
3763       samba_cv_HAVE_KRB5_PRINC_COMPONENT=yes,
3764       samba_cv_HAVE_KRB5_PRINC_COMPONENT=no)])
3765
3766   if test x"$samba_cv_HAVE_KRB5_PRINC_COMPONENT" = x"yes"; then
3767     AC_DEFINE(HAVE_KRB5_PRINC_COMPONENT,1,
3768                [Whether krb5_princ_component is available])
3769   fi
3770
3771   AC_CACHE_CHECK([for key in krb5_keytab_entry],
3772                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY,[
3773     AC_TRY_COMPILE([#include <krb5.h>],
3774       [krb5_keytab_entry entry; krb5_keyblock e; entry.key = e;],
3775       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=yes,
3776       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=no)])
3777
3778   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY" = x"yes"; then
3779     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEY,1,
3780               [Whether krb5_keytab_entry has key member])
3781   fi
3782
3783   AC_CACHE_CHECK([for keyblock in krb5_keytab_entry],
3784                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,[
3785     AC_TRY_COMPILE([#include <krb5.h>],
3786       [krb5_keytab_entry entry; entry.keyblock.keytype = 0;],
3787       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=yes,
3788       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=no)])
3789
3790   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK" = x"yes"; then
3791     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,1,
3792               [Whether krb5_keytab_entry has keyblock member])
3793   fi
3794
3795   AC_CACHE_CHECK([for magic in krb5_address],
3796                  samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS,[
3797     AC_TRY_COMPILE([#include <krb5.h>],
3798       [krb5_address addr; addr.magic = 0;],
3799       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=yes,
3800       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=no)])
3801
3802   if test x"$samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS" = x"yes"; then
3803     AC_DEFINE(HAVE_MAGIC_IN_KRB5_ADDRESS,1,
3804               [Whether the krb5_address struct has a magic property])
3805   fi
3806
3807   AC_CACHE_CHECK([for WRFILE: keytab support],
3808                 samba_cv_HAVE_WRFILE_KEYTAB,[
3809     AC_TRY_RUN([
3810 #include<krb5.h>
3811   main()
3812   {
3813     krb5_context context;
3814     krb5_keytab keytab;
3815
3816     krb5_init_context(&context);
3817     return krb5_kt_resolve(context, "WRFILE:api", &keytab);
3818   }],
3819   samba_cv_HAVE_WRFILE_KEYTAB=yes,
3820   samba_cv_HAVE_WRFILE_KEYTAB=no)])
3821
3822   if test x"$samba_cv_HAVE_WRFILE_KEYTAB" = x"yes"; then
3823       AC_DEFINE(HAVE_WRFILE_KEYTAB,1,
3824                [Whether the WRFILE:-keytab is supported])
3825   fi
3826
3827   AC_CACHE_CHECK([for krb5_realm type],
3828                 samba_cv_HAVE_KRB5_REALM_TYPE,[
3829     AC_TRY_COMPILE([#include <krb5.h>],
3830       [krb5_realm realm;],
3831       samba_cv_HAVE_KRB5_REALM_TYPE=yes,
3832       samba_cv_HAVE_KRB5_REALM_TYPE=no)])
3833
3834   if test x"$samba_cv_HAVE_KRB5_REALM_TYPE" = x"yes"; then
3835     AC_DEFINE(HAVE_KRB5_REALM_TYPE,1,
3836                [Whether the type krb5_realm exists])
3837   fi
3838
3839   AC_CACHE_CHECK([for krb5_princ_realm returns krb5_realm or krb5_data],
3840                samba_cv_KRB5_PRINC_REALM_RETURNS_REALM,[
3841     AC_TRY_COMPILE([#include <krb5.h>],
3842     [
3843     krb5_context context;
3844     krb5_principal principal;
3845     krb5_realm realm; realm = *krb5_princ_realm(context, principal);],
3846     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=yes,
3847     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=no)])
3848
3849   if test x"$samba_cv_KRB5_PRINC_REALM_RETURNS_REALM" = x"yes"; then
3850     AC_DEFINE(KRB5_PRINC_REALM_RETURNS_REALM,1,
3851               [Whether krb5_princ_realm returns krb5_realm or krb5_data])
3852   fi
3853
3854   AC_CACHE_CHECK([for krb5_addresses type],
3855                 samba_cv_HAVE_KRB5_ADDRESSES,[
3856     AC_TRY_COMPILE([#include <krb5.h>],
3857       [krb5_addresses addr;],
3858       samba_cv_HAVE_KRB5_ADDRESSES=yes,
3859       samba_cv_HAVE_KRB5_ADDRESSES=no)])
3860
3861   if test x"$samba_cv_HAVE_KRB5_ADDRESSES" = x"yes"; then
3862     AC_DEFINE(HAVE_KRB5_ADDRESSES,1,
3863                [Whether the type krb5_addresses type exists])
3864   fi
3865
3866   if test x"$ac_cv_func_ext_krb5_enctype_to_string" = x"yes"; then
3867     AC_CACHE_CHECK([for krb5_error_code krb5_enctype_to_string(krb5_context context, krb5_enctype enctype, char **str)],
3868         smb_krb5_cv_enctype_to_string_takes_krb5_context_arg,[
3869         AC_TRY_RUN_STRICT([
3870                 #include <stdlib.h>
3871                 #include <krb5.h>
3872                 int main(void) {
3873                         krb5_context context = NULL;
3874                         char *str = NULL;
3875                         krb5_enctype_to_string(context, 1, &str);
3876                         if (str) free (str); 
3877                         return 0;
3878                 }
3879                 ],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
3880                 smb_krb5_cv_enctype_to_string_takes_krb5_context_arg=yes,
3881                 smb_krb5_cv_enctype_to_string_takes_krb5_context_arg=no)])
3882
3883     if test x"$smb_krb5_cv_enctype_to_string_takes_krb5_context_arg" = x"yes"; then
3884       AC_DEFINE(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_KRB5_CONTEXT_ARG,1,
3885                 [whether krb5_enctype_to_string takes krb5_context argument])
3886     fi
3887
3888     AC_CACHE_CHECK([for krb5_error_code krb5_enctype_to_string(krb5_enctype enctype, char *str, size_t len)],
3889         smb_krb5_cv_enctype_to_string_takes_size_t_arg,[
3890         AC_TRY_RUN_STRICT([
3891                 #include <krb5.h>
3892                 int main(void) {
3893                         char buf[256];
3894                         krb5_enctype_to_string(1, buf, 256);
3895                         return 0;
3896                 }
3897                 ],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
3898                 smb_krb5_cv_enctype_to_string_takes_size_t_arg=yes,
3899                 smb_krb5_cv_enctype_to_string_takes_size_t_arg=no)])
3900
3901     if test x"$smb_krb5_cv_enctype_to_string_takes_size_t_arg" = x"yes"; then
3902       AC_DEFINE(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_SIZE_T_ARG,1,
3903                 [whether krb5_enctype_to_string takes size_t argument])
3904     fi
3905   fi
3906
3907   AC_CACHE_CHECK([for krb5_principal_get_realm],
3908                 samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM,[
3909     AC_TRY_LINK([#include <krb5.h>],
3910       [krb5_context ctx = NULL; krb5_principal princ = NULL; const char *str = krb5_principal_get_realm(ctx, princ);],
3911       samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM=yes,
3912       samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM=no)])
3913
3914   if test x"$samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM" = x"yes"; then
3915     AC_DEFINE(HAVE_KRB5_PRINCIPAL_GET_REALM,1,
3916                [Whether the function krb5_principal_get_realm is defined])
3917   fi
3918
3919   AC_CACHE_CHECK([for krb5_princ_realm],
3920                 samba_cv_HAVE_KRB5_PRINC_REALM,[
3921     AC_TRY_LINK([#include <krb5.h>],
3922       [krb5_context ctx = NULL; krb5_principal princ = NULL; const char *str = krb5_princ_realm(ctx, princ)->data;],
3923       samba_cv_HAVE_KRB5_PRINC_REALM=yes,
3924       samba_cv_HAVE_KRB5_PRINC_REALM=no)])
3925
3926   if test x"$samba_cv_HAVE_KRB5_PRINC_REALM" = x"yes"; then
3927     AC_DEFINE(HAVE_KRB5_PRINC_REALM,1,
3928                [Whether the macro krb5_princ_realm is defined])
3929   fi
3930
3931   AC_HAVE_DECL(KRB5_PDU_NONE,[#include <krb5.h>])
3932
3933   AC_CACHE_CHECK([for flags in krb5_creds],
3934                 samba_cv_HAVE_FLAGS_IN_KRB5_CREDS,[
3935     AC_TRY_COMPILE([#include <krb5.h>],
3936       [krb5_creds creds; creds.flags.b.initial = 0;],
3937       samba_cv_HAVE_FLAGS_IN_KRB5_CREDS=yes,
3938       samba_cv_HAVE_FLAGS_IN_KRB5_CREDS=no)])
3939
3940   if test x"$samba_cv_HAVE_FLAGS_IN_KRB5_CREDS" = x"yes"; then
3941     AC_DEFINE(HAVE_FLAGS_IN_KRB5_CREDS,1,
3942                [Whether the krb5_creds struct has a flags property])
3943   fi
3944   #
3945   #
3946   # Now the decisions whether we can support krb5
3947   #
3948   # NOTE: all tests should be done before this block!
3949   #
3950   #
3951   if test x"$found_arcfour_hmac" != x"yes"; then
3952     AC_MSG_WARN(arcfour-hmac-md5 encryption type not found in -lkrb5)
3953     use_ads=no
3954   fi
3955
3956   if test x"$ac_cv_func_ext_krb5_set_real_time" != x"yes"; then
3957     AC_MSG_WARN(krb5_set_real_time encryption type not found in -lkrb5)
3958     use_ads=no
3959   fi
3960
3961   if test x"$ac_cv_lib_ext_krb5_krb5_mk_req_extended" != x"yes"; then
3962     AC_MSG_WARN(krb5_mk_req_extended not found in -lkrb5)
3963     use_ads=no
3964   fi
3965
3966   if test x"$ac_cv_func_ext_krb5_get_host_realm" != x"yes"
3967   then
3968     AC_MSG_WARN(krb5_get_host_realm not found in -lkrb5)
3969     use_ads=no
3970   fi
3971
3972   if test x"$ac_cv_func_ext_krb5_free_host_realm" != x"yes"
3973   then
3974     AC_MSG_WARN(krb5_free_host_realm not found in -lkrb5)
3975     use_ads=no
3976   fi
3977
3978   if test x"$ac_cv_func_ext_krb5_fwd_tgt_creds" != x"yes"
3979   then
3980     AC_MSG_WARN(krb5_fwd_tgt_creds not found in -lkrb5)
3981     use_ads=no
3982   fi
3983
3984   if test x"$ac_cv_func_ext_krb5_get_init_creds_opt_alloc" != x"yes"
3985   then
3986     AC_MSG_WARN(krb5_get_init_creds_opt_alloc found in -lkrb5)
3987     use_ads=no
3988   fi
3989
3990   if test x"$smb_krb5_cv_creds_opt_free_context" != x"yes"
3991   then
3992     AC_MSG_WARN(krb5_get_init_creds_opt_free not found or was too old in -lkrb5)
3993     use_ads=no
3994   fi
3995
3996   if test x"$ac_cv_func_ext_krb5_get_renewed_creds" != x"yes"
3997   then
3998     AC_MSG_WARN(krb5_get_renewed_creds not found in -lkrb5)
3999     use_ads=no
4000   fi
4001
4002   if test x"$ac_cv_func_ext_krb5_principal_compare_any_realm" != x"yes"
4003   then
4004     AC_MSG_WARN(krb5_principal_compare_any_realm not found in -lkrb5)
4005     use_ads=no
4006   fi
4007
4008   if test x"$ac_cv_func_ext_krb5_principal2salt" != x"yes" -o \
4009           x"$ac_cv_func_ext_krb5_c_string_to_key" != x"yes"
4010   then
4011         if test x"$ac_cv_func_ext_krb5_get_pw_salt" != x"yes" -o \
4012              x"$ac_cv_func_ext_krb5_string_to_key_salt" != x"yes"
4013         then
4014               AC_MSG_WARN(no CREATE_KEY_FUNCTIONS detected)
4015               use_ads=no
4016         fi
4017   fi
4018
4019   if test x"$ac_cv_func_ext_krb5_get_permitted_enctypes" != x"yes" -a \
4020           x"$ac_cv_func_ext_krb5_get_default_in_tkt_etypes" != x"yes"
4021   then
4022     AC_MSG_WARN(no GET_ENCTYPES_FUNCTIONS detected)
4023     use_ads=no
4024   fi
4025
4026   if test x"$ac_cv_func_ext_krb5_kt_free_entry" != x"yes" -a \
4027           x"$ac_cv_func_ext_krb5_free_keytab_entry_contents" != x"yes"
4028   then
4029     AC_MSG_WARN(no KT_FREE_FUNCTION detected)
4030     use_ads=no
4031   fi
4032
4033   if test x"$ac_cv_func_ext_krb5_c_verify_checksum" != x"yes"
4034   then
4035     AC_MSG_WARN(krb5_c_verify_checksum not found in -lkrb5)
4036     use_ads=no
4037   fi
4038
4039   if test x"$ac_cv_func_ext_gss_wrap_iov" != x"yes" ; then
4040     AC_MSG_WARN(gss_wrap_iov not found in -lgssapi)
4041     use_ads=no
4042   fi
4043
4044   if test x"$ac_cv_func_ext_gss_get_name_attribute" != x"yes" ; then
4045     if test x"$ac_cv_func_ext_gsskrb5_extract_authz_data_from_sec_context" != x"yes" -o \
4046             x"$ac_cv_func_ext_gss_inquire_sec_context_by_oid" != x"yes"
4047     then
4048       AC_MSG_WARN(need either gss_get_name_attribute or gsskrb5_extract_authz_data_from_sec_context and gss_inquire_sec_context_by_oid in -lgssapi for PAC support)
4049       use_ads=no
4050     fi
4051   fi
4052
4053   if test x"$use_ads" = x"yes"; then
4054     AC_DEFINE(WITH_ADS,1,[Whether to include Active Directory support])
4055     AC_DEFINE(HAVE_KRB5,1,[Whether to have KRB5 support])
4056   else
4057     if test x"$with_ads_support" = x"yes"; then
4058         AC_MSG_ERROR(krb5 libs don't have all features required for Active Directory support)
4059     else
4060         AC_MSG_WARN(krb5 libs don't have all features required for Active Directory support)
4061     fi
4062     AC_REMOVE_DEFINE(HAVE_KRB5_H)
4063     AC_REMOVE_DEFINE(HAVE_GSSAPI_H)
4064     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_GENERIC_H)
4065     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_H)
4066     AC_REMOVE_DEFINE(HAVE_GSSAPI)
4067     KRB5_LIBS=""
4068     with_ads_support=no
4069   fi
4070   AC_MSG_CHECKING(whether Active Directory and krb5 support is used)
4071   AC_MSG_RESULT([$use_ads])
4072
4073 LIBS="$ac_save_LIBS"
4074 fi
4075
4076 AC_CHECK_LIB_EXT(nscd, NSCD_LIBS, nscd_flush_cache)
4077 PASSDB_LIBS="$PASSDB_LIBS $NSCD_LIBS"
4078
4079
4080 ########################################################
4081 # Compile with DNS Updates support?
4082
4083 with_dnsupdate_support=auto
4084 AC_MSG_CHECKING([whether to enable DNS Updates support])
4085
4086 AC_ARG_WITH(dnsupdate,
4087 [AS_HELP_STRING([--with-dnsupdate], [Enable DNS Updates support (default=auto)])],
4088 [ case "$withval" in
4089     yes|no)
4090         with_dnsupdate_support=$withval
4091         ;;
4092   esac ])
4093
4094 AC_MSG_RESULT($with_dnsupdate_support)
4095
4096 if test x"$with_dnsupdate_support" != x"no"; then
4097
4098   ################################################################
4099   # first test for AD / GSSAPI support being enabled
4100         if test x"$have_gssapi" != xyes -o x"$use_ads" != xyes ; then
4101                 if test x"$with_dnsupdate_support" = x"yes" ; then
4102                         AC_MSG_ERROR(DNS Updates support only possible with AD and GSSAPI support)
4103                 else
4104                         AC_MSG_NOTICE(DNS Updates support only possible with AD and GSSAPI support)
4105                         with_dnsupdate_support=no
4106                 fi
4107         fi
4108 fi
4109
4110 if test x"$with_dnsupdate_support" != x"no"; then
4111       AC_DEFINE(WITH_DNS_UPDATES,1,[Whether to enable DNS Update support])
4112 fi
4113
4114   # finally print out the result:
4115 AC_MSG_CHECKING(whether DNS Updates support is used)
4116 AC_MSG_RESULT([$with_dnsupdate_support])
4117
4118
4119 #################################################
4120 # check for automount support
4121 AC_MSG_CHECKING(whether to use automount)
4122 AC_ARG_WITH(automount,
4123 [AS_HELP_STRING([--with-automount], [Include automount support (default=no)])],
4124 [ case "$withval" in
4125   yes)
4126     AC_MSG_RESULT(yes)
4127     AC_DEFINE(WITH_AUTOMOUNT,1,[Whether to include automount support])
4128     ;;
4129   *)
4130     AC_MSG_RESULT(no)
4131     ;;
4132   esac ],
4133   AC_MSG_RESULT(no)
4134 )
4135
4136 #################################################
4137 # Check for a PAM clear-text auth, accounts, password
4138 # and session support. Most PAM implementations keep their
4139 # headers in /usr/include/security. Darwin keeps its in
4140 # /usr/include/pam.
4141
4142 with_pam_for_crypt=no
4143 try_pam=auto
4144 AC_MSG_CHECKING(whether to try PAM support)
4145 AC_ARG_WITH(pam,
4146 [AS_HELP_STRING([--with-pam], [Include PAM support (default=auto)])],
4147 [ case "$withval" in
4148   yes|no|auto)
4149     try_pam=$withval
4150     ;;
4151   esac
4152 ])
4153 AC_MSG_RESULT([$try_pam])
4154
4155 use_pam=no
4156 create_pam_modules=no
4157 if test x"${try_pam}" != x"no";then
4158         use_pam=yes
4159         create_pam_modules=yes
4160
4161         # Most systems have PAM headers in /usr/include/security, but Darwin
4162         # has them in /usr/include/pam.
4163         AC_CHECK_HEADERS(security/pam_appl.h pam/pam_appl.h)
4164         if test x"$ac_cv_header_security_pam_appl_h" != x"yes" -a \
4165                 x"$ac_cv_header_pam_pam_appl_h" != x"yes"; then
4166                 if test x"${try_pam}" = x"yes";then
4167                         AC_MSG_ERROR([--with-pam=yes but pam_appl.h not found])
4168                 fi
4169                 use_pam=no
4170                 create_pam_modules=no
4171         fi
4172
4173         AC_CHECK_LIB_EXT(pam, PAM_LIBS, pam_get_data)
4174         if test x"$ac_cv_lib_ext_pam_pam_get_data" != x"yes"; then
4175                 if test x"${try_pam}" = x"yes";then
4176                         AC_MSG_ERROR([--with-pam=yes but libpam not found])
4177                 fi
4178                 use_pam=no
4179                 create_pam_modules=no
4180         fi
4181
4182