doc-xml/smbdotconf: fix server [min|max] protocol documentation
[Samba/gebeck_regimport.git] / source3 / configure.in
blob8fef7b19b15d1ffac65dde21c9cab7f4db6e2048
1 dnl Process this file with autoconf to produce a configure script.
3 dnl We must use autotools 2.54 or above
4 AC_PREREQ(2.54)
6 AC_INIT([Samba],[3],[samba-technical@samba.org])
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])
12 case "$PATH" in
13     */usr/ucb*)
14         AC_MSG_WARN([\$PATH contains /usr/ucb - build errors may follow])
15         ;;
16 esac 
18 builddir=`pwd`
19 AC_SUBST(builddir)
21 m4_include(m4/samba_version.m4)
22 m4_include(m4/check_path.m4)
23 m4_include(pkg.m4)
25 AC_LIBREPLACE_CC_CHECKS
26 AC_LIBREPLACE_RUNTIME_LIB_PATH_VAR
28 m4_include(../lib/tevent/libtevent.m4)
29 m4_include(../lib/ccan/libccan.m4)
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}"
38 SAMBA_CPPFLAGS="-Iinclude/autoconf -Iautoconf -Iautoconf/source3"
39 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -Iinclude -I${srcdir-.}/include  -I. -I${srcdir-.}"
40 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/../lib/replace"
41 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${TEVENT_CFLAGS}"
42 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${CCAN_CFLAGS}"
43 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/librpc"
44 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/.."
45 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/../lib/tdb_compat"
47 SAMBA_CONFIGURE_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/../lib/popt"
49 ## cleanup the $(srcdir) in the Makefile if we are outside of the tree
50 if test "x${srcdir-.}" != "x."; then
51         SAMBA_CPPFLAGS=`echo ${SAMBA_CPPFLAGS} | sed -e "s;${srcdir};\$\(srcdir\);g"`
54 dnl Unique-to-Samba variables we'll be playing with.
55 AC_SUBST(SAMBA_CPPFLAGS)
56 AC_SUBST(SHELL)
57 AC_SUBST(LDSHFLAGS)
58 AC_SUBST(SONAMEFLAG)
59 AC_SUBST(SHLD)
60 AC_SUBST(MODULE_EXPORTS)
61 AC_SUBST(DSO_EXPORTS)
62 AC_SUBST(HOST_OS)
63 AC_SUBST(PICFLAG)
64 AC_SUBST(PIE_CFLAGS)
65 AC_SUBST(PIE_LDFLAGS)
66 AC_SUBST(RELRO_LDFLAGS)
67 AC_SUBST(SHLIBEXT)
68 AC_SUBST(INSTALLLIBCMD_SH)
69 AC_SUBST(INSTALLLIBCMD_A)
70 AC_SUBST(UNINSTALLLIBCMD_SH)
71 AC_SUBST(UNINSTALLLIBCMD_A)
73 AC_SUBST(INSTALL_LIBWBCLIENT)
74 AC_SUBST(UNINSTALL_LIBWBCLIENT)
75 AC_SUBST(LIBWBCLIENT_SHARED_TARGET)
76 AC_SUBST(LIBWBCLIENT_SHARED_TARGET_SOVER)
77 AC_SUBST(LIBWBCLIENT_SHARED_TARGET_FULLVER)
78 AC_SUBST(LIBWBCLIENT_SHARED)
79 AC_SUBST(LIBWBCLIENT_STATIC_TARGET)
80 AC_SUBST(LIBWBCLIENT_STATIC)
81 AC_SUBST(LIBWBCLIENT_SOVER)
82 AC_SUBST(LIBWBCLIENT_FULLVER)
83 AC_SUBST(LIBWBCLIENT)
84 AC_SUBST(LIBWBCLIENT_LIBS)
86 AC_SUBST(LIBSAMBAUTIL_SHARED)
88 AC_SUBST(PRINT_LIBS)
89 AC_SUBST(AUTH_LIBS)
90 AC_SUBST(ACL_LIBS)
91 AC_SUBST(PASSDB_LIBS)
92 AC_SUBST(IDMAP_LIBS)
93 AC_SUBST(KRB5_LIBS)
94 AC_SUBST(LDAP_LIBS)
95 AC_SUBST(GPEXT_LIBS)
96 AC_SUBST(PAM_MODULES)
97 AC_SUBST(INSTALL_PAM_MODULES)
98 AC_SUBST(UNINSTALL_PAM_MODULES)
99 AC_SUBST(NSS_MODULES)
100 AC_SUBST(EXTRA_BIN_PROGS)
101 AC_SUBST(CIFSMOUNT_PROGS)
102 AC_SUBST(INSTALL_CIFSMOUNT)
103 AC_SUBST(UNINSTALL_CIFSMOUNT)
104 AC_SUBST(CIFSUMOUNT_PROGS)
105 AC_SUBST(INSTALL_CIFSUMOUNT)
106 AC_SUBST(UNINSTALL_CIFSUMOUNT)
107 AC_SUBST(CIFSUPCALL_PROGS)
108 AC_SUBST(INSTALL_CIFSUPCALL)
109 AC_SUBST(UNINSTALL_CIFSUPCALL)
110 AC_SUBST(EXTRA_SBIN_PROGS)
111 AC_SUBST(EXTRA_ALL_TARGETS)
112 AC_SUBST(CONFIG_LIBS)
113 AC_SUBST(NSCD_LIBS)
115 # compile with optimization and without debugging by default, but
116 # allow people to set their own preference.
117 # do this here since AC_CACHE_CHECK apparently sets the CFLAGS to "-g -O2"
118 # if it has no value.  This prevent *very* large debug binaries from occurring
119 # by default.
120 if test "x$debug" = "xyes" ; then
121         CFLAGS="${CFLAGS} -g"
123 if test "x$CFLAGS" = x; then
124   CFLAGS="-O"
127 m4_include(../lib/socket_wrapper/config.m4)
128 m4_include(../lib/nss_wrapper/config.m4)
129 m4_include(../lib/uid_wrapper/config.m4)
131 m4_include(m4/swat.m4)
133 DEVELOPER_CFLAGS="-DDEBUG_PASSWORD -DDEVELOPER"
135 # Probe the gcc version for extra CFLAGS. We always stash these in
136 # DEVELOPER_CFLAGS, so that you can turn them on and off with a simple
137 # Makefile edit, avoiding the need to re-run configure.
138 if test x"$ac_cv_prog_gcc" = x"yes" ; then
139         DEVELOPER_CFLAGS="${DEVELOPER_CFLAGS} -g -Wall -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings"
140         # Add -Wdeclaration-after-statement if compiler supports it
141         AC_CACHE_CHECK(
142           [that the C compiler understands -Wdeclaration-after-statement],
143           samba_cv_HAVE_Wdeclaration_after_statement, [
144           AC_TRY_RUN_STRICT([
145             int main(void)
146             {
147                 return 0;
148             }],[$CFLAGS -Wdeclaration-after-statement],[$CPPFLAGS],[$LDFLAGS],
149             samba_cv_HAVE_Wdeclaration_after_statement=yes,
150             samba_cv_HAVE_Wdeclaration_after_statement=no,
151             samba_cv_HAVE_Wdeclaration_after_statement=cross)
152        ])
154         if test x"$samba_cv_HAVE_Wdeclaration_after_statement" = x"yes"; then
155             DEVELOPER_CFLAGS="${DEVELOPER_CFLAGS} -Wdeclaration-after-statement"
156         fi
158         #-Werror-implicit-function-declaration
159         AC_CACHE_CHECK(
160           [that the C compiler understands -Werror-implicit-function-declaration],
161           samba_cv_HAVE_Werror_implicit_function_declaration, [
162           AC_TRY_RUN_STRICT([
163             int main(void)
164             {
165                 return 0;
166             }],[$CFLAGS -Werror-implicit-function-declaration],[$CPPFLAGS],[$LDFLAGS],
167             samba_cv_HAVE_Werror_implicit_function_declaration=yes,
168             samba_cv_HAVE_Werror_implicit_function_declaration=no,
169             samba_cv_HAVE_Werror_implicit_function_declaration=cross)
170        ])
171        if test x"$samba_cv_HAVE_Werror_implicit_function_declaration" = x"yes"; then
172             DEVELOPER_CFLAGS="${DEVELOPER_CFLAGS} -Werror-implicit-function-declaration"
173        fi
175         # krb5developer is like developer, except we don't get
176         # -Wstrict-prototypes.
177        if test x"$krb5_developer" != x"$yes" ; then
178             DEVELOPER_CFLAGS="$DEVELOPER_CFLAGS -Wstrict-prototypes"
179        fi
181        if test x"$picky_developer" = x"yes"; then
182             DEVELOPER_CFLAGS="$DEVELOPER_CFLAGS -Werror"
183        fi
186 #################################################
187 # check for a shared memory profiling support
188 AC_MSG_CHECKING(whether to use profiling)
189 AC_ARG_WITH(profiling-data,
190 [AS_HELP_STRING([--with-profiling-data], [Include gathering source code profile information (default=no)])],
191 [ case "$withval" in
192   yes)
193     AC_MSG_RESULT(yes)
194     AC_DEFINE(WITH_PROFILE,1,[Whether to use profiling])
195     samba_cv_WITH_PROFILE=yes
196     ;;
197   *)
198     AC_MSG_RESULT(no)
199     samba_cv_WITH_PROFILE=no
200     ;;
201   esac ],
202   AC_MSG_RESULT(no)
205 AC_PROG_INSTALL
206 AC_PROG_AWK
207 # Check for GNU make
208 m4_include(../m4/check_make.m4)
209 AC_SAMBA_GNU_MAKE([true], [true])
211 selftest_possible="yes"
213 # Check for perl
214 m4_include(../m4/check_perl.m4)
215 AC_SAMBA_PERL([true], [selftest_possible=no])
217 # Check for python
218 m4_include(../m4/check_python.m4)
219 AC_SAMBA_PYTHON_DEVEL([true], [selftest_possible=no])
221 AC_CHECK_TOOL(AR, ar)
223 dnl Check if we (actually our C compiler!) use GNU ld
224 AC_PROG_LD_GNU
226 dnl Certain versions of GNU ld the default is not to have the
227 dnl --allow-shlib-undefined flag defined.  This causes a stackload of
228 dnl warnings when building modules.
229 if test "$ac_cv_prog_gnu_ld" = "yes"; then
230         ac_cv_gnu_ld_version=`$CC -Wl,-v /dev/null 2> /dev/null < /dev/null | grep "GNU ld"`
231         # we need to make a 2nd (separate!) check on the output of stderr, see bug #7825:
232         if test -z "$ac_cv_gnu_ld_version" ; then
233           ac_cv_gnu_ld_version=`$CC -Wl,-v /dev/null 2>&1 > /dev/null < /dev/null | grep "GNU ld"`
234         fi
235         AC_MSG_CHECKING(GNU ld release date)
236         changequote(,)dnl
237         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'`
238         changequote([,])dnl
239         AC_MSG_RESULT(${ac_cv_gnu_ld_date})
240         if test -n "$ac_cv_gnu_ld_date"; then
241         if test "$ac_cv_gnu_ld_date" -lt 20030217; then
242                 ac_cv_gnu_ld_no_default_allow_shlib_undefined=yes
243         fi
244         if test "$ac_cv_gnu_ld_date" -gt 20030101; then
245                 ac_cv_gnu_ld_version_script=yes
246         fi
247         else
248            AC_MSG_CHECKING(GNU ld release version)
249            changequote(,)dnl
250            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'`
251            ac_cv_gnu_ld_vernr_major=`echo $ac_cv_gnu_ld_vernr | cut -d '.' -f 1`
252            ac_cv_gnu_ld_vernr_minor=`echo $ac_cv_gnu_ld_vernr | cut -d '.' -f 2`
253            changequote([,])dnl
254            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr})
255            AC_MSG_CHECKING(GNU ld release version major)
256            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr_major})
257            AC_MSG_CHECKING(GNU ld release version minor)
258            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr_minor})
259            if test "$ac_cv_gnu_ld_vernr_major" -lt 2 || test "$ac_cv_gnu_ld_vernr_minor" -lt 14; then
260              ac_cv_gnu_ld_no_default_allow_shlib_undefined=yes
261            fi
262            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
263              ac_cv_gnu_ld_version_script=yes
264            fi
265         fi
268 dnl Check if C compiler understands -c and -o at the same time
269 AC_PROG_CC_C_O
270 if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = no"; then
271       BROKEN_CC=
272 else
273       BROKEN_CC=#
275 AC_SUBST(BROKEN_CC)
277 dnl Check if the C compiler understands -Werror (GNU)
278 AC_CACHE_CHECK([that the C compiler understands -Werror],samba_cv_HAVE_Werror, [
279  AC_TRY_RUN_STRICT([
280   int main(void)
281   {
282         return 0;
283   }],[$CFLAGS -Werror],[$CPPFLAGS],[$LDFLAGS],
284   samba_cv_HAVE_Werror=yes,samba_cv_HAVE_Werror=no,samba_cv_HAVE_Werror=cross)])
285 if test x"$samba_cv_HAVE_Werror" = x"yes"; then
286    Werror_FLAGS="-Werror"
287 else
288 dnl Check if the C compiler understands -w2
289 AC_CACHE_CHECK([that the C compiler understands -w2],samba_cv_HAVE_w2, [
290  AC_TRY_RUN_STRICT([
291   int main(void)
292   {
293         return 0;
294   }],[$CFLAGS -w2],[$CPPFLAGS],[$LDFLAGS],
295   samba_cv_HAVE_w2=yes,samba_cv_HAVE_w2=no,samba_cv_HAVE_w2=cross)])
296 if test x"$samba_cv_HAVE_w2" = x"yes"; then
297    Werror_FLAGS="-w2"
298 else
299 dnl Check if the C compiler understands -errwarn (Sun)
300 AC_CACHE_CHECK([that the C compiler understands -errwarn],samba_cv_HAVE_errwarn, [
301   AC_TRY_RUN_STRICT([
302    int main(void)
303    {
304         return 0;
305    }],[$CFLAGS -errwarn=%all],[$CPPFLAGS],[$LDFLAGS],
306    samba_cv_HAVE_errwarn=yes,samba_cv_HAVE_errwarn=no,samba_cv_HAVE_errwarn=cross)])
307 if test x"$samba_cv_HAVE_errwarn" = x"yes"; then
308    Werror_FLAGS="-errwarn=%all"
309 else
310 dnl Check if the C compiler understands -qhalt (IBM)
311 AC_CACHE_CHECK([that the C compiler understands -qhalt],samba_cv_HAVE_qhalt, [
312   AC_TRY_RUN_STRICT([
313    int main(void)
314    {
315         return 0;
316    }],[$CFLAGS -qhalt=w],[$CPPFLAGS],[$LDFLAGS],
317    samba_cv_HAVE_qhalt=yes,samba_cv_HAVE_qhalt=no,samba_cv_HAVE_qhalt=cross)])
318 if test x"$samba_cv_HAVE_qhalt" = x"yes"; then
319    Werror_FLAGS="-qhalt=w"
325 ############################################
326 # check if the compiler can handle negative enum values
327 # and don't truncate the values to INT_MAX
328 # a runtime test is needed here
329 AC_SUBST(PIDL_ARGS)
330 AC_CACHE_CHECK([that the C compiler understands negative enum values],samba_cv_CC_NEGATIVE_ENUM_VALUES, [
331     AC_TRY_RUN(
333         #include <stdio.h>
334         enum negative_values { NEGATIVE_VALUE = 0xFFFFFFFF };
335         int main(void) {
336                 enum negative_values v1 = NEGATIVE_VALUE;
337                 unsigned v2 = NEGATIVE_VALUE;
339                 if (v1 != 0xFFFFFFFF) {
340                         printf("%u != 0xFFFFFFFF\n", v1);
341                         return 1;
342                 }
343                 if (v2 != 0xFFFFFFFF) {
344                         printf("%u != 0xFFFFFFFF\n", v2);
345                         return 1;
346                 }
348                 return 0;
349         }
351         samba_cv_CC_NEGATIVE_ENUM_VALUES=yes,samba_cv_CC_NEGATIVE_ENUM_VALUES=no)])
352 if test x"$samba_cv_CC_NEGATIVE_ENUM_VALUES" != x"yes"; then
353         AC_MSG_WARN([using --uint-enums for pidl])
354         PIDL_ARGS="$PIDL_ARGS --uint-enums"
357 dnl Figure out the flags to support named structure initializers
359 LIBREPLACE_C99_STRUCT_INIT([],[AC_MSG_ERROR([c99 structure initializer are not supported])])
361 UNAME_S=`(uname -s) 2>/dev/null` || UNAME_S="unknown"
362 AC_MSG_CHECKING(uname -s)
363 AC_MSG_RESULT(${UNAME_S})
365 UNAME_R=`(uname -r) 2>/dev/null` || UNAME_R="unknown"
366 AC_MSG_CHECKING(uname -r)
367 AC_MSG_RESULT(${UNAME_R})
369 UNAME_M=`(uname -m) 2>/dev/null` || UNAME_M="unknown"
370 AC_MSG_CHECKING(uname -m)
371 AC_MSG_RESULT(${UNAME_M})
373 UNAME_P=`(uname -p) 2>/dev/null` || UNAME_P="unknown"
374 AC_MSG_CHECKING(uname -p)
375 AC_MSG_RESULT(${UNAME_P})
377 UNAME_I=`(uname -i) 2>/dev/null` || UNAME_I="unknown"
378 AC_MSG_CHECKING(uname -i)
379 AC_MSG_RESULT(${UNAME_I})
381 dnl Add #include for broken IRIX header files
382   case "$host_os" in
383         *irix6*)
384                 #TODO add to libreplace
385                 if test x"$ac_cv_prog_gcc" != x"yes" ; then
386                         dnl Fix sensible defaults for MIPSPro compilers. The
387                         dnl error numbers are valid for the 7.3 compilers,
388                         dnl hopefully also valid for the 7.4 series.
389                         dnl
390                         dnl Bugzilla 3801. Force an error on warning 1035
391                         dnl so we don't incorrectly detect stdint.h. This
392                         dnl warning is emitted for #error directives.
393                         CFLAGS="$CFLAGS -diag_error 1035"
394                         dnl 1209: Controlling expression is constant
395                         dnl 1174: Function foo declared but never referenced
396                         dnl 3201: Parameter foo was never referenced
397                         CFLAGS="$CFLAGS -woff 1209,1174,3201"
398                 fi
399         ;;
400 esac
402 DYNEXP=
403 AC_SUBST(DYNEXP)
404 LDSHFLAGS_Z_DEFS=
405 AC_SUBST(LDSHFLAGS_Z_DEFS)
406 LDSHFLAGS_Z_NODEFS=
407 AC_SUBST(LDSHFLAGS_Z_NODEFS)
409 dnl Add modules that have to be built by default here
410 dnl These have to be built static:
411 default_static_modules=""
412 default_static_modules="$default_static_modules pdb_smbpasswd"
413 default_static_modules="$default_static_modules pdb_tdbsam"
414 default_static_modules="$default_static_modules pdb_wbc_sam"
415 default_static_modules="$default_static_modules rpc_lsarpc"
416 default_static_modules="$default_static_modules rpc_samr"
417 default_static_modules="$default_static_modules rpc_winreg"
418 default_static_modules="$default_static_modules rpc_initshutdown"
419 default_static_modules="$default_static_modules rpc_dssetup"
420 default_static_modules="$default_static_modules rpc_wkssvc"
421 default_static_modules="$default_static_modules rpc_svcctl"
422 default_static_modules="$default_static_modules rpc_ntsvcs"
423 default_static_modules="$default_static_modules rpc_netlogon"
424 default_static_modules="$default_static_modules rpc_netdfs"
425 default_static_modules="$default_static_modules rpc_srvsvc"
426 default_static_modules="$default_static_modules rpc_spoolss"
427 default_static_modules="$default_static_modules rpc_eventlog"
428 default_static_modules="$default_static_modules auth_sam"
429 default_static_modules="$default_static_modules auth_unix"
430 default_static_modules="$default_static_modules auth_winbind"
431 default_static_modules="$default_static_modules auth_wbc"
432 default_static_modules="$default_static_modules auth_domain"
433 default_static_modules="$default_static_modules auth_builtin"
434 default_static_modules="$default_static_modules vfs_default"
435 default_static_modules="$default_static_modules nss_info_template"
437 dnl These are preferably build shared, and static if dlopen() is not available
438 default_shared_modules=""
439 default_shared_modules="$default_shared_modules vfs_recycle"
440 default_shared_modules="$default_shared_modules vfs_audit"
441 default_shared_modules="$default_shared_modules vfs_extd_audit"
442 default_shared_modules="$default_shared_modules vfs_full_audit"
443 default_shared_modules="$default_shared_modules vfs_netatalk"
444 default_shared_modules="$default_shared_modules vfs_fake_perms"
445 default_shared_modules="$default_shared_modules vfs_default_quota"
446 default_shared_modules="$default_shared_modules vfs_readonly"
447 default_shared_modules="$default_shared_modules vfs_cap"
448 default_shared_modules="$default_shared_modules vfs_expand_msdfs"
449 default_shared_modules="$default_shared_modules vfs_shadow_copy"
450 default_shared_modules="$default_shared_modules vfs_shadow_copy2"
451 default_shared_modules="$default_shared_modules auth_script"
452 default_shared_modules="$default_shared_modules vfs_readahead"
453 default_shared_modules="$default_shared_modules vfs_xattr_tdb"
454 default_shared_modules="$default_shared_modules vfs_streams_xattr"
455 default_shared_modules="$default_shared_modules vfs_streams_depot"
456 default_shared_modules="$default_shared_modules vfs_acl_xattr"
457 default_shared_modules="$default_shared_modules vfs_acl_tdb"
458 default_shared_modules="$default_shared_modules vfs_smb_traffic_analyzer"
459 default_shared_modules="$default_shared_modules vfs_preopen"
460 default_shared_modules="$default_shared_modules vfs_catia"
461 default_shared_modules="$default_shared_modules vfs_scannedonly"
462 default_shared_modules="$default_shared_modules vfs_crossrename"
463 default_shared_modules="$default_shared_modules vfs_linux_xfs_sgid"
464 default_shared_modules="$default_shared_modules vfs_time_audit"
465 default_shared_modules="$default_shared_modules vfs_media_harmony"
466 default_shared_modules="$default_shared_modules vfs_commit"
467 default_shared_modules="$default_shared_modules idmap_autorid"
468 default_shared_modules="$default_shared_modules idmap_tdb2"
469 default_shared_modules="$default_shared_modules idmap_rid"
470 default_shared_modules="$default_shared_modules idmap_hash"
472 if test "x$developer" = xyes; then
473    default_shared_modules="$default_shared_modules perfcount_test"
476 if test x"$selftest" = x"yes" -o "x$developer" = xyes; then
477    default_shared_modules="$default_shared_modules vfs_fake_acls vfs_nfs4acl_xattr"
481 # Config CPPFLAG settings for strange OS's that must be set
482 # before other tests. Do NOT invoke AC_CHECK_HEADERS within this
483 # case statement; its first reference must be unconditional.
485 case "$host_os" in
486     *hpux*)
488 # Defines needed for HPUX support.
489 # HPUX has bigcrypt but (sometimes?) doesn't use it for
490 # password hashing - hence the USE_BOTH_CRYPT_CALLS define.
492       case `uname -r` in
493                 *9*|*10*|*11)
494                         AC_DEFINE(USE_BOTH_CRYPT_CALLS, 1, [Whether to use both of HPUX' crypt calls])
495                 ;;
496       esac
497       ;;
500 # AIX4.x doesn't even admit to having large
501 # files *at all* unless the -D_LARGE_FILE or -D_LARGE_FILE_API flags are set.
503     *aix4*)
504           AC_MSG_RESULT([enabling large file support])
505           CPPFLAGS="$CPPFLAGS -D_LARGE_FILES"
506           AC_DEFINE(_LARGE_FILES, 1, [Whether to enable large file support])
507       ;;
509 # Defines needed for Solaris 2.6/2.7 aka 7.0 to make it admit
510 # to the existance of large files..
512 # Solaris uses SYSV printing.  Make sure to set that here.  --jerry
514         *solaris*)
515                 AC_DEFINE(SYSV, 1, [Whether to enable System V compatibility])
516                 LDFLAGS="$LDFLAGS -lthread"
517                 CPPFLAGS="$CPPFLAGS -D_REENTRANT"
518                 ;;
520 # IRIX uses SYSV printing.  Make sure to set that here
522         *irix*)
523                 AC_DEFINE(SYSV, 1, [Whether to enable System V compatibility])
524                 ;;
525         *freebsd*|*dragonfly*)
526                 AC_DEFINE(FREEBSD, 1, [Whether the host os is FreeBSD])
527                 ;;
529 # VOS may need to have POSIX support and System V compatibility enabled.
531     *vos*)
532     case "$CPPFLAGS" in
533           *-D_POSIX_C_SOURCE*)
534                 ;;
535           *)
536                 CPPFLAGS="$CPPFLAGS -D_POSIX_C_SOURCE=200112L"
537                 AC_DEFINE(_POSIX_C_SOURCE, 200112L, [Whether to enable POSIX support])
538                 ;;
539     esac
540     case "$CPPFLAGS" in
541           *-D_SYSV*|*-D_SVID_SOURCE*)
542                 ;;
543           *)
544                 CPPFLAGS="$CPPFLAGS -D_SYSV"
545                 AC_DEFINE(_SYSV, 1, [Whether to enable System V compatibility])
546     esac
547     ;;
548 # GNU systems
550     *linux* | *hurd* | gnu* | k*bsd*-gnu | kopensolaris*-gnu)
551         CPPFLAGS="-D_GNU_SOURCE $CPPFLAGS"
552         AC_DEFINE(_GNU_SOURCE, 1, [Whether to use GNU libc extensions])
553         ;;
556 # MacOS X is the *only* system that uses compose character in utf8. This
557 # is so horribly broken....
559     *darwin*)
560         AC_DEFINE(BROKEN_UNICODE_COMPOSE_CHARACTERS, 1, [Does this system use unicode compose characters])
562 # Add a system specific charset module.
563         default_shared_modules="$default_shared_modules"
565         ;;
566     *qnx*)
567         ;;
569 esac
571 SAVE_CPPFLAGS="${CPPFLAGS}"
572 CPPFLAGS="${CPPFLAGS} ${SAMBA_CONFIGURE_CPPFLAGS}"
574 AC_LIBREPLACE_BROKEN_CHECKS
575 AC_CHECK_FUNCS([syslog],[],[AC_MSG_ERROR([Required function not found])])
576 AC_LIBREPLACE_NETWORK_CHECKS
578 CPPFLAGS="${SAVE_CPPFLAGS}"
580 LIBREPLACE_DIR=`echo ${libreplacedir} | sed -e "s;${srcdir};;" -e "s;^/;;"`
582 LIBREPLACE_OBJS="${LIBREPLACEOBJ}"
583 AC_SUBST(LIBREPLACE_OBJS)
585 LIBREPLACE_LIBS="${LIBREPLACE_NETWORK_LIBS} ${LIBREPLACE_FILESYS_LIBS}"
586 AC_SUBST(LIBREPLACE_LIBS)
589 # add -ldl to the global LIBS
590 LIBS="${LIBS} ${LIBDL} ${LIBREPLACE_NETWORK_LIBS}"
591 AUTH_LIBS="${AUTH_LIBS} ${CRYPT_LIBS}"
594 AC_CHECK_HEADERS(aio.h sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd.h rpc/nettype.h)
595 AC_CHECK_HEADERS(unistd.h grp.h sys/id.h memory.h alloca.h)
596 AC_CHECK_HEADERS(limits.h float.h libintl.h)
597 AC_CHECK_HEADERS(rpc/rpc.h rpcsvc/nis.h rpcsvc/ypclnt.h)
598 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)
599 AC_CHECK_HEADERS(sys/mman.h sys/filio.h sys/priv.h sys/shm.h string.h strings.h stdlib.h)
600 AC_CHECK_HEADERS(sys/mount.h sys/vfs.h sys/fs/s5param.h sys/filsys.h termios.h termio.h)
601 AC_CHECK_HEADERS(sys/termio.h sys/statfs.h sys/dustat.h sys/statvfs.h stdarg.h)
602 AC_CHECK_HEADERS(sys/sysmacros.h)
603 AC_CHECK_HEADERS(sys/syslog.h syslog.h)
604 AC_CHECK_HEADERS(langinfo.h locale.h)
605 AC_CHECK_HEADERS(xfs/libxfs.h)
606 AC_CHECK_HEADERS(netgroup.h)
607 AC_CHECK_HEADERS(linux/falloc.h)
608 AC_CHECK_HEADERS(CommonCrypto/CommonDigest.h)
609 AC_CHECK_HEADERS(linux/ioctl.h)
611 dnl check for OS implementation of md5 conformant to rfc1321
612 samba_cv_md5lib=none
614 AC_CHECK_LIB(c, MD5Update, [samba_cv_md5lib=""])
616 if test x"$samba_cv_md5lib" = x"none" ; then
617         AC_CHECK_LIB(md, MD5Update, [samba_cv_md5lib=md])
620 if test x"$samba_cv_md5lib" = x"none" ; then
621         AC_CHECK_LIB(md5, MD5Update, [samba_cv_md5lib=md5])
624 if test x"$samba_cv_md5lib" != x"none" ; then
625         AC_CHECK_HEADERS(md5.h)
628 CRYPTO_MD5_OBJ="../lib/crypto/md5.o"
629 if test x"$ac_cv_header_md5_h" = x"yes" -a \
630         x"$samba_cv_md5lib" != x"none" ; then
631         if test x"$samba_cv_md5lib" != x ; then
632                 LIBS="${LIBS} -l${samba_cv_md5lib}"
633                 AC_DEFINE(HAVE_LIBMD5, 1,
634                                   [Whether libmd5 conformant to rfc1321 is available.])
635         fi
636         CRYPTO_MD5_OBJ=
639 if test "x$ac_cv_header_CommonCrypto_CommonDigest_h" == "xyes"; then
640         CRYPTO_MD5_OBJ=
643 AC_SUBST(CRYPTO_MD5_OBJ)
645 AC_CHECK_HEADERS(rpcsvc/yp_prot.h,,,[[
646 #if HAVE_RPC_RPC_H
647 #include <rpc/rpc.h>
648 #endif
650 ## These fail to compile on IRIX so just check for their presence
651 AC_CHECK_HEADERS(sys/mode.h,,,)
653 # Look for Darwin headers
654 old_CPPFLAGS="$CPPFLAGS"
655 CPPFLAGS="-Iinclude $CPPFLAGS"
656 AC_CHECK_HEADERS([CoreFoundation/CFStringEncodingConverter.h], [], [AC_CHECK_HEADERS([CFStringEncodingConverter.h])])
657 CPPFLAGS="$old_CPPFLAGS"
659 # To link lib/util/charset/charset_macosxfs.c, we need to tell the linker
660 # about CoreFoundation, at least on os X 10.4..10.7 resp. darwin8..12
661 case "$host_os" in
662     *darwin*)
663                 LDFLAGS="$LDFLAGS -framework CoreFoundation"
664         ;;
665 esac
667 # In valgrind 1.0.x, it's just valgrind.h.  In 1.9.x+ there's a
668 # subdirectory of headers.
669 AC_CHECK_HEADERS(valgrind.h valgrind/valgrind.h valgrind/memcheck.h)
671 if test x"$enable_developer" = x"yes" ; then
672    if test x"$ac_cv_header_valgrind_h" = xyes -o \
673            x"$ac_cv_header_valgrind_valgrind_h" = xyes ; then
674       AC_DEFINE(VALGRIND,1,[Whether we have valgrind headers])
675    fi
679 # HPUX has a bug in that including shadow.h causes a re-definition of MAXINT.
680 # This causes configure to fail to detect it. Check for shadow separately on HPUX.
682 case "$host_os" in
683     *hpux*)
684                 AC_TRY_COMPILE([#include <shadow.h>],[struct spwd testme],
685                         ac_cv_header_shadow_h=yes,ac_cv_header_shadow_h=no)
686                 if test x"$ac_cv_header_shadow_h" = x"yes"; then
687                    AC_DEFINE(HAVE_SHADOW_H,1,[Whether we have shadow.h])
688                 fi
689         ;;
690 esac
691 AC_CHECK_HEADERS(shadow.h)
692 AC_CHECK_HEADERS(nss.h nss_common.h nsswitch.h ns_api.h sys/security.h)
693 AC_CHECK_HEADERS(syscall.h sys/syscall.h)
695 AC_CHECK_HEADERS(sys/cdefs.h glob.h)
697 # For experimental utmp support (lastlog on some BSD-like systems)
698 AC_CHECK_HEADERS(utmp.h utmpx.h lastlog.h)
700 AC_CHECK_SIZEOF(int,cross)
701 AC_CHECK_SIZEOF(long,cross)
702 AC_CHECK_SIZEOF(long long,cross)
703 AC_CHECK_SIZEOF(short,cross)
705 AC_C_CONST
706 AC_C_INLINE
707 AC_C_BIGENDIAN
708 AC_C_CHAR_UNSIGNED
710 AC_TYPE_SIGNAL
711 AC_TYPE_UID_T
712 AC_TYPE_MODE_T
713 AC_TYPE_OFF_T
714 AC_TYPE_SIZE_T
715 AC_TYPE_PID_T
716 AC_STRUCT_ST_RDEV
717 AC_DIRENT_D_OFF
718 AC_CHECK_TYPE(ssize_t, int)
719 AC_CHECK_TYPE(wchar_t, unsigned short)
721 ############################################
722 # for cups support we need libcups, and a handful of header files
724 AC_ARG_ENABLE(cups,
725 [AS_HELP_STRING([--enable-cups], [Turn on CUPS support (default=auto)])])
727 if test x$enable_cups != xno; then
728         AC_PATH_PROG(CUPS_CONFIG, cups-config)
730         if test "x$CUPS_CONFIG" != x; then
732                 ac_save_LDFLAGS=$LDFLAGS
733                 ac_save_PRINT_LIBS=$PRINT_LIBS
734                 AC_CHECK_HEADERS(cups/cups.h cups/language.h)
736                 if test x"$ac_cv_header_cups_cups_h" = xyes -a \
737                         x"$ac_cv_header_cups_language_h" = xyes; then
738                         # try linking with -lcups alone first. That should work unless libcups is
739                         # underlinked. With cups-config --libs we pull in unwanted and unneeded
740                         # dendencies including thread libraries - use cups-config only if really
741                         # required. 
742                         AC_CHECK_LIB_EXT(cups, ac_save_PRINT_LIBS , httpConnect,
743                                 [PRINT_LIBS="$ac_save_PRINT_LIBS -lcups"],
744                                 [AC_MSG_WARN([your cups library doesn't link with -lcups alone, it might be underlinked.]) ;
745                                  PRINT_LIBS="$ac_save_PRINT_LIBS `$CUPS_CONFIG --libs`"])
747                         AC_DEFINE(HAVE_CUPS,1,[Whether we have CUPS])
748                         samba_cv_HAVE_CUPS=yes
749                         AC_CHECK_LIB_EXT(cups, PRINT_LIBS, httpConnectEncrypt)
750                 else
751                         AC_MSG_WARN([cups-config around but cups-devel not installed])
752                         CFLAGS=$ac_save_CFLAGS
753                         LDFLAGS=$ac_save_LDFLAGS
754                         PRINT_LIBS=$ac_save_PRINT_LIBS
755                 fi
757         elif test x"$enable_cups" = x"yes"; then
758                 AC_MSG_ERROR(Cups support required but cups-config not located.  Make sure cups-devel related files are installed.)
759         fi
762 AC_ARG_ENABLE(iprint,
763 [AS_HELP_STRING([--enable-iprint], [Turn on iPrint support (default=yes if cups is yes)])])
765 if test x$enable_iprint != xno; then
766         if test x"$samba_cv_HAVE_CUPS" = xyes; then
767                 AC_DEFINE(HAVE_IPRINT,1,[Whether we have iPrint])
768         elif test x"$enable_iprint" = x"yes"; then
769                 AC_MSG_ERROR(iPrint support required but cups not enabled.  Make sure cups-devel related files are installed and that cups is enabled.)
770         fi
773 ############################################
774 # check if the compiler will optimize out function calls
775 AC_CACHE_CHECK([if the compiler will optimize out function calls],samba_cv_optimize_out_funcation_calls, [
776     AC_TRY_LINK([
777 #include <stdio.h>],
779                 if (0) {
780                    this_function_does_not_exist();
781                 } else {
782                   return 1;
783                 }
786         samba_cv_optimize_out_funcation_calls=yes,samba_cv_optimize_out_funcation_calls=no)])
787 if test x"$samba_cv_optimize_out_funcation_calls" = x"yes"; then
788    AC_DEFINE(HAVE_COMPILER_WILL_OPTIMIZE_OUT_FNS,1,[Whether the compiler will optimize out function calls])
791 #############################################
792 # check for fd passing struct via msg_control
793 AC_CACHE_CHECK([for fd passing via msg_control],samba_cv_msghdr_msg_control, [
794     AC_TRY_COMPILE([
795 #include <sys/types.h>
796 #include <stdlib.h>
797 #include <stddef.h>
798 #include <sys/socket.h>
799 #include <sys/un.h>],
801         struct msghdr msg;
802         union {
803               struct cmsghdr cm;
804               char control[CMSG_SPACE(sizeof(int))];
805         } control_un;
806         msg.msg_control = control_un.control;
807         msg.msg_controllen = sizeof(control_un.control);
809         samba_cv_msghdr_msg_control=yes,samba_cv_msghdr_msg_control=no)])
810 if test x"$samba_cv_msghdr_msg_control" = x"yes"; then
811    AC_DEFINE(HAVE_MSGHDR_MSG_CONTROL,1,
812              [If we can use msg_control for passing file descriptors])
815 #############################################
816 # check for fd passing struct via msg_acctrights
817 AC_CACHE_CHECK([for fd passing via msg_acctrights],
818                 samba_cv_msghdr_msg_acctrights, [
819     AC_TRY_COMPILE([
820 #include <sys/types.h>
821 #include <stdlib.h>
822 #include <stddef.h>
823 #include <sys/socket.h>
824 #include <sys/un.h>],
826         struct msghdr msg;
827         int fd;
828         msg.msg_acctrights = (caddr_t) &fd;
829         msg.msg_acctrightslen = sizeof(fd);
831         samba_cv_msghdr_msg_acctrights=yes,samba_cv_msghdr_msg_acctrights=no)])
832 if test x"$samba_cv_msghdr_msg_acctrights" = x"yes"; then
833    AC_DEFINE(HAVE_MSGHDR_MSG_ACCTRIGHTS,1,
834              [If we can use msg_acctrights for passing file descriptors])
837 AC_CHECK_FUNCS(dirfd)
838 if test x"$ac_cv_func_dirfd" = x"yes"; then
839         default_shared_modules="$default_shared_modules vfs_syncops vfs_dirsort"
842 AC_CACHE_CHECK([for struct sigevent type],samba_cv_struct_sigevent, [
843     AC_TRY_COMPILE([
844 #include <sys/types.h>
845 #if STDC_HEADERS
846 #include <stdlib.h>
847 #include <stddef.h>
848 #endif
849 #include <signal.h>],[struct sigevent s;],
850         samba_cv_struct_sigevent=yes,samba_cv_struct_sigevent=no)])
851 if test x"$samba_cv_struct_sigevent" = x"yes"; then
852    AC_DEFINE(HAVE_STRUCT_SIGEVENT,1,[Whether we have the struct sigevent])
853    AC_CHECK_MEMBERS([struct sigevent.sigev_value.sival_ptr,struct sigevent.sigev_value.sigval_ptr], , ,
854         [#include <signal.h>])
857 # and glibc has setresuid under linux but the function does
858 # nothing until kernel 2.1.44! very dumb.
859 AC_CACHE_CHECK([for real setresuid],samba_cv_have_setresuid,[
860     AC_TRY_RUN([#include <errno.h>
861 main() { setresuid(1,1,1); setresuid(2,2,2); return(errno==EPERM?0:1);}],
862         samba_cv_have_setresuid=yes,samba_cv_have_setresuid=no,samba_cv_have_setresuid=cross)])
863 if test x"$samba_cv_have_setresuid" = x"yes"; then
864     AC_DEFINE(HAVE_SETRESUID,1,[Whether the system has setresuid])
867 # Do the same check for setresguid...
869 AC_CACHE_CHECK([for real setresgid],samba_cv_have_setresgid,[
870     AC_TRY_RUN([#include <unistd.h>
871 #include <errno.h>
872 main() { errno = 0; setresgid(1,1,1); return(errno != 0 ? (errno==EPERM ? 0 : 1) : 0);}],
873         samba_cv_have_setresgid=yes,samba_cv_have_setresgid=no,samba_cv_have_setresgid=cross)])
874 if test x"$samba_cv_have_setresgid" = x"yes"; then
875     AC_DEFINE(HAVE_SETRESGID,1,[Whether the system has setresgid])
878 AC_FUNC_MEMCMP
880 ###############################################
881 # Readline included by default unless explicitly asked not to
882 test "${with_readline+set}" != "set" && with_readline=yes
884 # test for where we get readline() from
885 AC_MSG_CHECKING(whether to use readline)
886 AC_ARG_WITH(readline,
887 [AS_HELP_STRING([--with-readline[=DIR]], [Look for readline include/libs in DIR (default=auto)])],
888 [  case "$with_readline" in
889   yes)
890     AC_MSG_RESULT(yes)
892     AC_CHECK_HEADERS(readline.h history.h readline/readline.h)
893     AC_CHECK_HEADERS(readline/history.h)
895     AC_CHECK_HEADERS(readline.h readline/readline.h,[
896       for termlib in ncurses curses termcap terminfo termlib tinfo; do
897        AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break])
898       done
899       AC_CHECK_LIB(readline, rl_callback_handler_install,
900        [TERMLIBS="-lreadline $TERMLIBS"
901        AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline])
902        break], [TERMLIBS=], $TERMLIBS)])
903     ;;
904   no)
905     AC_MSG_RESULT(no)
906     ;;
907   *)
908     AC_MSG_RESULT(yes)
910     # Needed for AC_CHECK_HEADERS and AC_CHECK_LIB to look at
911     # alternate readline path
912     _ldflags=${LDFLAGS}
913     _cppflags=${CPPFLAGS}
915     # Add additional search path
916     LDFLAGS="-L$with_readline/lib $LDFLAGS"
917     CPPFLAGS="-I$with_readline/include $CPPFLAGS"
919     AC_CHECK_HEADERS(readline.h history.h readline/readline.h)
920     AC_CHECK_HEADERS(readline/history.h)
922     AC_CHECK_HEADERS(readline.h readline/readline.h,[
923       for termlib in ncurses curses termcap terminfo termlib; do
924        AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break])
925       done
926       AC_CHECK_LIB(readline, rl_callback_handler_install,
927        [TERMLDFLAGS="-L$with_readline/lib"
928        TERMCPPFLAGS="-I$with_readline/include"
929        CPPFLAGS="-I$with_readline/include $CPPFLAGS"
930        TERMLIBS="-lreadline $TERMLIBS"
931        AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline])
932        break], [TERMLIBS= CPPFLAGS=$_cppflags], $TERMLIBS)])
934     LDFLAGS=$_ldflags
935     ;;
936   esac],
937   AC_MSG_RESULT(no)
939 AC_SUBST(TERMLIBS)
940 AC_SUBST(TERMLDFLAGS)
942 # The readline API changed slightly from readline3 to readline4, so
943 # code will generate warnings on one of them unless we have a few
944 # special cases.
945 AC_CHECK_LIB(readline, rl_completion_matches,
946              [AC_DEFINE(HAVE_NEW_LIBREADLINE, 1,
947                         [Do we have rl_completion_matches?])],
948              [],
949              [$TERMLIBS])
951 # not all readline libs have rl_event_hook or history_list
952 AC_CHECK_DECLS(rl_event_hook, [], [], [#include <readline/readline.h>])
953 AC_CHECK_LIB(readline, history_list,
954              [AC_DEFINE(HAVE_HISTORY_LIST, 1, [Do we have history_list?])],
955              [],
956              [$TERMLIBS])
958 ###############################################
959 # test for where we get yp_get_default_domain() from
960 AC_SEARCH_LIBS(yp_get_default_domain, [nsl])
961 AC_CHECK_FUNCS(yp_get_default_domain)
963 # Check if we have execl, if not we need to compile smbrun.
964 AC_CHECK_FUNCS(execl)
965 if test x"$ac_cv_func_execl" = x"no"; then
966     EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/smbrun"
969 AC_CHECK_FUNCS(getcwd fchown chmod fchmod mknod mknod64)
970 AC_CHECK_FUNCS(strtol)
971 AC_CHECK_FUNCS(strchr chflags)
972 AC_CHECK_FUNCS(getrlimit fsync setpgid)
973 AC_CHECK_FUNCS(fdatasync,,[AC_CHECK_LIB_EXT(rt, LIBS, fdatasync)])
974 AC_CHECK_FUNCS(setsid glob strpbrk crypt16 getauthuid)
975 AC_CHECK_FUNCS(sigprocmask sigblock sigaction sigset innetgr setnetgrent getnetgrent endnetgrent)
976 AC_CHECK_FUNCS(initgroups select rdchk getgrnam getgrent pathconf)
977 AC_CHECK_FUNCS(getgrset)
978 AC_CHECK_FUNCS(setpriv setgidx setuidx setgroups syscall sysconf)
979 AC_CHECK_FUNCS(atexit grantpt posix_openpt posix_fallocate)
980 AC_CHECK_FUNCS(fallocate)
981 AC_CHECK_FUNCS(fseeko setluid getpwanam)
982 AC_CHECK_FUNCS(fdopendir)
983 AC_CHECK_FUNCS(getpwent_r)
984 AC_CHECK_FUNCS(setenv strcasecmp fcvt fcvtl)
985 AC_CHECK_FUNCS(syslog vsyslog timegm)
986 AC_CHECK_FUNCS(setlocale)
987 AC_CHECK_FUNCS(nanosleep,,[AC_CHECK_LIB_EXT(rt, LIBS, nanosleep)])
988 AC_CHECK_FUNCS(lutimes futimes utimensat futimens)
989 AC_CHECK_FUNCS(mlock munlock mlockall munlockall)
990 AC_CHECK_FUNCS(memalign posix_memalign hstrerror)
991 AC_CHECK_HEADERS(sys/mman.h)
992 # setbuffer, shmget, shm_open are needed for smbtorture
993 AC_CHECK_FUNCS(shmget shm_open)
994 AC_CHECK_FUNCS(gettext dgettext)
995 AC_CHECK_FUNCS(bindtextdomain textdomain bind_textdomain_codeset)
996 AC_CHECK_FUNCS(strupr)
998 # Find a method of generating a stack trace
999 AC_CHECK_HEADERS(execinfo.h libexc.h libunwind.h)
1000 # libexecinfo provides backtrace_symbols on FreeBSD
1001 AC_SEARCH_LIBS(backtrace_symbols, [execinfo])
1002 AC_CHECK_FUNCS(backtrace_symbols)
1003 AC_CHECK_LIB(exc, trace_back_stack)
1005 # check for sysctlbyname and sysctl for BSD systems
1006 AC_CHECK_FUNCS(sysctlbyname)
1007 AC_CHECK_FUNCS(sysctl)
1009 #################################################
1010 # Check to see if core dump directory is defined in linux
1011 # with /proc/sys/kernel/core_pattern
1013 AC_CHECK_FILE([/proc/sys/kernel/core_pattern],
1014         AC_DEFINE(HAVE_SYS_KERNEL_PROC_CORE_PATTERN, 1,
1015         [Whether Linux kernel uses core_pattern for core files]),
1016          [])
1018 #############################
1019 # check if building with gpfs
1020 AC_CHECK_HEADERS(gpfs_gpl.h)
1021 if test x"$ac_cv_header_gpfs_gpl_h" = x"yes"; then
1022     AC_DEFINE(HAVE_GPFS,1,[Whether GPFS GPL headers are available])
1023     default_shared_modules="$default_shared_modules vfs_gpfs"
1026 #############################
1027 # check if building with libcephfs
1028 # fail if --with-libcephfs specified but no headers found
1029 printf "%s" "checking for CephFS... "
1030 AC_CHECK_HEADERS(cephfs/libcephfs.h)
1032 save_LIBS="$LIBS"
1033 LIBS="$LIBS -lcephfs"
1034 AC_TRY_LINK([#include <cephfs/libcephfs.h>],
1035           [ceph_version(0, 0, 0)],
1036           samba_cv_HAVE_CEPHFS=yes,
1037           samba_cv_HAVE_CEPHFS=no
1038           )
1040 if test x"$ac_cv_header_cephfs_libcephfs_h" = x"yes" && test x"$samba_cv_HAVE_CEPHFS" = x"yes"; then
1041     AC_DEFINE(HAVE_CEPH, 1, [Whether CEPH headers are available])
1042     default_shared_modules="$default_shared_modules vfs_ceph"
1043     save_CFLAGS="$CFLAGS"
1044     save_LDFLAGS="$LDFLAGS"
1045     save_LIBS="$save_LIBS -lcephfs"
1046 else
1047     if test x"$CEPHFS_PATH_SPEC" = x"yes"; then
1048         AC_MSG_ERROR([No valid libcephfs found in ${CEPHFS_PATH}])
1049     fi
1052 CFLAGS="$save_CFLAGS"
1053 LDFLAGS="$save_LDFLAGS"
1054 LIBS="$save_LIBS"
1056 # Note that all the libunwind symbols in the API are defined to internal
1057 # platform-specific version, so we must include libunwind.h before checking
1058 # any of them.
1059 AC_MSG_CHECKING([for libunwind])
1060 save_LIBS=$LIBS
1062 UNWIND_ARCH="unknown"
1063 if test x"$UNAME_I" != x"unknown"; then
1064         UNWIND_ARCH="$UNAME_I"
1065 elif test x"$UNAME_M" != x"unknown"; then
1066         UNWIND_ARCH="$UNAME_M"
1067 elif test x"$UNAME_P" != x"unknown"; then
1068         UNWIND_ARCH="$UNAME_P"
1071 case "$UNWIND_ARCH" in
1072         unknown)
1073                 # This probably won't link without
1074                 # the platform-specific libunwind.
1075                 LIBS="$LIBS -lunwind"
1076                 ;;
1077         i386|i586|i686)
1078                 # Add the platform-specific libunwind module.
1079                 LIBS="$LIBS -lunwind -lunwind-x86"
1080                 ;;
1081         *)
1082                 # Add the platform-specific libunwind module.
1083                 # based on uname -i, uname -m or uname -p
1084                 LIBS="$LIBS -lunwind -lunwind-$UNWIND_ARCH"
1085                 ;;
1086 esac
1088 AC_TRY_LINK(
1089     [
1090 #ifdef HAVE_LIBUNWIND_H
1091 #include <libunwind.h>
1092 #endif
1093     ],
1094     [
1095         unw_context_t ctx; unw_cursor_t cur;
1096         char buf[256]; unw_word_t off;
1097         unw_getcontext(&ctx); unw_init_local(&cur, &ctx);
1098         unw_get_proc_name(&cur, buf, sizeof(buf), &off);
1099     ],
1100     [
1101         AC_MSG_RESULT(yes)
1102         AC_DEFINE(HAVE_LIBUNWIND, 1, [Whether libunwind is available])
1104         # If we have libunwind, test whether we also have libunwind-ptrace
1105         # which would let us unwind arbitrary processes.
1106         save_LIBS=$LIBS
1107         AC_CHECK_HEADERS(libunwind-ptrace.h)
1108         AC_CHECK_LIB(unwind-ptrace, _UPT_create,
1109             [
1110                 LIBUNWIND_PTRACE="-lunwind-ptrace";
1111                 AC_DEFINE(HAVE_LIBUNWIND_PTRACE, 1,
1112                     [Whether libunwind-ptrace.a is available.])
1113             ],
1114             [ LIBUNWIND_PTRACE="" ])
1116         LIBS=$save_LIBS
1117     ],
1118     [
1119         AC_MSG_RESULT(no)
1120         LIBS=$save_LIBS
1121     ])
1123 # To use libunwind-ptrace, we also need to make some ptrace system calls.
1124 if test x"$LIBUNWIND_PTRACE" != x"" ; then
1125     AC_CHECK_HEADERS(sys/ptrace.h)
1126     AC_MSG_CHECKING([for the Linux ptrace(2) interface])
1127     AC_TRY_LINK(
1128             [
1129 #if HAVE_SYS_TYPES_H
1130 #include <sys/types.h>
1131 #endif
1132 #if HAVE_SYS_PTRACE_H
1133 #include <sys/ptrace.h>
1134 #endif
1135             ],
1136             [
1137                 pid_t me = (pid_t)-1;
1138                 ptrace(PTRACE_ATTACH, me, 0, 0);
1139                 ptrace(PTRACE_DETACH, me, 0, 0);
1140                 return 0;
1141             ],
1142             [
1143                 AC_MSG_RESULT(yes)
1144                 AC_DEFINE(HAVE_LINUX_PTRACE, 1,
1145                     [Whether the Linux ptrace(2) interface is available.])
1146             ],
1147             [
1148                 AC_MSG_RESULT(no)
1149                 LIBUNWIND_PTRACE=""
1150             ])
1153 AC_SUBST(LIBUNWIND_PTRACE)
1155 AC_CHECK_FUNCS(_dup _dup2 _opendir _readdir _seekdir _telldir _closedir)
1156 AC_CHECK_FUNCS(__dup __dup2 __opendir __readdir __seekdir __telldir __closedir)
1157 AC_CHECK_FUNCS(__getcwd _getcwd)
1158 AC_CHECK_FUNCS(__xstat __fxstat __lxstat)
1159 AC_CHECK_FUNCS(_stat _lstat _fstat __stat __lstat __fstat)
1160 AC_CHECK_FUNCS(_acl __acl _facl __facl _open __open _chdir __chdir)
1161 AC_CHECK_FUNCS(_close __close _fchdir __fchdir _fcntl __fcntl)
1162 AC_CHECK_FUNCS(getdents __getdents _lseek __lseek _read __read)
1163 AC_CHECK_FUNCS(getdirentries _write __write _fork __fork)
1164 AC_CHECK_FUNCS(__sys_llseek llseek _llseek __llseek)
1165 AC_CHECK_FUNCS(pread _pread __pread)
1166 AC_CHECK_FUNCS(pwrite _pwrite __pwrite)
1167 AC_CHECK_FUNCS(prctl)
1169 AC_TRY_COMPILE([
1170 #ifdef HAVE_SYS_PRCTL_H
1171 #include <sys/prctl.h>
1172 #endif
1174 [int i; i = prtcl(0); ],
1175 AC_DEFINE(HAVE_PRCTL, 1, [Whether prctl is available]),[])
1180 case "$host_os" in
1181     *linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu)
1182        # glibc <= 2.3.2 has a broken getgrouplist
1183        AC_CACHE_CHECK([for good getgrouplist],samba_cv_linux_getgrouplist_ok,[AC_TRY_RUN([
1184 #include <unistd.h>
1185 #include <sys/utsname.h>
1186 main() {
1187        /* glibc up to 2.3 has a broken getgrouplist */
1188 #if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
1189        int libc_major = __GLIBC__;
1190        int libc_minor = __GLIBC_MINOR__;
1192        if (libc_major < 2)
1193               return(1);
1194        if ((libc_major == 2) && (libc_minor <= 3))
1195               return(1);
1196 #endif
1197        return(0);
1199 ], [samba_cv_linux_getgrouplist_ok=yes],
1200    [samba_cv_linux_getgrouplist_ok=no],
1201    [samba_cv_linux_getgrouplist_ok=cross])])
1202        if test x"$samba_cv_linux_getgrouplist_ok" = x"yes"; then
1203           AC_DEFINE(HAVE_GETGROUPLIST, 1, [Have good getgrouplist])
1204        fi
1205        ;;
1206     *)
1207        AC_CHECK_FUNCS(getgrouplist)
1208        ;;
1209 esac
1211 #################################################
1212 # Check whether struct stat has timestamps with sub-second resolution.
1215 samba_cv_stat_hires=no
1216 AC_CHECK_MEMBERS([struct stat.st_mtim.tv_nsec], # Linux, Solaris
1217         [samba_cv_stat_hires=yes])
1218 AC_CHECK_MEMBERS([struct stat.st_mtimensec], # BSD, if defined _POSIX_SOURCE
1219         [samba_cv_stat_hires=yes])
1220 AC_CHECK_MEMBERS([struct stat.st_mtimespec.tv_nsec], # BSD, if not defined _POSIX_SOURCE
1221         [samba_cv_stat_hires=yes])
1222 AC_CHECK_MEMBERS([struct stat.st_mtime_n], # AIX
1223         [samba_cv_stat_hires=yes])
1224 AC_CHECK_MEMBERS([struct stat.st_umtime], # Tru64
1225         [samba_cv_stat_hires=yes])
1227 if test x"$samba_cv_stat_hires" = x"yes" ; then
1228     AC_DEFINE(HAVE_STAT_HIRES_TIMESTAMPS, 1,
1229             [whether struct stat has sub-second timestamps])
1232 # recent FreeBSD, NetBSD have creation timestamps called birthtime:
1233 AC_CHECK_MEMBERS([struct stat.st_birthtimespec.tv_nsec])
1234 AC_CHECK_MEMBERS([struct stat.st_birthtime], AC_CHECK_MEMBERS([struct stat.st_birthtimensec]))
1237 AC_CACHE_CHECK([whether there is DOS flags support in the stat struct], samba_cv_stat_dos_flags,
1238     [
1239         AC_TRY_COMPILE(
1240             [#include <sys/stat.h>],
1241             [
1242                 int a = UF_DOS_ARCHIVE;
1243                 int h = UF_DOS_HIDDEN;
1244                 int r = UF_DOS_RO;
1245                 int s = UF_DOS_SYSTEM;
1246                 int i = UF_DOS_NOINDEX;
1247                 int f = UF_DOS_FLAGS;
1248             ],
1249             samba_cv_stat_dos_flags=yes, samba_cv_stat_dos_flags=no)
1250     ])
1252 if test x"$samba_cv_stat_dos_flags" = x"yes" ; then
1253     AC_DEFINE(HAVE_STAT_DOS_FLAGS, 1, [whether there is DOS flags support in the stat struct])
1256 AC_CACHE_CHECK([whether we can compile with __attribute__((destructor))],
1257                samba_cv_function_attribute_destructor,
1258                [
1259                  AC_COMPILE_IFELSE([AC_LANG_SOURCE(
1260                         [
1261                                 __attribute__((destructor))
1262                                 static void cleanup(void) { }
1263                         ])],
1264                         samba_cv_function_attribute_destructor=yes)
1265                 ])
1267 if test x"$samba_cv_function_attribute_destructor" = xyes ; then
1268    AC_DEFINE(HAVE_FUNCTION_ATTRIBUTE_DESTRUCTOR, 1,
1269              [whether we can compile with __attribute__((destructor))])
1272 #####################################
1273 # needed for SRV lookups
1274 AC_CHECK_LIB(resolv, dn_expand)
1275 AC_CHECK_LIB(resolv, _dn_expand)
1276 AC_CHECK_LIB(resolv, __dn_expand)
1277 AC_CHECK_LIB(inet, dn_expand)
1280 # Check for the functions putprpwnam, set_auth_parameters,
1281 # getspnam, bigcrypt and getprpwnam in -lsec and -lsecurity
1282 # Needed for OSF1 and HPUX.
1285 AC_LIBTESTFUNC(security, putprpwnam)
1286 AC_LIBTESTFUNC(sec, putprpwnam)
1288 AC_LIBTESTFUNC(security, set_auth_parameters)
1289 AC_LIBTESTFUNC(sec, set_auth_parameters)
1291 # UnixWare 7.x has its getspnam in -lgen
1292 AC_LIBTESTFUNC(gen, getspnam)
1294 AC_LIBTESTFUNC(security, getspnam)
1295 AC_LIBTESTFUNC(sec, getspnam)
1297 AC_LIBTESTFUNC(security, bigcrypt)
1298 AC_LIBTESTFUNC(sec, bigcrypt)
1300 AC_LIBTESTFUNC(security, getprpwnam)
1301 AC_LIBTESTFUNC(sec, getprpwnam)
1303 AC_CHECK_FUNCS(strsignal)
1305 AC_DISABLE_STATIC
1306 AC_ENABLE_SHARED
1308 # Set defaults
1309 PIE_CFLAGS=""
1310 PIE_LDFLAGS=""
1311 AC_ARG_ENABLE(pie, [AS_HELP_STRING([--enable-pie], [Turn on pie support if available (default=yes)])])
1313 if test "x$enable_pie" != xno
1314 then
1315         AC_CACHE_CHECK(for -pie and -fPIE, samba_cv_fpie,
1316         [
1317                 cat > conftest.c <<EOF
1318 int foo;
1319 int main () { return 0;}
1321                 if AC_TRY_COMMAND_NO_STDERR([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -pie -fPIE -o conftest conftest.c])
1322                 then
1323                         samba_cv_fpie=yes
1324                 else
1325                         samba_cv_fpie=no
1326                 fi
1327                 rm -f conftest*
1328         ])
1329         if test x"${samba_cv_fpie}" = x"yes"
1330         then
1331                 PIE_CFLAGS="-fPIE"
1332                 PIE_LDFLAGS="-pie"
1333         fi
1336 # Set defaults
1337 RELRO_LDFLAGS=""
1338 AC_ARG_ENABLE(relro, [AS_HELP_STRING([--enable-relro], [Turn on Relocations Read-Only (relro) support if available (default=yes)])])
1340 if test "x$enable_relro" != xno
1341 then
1342         AC_CACHE_CHECK([for -Wl,-z,relro], samba_cv_relro,
1343         [
1344                 cat > conftest.c <<EOF
1345 int foo;
1346 main () { return 0;}
1348                 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -Wl,-z,relro -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD])
1349                 then
1350                         samba_cv_relro=yes
1351                 else
1352                         samba_cv_relro=no
1353                 fi
1354                 rm -f conftest*
1355         ])
1356         if test x"${samba_cv_relro}" = x"yes"
1357         then
1358                 RELRO_LDFLAGS="-Wl,-z,relro"
1359         fi
1362 # Set defaults
1363 SYMSEXT="syms"
1364 AC_SUBST(SYMSEXT)
1366 # Assume non-shared by default and override below
1367 BLDSHARED="false"
1369 # these are the defaults, good for lots of systems
1370 HOST_OS="$host_os"
1371 LDSHFLAGS="-shared"
1372 MODULE_EXPORTS=""
1373 SONAMEFLAG="#"
1374 SHLD="\${CC} \${CFLAGS}"
1375 PICFLAG="${PIE_CFLAGS}"
1376 SHLIBEXT="so"
1377 DSO_EXPORTS=""
1379 # this bit needs to be modified for each OS that supports share libs
1380 # You need to specify how to create a shared library and
1381   # how to compile C code to produce PIC object files
1383   AC_MSG_CHECKING([ability to build shared libraries])
1385   # and these are for particular systems
1386   case "$host_os" in
1387                 *linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu | *qnx*)
1388                         case "$host_os" in
1389                                 *linux*) AC_DEFINE(LINUX,1,[Whether the host os is linux]) ;;
1390                                 *qnx*) AC_DEFINE(QNX,1,[Whether the host os is qnx]) ;;
1391                         esac
1392                         BLDSHARED="true"
1393                         LDSHFLAGS="-shared -Wl,-Bsymbolic"
1394                         if test "${ac_cv_gnu_ld_no_default_allow_shlib_undefined}" = "yes"; then
1395                                 LDSHFLAGS_Z_NODEFS="-Wl,--allow-shlib-undefined"
1396                         fi
1397                         DYNEXP="-Wl,--export-dynamic"
1398                         PICFLAG="-fPIC"
1399                         SONAMEFLAG="-Wl,-soname="
1400                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1401                         ;;
1402                 *solaris*) AC_DEFINE(SUNOS5,1,[Whether the host os is solaris])
1403                         BLDSHARED="true"
1404                         if test "${GCC}" = "yes"; then
1405                                 PICFLAG="-fPIC"
1406                                 SONAMEFLAG="-Wl,-soname="
1407                                 if test "${ac_cv_prog_gnu_ld}" = "yes"; then
1408                                         DYNEXP="-Wl,-E"
1409                                 fi
1410                                 LDSHFLAGS="-shared"
1411                         else
1412                                 PICFLAG="-KPIC"
1413                                 LDSHFLAGS="-G"
1414                         fi
1415                         if test "$ac_cv_prog_gnu_ld" = "yes"; then
1416                                 SONAMEFLAG="-Wl,-soname="
1417                         else
1418                                 SONAMEFLAG="-Wl,-h,"
1419                         fi
1420                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1421                         ;;
1422                 *sunos*) AC_DEFINE(SUNOS4,1,[Whether the host os is sunos4])
1423                         BLDSHARED="true"
1424                         LDSHFLAGS="-G"
1425                         SONAMEFLAG="-Wl,-h,"
1426                         PICFLAG="-KPIC"   # Is this correct for SunOS
1427                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1428                         ;;
1429                 *netbsd* | *freebsd* | *dragonfly* )
1430                         BLDSHARED="true"
1431                         LDSHFLAGS="-shared"
1432                         DYNEXP="-Wl,--export-dynamic"
1433                         SONAMEFLAG="-Wl,-soname,"
1434                         PICFLAG="-fPIC -DPIC"
1435                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1436                         ;;
1437                 *openbsd*)  BLDSHARED="true"
1438                         LDSHFLAGS="-shared"
1439                         DYNEXP="-Wl,-Bdynamic"
1440                         SONAMEFLAG="-Wl,-soname,"
1441                         PICFLAG="-fPIC"
1442                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1443                         ;;
1444                 *irix*) BLDSHARED="true"
1445                         LDSHFLAGS="-Wl,-set_version,sgi1.0 -shared"
1446                         SONAMEFLAG="-Wl,-soname,"
1447                         if test "${GCC}" = "yes"; then
1448                                 PICFLAG="-fPIC"
1449                         else
1450                                 PICFLAG="-KPIC"
1451                         fi
1452                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1453                         ;;
1454                 *aix*) AC_DEFINE(AIX,1,[Whether the host os is aix])
1455                         BLDSHARED="true"
1456                         # use expfull to export underscored symbols
1457                         # add rtl to remove /lib/crt0.o warning
1458                         LDSHFLAGS="-Wl,-G,-bexpfull,-bbigtoc,-brtl"
1459                         DYNEXP="-Wl,-brtl,-bexpfull,-bbigtoc"
1460                         PICFLAG="-O2"
1461                         # as AIX code is always position independent...
1462                         # .po will just create compile warnings, use po.o:
1463                         if test "${GCC}" != "yes"; then
1464                                 ## for funky AIX compiler using strncpy()
1465                                 CFLAGS="$CFLAGS -D_LINUX_SOURCE_COMPAT -qmaxmem=32000 -qhalt=e"
1466                         fi
1468                         AC_DEFINE(STAT_ST_BLOCKSIZE,DEV_BSIZE,[The size of a block])
1469                         AC_DEFINE(BROKEN_STRNLEN,1,[Does strnlen work correctly])
1470                         AC_DEFINE(BROKEN_STRNDUP,1,[Does strndup work correctly])
1471                         ;;
1472                 *hpux*) AC_DEFINE(HPUX,1,[Whether the host os is HPUX])
1473                         # ia64: 64bit build using gcc with CFLAGS="-mpl64"
1474                         #       64bit build using HP's cc with CFLAGS="+DD64"
1475                         # hppa: 64bit build unsupported by gcc
1476                         #       64bit build using HP's cc with CFLAGS="+DA2.0w"
1477                         # HP-UX 11.00 ld needs PHSS_33034
1478                         BLDSHARED="true"
1479                         if test "${GCC}" = "yes"; then
1480                                 PICFLAG="-fPIC"
1481                                 LDSHFLAGS="-shared"
1482                         else
1483                                 PICFLAG="+z"
1484                                 LDSHFLAGS="-b"
1485                                 # "Uses depth-first symbol resolution"
1486                                 LDSHFLAGS="$LDSHFLAGS -Wl,-B,symbolic,-b"
1487                                 if test "$host_cpu" != "ia64"; then
1488                                         # "don't store literals in read-only memory" (?):
1489                                         PICFLAG="$PICFLAG +ESnolit"
1490                                 fi
1491                         fi
1492                         if test "$host_cpu" = "ia64"; then
1493                                 SHLIBEXT="so"
1494                                 # TODO: does the linker find the right 32/64 bit version of the libs? :
1495                                 DYNEXP="-Wl,-E,+b/usr/local/lib/hpux32:/usr/lib/hpux32:/usr/local/lib/hpux64:/usr/lib/hpux64"
1496                         else
1497                                 SHLIBEXT="sl"
1498                                 DYNEXP="-Wl,-E,+b/usr/local/lib:/usr/lib"
1499                         fi
1500                         if test "$ac_cv_prog_gnu_ld" = "yes"; then
1501                                 SONAMEFLAG="-Wl,-soname="
1502                         else
1503                                 SONAMEFLAG="-Wl,+h,"
1504                         fi
1505                         # PIE/PIC flags at link time are required on HP-UX because
1506                         # linking requires a temporary source file, which is being
1507                         # compiled with the indicated flags - which need to contain
1508                         # PIC flags when we don't support PIE flags:
1509                         if test "$PIE_LDFLAGS" = "" ; then
1510                                 PIE_LDFLAGS=\${PICFLAG}
1511                         fi
1512                         AC_DEFINE(STAT_ST_BLOCKSIZE,8192,[The size of a block])
1513                         AC_DEFINE(POSIX_ACL_NEEDS_MASK,1,[Does a POSIX ACL need a mask element])
1514                         ;;
1515                 *osf*) AC_DEFINE(OSF1,1,[Whether the host os is osf1])
1516                         BLDSHARED="true"
1517                         LDSHFLAGS="-shared"
1518                         SONAMEFLAG="-Wl,-soname,"
1519                         if test "${GCC}" = "yes"; then
1520                                 PICFLAG="-fPIC"
1521                         fi
1522                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1523                         for flags in "-expect_unresolved '*'" "-Wl,-expect_unresolved,'*'" ; do
1524                                 saved_ldflags="$LDFLAGS"
1525                                 AC_MSG_CHECKING([if $flags works])
1526                                 LDFLAGS="$flags $saved_ldflags"
1527                                 AC_TRY_LINK([],[],
1528                                         [AC_MSG_RESULT([yes])
1529                                         LDSHFLAGS_Z_NODEFS=$flags],
1530                                         AC_MSG_RESULT([no]))
1531                                 LDFLAGS="$saved_ldflags"
1532                                 test x"$LDSHFLAGS_Z_NODEFS" != x && break
1533                         done
1534                         ;;
1535                 *sco*) AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1536                         ;;
1537                 *unixware*) BLDSHARED="true"
1538                         LDSHFLAGS="-shared"
1539                         SONAMEFLAG="-Wl,-soname,"
1540                         PICFLAG="-KPIC"
1541                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1542                         ;;
1543                 *next2*) AC_DEFINE(NEXT2,1,[Whether the host os is NeXT v2])
1544                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1545                         ;;
1546                 *dgux*) AC_CHECK_PROG( ROFF, groff, [groff -etpsR -Tascii -man])
1547                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1548                         ;;
1549                 *sysv4*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1550                         case "$host" in
1551                                 *-univel-*)     if [ test "$GCC" != yes ]; then
1552                                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1553                                         fi
1554                                         LDSHFLAGS="-G"
1555                                         DYNEXP="-Bexport"
1556                                 ;;
1557                                 *mips-sni-sysv4*) AC_DEFINE(RELIANTUNIX,1,[Whether the host os is reliantunix]);;
1558                         esac
1559                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1560                         ;;
1562                 *sysv5*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1563                         if [ test "$GCC" != yes ]; then
1564                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1565                         fi
1566                         LDSHFLAGS="-G"
1567                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1568                         ;;
1569                 *vos*) AC_DEFINE(STAT_ST_BLOCKSIZE,4096)
1570                         BLDSHARED="false"
1571                         LDSHFLAGS=""
1572                         ;;
1574                 *darwin*)   AC_DEFINE(DARWINOS,1,[Whether the host os is Darwin/MacOSX])
1575                         BLDSHARED="true"
1576                         LDSHFLAGS="-dynamiclib -flat_namespace -undefined suppress"
1577                         CFLAGS="$CFLAGS -fno-common"
1578                         SHLD="\${CC}"
1579                         SHLIBEXT="dylib"
1580                         MODULE_EXPORTS="-exported_symbols_list \$(srcdir)/exports/modules-darwin.syms"
1581                         SHLIBEXT="dylib"
1582                         # Since gcc doesn't fail on unrecognised options, the
1583                         # PIE test incorrectly succeeds. Darwin gcc does not
1584                         # actually support the PIE stuff.
1585                         PIE_LDFLAGS=
1586                         PIE_CFLAGS=
1587                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1588                         ;;
1590                 *)
1591                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1592                         ;;
1593   esac
1595 if test "$enable_shared" != "yes"; then
1596         BLDSHARED=false
1599 if test "$enable_shared" = yes -a "${ac_cv_gnu_ld_version_script}" = yes; then
1600         DSO_EXPORTS=\$\(DSO_EXPORTS_CMD\)
1603 if test x"$BLDSHARED" = x"true" ; then
1604         LDFLAGS="$LDFLAGS -L./bin"
1607 AC_MSG_RESULT($BLDSHARED)
1609 if test x"$enable_developer" = x"yes" ; then
1610         default_as_needed=auto
1611 else
1612         default_as_needed=no
1614 AC_ARG_ENABLE(as-needed,
1615         AS_HELP_STRING([--enable-as-needed],
1616         [Turn on as-needed support if available (default=no)]),
1617         [enable_as_needed=$enableval],
1618         [enable_as_needed=$default_as_needed])
1619 if test "x$enable_as_needed" != xno; then
1620     saved_before_as_needed_ldflags="$LDFLAGS"
1621     for flags in "-Wl,--as-needed" "-Wl,-z,ignore" "-z ignore" ; do
1622         saved_ldflags="$LDFLAGS"
1623         AC_MSG_CHECKING([if $flags works])
1624         LDFLAGS="$flags $saved_ldflags"
1625         AC_TRY_LINK([],[],
1626                 [AC_MSG_RESULT([yes])
1627                 LD_AS_NEEDED_FLAG=$flags
1628                 ld_as_needed_flag_found=yes],
1629                 AC_MSG_RESULT([no]))
1630         LDFLAGS="$LD_AS_NEEDED_FLAG $saved_ldflags"
1631         test x"$ld_as_needed_flag_found" = xyes && break
1632     done
1635 if test x$ld_as_needed_flag_found = xyes -a x$enable_as_needed = xauto ; then
1636 # check if ld has bug described in https://bugzilla.samba.org/show_bug.cgi?id=7209#c17
1637         AC_MSG_CHECKING([if $LD_AS_NEEDED_FLAG has explicit external libs bug])
1638 cat > conftest_shb.c <<END
1639 void b() {}
1641 cat > conftest_sha.c <<END
1642 extern void b();
1643 void a() {
1644         b();
1647 cat > conftest.c <<END
1648 extern void a();
1649 int main() {
1650         a();
1651         return 0;
1655         rm -fr conftest
1656         AC_TRY_COMMAND([$CC $CPPFLAGS $CFLAGS $PICFLAG -c -o conftest_sha.o conftest_sha.c 1>&AS_MESSAGE_LOG_FD 2>&1])
1657         AC_TRY_COMMAND([$CC $CPPFLAGS $CFLAGS $PICFLAG -c -o conftest_shb.o conftest_shb.c 1>&AS_MESSAGE_LOG_FD 2>&1])
1658         TESTCMD="`eval echo \"$SHLD $LDSHFLAGS $PICFLAG\"`"
1659         AC_TRY_COMMAND([$TESTCMD -o libconftest_shb.$SHLIBEXT conftest_shb.o 1>&AS_MESSAGE_LOG_FD 2>&1])
1660         AC_TRY_COMMAND([$TESTCMD -o libconftest_sha.$SHLIBEXT conftest_sha.o 1>&AS_MESSAGE_LOG_FD 2>&1])
1661         AC_TRY_COMMAND([$CC -o conftest conftest.c $LDFLAGS -L. -lconftest_sha -lconftest_shb 1>&AS_MESSAGE_LOG_FD 2>&1])
1662         if AC_TRY_COMMAND([eval "$LIB_PATH_VAR=. ./conftest 1>&AS_MESSAGE_LOG_FD 2>&1"])
1663         then
1664                 AC_MSG_RESULT([no])
1665         else
1666                 ld_as_needed_flag_found=no
1667                 LDFLAGS="$saved_before_as_needed_ldflags"
1668                 AC_MSG_RESULT([yes])
1669         fi
1670         rm conftest* libconftest*
1673 # check if we have to disable LD_AS_NEEDED_FLAG:
1674 # On some systems for a veriety of reasons linking with
1675 # -Wl,--as-needed -lreadline -lncurses fails
1676 # we have to retest, if these combination is detected before.
1677 # Bugzilla #7209
1679 if test x$ac_cv_lib_readline_rl_callback_handler_install = xyes ; then
1680         if test x$ld_as_needed_flag_found = xyes ; then
1681                 AC_MSG_CHECKING([if $LD_AS_NEEDED_FLAG works with readline])
1682                 # try if check no fails
1683                 save_LIBS=$LIBS
1684                 LIBS="$LIBS $TERMLIBS"
1685                 AC_TRY_LINK([], [rl_callback_handler_install();], [AC_MSG_RESULT([yes])],[ AC_MSG_RESULT([no]); LDFLAGS="$saved_before_as_needed_ldflags"])
1686                 LIBS="$save_LIBS"
1687         fi
1692 # for historical reasons almost all linkers don't complain about unresolved
1693 # symbols in shared libs. Except for the internal samba modules we want to get
1694 # errors when we produce a shared lib with unresolved symbols. On some
1695 # platforms unresolved symbols might be intended, so we might have to add
1696 # platform specific exceptions here.
1698 for flags in "-Wl,-z,defs" "-error_unresolved" "-Wl,-error_unresolved" ; do
1699         saved_ldflags="$LDFLAGS"
1700         AC_MSG_CHECKING([if $flags works])
1701         LDFLAGS="$flags $saved_ldflags"
1702         AC_TRY_LINK([],[],
1703         [AC_MSG_RESULT([yes])
1704         LDSHFLAGS_Z_DEFS=$flags
1705         ldshflags_z_defs_found=yes],
1706         AC_MSG_RESULT([no]))
1707         LDFLAGS=$saved_ldflags
1708         test x"$ldshflags_z_defs_found" = xyes && break
1709 done
1711 AC_MSG_CHECKING([LDSHFLAGS_Z_DEFS])
1712 AC_MSG_RESULT([$LDSHFLAGS_Z_DEFS])
1713 AC_MSG_CHECKING([LDFLAGS])
1714 AC_MSG_RESULT([$LDFLAGS])
1715 AC_MSG_CHECKING([DYNEXP])
1716 AC_MSG_RESULT([$DYNEXP])
1718 #######################################################
1719 # test whether building a shared library actually works
1720 if test $BLDSHARED = true; then
1722 AC_MSG_CHECKING([SHLD])
1723 AC_MSG_RESULT([$SHLD])
1724 AC_MSG_CHECKING([LDSHFLAGS])
1725 AC_MSG_RESULT([$LDSHFLAGS])
1727 AC_MSG_CHECKING([SHLIBEXT])
1728 AC_MSG_RESULT([$SHLIBEXT])
1729 AC_MSG_CHECKING([SONAMEFLAG])
1730 AC_MSG_RESULT([$SONAMEFLAG])
1732 AC_MSG_CHECKING([PICFLAG])
1733 AC_MSG_RESULT([$PICFLAG])
1735 AC_MSG_CHECKING([NSSSONAMEVERSIONSUFFIX])
1736 AC_MSG_RESULT([$NSSSONAMEVERSIONSUFFIX])
1738 AC_CACHE_CHECK([whether building shared libraries actually works],
1739                [ac_cv_shlib_works],[
1740    # try building a trivial shared library
1741    ac_cv_shlib_works=no
1742    # The $SHLD and $LDSHFLAGS variables may contain references to other
1743    # variables so they need to be eval'ed.
1744    if AC_TRY_COMMAND([$CC $CPPFLAGS $CFLAGS $PICFLAG -c -o shlib.o ${srcdir-.}/../tests/shlib.c 1>&AS_MESSAGE_LOG_FD])
1745    then
1746      TESTCMD="`eval echo \"$SHLD $LDSHFLAGS $PICFLAG\"`"
1747      TESTCMD="$TESTCMD -o \"shlib.$SHLIBEXT\" shlib.o"
1748      if AC_TRY_COMMAND([eval $TESTCMD 1>&AS_MESSAGE_LOG_FD 2>&1])
1749      then
1750        ac_cv_shlib_works=yes
1751      fi
1752    fi
1753    rm -f "shlib.$SHLIBEXT" shlib.o
1756 if test $ac_cv_shlib_works = no; then
1757    BLDSHARED=false
1761 if test x"$BLDSHARED" != x"true"; then
1762         LDSHFLAGS="shared-libraries-disabled"
1763         SONAMEFLAG="shared-libraries-disabled"
1764         NSSSONAMEVERSIONSUFFIX="shared-libraries-disabled"
1765         SHLD="shared-libraries-disabled"
1766         PICFLAG="${PIE_CFLAGS}"
1767         SHLIBEXT="shared_libraries_disabled"
1768         smbtorture_possible=no
1771 AC_MSG_CHECKING([used PICFLAG])
1772 AC_MSG_RESULT([$PICFLAG])
1774 AC_DEFINE_UNQUOTED(SHLIBEXT, "$SHLIBEXT", [Shared library extension])
1778 ###########################################################
1780 # Configuration of subsystems / libraries
1782 ###########################################################
1784 INSTALLLIBCMD_SH=:
1785 INSTALLLIBCMD_A=:
1786 UNINSTALLLIBCMD_SH=:
1787 UNINSTALLLIBCMD_A=:
1789 if test $BLDSHARED = true; then
1790         INSTALLLIBCMD_SH="\$(INSTALLCMD)"
1791         UNINSTALLLIBCMD_SH="rm -f"
1793 if test $enable_static = yes; then
1794         INSTALLLIBCMD_A="\$(INSTALLCMD)"
1795         UNINSTALLLIBCMD_A="rm -f"
1798 #################################################
1799 # --disable-shared-libs
1800 # can be used to disable the internal use of shared libs altogether
1801 # (this only has an effect when building shared libs is enabled)
1803 USESHARED=false
1804 AC_SUBST(USESHARED)
1806 AC_MSG_CHECKING(whether to use shared libraries internally)
1807 AC_ARG_ENABLE([shared-libs],
1808         AS_HELP_STRING([--enable-shared-libs],
1809                 [Use shared libraries internally (default=yes)]),
1810         [enable_shared_libs=$enableval],
1811         [enable_shared_libs=yes])
1813 if test x"$enable_shared_libs" != x"no" ; then
1814         USESHARED=$BLDSHARED
1817 AC_MSG_RESULT([$USESHARED])
1819 if test x"$enable_shared_libs" = x"yes" -a x"$BLDSHARED" != x"true" ; then
1820         AC_MSG_WARN([--enable-shared-libs: no support for shared libraries])
1823 #################################################
1824 # --with-static-libs=LIBS:
1825 #   link (internal) libs dynamically or statically?
1827 # If a subsystem is built as a library then this controls whether they are
1828 # linked into Samba targets statically or dynamically:
1830 # * If we build the shared library at all, we link dynamically by default.
1832 # * We only link statically if we don't build shared or if the library
1833 #   appears in the --with-static-libs configure option.
1835 # Example:
1836 #   --with-static-libs=libtalloc makes use of libtalloc.a instead
1837 #   of linking the dynamic variant with -ltalloc.
1839 # NOTE: This option only affects libraries that we do not only build
1840 # but that samba also links against as libraries (as opposed to linking
1841 # the plain object files. - This has to be configured in Makefile.in.
1842 # So in particular it does not harm to give invalid or unknown names here.
1845 AC_ARG_WITH([static-libs],
1846         [AS_HELP_STRING([--with-static-libs=LIBS],
1847                 [Comma-separated list of names of (internal) libraries to link statically (instead of dynamically)])],
1848         [AS_IF([test $withval],
1849                 [for lib in `echo $withval | sed -e 's/,/ /g'` ; do
1850                         [lib=`echo $lib | tr '[a-z]' '[A-Z]'`]
1851                         eval LINK_$lib=STATIC
1852                 done], [])],
1853         [])
1856 # WORKAROUND:
1857 #   until we have organized other internal subsystems (as util, registry
1858 #   and smbconf) into shared libraries, we CAN NOT link libnetapi
1859 #   dynamically to samba programs.
1861 LINK_LIBNETAPI=STATIC
1863 LINK_LIBSMBCLIENT=STATIC
1866 #  The library versions are hardcoded here
1867 #  and filled into the LIBFOO_SOVER variable.
1869 #  TODO: for talloc and tdb (at least), these should
1870 #  be extracted from their respective source directories
1872 AC_ARG_ENABLE(external_libtalloc,
1873         [AS_HELP_STRING([--enable-external-libtalloc],
1874                 [Enable external talloc [default=auto]])],
1875         [ enable_external_libtalloc=$enableval ],
1876         [ enable_external_libtalloc=auto ])
1878 if test "x$enable_external_libtalloc" != xno
1879 then
1880         PKG_CHECK_MODULES(LIBTALLOC, talloc >= 2.0.1,
1881                 [ enable_external_libtalloc=yes ],
1882                 [ if test x$enable_external_libtalloc = xyes; then
1883                         AC_MSG_ERROR([Unable to find libtalloc])
1884                   else
1885                         enable_external_libtalloc=no
1886                   fi
1887                 ])
1890 if test "x$enable_external_libtalloc" = xno
1891 then
1892         m4_include(../lib/talloc/libtalloc.m4)
1893         LINK_LIBTALLOC=STATIC
1894         LIBTALLOCVERSION=`grep ^VERSION ${tallocdir}/wscript | sed -e "s/'//g" -e 's/.* //'`
1895         SMB_LIBRARY(talloc, 2, ${LIBTALLOCVERSION})
1896         LIBTALLOC_OBJ0=""
1897         for obj in ${TALLOC_OBJ}; do
1898                 LIBTALLOC_OBJ0="${LIBTALLOC_OBJ0} ${tallocdir}/${obj}"
1899         done
1900         SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${TALLOC_CFLAGS}"
1901         SAMBA_CONFIGURE_CPPFLAGS="${SAMBA_CONFIGURE_CPPFLAGS} ${TALLOC_CFLAGS}"
1902         AC_SUBST(LIBTALLOC_OBJ0)
1904         TALLOCTORT="bin/talloctort"
1905         AC_SUBST(TALLOCTORT)
1909 AC_ARG_ENABLE(external_libtdb,
1910         [AS_HELP_STRING([--enable-external-libtdb],
1911                 [Enable external tdb [default=auto]])],
1912                 [ enable_external_libtdb=$enableval ],
1913                 [ enable_external_libtdb=auto ])
1915 if test "x$enable_external_libtdb" != xno
1916 then
1917         PKG_CHECK_MODULES(LIBTDB, tdb >= 1.2.6,
1918                 [ enable_external_libtdb=yes ],
1919                 [
1920                 if test x$enable_external_libtdb = xyes; then
1921                         AC_MSG_ERROR([Unable to find libtdb])
1922                 else
1923                         enable_external_libtdb=no
1924                 fi
1925                 ])
1928 AC_SUBST(LIBTDB_OBJ0)
1929 if test "x$enable_external_libtdb" = xno
1930 then
1931         m4_include(../lib/tdb/libtdb.m4)
1932         LINK_LIBTDB=STATIC
1933         LIBTDBVERSION=`grep ^VERSION ${tdbdir}/wscript | sed -e "s/'//g" -e 's/.* //'`
1934         SMB_LIBRARY(tdb, 1, ${LIBTDBVERSION})
1935         LIBTDB_OBJ0=""
1936         LIBTDB_LIBS="$LIBTDB_LIBS $TDB_DEPS"
1937         for obj in ${TDB_OBJ}; do
1938                 LIBTDB_OBJ0="${LIBTDB_OBJ0} ${tdbdir}/${obj}"
1939         done
1940         AC_SUBST(LIBTDB_OBJ0)
1941         SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${TDB_CFLAGS}"
1942         SAMBA_CONFIGURE_CPPFLAGS="${SAMBA_CONFIGURE_CPPFLAGS} ${TDB_CFLAGS}"
1944         TDBBACKUP="bin/tdbbackup"
1945         AC_SUBST(TDBBACKUP)
1946         TDBDUMP="bin/tdbdump"
1947         AC_SUBST(TDBDUMP)
1948         TDBRESTORE="bin/tdbrestore"
1949         AC_SUBST(TDBRESTORE)
1950         TDBTOOL="bin/tdbtool"
1951         AC_SUBST(TDBTOOL)
1952         TDBTORTURE="bin/tdbtorture"
1953         AC_SUBST(TDBTORTURE)
1956 AC_ARG_ENABLE(external_libntdb,
1957         [AS_HELP_STRING([--enable-external-libntdb],
1958                 [Enable external ntdb [default=auto]])],
1959                 [ enable_external_libntdb=$enableval ],
1960                 [ enable_external_libntdb=auto ])
1962 if test "x$enable_external_libntdb" != xno
1963 then
1964         PKG_CHECK_MODULES(LIBNTDB, ntdb >= 1.0,
1965                 [ enable_external_libntdb=yes ],
1966                 [
1967                 if test x$enable_external_libntdb = xyes; then
1968                         AC_MSG_ERROR([Unable to find libntdb])
1969                 else
1970                         enable_external_libntdb=no
1971                 fi
1972                 ])
1975 AC_SUBST(LIBNTDB_OBJ0)
1976 if test "x$enable_external_libntdb" = xno
1977 then
1978         m4_include(../lib/ntdb/libntdb.m4)
1979         LINK_LIBNTDB=STATIC
1980         LIBNTDBVERSION=`grep ^VERSION ${ntdbdir}/wscript | sed -e "s/'//g" -e 's/.* //'`
1981         SMB_LIBRARY(ntdb, 1, ${LIBNTDBVERSION})
1982         LIBNTDB_OBJ0=""
1983         LIBNTDB_LIBS="$LIBNTDB_LIBS $NTDB_DEPS"
1984         for obj in ${NTDB_OBJ}; do
1985                 LIBNTDB_OBJ0="${LIBNTDB_OBJ0} ${ntdbdir}/${obj}"
1986         done
1987         AC_SUBST(LIBNTDB_OBJ0)
1988         SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${NTDB_CFLAGS}"
1989         SAMBA_CONFIGURE_CPPFLAGS="${SAMBA_CONFIGURE_CPPFLAGS} ${NTDB_CFLAGS}"
1991         NTDBBACKUP="bin/ntdbbackup"
1992         AC_SUBST(NTDBBACKUP)
1993         NTDBDUMP="bin/ntdbdump"
1994         AC_SUBST(NTDBDUMP)
1995         NTDBRESTORE="bin/ntdbrestore"
1996         AC_SUBST(NTDBRESTORE)
1997         NTDBTOOL="bin/ntdbtool"
1998         AC_SUBST(NTDBTOOL)
1999         NTDBTORTURE="bin/ntdbtorture"
2000         AC_SUBST(NTDBTORTURE)
2003 SMB_LIBRARY(netapi, 0)
2004 SMB_LIBRARY(smbclient, 0)
2005 SMB_LIBRARY(smbsharemodes, 0)
2008 ################
2010 AC_CACHE_CHECK([for long long],samba_cv_have_longlong,[
2011 AC_TRY_RUN([#include <stdio.h>
2012 main() { long long x = 1000000; x *= x; return(((x/1000000) == 1000000)? 0: 1); }],
2013 samba_cv_have_longlong=yes,samba_cv_have_longlong=no,samba_cv_have_longlong=cross)])
2014 if test x"$samba_cv_have_longlong" = x"yes"; then
2015     AC_DEFINE(HAVE_LONGLONG,1,[Whether the host supports long long's])
2016     AC_CHECK_TYPE(intptr_t, unsigned long long)
2017 else
2018     AC_CHECK_TYPE(intptr_t, unsigned long)
2022 # Check if the compiler supports the LL prefix on long long integers.
2023 # AIX needs this.
2025 AC_CACHE_CHECK([for LL suffix on long long integers],samba_cv_compiler_supports_ll, [
2026     AC_TRY_COMPILE([#include <stdio.h>],[long long i = 0x8000000000LL],
2027         samba_cv_compiler_supports_ll=yes,samba_cv_compiler_supports_ll=no)])
2028 if test x"$samba_cv_compiler_supports_ll" = x"yes"; then
2029    AC_DEFINE(COMPILER_SUPPORTS_LL,1,[Whether the compiler supports the LL prefix on long long integers])
2033 AC_CACHE_CHECK([for 64 bit time_t],samba_cv_SIZEOF_TIME_T,[
2034 AC_TRY_RUN([#include <time.h>
2035 main() { return((sizeof(time_t) == 8) ? 0 : 1); }],
2036 samba_cv_SIZEOF_TIME_T=yes,samba_cv_SIZEOF_TIME_T=no,samba_cv_SIZEOF_TIME_T=cross)])
2037 if test x"$samba_cv_SIZEOF_TIME_T" = x"yes"; then
2038     AC_DEFINE(SIZEOF_TIME_T,8,[The size of the 'time_t' type])
2041 AC_CACHE_CHECK([for TIME_T_MAX],samba_cv_TIME_T_MAX,[
2042 AC_TRY_RUN([#include <time.h>
2043 main() {
2044         struct tm *tm;
2045         if (sizeof(time_t) == 8) {
2046                 time_t max_time = 0x7fffffffffffffffll;
2047                 tm = gmtime(&max_time);
2048                 /* This should fail with 32-bit tm_year. */
2049                 if (tm == NULL) {
2050                         /* Max time_t that works with 32-bit int tm_year in struct tm. */
2051                         max_time = 67768036191676799ll;
2052                         tm = gmtime(&max_time);
2053                         if (tm) {
2054                                 return(0);
2055                         }
2056                 }
2057         }
2058         return(1);
2060 samba_cv_TIME_T_MAX=yes,samba_cv_TIME_T_MAX=no,samba_cv_TIME_T_MAX=cross)])
2061 if test x"$samba_cv_TIME_T_MAX" = x"yes"; then
2062     AC_DEFINE(TIME_T_MAX,67768036191676799ll,[The maximum value of the 'time_t' type])
2067 # As a gating factor for large file support, in order to
2068 # use >4GB files we must have the following minimal support
2069 # available: a 64 bit off_t
2070 # If we don't have all of these then fail the build
2073 AC_MSG_CHECKING([if large file support can be enabled])
2074 AC_CACHE_CHECK([for 64 bit off_t],samba_cv_SIZEOF_OFF_T,[
2075 AC_TRY_RUN([#include <stdio.h>
2076 #include <sys/stat.h>
2077 main() { return((sizeof(off_t) == 8) ? 0 : 1); }],
2078 samba_cv_SIZEOF_OFF_T=yes,samba_cv_SIZEOF_OFF_T=no,samba_cv_SIZEOF_OFF_T=cross)])
2079 if test x"$samba_cv_SIZEOF_OFF_T" = x"no"; then
2080     AC_MSG_ERROR(["large file support support not available: sizeof(off_t) != 8"])
2083 AC_CACHE_CHECK([for 64 bit ino_t],samba_cv_SIZEOF_INO_T,[
2084 AC_TRY_RUN([
2085 #if defined(HAVE_UNISTD_H)
2086 #include <unistd.h>
2087 #endif
2088 #include <stdio.h>
2089 #include <sys/stat.h>
2090 main() { return((sizeof(ino_t) == 8) ? 0 : 1); }],
2091 samba_cv_SIZEOF_INO_T=yes,samba_cv_SIZEOF_INO_T=no,samba_cv_SIZEOF_INO_T=cross)])
2092 if test x"$samba_cv_SIZEOF_INO_T" = x"yes"; then
2093     AC_DEFINE(SIZEOF_INO_T,8,[The size of the 'ino_t' type])
2096 AC_CACHE_CHECK([for 64 bit dev_t],samba_cv_SIZEOF_DEV_T,[
2097 AC_TRY_RUN([
2098 #if defined(HAVE_UNISTD_H)
2099 #include <unistd.h>
2100 #endif
2101 #include <stdio.h>
2102 #include <sys/stat.h>
2103 main() { return((sizeof(dev_t) == 8) ? 0 : 1); }],
2104 samba_cv_SIZEOF_DEV_T=yes,samba_cv_SIZEOF_DEV_T=no,samba_cv_SIZEOF_DEV_T=cross)])
2105 if test x"$samba_cv_SIZEOF_DEV_T" = x"yes"; then
2106     AC_DEFINE(SIZEOF_DEV_T,8,[The size of the 'dev_t' type])
2109 AC_CACHE_CHECK([for major macro],samba_cv_HAVE_DEVICE_MAJOR_FN,[
2110 AC_TRY_RUN([
2111 #if defined(HAVE_UNISTD_H)
2112 #include <unistd.h>
2113 #endif
2114 #include <sys/types.h>
2115 main() { dev_t dev; int i = major(dev); return 0; }],
2116 samba_cv_HAVE_DEVICE_MAJOR_FN=yes,samba_cv_HAVE_DEVICE_MAJOR_FN=no,samba_cv_HAVE_DEVICE_MAJOR_FN=cross)])
2117 if test x"$samba_cv_HAVE_DEVICE_MAJOR_FN" = x"yes"; then
2118     AC_DEFINE(HAVE_DEVICE_MAJOR_FN,1,[Whether the major macro for dev_t is available])
2121 AC_CACHE_CHECK([for minor macro],samba_cv_HAVE_DEVICE_MINOR_FN,[
2122 AC_TRY_RUN([
2123 #if defined(HAVE_UNISTD_H)
2124 #include <unistd.h>
2125 #endif
2126 #include <sys/types.h>
2127 main() { dev_t dev; int i = minor(dev); return 0; }],
2128 samba_cv_HAVE_DEVICE_MINOR_FN=yes,samba_cv_HAVE_DEVICE_MINOR_FN=no,samba_cv_HAVE_DEVICE_MINOR_FN=cross)])
2129 if test x"$samba_cv_HAVE_DEVICE_MINOR_FN" = x"yes"; then
2130     AC_DEFINE(HAVE_DEVICE_MINOR_FN,1,[Whether the minor macro for dev_t is available])
2133 AC_CACHE_CHECK([for makedev macro],samba_cv_HAVE_MAKEDEV,[
2134 AC_TRY_RUN([
2135 #if defined(HAVE_UNISTD_H)
2136 #include <unistd.h>
2137 #endif
2138 #include <sys/types.h>
2139 main() { dev_t dev = makedev(1,2); return 0; }],
2140 samba_cv_HAVE_MAKEDEV=yes,samba_cv_HAVE_MAKEDEV=no,samba_cv_HAVE_MAKEDEV=cross)])
2141 if test x"$samba_cv_HAVE_MAKEDEV" = x"yes"; then
2142     AC_DEFINE(HAVE_MAKEDEV,1,[Whether the macro for makedev is available])
2145 AC_CACHE_CHECK([whether seekdir returns void],samba_cv_SEEKDIR_RETURNS_VOID,[
2146 AC_TRY_COMPILE([#include <sys/types.h>
2147 #include <dirent.h>
2148 void seekdir(DIR *d, long loc) { return; }],[return 0;],
2149 samba_cv_SEEKDIR_RETURNS_VOID=yes,samba_cv_SEEKDIR_RETURNS_VOID=no)])
2150 if test x"$samba_cv_SEEKDIR_RETURNS_VOID" = x"yes"; then
2151     AC_DEFINE(SEEKDIR_RETURNS_VOID,1,[Whether seekdir returns void])
2154 AC_CACHE_CHECK([for __FUNCTION__ macro],samba_cv_HAVE_FUNCTION_MACRO,[
2155 AC_TRY_COMPILE([#include <stdio.h>], [printf("%s\n", __FUNCTION__);],
2156 samba_cv_HAVE_FUNCTION_MACRO=yes,samba_cv_HAVE_FUNCTION_MACRO=no)])
2157 if test x"$samba_cv_HAVE_FUNCTION_MACRO" = x"yes"; then
2158     AC_DEFINE(HAVE_FUNCTION_MACRO,1,[Whether there is a __FUNCTION__ macro])
2161 if test x"$libreplace_cv_HAVE_CLOCK_GETTIME_IN_LIBRT" = xyes ; then
2162         LIBS="$LIBS -lrt"
2165 AC_CACHE_CHECK([for broken readdir name],samba_cv_HAVE_BROKEN_READDIR_NAME,[
2166 AC_TRY_RUN([#include <sys/types.h>
2167 #include <dirent.h>
2168 main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d);
2169 if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 &&
2170 di->d_name[0] == 0) return(0); return(1);} ],
2171 samba_cv_HAVE_BROKEN_READDIR_NAME=yes,samba_cv_HAVE_BROKEN_READDIR_NAME=no,samba_cv_HAVE_BROKEN_READDIR_NAME=cross)])
2172 if test x"$samba_cv_HAVE_BROKEN_READDIR_NAME" = x"yes"; then
2173     AC_DEFINE(HAVE_BROKEN_READDIR_NAME,1,[Whether readdir() returns the wrong name offset])
2176 AC_CACHE_CHECK([for utimbuf],samba_cv_HAVE_UTIMBUF,[
2177 AC_TRY_COMPILE([#include <sys/types.h>
2178 #include <utime.h>],
2179 [struct utimbuf tbuf;  tbuf.actime = 0; tbuf.modtime = 1; return(utime("foo.c",&tbuf));],
2180 samba_cv_HAVE_UTIMBUF=yes,samba_cv_HAVE_UTIMBUF=no,samba_cv_HAVE_UTIMBUF=cross)])
2181 if test x"$samba_cv_HAVE_UTIMBUF" = x"yes"; then
2182     AC_DEFINE(HAVE_UTIMBUF,1,[Whether struct utimbuf is available])
2185 ##############
2186 # Check utmp details, but only if our OS offers utmp.h
2187 if test x"$ac_cv_header_utmp_h" = x"yes"; then
2188 dnl  utmp and utmpx come in many flavours
2189 dnl  We need to check for many of them
2190 dnl  But we don't need to do each and every one, because our code uses
2191 dnl  mostly just the utmp (not utmpx) fields.
2193 AC_CHECK_FUNCS(pututline pututxline updwtmp updwtmpx getutmpx getutxent)
2195 AC_CACHE_CHECK([for ut_name in utmp],samba_cv_HAVE_UT_UT_NAME,[
2196 AC_TRY_COMPILE([#include <sys/types.h>
2197 #include <utmp.h>],
2198 [struct utmp ut;  ut.ut_name[0] = 'a';],
2199 samba_cv_HAVE_UT_UT_NAME=yes,samba_cv_HAVE_UT_UT_NAME=no,samba_cv_HAVE_UT_UT_NAME=cross)])
2200 if test x"$samba_cv_HAVE_UT_UT_NAME" = x"yes"; then
2201     AC_DEFINE(HAVE_UT_UT_NAME,1,[Whether the utmp struct has a property ut_name])
2204 AC_CACHE_CHECK([for ut_user in utmp],samba_cv_HAVE_UT_UT_USER,[
2205 AC_TRY_COMPILE([#include <sys/types.h>
2206 #include <utmp.h>],
2207 [struct utmp ut;  ut.ut_user[0] = 'a';],
2208 samba_cv_HAVE_UT_UT_USER=yes,samba_cv_HAVE_UT_UT_USER=no,samba_cv_HAVE_UT_UT_USER=cross)])
2209 if test x"$samba_cv_HAVE_UT_UT_USER" = x"yes"; then
2210     AC_DEFINE(HAVE_UT_UT_USER,1,[Whether the utmp struct has a property ut_user])
2213 AC_CACHE_CHECK([for ut_id in utmp],samba_cv_HAVE_UT_UT_ID,[
2214 AC_TRY_COMPILE([#include <sys/types.h>
2215 #include <utmp.h>],
2216 [struct utmp ut;  ut.ut_id[0] = 'a';],
2217 samba_cv_HAVE_UT_UT_ID=yes,samba_cv_HAVE_UT_UT_ID=no,samba_cv_HAVE_UT_UT_ID=cross)])
2218 if test x"$samba_cv_HAVE_UT_UT_ID" = x"yes"; then
2219     AC_DEFINE(HAVE_UT_UT_ID,1,[Whether the utmp struct has a property ut_id])
2222 AC_CACHE_CHECK([for ut_host in utmp],samba_cv_HAVE_UT_UT_HOST,[
2223 AC_TRY_COMPILE([#include <sys/types.h>
2224 #include <utmp.h>],
2225 [struct utmp ut;  ut.ut_host[0] = 'a';],
2226 samba_cv_HAVE_UT_UT_HOST=yes,samba_cv_HAVE_UT_UT_HOST=no,samba_cv_HAVE_UT_UT_HOST=cross)])
2227 if test x"$samba_cv_HAVE_UT_UT_HOST" = x"yes"; then
2228     AC_DEFINE(HAVE_UT_UT_HOST,1,[Whether the utmp struct has a property ut_host])
2231 AC_CACHE_CHECK([for ut_time in utmp],samba_cv_HAVE_UT_UT_TIME,[
2232 AC_TRY_COMPILE([#include <sys/types.h>
2233 #include <utmp.h>],
2234 [struct utmp ut;  time_t t; ut.ut_time = t;],
2235 samba_cv_HAVE_UT_UT_TIME=yes,samba_cv_HAVE_UT_UT_TIME=no,samba_cv_HAVE_UT_UT_TIME=cross)])
2236 if test x"$samba_cv_HAVE_UT_UT_TIME" = x"yes"; then
2237     AC_DEFINE(HAVE_UT_UT_TIME,1,[Whether the utmp struct has a property ut_time])
2240 AC_CACHE_CHECK([for ut_tv in utmp],samba_cv_HAVE_UT_UT_TV,[
2241 AC_TRY_COMPILE([#include <sys/types.h>
2242 #include <utmp.h>],
2243 [struct utmp ut;  struct timeval tv; ut.ut_tv = tv;],
2244 samba_cv_HAVE_UT_UT_TV=yes,samba_cv_HAVE_UT_UT_TV=no,samba_cv_HAVE_UT_UT_TV=cross)])
2245 if test x"$samba_cv_HAVE_UT_UT_TV" = x"yes"; then
2246     AC_DEFINE(HAVE_UT_UT_TV,1,[Whether the utmp struct has a property ut_tv])
2249 AC_CACHE_CHECK([for ut_type in utmp],samba_cv_HAVE_UT_UT_TYPE,[
2250 AC_TRY_COMPILE([#include <sys/types.h>
2251 #include <utmp.h>],
2252 [struct utmp ut;  ut.ut_type = 0;],
2253 samba_cv_HAVE_UT_UT_TYPE=yes,samba_cv_HAVE_UT_UT_TYPE=no,samba_cv_HAVE_UT_UT_TYPE=cross)])
2254 if test x"$samba_cv_HAVE_UT_UT_TYPE" = x"yes"; then
2255     AC_DEFINE(HAVE_UT_UT_TYPE,1,[Whether the utmp struct has a property ut_type])
2258 AC_CACHE_CHECK([for ut_pid in utmp],samba_cv_HAVE_UT_UT_PID,[
2259 AC_TRY_COMPILE([#include <sys/types.h>
2260 #include <utmp.h>],
2261 [struct utmp ut;  ut.ut_pid = 0;],
2262 samba_cv_HAVE_UT_UT_PID=yes,samba_cv_HAVE_UT_UT_PID=no,samba_cv_HAVE_UT_UT_PID=cross)])
2263 if test x"$samba_cv_HAVE_UT_UT_PID" = x"yes"; then
2264     AC_DEFINE(HAVE_UT_UT_PID,1,[Whether the utmp struct has a property ut_pid])
2267 AC_CACHE_CHECK([for ut_exit in utmp],samba_cv_HAVE_UT_UT_EXIT,[
2268 AC_TRY_COMPILE([#include <sys/types.h>
2269 #include <utmp.h>],
2270 [struct utmp ut;  ut.ut_exit.e_exit = 0;],
2271 samba_cv_HAVE_UT_UT_EXIT=yes,samba_cv_HAVE_UT_UT_EXIT=no,samba_cv_HAVE_UT_UT_EXIT=cross)])
2272 if test x"$samba_cv_HAVE_UT_UT_EXIT" = x"yes"; then
2273     AC_DEFINE(HAVE_UT_UT_EXIT,1,[Whether the utmp struct has a property ut_exit])
2276 if test x$ac_cv_func_pututline = xyes ; then
2277   AC_CACHE_CHECK([whether pututline returns pointer],samba_cv_PUTUTLINE_RETURNS_UTMP,[
2278   AC_TRY_COMPILE([#include <sys/types.h>
2279 #include <utmp.h>],
2280   [struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg);],
2281   samba_cv_PUTUTLINE_RETURNS_UTMP=yes,samba_cv_PUTUTLINE_RETURNS_UTMP=no)])
2282   if test x"$samba_cv_PUTUTLINE_RETURNS_UTMP" = x"yes"; then
2283       AC_DEFINE(PUTUTLINE_RETURNS_UTMP,1,[Whether pututline returns pointer])
2284   fi
2287 AC_CACHE_CHECK([for ut_syslen in utmpx],samba_cv_HAVE_UX_UT_SYSLEN,[
2288 AC_TRY_COMPILE([#include <sys/types.h>
2289 #include <utmpx.h>],
2290 [struct utmpx ux;  ux.ut_syslen = 0;],
2291 samba_cv_HAVE_UX_UT_SYSLEN=yes,samba_cv_HAVE_UX_UT_SYSLEN=no,samba_cv_HAVE_UX_UT_SYSLEN=cross)])
2292 if test x"$samba_cv_HAVE_UX_UT_SYSLEN" = x"yes"; then
2293     AC_DEFINE(HAVE_UX_UT_SYSLEN,1,[Whether the utmpx struct has a property ut_syslen])
2296 AC_CACHE_CHECK([whether sizeof ut_line in utmp is ok],samba_cv_HAVE_UX_UT_LINE,[
2297 AC_TRY_RUN([#include <stdio.h>
2298 #include <sys/types.h>
2299 #include <utmp.h>
2300 int main(void) {
2301  if (sizeof(((struct utmp *)NULL)->ut_line) < 15) {
2302      return 1;
2304  return 0;
2307 samba_cv_HAVE_UX_UT_LINE=yes,samba_cv_HAVE_UX_UT_LINE=no,samba_cv_HAVE_UX_UT_LINE=cross)])
2310 # end utmp details
2312 AC_CACHE_CHECK([for linux fallocate],samba_cv_HAVE_LINUX_FALLOCATE,[
2313 AC_TRY_COMPILE([
2314 #if defined(HAVE_UNISTD_H)
2315 #include <unistd.h>
2316 #endif
2317 #include <sys/types.h>
2318 #define _GNU_SOURCE
2319 #include <fcntl.h>
2320 #if defined(HAVE_LINUX_FALLOC_H)
2321 #include <linux/falloc.h>
2322 #endif],
2323 [int ret = fallocate(0, FALLOC_FL_KEEP_SIZE, 0, 10);],
2324 samba_cv_HAVE_LINUX_FALLOCATE=yes,samba_cv_HAVE_LINUX_FALLOCATE=no)])
2325 if test x"$samba_cv_HAVE_LINUX_FALLOCATE" = x"yes" && test x"$ac_cv_func_fallocate" = x"yes"; then
2326     AC_DEFINE(HAVE_LINUX_FALLOCATE,1,[Whether the Linux 'fallocate' function is available])
2329 AC_CACHE_CHECK([for getcwd takes NULL],samba_cv_GETCWD_TAKES_NULL,[
2330 AC_TRY_RUN([
2331 #if defined(HAVE_UNISTD_H)
2332 #include <unistd.h>
2333 #endif
2334 main() { char *s = getcwd(NULL,0); if (s) return(0); return(1); }],
2335 samba_cv_GETCWD_TAKES_NULL=yes,samba_cv_GETCWD_TAKES_NULL=no,samba_cv_GETCWD_TAKES_NULL=cross)])
2336 if test x"$samba_cv_GETCWD_TAKES_NULL" = x"yes"; then
2337     AC_DEFINE(GETCWD_TAKES_NULL,1,[Whether the getcwd function takes NULL as an argument])
2340 ICONV_LOOK_DIRS="/usr /usr/local /sw /opt"
2341 AC_ARG_WITH(libiconv,
2342 [AS_HELP_STRING([--with-libiconv=BASEDIR], [Use libiconv in BASEDIR/lib and BASEDIR/include (default=auto)])],
2344   if test "$withval" = "no" ; then
2345     AC_MSG_ERROR([argument to --with-libiconv must be a directory])
2346   else
2347      if test "$withval" != "yes" ; then
2348         ICONV_PATH_SPEC=yes
2349         ICONV_LOOK_DIRS="$withval"
2350      fi
2351   fi
2354 for i in $ICONV_LOOK_DIRS ; do
2356     save_LIBS="$LIBS"
2357     save_LDFLAGS="$LDFLAGS"
2358     save_CPPFLAGS="$CPPFLAGS"
2360     iconv_current_LIBS=""
2361     iconv_current_LDFLAGS=""
2362     iconv_current_CPPFLAGS=""
2364     ICONV_FOUND="no"
2365     unset libext
2367     #  This is here to handle -withval stuff for --with-libiconv
2368     #  Perhaps we should always add a -L
2369     CPPFLAGS="$save_CPPFLAGS -I$i/include"
2371     # Check lib and lib32 library variants to cater for IRIX ABI-specific
2372     # installation paths. This gets a little tricky since we might have iconv
2373     # in both libiconv and in libc. In this case the jm_ICONV test will always
2374     # succeed when the header is found. To counter this, make sure the
2375     # library directory is there and check the ABI directory first (which
2376     # should be harmless on other systems, but causes tons of linker warnings on
2377     # 64bit Ubuntu systems).
2378     # As the build farm doesn't seem to have any IRIX machines with iconv.h
2379     # installed, I've decided to fix the linker warnings.
2380     # -- Kai
2381     # For IA64 HPUX systems, the libs are located in lib/hpux32 instead of lib.
2382     for l in "lib" "lib32" "lib/hpux32"; do
2383         if test -d "$i/$l" ; then
2384                 LDFLAGS="$save_LDFLAGS -L$i/$l"
2385                 LIBS=
2386                 export LDFLAGS LIBS CPPFLAGS
2387                 # Try to find iconv(3)
2388                 jm_ICONV($i/$l)
2389                 if test x"$ICONV_FOUND" = "xyes" ; then
2390                     libext="$l"
2391                     break
2392                 fi
2393         fi
2394     done
2396     if test x"$ICONV_FOUND" = "xyes" ; then
2397         iconv_current_LDFLAGS="-L$i/$libext"
2398         iconv_current_CPPFLAGS="-I$i/include"
2400         if test x"$jm_cv_lib_iconv" != x; then
2401             iconv_current_LIBS="$LIBS -l$jm_cv_lib_iconv"
2402         else
2403             # We found iconv in libc.
2404             iconv_current_LIBS=""
2405         fi
2407     fi
2409     if test x"$ICONV_FOUND" = "xyes" ; then
2411         LDFLAGS="$save_LDFLAGS $iconv_current_LDFLAGS"
2412         CPPFLAGS="$save_CPPFLAGS $iconv_current_CPPFLAGS"
2413         LIBS="$save_LIBS $iconv_current_LIBS"
2414         export LDFLAGS LIBS CPPFLAGS
2416         default_dos_charset=no
2417         default_unix_charset=no
2419         # check for default dos charset name
2420         for j in CP850 IBM850 ; do
2421             rjs_CHARSET($j)
2422             default_dos_charset="$ICONV_CHARSET"
2423             if test x"$default_dos_charset" = x"$j"; then
2424                 break
2425             fi
2426         done
2428         # check for default unix charset name
2429         for j in UTF-8 UTF8 ; do
2430             rjs_CHARSET($j)
2431             default_unix_charset="$ICONV_CHARSET"
2432             if test x"$default_unix_charset" = x"$j"; then
2433                 break
2434             fi
2435         done
2437         if test "$default_dos_charset" != "no" -a \
2438                 "$default_dos_charset" != "cross" -a \
2439                 "$default_unix_charset" != "no" -a \
2440                 "$default_unix_charset" != "cross"
2441         then
2442                 samba_cv_HAVE_NATIVE_ICONV=yes
2443         else
2444             if test "$default_dos_charset" = "cross" -o \
2445                      "$default_unix_charset" = "cross"
2446             then
2447                     samba_cv_HAVE_NATIVE_ICONV=cross
2448             else
2449                     samba_cv_HAVE_NATIVE_ICONV=no
2450             fi
2451         fi
2453         # At this point, we have a libiconv candidate. We know that
2454         # we have the right headers and libraries, but we don't know
2455         # whether it does the conversions we want. We can't test this
2456         # because we are cross-compiling. This is not necessarily a big
2457         # deal, since we can't guarantee that the results we get now will
2458         # match the results we get at runtime anyway.
2459         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"cross" ; then
2460             default_dos_charset="CP850"
2461             default_unix_charset="UTF-8"
2462             samba_cv_HAVE_NATIVE_ICONV=yes
2463             AC_MSG_WARN(assuming the libiconv in $iconv_current_LDFLAGS can convert)
2464             AC_MSG_WARN([$default_dos_charset and $default_unix_charset to UCS-16LE])
2465         fi
2467         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"yes" ; then
2469             CPPFLAGS=$save_CPPFLAGS
2470             LDFLAGS=$save_LDFLAGS
2471             LIBS=$save_LIBS
2473             if test x"$iconv_current_LIBS" != x; then
2474                 LIBS="$LIBS $iconv_current_LIBS"
2475             fi
2477             # Add the flags we need to CPPFLAGS and LDFLAGS
2478             CPPFLAGS="$CPPFLAGS $iconv_current_CPPFLAGS"
2479             LDFLAGS="$LDFLAGS $iconv_current_LDFLAGS"
2481             # Turn the #defines into string literals
2482             default_dos_charset="\"$default_dos_charset\""
2483             default_unix_charset="\"$default_unix_charset\""
2485             AC_DEFINE(HAVE_NATIVE_ICONV,1,[Whether to use native iconv])
2486             AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,$default_dos_charset,[Default dos charset name])
2487             AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,$default_unix_charset,[Default unix charset name])
2489            break
2490         fi
2492     # We didn't find a working iconv, so keep going
2493     fi
2495     #  We only need to clean these up here for the next pass through the loop
2496     CPPFLAGS=$save_CPPFLAGS
2497     LDFLAGS=$save_LDFLAGS
2498     LIBS=$save_LIBS
2499     export LDFLAGS LIBS CPPFLAGS
2500 done
2501 unset libext
2504 if test x"$ICONV_FOUND" = x"no" -o x"$samba_cv_HAVE_NATIVE_ICONV" != x"yes" ; then
2505     AC_MSG_WARN([Sufficient support for iconv function was not found.
2506     Install libiconv from http://freshmeat.net/projects/libiconv/ for better charset compatibility!])
2507    AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,"ASCII",[Default dos charset name])
2508    AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,"UTF8",[Default unix charset name])
2512 AC_CACHE_CHECK([for Linux kernel oplocks],samba_cv_HAVE_KERNEL_OPLOCKS_LINUX,[
2513 AC_TRY_RUN([
2514 #include <sys/types.h>
2515 #include <fcntl.h>
2516 #ifndef F_GETLEASE
2517 #define F_GETLEASE      1025
2518 #endif
2519 main() {
2520        int fd = open("/dev/null", O_RDONLY);
2521        return fcntl(fd, F_GETLEASE, 0) == -1;
2524 samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=no,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross)])
2525 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
2526     AC_DEFINE(HAVE_KERNEL_OPLOCKS_LINUX,1,[Whether to use linux kernel oplocks])
2529 AC_CACHE_CHECK([for kernel change notify support],samba_cv_HAVE_KERNEL_CHANGE_NOTIFY,[
2530 AC_TRY_RUN([
2531 #include <sys/types.h>
2532 #include <fcntl.h>
2533 #include <signal.h>
2534 #ifndef F_NOTIFY
2535 #define F_NOTIFY 1026
2536 #endif
2537 main() {
2538         return(fcntl(open("/tmp", O_RDONLY), F_NOTIFY, 0) == -1 ?  1 : 0);
2541 samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=no,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross)])
2542 if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
2543     AC_DEFINE(HAVE_KERNEL_CHANGE_NOTIFY,1,[Whether kernel notifies changes])
2546 AC_CHECK_HEADER(sys/inotify.h)
2548 if test x"$ac_cv_header_sys_inotify_h" = x"yes"; then
2549     AC_DEFINE(HAVE_INOTIFY,1,[For inotify support])
2552 #################################################
2553 # Check if FAM notifications are available. For FAM info, see
2554 #       http://oss.sgi.com/projects/fam/
2555 #       http://savannah.nongnu.org/projects/fam/
2556 AC_ARG_ENABLE(fam,
2557 [AS_HELP_STRING([--enable-fam], [Turn on FAM support (default=auto)])])
2559 if test x$enable_fam != xno; then
2560     AC_CHECK_HEADERS(fam.h, [samba_cv_HAVE_FAM_H=yes], [samba_cv_HAVE_FAM_H=no])
2561     if test x"$samba_cv_HAVE_FAM_H" = x"yes"; then
2562         # On IRIX, libfam requires libC, but other FAM implementations
2563         # might not need it.
2564         AC_CHECK_LIB(fam, FAMOpen2,
2565             [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam";
2566             AC_DEFINE(HAVE_FAMOPEN2, 1, Define to 1 if there is support for FAMOpen2)],
2567             [samba_cv_HAVE_LIBFAM=no])
2569         if test x"$samba_cv_HAVE_LIBFAM" = x"no" ; then
2570             samba_fam_xtra=-lC
2571             AC_CHECK_LIB_EXT(fam, samba_fam_xtra, FAMOpen2,
2572                 [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam -lC";
2573                 AC_DEFINE(HAVE_FAMOPEN2, 1, Define to 1 if there is support for FAMOpen2)],
2574                 [samba_cv_HAVE_LIBFAM=no])
2575             unset samba_fam_xtra
2576         fi
2577     fi
2578     if test x"$samba_cv_HAVE_LIBFAM" = x"yes" ; then
2579         default_shared_modules="$default_shared_modules vfs_notify_fam"
2580         AC_TRY_COMPILE([#include <fam.h>],
2581                     [enum FAMCodes code = FAMChanged;],
2582                     AC_DEFINE(HAVE_FAM_H_FAMCODES_TYPEDEF, 1,
2583                         [Whether fam.h contains a typedef for enum FAMCodes]),
2584                     [])
2585     fi
2587     if test x"$samba_cv_HAVE_LIBFAM" = x"yes" ; then
2588         AC_CHECK_LIB(fam, FAMNoExists,
2589             [AC_DEFINE(HAVE_FAMNOEXISTS, 1, Define to 1 if there is support for FAMNoExists)])
2590     fi
2592     if test x$enable_fam = xyes && test x"$samba_cv_HAVE_LIBFAM" != xyes ; then
2593         AC_MSG_ERROR(FAM support requested but FAM library not available )
2594     fi
2597 AC_SUBST(SMB_FAM_LIBS)
2599 #################################################
2600 # Check for DMAPI interfaces in libdm/libjfsdm/libxsdm
2603 with_dmapi_support=auto
2604 AC_MSG_CHECKING(whether to use DMAPI support)
2605 AC_ARG_WITH(dmapi,
2606 [AS_HELP_STRING([--with-dmapi], [Include DMAPI/XDSM support (default=auto)])],
2607 [ case "$withval" in
2608   yes|no)
2609     with_dmapi_support=$withval
2610     ;;
2611   esac ]
2613 AC_MSG_RESULT([$with_dmapi_support])
2615 if test x"$with_dmapi_support" != xno ; then
2616         SMB_CHECK_DMAPI([], [
2617                 AC_MSG_NOTICE(DMAPI support not present)
2618                 if test x"$with_dmapi_support" = xyes ; then
2619                         AC_MSG_ERROR(no DMAPI support found but requested!)
2620                 fi
2621                 ]
2622         )
2625 # Add TSM SM VFS module only if there are both GPFS and DMAPI support
2626 # Theoretically it should work with AIX JFS2 too but this needs testing
2627 if test x"$ac_cv_header_gpfs_gpl_h" = x"yes" && test x"$samba_dmapi_libs" != x"" ; then
2628     default_shared_modules="$default_shared_modules vfs_tsmsm"
2631 AC_CACHE_CHECK([for kernel share modes],samba_cv_HAVE_KERNEL_SHARE_MODES,[
2632 AC_TRY_RUN([
2633 #include <sys/types.h>
2634 #include <fcntl.h>
2635 #include <signal.h>
2636 #include <sys/file.h>
2637 #ifndef LOCK_MAND
2638 #define LOCK_MAND       32
2639 #define LOCK_READ       64
2640 #endif
2641 main() {
2642         return(flock(open("/dev/null", O_RDWR), LOCK_MAND|LOCK_READ) != 0);
2645 samba_cv_HAVE_KERNEL_SHARE_MODES=yes,samba_cv_HAVE_KERNEL_SHARE_MODES=no,samba_cv_HAVE_KERNEL_SHARE_MODES=cross)])
2646 if test x"$samba_cv_HAVE_KERNEL_SHARE_MODES" = x"yes"; then
2647     AC_DEFINE(HAVE_KERNEL_SHARE_MODES,1,[Whether the kernel supports share modes])
2651 AC_CACHE_CHECK([for IRIX kernel oplock type definitions],samba_cv_HAVE_KERNEL_OPLOCKS_IRIX,[
2652 AC_TRY_COMPILE([#include <sys/types.h>
2653 #include <fcntl.h>],
2654 [oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1;],
2655 samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=no)])
2656 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_IRIX" = x"yes"; then
2657     AC_DEFINE(HAVE_KERNEL_OPLOCKS_IRIX,1,[Whether IRIX kernel oplock type definitions are available])
2660 #################################################
2661 # Check for POSIX capability support
2663 AC_CHECK_HEADER(sys/capability.h, [samba_cv_HAVE_SYS_CAPABILITY_H=yes;
2664     AC_DEFINE(HAVE_SYS_CAPABILITY_H, 1, Whether sys/capability.h is present)],
2665     [], [])
2667 if test x"$samba_cv_HAVE_SYS_CAPABILITY_H" = x"yes"; then
2669     ac_save_LIBS=$LIBS
2670     AC_LIBTESTFUNC(cap, cap_get_proc)
2672     AC_CACHE_CHECK([for POSIX capabilities],
2673             samba_cv_HAVE_POSIX_CAPABILITIES,
2674             [
2675                 AC_TRY_RUN([
2676 #include <sys/types.h>
2677 #include <sys/capability.h>
2678 main() {
2679  cap_t cap;
2680  cap_value_t vals[1];
2681  if (!(cap = cap_get_proc()))
2682    return(1);
2683  vals[0] = CAP_CHOWN;
2684  cap_set_flag(cap, CAP_INHERITABLE, 1, vals, CAP_CLEAR);
2685  cap_set_proc(cap);
2686  return(0);
2688                 samba_cv_HAVE_POSIX_CAPABILITIES=yes,
2689                 samba_cv_HAVE_POSIX_CAPABILITIES=no,
2690                 samba_cv_HAVE_POSIX_CAPABILITIES=cross)
2691             ])
2693 if test x"$samba_cv_HAVE_POSIX_CAPABILITIES" = x"yes"; then
2694     AC_DEFINE(HAVE_POSIX_CAPABILITIES, 1,
2695             [Whether POSIX capabilities are available])
2696 else
2697     LIBS=$ac_save_LIBS
2703 # Check for int16, uint16, int32 and uint32 in rpc/types.h included from rpc/rpc.h
2704 # This is *really* broken but some systems (DEC OSF1) do this.... JRA.
2707 AC_CACHE_CHECK([for int16 typedef included by rpc/rpc.h],samba_cv_HAVE_INT16_FROM_RPC_RPC_H,[
2708 AC_TRY_COMPILE([#include <sys/types.h>
2709 #if defined(HAVE_RPC_RPC_H)
2710 #include <rpc/rpc.h>
2711 #endif],
2712 [int16 testvar;],
2713 samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT16_FROM_RPC_RPC_H=no)])
2714 if test x"$samba_cv_HAVE_INT16_FROM_RPC_RPC_H" = x"yes"; then
2715     AC_DEFINE(HAVE_INT16_FROM_RPC_RPC_H,1,[Whether int16 typedef is included by rpc/rpc.h])
2718 AC_CACHE_CHECK([for uint16 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT16_FROM_RPC_RPC_H,[
2719 AC_TRY_COMPILE([#include <sys/types.h>
2720 #if defined(HAVE_RPC_RPC_H)
2721 #include <rpc/rpc.h>
2722 #endif],
2723 [uint16 testvar;],
2724 samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=no)])
2725 if test x"$samba_cv_HAVE_UINT16_FROM_RPC_RPC_H" = x"yes"; then
2726     AC_DEFINE(HAVE_UINT16_FROM_RPC_RPC_H,1,[Whether uint16 typedef is included by rpc/rpc.h])
2729 AC_CACHE_CHECK([for int32 typedef included by rpc/rpc.h],samba_cv_HAVE_INT32_FROM_RPC_RPC_H,[
2730 AC_TRY_COMPILE([#include <sys/types.h>
2731 #if defined(HAVE_RPC_RPC_H)
2732 #include <rpc/rpc.h>
2733 #endif],
2734 [int32 testvar;],
2735 samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT32_FROM_RPC_RPC_H=no)])
2736 if test x"$samba_cv_HAVE_INT32_FROM_RPC_RPC_H" = x"yes"; then
2737     AC_DEFINE(HAVE_INT32_FROM_RPC_RPC_H,1,[Whether int32 typedef is included by rpc/rpc.h])
2740 AC_CACHE_CHECK([for uint32 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT32_FROM_RPC_RPC_H,[
2741 AC_TRY_COMPILE([#include <sys/types.h>
2742 #if defined(HAVE_RPC_RPC_H)
2743 #include <rpc/rpc.h>
2744 #endif],
2745 [uint32 testvar;],
2746 samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=no)])
2747 if test x"$samba_cv_HAVE_UINT32_FROM_RPC_RPC_H" = x"yes"; then
2748     AC_DEFINE(HAVE_UINT32_FROM_RPC_RPC_H,1,[Whether uint32 typedef is included by rpc/rpc.h])
2752 dnl Some systems (SCO) have a problem including
2753 dnl <prot.h> and <rpc/rpc.h> due to AUTH_ERROR being defined
2754 dnl as a #define in <prot.h> and as part of an enum
2755 dnl in <rpc/rpc.h>.
2758 AC_CACHE_CHECK([for conflicting AUTH_ERROR define in rpc/rpc.h],samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT,[
2759 AC_TRY_COMPILE([#include <sys/types.h>
2760 #ifdef HAVE_SYS_SECURITY_H
2761 #include <sys/security.h>
2762 #include <prot.h>
2763 #endif  /* HAVE_SYS_SECURITY_H */
2764 #if defined(HAVE_RPC_RPC_H)
2765 #include <rpc/rpc.h>
2766 #endif],
2767 [int testvar;],
2768 samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no,samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=yes)])
2769 if test x"$samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT" = x"yes"; then
2770     AC_DEFINE(HAVE_RPC_AUTH_ERROR_CONFLICT,1,[Whether there is a conflicting AUTH_ERROR define in rpc/rpc.h])
2773 AC_MSG_CHECKING([for test routines])
2774 AC_TRY_RUN([#include "${srcdir-.}/../tests/trivial.c"],
2775            AC_MSG_RESULT(yes),
2776            AC_MSG_ERROR([cant find test code. Aborting config]),
2777            AC_MSG_WARN([cannot run when cross-compiling]))
2779 AC_CACHE_CHECK([for ftruncate extend],samba_cv_HAVE_FTRUNCATE_EXTEND,[
2780 AC_TRY_RUN([#include "${srcdir-.}/../tests/ftruncate.c"],
2781            samba_cv_HAVE_FTRUNCATE_EXTEND=yes,samba_cv_HAVE_FTRUNCATE_EXTEND=no,samba_cv_HAVE_FTRUNCATE_EXTEND=cross)])
2782 if test x"$samba_cv_HAVE_FTRUNCATE_EXTEND" = x"yes"; then
2783     AC_DEFINE(HAVE_FTRUNCATE_EXTEND,1,[Truncate extend])
2786 AC_CACHE_CHECK([for broken getgroups],samba_cv_HAVE_BROKEN_GETGROUPS,[
2787 AC_TRY_RUN([#include "${srcdir-.}/../tests/getgroups.c"],
2788            samba_cv_HAVE_BROKEN_GETGROUPS=yes,samba_cv_HAVE_BROKEN_GETGROUPS=no,samba_cv_HAVE_BROKEN_GETGROUPS=cross)])
2789 if test x"$samba_cv_HAVE_BROKEN_GETGROUPS" = x"yes"; then
2790     AC_DEFINE(HAVE_BROKEN_GETGROUPS,1,[Whether getgroups is broken])
2793 SMB_CHECK_SYSCONF(_SC_NGROUPS_MAX)
2794 SMB_CHECK_SYSCONF(_SC_NPROC_ONLN)
2795 SMB_CHECK_SYSCONF(_SC_NPROCESSORS_ONLN)
2796 SMB_CHECK_SYSCONF(_SC_PAGESIZE)
2797 AC_CHECK_FUNCS(getpagesize)
2799 ################################################
2800 # look for a method of setting the effective uid
2801 seteuid=no;
2803 ################################################
2804 # Start by checking for 32-bit system call definitions on Linux.
2806 case "$host_os" in
2807 *linux*)
2808 AC_CACHE_CHECK([for Linux 32-bit system calls],samba_cv_USE_LINUX_32BIT_SYSCALLS,[
2809 AC_TRY_COMPILE([
2810 #if defined(HAVE_UNISTD_H)
2811 #include <unistd.h>
2812 #endif
2813 #include <stdlib.h>
2814 #include <stdio.h>
2815 #include <sys/types.h>
2816 #include <errno.h>
2818 #ifdef HAVE_SYS_PRIV_H
2819 #include <sys/priv.h>
2820 #endif
2821 #ifdef HAVE_SYS_ID_H
2822 #include <sys/id.h>
2823 #endif
2825 #if defined(HAVE_SYSCALL_H)
2826 #include <syscall.h>
2827 #endif
2829 #if defined(HAVE_SYS_SYSCALL_H)
2830 #include <sys/syscall.h>
2831 #endif
2834 syscall(SYS_setresuid32, -1, -1, -1);
2835 syscall(SYS_setresgid32, -1, -1, -1);
2836 syscall(SYS_setreuid32, -1, -1);
2837 syscall(SYS_setregid32, -1, -1);
2838 syscall(SYS_setuid32, -1);
2839 syscall(SYS_setgid32, -1);
2840 syscall(SYS_setgroups32, 0, NULL);
2841 ], samba_cv_USE_LINUX_32BIT_SYSCALLS=yes,samba_cv_USE_LINUX_32BIT_SYSCALLS=no,samba_cv_USE_LINUX_32BIT_SYSCALLS=cross)])
2843 if test x"$samba_cv_USE_LINUX_32BIT_SYSCALLS" = x"yes"; then
2844     AC_DEFINE(USE_LINUX_32BIT_SYSCALLS,1,[Use Linux 32-bit system calls])
2845     AC_CACHE_CHECK([for Linux thread-specific credentials with 32-bit system calls],samba_cv_USE_LINUX_THREAD_CREDENTIALS,[
2846     AC_TRY_RUN([
2847 #define AUTOCONF_TEST 1
2848 #define USE_LINUX_THREAD_CREDENTIALS 1
2849 #define USE_LINUX_32BIT_SYSCALLS 1
2850 #include "${srcdir-.}/../lib/util/setid.c"
2851 #include "${srcdir-.}/lib/util_sec.c"],
2852            samba_cv_USE_LINUX_THREAD_CREDENTIALS=yes,samba_cv_USE_LINUX_THREAD_CREDENTIALS=no,samba_cv_USE_LINUX_THREAD_CREDENTIALS=cross)])
2853 if test x"$samba_cv_USE_LINUX_THREAD_CREDENTIALS" = x"yes"; then
2854     seteuid=yes;
2855     AC_DEFINE(USE_LINUX_THREAD_CREDENTIALS,1,[Whether we can use Linux thread-specific credentials with 32-bit system calls])
2859 if test $seteuid = no; then
2860 AC_CACHE_CHECK([for Linux thread-specific credentials],samba_cv_USE_LINUX_THREAD_CREDENTIALS,[
2861 AC_TRY_RUN([
2862 #define AUTOCONF_TEST 1
2863 #define USE_LINUX_THREAD_CREDENTIALS 1
2864 #include "${srcdir-.}/../lib/util/setid.c"
2865 #include "${srcdir-.}/lib/util_sec.c"],
2866            samba_cv_USE_LINUX_THREAD_CREDENTIALS=yes,samba_cv_USE_LINUX_THREAD_CREDENTIALS=no,samba_cv_USE_LINUX_THREAD_CREDENTIALS=cross)])
2867 if test x"$samba_cv_USE_LINUX_THREAD_CREDENTIALS" = x"yes"; then
2868     seteuid=yes;AC_DEFINE(USE_LINUX_THREAD_CREDENTIALS,1,[Whether we can use Linux thread-specific credentials])
2873 esac
2875 if test $seteuid = no; then
2876 AC_CACHE_CHECK([for setreuid],samba_cv_USE_SETREUID,[
2877 AC_TRY_RUN([
2878 #define AUTOCONF_TEST 1
2879 #define USE_SETREUID 1
2880 #include "confdefs.h"
2881 #include "${srcdir-.}/../lib/util/setid.c"
2882 #include "${srcdir-.}/lib/util_sec.c"],
2883            samba_cv_USE_SETREUID=yes,samba_cv_USE_SETREUID=no,samba_cv_USE_SETREUID=cross)])
2884 if test x"$samba_cv_USE_SETREUID" = x"yes"; then
2885     seteuid=yes;AC_DEFINE(USE_SETREUID,1,[Whether setreuid() is available])
2889 # we check for setresuid second as it conflicts with AIO on Linux. 
2890 # see http://samba.org/~tridge/junkcode/aio_uid.c
2891 if test $seteuid = no; then
2892 AC_CACHE_CHECK([for setresuid],samba_cv_USE_SETRESUID,[
2893 AC_TRY_RUN([
2894 #define AUTOCONF_TEST 1
2895 #define USE_SETRESUID 1
2896 #include "confdefs.h"
2897 #include "${srcdir-.}/../lib/util/setid.c"
2898 #include "${srcdir-.}/lib/util_sec.c"],
2899            samba_cv_USE_SETRESUID=yes,samba_cv_USE_SETRESUID=no,samba_cv_USE_SETRESUID=cross)])
2900 if test x"$samba_cv_USE_SETRESUID" = x"yes"; then
2901     seteuid=yes;AC_DEFINE(USE_SETRESUID,1,[Whether setresuid() is available])
2905 if test $seteuid = no; then
2906 AC_CACHE_CHECK([for seteuid],samba_cv_USE_SETEUID,[
2907 AC_TRY_RUN([
2908 #define AUTOCONF_TEST 1
2909 #define USE_SETEUID 1
2910 #include "confdefs.h"
2911 #include "${srcdir-.}/../lib/util/setid.c"
2912 #include "${srcdir-.}/lib/util_sec.c"],
2913            samba_cv_USE_SETEUID=yes,samba_cv_USE_SETEUID=no,samba_cv_USE_SETEUID=cross)])
2914 if test x"$samba_cv_USE_SETEUID" = x"yes"; then
2915     seteuid=yes;AC_DEFINE(USE_SETEUID,1,[Whether seteuid() is available])
2919 if test $seteuid = no; then
2920 AC_CACHE_CHECK([for setuidx],samba_cv_USE_SETUIDX,[
2921 AC_TRY_RUN([
2922 #define AUTOCONF_TEST 1
2923 #define USE_SETUIDX 1
2924 #include "confdefs.h"
2925 #include "${srcdir-.}/../lib/util/setid.c"
2926 #include "${srcdir-.}/lib/util_sec.c"],
2927            samba_cv_USE_SETUIDX=yes,samba_cv_USE_SETUIDX=no,samba_cv_USE_SETUIDX=cross)])
2928 if test x"$samba_cv_USE_SETUIDX" = x"yes"; then
2929     seteuid=yes;AC_DEFINE(USE_SETUIDX,1,[Whether setuidx() is available])
2933 AC_CACHE_CHECK([for the Darwin initgroups system call],
2934         samba_cv_DARWIN_INITGROUPS,
2935         AC_TRY_LINK([
2936 #include <sys/syscall.h>
2937 #include <unistd.h>
2938         ],
2939         [ syscall(SYS_initgroups, 16, NULL, NULL, 0); ],
2940         samba_cv_DARWIN_INITGROUPS=yes,
2941         samba_cv_DARWIN_INITGROUPS=no)
2944 if test x"$samba_cv_DARWIN_INITGROUPS" = x"yes" ; then
2945     AC_DEFINE(HAVE_DARWIN_INITGROUPS, 1,
2946         [Whether to use the Darwin-specific initgroups system call])
2949 AC_CACHE_CHECK([for fcntl locking],samba_cv_HAVE_FCNTL_LOCK,[
2950 AC_TRY_RUN([#include "${srcdir-.}/../tests/fcntl_lock.c"],
2951            samba_cv_HAVE_FCNTL_LOCK=yes,samba_cv_HAVE_FCNTL_LOCK=no,samba_cv_HAVE_FCNTL_LOCK=cross)])
2952 if test x"$samba_cv_HAVE_FCNTL_LOCK" = x"yes"; then
2953     AC_DEFINE(HAVE_FCNTL_LOCK,1,[Whether fcntl locking is available])
2956 # glibc up to 2.3.6 had dangerously broken posix_fallocate(). DON'T USE IT.
2957 AC_CACHE_CHECK([for broken posix_fallocate],samba_cv_HAVE_BROKEN_POSIX_FALLOCATE,[
2958 AC_TRY_COMPILE([
2959   #define _XOPEN_SOURCE 600
2960   #include <stdlib.h>
2961   #if defined(__GLIBC__) && ((__GLIBC__ < 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4))
2962   #error probably broken posix_fallocate
2963   #endif
2964 ], [
2965 ], 
2966 samba_cv_HAVE_BROKEN_POSIX_FALLOCATE=no,samba_cv_HAVE_BROKEN_POSIX_FALLOCATE=yes)])
2967 if test x"$samba_cv_HAVE_BROKEN_POSIX_FALLOCATE" = xyes; then
2968         AC_DEFINE(HAVE_BROKEN_POSIX_FALLOCATE, 1, Whether we have a broken posix_fallocate)
2972 AC_CACHE_CHECK([for st_blocks in struct stat],samba_cv_HAVE_STAT_ST_BLOCKS,[
2973 AC_TRY_COMPILE([#include <sys/types.h>
2974 #include <sys/stat.h>
2975 #include <unistd.h>],
2976 [struct stat st;  st.st_blocks = 0;],
2977 samba_cv_HAVE_STAT_ST_BLOCKS=yes,samba_cv_HAVE_STAT_ST_BLOCKS=no,samba_cv_HAVE_STAT_ST_BLOCKS=cross)])
2978 if test x"$samba_cv_HAVE_STAT_ST_BLOCKS" = x"yes"; then
2979     AC_DEFINE(HAVE_STAT_ST_BLOCKS,1,[Whether the stat struct has a st_block property])
2982 AC_CACHE_CHECK([for 32 bit blkcnt_t],samba_cv_SIZEOF_BLKCNT_T_4,[
2983 AC_TRY_RUN([
2984 #if defined(HAVE_UNISTD_H)
2985 #include <unistd.h>
2986 #endif
2987 #include <stdio.h>
2988 #include <sys/types.h>
2989 #include <sys/stat.h>
2990 main() { return((sizeof(blkcnt_t) == 4) ? 0 : 1); }],
2991 samba_cv_SIZEOF_BLKCNT_T_4=yes,samba_cv_SIZEOF_BLKCNT_T_4=no,samba_cv_SIZEOF_BLKCNT_T_4=cross)])
2992 if test x"$samba_cv_SIZEOF_BLKCNT_T_4" = x"yes"; then
2993     AC_DEFINE(SIZEOF_BLKCNT_T_4,1,[The size of the 'blkcnt_t' type])
2996 AC_CACHE_CHECK([for 64 bit blkcnt_t],samba_cv_SIZEOF_BLKCNT_T_8,[
2997 AC_TRY_RUN([
2998 #if defined(HAVE_UNISTD_H)
2999 #include <unistd.h>
3000 #endif
3001 #include <stdio.h>
3002 #include <sys/types.h>
3003 #include <sys/stat.h>
3004 main() { return((sizeof(blkcnt_t) == 8) ? 0 : 1); }],
3005 samba_cv_SIZEOF_BLKCNT_T_8=yes,samba_cv_SIZEOF_BLKCNT_T_8=no,samba_cv_SIZEOF_BLKCNT_T_8=cross)])
3006 if test x"$samba_cv_SIZEOF_BLKCNT_T_8" = x"yes"; then
3007     AC_DEFINE(SIZEOF_BLKCNT_T_8,1,[The size of the 'blkcnt_t' type])
3010 AC_CACHE_CHECK([for st_blksize in struct stat],samba_cv_HAVE_STAT_ST_BLKSIZE,[
3011 AC_TRY_COMPILE([#include <sys/types.h>
3012 #include <sys/stat.h>
3013 #include <unistd.h>],
3014 [struct stat st;  st.st_blksize = 0;],
3015 samba_cv_HAVE_STAT_ST_BLKSIZE=yes,samba_cv_HAVE_STAT_ST_BLKSIZE=no,samba_cv_HAVE_STAT_ST_BLKSIZE=cross)])
3016 if test x"$samba_cv_HAVE_STAT_ST_BLKSIZE" = x"yes"; then
3017     AC_DEFINE(HAVE_STAT_ST_BLKSIZE,1,[Whether the stat struct has a st_blksize property])
3020 AC_CACHE_CHECK([for st_flags in struct stat],
3021         samba_cv_HAVE_STAT_ST_FLAGS,
3022         [
3023             AC_TRY_COMPILE([#include <sys/types.h>
3024 #include <sys/stat.h>
3025 #include <unistd.h>],
3026             [struct stat st;  st.st_flags = 0;],
3027             samba_cv_HAVE_STAT_ST_FLAGS=yes,
3028             samba_cv_HAVE_STAT_ST_FLAGS=no,
3029             samba_cv_HAVE_STAT_ST_FLAGS=cross)
3030         ])
3032 if test x"$samba_cv_HAVE_STAT_ST_FLAGS" = x"yes"; then
3033     AC_DEFINE(HAVE_STAT_ST_FLAGS, 1,
3034                 [Whether the stat struct has a st_flags member])
3037 AC_CACHE_CHECK([for broken nisplus include files],samba_cv_BROKEN_NISPLUS_INCLUDE_FILES,[
3038 AC_TRY_COMPILE([
3039 #include <sys/types.h>
3040 #include <sys/acl.h>
3041 #if defined(HAVE_RPCSVC_NIS_H)
3042 #include <rpcsvc/nis.h>
3043 #endif],
3044 [int i;],
3045 samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no,samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=yes)])
3046 if test x"$samba_cv_BROKEN_NISPLUS_INCLUDE_FILES" = x"yes"; then
3047         AC_DEFINE(BROKEN_NISPLUS_INCLUDE_FILES,1,[Whether the nisplus include files are broken])
3050 AC_CACHE_CHECK([if the realpath function allows a NULL argument],samba_cv_REALPATH_TAKES_NULL,[
3051 AC_TRY_RUN([
3052 #include <stdio.h>
3053 #include <limits.h>
3054 #include <signal.h>
3056 void exit_on_core(int ignored) {
3057         exit(1);
3060 main() {
3061         char *newpath;
3062         signal(SIGSEGV, exit_on_core);
3063         newpath = realpath("/tmp", NULL);
3064         return((newpath != NULL) ? 0 : 1);
3067 samba_cv_REALPATH_TAKES_NULL=yes,samba_cv_REALPATH_TAKES_NULL=no,samba_cv_REALPATH_TAKES_NULL=cross)])
3068 if test x"$samba_cv_REALPATH_TAKES_NULL" = x"yes"; then
3069     AC_DEFINE(REALPATH_TAKES_NULL,1,[Whether the realpath function allows NULL])
3072 #################################################
3073 # check for AFS clear-text auth support
3074 samba_cv_WITH_AFS=no
3075 AC_MSG_CHECKING(whether to use AFS clear-text auth)
3076 AC_ARG_WITH(afs,
3077 [AS_HELP_STRING([--with-afs], [Include AFS clear-text auth support (default=no)])],
3078 [ case "$withval" in
3079   yes|auto)
3080     AC_MSG_RESULT($withval)
3081     samba_cv_WITH_AFS=$withval
3082     ;;
3083   *)
3084     AC_MSG_RESULT(no)
3085     ;;
3086   esac ],
3087   AC_MSG_RESULT(no)
3090 ####################################################
3091 # check for Linux-specific AFS fake-kaserver support
3092 samba_cv_WITH_FAKE_KASERVER=no
3093 AC_MSG_CHECKING(whether to use AFS fake-kaserver)
3094 AC_ARG_WITH(fake-kaserver,
3095 [AS_HELP_STRING([--with-fake-kaserver], [Include AFS fake-kaserver support (default=no)])],
3096 [ case "$withval" in
3097   yes|auto)
3098     AC_MSG_RESULT($withval)
3099     samba_cv_WITH_FAKE_KASERVER=$withval
3100     ;;
3101   *)
3102     AC_MSG_RESULT(no)
3103     ;;
3104   esac ],
3105   AC_MSG_RESULT(no)
3108 #################################################
3109 # decide whether we can support WITH_AFS and / or WITH_FAKE_KASERVER
3110 if test x"$samba_cv_WITH_AFS" != x"no" ||
3111    test x"$samba_cv_WITH_FAKE_KASERVER" != x"no"; then
3113     # see if this box has the OpenSSL DES libraries
3114     AC_CHECK_LIB( crypto, DES_pcbc_encrypt, LIBS="$LIBS -lcrypto" , [AC_ERROR(OpenSSL library: libcrypto ot found!)] )
3116     # see if this box has the afs-headers in /usr/include/afs
3117     AC_MSG_CHECKING(for /usr/include/afs)
3118     if test -d /usr/include/afs; then
3119           AC_MSG_RESULT(yes)
3120     else
3121       AC_MSG_RESULT(no)
3122     fi
3124     # check for afs.h
3125     have_afs_headers=no
3126     AC_CHECK_HEADERS(afs.h afs/afs.h)
3127     if test x"$ac_cv_header_afs_h" = x"no" && test x"$ac_cv_header_afs_afs_h" = x"no"; then
3128         if test x"$samba_cv_WITH_FAKE_KASERVER" = x"auto" ||
3129            test x"$samba_cv_WITH_AFS" = x"auto"; then
3130                 AC_MSG_WARN([AFS cannot be supported without afs.h])
3131         else
3132                 AC_MSG_ERROR([AFS cannot be supported without afs.h])
3133         fi
3134     else
3135         have_afs_headers=yes
3136     fi
3139 FAKE_KASERVER_OBJ=""
3140 if test x"$samba_cv_WITH_FAKE_KASERVER" != x"no" && test x"$have_afs_headers" = x"yes"; then
3141     AC_DEFINE(WITH_FAKE_KASERVER,1,[Whether to include AFS fake-kaserver support])
3142     FAKE_KASERVER_OBJ="utils/net_afs.o"
3144 AC_SUBST(FAKE_KASERVER_OBJ)
3146 #################################################
3147 # check whether to compile AFS/NT ACL mapping module
3148 samba_cv_WITH_VFS_AFSACL=no
3149 AC_MSG_CHECKING(whether to use AFS ACL mapping module)
3150 AC_ARG_WITH(vfs-afsacl,
3151 [AS_HELP_STRING([--with-vfs-afsacl], [Include AFS to NT ACL mapping module (default=no)])],
3152 [ case "$withval" in
3153   yes|auto)
3154     AC_MSG_RESULT($withval)
3155     samba_cv_WITH_VFS_AFSACL=yes
3156     ;;
3157   *)
3158     AC_MSG_RESULT(no)
3159     ;;
3160   esac ],
3161   AC_MSG_RESULT(no)
3164 if test x"$samba_cv_WITH_VFS_AFSACL" = x"yes"; then
3165    default_shared_modules="$default_shared_modules vfs_afsacl"
3167         
3168 if test x"$samba_cv_WITH_AFS" != x"no" && test x"$have_afs_headers" = x"yes"; then
3169     AC_DEFINE(WITH_AFS,1,[Whether to include AFS clear-text auth support])
3172 #################################################
3173 # check for the DFS clear-text auth system
3174 AC_MSG_CHECKING(whether to use DFS clear-text auth)
3175 AC_ARG_WITH(dfs,
3176 [AS_HELP_STRING([--with-dce-dfs], [Include DCE/DFS clear-text auth support (default=no)])],
3177 [ case "$withval" in
3178   yes)
3179     AC_MSG_RESULT(yes)
3180     AC_DEFINE(WITH_DFS,1,[Whether to include DFS support])
3181     ;;
3182   *)
3183     AC_MSG_RESULT(no)
3184     ;;
3185   esac ],
3186   AC_MSG_RESULT(no)
3189 ########################################################
3190 # Compile with LDAP support?
3192 with_ldap_support=auto
3193 AC_MSG_CHECKING([for LDAP support])
3195 AC_ARG_WITH(ldap,
3196 [AS_HELP_STRING([--with-ldap], [LDAP support (default=auto)])],
3197 [ case "$withval" in
3198     yes|no)
3199         with_ldap_support=$withval
3200         ;;
3201   esac ])
3203 AC_MSG_RESULT($with_ldap_support)
3205 SMBLDAP=""
3206 AC_SUBST(SMBLDAP)
3208 if test x"$with_ldap_support" != x"no"; then
3210   ##################################################################
3211   # first test for ldap.h and lber.h
3212   # (ldap.h is required for this test)
3213   AC_CHECK_HEADERS(ldap.h lber.h)
3215   if test x"$ac_cv_header_ldap_h" != x"yes"; then
3216         if test x"$with_ldap_support" = x"yes"; then
3217          AC_MSG_ERROR(ldap.h is needed for LDAP support)
3218         else
3219          AC_MSG_WARN(ldap.h is needed for LDAP support)
3220         fi
3221         
3222         with_ldap_support=no
3223   fi
3225   ##################################################################
3226   # HP/UX does not have ber_tag_t in lber.h - it must be configured as
3227   # unsigned int in include/includes.h
3228   case $host_os in
3229         *hpux*)
3230          AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3231          AC_MSG_WARN(ber_tag_t must be configured in includes.h for hpux)
3232         with_ldap_support=yes
3233         ;;
3234         *)
3235         AC_CHECK_TYPE(ber_tag_t,,,[#include <lber.h>])
3236         if test x"$ac_cv_type_ber_tag_t" != x"yes"; then
3237                 if test x"$with_ldap_support" = x"yes"; then
3238                 AC_MSG_ERROR(ber_tag_t is needed for LDAP support)
3239                 else
3240                 AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3241                 fi
3242                 with_ldap_support=no
3243         fi
3244         ;;
3245   esac
3248 if test x"$with_ldap_support" != x"no"; then
3249   ac_save_LIBS=$LIBS
3251   ##################################################################
3252   # we might need the lber lib on some systems. To avoid link errors
3253   # this test must be before the libldap test
3254   AC_CHECK_LIB_EXT(lber, LDAP_LIBS, ber_scanf)
3256   ########################################################
3257   # If ber_sockbuf_add_io() is available we can add
3258   # SASL wrapping hooks
3259   AC_CHECK_FUNC_EXT(ber_sockbuf_add_io,$LDAP_LIBS)
3261   AC_CACHE_CHECK([for LDAP_OPT_SOCKBUF],samba_cv_HAVE_LDAP_OPT_SOCKBUF,[
3262                  AC_TRY_COMPILE([#include <ldap.h>],
3263                                 [int val = LDAP_OPT_SOCKBUF;],
3264                         samba_cv_HAVE_LDAP_OPT_SOCKBUF=yes,
3265                         samba_cv_HAVE_LDAP_OPT_SOCKBUF=no)])
3267   if test x"$ac_cv_func_ext_ber_sockbuf_add_io" = x"yes" -a \
3268           x"$samba_cv_HAVE_LDAP_OPT_SOCKBUF" = x"yes"; then
3269         AC_DEFINE(HAVE_LDAP_SASL_WRAPPING, 1, [Support for SASL wrapping])
3270   fi
3272   #######################################################
3273   # if we have LBER_OPT_LOG_PRINT_FN, we can intercept
3274   # ldap logging and print it out in the samba logs
3275   AC_CACHE_CHECK([for LBER_OPT_LOG_PRINT_FN],
3276                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN,
3277                  [AC_TRY_COMPILE([#include <lber.h>],
3278                                  [int val = LBER_OPT_LOG_PRINT_FN;],
3279                                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN=yes,
3280                                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN=no)])
3282   if test x"$samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN" = x"yes"; then
3283         AC_DEFINE(HAVE_LBER_LOG_PRINT_FN, 1,
3284                   [Support for LDAP/LBER logging interception])
3285   fi
3287   ########################################################
3288   # now see if we can find the ldap libs in standard paths
3289   AC_CHECK_LIB_EXT(ldap, LDAP_LIBS, ldap_init)
3291   ########################################################
3292   # If we have LDAP, does it's rebind procedure take 2 or 3 arguments?
3293   # Check found in pam_ldap 145.
3294   AC_CHECK_FUNC_EXT(ldap_set_rebind_proc,$LDAP_LIBS)
3296   LIBS="$LIBS $LDAP_LIBS"
3297   AC_CACHE_CHECK(whether ldap_set_rebind_proc takes 3 arguments, smb_ldap_cv_ldap_set_rebind_proc, [
3298     AC_TRY_COMPILE([
3299         #include <lber.h>
3300         #include <ldap.h>],
3301         [ldap_set_rebind_proc(0, 0, 0);],
3302         [smb_ldap_cv_ldap_set_rebind_proc=3],
3303         [smb_ldap_cv_ldap_set_rebind_proc=2]
3304     )
3305   ])
3307   AC_DEFINE_UNQUOTED(LDAP_SET_REBIND_PROC_ARGS, $smb_ldap_cv_ldap_set_rebind_proc, [Number of arguments to ldap_set_rebind_proc])
3309   AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3311   if test x"$ac_cv_lib_ext_ldap_ldap_init" = x"yes"; then
3312     AC_DEFINE(HAVE_LDAP,1,[Whether ldap is available])
3313     CPPFLAGS="$CPPFLAGS -DLDAP_DEPRECATED"
3314     default_static_modules="$default_static_modules pdb_ldapsam idmap_ldap";
3315     default_shared_modules="$default_shared_modules";
3316     SMBLDAP="lib/smbldap.o"
3317     with_ldap_support=yes
3318     AC_MSG_CHECKING(whether LDAP support is used)
3319     AC_MSG_RESULT(yes)
3320   else
3321     if test x"$with_ldap_support" = x"yes"; then
3322         AC_MSG_ERROR(libldap is needed for LDAP support)
3323     else
3324         AC_MSG_WARN(libldap is needed for LDAP support)
3325     fi
3327     LDAP_LIBS=""
3328     with_ldap_support=no
3329   fi
3330   LIBS=$ac_save_LIBS
3334 #################################################
3335 # active directory support
3337 with_ads_support=auto
3338 AC_MSG_CHECKING([for Active Directory and krb5 support])
3340 AC_ARG_WITH(ads,
3341 [AS_HELP_STRING([--with-ads], [Active Directory support (default=auto)])],
3342 [ case "$withval" in
3343     yes|no)
3344         with_ads_support="$withval"
3345         ;;
3346   esac ])
3348 AC_MSG_RESULT($with_ads_support)
3350 FOUND_KRB5=no
3351 KRB5_LIBS=""
3353 if test x"$with_ldap_support" != x"yes"; then
3355     if test x"$with_ads_support" = x"yes"; then
3356         AC_MSG_ERROR(Active Directory Support requires LDAP support)
3357     elif test x"$with_ads_support" = x"auto"; then
3358         AC_MSG_WARN(Disabling Active Directory support (requires LDAP support))
3359         with_ads_support=no
3360     fi
3362 else
3364     # Check to see whether there is enough LDAP functionality to be able
3365     # to build AD support.
3367 # HPUX and Solaris only has ldap_init; ok, we take care of this in smbldap.c
3368 case "$host_os" in
3369         *hpux* | *solaris*)
3370     AC_CHECK_FUNC_EXT(ldap_init,$LDAP_LIBS)
3372     if test x"$ac_cv_func_ext_ldap_init" != x"yes"; then
3373         if test x"$with_ads_support" = x"yes"; then
3374             AC_MSG_ERROR(Active Directory support on HPUX or Solaris requires ldap_init)
3375         elif test x"$with_ads_support" = x"auto"; then
3376             AC_MSG_WARN(Disabling Active Directory support (requires ldap_init on HPUX or Solaris))
3377             with_ads_support=no
3378         fi
3379     fi
3380     ;;
3381         *)
3382     AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3384     if test x"$ac_cv_func_ext_ldap_initialize" != x"yes"; then
3385         if test x"$with_ads_support" = x"yes"; then
3386             AC_MSG_ERROR(Active Directory support requires ldap_initialize)
3387         elif test x"$with_ads_support" = x"auto"; then
3388             AC_MSG_WARN(Disabling Active Directory support (requires ldap_initialize))
3389             with_ads_support=no
3390         fi
3391     fi
3392     ;;
3393 esac
3396     AC_CHECK_FUNC_EXT(ldap_add_result_entry,$LDAP_LIBS)
3398     if test x"$ac_cv_func_ext_ldap_add_result_entry" != x"yes"; then
3399         if test x"$with_ads_support" = x"yes"; then
3400             AC_MSG_ERROR(Active Directory support requires ldap_add_result_entry)
3401         elif test x"$with_ads_support" = x"auto"; then
3402             AC_MSG_WARN(Disabling Active Directory support (requires ldap_add_result_entry))
3403             with_ads_support=no
3404         fi
3405     fi
3409 if test x"$with_ads_support" != x"no"; then
3411   # Do no harm to the values of CFLAGS and LIBS while testing for
3412   # Kerberos support.
3414   if test x$FOUND_KRB5 = x"no"; then
3415     #################################################
3416     # check for location of Kerberos 5 install
3417     AC_MSG_CHECKING(for kerberos 5 install path)
3418     AC_ARG_WITH(krb5,
3419     [AS_HELP_STRING([--with-krb5=base-dir], [Locate Kerberos 5 support (default=/usr)])],
3420     [ case "$withval" in
3421       no)
3422         AC_MSG_RESULT(no krb5-path given)
3423         ;;
3424       yes)
3425         AC_MSG_RESULT(/usr)
3426         ;;
3427       *)
3428         AC_MSG_RESULT($withval)
3429         KRB5_CFLAGS="-I$withval/include"
3430         KRB5_CPPFLAGS="-I$withval/include"
3431         KRB5_LDFLAGS="-L$withval/lib"
3432         FOUND_KRB5=yes
3433         if test -x "$withval/bin/krb5-config"; then
3434                 KRB5CONFIG=$withval/bin/krb5-config
3435         fi
3436         ;;
3437       esac ],
3438       AC_MSG_RESULT(no krb5-path given)
3439     )
3440   fi
3442   #################################################
3443   # check for krb5-config from recent MIT and Heimdal kerberos 5
3444   AC_PATH_PROG(KRB5CONFIG, krb5-config)
3445   AC_MSG_CHECKING(for working krb5-config)
3446   if test -x "$KRB5CONFIG" && $KRB5CONFIG --libs gssapi > /dev/null ; then
3447     ac_save_CFLAGS=$CFLAGS
3448     CFLAGS="";export CFLAGS
3449     ac_save_LDFLAGS=$LDFLAGS
3450     LDFLAGS="";export LDFLAGS
3451     KRB5_LIBS="`$KRB5CONFIG --libs gssapi`"
3452     KRB5_LDFLAGS="`$KRB5CONFIG --libs gssapi | sed s/-lgss.*//`"
3453     KRB5_CFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
3454     KRB5_CPPFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
3455     CFLAGS=$ac_save_CFLAGS;export CFLAGS
3456     LDFLAGS=$ac_save_LDFLAGS;export LDFLAGS
3457     FOUND_KRB5=yes
3458     AC_MSG_RESULT(yes)
3459   else
3460     AC_MSG_RESULT(no. Fallback to previous krb5 detection strategy)
3461   fi
3463   if test x$FOUND_KRB5 = x"no"; then
3464     #################################################
3465     # see if this box has the SuSE location for the heimdal krb implementation
3466     AC_MSG_CHECKING(for /usr/include/heimdal)
3467     if test -d /usr/include/heimdal; then
3468       if test -f /usr/lib/heimdal/lib/libkrb5.a; then
3469           KRB5_CFLAGS="-I/usr/include/heimdal"
3470           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3471           KRB5_LDFLAGS="-L/usr/lib/heimdal/lib"
3472           FOUND_KRB5=yes
3473           AC_MSG_RESULT(yes)
3474       else
3475           KRB5_CFLAGS="-I/usr/include/heimdal"
3476           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3477           FOUND_KRB5=yes
3478           AC_MSG_RESULT(yes)
3479       fi
3480     else
3481       AC_MSG_RESULT(no)
3482     fi
3483   fi
3485   if test x$FOUND_KRB5 = x"no"; then
3486     #################################################
3487     # see if this box has the RedHat location for kerberos
3488     AC_MSG_CHECKING(for /usr/kerberos)
3489     if test -d /usr/kerberos -a -f /usr/kerberos/lib/libkrb5.a; then
3490       KRB5_LDFLAGS="-L/usr/kerberos/lib"
3491       KRB5_CFLAGS="-I/usr/kerberos/include"
3492       KRB5_CPPFLAGS="-I/usr/kerberos/include"
3493       FOUND_KRB5=yes
3494       AC_MSG_RESULT(yes)
3495     else
3496       AC_MSG_RESULT(no)
3497     fi
3498   fi
3500   if test x$FOUND_KRB5 = x"no"; then
3501     #################################################
3502     # see if this box has the OpenBSD location for heimdal krb5
3503     AC_MSG_CHECKING(for /usr/include/kerberosV)
3504     if test -d /usr/include/kerberosV; then
3505       KRB5_CPPFLAGS="-I/usr/include/kerberosV"
3506       KRB5_LIBS="-lcrypto"
3507       FOUND_KRB5=yes
3508       AC_MSG_RESULT(yes)
3509     else
3510       AC_MSG_RESULT(no)
3511     fi
3512   fi
3514   if test x$FOUND_KRB5 = x"no"; then
3515     #################################################
3516     # see if this box has Solaris MIT kerberos implementation
3517     AC_MSG_CHECKING(for Solaris MIT kerberos)
3518     if test -x "$KRB5CONFIG" && $KRB5CONFIG --version | grep -s Solaris | grep -s MIT > /dev/null ; then
3519        FOUND_KRB5=yes
3520        KRB5_LIBS="-lgss -lkrb5"
3521        KRB5_CFLAGS="`$KRB5CONFIG --cflags`"
3522        KRB5_CPPFLAGS="`$KRB5CONFIG --cflags`"
3523        AC_MSG_RESULT(yes)
3524     else
3525       AC_MSG_RESULT(no)
3526     fi
3527   fi
3529   ac_save_CFLAGS=$CFLAGS
3530   ac_save_CPPFLAGS=$CPPFLAGS
3531   ac_save_LDFLAGS=$LDFLAGS
3533   # remove needless evil rpath stuff as early as possible:
3534   LIB_REMOVE_USR_LIB(KRB5_LIBS)
3535   LIB_REMOVE_USR_LIB(KRB5_LDFLAGS)
3536   CFLAGS="$KRB5_CFLAGS $CFLAGS"
3537   CPPFLAGS="$KRB5_CPPFLAGS $CPPFLAGS"
3538   LDFLAGS="$KRB5_LDFLAGS $LDFLAGS"
3540   KRB5_LIBS="$KRB5_LDFLAGS $KRB5_LIBS"
3542   # now check for krb5.h. Some systems have the libraries without the headers!
3543   # note that this check is done here to allow for different kerberos
3544   # include paths
3545   AC_CHECK_HEADERS(krb5.h)
3547   if test x"$ac_cv_header_krb5_h" = x"no"; then
3549     # Give a warning if AD support was not explicitly requested,
3550     # i.e with_ads_support = auto, otherwise die with an error.
3552     if test x"$with_ads_support" = x"yes"; then
3553       AC_MSG_ERROR([Active Directory cannot be supported without krb5.h])
3554     else
3555       AC_MSG_WARN([Active Directory cannot be supported without krb5.h])
3556     fi
3558     # Turn off AD support and restore CFLAGS and LIBS variables
3560     with_ads_support="no"
3562     CFLAGS=$ac_save_CFLAGS
3563     CPPFLAGS=$ac_save_CPPFLAGS
3564     LDFLAGS=$ac_save_LDFLAGS
3565   fi
3567   # check for new heimdal KRB5_DEPRECATED handling
3569   AC_CACHE_CHECK([for KRB5_DEPRECATED define taking an identifier],
3570                 samba_cv_HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER,[
3571     AC_TRY_COMPILE(
3572       [#define KRB5_DEPRECATED 1
3573       #include <krb5.h>],
3574       [],
3575       samba_cv_HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER=yes,
3576       samba_cv_HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER=no)])
3578   if test x"$samba_cv_HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER" = x"yes"; then
3579     AC_DEFINE(HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER, 1,
3580                [Whether to use deprecated krb5 interfaces])
3581   fi
3584 # Now we have determined whether we really want ADS support
3585 use_ads=no
3586 if test x"$with_ads_support" != x"no"; then
3587   use_ads=yes
3588   have_gssapi=no
3589   ac_save_LIBS=$LIBS
3591   # now check for gssapi headers.  This is also done here to allow for
3592   # different kerberos include paths
3593   AC_CHECK_HEADERS(gssapi.h gssapi/gssapi_generic.h gssapi/gssapi.h gssapi/gssapi_ext.h gssapi/gssapi_krb5.h com_err.h)
3595   ##################################################################
3596   # we might need the k5crypto and com_err libraries on some systems
3597   AC_CHECK_LIB_EXT(com_err, KRB5_LIBS, _et_list)
3598   AC_CHECK_LIB_EXT(k5crypto, KRB5_LIBS, krb5_encrypt_data)
3600   # Heimdal checks.
3601   AC_CHECK_LIB_EXT(crypto, KRB5_LIBS, des_set_key)
3602   AC_CHECK_LIB_EXT(asn1, KRB5_LIBS, copy_Authenticator)
3603   AC_CHECK_LIB_EXT(roken, KRB5_LIBS, roken_getaddrinfo_hostspec)
3605   # Heimdal checks. On static Heimdal gssapi must be linked before krb5.
3606   AC_CHECK_LIB_EXT(gssapi, KRB5_LIBS, gss_display_status,[],[],have_gssapi=yes)
3608   ########################################################
3609   # now see if we can find the krb5 libs in standard paths
3610   # or as specified above
3611   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_mk_req_extended)
3612   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_kt_compare)
3614   ########################################################
3615   # now see if we can find the gssapi libs in standard paths
3616   if test x"$have_gssapi" != x"yes"; then
3617      AC_CHECK_LIB_EXT(gssapi_krb5, KRB5_LIBS,gss_display_status,[],[],have_gssapi=yes)
3618      AC_CHECK_LIB_EXT(gss, KRB5_LIBS,gss_display_status,[],[],have_gssapi=yes)
3619   fi
3620   ################################################################
3621   # test for AD / GSSAPI support being enabled
3622   if test x"$have_gssapi" != xyes ; then
3623         AC_MSG_WARN([Samba cannot be supported without GSSAPI])
3624         use_ads=no
3625   else
3626         AC_DEFINE(HAVE_GSSAPI, , [Whether the platform has GSSAPI support])
3627   fi
3629   # This is for FreeBSD (and possibly others). gss_mech_krb5 is a
3630   # #define to GSS_KRB5_MECHANISM, which is defined in -lgssapi_krb5
3631   # Also, gsskrb5_extract_authz_data_from_sec_context is in -lgssapi_krb5
3632   AC_CHECK_LIB_EXT(gssapi_krb5, KRB5_LIBS, GSS_KRB5_MECHANISM,
3633                    [KRB5_LIBS="$KRB5_LIBS -lgssapi_krb5"])
3635   AC_CHECK_FUNC_EXT(krb5_set_real_time, $KRB5_LIBS)
3636   AC_CHECK_FUNC_EXT(krb5_set_default_in_tkt_etypes, $KRB5_LIBS)
3637   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_enctypes, $KRB5_LIBS)
3638   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_ktypes, $KRB5_LIBS)
3639   AC_CHECK_FUNC_EXT(krb5_principal2salt, $KRB5_LIBS)
3640   AC_CHECK_FUNC_EXT(krb5_c_string_to_key, $KRB5_LIBS)
3641   AC_CHECK_FUNC_EXT(krb5_get_pw_salt, $KRB5_LIBS)
3642   AC_CHECK_FUNC_EXT(krb5_string_to_key_salt, $KRB5_LIBS)
3643   AC_CHECK_FUNC_EXT(krb5_auth_con_setkey, $KRB5_LIBS)
3644   AC_CHECK_FUNC_EXT(krb5_auth_con_setuseruserkey, $KRB5_LIBS)
3645   AC_CHECK_FUNC_EXT(krb5_get_permitted_enctypes, $KRB5_LIBS)
3646   AC_CHECK_FUNC_EXT(krb5_get_default_in_tkt_etypes, $KRB5_LIBS)
3647   AC_CHECK_FUNC_EXT(krb5_free_data_contents, $KRB5_LIBS)
3648   AC_CHECK_FUNC_EXT(krb5_principal_get_comp_string, $KRB5_LIBS)
3649   AC_CHECK_FUNC_EXT(krb5_free_unparsed_name, $KRB5_LIBS)
3650   AC_CHECK_FUNC_EXT(krb5_free_keytab_entry_contents, $KRB5_LIBS)
3651   AC_CHECK_FUNC_EXT(krb5_kt_free_entry, $KRB5_LIBS)
3652   AC_CHECK_FUNC_EXT(krb5_krbhst_init, $KRB5_LIBS)
3653   AC_CHECK_FUNC_EXT(krb5_krbhst_get_addrinfo, $KRB5_LIBS)
3654   AC_CHECK_FUNC_EXT(krb5_crypto_init, $KRB5_LIBS)
3655   AC_CHECK_FUNC_EXT(krb5_crypto_destroy, $KRB5_LIBS)
3656   AC_CHECK_FUNC_EXT(krb5_c_verify_checksum, $KRB5_LIBS)
3657   AC_CHECK_FUNC_EXT(krb5_principal_compare_any_realm, $KRB5_LIBS)
3658   AC_CHECK_FUNC_EXT(krb5_parse_name_norealm, $KRB5_LIBS)
3659   AC_CHECK_FUNC_EXT(krb5_princ_size, $KRB5_LIBS)
3660   AC_CHECK_FUNC_EXT(krb5_make_principal, $KRB5_LIBS)
3661   AC_CHECK_FUNC_EXT(krb5_principal_get_num_comp, $KRB5_LIBS)
3662   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_set_pac_request, $KRB5_LIBS)
3663   AC_CHECK_FUNC_EXT(krb5_get_renewed_creds, $KRB5_LIBS)
3664   AC_CHECK_FUNC_EXT(krb5_free_error_contents, $KRB5_LIBS)
3665   AC_CHECK_FUNC_EXT(initialize_krb5_error_table, $KRB5_LIBS)
3666   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_alloc, $KRB5_LIBS)
3667   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_free, $KRB5_LIBS)
3668   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_get_error, $KRB5_LIBS)
3669   AC_CHECK_FUNC_EXT(krb5_enctype_to_string, $KRB5_LIBS)
3670   AC_CHECK_FUNC_EXT(krb5_fwd_tgt_creds, $KRB5_LIBS)
3671   AC_CHECK_FUNC_EXT(krb5_auth_con_set_req_cksumtype, $KRB5_LIBS)
3672   AC_CHECK_FUNC_EXT(krb5_get_creds_opt_alloc, $KRB5_LIBS)
3673   AC_CHECK_FUNC_EXT(krb5_get_creds_opt_set_impersonate, $KRB5_LIBS)
3674   AC_CHECK_FUNC_EXT(krb5_get_creds, $KRB5_LIBS)
3675   AC_CHECK_FUNC_EXT(krb5_get_credentials_for_user, $KRB5_LIBS)
3676   AC_CHECK_FUNC_EXT(krb5_get_host_realm, $KRB5_LIBS)
3677   AC_CHECK_FUNC_EXT(krb5_free_host_realm, $KRB5_LIBS)
3678   AC_CHECK_FUNC_EXT(krb5_get_init_creds_keytab, $KRB5_LIBS)
3679   AC_CHECK_FUNC_EXT(krb5_build_principal_alloc_va, $KRB5_LIBS)
3680   AC_CHECK_FUNC_EXT(krb5_cc_get_lifetime, $KRB5_LIBS)
3681   AC_CHECK_FUNC_EXT(krb5_cc_retrieve_cred, $KRB5_LIBS)
3682   AC_CHECK_FUNC_EXT(krb5_free_checksum_contents, $KRB5_LIBS)
3683   AC_CHECK_FUNC_EXT(krb5_create_checksum, $KRB5_LIBS)
3684   AC_CHECK_FUNC_EXT(krb5_c_make_checksum, $KRB5_LIBS)
3685   AC_CHECK_FUNC_EXT(gss_krb5_import_cred, $KRB5_LIBS)
3686   AC_CHECK_FUNC_EXT(gss_get_name_attribute, $KRB5_LIBS)
3687   AC_CHECK_FUNC_EXT(gsskrb5_extract_authz_data_from_sec_context, $KRB5_LIBS)
3688   AC_CHECK_FUNC_EXT(gss_mech_krb5, $KRB5_LIBS)
3689   AC_CHECK_FUNC_EXT(gss_oid_equal, $KRB5_LIBS)
3690   AC_CHECK_FUNC_EXT(gss_inquire_sec_context_by_oid, $KRB5_LIBS)
3691   AC_CHECK_FUNC_EXT(gss_wrap_iov, $KRB5_LIBS)
3693   # MIT krb5 1.8 does not expose this call (yet)
3694   AC_CHECK_DECLS(krb5_get_credentials_for_user, [], [], [#include <krb5.h>])
3696   # MIT krb5 1.7beta3 (in Ubuntu Karmic) does not have this declaration
3697   # but does have the symbol
3698   AC_CHECK_DECLS(krb5_auth_con_set_req_cksumtype, [], [], [#include <krb5.h>])
3700   LIBS="$KRB5_LIBS $LIBS"
3702   AC_CACHE_CHECK(whether krb5_get_init_creds_opt_free takes a context argument,
3703           smb_krb5_cv_creds_opt_free_context,
3704           [
3705                 AC_TRY_COMPILE([
3706                     #include <krb5.h>],
3707                     [
3708                         krb5_context ctx;
3709                         krb5_get_init_creds_opt *opt = NULL;
3710                         krb5_get_init_creds_opt_free(ctx, opt);
3711                     ],
3712                     [smb_krb5_cv_creds_opt_free_context=yes],
3713                     [smb_krb5_cv_creds_opt_free_context=no]
3714                 )
3715           ])
3717   if test x"$smb_krb5_cv_creds_opt_free_context" = x"yes" ; then
3718         AC_DEFINE(KRB5_CREDS_OPT_FREE_REQUIRES_CONTEXT, 1,
3719             [Whether krb5_get_init_creds_opt_free takes a context argument])
3720   fi
3722   AC_CACHE_CHECK([for checksum in krb5_checksum],
3723                 samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM,[
3724     AC_TRY_COMPILE([#include <krb5.h>],
3725       [krb5_checksum cksum; cksum.checksum.length = 0;],
3726       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=yes,
3727       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=no)])
3729   if test x"$samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM" = x"yes"; then
3730     AC_DEFINE(HAVE_CHECKSUM_IN_KRB5_CHECKSUM,1,
3731                [Whether the krb5_checksum struct has a checksum property])
3732   fi
3734   AC_CACHE_CHECK([for etype in EncryptedData],
3735                 samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA,[
3736     AC_TRY_COMPILE([#include <krb5.h>],
3737       [EncryptedData edata; edata.etype = 0;],
3738       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=yes,
3739       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=no)])
3741   if test x"$samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA" = x"yes"; then
3742     AC_DEFINE(HAVE_ETYPE_IN_ENCRYPTEDDATA,1,
3743                [Whether the EncryptedData struct has a etype property])
3744   fi
3746   AC_CACHE_CHECK([for ticket pointer in krb5_ap_req],
3747                 samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,[
3748     AC_TRY_COMPILE([#include <krb5.h>],
3749       [krb5_ap_req *ap_req; ap_req->ticket = NULL;],
3750       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=yes,
3751       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=no)])
3753   if test x"$samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ" = x"yes"; then
3754     AC_DEFINE(HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,1,
3755                [Whether the krb5_ap_req struct has a ticket pointer])
3756   fi
3758   AC_CACHE_CHECK([for e_data pointer in krb5_error],
3759                 samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR,[
3760     AC_TRY_COMPILE([#include <krb5.h>],
3761       [krb5_error err; err.e_data = NULL;],
3762       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=yes,
3763       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=no)])
3765   if test x"$samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR" = x"yes"; then
3766     AC_DEFINE(HAVE_E_DATA_POINTER_IN_KRB5_ERROR,1,
3767                [Whether the krb5_error struct has a e_data pointer])
3768   fi
3770   AC_CACHE_CHECK([for krb5_crypto type],
3771                 samba_cv_HAVE_KRB5_CRYPTO,[
3772     AC_TRY_COMPILE([#include <krb5.h>],
3773       [krb5_crypto crypto;],
3774       samba_cv_HAVE_KRB5_CRYPTO=yes,
3775       samba_cv_HAVE_KRB5_CRYPTO=no)])
3777   if test x"$samba_cv_HAVE_KRB5_CRYPTO" = x"yes"; then
3778     AC_DEFINE(HAVE_KRB5_CRYPTO,1,
3779                [Whether the type krb5_crypto exists])
3780   fi
3782   AC_CACHE_CHECK([for addrtype in krb5_address],
3783                 samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS,[
3784     AC_TRY_COMPILE([#include <krb5.h>],
3785       [krb5_address kaddr; kaddr.addrtype = ADDRTYPE_INET;],
3786       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=yes,
3787       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=no)])
3789   if test x"$samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS" = x"yes"; then
3790     AC_DEFINE(HAVE_ADDRTYPE_IN_KRB5_ADDRESS,1,
3791                [Whether the krb5_address struct has a addrtype property])
3792   fi
3794   AC_CACHE_CHECK([for addr_type in krb5_address],
3795                  samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,[
3796     AC_TRY_COMPILE([#include <krb5.h>],
3797       [krb5_address kaddr; kaddr.addr_type = KRB5_ADDRESS_INET;],
3798       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=yes,
3799       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=no)])
3801   if test x"$samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS" = x"yes"; then
3802     AC_DEFINE(HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,1,
3803               [Whether the krb5_address struct has a addr_type property])
3804   fi
3806   AC_CACHE_CHECK([for keyvalue in krb5_keyblock],
3807                  samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE,[
3808     AC_TRY_COMPILE([#include <krb5.h>],
3809       [krb5_keyblock key; key.keyvalue.data = NULL;],
3810       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=yes,
3811       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=no)])
3813   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE" = x"yes"; then
3814     AC_DEFINE(HAVE_KRB5_KEYBLOCK_KEYVALUE,1,
3815               [Whether the krb5_keyblock struct has a keyvalue property])
3816   fi
3818   found_arcfour_hmac=no
3819   AC_CACHE_CHECK([for ENCTYPE_ARCFOUR_HMAC_MD5],
3820                  samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,[
3821     AC_TRY_COMPILE([#include <krb5.h>],
3822       [krb5_enctype enctype; enctype = ENCTYPE_ARCFOUR_HMAC_MD5;],
3823       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=yes,
3824       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=no)])
3825   AC_CACHE_CHECK([for KEYTYPE_ARCFOUR_56],
3826                  samba_cv_HAVE_KEYTYPE_ARCFOUR_56,[
3827     AC_TRY_COMPILE([#include <krb5.h>],
3828       [krb5_keytype keytype; keytype = KEYTYPE_ARCFOUR_56;],
3829       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=yes,
3830       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=no)])
3831 # Heimdals with KEYTYPE_ARCFOUR but not KEYTYPE_ARCFOUR_56 are broken
3832 # w.r.t. arcfour and windows, so we must not enable it here
3833   if test x"$samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5" = x"yes" -a\
3834           x"$samba_cv_HAVE_KEYTYPE_ARCFOUR_56" = x"yes"; then
3835     AC_DEFINE(HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,1,
3836               [Whether the ENCTYPE_ARCFOUR_HMAC_MD5 key type definition is available])
3837     found_arcfour_hmac=yes
3838   fi
3839   AC_CACHE_CHECK([for ENCTYPE_ARCFOUR_HMAC],
3840                  samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC,[
3841     AC_TRY_COMPILE([#include <krb5.h>],
3842       [krb5_enctype enctype; enctype = ENCTYPE_ARCFOUR_HMAC;],
3843       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC=yes,
3844       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC=no)])
3845   if test x"$samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC" = x"yes"; then
3846     AC_DEFINE(HAVE_ENCTYPE_ARCFOUR_HMAC,1,
3847               [Whether the ENCTYPE_ARCFOUR_HMAC key type definition is available])
3848     found_arcfour_hmac=yes
3849   fi
3851   AC_CACHE_CHECK([for ENCTYPE_AES128_CTS_HMAC_SHA1_96],
3852                  samba_cv_HAVE_ENCTYPE_AES128_CTS_HMAC_SHA1_96,[
3853     AC_TRY_COMPILE([#include <krb5.h>],
3854       [krb5_enctype enctype; enctype = ENCTYPE_AES128_CTS_HMAC_SHA1_96;],
3855       samba_cv_HAVE_ENCTYPE_AES128_CTS_HMAC_SHA1_96=yes,
3856       samba_cv_HAVE_ENCTYPE_AES128_CTS_HMAC_SHA1_96=no)])
3857   if test x"$samba_cv_HAVE_ENCTYPE_AES128_CTS_HMAC_SHA1_96" = x"yes"; then
3858     AC_DEFINE(HAVE_ENCTYPE_AES128_CTS_HMAC_SHA1_96,1,
3859               [Whether the ENCTYPE_AES128_CTS_HMAC_SHA1_96 key type definition is available])
3860   fi
3861   AC_CACHE_CHECK([for ENCTYPE_AES256_CTS_HMAC_SHA1_96],
3862                  samba_cv_HAVE_ENCTYPE_AES256_CTS_HMAC_SHA1_96,[
3863     AC_TRY_COMPILE([#include <krb5.h>],
3864       [krb5_enctype enctype; enctype = ENCTYPE_AES256_CTS_HMAC_SHA1_96;],
3865       samba_cv_HAVE_ENCTYPE_AES256_CTS_HMAC_SHA1_96=yes,
3866       samba_cv_HAVE_ENCTYPE_AES256_CTS_HMAC_SHA1_96=no)])
3867   if test x"$samba_cv_HAVE_ENCTYPE_AES256_CTS_HMAC_SHA1_96" = x"yes"; then
3868     AC_DEFINE(HAVE_ENCTYPE_AES256_CTS_HMAC_SHA1_96,1,
3869               [Whether the ENCTYPE_AES256_CTS_HMAC_SHA1_96 key type definition is available])
3870   fi
3872   AC_CACHE_CHECK([for AP_OPTS_USE_SUBKEY],
3873                  samba_cv_HAVE_AP_OPTS_USE_SUBKEY,[
3874     AC_TRY_COMPILE([#include <krb5.h>],
3875       [krb5_flags ap_options; ap_options = AP_OPTS_USE_SUBKEY;],
3876       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=yes,
3877       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=no)])
3879   if test x"$samba_cv_HAVE_AP_OPTS_USE_SUBKEY" = x"yes"; then
3880     AC_DEFINE(HAVE_AP_OPTS_USE_SUBKEY,1,
3881               [Whether the AP_OPTS_USE_SUBKEY ap option is available])
3882   fi
3884   AC_CACHE_CHECK([for KV5M_KEYTAB],
3885                  samba_cv_HAVE_KV5M_KEYTAB,[
3886     AC_TRY_COMPILE([#include <krb5.h>],
3887       [krb5_keytab_entry entry; entry.magic = KV5M_KEYTAB;],
3888       samba_cv_HAVE_KV5M_KEYTAB=yes,
3889       samba_cv_HAVE_KV5M_KEYTAB=no)])
3891   if test x"$samba_cv_HAVE_KV5M_KEYTAB" = x"yes"; then
3892       AC_DEFINE(HAVE_KV5M_KEYTAB,1,
3893              [Whether the KV5M_KEYTAB option is available])
3894   fi
3896   AC_CACHE_CHECK([for KRB5_KU_OTHER_CKSUM],
3897                  samba_cv_HAVE_KRB5_KU_OTHER_CKSUM,[
3898     AC_TRY_COMPILE([#include <krb5.h>],
3899       [krb5_keyusage usage = KRB5_KU_OTHER_CKSUM;],
3900       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=yes,
3901       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=no)])
3903   if test x"$samba_cv_HAVE_KRB5_KU_OTHER_CKSUM" = x"yes"; then
3904     AC_DEFINE(HAVE_KRB5_KU_OTHER_CKSUM,1,
3905               [Whether KRB5_KU_OTHER_CKSUM is available])
3906   fi
3908   AC_CACHE_CHECK([for KRB5_KEYUSAGE_APP_DATA_CKSUM],
3909                  samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,[
3910     AC_TRY_COMPILE([#include <krb5.h>],
3911       [krb5_keyusage usage = KRB5_KEYUSAGE_APP_DATA_CKSUM;],
3912       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=yes,
3913       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=no)])
3915   if test x"$samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM" = x"yes"; then
3916     AC_DEFINE(HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,1,
3917               [Whether KRB5_KEYUSAGE_APP_DATA_CKSUM is available])
3918   fi
3920   AC_CACHE_CHECK([for the krb5_princ_component macro],
3921                 samba_cv_HAVE_KRB5_PRINC_COMPONENT,[
3922     AC_TRY_LINK([#include <krb5.h>],
3923       [const krb5_data *pkdata; krb5_context context; krb5_principal principal; pkdata = krb5_princ_component(context, principal, 0);],
3924       samba_cv_HAVE_KRB5_PRINC_COMPONENT=yes,
3925       samba_cv_HAVE_KRB5_PRINC_COMPONENT=no)])
3927   if test x"$samba_cv_HAVE_KRB5_PRINC_COMPONENT" = x"yes"; then
3928     AC_DEFINE(HAVE_KRB5_PRINC_COMPONENT,1,
3929                [Whether krb5_princ_component is available])
3930   fi
3932   AC_CACHE_CHECK([for key in krb5_keytab_entry],
3933                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY,[
3934     AC_TRY_COMPILE([#include <krb5.h>],
3935       [krb5_keytab_entry entry; krb5_keyblock e; entry.key = e;],
3936       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=yes,
3937       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=no)])
3939   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY" = x"yes"; then
3940     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEY,1,
3941               [Whether krb5_keytab_entry has key member])
3942   fi
3944   AC_CACHE_CHECK([for keyblock in krb5_keytab_entry],
3945                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,[
3946     AC_TRY_COMPILE([#include <krb5.h>],
3947       [krb5_keytab_entry entry; entry.keyblock.keytype = 0;],
3948       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=yes,
3949       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=no)])
3951   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK" = x"yes"; then
3952     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,1,
3953               [Whether krb5_keytab_entry has keyblock member])
3954   fi
3956   AC_CACHE_CHECK([for magic in krb5_address],
3957                  samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS,[
3958     AC_TRY_COMPILE([#include <krb5.h>],
3959       [krb5_address addr; addr.magic = 0;],
3960       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=yes,
3961       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=no)])
3963   if test x"$samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS" = x"yes"; then
3964     AC_DEFINE(HAVE_MAGIC_IN_KRB5_ADDRESS,1,
3965               [Whether the krb5_address struct has a magic property])
3966   fi
3968   AC_CACHE_CHECK([for WRFILE: keytab support],
3969                 samba_cv_HAVE_WRFILE_KEYTAB,[
3970     AC_TRY_RUN([
3971 #include<krb5.h>
3972   main()
3973   {
3974     krb5_context context;
3975     krb5_keytab keytab;
3977     krb5_init_context(&context);
3978     return krb5_kt_resolve(context, "WRFILE:api", &keytab);
3979   }],
3980   samba_cv_HAVE_WRFILE_KEYTAB=yes,
3981   samba_cv_HAVE_WRFILE_KEYTAB=no)])
3983   if test x"$samba_cv_HAVE_WRFILE_KEYTAB" = x"yes"; then
3984       AC_DEFINE(HAVE_WRFILE_KEYTAB,1,
3985                [Whether the WRFILE:-keytab is supported])
3986   fi
3988   AC_CACHE_CHECK([for krb5_realm type],
3989                 samba_cv_HAVE_KRB5_REALM_TYPE,[
3990     AC_TRY_COMPILE([#include <krb5.h>],
3991       [krb5_realm realm;],
3992       samba_cv_HAVE_KRB5_REALM_TYPE=yes,
3993       samba_cv_HAVE_KRB5_REALM_TYPE=no)])
3995   if test x"$samba_cv_HAVE_KRB5_REALM_TYPE" = x"yes"; then
3996     AC_DEFINE(HAVE_KRB5_REALM_TYPE,1,
3997                [Whether the type krb5_realm exists])
3998   fi
4000   AC_CACHE_CHECK([for krb5_princ_realm returns krb5_realm or krb5_data],
4001                samba_cv_KRB5_PRINC_REALM_RETURNS_REALM,[
4002     AC_TRY_COMPILE([#include <krb5.h>],
4003     [
4004     krb5_context context;
4005     krb5_principal principal;
4006     krb5_realm realm; realm = *krb5_princ_realm(context, principal);],
4007     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=yes,
4008     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=no)])
4010   if test x"$samba_cv_KRB5_PRINC_REALM_RETURNS_REALM" = x"yes"; then
4011     AC_DEFINE(KRB5_PRINC_REALM_RETURNS_REALM,1,
4012               [Whether krb5_princ_realm returns krb5_realm or krb5_data])
4013   fi
4015   AC_CACHE_CHECK([for krb5_addresses type],
4016                 samba_cv_HAVE_KRB5_ADDRESSES,[
4017     AC_TRY_COMPILE([#include <krb5.h>],
4018       [krb5_addresses addr;],
4019       samba_cv_HAVE_KRB5_ADDRESSES=yes,
4020       samba_cv_HAVE_KRB5_ADDRESSES=no)])
4022   if test x"$samba_cv_HAVE_KRB5_ADDRESSES" = x"yes"; then
4023     AC_DEFINE(HAVE_KRB5_ADDRESSES,1,
4024                [Whether the type krb5_addresses type exists])
4025   fi
4027   if test x"$ac_cv_func_ext_krb5_enctype_to_string" = x"yes"; then
4028     AC_CACHE_CHECK([for krb5_error_code krb5_enctype_to_string(krb5_context context, krb5_enctype enctype, char **str)],
4029         smb_krb5_cv_enctype_to_string_takes_krb5_context_arg,[
4030         AC_TRY_RUN_STRICT([
4031                 #include <stdlib.h>
4032                 #include <krb5.h>
4033                 int main(void) {
4034                         krb5_context context = NULL;
4035                         char *str = NULL;
4036                         krb5_enctype_to_string(context, 1, &str);
4037                         if (str) free (str); 
4038                         return 0;
4039                 }
4040                 ],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4041                 smb_krb5_cv_enctype_to_string_takes_krb5_context_arg=yes,
4042                 smb_krb5_cv_enctype_to_string_takes_krb5_context_arg=no)])
4044     if test x"$smb_krb5_cv_enctype_to_string_takes_krb5_context_arg" = x"yes"; then
4045       AC_DEFINE(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_KRB5_CONTEXT_ARG,1,
4046                 [whether krb5_enctype_to_string takes krb5_context argument])
4047     fi
4049     AC_CACHE_CHECK([for krb5_error_code krb5_enctype_to_string(krb5_enctype enctype, char *str, size_t len)],
4050         smb_krb5_cv_enctype_to_string_takes_size_t_arg,[
4051         AC_TRY_RUN_STRICT([
4052                 #include <krb5.h>
4053                 int main(void) {
4054                         char buf[256];
4055                         krb5_enctype_to_string(1, buf, 256);
4056                         return 0;
4057                 }
4058                 ],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4059                 smb_krb5_cv_enctype_to_string_takes_size_t_arg=yes,
4060                 smb_krb5_cv_enctype_to_string_takes_size_t_arg=no)])
4062     if test x"$smb_krb5_cv_enctype_to_string_takes_size_t_arg" = x"yes"; then
4063       AC_DEFINE(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_SIZE_T_ARG,1,
4064                 [whether krb5_enctype_to_string takes size_t argument])
4065     fi
4066   fi
4068   AC_CACHE_CHECK([for krb5_principal_get_realm],
4069                 samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM,[
4070     AC_TRY_LINK([#include <krb5.h>],
4071       [krb5_context ctx = NULL; krb5_principal princ = NULL; const char *str = krb5_principal_get_realm(ctx, princ);],
4072       samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM=yes,
4073       samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM=no)])
4075   if test x"$samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM" = x"yes"; then
4076     AC_DEFINE(HAVE_KRB5_PRINCIPAL_GET_REALM,1,
4077                [Whether the function krb5_principal_get_realm is defined])
4078   fi
4080   AC_CACHE_CHECK([for krb5_princ_realm],
4081                 samba_cv_HAVE_KRB5_PRINC_REALM,[
4082     AC_TRY_LINK([#include <krb5.h>],
4083       [krb5_context ctx = NULL; krb5_principal princ = NULL; const char *str = krb5_princ_realm(ctx, princ)->data;],
4084       samba_cv_HAVE_KRB5_PRINC_REALM=yes,
4085       samba_cv_HAVE_KRB5_PRINC_REALM=no)])
4087   if test x"$samba_cv_HAVE_KRB5_PRINC_REALM" = x"yes"; then
4088     AC_DEFINE(HAVE_KRB5_PRINC_REALM,1,
4089                [Whether the macro krb5_princ_realm is defined])
4090   fi
4092   AC_HAVE_DECL(KRB5_PDU_NONE,[#include <krb5.h>])
4094   AC_CACHE_CHECK([for flags in krb5_creds],
4095                 samba_cv_HAVE_FLAGS_IN_KRB5_CREDS,[
4096     AC_TRY_COMPILE([#include <krb5.h>],
4097       [krb5_creds creds; creds.flags.b.initial = 0;],
4098       samba_cv_HAVE_FLAGS_IN_KRB5_CREDS=yes,
4099       samba_cv_HAVE_FLAGS_IN_KRB5_CREDS=no)])
4101   if test x"$samba_cv_HAVE_FLAGS_IN_KRB5_CREDS" = x"yes"; then
4102     AC_DEFINE(HAVE_FLAGS_IN_KRB5_CREDS,1,
4103                [Whether the krb5_creds struct has a flags property])
4104   fi
4105   #
4106   #
4107   # Now the decisions whether we can support krb5
4108   #
4109   # NOTE: all tests should be done before this block!
4110   #
4111   #
4112   if test x"$found_arcfour_hmac" != x"yes"; then
4113     AC_MSG_WARN(arcfour-hmac-md5 encryption type not found in -lkrb5)
4114     use_ads=no
4115   fi
4117   if test x"$ac_cv_func_ext_krb5_set_real_time" != x"yes"; then
4118     AC_MSG_WARN(krb5_set_real_time encryption type not found in -lkrb5)
4119     use_ads=no
4120   fi
4122   if test x"$ac_cv_lib_ext_krb5_krb5_mk_req_extended" != x"yes"; then
4123     AC_MSG_WARN(krb5_mk_req_extended not found in -lkrb5)
4124     use_ads=no
4125   fi
4127   if test x"$ac_cv_func_ext_krb5_get_host_realm" != x"yes"
4128   then
4129     AC_MSG_WARN(krb5_get_host_realm not found in -lkrb5)
4130     use_ads=no
4131   fi
4133   if test x"$ac_cv_func_ext_krb5_free_host_realm" != x"yes"
4134   then
4135     AC_MSG_WARN(krb5_free_host_realm not found in -lkrb5)
4136     use_ads=no
4137   fi
4139   if test x"$ac_cv_func_ext_krb5_fwd_tgt_creds" != x"yes"
4140   then
4141     AC_MSG_WARN(krb5_fwd_tgt_creds not found in -lkrb5)
4142     use_ads=no
4143   fi
4145   if test x"$ac_cv_func_ext_krb5_get_init_creds_opt_alloc" != x"yes"
4146   then
4147     AC_MSG_WARN(krb5_get_init_creds_opt_alloc found in -lkrb5)
4148     use_ads=no
4149   fi
4151   if test x"$smb_krb5_cv_creds_opt_free_context" != x"yes"
4152   then
4153     AC_MSG_WARN(krb5_get_init_creds_opt_free not found or was too old in -lkrb5)
4154     use_ads=no
4155   fi
4157   if test x"$ac_cv_func_ext_krb5_get_renewed_creds" != x"yes"
4158   then
4159     AC_MSG_WARN(krb5_get_renewed_creds not found in -lkrb5)
4160     use_ads=no
4161   fi
4163   if test x"$ac_cv_func_ext_krb5_principal_compare_any_realm" != x"yes"
4164   then
4165     AC_MSG_WARN(krb5_principal_compare_any_realm not found in -lkrb5)
4166     use_ads=no
4167   fi
4169   if test x"$ac_cv_func_ext_krb5_principal2salt" != x"yes" -o \
4170           x"$ac_cv_func_ext_krb5_c_string_to_key" != x"yes"
4171   then
4172         if test x"$ac_cv_func_ext_krb5_get_pw_salt" != x"yes" -o \
4173              x"$ac_cv_func_ext_krb5_string_to_key_salt" != x"yes"
4174         then
4175               AC_MSG_WARN(no CREATE_KEY_FUNCTIONS detected)
4176               use_ads=no
4177         fi
4178   fi
4180   if test x"$ac_cv_func_ext_krb5_get_permitted_enctypes" != x"yes" -a \
4181           x"$ac_cv_func_ext_krb5_get_default_in_tkt_etypes" != x"yes"
4182   then
4183     AC_MSG_WARN(no GET_ENCTYPES_FUNCTIONS detected)
4184     use_ads=no
4185   fi
4187   if test x"$ac_cv_func_ext_krb5_kt_free_entry" != x"yes" -a \
4188           x"$ac_cv_func_ext_krb5_free_keytab_entry_contents" != x"yes"
4189   then
4190     AC_MSG_WARN(no KT_FREE_FUNCTION detected)
4191     use_ads=no
4192   fi
4194   if test x"$ac_cv_func_ext_krb5_c_verify_checksum" != x"yes"
4195   then
4196     AC_MSG_WARN(krb5_c_verify_checksum not found in -lkrb5)
4197     use_ads=no
4198   fi
4200   if test x"$ac_cv_func_ext_gss_wrap_iov" != x"yes" ; then
4201     AC_MSG_WARN(gss_wrap_iov not found in -lgssapi)
4202     use_ads=no
4203   fi
4205   if test x"$ac_cv_func_ext_gss_get_name_attribute" != x"yes" ; then
4206     if test x"$ac_cv_func_ext_gsskrb5_extract_authz_data_from_sec_context" != x"yes" -o \
4207             x"$ac_cv_func_ext_gss_inquire_sec_context_by_oid" != x"yes"
4208     then
4209       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)
4210       use_ads=no
4211     fi
4212   fi
4214   if test x"$use_ads" = x"yes"; then
4215     AC_DEFINE(WITH_ADS,1,[Whether to include Active Directory support])
4216     AC_DEFINE(HAVE_KRB5,1,[Whether to have KRB5 support])
4217   else
4218     if test x"$with_ads_support" = x"yes"; then
4219         AC_MSG_ERROR(krb5 libs don't have all features required for Active Directory support)
4220     else
4221         AC_MSG_WARN(krb5 libs don't have all features required for Active Directory support)
4222     fi
4223     AC_REMOVE_DEFINE(HAVE_KRB5_H)
4224     AC_REMOVE_DEFINE(HAVE_GSSAPI_H)
4225     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_GENERIC_H)
4226     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_H)
4227     AC_REMOVE_DEFINE(HAVE_GSSAPI)
4228     KRB5_LIBS=""
4229     with_ads_support=no
4230   fi
4231   AC_MSG_CHECKING(whether Active Directory and krb5 support is used)
4232   AC_MSG_RESULT([$use_ads])
4234 LIBS="$ac_save_LIBS"
4237 AC_CHECK_LIB_EXT(nscd, NSCD_LIBS, nscd_flush_cache)
4238 PASSDB_LIBS="$PASSDB_LIBS $NSCD_LIBS"
4241 ########################################################
4242 # Compile with DNS Updates support?
4244 with_dnsupdate_support=auto
4245 AC_MSG_CHECKING([whether to enable DNS Updates support])
4247 AC_ARG_WITH(dnsupdate,
4248 [AS_HELP_STRING([--with-dnsupdate], [Enable DNS Updates support (default=auto)])],
4249 [ case "$withval" in
4250     yes|no)
4251         with_dnsupdate_support=$withval
4252         ;;
4253   esac ])
4255 AC_MSG_RESULT($with_dnsupdate_support)
4257 if test x"$with_dnsupdate_support" != x"no"; then
4259   ################################################################
4260   # first test for AD / GSSAPI support being enabled
4261         if test x"$have_gssapi" != xyes -o x"$use_ads" != xyes ; then
4262                 if test x"$with_dnsupdate_support" = x"yes" ; then
4263                         AC_MSG_ERROR(DNS Updates support only possible with AD and GSSAPI support)
4264                 else
4265                         AC_MSG_NOTICE(DNS Updates support only possible with AD and GSSAPI support)
4266                         with_dnsupdate_support=no
4267                 fi
4268         fi
4271 if test x"$with_dnsupdate_support" != x"no"; then
4272       AC_DEFINE(WITH_DNS_UPDATES,1,[Whether to enable DNS Update support])
4275   # finally print out the result:
4276 AC_MSG_CHECKING(whether DNS Updates support is used)
4277 AC_MSG_RESULT([$with_dnsupdate_support])
4280 #################################################
4281 # check for automount support
4282 AC_MSG_CHECKING(whether to use automount)
4283 AC_ARG_WITH(automount,
4284 [AS_HELP_STRING([--with-automount], [Include automount support (default=no)])],
4285 [ case "$withval" in
4286   yes)
4287     AC_MSG_RESULT(yes)
4288     AC_DEFINE(WITH_AUTOMOUNT,1,[Whether to include automount support])
4289     ;;
4290   *)
4291     AC_MSG_RESULT(no)
4292     ;;
4293   esac ],
4294   AC_MSG_RESULT(no)
4297 #################################################
4298 # Check for a PAM clear-text auth, accounts, password
4299 # and session support. Most PAM implementations keep their
4300 # headers in /usr/include/security. Darwin keeps its in
4301 # /usr/include/pam.
4303 with_pam_for_crypt=no
4304 try_pam=auto
4305 AC_MSG_CHECKING(whether to try PAM support)
4306 AC_ARG_WITH(pam,
4307 [AS_HELP_STRING([--with-pam], [Include PAM support (default=auto)])],
4308 [ case "$withval" in
4309   yes|no|auto)
4310     try_pam=$withval
4311     ;;
4312   esac
4314 AC_MSG_RESULT([$try_pam])
4316 use_pam=no
4317 create_pam_modules=no
4318 if test x"${try_pam}" != x"no";then
4319         use_pam=yes
4320         create_pam_modules=yes
4322         # Most systems have PAM headers in /usr/include/security, but Darwin
4323         # has them in /usr/include/pam.
4324         AC_CHECK_HEADERS(security/pam_appl.h pam/pam_appl.h)
4325         if test x"$ac_cv_header_security_pam_appl_h" != x"yes" -a \
4326                 x"$ac_cv_header_pam_pam_appl_h" != x"yes"; then
4327                 if test x"${try_pam}" = x"yes";then
4328                         AC_MSG_ERROR([--with-pam=yes but pam_appl.h not found])
4329                 fi
4330                 use_pam=no
4331                 create_pam_modules=no
4332         fi
4334         AC_CHECK_LIB_EXT(pam, PAM_LIBS, pam_get_data)
4335         if test x"$ac_cv_lib_ext_pam_pam_get_data" != x"yes"; then
4336                 if test x"${try_pam}" = x"yes";then
4337                         AC_MSG_ERROR([--with-pam=yes but libpam not found])
4338                 fi
4339                 use_pam=no
4340                 create_pam_modules=no
4341         fi
4343         AC_CHECK_HEADERS(security/pam_modules.h pam/pam_modules.h,,,[[
4344                 #if HAVE_SECURITY_PAM_APPL_H
4345                 #include <security/pam_appl.h>
4346                 #endif
4347                 #if HAVE_PAM_PAM_APPL_H
4348                 #include <pam/pam_appl.h>
4349                 #endif
4350         ]])
4351         if test x"$ac_cv_header_security_pam_modules_h" = x"no" -a \
4352                 x"$ac_cv_header_pam_pam_modules_h" = x"no" ; then
4353                 if test x"${try_pam}" = x"yes";then
4354                         AC_MSG_ERROR([--with-pam=yes but pam_modules.h not found])
4355        fi
4356                 create_pam_modules=no
4357     fi
4359         if test x"$use_pam" = x"yes"; then
4360     AC_DEFINE(WITH_PAM,1,[Whether to include PAM support])
4361                 AC_DEFINE(HAVE_LIBPAM,1,[Whether libpam is available])
4362                 AUTH_LIBS="$AUTH_LIBS $PAM_LIBS"
4363     with_pam_for_crypt=yes
4365                 if test x"$create_pam_modules" = x"yes"; then
4366                         AC_DEFINE(WITH_PAM_MODULES,1,[Whether to include PAM MODULES support])
4367                         # this checks are optional,
4368                         # we don't care about the results here
4369                         AC_CHECK_HEADERS(security/pam_ext.h security/_pam_macros.h)
4370                         AC_CHECK_HEADERS(pam/pam_ext.h pam/_pam_macros.h)
4371                         AC_CHECK_FUNC_EXT(pam_vsyslog,$PAM_LIBS)
4372                 else
4373                         AC_MSG_WARN([PAM support detected but PAM MODULES support is missing])          
4374                 fi
4375         fi
4376         AC_MSG_CHECKING(whether to use PAM support)
4377         AC_MSG_RESULT([$use_pam])
4379         AC_MSG_CHECKING(whether to have PAM MODULES support)
4380         AC_MSG_RESULT([$create_pam_modules])
4382         AC_TRY_COMPILE([
4383                 #if defined(HAVE_SECURITY_PAM_APPL_H)
4384                 #include <security/pam_appl.h>
4385                 #elif defined(HAVE_PAM_PAM_APPL_H)
4386                 #include <pam/pam_appl.h>
4387                 #endif],[
4388                 pam_set_item(0, PAM_RHOST, 0);
4389                 ],
4390                 AC_DEFINE(HAVE_PAM_RHOST, 1,
4391                           [Define to 1 if PAM_RHOST is available]),[])
4393         AC_TRY_COMPILE([
4394                 #if defined(HAVE_SECURITY_PAM_APPL_H)
4395                 #include <security/pam_appl.h>
4396                 #elif defined(HAVE_PAM_PAM_APPL_H)
4397                 #include <pam/pam_appl.h>
4398                 #endif],[
4399                 pam_set_item(0, PAM_TTY, 0);
4400                 ],
4401                 AC_DEFINE(HAVE_PAM_TTY, 1,
4402                           [Define to 1 if PAM_TTY is available]),[])
4404 fi # try_pam != no
4406 #################################################
4407 # check for PAM_RADIO_TYPE
4408 AC_TRY_COMPILE([
4409 #if (!defined(LINUX))
4411 #define PAM_EXTERN extern
4412 #if defined(HAVE_SECURITY_PAM_APPL_H)
4413 #include <security/pam_appl.h>
4414 #elif defined(HAVE_PAM_PAM_APPL_H)
4415 #include <pam/pam_appl.h>
4416 #endif
4418 #endif
4420 #if defined(HAVE_SECURITY_PAM_MODULES_H)
4421 #include <security/pam_modules.h>
4422 #elif defined(HAVE_PAM_PAM_MODULES_H)
4423 #include <pam/pam_modules.h>
4424 #endif
4426 #if defined(HAVE_SECURITY__PAM_MACROS_H)
4427 #include <security/_pam_macros.h>
4428 #elif defined(HAVE_PAM__PAM_MACROS_H)
4429 #include <pam/_pam_macros.h>
4430 #endif
4432 #ifdef HAVE_SECURITY_PAM_EXT_H
4433 #include <security/pam_ext.h>
4434 #endif
4436 [int i; i = PAM_RADIO_TYPE; ],
4437 AC_DEFINE(HAVE_PAM_RADIO_TYPE, 1, [Define to 1 if PAM_RADIO_TYPE is available]),[])
4439 #################################################
4440 # check for pam_smbpass support
4441 PAM_MODULES=""
4442 INSTALL_PAM_MODULES=""
4443 UNINSTALL_PAM_MODULES=""
4445 try_pam_smbpass=auto
4446 AC_MSG_CHECKING(whether to use pam_smbpass)
4447 AC_ARG_WITH(pam_smbpass,
4448 [AS_HELP_STRING([--with-pam_smbpass], [Build PAM module for authenticating against passdb backends (default=auto)])],
4449 [ case "$withval" in
4450   yes|no|auto)
4451     try_pam_smbpass=$withval
4452   ;;
4453   *)
4454     AC_MSG_ERROR([valid options are yes,no,auto])
4455   ;;
4456   esac
4459 if test x"${try_pam_smbpass}" = xno ; then
4460         use_pam_smbpass=no
4461 else
4462         use_pam_smbpass=yes
4463         # Conditions under which pam_smbpass can't be built.
4464         if test x"$BLDSHARED" != xtrue ; then
4465                 if test x"${try_pam_smbpass}" = xyes ; then
4466                         AC_MSG_ERROR([No support for shared modules])
4467                 fi
4468                 use_pam_smbpass=no
4469         elif test x"$create_pam_modules" != xyes ; then
4470                 if test x"${try_pam_smbpass}" = xyes ; then
4471                         AC_MSG_ERROR([No support for PAM MODULES])
4472                 fi
4473                 use_pam_smbpass=no
4474         fi
4476         if test x"${use_pam_smbpass}" = xyes ; then 
4477                 PAM_MODULES="pam_smbpass"
4478                 INSTALL_PAM_MODULES="installpammodules"
4479                 UNINSTALL_PAM_MODULES="uninstallpammodules"
4480         fi
4482 AC_MSG_RESULT([$use_pam_smbpass])
4486 ## moved after the check for -lcrypt in order to
4487 ## ensure that the necessary libraries are included
4488 ## check checking for truncated salt.  Wrapped by the
4489 ## $with_pam_for_crypt variable as above   --jerry
4491 if test $with_pam_for_crypt = no; then
4492 AC_CACHE_CHECK([for a crypt that needs truncated salt],samba_cv_HAVE_TRUNCATED_SALT,[
4493 crypt_LIBS="$LIBS"
4494 LIBS="$AUTH_LIBS $LIBS"
4495 AC_TRY_RUN([#include "${srcdir-.}/../tests/crypttest.c"],
4496         samba_cv_HAVE_TRUNCATED_SALT=no,samba_cv_HAVE_TRUNCATED_SALT=yes,samba_cv_HAVE_TRUNCATED_SALT=cross)
4497 LIBS="$crypt_LIBS"])
4498 if test x"$samba_cv_HAVE_TRUNCATED_SALT" = x"yes"; then
4499         AC_DEFINE(HAVE_TRUNCATED_SALT,1,[Whether crypt needs truncated salt])
4503 #################################################
4504 # check for a NISPLUS_HOME support
4505 AC_MSG_CHECKING(whether to use NISPLUS_HOME)
4506 AC_ARG_WITH(nisplus-home,
4507 [AS_HELP_STRING([--with-nisplus-home], [Include NISPLUS_HOME support (default=no)])],
4508 [ case "$withval" in
4509   yes)
4510     AC_MSG_RESULT(yes)
4511     AC_DEFINE(WITH_NISPLUS_HOME,1,[Whether to include nisplus_home support])
4512     ;;
4513   *)
4514     AC_MSG_RESULT(no)
4515     ;;
4516   esac ],
4517   AC_MSG_RESULT(no)
4520 #################################################
4521 # check for syslog logging
4522 AC_MSG_CHECKING(whether to use syslog logging)
4523 AC_ARG_WITH(syslog,
4524 [AS_HELP_STRING([--with-syslog], [Include experimental SYSLOG support (default=no)])],
4525 [ case "$withval" in
4526   yes)
4527     AC_MSG_RESULT(yes)
4528     AC_DEFINE(WITH_SYSLOG,1,[Whether to include experimental syslog support])
4529     ;;
4530   *)
4531     AC_MSG_RESULT(no)
4532     ;;
4533   esac ],
4534   AC_MSG_RESULT(no)
4537 #################################################
4538 # check for custom syslog facility
4539 AC_MSG_CHECKING(whether to use a custom syslog facility)
4540 AC_ARG_WITH(syslog-facility,
4541 [AS_HELP_STRING([--with-syslog-facility], [Use a custom syslog facility (default=none)])],
4543   if test "$withval" = "no" ; then
4544     AC_MSG_ERROR([argument to --with-syslog-facility must be a string])
4545   else
4546      AC_MSG_RESULT([$withval])
4547      if test "$withval" != "yes" ; then
4548         syslog_facility="$withval"
4549         AC_DEFINE_UNQUOTED(SYSLOG_FACILITY,$syslog_facility, [syslog facility to log to])
4550      fi
4551   fi
4553 AC_MSG_RESULT(no)
4556 #################################################
4557 # check for experimental disk-quotas support
4559 samba_cv_WITH_QUOTAS=auto
4560 samba_cv_SYSQUOTA_FOUND=no
4562 AC_MSG_CHECKING(whether to try disk-quotas support)
4563 AC_ARG_WITH(quotas,
4564 [AS_HELP_STRING([--with-quotas], [Include disk-quota support (default=no)])],
4565 [ case "$withval" in
4566   yes)
4567     AC_MSG_RESULT(yes)
4568     samba_cv_WITH_QUOTAS=yes
4569     ;;
4570   auto)
4571     AC_MSG_RESULT(auto)
4572     samba_cv_WITH_QUOTAS=auto
4573     ;;
4574   no)
4575     AC_MSG_RESULT(no)
4576     samba_cv_WITH_QUOTAS=no
4577     ;;
4578   *)
4579     AC_MSG_RESULT(${samba_cv_WITH_QUOTAS})
4580     ;;
4581   esac ],
4582   AC_MSG_RESULT(${samba_cv_WITH_QUOTAS})
4585 #############################################
4586 # only check for quota stuff if --with-quotas
4587 if test x"$samba_cv_WITH_QUOTAS" != x"no"; then
4589 case "$host_os" in
4590         # on linux we didn't need to test we have builtin support
4591         *linux*)
4592             samba_cv_SYSQUOTA_FOUND=yes
4593             AC_DEFINE(HAVE_QUOTACTL_LINUX,1,[Whether Linux quota support is available])
4594             AC_MSG_CHECKING(whether to use the lib/sysquotas_linux.c builtin support)
4595             AC_MSG_RESULT(yes)
4597             AC_MSG_CHECKING(whether to use the lib/sysquotas_xfs.c builtin support)
4598             AC_MSG_RESULT(yes)
4599             ;;
4600         *solaris*)
4601             # need to set this define when using static linking (BUG 1473)
4602             CPPFLAGS="$CPPFLAGS -DSUNOS5"
4603             ;;
4604         *)
4605             ;;
4606 esac
4608 # some broken header files need this
4609 AC_CHECK_HEADER(asm/types.h,[
4610             AC_DEFINE(HAVE_ASM_TYPES_H,1,[check for <asm/types.h>])
4611             AC_ADD_INCLUDE(<asm/types.h>)
4612             ])
4614 # For quotas on Veritas VxFS filesystems
4615 AC_CHECK_HEADERS(sys/fs/vx_quota.h)
4617 # For quotas on XFS filesystems, Linux style
4618 AC_CHECK_HEADERS(xfs/xqm.h,[
4619             AC_DEFINE(HAVE_XFS_QUOTAS,1,[Whether xfs quota support is available])
4620         ])
4622 # For sys/quota.h and linux/quota.h
4623 AC_CHECK_HEADERS(sys/quota.h)
4625 # For quotas on BSD systems
4626 AC_CHECK_HEADERS(ufs/ufs/quota.h)
4629 if test x"$ac_cv_header_xfs_xqm_h" != x"yes"; then
4630 # if we have xfs quota support <sys/quota.h> (IRIX) we should use it
4631 AC_CACHE_CHECK([for XFS QUOTA in <sys/quota.h>],samba_cv_HAVE_SYS_QUOTA_XFS, [
4632 AC_TRY_COMPILE([
4633 #include "confdefs.h"
4634 #ifdef HAVE_SYS_TYPES_H
4635 #include <sys/types.h>
4636 #endif
4637 #ifdef HAVE_ASM_TYPES_H
4638 #include <asm/types.h>
4639 #endif
4640 #include <sys/quota.h>
4641 ],[int i = Q_XGETQUOTA;],
4642 samba_cv_HAVE_SYS_QUOTA_XFS=yes,samba_cv_HAVE_SYS_QUOTA_XFS=no)])
4643 if test "$samba_cv_HAVE_SYS_QUOTA_XFS"x = "yes"x; then
4644         AC_DEFINE(HAVE_XFS_QUOTAS,1,[Whether xfs quota support is available])
4648 # if we have struct dqblk .dqb_fsoftlimit instead of .dqb_isoftlimit on IRIX
4649 AC_CACHE_CHECK([if struct dqblk has .dqb_fsoftlimit],samba_cv_HAVE_DQB_FSOFTLIMIT, [
4650 AC_TRY_COMPILE([
4651 #include "confdefs.h"
4652 #ifdef HAVE_SYS_QUOTA_H
4653 #include <sys/quota.h>
4654 #endif
4656 struct dqblk D;
4657 D.dqb_fsoftlimit = 0;],
4658 samba_cv_HAVE_DQB_FSOFTLIMIT=yes,samba_cv_HAVE_DQB_FSOFTLIMIT=no)])
4659 if test "$samba_cv_HAVE_DQB_FSOFTLIMIT"x = "yes"x; then
4660         AC_DEFINE(HAVE_DQB_FSOFTLIMIT,1,[struct dqblk .dqb_fsoftlimit])
4663 ##################
4664 # look for a working quota system
4666 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4667 AC_CACHE_CHECK([for long quotactl(int cmd, char *special, qid_t id, caddr_t addr)],samba_cv_HAVE_QUOTACTL_4A,[
4668 AC_TRY_RUN_STRICT([
4669 #define HAVE_QUOTACTL_4A 1
4670 #define AUTOCONF_TEST 1
4671 #include "confdefs.h"
4672 #include "${srcdir-.}/../../tests/sysquotas.c"],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4673            samba_cv_HAVE_QUOTACTL_4A=yes,samba_cv_HAVE_QUOTACTL_4A=no,samba_cv_HAVE_QUOTACTL_4A=cross)])
4674 if test x"$samba_cv_HAVE_QUOTACTL_4A" = x"yes"; then
4675     samba_cv_SYSQUOTA_FOUND=yes;
4676     AC_DEFINE(HAVE_QUOTACTL_4A,1,[Whether long quotactl(int cmd, char *special, qid_t id, caddr_t addr) is available])
4680 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4681 AC_CACHE_CHECK([for int quotactl(const char *path, int cmd, int id, char *addr)],samba_cv_HAVE_QUOTACTL_4B,[
4682 AC_TRY_RUN_STRICT([
4683 #define HAVE_QUOTACTL_4B 1
4684 #define AUTOCONF_TEST 1
4685 #include "confdefs.h"
4686 #include "${srcdir-.}/../../tests/sysquotas.c"],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4687            samba_cv_HAVE_QUOTACTL_4B=yes,samba_cv_HAVE_QUOTACTL_4B=no,samba_cv_HAVE_QUOTACTL_4B=cross)])
4688 if test x"$samba_cv_HAVE_QUOTACTL_4B" = x"yes"; then
4689     samba_cv_SYSQUOTA_FOUND=yes;
4690     AC_DEFINE(HAVE_QUOTACTL_4B,1,[Whether int quotactl(const char *path, int cmd, int id, char *addr) is available])
4691     AC_CHECK_MEMBERS([struct dqblk.dqb_curbytes], # Darwin bytecount style
4692         [ AC_DEFINE([HAVE_STRUCT_DQBLK_DQB_CURBYTES],[1],[darwin style quota bytecount])],,
4693         [#include <sys/types.h>
4694         #include <sys/quota.h>])
4699 AC_CACHE_CHECK([for NFS QUOTAS],samba_cv_HAVE_NFS_QUOTAS,[
4700 AC_TRY_COMPILE([
4701 #include <rpc/rpc.h>
4702 #include <rpc/types.h>
4703 #include <rpcsvc/rquota.h>
4704 #ifdef HAVE_RPC_NETTYPE_H
4705 #include <rpc/nettype.h>
4706 #endif
4707 #include <rpc/xdr.h>
4708 ],[clnt_create("", RQUOTAPROG, RQUOTAVERS, "udp");],
4709                    samba_cv_HAVE_NFS_QUOTAS=yes, samba_cv_HAVE_NFS_QUOTAS=no)])
4711 if test x"$samba_cv_HAVE_NFS_QUOTAS" = x"yes"; then
4712     AC_DEFINE(HAVE_NFS_QUOTAS,1,[NFS quota support is available])
4713     AC_CHECK_MEMBER(struct getquota_rslt.getquota_rslt_u,
4714                 AC_DEFINE(HAVE_GETQUOTA_RSLT_GETQUOTA_RSLT_U, 1, [Defined if struct getquota_rslt has getquota_rslt_u]),,
4715                 [#include <rpcsvc/rquota.h>])
4718 #################################################
4719 # check for mntent.h and struct mntent
4720 AC_CHECK_HEADERS(mntent.h)
4721 #################################################
4722 # check for setmntent,getmntent,endmntent
4723 AC_CHECK_FUNCS(setmntent getmntent endmntent)
4725 #################################################
4726 # check for devnm.h and struct mntent
4727 AC_CHECK_HEADERS(devnm.h)
4728 #################################################
4729 # check for devnm
4730 AC_CHECK_FUNCS(devnm)
4732 AC_MSG_CHECKING(whether to use the new lib/sysquotas.c interface)
4733 if test x"$samba_cv_SYSQUOTA_FOUND" = x"yes"; then
4734         AC_MSG_RESULT(yes)
4735         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
4736         AC_DEFINE(HAVE_SYS_QUOTAS,1,[Whether the new lib/sysquotas.c interface can be used])
4737 else
4738     AC_MSG_RESULT(no)
4739     AC_MSG_CHECKING(whether to use the old quota support)
4740     if test x"$samba_cv_WITH_QUOTAS" = x"yes"; then
4741         AC_DEFINE(WITH_QUOTAS,1,[Whether to use old quota support])
4742         AC_MSG_RESULT(yes)
4743     else
4744         AC_MSG_RESULT(no)
4745     fi
4748 ####################
4749 # End of quota check samba_cv_WITH_QUOTAS
4752 #################################################
4753 # check for experimental utmp accounting
4755 AC_MSG_CHECKING(whether to support utmp accounting)
4756 WITH_UTMP=yes
4757 AC_ARG_WITH(utmp,
4758 [AS_HELP_STRING([--with-utmp], [Include utmp accounting (default, if supported by OS)])],
4759 [ case "$withval" in
4760   no)
4761                 WITH_UTMP=no
4762                 ;;
4763   *)
4764                 WITH_UTMP=yes
4765                 ;;
4766   esac ],
4769 # utmp requires utmp.h
4770 # Note similar check earlier, when checking utmp details.
4772 if test x"$WITH_UTMP" = x"yes" -a x"$ac_cv_header_utmp_h" = x"no"; then
4773         utmp_no_reason=", no utmp.h on $host_os"
4774         WITH_UTMP=no
4777 if test x"$WITH_UTMP" = x"yes" -a x"$samba_cv_HAVE_UX_UT_LINE" != x"yes"; then
4778         utmp_no_reason=", sizeof ut_line not ok"
4779         WITH_UTMP=no
4782 # Display test results
4784 if test x"$WITH_UTMP" = x"yes"; then
4785         AC_MSG_RESULT(yes)
4786         AC_DEFINE(WITH_UTMP,1,[Whether to include experimental utmp accounting])
4787 else
4788         AC_MSG_RESULT(no$utmp_no_reason)
4792 #################################################
4793 # these tests are taken from the GNU fileutils package
4794 AC_CHECKING(how to get filesystem space usage)
4795 space=no
4797 # Perform only the link test since it seems there are no variants of the
4798 # statvfs function.  This check is more than just AC_CHECK_FUNCS(statvfs)
4799 # because that got a false positive on SCO OSR5.  Adding the declaration
4800 # of a `struct statvfs' causes this test to fail (as it should) on such
4801 # systems.  That system is reported to work fine with STAT_STATFS4 which
4802 # is what it gets when this test fails.
4803 if test $space = no; then
4804   # SVR4
4805   AC_CACHE_CHECK([statvfs function (SVR4)], fu_cv_sys_stat_statvfs,
4806                  [AC_TRY_LINK([#include <sys/types.h>
4807 #include <sys/statvfs.h>],
4808                               [struct statvfs fsd; statvfs (0, &fsd);],
4809                               fu_cv_sys_stat_statvfs=yes,
4810                               fu_cv_sys_stat_statvfs=no)])
4811   if test $fu_cv_sys_stat_statvfs = yes; then
4812     space=yes
4813     AC_DEFINE(STAT_STATVFS,1,[Whether statvfs() is available])
4814   fi
4817 # smbd/statvfs.c assumes that statvfs.f_fsid is an integer.
4818 # This is not the case on ancient Linux systems.
4820 AC_CACHE_CHECK([that statvfs.f_fsid is an integer],samba_cv_fsid_int, [
4821     AC_TRY_COMPILE([#include <sys/types.h>
4822 #include <sys/statvfs.h>],[struct statvfs buf; buf.f_fsid = 0],
4823         samba_cv_fsid_int=yes,samba_cv_fsid_int=no)])
4824 if test x"$samba_cv_fsid_int" = x"yes"; then
4825     AC_DEFINE(HAVE_FSID_INT, 1, [Whether statvfs.f_fsid is an integer])
4828 # fsusage.c assumes that statvfs has an f_frsize entry. Some weird
4829 # systems use f_bsize.
4830 AC_CACHE_CHECK([that statvfs.f_frsize works],samba_cv_frsize, [
4831     AC_TRY_COMPILE([#include <sys/types.h>
4832 #include <sys/statvfs.h>],[struct statvfs buf; buf.f_frsize = 0],
4833         samba_cv_frsize=yes,samba_cv_frsize=no)])
4834 if test x"$samba_cv_frsize" = x"yes"; then
4835     AC_DEFINE(HAVE_FRSIZE, 1, [Whether statvfs.f_frsize exists])
4838 # Some systems use f_flag in struct statvfs while others use f_flags
4839 AC_CACHE_CHECK([that statvfs.statvfs_f_flag works],samba_cv_statvfs_f_flag, [
4840     AC_TRY_COMPILE([#include <sys/types.h>
4841 #include <sys/statvfs.h>],[struct statvfs buf; buf.f_flag = 0],
4842         samba_cv_statvfs_f_flag=yes,samba_cv_statvfs_f_flag=no)])
4843 if test x"$samba_cv_statvfs_f_flag" = x"yes"; then
4844     AC_DEFINE(HAVE_STATVFS_F_FLAG, 1, [Whether statvfs.f_flag exists])
4847 AC_CACHE_CHECK([that statvfs.statvfs_f_flags works],samba_cv_statvfs_f_flags, [
4848     AC_TRY_COMPILE([#include <sys/types.h>
4849 #include <sys/statvfs.h>],[struct statvfs buf; buf.f_flags = 0],
4850         samba_cv_statvfs_f_flags=yes,samba_cv_statvfs_f_flags=no)])
4851 if test x"$samba_cv_statvfs_f_flags" = x"yes"; then
4852     AC_DEFINE(HAVE_STATVFS_F_FLAGS, 1, [Whether statvfs.f_flags exists])
4855 if test $space = no; then
4856   # DEC Alpha running OSF/1
4857   AC_MSG_CHECKING([for 3-argument statfs function (DEC OSF/1)])
4858   AC_CACHE_VAL(fu_cv_sys_stat_statfs3_osf1,
4859   [AC_TRY_RUN([
4860 #include <sys/param.h>
4861 #include <sys/types.h>
4862 #include <sys/mount.h>
4863   main ()
4864   {
4865     struct statfs fsd;
4866     fsd.f_fsize = 0;
4867     return (statfs (".", &fsd, sizeof (struct statfs)));
4868   }],
4869   fu_cv_sys_stat_statfs3_osf1=yes,
4870   fu_cv_sys_stat_statfs3_osf1=no,
4871   fu_cv_sys_stat_statfs3_osf1=no)])
4872   AC_MSG_RESULT($fu_cv_sys_stat_statfs3_osf1)
4873   if test $fu_cv_sys_stat_statfs3_osf1 = yes; then
4874     space=yes
4875     AC_DEFINE(STAT_STATFS3_OSF1,1,[Whether statfs requires 3 arguments])
4876   fi
4879 if test $space = no; then
4880 # AIX
4881   AC_MSG_CHECKING([for two-argument statfs with statfs.bsize dnl
4882 member (AIX, 4.3BSD)])
4883   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_bsize,
4884   [AC_TRY_RUN([
4885 #ifdef HAVE_SYS_PARAM_H
4886 #include <sys/param.h>
4887 #endif
4888 #ifdef HAVE_SYS_MOUNT_H
4889 #include <sys/mount.h>
4890 #endif
4891 #ifdef HAVE_SYS_VFS_H
4892 #include <sys/vfs.h>
4893 #endif
4894   main ()
4895   {
4896   struct statfs fsd;
4897   fsd.f_bsize = 0;
4898   return (statfs (".", &fsd));
4899   }],
4900   fu_cv_sys_stat_statfs2_bsize=yes,
4901   fu_cv_sys_stat_statfs2_bsize=no,
4902   fu_cv_sys_stat_statfs2_bsize=no)])
4903   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_bsize)
4904   if test $fu_cv_sys_stat_statfs2_bsize = yes; then
4905     space=yes
4906     AC_DEFINE(STAT_STATFS2_BSIZE,1,[Whether statfs requires two arguments and struct statfs has bsize property])
4907   fi
4910 if test $space = no; then
4911 # SVR3
4912   AC_MSG_CHECKING([for four-argument statfs (AIX-3.2.5, SVR3)])
4913   AC_CACHE_VAL(fu_cv_sys_stat_statfs4,
4914   [AC_TRY_RUN([#include <sys/types.h>
4915 #include <sys/statfs.h>
4916   main ()
4917   {
4918   struct statfs fsd;
4919   return (statfs (".", &fsd, sizeof fsd, 0));
4920   }],
4921     fu_cv_sys_stat_statfs4=yes,
4922     fu_cv_sys_stat_statfs4=no,
4923     fu_cv_sys_stat_statfs4=no)])
4924   AC_MSG_RESULT($fu_cv_sys_stat_statfs4)
4925   if test $fu_cv_sys_stat_statfs4 = yes; then
4926     space=yes
4927     AC_DEFINE(STAT_STATFS4,1,[Whether statfs requires 4 arguments])
4928   fi
4931 if test $space = no; then
4932 # 4.4BSD and NetBSD
4933   AC_MSG_CHECKING([for two-argument statfs with statfs.fsize dnl
4934 member (4.4BSD and NetBSD)])
4935   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_fsize,
4936   [AC_TRY_RUN([#include <sys/types.h>
4937 #ifdef HAVE_SYS_PARAM_H
4938 #include <sys/param.h>
4939 #endif
4940 #ifdef HAVE_SYS_MOUNT_H
4941 #include <sys/mount.h>
4942 #endif
4943   main ()
4944   {
4945   struct statfs fsd;
4946   fsd.f_fsize = 0;
4947   return (statfs (".", &fsd));
4948   }],
4949   fu_cv_sys_stat_statfs2_fsize=yes,
4950   fu_cv_sys_stat_statfs2_fsize=no,
4951   fu_cv_sys_stat_statfs2_fsize=no)])
4952   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_fsize)
4953   if test $fu_cv_sys_stat_statfs2_fsize = yes; then
4954     space=yes
4955         AC_DEFINE(STAT_STATFS2_FSIZE,1,[Whether statfs requires 2 arguments and struct statfs has fsize])
4956   fi
4959 if test $space = no; then
4960   # Ultrix
4961   AC_MSG_CHECKING([for two-argument statfs with struct fs_data (Ultrix)])
4962   AC_CACHE_VAL(fu_cv_sys_stat_fs_data,
4963   [AC_TRY_RUN([#include <sys/types.h>
4964 #ifdef HAVE_SYS_PARAM_H
4965 #include <sys/param.h>
4966 #endif
4967 #ifdef HAVE_SYS_MOUNT_H
4968 #include <sys/mount.h>
4969 #endif
4970 #ifdef HAVE_SYS_FS_TYPES_H
4971 #include <sys/fs_types.h>
4972 #endif
4973   main ()
4974   {
4975   struct fs_data fsd;
4976   /* Ultrix's statfs returns 1 for success,
4977      0 for not mounted, -1 for failure.  */
4978   return (statfs (".", &fsd) != 1);
4979   }],
4980   fu_cv_sys_stat_fs_data=yes,
4981   fu_cv_sys_stat_fs_data=no,
4982   fu_cv_sys_stat_fs_data=no)])
4983   AC_MSG_RESULT($fu_cv_sys_stat_fs_data)
4984   if test $fu_cv_sys_stat_fs_data = yes; then
4985     space=yes
4986     AC_DEFINE(STAT_STATFS2_FS_DATA,1,[Whether statfs requires 2 arguments and struct fs_data is available])
4987   fi
4990 #################################################
4991 # check for cluster extensions
4993 AC_MSG_CHECKING(cluster support)
4994 AC_ARG_WITH(cluster-support,
4995 [AS_HELP_STRING([--with-cluster-support], [Enable cluster extensions (default=auto)])])
4997 if test x"$with_cluster_support" = x ; then
4998         with_cluster_support="auto"
5001 AC_MSG_RESULT($with_cluster_support)
5003 AC_ARG_WITH(ctdb,
5004 [AS_HELP_STRING([--with-ctdb=DIR], [Where to find ctdb sources])],
5005 [ case "$withval" in
5006   yes|no)
5007     AC_MSG_WARN([--with-ctdb called without argument])
5008     ;;
5009   *)
5010     CTDB_CPPFLAGS="-I$withval/include"
5011     ;;
5012   esac])
5014 AC_ARG_ENABLE(old-ctdb,
5015         [AS_HELP_STRING([--enable-old-ctdb],
5016                 [Enable build against (too) old ctdb version (default=no)])],,
5017                 [enable_old_ctdb=no])
5020 if test "$with_cluster_support" != "no" ; then
5022 AC_MSG_NOTICE(checking whether cluster support is available)
5024 have_cluster_support="yes"
5025 ctdb_broken="no"
5027 SAVED_CPPFLAGS="$CPPFLAGS"
5028 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS} $CTDB_CPPFLAGS"
5030 AC_CHECK_HEADERS(ctdb.h ctdb_private.h ctdb_protocol.h ,,,[
5031 #include "confdefs.h"
5032 #define NO_CONFIG_H
5033 #include "replace.h"
5034 #include "system/wait.h"
5035 #include "system/network.h"
5036 #define private #error __USED_RESERVED_WORD_private__
5037 #include <talloc.h>
5038 #include <tdb.h>
5039 #include <ctdb.h>
5042 if test "x$have_cluster_support" = "xyes" -a \
5043         "x$ac_cv_header_ctdb_h" != "xyes"
5044 then
5045         have_cluster_support=no
5046         ctdb_broken="ctdb.h is required for cluster support"
5049 if test "x$have_cluster_support" = "xyes" -a \
5050         "x$ac_cv_header_ctdb_private_h" != "xyes"
5051 then
5052         have_cluster_support=no
5053         ctdb_broken="ctdb_private.h is required for cluster support"
5057 if test "x$have_cluster_support" = "xyes" ; then
5058         AC_HAVE_DECL(CTDB_CONTROL_TRANS3_COMMIT,[
5059         #include "confdefs.h"
5060         #define NO_CONFIG_H
5061         #include "replace.h"
5062         #include "system/wait.h"
5063         #include "system/network.h"
5064         #include <talloc.h>
5065         #include <tdb.h>
5066         #include <ctdb.h>
5067         #include <ctdb_private.h>
5068         ])
5069         if test x"$ac_cv_have_CTDB_CONTROL_TRANS3_COMMIT_decl" != x"yes"; then
5070                 ctdb_broken="ctdb transaction support missing or too old"
5071                 have_cluster_support=no
5072         fi
5075 if test "x$have_cluster_support" = "xyes" ; then
5076         AC_HAVE_DECL(CTDB_CONTROL_SCHEDULE_FOR_DELETION,[
5077         #include "confdefs.h"
5078         #define NO_CONFIG_H
5079         #include "replace.h"
5080         #include "system/wait.h"
5081         #include "system/network.h"
5082         #include <talloc.h>
5083         #include <tdb.h>
5084         #include <ctdb.h>
5085         #include <ctdb_private.h>
5086         ])
5087         if test x"$ac_cv_have_CTDB_CONTROL_SCHEDULE_FOR_DELETION_decl" != x"yes"
5088         then
5089                 if test "x$enable_old_ctdb" = "xyes" ; then
5090                         AC_MSG_WARN([ignoring missing SCHEDULE_FOR_DELETION (--enable-old-ctdb)])
5091                 else
5092                         ctdb_broken="support for SCHEDULE_FOR_DELETION control missing"
5093                         have_cluster_support=no
5094                 fi
5095         fi
5098 if test "x$have_cluster_support" = "xyes" ; then
5099         AC_HAVE_DECL(CTDB_CONTROL_CHECK_SRVIDS,[
5100         #include "confdefs.h"
5101         #define NO_CONFIG_H
5102         #include "replace.h"
5103         #include "system/wait.h"
5104         #include "system/network.h"
5105         #include <talloc.h>
5106         #include <tdb.h>
5107         #include <ctdb.h>
5108         #include <ctdb_private.h>
5109         ])
5110         if test x"$ac_cv_have_CTDB_CONTROL_CHECK_SRVIDS_decl" != x"yes"
5111         then
5112                 if test "x$enable_old_ctdb" = "xyes" ; then
5113                         AC_MSG_WARN([ignoring missing CHECK_SRVIDS (--enable-old-ctdb)])
5114                 else
5115                         ctdb_broken="support for CHECK_SRVIDS control missing"
5116                         have_cluster_support=no
5117                 fi
5118         fi
5121 AC_ARG_ENABLE([ctdb-readonly-records],
5122         AS_HELP_STRING([--enable-ctdb-readonly-records],
5123                 [Turn on CTDB readonly records support (default=yes)]),
5124         [want_ctdb_readonly=$enableval],
5125         [want_ctdb_readonly=yes])
5127 if test "x$have_cluster_support" = "xyes" -a "x$want_ctdb_readonly" = "xyes" ; then
5128         AC_HAVE_DECL(CTDB_WANT_READONLY,[
5129         #include "confdefs.h"
5130         #define NO_CONFIG_H
5131         #include "replace.h"
5132         #include "system/wait.h"
5133         #include "system/network.h"
5134         #include <talloc.h>
5135         #include <tdb.h>
5136         #include <ctdb.h>
5137         ])
5139         if test "x$ac_cv_have_CTDB_WANT_READONLY_decl" != "xyes" ; then
5140                 if test "x$enable_old_ctdb" = "xyes" ; then
5141                         AC_MSG_WARN([ignoring missing READONLY support (--enable-old-ctdb)])
5142                 else
5143                         ctdb_broken="support for CTDB readonly records missing"
5144                         have_cluster_support=no
5145                 fi
5146         fi
5149 if test "x$have_cluster_support" = "xyes" ; then
5150         # In ctdb 1.0.57, ctdb_control_tcp was temporarily renamed
5151         # to ctdb_tcp_client.
5152         AC_CHECK_TYPE(struct ctdb_tcp_client,[
5153                 AC_DEFINE([ctdb_control_tcp],[ctdb_tcp_client],[ctdb ipv4 support])
5154         ],,[
5155         #include "confdefs.h"
5156         #define NO_CONFIG_H
5157         #include "replace.h"
5158         #include "system/wait.h"
5159         #include "system/network.h"
5160         #include <talloc.h>
5161         #include <tdb.h>
5162         #include <ctdb.h>
5163         #include <ctdb_private.h>
5164         ])
5167 if test "x$have_cluster_support" = "xyes" ; then
5168         AC_CHECK_TYPE(struct ctdb_control_tcp,[
5169                 AC_DEFINE([HAVE_STRUCT_CTDB_CONTROL_TCP],[1],[ctdb ipv4 support])
5170         ],[
5171                 ctdb_broken="missing struct ctdb_control_tcp"
5172                 have_cluster_support=no
5173         ],[
5174         #include "confdefs.h"
5175         #define NO_CONFIG_H
5176         #include "replace.h"
5177         #include "system/wait.h"
5178         #include "system/network.h"
5179         #include <talloc.h>
5180         #include <tdb.h>
5181         #include <ctdb.h>
5182         #include <ctdb_private.h>
5183         ])
5186 # test for optional ipv6 support in ctdb:
5187 if test "x$have_cluster_support" = "xyes" ; then
5188         AC_CHECK_TYPE(struct ctdb_control_tcp_addr,[
5189                 AC_DEFINE([HAVE_STRUCT_CTDB_CONTROL_TCP_ADDR],[1],[ctdb ipv6 support])
5190         ],,[
5191         #include "confdefs.h"
5192         #define NO_CONFIG_H
5193         #include "replace.h"
5194         #include "system/wait.h"
5195         #include "system/network.h"
5196         #include <talloc.h>
5197         #include <tdb.h>
5198         #include <ctdb.h>
5199         #include <ctdb_private.h>
5200         ])
5203 CPPFLAGS="$SAVED_CPPFLAGS"
5205 fi # (if test "$with_cluster_support" != "no")
5207 if test x"$have_cluster_support" = "xno" ; then
5208         case "$with_cluster_support" in
5209         yes)
5210                 AC_MSG_ERROR(["cluster support not available: $ctdb_broken"])
5211                 ;;
5212         auto)
5213                 AC_MSG_WARN(["cluster support not available: $ctdb_broken"])
5214                 ;;
5215         esac
5216         with_cluster_support=no
5219 if test "x$with_cluster_support" != "xno"; then
5220     AC_DEFINE(CLUSTER_SUPPORT,1,[Whether to enable cluster extensions])
5221     SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${CTDB_CPPFLAGS}"
5222     AC_MSG_NOTICE(Building with cluster support)
5223 else
5224     AC_MSG_NOTICE(Building without cluster support)
5228 #################################################
5229 # check for rtnetlink
5231 AC_CHECK_HEADERS([linux/netlink.h],
5232   AC_CHECK_HEADERS([linux/rtnetlink.h],[],[],
5233                    [#include <bits/sockaddr.h>
5234                     #include <linux/netlink.h>]),
5235   [],[#include <bits/sockaddr.h>])
5237 #################################################
5238 # check for ACL support
5240 AC_MSG_CHECKING(whether to support ACLs)
5241 AC_ARG_WITH(acl-support,
5242 [AS_HELP_STRING([--with-acl-support], [Include ACL support (default=auto)])],
5243 [ case "$withval" in
5244         yes|no)
5245                 with_acl_support="$withval"
5246                 ;;
5247   esac ])
5249 if test x"$with_acl_support" = x ; then
5250         with_acl_support="auto"
5253 AC_MSG_RESULT($with_acl_support)
5255 if test x"$with_acl_support" = x"no"; then
5256         AC_MSG_RESULT(Disabling ACL support)
5257 else
5258         AC_MSG_NOTICE(checking whether ACL support is available:)
5259         case "$host_os" in
5260         *sysv5*)
5261                 AC_MSG_NOTICE(Using UnixWare ACLs)
5262                 AC_DEFINE(HAVE_UNIXWARE_ACLS,1,[Whether UnixWare ACLs are available])
5263                 default_static_modules="$default_static_modules vfs_solarisacl"
5264                 ;;
5265         *solaris*)
5266                 AC_MSG_NOTICE(Using solaris ACLs)
5267                 AC_DEFINE(HAVE_SOLARIS_ACLS,1,[Whether solaris ACLs are available])
5268                 ACL_LIBS="$ACL_LIBS -lsec"
5269                 default_static_modules="$default_static_modules vfs_solarisacl"
5270                 ;;
5271         *hpux*)
5272                 AC_MSG_NOTICE(Using HPUX ACLs)
5273                 AC_DEFINE(HAVE_HPUX_ACLS,1,[Whether HPUX ACLs are available])
5274                 default_static_modules="$default_static_modules vfs_hpuxacl"
5275                 ;;
5276         *aix*)
5277                 AC_MSG_NOTICE(Using AIX ACLs)
5278                 AC_DEFINE(HAVE_AIX_ACLS,1,[Whether AIX ACLs are available])
5279                 default_static_modules="$default_static_modules vfs_aixacl"
5280                 ;;
5281         *osf*)
5282                 AC_MSG_NOTICE(Using Tru64 ACLs)
5283                 AC_DEFINE(HAVE_TRU64_ACLS,1,[Whether Tru64 ACLs are available])
5284                 ACL_LIBS="$ACL_LIBS -lpacl"
5285                 default_static_modules="$default_static_modules vfs_tru64acl"
5286                 ;;
5287         *darwin*)
5288                 AC_MSG_NOTICE(ACLs on Darwin currently not supported)
5289                 ;;
5290         *)
5291                 AC_CHECK_LIB(acl,acl_get_file,[ACL_LIBS="$ACL_LIBS -lacl"])
5292                 case "$host_os" in
5293                 *linux*)
5294                         AC_CHECK_LIB(attr,getxattr,[ACL_LIBS="$ACL_LIBS -lattr"])
5295                         ;;
5296                 esac
5297                 AC_CACHE_CHECK([for POSIX ACL support],samba_cv_HAVE_POSIX_ACLS,[
5298                         acl_LIBS=$LIBS
5299                         LIBS="$LIBS $ACL_LIBS"
5300                         AC_TRY_LINK([
5301                                 #include <sys/types.h>
5302                                 #include <sys/acl.h>
5303                         ],[
5304                                 acl_t acl;
5305                                 int entry_id;
5306                                 acl_entry_t *entry_p;
5307                                 return acl_get_entry(acl, entry_id, entry_p);
5308                         ],
5309                         [samba_cv_HAVE_POSIX_ACLS=yes],
5310                         [samba_cv_HAVE_POSIX_ACLS=no])
5311                         LIBS=$acl_LIBS
5312                 ])
5313                 if test x"$samba_cv_HAVE_POSIX_ACLS" = x"yes"; then
5314                         AC_MSG_NOTICE(Using posix ACLs)
5315                         AC_DEFINE(HAVE_POSIX_ACLS,1,[Whether POSIX ACLs are available])
5316                         AC_CACHE_CHECK([for acl_get_perm_np],samba_cv_HAVE_ACL_GET_PERM_NP,[
5317                                 acl_LIBS=$LIBS
5318                                 LIBS="$LIBS $ACL_LIBS"
5319                                 AC_TRY_LINK([
5320                                         #include <sys/types.h>
5321                                         #include <sys/acl.h>
5322                                 ],[
5323                                         acl_permset_t permset_d;
5324                                         acl_perm_t perm;
5325                                         return acl_get_perm_np(permset_d, perm);
5326                                 ],
5327                                 [samba_cv_HAVE_ACL_GET_PERM_NP=yes],
5328                                 [samba_cv_HAVE_ACL_GET_PERM_NP=no])
5329                                 LIBS=$acl_LIBS
5330                         ])
5331                         if test x"$samba_cv_HAVE_ACL_GET_PERM_NP" = x"yes"; then
5332                                 AC_DEFINE(HAVE_ACL_GET_PERM_NP,1,[Whether acl_get_perm_np() is available])
5333                         fi
5334                         default_static_modules="$default_static_modules vfs_posixacl"
5335                 else
5336                         AC_MSG_NOTICE(ACL support is not avaliable)
5337                 fi
5338                 ;;
5339         esac
5340 fi # with_acl_support
5342 #################################################
5343 # check if we have FreeBSD sunacl
5344 case "$host_os" in
5345 *freebsd*)
5346     AC_CHECK_HEADER(sunacl.h)
5347     if test x"$ac_cv_header_sunacl_h" = xyes ; then
5348        AC_DEFINE(HAVE_FREEBSD_SUNACL_H,1,[Whether we have FreeBSD sunacl around])
5349        ZFSACL_LIBS=-lsunacl
5350        AC_SUBST(ZFSACL_LIBS)
5351        default_shared_modules="$default_shared_modules vfs_zfsacl"
5352     fi
5353     ;;
5354 esac
5356 #################################################
5357 # check for AIO support
5359 with_aio=auto
5360 AC_MSG_CHECKING(whether to support asynchronous io)
5361 AC_ARG_WITH(aio-support,
5362 [AS_HELP_STRING([--with-aio-support], [Include asynchronous io support (default=auto)])],
5363 [  case "$withval" in
5364     yes|no)
5365         with_aio=$withval
5366         ;;
5367    esac ])
5369 AC_MSG_RESULT($with_aio)
5371 if test x"$with_aio" = x"no"; then
5372     AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support should be built in])
5373 else
5374                 AIO_LIBS=$LIBS
5375                 no_rt_LIBS=$LIBS
5376                 AC_CHECK_LIB(rt,aio_read,[AIO_LIBS="$LIBS -lrt"])
5377                 LIBS=$no_rt_LIBS
5378                 AC_CHECK_LIB(aio,aio_read,[AIO_LIBS="$LIBS -laio"])
5379                 AC_CACHE_CHECK([for asynchronous io support],samba_cv_HAVE_AIO,[
5380                 aio_LIBS=$LIBS
5381                 LIBS=$AIO_LIBS
5382                 AC_TRY_LINK([#include <sys/types.h>
5383 #include <aio.h>],
5384 [ struct aiocb a; return aio_read(&a);],
5385 samba_cv_HAVE_AIO=yes,samba_cv_HAVE_AIO=no)
5386                 LIBS=$aio_LIBS])
5387                 if test x"$samba_cv_HAVE_AIO" = x"yes"; then
5388                         AC_DEFINE(HAVE_AIO, 1, [Using asynchronous io])
5389                         LIBS=$AIO_LIBS
5390                         AC_MSG_CHECKING(for aio_read)
5391                         AC_LINK_IFELSE([AC_LANG_SOURCE([#include <aio.h>
5392 int main() { struct aiocb a; return aio_read(&a); }])],
5393 [AC_DEFINE(HAVE_AIO_READ, 1, [Have aio_read]) AC_MSG_RESULT(yes)],
5394 [AC_MSG_RESULT(no)])
5396                         AC_MSG_CHECKING(for aio_write)
5397                         AC_LINK_IFELSE([AC_LANG_SOURCE([#include <aio.h>
5398 int main() { struct aiocb a; return aio_write(&a); }])],
5399 [AC_DEFINE(HAVE_AIO_WRITE, 1, [Have aio_write]) AC_MSG_RESULT(yes)],
5400 [AC_MSG_RESULT(no)])
5402                         AC_MSG_CHECKING(for aio_fsync)
5403                         AC_LINK_IFELSE([AC_LANG_SOURCE([#include <aio.h>
5404 int main() { struct aiocb a; return aio_fsync(1, &a); }])],
5405 [AC_DEFINE(HAVE_AIO_FSYNC, 1, [Have aio_fsync]) AC_MSG_RESULT(yes)],
5406 [AC_MSG_RESULT(no)])
5408                         AC_MSG_CHECKING(for aio_return)
5409                         AC_LINK_IFELSE([AC_LANG_SOURCE([#include <aio.h>
5410 int main() { struct aiocb a; return aio_return(&a); }])],
5411 [AC_DEFINE(HAVE_AIO_RETURN, 1, [Have aio_return]) AC_MSG_RESULT(yes)],
5412 [AC_MSG_RESULT(no)])
5414                         AC_MSG_CHECKING(for aio_error)
5415                         AC_LINK_IFELSE([AC_LANG_SOURCE([#include <aio.h>
5416 int main() { struct aiocb a; return aio_error(&a); }])],
5417 [AC_DEFINE(HAVE_AIO_ERROR, 1, [Have aio_error]) AC_MSG_RESULT(yes)],
5418 [AC_MSG_RESULT(no)])
5420                         AC_MSG_CHECKING(for aio_cancel)
5421                         AC_LINK_IFELSE([AC_LANG_SOURCE([#include <aio.h>
5422 int main() { struct aiocb a; return aio_cancel(1, &a); }])],
5423 [AC_DEFINE(HAVE_AIO_CANCEL, 1, [Have aio_cancel]) AC_MSG_RESULT(yes)],
5424 [AC_MSG_RESULT(no)])
5426                         AC_MSG_CHECKING(for aio_suspend)
5427                         AC_LINK_IFELSE([AC_LANG_SOURCE([#include <aio.h>
5428 int main() { const struct aiocb * const [a[1]]; struct timespec t; return aio_suspend(a, 1, &t); }])],
5429 [AC_DEFINE(HAVE_AIO_SUSPEND, 1, [Have aio_suspend]) AC_MSG_RESULT(yes)],
5430 [AC_MSG_RESULT(no)])
5431                 else
5432                         AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support is available])
5433                         AC_MSG_RESULT(no)
5434                 fi
5437 if test x"$samba_cv_msghdr_msg_control" = x"yes" -o \
5438         x"$samba_cv_msghdr_msg_acctright" = x"yes"; then
5439         default_shared_modules="$default_shared_modules vfs_aio_fork"
5442 # Check for Linux kernel aio support.
5443 case "$host_os" in
5444 *linux*)
5445     AC_CHECK_LIB(aio,io_submit,[AIO_LIBS="$LIBS -laio"])
5446     AC_CACHE_CHECK([for Linux kernel asynchronous io support],samba_cv_HAVE_LINUX_KERNEL_AIO,[
5447     aio_LIBS=$LIBS
5448     LIBS=$AIO_LIBS
5449     AC_TRY_LINK([#include <unistd.h>
5450 #include <stdlib.h>
5451 #include <sys/types.h>
5452 #include <fcntl.h>
5453 #include <sys/eventfd.h>
5454 #include <libaio.h>],
5455 [ struct io_event ioev;
5456 struct iocb *ioc;
5457 io_context_t ctx;
5458 struct timespec ts;
5459 int fd;
5460 char *buf;
5461 fd = eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
5462 io_queue_init(128,&ctx);
5463 io_prep_pwrite(ioc, 1, buf, 1, 0);
5464 io_prep_pread(ioc, 1, buf, 1, 0);
5465 io_set_eventfd(ioc, fd);
5466 io_set_callback(ioc, (io_callback_t)(0));
5467 io_submit(ctx, 1, &ioc);
5468 io_getevents(ctx, 1, 1, &ioev, &ts);],
5469 samba_cv_HAVE_LINUX_KERNEL_AIO=yes,samba_cv_HAVE_LINUX_KERNEL_AIO=no)
5470                 LIBS=$aio_LIBS])
5471     if test x"$samba_cv_HAVE_LINUX_KERNEL_AIO" = x"yes"; then
5472         default_shared_modules="$default_shared_modules vfs_aio_linux"
5473     fi
5474     ;;
5475 esac
5477 if test x"$samba_cv_HAVE_AIO" = x"yes"; then
5478   default_shared_modules="$default_shared_modules vfs_aio_posix"
5481 #################################################
5482 # check for sendfile support
5484 AC_MSG_CHECKING(whether sendfile support should be built in)
5485 AC_ARG_WITH(sendfile-support,
5486 [AS_HELP_STRING([--with-sendfile-support], [Whether sendfile support should be built in (default=auto)])],
5487 [ case "$withval" in
5488   yes|no)
5489         AC_MSG_RESULT($withval);
5490         with_sendfile_support=$withval
5491         ;;
5492   *)
5493         AC_MSG_RESULT(yes)
5494         with_sendfile_support=auto
5495         ;;
5496   esac ],
5499 if test x$with_sendfile_support != xno ; then
5500     case "$host_os" in
5501         *linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu)
5502                 AC_CACHE_CHECK([for linux sendfile support],samba_cv_HAVE_SENDFILE,[
5503                 AC_TRY_LINK([#include <sys/sendfile.h>],
5505 int tofd, fromfd;
5506 off_t offset;
5507 size_t total;
5508 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
5510 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5512         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5513                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5514                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
5515                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
5516         else
5517                 AC_MSG_RESULT(no);
5518         fi
5520         ;;
5521         *freebsd* | *dragonfly* )
5522                 AC_CACHE_CHECK([for freebsd sendfile support],samba_cv_HAVE_SENDFILE,[
5523                 AC_TRY_LINK([\
5524 #include <sys/types.h>
5525 #include <unistd.h>
5526 #include <sys/socket.h>
5527 #include <sys/uio.h>],
5529         int fromfd, tofd, ret, total=0;
5530         off_t offset, nwritten;
5531         struct sf_hdtr hdr;
5532         struct iovec hdtrl;
5533         hdr.headers = &hdtrl;
5534         hdr.hdr_cnt = 1;
5535         hdr.trailers = NULL;
5536         hdr.trl_cnt = 0;
5537         hdtrl.iov_base = NULL;
5538         hdtrl.iov_len = 0;
5539         ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0);
5541 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5543         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5544                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() support is available])
5545                 AC_DEFINE(FREEBSD_SENDFILE_API,1,[Whether the FreeBSD sendfile() API is available])
5546                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5547         else
5548                 AC_MSG_RESULT(no);
5549         fi
5550         ;;
5551         *darwin*)
5552                 AC_CACHE_CHECK([for Darwin sendfile support],
5553                         samba_cv_HAVE_SENDFILE,
5554                         [
5555                         AC_TRY_LINK([
5556 #include <sys/types.h>
5557 #include <sys/socket.h>
5558 #include <sys/uio.h>
5559                         ],
5560                         [
5561         int fromfd, tofd, ret;
5562         off_t offset, nwritten;
5563         struct sf_hdtr hdr;
5564         struct iovec hdtrl;
5565         hdr.headers = &hdtrl;
5566         hdr.hdr_cnt = 1;
5567         hdr.trailers = (void *)0;
5568         hdr.trl_cnt = 0;
5569         hdtrl.iov_base = (void *)0;
5570         hdtrl.iov_len = 0;
5571         ret = sendfile(fromfd, tofd, offset, &nwritten, &hdr, 0);
5572                         ],
5573                         samba_cv_HAVE_SENDFILE=yes,
5574                         samba_cv_HAVE_SENDFILE=no)])
5576         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5577                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() support is available])
5578                 AC_DEFINE(DARWIN_SENDFILE_API,1,[Whether the Darwin sendfile() API is available])
5579                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5580         else
5581                 AC_MSG_RESULT(no);
5582         fi
5583         ;;
5584         *hpux*|*osf*)
5585                 AC_CACHE_CHECK([for osf/hpux sendfile support],samba_cv_HAVE_SENDFILE,[
5586                 AC_TRY_LINK([\
5587 #include <sys/socket.h>
5588 #include <sys/uio.h>],
5590         int fromfd, tofd;
5591         size_t total=0;
5592         struct iovec hdtrl[2];
5593         ssize_t nwritten;
5594         off_t offset;
5596         hdtrl[0].iov_base = 0;
5597         hdtrl[0].iov_len = 0;
5599         nwritten = sendfile(tofd, fromfd, offset, total, &hdtrl[0], 0);
5601 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5602         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5603                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5604                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the osf/hpux sendfile() API is available])
5605                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5606         else
5607                 AC_MSG_RESULT(no);
5608         fi
5609         ;;
5611         *solaris*)
5612                 AC_CHECK_LIB(sendfile,sendfilev)
5613                 AC_CACHE_CHECK([for solaris sendfilev support],samba_cv_HAVE_SENDFILEV,[
5614                 AC_TRY_LINK([\
5615 #include <sys/sendfile.h>],
5617         int sfvcnt;
5618         size_t xferred;
5619         struct sendfilevec vec[2];
5620         ssize_t nwritten;
5621         int tofd;
5623         sfvcnt = 2;
5625         vec[0].sfv_fd = SFV_FD_SELF;
5626         vec[0].sfv_flag = 0;
5627         vec[0].sfv_off = 0;
5628         vec[0].sfv_len = 0;
5630         vec[1].sfv_fd = 0;
5631         vec[1].sfv_flag = 0;
5632         vec[1].sfv_off = 0;
5633         vec[1].sfv_len = 0;
5634         nwritten = sendfilev(tofd, vec, sfvcnt, &xferred);
5636 samba_cv_HAVE_SENDFILEV=yes,samba_cv_HAVE_SENDFILEV=no)])
5638         if test x"$samba_cv_HAVE_SENDFILEV" = x"yes"; then
5639                 AC_DEFINE(HAVE_SENDFILEV,1,[Whether sendfilev() is available])
5640                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the solaris sendfile() API is available])
5641                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
5642         else
5643                 AC_MSG_RESULT(no);
5644         fi
5645         ;;
5646         *aix*)
5647                 AC_CACHE_CHECK([for AIX send_file support],samba_cv_HAVE_SENDFILE,[
5648                 AC_TRY_LINK([\
5649 #include <sys/socket.h>],
5651         int fromfd, tofd;
5652         size_t total=0;
5653         struct sf_parms hdtrl;
5654         ssize_t nwritten;
5656         hdtrl.header_data = 0;
5657         hdtrl.header_length = 0;
5658         hdtrl.file_descriptor = fromfd;
5659         hdtrl.file_offset = 0;
5660         hdtrl.file_bytes = 0;
5661         hdtrl.trailer_data = 0;
5662         hdtrl.trailer_length = 0;
5664         nwritten = send_file(&tofd, &hdtrl, 0);
5666 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5667         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5668                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5669                 AC_DEFINE(AIX_SENDFILE_API,1,[Whether the AIX send_file() API is available])
5670                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
5671         else
5672                 AC_MSG_RESULT(no);
5673         fi
5674         ;;
5675         *)
5676         ;;
5677     esac
5680 if test x$with_sendfile_support = xyes -a x"$samba_cv_HAVE_SENDFILE" != xyes ; then
5681         AC_MSG_ERROR(sendfile support requested but sendfile not available )
5684 ############################################
5685 # See if we have the Linux readahead syscall.
5687 AC_CACHE_CHECK([for Linux readahead],
5688                 samba_cv_HAVE_LINUX_READAHEAD,[
5689     AC_TRY_LINK([
5690 #if defined(HAVE_UNISTD_H)
5691 #include <unistd.h>
5692 #endif
5693 #include <fcntl.h>],
5694     [ssize_t err = readahead(0,0,0x80000);],
5695     samba_cv_HAVE_LINUX_READAHEAD=yes,
5696     samba_cv_HAVE_LINUX_READAHEAD=no)])
5698 if test x"$samba_cv_HAVE_LINUX_READAHEAD" = x"yes"; then
5699   AC_DEFINE(HAVE_LINUX_READAHEAD,1,
5700              [Whether Linux readahead is available])
5703 AC_HAVE_DECL(readahead, [#include <fcntl.h>])
5705 ############################################
5706 # See if we have the posix_fadvise syscall.
5708 AC_CACHE_CHECK([for posix_fadvise],
5709                 samba_cv_HAVE_POSIX_FADVISE,[
5710     AC_TRY_LINK([
5711 #if defined(HAVE_UNISTD_H)
5712 #include <unistd.h>
5713 #endif
5714 #include <fcntl.h>],
5715     [ssize_t err = posix_fadvise(0,0,0x80000,POSIX_FADV_WILLNEED);],
5716     samba_cv_HAVE_POSIX_FADVISE=yes,
5717     samba_cv_HAVE_POSIX_FADVISE=no)])
5719 if test x"$samba_cv_HAVE_POSIX_FADVISE" = x"yes"; then
5720   AC_DEFINE(HAVE_POSIX_FADVISE,1,
5721              [Whether posix_fadvise is available])
5724 ############################################
5725 # See if we have the openat syscall.
5727 AC_CACHE_CHECK([for openat],
5728                 samba_cv_HAVE_OPENAT,[
5729     AC_TRY_LINK([
5730 #if defined(HAVE_UNISTD_H)
5731 #include <unistd.h>
5732 #endif
5733 #include <fcntl.h>],
5734     [int fd = openat(AT_FDCWD, ".", O_RDONLY);],
5735     samba_cv_HAVE_OPENAT=yes,
5736     samba_cv_HAVE_OPENAT=no)])
5738 if test x"$samba_cv_HAVE_OPENAT" = x"yes"; then
5739     AC_DEFINE(HAVE_OPENAT,1, [Whether openat is available])
5742 ############################################
5743 # See if we have the Linux splice syscall.
5745 case "$host_os" in
5746 *linux*)
5747 AC_CACHE_CHECK([for Linux splice],
5748                 samba_cv_HAVE_LINUX_SPLICE,[
5749     AC_TRY_LINK([
5750 #if defined(HAVE_UNISTD_H)
5751 #include <unistd.h>
5752 #endif
5753 #include <fcntl.h>],
5754     [long ret = splice(0,0,1,0,400,SPLICE_F_MOVE);],
5755     samba_cv_HAVE_LINUX_SPLICE=yes,
5756     samba_cv_HAVE_LINUX_SPLICE=no)])
5759 samba_cv_HAVE_LINUX_SPLICE=no
5761 esac
5763 if test x"$samba_cv_HAVE_LINUX_SPLICE" = x"yes"; then
5764   AC_DEFINE(HAVE_LINUX_SPLICE,1,
5765              [Whether Linux splice is available])
5768 AC_HAVE_DECL(splice, [#include <fcntl.h>])
5770 ############################################
5771 # See if we have the a broken readlink syscall.
5773 AC_CACHE_CHECK([for a broken readlink syscall],samba_cv_HAVE_BROKEN_READLINK,[
5774 AC_TRY_RUN([#include "${srcdir-.}/../tests/readlink.c"],
5775         samba_cv_HAVE_BROKEN_READLINK=no,samba_cv_HAVE_BROKEN_READLINK=yes,samba_cv_HAVE_BROKEN_READLINK=cross)
5777 if test x"$samba_cv_HAVE_BROKEN_READLINK" = x"yes"; then
5778         AC_DEFINE(HAVE_BROKEN_READLINK,1,[Whether the readlink syscall is broken])
5781 #################################################
5782 # Check whether winbind is supported on this platform.  If so we need to
5783 # build and install client programs, sbin programs and shared libraries
5785 AC_MSG_CHECKING(whether to build winbind)
5787 # Initially, the value of $host_os decides whether winbind is supported
5789 HAVE_WINBIND=yes
5790 HAVE_WBCLIENT=no
5792 # Define external wbclient library to link against.  This disables winbind.
5793 # We define this here so --with-winbind can override it.
5794 AC_ARG_WITH(wbclient,
5795 [AS_HELP_STRING([--with-wbclient], [Use external wbclient (optional)])],
5797   case "$withval" in
5798         no)
5799                 HAVE_WBCLIENT=no
5800                 ;;
5801         yes)
5802                 HAVE_WBCLIENT=yes
5803                 HAVE_WINBIND=no
5804                 ;;
5805         *)
5806                 HAVE_WBCLIENT=yes
5807                 HAVE_WINBIND=no
5808                 WBCLIENT_INCLUDES="-I$withval/include"
5809                 WBCLIENT_LDFLAGS="-L$withval/lib"
5810                 ;;
5811   esac ],
5814 AC_SUBST(WBCLIENT_INCLUDES)
5815 AC_SUBST(WBCLIENT_LDFLAGS)
5816 AC_SUBST(WBCLIENT_LIBS)
5819 # Define the winbind shared library name and any specific linker flags
5820 # it needs to be built with.
5822 WINBIND_NSS="../nsswitch/libnss_winbind.$SHLIBEXT"
5823 WINBIND_WINS_NSS="../nsswitch/libnss_wins.$SHLIBEXT"
5824 WINBIND_NSS_LDSHFLAGS=$LDSHFLAGS
5825 NSSSONAMEVERSIONSUFFIX=""
5827 case "$host_os" in
5828         *linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu)
5829                 NSSSONAMEVERSIONSUFFIX=".2"
5830                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_linux.o"
5831                 ;;
5832         *freebsd[[5-9]]* | *freebsd1[[0-9]]*)
5833                 # FreeBSD winbind client is implemented as a wrapper around
5834                 # the Linux version.
5835                 NSSSONAMEVERSIONSUFFIX=".1"
5836                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_freebsd.o \
5837                     ../nsswitch/winbind_nss_linux.o"
5838                 WINBIND_NSS="../nsswitch/nss_winbind.$SHLIBEXT"
5839                 WINBIND_WINS_NSS="../nsswitch/nss_wins.$SHLIBEXT"
5840                 ;;
5842         *netbsd*[[3-9]]* | *netbsd1[[0-9]]*)
5843                 # NetBSD winbind client is implemented as a wrapper
5844                 # around the Linux version. It needs getpwent_r() to
5845                 # indicate libc's use of the correct nsdispatch API.
5846                 #
5847                 if test x"$ac_cv_func_getpwent_r" = x"yes"; then
5848                         WINBIND_NSS_EXTRA_OBJS="\
5849                             ../nsswitch/winbind_nss_netbsd.o \
5850                             ../nsswitch/winbind_nss_linux.o"
5851                         WINBIND_NSS="../nsswitch/nss_winbind.$SHLIBEXT"
5852                         WINBIND_WINS_NSS="../nsswitch/nss_wins.$SHLIBEXT"
5853                 else
5854                         HAVE_WINBIND=no
5855                         winbind_no_reason=", getpwent_r is missing on $host_os so winbind is unsupported"
5856                 fi
5857                 ;;
5858         *irix*)
5859                 # IRIX has differently named shared libraries
5860                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_irix.o"
5861                 WINBIND_NSS="../nsswitch/libns_winbind.$SHLIBEXT"
5862                 WINBIND_WINS_NSS="../nsswitch/libns_wins.$SHLIBEXT"
5863                 ;;
5864         *solaris*)
5865                 # Solaris winbind client is implemented as a wrapper around
5866                 # the Linux version.
5867                 NSSSONAMEVERSIONSUFFIX=".1"
5868                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_solaris.o \
5869                     ../nsswitch/winbind_nss_linux.o"
5870                 ;;
5871         *hpux11*)
5872                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_solaris.o"
5873                 ;;
5874         *aix*)
5875                 # AIX has even differently named shared libraries.  No
5876                 # WINS support has been implemented yet.
5877                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_aix.o"
5878                 WINBIND_NSS_LDSHFLAGS="-Wl,-bexpall,-bM:SRE,-ewb_aix_init"
5879                 WINBIND_NSS="../nsswitch/WINBIND"
5880                 WINBIND_WINS_NSS=""
5881                 ;;
5882         *darwin*)
5883                 ;;
5884         *)
5885                 HAVE_WINBIND=no
5886                 winbind_no_reason=", unsupported on $host_os"
5887                 ;;
5888 esac
5890 # Check the setting of --with-winbind
5892 AC_ARG_WITH(winbind,
5893 [AS_HELP_STRING([--with-winbind], [Build winbind (default, if supported by OS)])],
5895   case "$withval" in
5896         yes)
5897                 HAVE_WINBIND=yes
5898                 HAVE_WBCLIENT=no
5899                 ;;
5900         no)
5901                 HAVE_WINBIND=no
5902                 winbind_reason=""
5903                 ;;
5904   esac ],
5907 # We need unix domain sockets for winbind
5909 if test x"$HAVE_WINBIND" = x"yes"; then
5910         if test x"$libreplace_cv_HAVE_UNIXSOCKET" = x"no"; then
5911                 winbind_no_reason=", no unix domain socket support on $host_os"
5912                 HAVE_WINBIND=no
5913         fi
5916 # Display test results
5918 if test x"$HAVE_WINBIND" = x"no"; then
5919         WINBIND_NSS=""
5920         WINBIND_WINS_NSS=""
5922 if test x"$HAVE_WBCLIENT" = x"yes"; then
5923         AC_CHECK_LIB(wbclient, wbcInterfaceDetails,
5924                      [LIBWBCLIENT_LIBS="-lwbclient"], AC_MSG_ERROR([Could not find wbclient]), [$WBCLIENT_LDFLAGS])
5925         LIBWBCLIENT_LIBS="$LIBWBCLIENT_LIBS $WBCLIENT_LDFLAGS"
5926         AC_MSG_RESULT(yes)
5927         AC_DEFINE(WITH_WINBIND,1,[Whether to link to wbclient])
5928         EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/wbinfo"
5929 else
5930         if test x"$enable_developer" = x"yes" -a x"$LINK_LIBWBCLIENT" = x"STATIC" ; then
5931                 BUILD_LIBWBCLIENT_SHARED=no
5932         else
5933                 BUILD_LIBWBCLIENT_SHARED=yes
5934         fi
5936         LIBWBCLIENT_SHARED_TARGET=bin/libwbclient.$SHLIBEXT
5937         LIBWBCLIENT_STATIC_TARGET=bin/libwbclient.a
5938         LIBWBCLIENT_SOVER=0
5939         LIBWBCLIENT_FULLVER=0
5940         LIBWBCLIENT_SHARED_TARGET_SOVER=$LIBWBCLIENT_SHARED_TARGET.$LIBWBCLIENT_SOVER
5941         LIBWBCLIENT_SHARED_TARGET_FULLVER=$LIBWBCLIENT_SHARED_TARGET.$LIBWBCLIENT_FULLVER
5942         if test $BLDSHARED = true -a x"$HAVE_WINBIND" = x"yes" -a x"$BUILD_LIBWBCLIENT_SHARED" = x"yes"; then
5943                 NSS_MODULES="${WINBIND_NSS} ${WINBIND_WINS_NSS}"
5944                 ## Only worry about libwbclient if we have shared
5945                 # library support
5946                 LIBWBCLIENT_SHARED=$LIBWBCLIENT_SHARED_TARGET
5947                 LIBWBCLIENT=libwbclient
5948                 INSTALL_LIBWBCLIENT=installlibwbclient
5949                 UNINSTALL_LIBWBCLIENT=uninstalllibwbclient
5950                 LIBWBCLIENT_LIBS="-lwbclient"
5951         else
5952                 LIBWBCLIENT_STATIC=$LIBWBCLIENT_STATIC_TARGET
5953                 LIBWBCLIENT_LIBS=$LIBWBCLIENT_STATIC_TARGET
5954         fi
5957 if test x"$HAVE_WINBIND" = x"yes"; then
5958         AC_MSG_RESULT(yes)
5959         AC_DEFINE(WITH_WINBIND,1,[Whether to build winbind])
5961         EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/wbinfo"
5962         EXTRA_SBIN_PROGS="$EXTRA_SBIN_PROGS bin/winbindd"
5963         if test $BLDSHARED = true -a x"$create_pam_modules" = x"yes"; then
5964                 PAM_MODULES="$PAM_MODULES pam_winbind"
5965                 INSTALL_PAM_MODULES="installpammodules"
5966                 UNINSTALL_PAM_MODULES="uninstallpammodules"
5967         fi
5969         # we use winbind, check for krb5 locate_plugin support:
5970         AC_CHECK_HEADERS([krb5/locate_plugin.h], [], [],
5971                 [[#ifdef HAVE_KRB5_H
5972                  #include <krb5.h>
5973                  #endif
5974         ]])
5975         if test x"$ac_cv_header_krb5_locate_plugin_h" = x"yes"; then
5976                 WINBIND_KRB5_LOCATOR="bin/winbind_krb5_locator.$SHLIBEXT"
5977                 if test x"$BLDSHARED" = x"true" ; then
5978                         EXTRA_ALL_TARGETS="$EXTRA_ALL_TARGETS $WINBIND_KRB5_LOCATOR"
5979                 fi
5980         fi
5981         # end of krb5 locate_plugin check
5982 else
5983         AC_MSG_RESULT(no$winbind_no_reason)
5986 AC_SUBST(WINBIND_NSS)
5987 AC_SUBST(WINBIND_WINS_NSS)
5988 AC_SUBST(WINBIND_NSS_LDSHFLAGS)
5989 AC_SUBST(WINBIND_NSS_EXTRA_OBJS)
5990 AC_SUBST(NSSSONAMEVERSIONSUFFIX)
5992 AC_SUBST(WINBIND_KRB5_LOCATOR)
5994 # Solaris 10 does have new member in nss_XbyY_key
5995 AC_CHECK_MEMBER(union nss_XbyY_key.ipnode.af_family,
5996                 AC_DEFINE(HAVE_NSS_XBYY_KEY_IPNODE, 1, [Defined if union nss_XbyY_key has ipnode field]),,
5997                 [#include <nss_dbdefs.h>])
5999 # Solaris has some extra fields in struct passwd that need to be
6000 # initialised otherwise nscd crashes.
6002 AC_CHECK_MEMBER(struct passwd.pw_comment,
6003                 AC_DEFINE(HAVE_PASSWD_PW_COMMENT, 1, [Defined if struct passwd has pw_comment field]),,
6004                 [#include <pwd.h>])
6006 AC_CHECK_MEMBER(struct passwd.pw_age,
6007                 AC_DEFINE(HAVE_PASSWD_PW_AGE, 1, [Defined if struct passwd has pw_age field]),,
6008                 [#include <pwd.h>])
6010 # AIX 4.3.x and 5.1 do not have as many members in
6011 # struct secmethod_table as AIX 5.2
6012 AC_CHECK_MEMBERS([struct secmethod_table.method_attrlist], , ,
6013        [#include <usersec.h>])
6014 AC_CHECK_MEMBERS([struct secmethod_table.method_version], , ,
6015        [#include <usersec.h>])
6017 #################################################
6018 # Check to see if we should use the included popt
6020 AC_ARG_WITH(included-popt,
6021 [AS_HELP_STRING([--with-included-popt], [use bundled popt library, not from system])],
6023   case "$withval" in
6024         yes)
6025                 INCLUDED_POPT=yes
6026                 ;;
6027         no)
6028                 INCLUDED_POPT=no
6029                 ;;
6030   esac ],
6032 if test x"$INCLUDED_POPT" != x"yes"; then
6033     AC_CHECK_LIB(popt, poptGetContext,
6034                  INCLUDED_POPT=no, INCLUDED_POPT=yes)
6037 AC_MSG_CHECKING(whether to use included popt)
6038 if test x"$INCLUDED_POPT" = x"yes"; then
6039     AC_MSG_RESULT(yes)
6040     BUILD_POPT='$(POPT_OBJ)'
6041     POPTLIBS='$(POPT_OBJ)'
6042     FLAGS1="-I\$(srcdir)/../lib/popt"
6043 else
6044     AC_MSG_RESULT(no)
6045         BUILD_POPT=""
6046     POPTLIBS="-lpopt"
6048 AC_SUBST(BUILD_POPT)
6049 AC_SUBST(POPTLIBS)
6050 AC_SUBST(FLAGS1)
6052 #################################################
6053 # Check if user wants DNS service discovery support
6055 AC_ARG_ENABLE(dnssd,
6056 [AS_HELP_STRING([--enable-dnssd], [Enable DNS service discovery support (default=no)])])
6058 AC_SUBST(DNSSD_LIBS)
6059 if test x"$enable_dnssd" = x"yes"; then
6060     have_dnssd_support=yes
6062     AC_CHECK_HEADERS(dns_sd.h)
6063     if test x"$ac_cv_header_dns_sd_h" != x"yes"; then
6064         have_dnssd_support=no
6065     fi
6067     # On Darwin the DNSSD API is in libc, but on other platforms it's
6068     # probably in -ldns_sd
6069     AC_CHECK_FUNCS(DNSServiceRegister)
6070     AC_CHECK_LIB_EXT(dns_sd, DNSSD_LIBS, DNSServiceRegister)
6071     if test x"$ac_cv_func_DNSServiceRegister" != x"yes" -a \
6072             x"$ac_cv_lib_ext_dns_sd_DNSServiceRegister" != x"yes"; then
6073         have_dnssd_support=no
6074     fi
6076     if test x"$have_dnssd_support" = x"yes"; then
6077         AC_DEFINE(WITH_DNSSD_SUPPORT, 1,
6078                 [Whether to enable DNS service discovery support])
6079     else
6080         if test x"$enable_dnssd" = x"yes"; then
6081             AC_MSG_ERROR(DNS service discovery support not available)
6082         fi
6083     fi
6087 #################################################
6088 # Check if user wants avahi support
6090 AC_ARG_ENABLE(avahi,
6091 [AS_HELP_STRING([--enable-avahi], [Enable Avahi support (default=auto)])])
6093 if test x"$enable_avahi" != x"no"; then
6094     have_avahi_support=yes
6096     AC_CHECK_HEADERS(avahi-common/watch.h)
6097     if test x"$ac_cv_header_avahi_common_watch_h" != x"yes"; then
6098         have_avahi_support=no
6099     fi
6101     AC_CHECK_HEADERS(avahi-client/client.h)
6102     if test x"$ac_cv_header_avahi_common_watch_h" != x"yes"; then
6103         have_avahi_support=no
6104     fi
6106     save_LIBS="$LIBS"
6107     AC_CHECK_LIB(avahi-client, avahi_client_new,[have_avahi_client_new=yes])
6108     AC_CHECK_LIB(avahi-common, avahi_strerror,[have_avahi_strerror=yes])
6109     LIBS="$save_LIBS"
6111     if test x"$have_avahi_client_new" != x"yes" -o \
6112        x"$have_avahi_strerror" != x"yes" ; then
6113         have_avahi_support=no
6114     fi
6116     if test x"$have_avahi_support" = x"yes"; then
6117         AC_SUBST(AVAHI_LIBS, "-lavahi-client -lavahi-common")
6118         AC_DEFINE(WITH_AVAHI_SUPPORT, 1,
6119                 [Whether to enable avahi support])
6120         AC_SUBST(AVAHI_OBJ, "lib/avahi.o smbd/avahi_register.o")
6121     else
6122         if test x"$enable_avahi" = x"yes"; then
6123             AC_MSG_ERROR(avahi support not available)
6124         fi
6125     fi
6129 #################################################
6130 # Set pthread stuff
6132 PTHREAD_CFLAGS=error
6133 PTHREAD_LDFLAGS=error
6135 # If it's error, then the user didn't 
6136 # define it.
6137 if test "x$PTHREAD_LDFLAGS" = xerror; then
6138   AC_CHECK_LIB(pthread, pthread_attr_init, [
6139              PTHREAD_CFLAGS="-D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS"
6140              PTHREAD_LDFLAGS="-lpthread" ])
6143 if test "x$PTHREAD_LDFLAGS" = xerror; then
6144   AC_CHECK_LIB(pthreads, pthread_attr_init, [
6145              PTHREAD_CFLAGS="-D_THREAD_SAFE"
6146              PTHREAD_LDFLAGS="-lpthreads" ])
6149 if test "x$PTHREAD_LDFLAGS" = xerror; then
6150    AC_CHECK_LIB(c_r, pthread_attr_init, [
6151                 PTHREAD_CFLAGS="-D_THREAD_SAFE -pthread"
6152                 PTHREAD_LDFLAGS="-pthread" ])
6155 if test "x$PTHREAD_LDFLAGS" = xerror; then
6156    AC_CHECK_FUNC(pthread_attr_init, [
6157                  PTHREAD_CFLAGS="-D_REENTRANT"
6158                  PTHREAD_LDFLAGS="-lpthread" ])
6161 # especially for HP-UX, where the AC_CHECK_FUNC macro fails to test for
6162 # pthread_attr_init. On pthread_mutex_lock it works there...
6163 if test "x$PTHREAD_LDFLAGS" = xerror; then
6164    AC_CHECK_LIB(pthread, pthread_mutex_lock, [
6165                 PTHREAD_CFLAGS="-D_REENTRANT"
6166                 PTHREAD_LDFLAGS="-lpthread" ])
6169 AC_SUBST(PTHREAD_CFLAGS)
6170 AC_SUBST(PTHREAD_LDFLAGS)
6172 samba_cv_HAVE_PTHREAD=no
6173 if test x"$PTHREAD_CFLAGS" != xerror -a x"$PTHREAD_LDFLAGS" != xerror; then
6174         samba_cv_HAVE_PTHREAD=yes
6175         # now check for pthread.h with pthread-correct CFLAGS and LDFLAGS:
6176         ac_save_CFLAGS=$CFLAGS
6177         CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
6178         ac_save_LDFLAGS=$LDFLAGS
6179         LDFLAGS="$LDFLAGS $PTHREAD_LDFLAGS"
6180         AC_CHECK_HEADERS(pthread.h)
6181         CFLAGS=$ac_save_CFLAGS
6182         LDFLAGS=$ac_save_LDFLAGS
6183         AC_DEFINE(HAVE_PTHREAD, 1, [Do we have pthreads around?])
6186 #################################################
6187 # Check if user wants pthreadpool support
6189 AC_ARG_ENABLE(pthreadpool,
6190 [AS_HELP_STRING([--enable-pthreadpool], [Enable pthreads pool helper support (default=yes)])])
6192 if test x"$enable_pthreadpool" = xyes -a x"$samba_cv_HAVE_PTHREAD" != x"yes"; then
6193         AC_MSG_ERROR([pthreadpool support cannot be enabled when pthread support was not found])
6196 if test x"$enable_pthreadpool" != x"no" -a x"$samba_cv_HAVE_PTHREAD" = x"yes"; then
6197     LIBS="$LIBS $PTHREAD_LDFLAGS"
6198     CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
6199     AC_SUBST(PTHREADPOOL_OBJ, "lib/pthreadpool/pthreadpool.o")
6200     default_shared_modules="$default_shared_modules vfs_aio_pthread"
6201 else
6202     AC_SUBST(PTHREADPOOL_OBJ, "lib/pthreadpool/pthreadpool_sync.o")
6205 PTHREADPOOLTEST="bin/pthreadpooltest"
6206 AC_SUBST(PTHREADPOOLTEST)
6209 #################################################
6210 # Check to see if we should use the included iniparser
6212 AC_ARG_WITH(included-iniparser,
6213 [AS_HELP_STRING([--with-included-iniparser], [use bundled iniparser library, not from system])],
6215   case "$withval" in
6216         yes)
6217                 INCLUDED_INIPARSER=yes
6218                 ;;
6219         no)
6220                 INCLUDED_INIPARSER=no
6221                 ;;
6222   esac ],
6224 if test x"$INCLUDED_INIPARSER" != x"yes"; then
6225     AC_CHECK_LIB(iniparser, iniparser_load,
6226                  INCLUDED_INIPARSER=no, INCLUDED_INIPARSER=yes)
6229 AC_MSG_CHECKING(whether to use included iniparser)
6230 if test x"$INCLUDED_INIPARSER" = x"yes"; then
6231     AC_MSG_RESULT(yes)
6232     BUILD_INIPARSER='$(INIPARSER_OBJ)'
6233         INIPARSERLIBS=""
6234     FLAGS1="$FLAGS1 -I\$(srcdir)/../lib/iniparser/src"
6235 else
6236     AC_MSG_RESULT(no)
6237         BUILD_INIPARSER=""
6238     INIPARSERLIBS="-liniparser"
6240 AC_SUBST(BUILD_INIPARSER)
6241 AC_SUBST(INIPARSERLIBS)
6242 AC_SUBST(FLAGS1)
6244 AC_ARG_ENABLE(fault-handler,[AS_HELP_STRING([--disable-fault-handler], [Disable the default handler])])
6246 if test x"$enable_fault_handler" = x"no"; then
6247         AC_DEFINE(HAVE_DISABLE_FAULT_HANDLER, 1, [Disable the default signal handler])
6250 ###################################################
6251 # Check for different/missing (set|get|end)netgrent prototypes
6252 CFLAGS_SAVE=$CFLAGS
6253 if test x"$samba_cv_HAVE_Werror_implicit_function_declaration" = x"yes"; then
6254         CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
6256 AC_CACHE_CHECK([for setnetgrent prototype],samba_cv_setnetgrent_prototype, [
6257     AC_TRY_COMPILE([#include<netdb.h>
6258                     #ifdef HAVE_NETGROUP_H
6259                     #include<netgroup.h>
6260                     #endif],[setnetgrent("foo")],
6261                     samba_cv_setnetgrent_prototype=yes, samba_cv_setnetgrent_prototype=no)])
6262 if test x"$samba_cv_setnetgrent_prototype" = x"yes"; then
6263     AC_DEFINE(HAVE_SETNETGRENT_PROTOTYPE, 1, [If setnetgrent prototype is defined])
6265 AC_CACHE_CHECK([for getnetgrent prototype],samba_cv_getnetgrent_prototype, [
6266     AC_TRY_COMPILE([#include<netdb.h>
6267                     #ifdef HAVE_NETGROUP_H
6268                     #include<netgroup.h>
6269                     #endif],[char *dom, *user,*host; getnetgrent(&dom,&user,&host)],
6270                     samba_cv_getnetgrent_prototype=yes, samba_cv_getnetgrent_prototype=no)])
6271 if test x"$samba_cv_getnetgrent_prototype" = x"yes"; then
6272     AC_DEFINE(HAVE_GETNETGRENT_PROTOTYPE, 1, [If getnetgrent prototype is defined])
6274 AC_CACHE_CHECK([for endnetgrent prototype],samba_cv_endnetgrent_prototype, [
6275     AC_TRY_COMPILE([#include<netdb.h>
6276                     #ifdef HAVE_NETGROUP_H
6277                     #include<netgroup.h>
6278                     #endif],[endnetgrent()],
6279                     samba_cv_endnetgrent_prototype=yes, samba_cv_endnetgrent_prototype=no)])
6280 if test x"$samba_cv_endnetgrent_prototype" = x"yes"; then
6281     AC_DEFINE(HAVE_ENDNETGRENT_PROTOTYPE, 1, [If endnetgrent prototype is defined])
6284 CFLAGS=$CFLAGS_SAVE
6286 # Checks for POSIX ignorant BSD style statvfs() function
6287 # Start
6288 AC_CHECK_HEADERS(sys/param.h sys/mount.h)
6290 AC_MSG_CHECKING([checking for posix ignorant *bsd style statfs struct])
6291 AC_CACHE_VAL(bsdstatvfs_cv_statfs,[
6292              AC_TRY_RUN([
6293                 #ifdef HAVE_SYS_PARAM_H
6294                 #include <sys/param.h>
6295                 #endif
6296                 #ifdef HAVE_SYS_MOUNT_H
6297                 #include <sys/mount.h>
6298                 #endif
6299                 int main (void)
6300                 {
6301                         struct statfs fsd;
6302                         fsd.f_bsize = 0;
6303                         fsd.f_iosize = 0;
6304                         return (statfs (".", &fsd));
6305                 }],
6306                 bsdstatvfs_cv_statfs=yes,
6307                 bsdstatvfs_cv_statfs=no,
6308                 bsdstatvfs_cv_statfs=no)])
6309 AC_MSG_RESULT($bsdstatvfs_cv_statfs)
6311 if test $bsdstatvfs_cv_statfs = yes; then
6312   AC_DEFINE(BSD_STYLE_STATVFS,1,[Whether statfs struct is *bsd style])
6314 # End of checks POSIX ignorant BSD style statvfs() function
6316 # Checks for the vfs_fileid module
6317 # Start
6318 AC_CHECK_FUNC(getmntent)
6320 AC_CHECK_HEADERS(sys/statfs.h)
6322 AC_MSG_CHECKING([vfs_fileid: checking for statfs() and struct statfs.f_fsid])
6323 AC_CACHE_VAL(vfsfileid_cv_statfs,[
6324              AC_TRY_RUN([
6325                 #include <sys/types.h>
6326                 #include <sys/statfs.h>
6327                 int main(void)
6328                 {
6329                         struct statfs fsd;
6330                         fsid_t fsid = fsd.f_fsid;
6331                         return statfs (".", &fsd);
6332                 }],
6333                 vfsfileid_cv_statfs=yes,
6334                 vfsfileid_cv_statfs=no,
6335                 vfsfileid_cv_statfs=cross)
6337 AC_MSG_RESULT($vfsfileid_cv_statfs)
6339 if test x"$ac_cv_func_getmntent" = x"yes" -a \
6340         x"$vfsfileid_cv_statfs" = x"yes"; then
6341         default_shared_modules="$default_shared_modules vfs_fileid"
6343 # End
6344 # Checks for the vfs_fileid module
6346 # btrfs features are dependent on Linux ioctl headers
6347 if test x"$ac_cv_header_sys_ioctl_h" = xyes -a \
6348         x"$ac_cv_header_linux_ioctl_h" = xyes; then
6349     default_shared_modules="$default_shared_modules vfs_btrfs"
6351 # End btrfs
6353 for i in `echo $default_static_modules | sed -e 's/,/ /g'`
6355         eval MODULE_DEFAULT_$i=STATIC
6356 done
6358 for i in `echo $default_shared_modules | sed -e 's/,/ /g'`
6360         dnl Fall back to static if we cannot build shared libraries
6361         eval MODULE_DEFAULT_$i=STATIC
6363         if test $BLDSHARED = true; then
6364                 eval MODULE_DEFAULT_$i=SHARED
6365         fi
6366 done
6368 dnl Always build these modules static
6369 MODULE_rpc_spoolss=STATIC
6370 MODULE_rpc_srvsvc=STATIC
6371 MODULE_idmap_tdb=STATIC
6372 MODULE_idmap_passdb=STATIC
6373 MODULE_idmap_nss=STATIC
6375 MODULE_nss_info_template=STATIC
6377 AC_ARG_WITH(static-modules,
6378 [AS_HELP_STRING([--with-static-modules=MODULES], [Comma-separated list of names of modules to statically link in])],
6379 [ if test $withval; then
6380         for i in `echo $withval | sed -e 's/,/ /g'`
6381         do
6382                 eval MODULE_$i=STATIC
6383         done
6384 fi ])
6386 AC_ARG_WITH(shared-modules,
6387 [AS_HELP_STRING([--with-shared-modules=MODULES], [Comma-separated list of names of modules to build shared])],
6388 [ if test $withval; then
6389         for i in `echo $withval | sed -e 's/,/ /g'`
6390         do
6391                         eval MODULE_$i=SHARED
6392         done
6393 fi ])
6395 # additionally, support pdb_ldap -> pdb_ldapsam replacement
6396 if test x"$MODULE_pdb_ldap" != x ; then
6397         MODULE_pdb_ldapsam="$MODULE_pdb_ldap"
6400 if test x"$MODULE_DEFAULT_vfs_notify_fam" = xSTATIC -o \
6401                 x"$MODULE_vfs_notify_fam" = xSTATIC ; then
6402         SMBD_FAM_LIBS="$SMB_FAM_LIBS"
6403         AC_SUBST(SMBD_FAM_LIBS)
6406 SMB_MODULE(pdb_ldapsam, passdb/pdb_ldap.o passdb/pdb_nds.o passdb/pdb_ipa.o passdb/pdb_ldap_util.o,
6407                    "bin/ldapsam.$SHLIBEXT", PDB,
6408                    [ PASSDB_LIBS="$PASSDB_LIBS $LDAP_LIBS" ] )
6409 SMB_MODULE(pdb_smbpasswd, passdb/pdb_smbpasswd.o, "bin/smbpasswd.$SHLIBEXT", PDB)
6410 SMB_MODULE(pdb_tdbsam, passdb/pdb_tdb.o, "bin/tdbsam.$SHLIBEXT", PDB)
6411 SMB_MODULE(pdb_wbc_sam, passdb/pdb_wbc_sam.o, "bin/wbc_sam.$SHLIBEXT", PDB)
6412 SMB_SUBSYSTEM(PDB,passdb/pdb_interface.o)
6414 SMB_MODULE(idmap_ldap, winbindd/idmap_ldap.o, "bin/ldap.$SHLIBEXT", IDMAP)
6415 SMB_MODULE(idmap_tdb, winbindd/idmap_tdb.o, "bin/tdb.$SHLIBEXT", IDMAP)
6416 SMB_MODULE(idmap_tdb2, winbindd/idmap_tdb2.o, "bin/tdb2.$SHLIBEXT", IDMAP)
6417 SMB_MODULE(idmap_passdb, winbindd/idmap_passdb.o, "bin/passdb.$SHLIBEXT", IDMAP)
6418 SMB_MODULE(idmap_nss, winbindd/idmap_nss.o, "bin/nss.$SHLIBEXT", IDMAP)
6419 SMB_MODULE(idmap_rid, winbindd/idmap_rid.o, "bin/rid.$SHLIBEXT", IDMAP)
6420 SMB_MODULE(idmap_autorid, winbindd/idmap_autorid.o, "bin/autorid.$SHLIBEXT", IDMAP)
6421 SMB_MODULE(idmap_ad, winbindd/idmap_ad.o, "bin/ad.$SHLIBEXT", IDMAP)
6422 SMB_MODULE(idmap_rfc2307, winbindd/idmap_rfc2307.o, "bin/rfc2307.$SHLIBEXT", IDMAP)
6423 SMB_MODULE(idmap_hash, \$(IDMAP_HASH_OBJ), "bin/hash.$SHLIBEXT", IDMAP)
6424 SMB_SUBSYSTEM(IDMAP, winbindd/idmap.o)
6426 SMB_MODULE(nss_info_template, winbindd/nss_info_template.o, "bin/template.$SHLIBEXT", NSS_INFO)
6427 SMB_SUBSYSTEM(NSS_INFO, winbindd/nss_info.o)
6429 SMB_MODULE(auth_sam, \$(AUTH_SAM_OBJ), "bin/sam.$SHLIBEXT", AUTH)
6430 SMB_MODULE(auth_unix, \$(AUTH_UNIX_OBJ), "bin/unix.$SHLIBEXT", AUTH)
6431 SMB_MODULE(auth_winbind, \$(AUTH_WINBIND_OBJ), "bin/winbind.$SHLIBEXT", AUTH)
6432 SMB_MODULE(auth_wbc, \$(AUTH_WBC_OBJ), "bin/wbc.$SHLIBEXT", AUTH)
6433 SMB_MODULE(auth_domain, \$(AUTH_DOMAIN_OBJ), "bin/domain.$SHLIBEXT", AUTH)
6434 SMB_MODULE(auth_builtin, \$(AUTH_BUILTIN_OBJ), "bin/builtin.$SHLIBEXT", AUTH)
6435 SMB_MODULE(auth_script, \$(AUTH_SCRIPT_OBJ), "bin/script.$SHLIBEXT", AUTH)
6436 SMB_SUBSYSTEM(AUTH,auth/auth.o)
6438 SMB_MODULE(vfs_default, \$(VFS_DEFAULT_OBJ), "bin/default.$SHLIBEXT", VFS)
6439 SMB_MODULE(vfs_recycle, \$(VFS_RECYCLE_OBJ), "bin/recycle.$SHLIBEXT", VFS)
6440 SMB_MODULE(vfs_audit, \$(VFS_AUDIT_OBJ), "bin/audit.$SHLIBEXT", VFS)
6441 SMB_MODULE(vfs_extd_audit, \$(VFS_EXTD_AUDIT_OBJ), "bin/extd_audit.$SHLIBEXT", VFS)
6442 SMB_MODULE(vfs_full_audit, \$(VFS_FULL_AUDIT_OBJ), "bin/full_audit.$SHLIBEXT", VFS)
6443 SMB_MODULE(vfs_netatalk, \$(VFS_NETATALK_OBJ), "bin/netatalk.$SHLIBEXT", VFS)
6444 SMB_MODULE(vfs_fake_perms, \$(VFS_FAKE_PERMS_OBJ), "bin/fake_perms.$SHLIBEXT", VFS)
6445 SMB_MODULE(vfs_fake_acls, \$(VFS_FAKE_ACLS_OBJ), "bin/fake_acls.$SHLIBEXT", VFS)
6446 SMB_MODULE(vfs_default_quota, \$(VFS_DEFAULT_QUOTA_OBJ), "bin/default_quota.$SHLIBEXT", VFS)
6447 SMB_MODULE(vfs_readonly, \$(VFS_READONLY_OBJ), "bin/readonly.$SHLIBEXT", VFS)
6448 SMB_MODULE(vfs_cap, \$(VFS_CAP_OBJ), "bin/cap.$SHLIBEXT", VFS)
6449 SMB_MODULE(vfs_expand_msdfs, \$(VFS_EXPAND_MSDFS_OBJ), "bin/expand_msdfs.$SHLIBEXT", VFS)
6450 SMB_MODULE(vfs_shadow_copy, \$(VFS_SHADOW_COPY_OBJ), "bin/shadow_copy.$SHLIBEXT", VFS)
6451 SMB_MODULE(vfs_shadow_copy2, \$(VFS_SHADOW_COPY2_OBJ), "bin/shadow_copy2.$SHLIBEXT", VFS)
6452 SMB_MODULE(vfs_afsacl, \$(VFS_AFSACL_OBJ), "bin/afsacl.$SHLIBEXT", VFS)
6453 SMB_MODULE(vfs_xattr_tdb, \$(VFS_XATTR_TDB_OBJ), "bin/xattr_tdb.$SHLIBEXT", VFS)
6454 SMB_MODULE(vfs_nfs4acl_xattr, \$(VFS_XATTR_TDB_OBJ), "bin/nfs4acl_xattr.$SHLIBEXT", VFS)
6455 SMB_MODULE(vfs_posixacl, \$(VFS_POSIXACL_OBJ), "bin/posixacl.$SHLIBEXT", VFS)
6456 SMB_MODULE(vfs_aixacl, \$(VFS_AIXACL_OBJ), "bin/aixacl.$SHLIBEXT", VFS)
6457 SMB_MODULE(vfs_aixacl2, \$(VFS_AIXACL2_OBJ), "bin/aixacl2.$SHLIBEXT", VFS)
6458 SMB_MODULE(vfs_solarisacl, \$(VFS_SOLARISACL_OBJ), "bin/solarisacl.$SHLIBEXT", VFS)
6459 SMB_MODULE(vfs_hpuxacl, \$(VFS_HPUXACL_OBJ), "bin/hpuxacl.$SHLIBEXT", VFS)
6460 SMB_MODULE(vfs_tru64acl, \$(VFS_TRU64ACL_OBJ), "bin/tru64acl.$SHLIBEXT", VFS)
6461 SMB_MODULE(vfs_catia, \$(VFS_CATIA_OBJ), "bin/catia.$SHLIBEXT", VFS)
6462 SMB_MODULE(vfs_streams_xattr, \$(VFS_STREAMS_XATTR_OBJ), "bin/streams_xattr.$SHLIBEXT", VFS)
6463 SMB_MODULE(vfs_streams_depot, \$(VFS_STREAMS_DEPOT_OBJ), "bin/streams_depot.$SHLIBEXT", VFS)
6464 SMB_MODULE(vfs_cacheprime, \$(VFS_CACHEPRIME_OBJ), "bin/cacheprime.$SHLIBEXT", VFS)
6465 SMB_MODULE(vfs_prealloc, \$(VFS_PREALLOC_OBJ), "bin/prealloc.$SHLIBEXT", VFS)
6466 SMB_MODULE(vfs_commit, \$(VFS_COMMIT_OBJ), "bin/commit.$SHLIBEXT", VFS)
6467 SMB_MODULE(vfs_gpfs, \$(VFS_GPFS_OBJ), "bin/gpfs.$SHLIBEXT", VFS)
6468 SMB_MODULE(vfs_readahead, \$(VFS_READAHEAD_OBJ), "bin/readahead.$SHLIBEXT", VFS)
6469 SMB_MODULE(vfs_tsmsm, \$(VFS_TSMSM_OBJ), "bin/tsmsm.$SHLIBEXT", VFS)
6470 SMB_MODULE(vfs_fileid, \$(VFS_FILEID_OBJ), "bin/fileid.$SHLIBEXT", VFS)
6471 SMB_MODULE(vfs_aio_fork, \$(VFS_AIO_FORK_OBJ), "bin/aio_fork.$SHLIBEXT", VFS)
6472 SMB_MODULE(vfs_aio_pthread, \$(VFS_AIO_PTHREAD_OBJ), "bin/aio_pthread.$SHLIBEXT", VFS)
6473 SMB_MODULE(vfs_aio_posix, \$(VFS_AIO_POSIX_OBJ), "bin/aio_posix.$SHLIBEXT", VFS)
6474 SMB_MODULE(vfs_aio_linux, \$(VFS_AIO_LINUX_OBJ), "bin/aio_linux.$SHLIBEXT", VFS)
6475 SMB_MODULE(vfs_preopen, \$(VFS_PREOPEN_OBJ), "bin/preopen.$SHLIBEXT", VFS)
6476 SMB_MODULE(vfs_syncops, \$(VFS_SYNCOPS_OBJ), "bin/syncops.$SHLIBEXT", VFS)
6477 SMB_MODULE(vfs_zfsacl, \$(VFS_ZFSACL_OBJ), "bin/zfsacl.$SHLIBEXT", VFS)
6478 SMB_MODULE(vfs_notify_fam, \$(VFS_NOTIFY_FAM_OBJ), "bin/notify_fam.$SHLIBEXT", VFS)
6479 SMB_MODULE(vfs_acl_xattr, \$(VFS_ACL_XATTR_OBJ), "bin/acl_xattr.$SHLIBEXT", VFS)
6480 SMB_MODULE(vfs_acl_tdb, \$(VFS_ACL_TDB_OBJ), "bin/acl_tdb.$SHLIBEXT", VFS)
6481 SMB_MODULE(vfs_smb_traffic_analyzer, \$(VFS_SMB_TRAFFIC_ANALYZER_OBJ), "bin/smb_traffic_analyzer.$SHLIBEXT", VFS)
6482 SMB_MODULE(vfs_dirsort, \$(VFS_DIRSORT_OBJ), "bin/dirsort.$SHLIBEXT", VFS)
6483 SMB_MODULE(vfs_scannedonly, \$(VFS_SCANNEDONLY_OBJ), "bin/scannedonly.$SHLIBEXT", VFS)
6484 SMB_MODULE(vfs_crossrename, \$(VFS_CROSSRENAME_OBJ), "bin/crossrename.$SHLIBEXT", VFS)
6485 SMB_MODULE(vfs_linux_xfs_sgid, \$(VFS_LINUX_XFS_SGID_OBJ), "bin/linux_xfs_sgid.$SHLIBEXT", VFS)
6486 SMB_MODULE(vfs_time_audit, \$(VFS_TIME_AUDIT_OBJ), "bin/time_audit.$SHLIBEXT", VFS)
6487 SMB_MODULE(vfs_media_harmony, \$(VFS_MEDIA_HARMONY_OBJ), "bin/media_harmony.$SHLIBEXT", VFS)
6488 SMB_MODULE(vfs_btrfs, \$(VFS_BTRFS_OBJ), "bin/btrfs.$SHLIBEXT", VFS)
6489 SMB_MODULE(vfs_ceph, \$(VFS_CEPH_OBJ), "bin/ceph.$SHLIBEXT", VFS)
6491 SMB_SUBSYSTEM(VFS,smbd/vfs.o)
6493 SMB_MODULE(perfcount_test, \$(PERFCOUNT_TEST), "bin/pc_test.$SHLIBEXT", PERFCOUNT)
6494 SMB_SUBSYSTEM(PERFCOUNT,smbd/perfcount.o)
6496 SMB_MODULE(gpext_registry, libgpo/gpext/registry.o, "bin/registry.$SHLIBEXT", GPEXT)
6497 SMB_MODULE(gpext_scripts, libgpo/gpext/scripts.o, "bin/scripts.$SHLIBEXT", GPEXT)
6498 SMB_MODULE(gpext_security, libgpo/gpext/security.o, "bin/security.$SHLIBEXT", GPEXT)
6499 SMB_SUBSYSTEM(GPEXT, libgpo/gpext/gpext.o)
6501 AC_DEFINE_UNQUOTED(STRING_STATIC_MODULES, "$string_static_modules", [String list of builtin modules])
6503 #################################################
6504 # do extra things if we are running insure
6506 if test "${ac_cv_prog_CC}" = "insure"; then
6507         CPPFLAGS="$CPPFLAGS -D__INSURE__"
6510 #################################################
6511 # If run from the build farm, enable NASTY hacks
6512 #################################################
6513 AC_MSG_CHECKING(whether to enable features for selftest)
6514 if test x"$selftest" = x"yes"; then
6515         AC_MSG_RESULT(yes)
6516         AC_DEFINE(ENABLE_SELFTEST, 1, [Support features needed for selftest])
6517         if test x"$selftest_possible" != xyes; then
6518                 AC_MSG_ERROR(selftest support only possible with python, including development headers, and perl installed)
6519         fi
6520 else
6521         AC_MSG_RESULT(no)
6524 #################################################
6525 # check for bad librt/libpthread interactions
6527 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes" -o \
6528     x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes" -o \
6529     x"$samba_cv_HAVE_AIO64" = x"yes" -o \
6530     x"$samba_cv_HAVE_AIO" = x"yes" ; then
6532 SMB_IF_RTSIGNAL_BUG(
6533         [
6534             # Have RT_SIGNAL bug, need to check whether the problem will
6535             # affect anything we have configured.
6537             rt_do_error=no
6538             if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
6539                 if test x"$rt_signal_lease_ok" = x"no" ; then
6540                     rt_do_error=yes
6541                 fi
6542             fi
6544             if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
6545                 if test x"$rt_signal_notify_ok" = x"no" ; then
6546                     rt_do_error=yes
6547                 fi
6548             fi
6550             if test x"$samba_cv_HAVE_AIO64" = x"yes" -o \
6551                     x"$samba_cv_HAVE_AIO" = x"yes" ; then
6552                 if test x"$rt_signal_aio_ok" = x"no" ; then
6553                     rt_do_error=yes
6554                 fi
6555             fi
6557             if test x"$rt_do_error" = x"yes" ; then
6558                 SMB_IS_LIBPTHREAD_LINKED(
6559                     [
6560                         cat<<MSG
6562 *** On this platforms, linking Samba against pthreads causes problems
6563 *** with the oplock and change notification mechanisms. You may be
6564 *** using pthreads as a side-effect of using the --with-aio-support
6565 *** or --with-profiling-data options. Please remove these and try again.
6568                     ],
6569                     [
6570                         cat<<MSG
6572 *** On this platform, the oplock and change notification mechanisms do not
6573 *** appear to work. Please report this problem to samba-technical@samba.org
6574 *** and attach the config.log file from this directory.
6577                     ])
6578                 AC_MSG_ERROR(unable to use realtime signals on this platform)
6579             fi
6580         ],
6581         [
6582             # no RT_SIGNAL bug, we are golden
6583             SMB_IS_LIBPTHREAD_LINKED(
6584                 [
6585                     AC_MSG_WARN(using libpthreads - this may degrade performance)
6586                 ])
6588         ],
6589         [
6590             # cross compiling, I hope you know what you are doing
6591             true
6592         ])
6596 m4_include(../lib/zlib/zlib.m4)
6598 AC_SUBST(ZLIB_LIBS)
6599 AC_SUBST(ZLIB_OBJS)
6600 AC_ZLIB([ZLIB_OBJS=""], [
6601         ZLIB_LIBS=""
6602         for o in adler32.o compress.o crc32.o gzio.o uncompr.o \
6603                      deflate.o trees.o zutil.o inflate.o infback.o \
6604                          inftrees.o inffast.o
6605         do
6606                 ZLIB_OBJS="$ZLIB_OBJS ../lib/zlib/$o"
6607         done
6608         CFLAGS="-I../lib/zlib $CFLAGS"
6611 AC_DEFINE(STATIC_gensec_MODULES, [gensec_spnego_init,gensec_ntlmssp_init,NULL],[gensec modules])
6612 AC_DEFINE(STATIC_gensec_MODULES_PROTO, [_MODULE_PROTO(gensec_spnego_init)_MODULE_PROTO(gensec_ntlmssp_init)],[gensec protos])
6614 AC_ARG_ENABLE(dmalloc, [AS_HELP_STRING([--enable-dmalloc], [Enable heap debugging [default=no]])])
6616 if test "x$enable_dmalloc" = xyes
6617 then
6618         AC_DEFINE(ENABLE_DMALLOC, 1, [Define to turn on dmalloc debugging])
6619         AC_DEFINE(DMALLOC_FUNC_CHECK, 1,
6620                   [Define to check invariants around some common functions])
6621         LIBS="$LIBS -ldmalloc"
6624 dnl Remove -L/usr/lib/? from LDFLAGS and LIBS
6625 LIB_REMOVE_USR_LIB(LDFLAGS)
6626 LIB_REMOVE_USR_LIB(LIBS)
6628 dnl Remove -I/usr/include/? from CFLAGS and CPPFLAGS
6629 CFLAGS_REMOVE_USR_INCLUDE(CFLAGS)
6630 CFLAGS_REMOVE_USR_INCLUDE(CPPFLAGS)
6632 #################################################
6633 # Display summary of libraries detected
6635 AC_MSG_RESULT([Using libraries:])
6636 AC_MSG_RESULT([    LIBS = $LIBS])
6637 if test x"$with_ads_support" != x"no"; then
6638     AC_MSG_RESULT([    KRB5_LIBS = $KRB5_LIBS])
6640 if test x"$with_ldap_support" != x"no"; then
6641     AC_MSG_RESULT([    LDAP_LIBS = $LDAP_LIBS])
6643 if test x"$have_dnssd_support" != x"no"; then
6644     AC_MSG_RESULT([    DNSSD_LIBS = $DNSSD_LIBS])
6646 AC_MSG_RESULT([    AUTH_LIBS = $AUTH_LIBS])
6648 #################################################
6649 # final configure stuff
6651 AC_MSG_CHECKING([configure summary])
6652 AC_TRY_RUN([#include "${srcdir-.}/../tests/summary.c"],
6653            AC_MSG_RESULT(yes),
6654            AC_MSG_ERROR([summary failure. Aborting config]); exit 1;,
6655            AC_MSG_WARN([cannot run when cross-compiling]))
6657 dnl Merge in developer cflags from now on
6658 AC_SUBST(DEVELOPER_CFLAGS)
6659 if test x"$krb5_developer" = x"yes" -o x"$developer" = x"yes" -o x"$picky_developer" = x"yes"; then
6660     CFLAGS="${CFLAGS} \$(DEVELOPER_CFLAGS) ${CFLAGS_APPEND}"
6663 # Stuff the smbd-only libraries at the end of the smbd link
6664 # path (if we have them).
6665 SMBD_LIBS="$samba_dmapi_libs"
6666 AC_SUBST(SMBD_LIBS)
6668 CFLAGS="${CFLAGS} \$(FLAGS)"
6669 CFLAGS="${CFLAGS} -D_SAMBA_BUILD_=3"
6671 # If we had to expand the includes, make tsure the output file is moved back
6672 AC_OUTPUT_COMMANDS([
6673 if test -f Makefile-noincludes -a ! -f Makefile -a ! -h Makefile ; then
6674         ln -s Makefile-noincludes Makefile
6678 AC_OUTPUT(Makefile
6679           script/findsmb smbadduser script/installbin.sh script/uninstallbin.sh
6680           lib/netapi/examples/Makefile
6681           lib/netapi/tests/Makefile
6682           pkgconfig/smbclient.pc
6683           pkgconfig/wbclient.pc
6684           pkgconfig/netapi.pc
6685           pkgconfig/smbsharemodes.pc
6686           ../examples/libsmbclient/Makefile.internal
6687           )
6689 #################################################
6690 # Print very concise instructions on building/use
6691 if test "x$enable_dmalloc" = xyes
6692 then
6693         AC_MSG_RESULT([Note: The dmalloc debug library will be included.  To turn it on use])
6694         AC_MSG_RESULT([      \$ eval \`dmalloc samba\`.])